@macintacos/caret 0.1.1
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/.claude-plugin/plugin.json +18 -0
- package/LICENSE +21 -0
- package/README.md +122 -0
- package/bin/caret +53 -0
- package/commands/debug.md +130 -0
- package/commands/demo.md +21 -0
- package/commands/discovery.md +35 -0
- package/dist/cli.js +32593 -0
- package/hooks/hooks.json +28 -0
- package/opencode/caret.plugin.ts +293 -0
- package/opencode/commands/debug.md +53 -0
- package/opencode/commands/demo.md +29 -0
- package/opencode/commands/discovery.md +31 -0
- package/package.json +65 -0
- package/ui/dist/assets/abap-CLvhMVsD.js +1 -0
- package/ui/dist/assets/actionscript-3--17pq3dv.js +1 -0
- package/ui/dist/assets/ada-C5qYipkI.js +1 -0
- package/ui/dist/assets/angular-html-Cg_qO4OQ.js +1 -0
- package/ui/dist/assets/angular-ts-BmV-Wd4K.js +1 -0
- package/ui/dist/assets/apache-U0d_L8uA.js +1 -0
- package/ui/dist/assets/apex-VAyPSnFM.js +1 -0
- package/ui/dist/assets/apl-CnwPGSsG.js +1 -0
- package/ui/dist/assets/apl-DDDJQLEy.js +1 -0
- package/ui/dist/assets/applescript-CCn79oCD.js +1 -0
- package/ui/dist/assets/ara-4CJ0cIlV.js +1 -0
- package/ui/dist/assets/asciiarmor-qTkVPQu6.js +1 -0
- package/ui/dist/assets/asciidoc-DE70LPWp.js +1 -0
- package/ui/dist/assets/asm-Cmm7eHzH.js +1 -0
- package/ui/dist/assets/asn1-Dr8qZg38.js +1 -0
- package/ui/dist/assets/asterisk-Bja0s6e1.js +1 -0
- package/ui/dist/assets/astro-Cq94xJ2F.js +1 -0
- package/ui/dist/assets/awk-BWXHIvNe.js +1 -0
- package/ui/dist/assets/ballerina-B7ZEbQpA.js +1 -0
- package/ui/dist/assets/bat-Bo4NYOV-.js +1 -0
- package/ui/dist/assets/beancount-D-usSTwE.js +1 -0
- package/ui/dist/assets/berry-DKpUyyne.js +1 -0
- package/ui/dist/assets/bibtex-Ci_nEsc7.js +1 -0
- package/ui/dist/assets/bicep-CUHmPFLl.js +1 -0
- package/ui/dist/assets/bird2-C6vDhewU.js +1 -0
- package/ui/dist/assets/blade-DZCNRrZB.js +1 -0
- package/ui/dist/assets/brainfuck-D5EjA2JK.js +1 -0
- package/ui/dist/assets/bsl-BkkzgIyY.js +1 -0
- package/ui/dist/assets/c-CwNkiPnO.js +1 -0
- package/ui/dist/assets/c3-BFHwR3_K.js +1 -0
- package/ui/dist/assets/cadence-CQ2zXKGN.js +1 -0
- package/ui/dist/assets/cairo-DLTphjLi.js +1 -0
- package/ui/dist/assets/clarity-SemFz856.js +1 -0
- package/ui/dist/assets/clike-DHH8Ad3s.js +1 -0
- package/ui/dist/assets/clojure-BflJGmDX.js +1 -0
- package/ui/dist/assets/clojure-DqKBuwfJ.js +1 -0
- package/ui/dist/assets/cmake-Bj61d0ZC.js +1 -0
- package/ui/dist/assets/cmake-CyVbuzPu.js +1 -0
- package/ui/dist/assets/cobol-B_OZ4V-R.js +1 -0
- package/ui/dist/assets/cobol-CgSNuNV-.js +1 -0
- package/ui/dist/assets/codeowners-C8r90Shi.js +1 -0
- package/ui/dist/assets/codeql-oeQT6MSM.js +1 -0
- package/ui/dist/assets/coffee-DWlIdtuG.js +1 -0
- package/ui/dist/assets/coffeescript-B2pKbFk8.js +1 -0
- package/ui/dist/assets/common-lisp-Cv5bFMCO.js +1 -0
- package/ui/dist/assets/commonlisp-CcllspGY.js +1 -0
- package/ui/dist/assets/coq-BrsZFFmf.js +1 -0
- package/ui/dist/assets/cpp-CmiYyU8y.js +1 -0
- package/ui/dist/assets/crystal-BiyOLiea.js +1 -0
- package/ui/dist/assets/crystal-M5-qzICs.js +1 -0
- package/ui/dist/assets/csharp-oqKa8noW.js +1 -0
- package/ui/dist/assets/css-CYpP4FRV.js +1 -0
- package/ui/dist/assets/css-DGiwxBdC.js +1 -0
- package/ui/dist/assets/csv-Dx-8-gkx.js +1 -0
- package/ui/dist/assets/cue-CE9AQfxI.js +1 -0
- package/ui/dist/assets/cypher-ClKdZ_lG.js +1 -0
- package/ui/dist/assets/cypher-p9eYesGn.js +1 -0
- package/ui/dist/assets/d-BhMjBjQP.js +1 -0
- package/ui/dist/assets/d-qD-0Kul2.js +1 -0
- package/ui/dist/assets/dart-CnvKMtbv.js +1 -0
- package/ui/dist/assets/dax-BkyTk9wS.js +1 -0
- package/ui/dist/assets/desktop-Dlh5hvp9.js +1 -0
- package/ui/dist/assets/diff-ChtP43wD.js +1 -0
- package/ui/dist/assets/diff-woXpYk--.js +1 -0
- package/ui/dist/assets/dist-24WuufPm.js +1 -0
- package/ui/dist/assets/dist-B-SHQUSo.js +1 -0
- package/ui/dist/assets/dist-B3mK9QMK.js +1 -0
- package/ui/dist/assets/dist-BViEvwEG.js +2 -0
- package/ui/dist/assets/dist-BXtMxuI7.js +1 -0
- package/ui/dist/assets/dist-BkSlyoLl.js +1 -0
- package/ui/dist/assets/dist-C-hQPg8K.js +1 -0
- package/ui/dist/assets/dist-C1Qk3ApG.js +1 -0
- package/ui/dist/assets/dist-C9DszYV1.js +9 -0
- package/ui/dist/assets/dist-CCQGXHXf.js +1 -0
- package/ui/dist/assets/dist-CKVYvLDM.js +11 -0
- package/ui/dist/assets/dist-CNR9H9hI.js +1 -0
- package/ui/dist/assets/dist-C_IYb7Qh.js +1 -0
- package/ui/dist/assets/dist-CbS4AEdX.js +1 -0
- package/ui/dist/assets/dist-CfztD2mm.js +1 -0
- package/ui/dist/assets/dist-Cr9g-IkY.js +1 -0
- package/ui/dist/assets/dist-D_I8tzqw.js +1 -0
- package/ui/dist/assets/docker-IyjqRm3v.js +1 -0
- package/ui/dist/assets/dockerfile-BLkNEvjs.js +1 -0
- package/ui/dist/assets/dotenv-_5a1GRtc.js +1 -0
- package/ui/dist/assets/dream-maker-DW3nJb8Q.js +1 -0
- package/ui/dist/assets/dtd-DTF72YNO.js +1 -0
- package/ui/dist/assets/dylan-C6jEEEk-.js +1 -0
- package/ui/dist/assets/ebnf-D4c0_ac3.js +1 -0
- package/ui/dist/assets/ecl-BSZaIHnp.js +1 -0
- package/ui/dist/assets/edge-CZXzS9pm.js +1 -0
- package/ui/dist/assets/eiffel-BEjRio4Q.js +1 -0
- package/ui/dist/assets/elixir-BTnUmaBf.js +1 -0
- package/ui/dist/assets/elm-Bq5po3Zd.js +1 -0
- package/ui/dist/assets/elm-Cshzl8qu.js +1 -0
- package/ui/dist/assets/emacs-lisp-B4R74twV.js +1 -0
- package/ui/dist/assets/erb-BOVmqWJf.js +1 -0
- package/ui/dist/assets/erlang-Cphh6RMH.js +1 -0
- package/ui/dist/assets/erlang-DaB2Rkuy.js +1 -0
- package/ui/dist/assets/factor-D7LVTn2l.js +1 -0
- package/ui/dist/assets/fcl-ClOhbFR7.js +1 -0
- package/ui/dist/assets/fennel-DQxkIbk2.js +1 -0
- package/ui/dist/assets/fish-BJitypiv.js +1 -0
- package/ui/dist/assets/fluent-C03EYrpw.js +1 -0
- package/ui/dist/assets/forth-Cezjo90N.js +1 -0
- package/ui/dist/assets/fortran-Bt6PBEDR.js +1 -0
- package/ui/dist/assets/fortran-fixed-form-DEKoE2YW.js +1 -0
- package/ui/dist/assets/fortran-free-form-CYNrtFtB.js +1 -0
- package/ui/dist/assets/fsharp-D13ZGOAj.js +1 -0
- package/ui/dist/assets/gas-BHEdbvp9.js +1 -0
- package/ui/dist/assets/gdresource-C0sCabJj.js +1 -0
- package/ui/dist/assets/gdscript-Cp2uCuqX.js +1 -0
- package/ui/dist/assets/gdshader-CBce3t8t.js +1 -0
- package/ui/dist/assets/genie-CV2tkWYe.js +1 -0
- package/ui/dist/assets/gherkin-DExj1W_8.js +1 -0
- package/ui/dist/assets/gherkin-oBAE_ms0.js +1 -0
- package/ui/dist/assets/git-commit-BSykSTBG.js +1 -0
- package/ui/dist/assets/git-rebase-DLQM-CxK.js +1 -0
- package/ui/dist/assets/gleam-CSRkHgEL.js +1 -0
- package/ui/dist/assets/glimmer-js-DzMlcKY7.js +1 -0
- package/ui/dist/assets/glimmer-ts-Dz691XKF.js +1 -0
- package/ui/dist/assets/glsl-CMQZ1AkF.js +1 -0
- package/ui/dist/assets/gn-ilITqXS6.js +1 -0
- package/ui/dist/assets/gnuplot-7GGW24-e.js +1 -0
- package/ui/dist/assets/go-rLFTqkRN.js +1 -0
- package/ui/dist/assets/graphql-DBKIWtF7.js +1 -0
- package/ui/dist/assets/groovy-BC3IOsC8.js +1 -0
- package/ui/dist/assets/groovy-CacY0gHj.js +1 -0
- package/ui/dist/assets/hack-DZbb_fkF.js +1 -0
- package/ui/dist/assets/haml-CSjdx5hj.js +1 -0
- package/ui/dist/assets/handlebars-Mu9SxQrl.js +1 -0
- package/ui/dist/assets/haskell-BRsoo5mP.js +1 -0
- package/ui/dist/assets/haskell-D8IpX4py.js +1 -0
- package/ui/dist/assets/haxe-DIz0ZZqd.js +1 -0
- package/ui/dist/assets/haxe-OTjmBuCE.js +1 -0
- package/ui/dist/assets/hcl-Dh228itO.js +1 -0
- package/ui/dist/assets/hjson-CxZEssPk.js +1 -0
- package/ui/dist/assets/hlsl-Cvrh5tZx.js +1 -0
- package/ui/dist/assets/html-D4wtNI0H.js +1 -0
- package/ui/dist/assets/html-derivative-DHrkr74L.js +1 -0
- package/ui/dist/assets/http-CLVgA2GD.js +1 -0
- package/ui/dist/assets/http-DtBk1Y64.js +1 -0
- package/ui/dist/assets/hurl-1qu6SWMo.js +1 -0
- package/ui/dist/assets/hxml-B0Qn7Nwc.js +1 -0
- package/ui/dist/assets/hy-CZbG8q4J.js +1 -0
- package/ui/dist/assets/idl-BUZw3wgd.js +1 -0
- package/ui/dist/assets/imba-DsUTQ-LC.js +1 -0
- package/ui/dist/assets/index-DT45eblI.css +1 -0
- package/ui/dist/assets/index-Dqm3ZFVQ.js +554 -0
- package/ui/dist/assets/ini-B5eOa1yu.js +1 -0
- package/ui/dist/assets/java-CLLSyNOn.js +1 -0
- package/ui/dist/assets/javascript-9Tg8ixDm.js +1 -0
- package/ui/dist/assets/javascript-B-_kYMSx.js +1 -0
- package/ui/dist/assets/jinja-BtHF51nI.js +1 -0
- package/ui/dist/assets/jison-C93_a--j.js +1 -0
- package/ui/dist/assets/json-C4FWYbGR.js +1 -0
- package/ui/dist/assets/json5-BR5RXkoi.js +1 -0
- package/ui/dist/assets/jsonc-CYpm1nAK.js +1 -0
- package/ui/dist/assets/jsonl-CmCQp5Yx.js +1 -0
- package/ui/dist/assets/jsonnet-CJTPZ8u_.js +1 -0
- package/ui/dist/assets/jssm-DXw9l8Rf.js +1 -0
- package/ui/dist/assets/jsx-BdkuTVvH.js +1 -0
- package/ui/dist/assets/julia-BmboAp4o.js +1 -0
- package/ui/dist/assets/julia-CQfgDRfP.js +1 -0
- package/ui/dist/assets/just-E1Wftakf.js +1 -0
- package/ui/dist/assets/kdl-CsD5j6eV.js +1 -0
- package/ui/dist/assets/kotlin-DhhofPvG.js +1 -0
- package/ui/dist/assets/kusto-C7mF5XQf.js +1 -0
- package/ui/dist/assets/latex-DZFvvGDu.js +1 -0
- package/ui/dist/assets/lean-CewbzKMR.js +1 -0
- package/ui/dist/assets/less-DVTAwKKz.js +1 -0
- package/ui/dist/assets/liquid-BUTRgRVi.js +1 -0
- package/ui/dist/assets/livescript-BXxG0Yva.js +1 -0
- package/ui/dist/assets/llvm-Cm23YOpf.js +1 -0
- package/ui/dist/assets/log-BNLmms1o.js +1 -0
- package/ui/dist/assets/logo-Cluzi2Zq.js +1 -0
- package/ui/dist/assets/lua-CiA1ziua.js +1 -0
- package/ui/dist/assets/lua-Dl1ciOfH.js +1 -0
- package/ui/dist/assets/luau-FMPmPwt6.js +1 -0
- package/ui/dist/assets/make-Dixweg8N.js +1 -0
- package/ui/dist/assets/markdown-BYOwaDjH.js +1 -0
- package/ui/dist/assets/marko-Bh-A3HQZ.js +1 -0
- package/ui/dist/assets/mathematica-u8YMmbU0.js +1 -0
- package/ui/dist/assets/matlab-D7qyCx1q.js +1 -0
- package/ui/dist/assets/mbox-BEMVcqjs.js +1 -0
- package/ui/dist/assets/mdc-C2XCGsSV.js +1 -0
- package/ui/dist/assets/mdx-DQZ5AkYe.js +1 -0
- package/ui/dist/assets/mermaid-Bk4SNUv9.js +1 -0
- package/ui/dist/assets/mipsasm-BMqwQI7S.js +1 -0
- package/ui/dist/assets/mirc-C9zpzAZU.js +1 -0
- package/ui/dist/assets/mllike-B45xgp2S.js +1 -0
- package/ui/dist/assets/modelica-CqHI_q-D.js +1 -0
- package/ui/dist/assets/mojo-BgCJLMeH.js +1 -0
- package/ui/dist/assets/moonbit-CaWjb8XO.js +1 -0
- package/ui/dist/assets/move-B1IS1UjX.js +1 -0
- package/ui/dist/assets/mscgen-qgSLujhx.js +1 -0
- package/ui/dist/assets/mumps-CW_TBmxz.js +1 -0
- package/ui/dist/assets/narrat-_X_XdTYD.js +1 -0
- package/ui/dist/assets/nextflow-BJtWHP5T.js +1 -0
- package/ui/dist/assets/nextflow-groovy-DJMQeKeT.js +1 -0
- package/ui/dist/assets/nginx-BMaDbqW3.js +1 -0
- package/ui/dist/assets/nginx-igqyMv_F.js +1 -0
- package/ui/dist/assets/nim-DelsCcX1.js +1 -0
- package/ui/dist/assets/nix-IvuFDN5E.js +1 -0
- package/ui/dist/assets/nsis-AQ_alPln.js +1 -0
- package/ui/dist/assets/ntriples-d28e9m0E.js +1 -0
- package/ui/dist/assets/nushell-DcLAeLz5.js +1 -0
- package/ui/dist/assets/objective-c-D1A_Heim.js +1 -0
- package/ui/dist/assets/objective-cpp-BsSzOQcm.js +1 -0
- package/ui/dist/assets/ocaml-O90oeIOV.js +1 -0
- package/ui/dist/assets/octave-D2Q8cUp1.js +1 -0
- package/ui/dist/assets/odin-B1RWQWA5.js +1 -0
- package/ui/dist/assets/openscad-BUDT5pXO.js +1 -0
- package/ui/dist/assets/oz-BwTct_5T.js +1 -0
- package/ui/dist/assets/pascal-4ZHwLPI5.js +1 -0
- package/ui/dist/assets/pascal-Dp_KdFgX.js +1 -0
- package/ui/dist/assets/perl-CdEHsPfU.js +1 -0
- package/ui/dist/assets/perl-Cgh7mkol.js +1 -0
- package/ui/dist/assets/php-DXn-4Rf4.js +1 -0
- package/ui/dist/assets/pig-AF4Hwhju.js +1 -0
- package/ui/dist/assets/pkl-ot-7Btpt.js +1 -0
- package/ui/dist/assets/plsql-DGHpHOYJ.js +1 -0
- package/ui/dist/assets/po-BiJDBrnU.js +1 -0
- package/ui/dist/assets/polar-C7UOKdEL.js +1 -0
- package/ui/dist/assets/postcss-BXeXVLqQ.js +1 -0
- package/ui/dist/assets/powerquery-DNMTfnFr.js +1 -0
- package/ui/dist/assets/powershell-CzG71I4L.js +1 -0
- package/ui/dist/assets/powershell-DshXNtvi.js +1 -0
- package/ui/dist/assets/prisma-BsRQq5mF.js +1 -0
- package/ui/dist/assets/prolog-iXnhIJG7.js +1 -0
- package/ui/dist/assets/properties-C357ku5U.js +1 -0
- package/ui/dist/assets/proto-DB4EqR-F.js +1 -0
- package/ui/dist/assets/protobuf-D1ij_kNL.js +1 -0
- package/ui/dist/assets/pug-BNWZhj7f.js +1 -0
- package/ui/dist/assets/pug-Bugr-47h.js +1 -0
- package/ui/dist/assets/puppet-B4hC2X4m.js +1 -0
- package/ui/dist/assets/puppet-CDv2pdJW.js +1 -0
- package/ui/dist/assets/purescript-9MfHhQsQ.js +1 -0
- package/ui/dist/assets/python-BqYw9LYJ.js +1 -0
- package/ui/dist/assets/python-gzcpVVnB.js +1 -0
- package/ui/dist/assets/q-B9NhS7L_.js +1 -0
- package/ui/dist/assets/qml-CHLXijrJ.js +1 -0
- package/ui/dist/assets/qmldir-DCQb3MpD.js +1 -0
- package/ui/dist/assets/qss-Fe1Jh2GI.js +1 -0
- package/ui/dist/assets/r-DADKenSm.js +1 -0
- package/ui/dist/assets/r-g949Oasl.js +1 -0
- package/ui/dist/assets/racket-DcIDlBhZ.js +1 -0
- package/ui/dist/assets/raku-B3gFvitq.js +1 -0
- package/ui/dist/assets/razor-BUv8GTQg.js +1 -0
- package/ui/dist/assets/reg-CRGYupPL.js +1 -0
- package/ui/dist/assets/regexp-Dxi3LqhO.js +1 -0
- package/ui/dist/assets/rel-BtDbiS_P.js +1 -0
- package/ui/dist/assets/riscv-Ckw8ddFX.js +1 -0
- package/ui/dist/assets/ron-VUp2lXgN.js +1 -0
- package/ui/dist/assets/rosmsg-CAekHB0j.js +1 -0
- package/ui/dist/assets/rpm-gpDK5sbt.js +1 -0
- package/ui/dist/assets/rst-CMQNxthU.js +1 -0
- package/ui/dist/assets/ruby-CDBQomnV.js +1 -0
- package/ui/dist/assets/ruby-DsYpTuWg.js +1 -0
- package/ui/dist/assets/rust-Cfkwpbl8.js +1 -0
- package/ui/dist/assets/sas-C2OyD2Y6.js +1 -0
- package/ui/dist/assets/sas-uuqXrFx7.js +1 -0
- package/ui/dist/assets/sass-DXrisJhu.js +1 -0
- package/ui/dist/assets/scala-DKOlJaKm.js +1 -0
- package/ui/dist/assets/scheme-CyDdOh7e.js +1 -0
- package/ui/dist/assets/scheme-DQCgrYNe.js +1 -0
- package/ui/dist/assets/scss-CniJSQ3f.js +1 -0
- package/ui/dist/assets/sdbl-bTVj8UrX.js +1 -0
- package/ui/dist/assets/shaderlab-TOUzSsQk.js +1 -0
- package/ui/dist/assets/shell-Du5Qg9im.js +1 -0
- package/ui/dist/assets/shellscript-CuBMk1iS.js +1 -0
- package/ui/dist/assets/shellsession-BzDlSDO2.js +1 -0
- package/ui/dist/assets/sieve-BAxa3IjF.js +1 -0
- package/ui/dist/assets/simple-mode-DRpGK0lJ.js +1 -0
- package/ui/dist/assets/smalltalk-B16xEiuN.js +1 -0
- package/ui/dist/assets/smalltalk-BLp5-jwC.js +1 -0
- package/ui/dist/assets/solidity-CKzVLygQ.js +1 -0
- package/ui/dist/assets/solr-BBopId9w.js +1 -0
- package/ui/dist/assets/soy-e0u5_VID.js +1 -0
- package/ui/dist/assets/sparql-D_iOobhT.js +1 -0
- package/ui/dist/assets/sparql-Dz-mlCAC.js +1 -0
- package/ui/dist/assets/splunk-BC2Px7Mm.js +1 -0
- package/ui/dist/assets/spreadsheet-CTIncYxj.js +1 -0
- package/ui/dist/assets/sql-Cbg060Y9.js +1 -0
- package/ui/dist/assets/sql-DcCJ9jop.js +1 -0
- package/ui/dist/assets/ssh-config-BgfXC-Er.js +1 -0
- package/ui/dist/assets/stata-n_N_Lnpt.js +1 -0
- package/ui/dist/assets/stex-sDrdk2BW.js +1 -0
- package/ui/dist/assets/stylus-B6D30XZt.js +1 -0
- package/ui/dist/assets/stylus-DLLZ8dgm.js +1 -0
- package/ui/dist/assets/surrealql-Sa2566xv.js +1 -0
- package/ui/dist/assets/svelte-B0zgpD2X.js +1 -0
- package/ui/dist/assets/swift-DKB6_1j6.js +1 -0
- package/ui/dist/assets/swift-DonLKvLd.js +1 -0
- package/ui/dist/assets/system-verilog-DJ5XKQeo.js +1 -0
- package/ui/dist/assets/systemd-BxMlprV5.js +1 -0
- package/ui/dist/assets/talonscript-CohzipZa.js +1 -0
- package/ui/dist/assets/tasl-DMoTqEGO.js +1 -0
- package/ui/dist/assets/tcl-BGfruO1u.js +1 -0
- package/ui/dist/assets/tcl-CZd0xW_V.js +1 -0
- package/ui/dist/assets/templ-BMfZts2f.js +1 -0
- package/ui/dist/assets/terraform-DswuEJGm.js +1 -0
- package/ui/dist/assets/tex-7PyiPoxe.js +1 -0
- package/ui/dist/assets/textile-DWBqthVk.js +1 -0
- package/ui/dist/assets/tiddlywiki-VlUiK86J.js +1 -0
- package/ui/dist/assets/tiki-CxVlf5KZ.js +1 -0
- package/ui/dist/assets/toml-CcmNWLt0.js +1 -0
- package/ui/dist/assets/toml-LvoKBwCs.js +1 -0
- package/ui/dist/assets/troff-C2dAgh7P.js +1 -0
- package/ui/dist/assets/ts-tags-nHnZDDzD.js +1 -0
- package/ui/dist/assets/tsv-sltzmVWM.js +1 -0
- package/ui/dist/assets/tsx-BgvqLYni.js +1 -0
- package/ui/dist/assets/ttcn-BePYh-hG.js +1 -0
- package/ui/dist/assets/ttcn-cfg-CY0aot7Q.js +1 -0
- package/ui/dist/assets/turtle-BDLWE2cD.js +1 -0
- package/ui/dist/assets/turtle-ByJddavk.js +1 -0
- package/ui/dist/assets/twig-BqJ1gUqf.js +1 -0
- package/ui/dist/assets/typescript-C2nbCIiA.js +1 -0
- package/ui/dist/assets/typespec-BRdr0IET.js +1 -0
- package/ui/dist/assets/typst-DI99ib-x.js +1 -0
- package/ui/dist/assets/unused-shiki-extras-CUWqhvIR.js +1 -0
- package/ui/dist/assets/v-DETTlOr0.js +1 -0
- package/ui/dist/assets/vala-zf12oZj6.js +1 -0
- package/ui/dist/assets/vb-BthdM_4N.js +1 -0
- package/ui/dist/assets/vb-Djn5o6TS.js +1 -0
- package/ui/dist/assets/vbscript-D9f6rSsU.js +1 -0
- package/ui/dist/assets/velocity-CqftRsjg.js +1 -0
- package/ui/dist/assets/verilog-CiiDBU1e.js +1 -0
- package/ui/dist/assets/verilog-D-x6ne0Z.js +1 -0
- package/ui/dist/assets/vhdl-BroJfC0k.js +1 -0
- package/ui/dist/assets/vhdl-CMrOq2q1.js +1 -0
- package/ui/dist/assets/viml-DvXPmvsu.js +1 -0
- package/ui/dist/assets/vue-B_l4_yyQ.js +1 -0
- package/ui/dist/assets/vue-html-qalJD3cY.js +1 -0
- package/ui/dist/assets/vue-vine-Cle_s8sp.js +1 -0
- package/ui/dist/assets/vyper-CgoNMtux.js +1 -0
- package/ui/dist/assets/wasm-ByWQv1Qj.js +1 -0
- package/ui/dist/assets/webidl-D5jiJvOU.js +1 -0
- package/ui/dist/assets/wenyan-C8pVoKbM.js +1 -0
- package/ui/dist/assets/wgsl-BsKzXJz4.js +1 -0
- package/ui/dist/assets/wikitext-ClFFjSW2.js +1 -0
- package/ui/dist/assets/wit-DdvCle-K.js +1 -0
- package/ui/dist/assets/wolfram-DLL8P-h_.js +1 -0
- package/ui/dist/assets/xml-CnKUcNAY.js +1 -0
- package/ui/dist/assets/xquery-fj_R-kMw.js +1 -0
- package/ui/dist/assets/xsl-D5cPGaiC.js +1 -0
- package/ui/dist/assets/yacas-CXXgtw0p.js +1 -0
- package/ui/dist/assets/yaml-BcZKwY9y.js +1 -0
- package/ui/dist/assets/z80-CL1naaMV.js +1 -0
- package/ui/dist/assets/zenscript-BnlCZFoB.js +1 -0
- package/ui/dist/assets/zig-CMLA9XwU.js +1 -0
- package/ui/dist/index.html +20 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "caret",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Review, annotate, and approve Claude Code plans in a local web UI.",
|
|
5
|
+
"author": { "name": "macintacos" },
|
|
6
|
+
"homepage": "https://github.com/macintacos/caret",
|
|
7
|
+
"repository": "https://github.com/macintacos/caret",
|
|
8
|
+
"license": "MIT",
|
|
9
|
+
"keywords": [
|
|
10
|
+
"claude-code",
|
|
11
|
+
"claude-code-plugin",
|
|
12
|
+
"plan-review",
|
|
13
|
+
"code-review",
|
|
14
|
+
"hooks",
|
|
15
|
+
"approval",
|
|
16
|
+
"annotation"
|
|
17
|
+
]
|
|
18
|
+
}
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Julian Torres
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# 🥕 caret
|
|
2
|
+
|
|
3
|
+
> ⚠️ **Prototype.** caret is an early prototype and may change substantially over the next
|
|
4
|
+
> little while — interfaces, hooks, storage, and the install flow are all still settling.
|
|
5
|
+
> Expect rough edges and breaking changes.
|
|
6
|
+
|
|
7
|
+
caret is a Claude Code (and OpenCode) plugin that replaces the terminal plan-approval
|
|
8
|
+
prompt with a local web UI. When your agent presents a plan, caret opens it in your
|
|
9
|
+
browser so you can read it as rendered HTML, **annotate passages inline** (Google-Docs
|
|
10
|
+
style), and **approve** or **request changes** — your feedback flows straight back to the
|
|
11
|
+
agent. A single local daemon is shared across concurrent sessions, so several in-flight
|
|
12
|
+
plans can be reviewed from one browser tab via a switcher.
|
|
13
|
+
|
|
14
|
+
Want to develop caret rather than use it? Start with [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
15
|
+
|
|
16
|
+
## Screenshots
|
|
17
|
+
|
|
18
|
+
<!-- TODO(EXC-666): review-UI screenshots — plan view + inline annotation,
|
|
19
|
+
request-changes flow, multi-session switcher. -->
|
|
20
|
+
|
|
21
|
+
_Review-UI screenshots coming soon._
|
|
22
|
+
|
|
23
|
+
## Install
|
|
24
|
+
|
|
25
|
+
caret needs [`bun`](https://bun.sh) on your `PATH` — it runs from a `bun` bundle — plus
|
|
26
|
+
the [`claude`](https://claude.com/claude-code) CLI you already have.
|
|
27
|
+
|
|
28
|
+
### Claude Code
|
|
29
|
+
|
|
30
|
+
caret installs from its GitHub-based plugin marketplace. From inside Claude Code:
|
|
31
|
+
|
|
32
|
+
```sh
|
|
33
|
+
/plugin marketplace add macintacos/caret
|
|
34
|
+
/plugin install caret@caret
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
This fetches the published plugin — a self-contained `bun` bundle plus the prebuilt UI —
|
|
38
|
+
into Claude Code's plugin cache. No `git clone`, no compile step, no
|
|
39
|
+
`claude --plugin-dir`. Then restart Claude Code (or run `/reload-plugins`) and try it:
|
|
40
|
+
|
|
41
|
+
```sh
|
|
42
|
+
/caret:demo # presents a short fake plan to exercise the flow
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
**Update** with `/plugin marketplace update caret` (then `/reload-plugins`). **Uninstall**
|
|
46
|
+
with:
|
|
47
|
+
|
|
48
|
+
```sh
|
|
49
|
+
claude plugin uninstall caret@caret
|
|
50
|
+
claude plugin marketplace remove caret
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### OpenCode
|
|
54
|
+
|
|
55
|
+
caret also installs into [OpenCode](https://opencode.ai), as an auto-loaded plugin. The
|
|
56
|
+
script installer detects OpenCode (and, if you also have Claude Code, asks which to
|
|
57
|
+
install into — or set `CARET_AGENTS`):
|
|
58
|
+
|
|
59
|
+
```sh
|
|
60
|
+
curl -fsSL https://raw.githubusercontent.com/macintacos/caret/trunk/scripts/install.sh \
|
|
61
|
+
| CARET_AGENTS=opencode bash
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
The installer drops a `caret.ts` plugin plus the `/caret:demo`, `/caret:discovery`, and
|
|
65
|
+
`/caret:debug` commands into your OpenCode config dir, along with a `package.json` for its
|
|
66
|
+
one dependency (`@opencode-ai/plugin`) — it never touches your existing `plugin` config
|
|
67
|
+
array. **Restart OpenCode once** after installing (plugins load at startup), then
|
|
68
|
+
`/caret:demo` works. Approving or requesting changes flows back exactly as in Claude Code.
|
|
69
|
+
**Update** by re-running the installer; **uninstall** with
|
|
70
|
+
`caret install-opencode --uninstall` (which also removes that `package.json` entry). See
|
|
71
|
+
[`doc/ADVANCED.md`](doc/ADVANCED.md#the-opencode-adapter) for how the integration works.
|
|
72
|
+
|
|
73
|
+
## Using caret
|
|
74
|
+
|
|
75
|
+
Whenever your agent presents a plan — Claude Code's `ExitPlanMode`, or the Plan agent in
|
|
76
|
+
OpenCode — caret intercepts it and opens it in your browser instead of the terminal
|
|
77
|
+
prompt. There you:
|
|
78
|
+
|
|
79
|
+
- **Read** the plan as rendered HTML.
|
|
80
|
+
- **Annotate** — select any passage to attach an inline comment.
|
|
81
|
+
- **Decide** — **Approve** (optionally also switching the session into accept-edits or
|
|
82
|
+
auto mode) or **Request changes**, which sends your comments back to the agent to revise
|
|
83
|
+
and re-present.
|
|
84
|
+
|
|
85
|
+
A single local daemon serves every session, so concurrent plans queue up in one tab behind
|
|
86
|
+
a switcher.
|
|
87
|
+
|
|
88
|
+
## Configuration
|
|
89
|
+
|
|
90
|
+
caret runs with sensible defaults and needs no configuration. To tune it, it reads an
|
|
91
|
+
optional `config.toml` and `CARET_*` environment variables (for example the daemon port or
|
|
92
|
+
the review timeout); logs are written raw by default. The full list of keys, their
|
|
93
|
+
defaults, and the environment variables is in
|
|
94
|
+
[`doc/ADVANCED.md`](doc/ADVANCED.md#configuration).
|
|
95
|
+
|
|
96
|
+
## Reporting bugs
|
|
97
|
+
|
|
98
|
+
- `caret discovery` prints a one-shot, read-only diagnostics snapshot of your install —
|
|
99
|
+
ready to paste into a bug report (`caret discovery --json` for machine-readable output).
|
|
100
|
+
- `/caret:debug` reviews the current session's plans and recent errors.
|
|
101
|
+
|
|
102
|
+
Details, plus how to scrub logs with `caret redact`, are in
|
|
103
|
+
[`doc/ADVANCED.md`](doc/ADVANCED.md#logging--debugging).
|
|
104
|
+
|
|
105
|
+
## Platform support
|
|
106
|
+
|
|
107
|
+
caret is **macOS-first**; Linux and Windows are best-effort. See
|
|
108
|
+
[`doc/ADVANCED.md`](doc/ADVANCED.md#platform-support) for the details.
|
|
109
|
+
|
|
110
|
+
## Documentation
|
|
111
|
+
|
|
112
|
+
- [`doc/ADVANCED.md`](doc/ADVANCED.md) — the deep reference: build-from-source,
|
|
113
|
+
architecture, the agent adapters, the full configuration surface, and the development
|
|
114
|
+
workflow.
|
|
115
|
+
- [CONTRIBUTING.md](CONTRIBUTING.md) — develop caret locally: setup, the `mise` workflow,
|
|
116
|
+
and where tests live.
|
|
117
|
+
- [`doc/`](doc/) — contributor rules-of-the-road, routed from [CLAUDE.md](CLAUDE.md).
|
|
118
|
+
|
|
119
|
+
## License
|
|
120
|
+
|
|
121
|
+
MIT — see [LICENSE](LICENSE). Vendored third-party assets (the Lucide icons) are itemized
|
|
122
|
+
in [THIRD_PARTY_LICENSES.md](THIRD_PARTY_LICENSES.md) (ISC).
|
package/bin/caret
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# caret plugin entrypoint shim (EXC-643). This is the ONE file Claude Code's
|
|
4
|
+
# hooks invoke — `${CLAUDE_PLUGIN_ROOT}/bin/caret <subcommand>` (see
|
|
5
|
+
# hooks/hooks.json and commands/discovery.md). It is committed and shipped in
|
|
6
|
+
# every install; it resolves the actual caret runtime from whatever the install
|
|
7
|
+
# method placed beside it:
|
|
8
|
+
#
|
|
9
|
+
# 1. a compiled binary (bin/caret-native) — the build-from-source paths
|
|
10
|
+
# (`scripts/install.sh`, `mise run build --install`) compile this; running
|
|
11
|
+
# it needs no `bun` at hook time.
|
|
12
|
+
# 2. the run-from-source bundle (dist/cli.js) — the GitHub/npm plugin install
|
|
13
|
+
# ships this plus a sibling ui/dist; it runs on `bun`. REQUIRES `bun` on
|
|
14
|
+
# PATH (documented in the README).
|
|
15
|
+
# 3. raw source (src/cli.ts) — a dev checkout that built neither artifact.
|
|
16
|
+
#
|
|
17
|
+
# Resolution is by the shim's own on-disk location (resolved through symlinks,
|
|
18
|
+
# since Claude Code's plugin cache may symlink), never the cwd.
|
|
19
|
+
|
|
20
|
+
set -euo pipefail
|
|
21
|
+
|
|
22
|
+
# Resolve this script's real directory, following symlinks.
|
|
23
|
+
source="${BASH_SOURCE[0]}"
|
|
24
|
+
while [ -h "$source" ]; do
|
|
25
|
+
dir="$(cd -P "$(dirname "$source")" >/dev/null 2>&1 && pwd)"
|
|
26
|
+
source="$(readlink "$source")"
|
|
27
|
+
case "$source" in
|
|
28
|
+
/*) ;;
|
|
29
|
+
*) source="$dir/$source" ;;
|
|
30
|
+
esac
|
|
31
|
+
done
|
|
32
|
+
root="$(cd -P "$(dirname "$source")/.." >/dev/null 2>&1 && pwd)"
|
|
33
|
+
|
|
34
|
+
# 1. Compiled binary, if a build-from-source install produced one.
|
|
35
|
+
if [ -x "$root/bin/caret-native" ]; then
|
|
36
|
+
exec "$root/bin/caret-native" "$@"
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
# 2 & 3 both run through `bun`. Fail loudly with install guidance if it's absent,
|
|
40
|
+
# rather than letting `exec bun` surface a bare "command not found".
|
|
41
|
+
if ! command -v bun >/dev/null 2>&1; then
|
|
42
|
+
echo "caret: 'bun' is required to run caret from source but was not found on PATH." >&2
|
|
43
|
+
echo " Install Bun (https://bun.sh) and retry." >&2
|
|
44
|
+
exit 127
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
# 2. The shipped run-from-source bundle (npm/github plugin install).
|
|
48
|
+
if [ -f "$root/dist/cli.js" ]; then
|
|
49
|
+
exec bun "$root/dist/cli.js" "$@"
|
|
50
|
+
fi
|
|
51
|
+
|
|
52
|
+
# 3. Raw source (dev checkout with neither artifact built).
|
|
53
|
+
exec bun "$root/src/cli.ts" "$@"
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Review the current caret session — pending/approved/rejected/expired plans plus recent errors — and help debug failures
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
caret persists every review and logs to its state dir. This command reviews the current
|
|
6
|
+
session — the plans you've sent for review and their outcomes — and surfaces recent errors
|
|
7
|
+
so a failure can be diagnosed. A failure usually first shows as a deny like "caret: … —
|
|
8
|
+
denying so no unreviewed plan ships. See …/caret.log."
|
|
9
|
+
|
|
10
|
+
## 1. Locate caret's state
|
|
11
|
+
|
|
12
|
+
caret writes to its state dir — `$XDG_STATE_HOME/caret` when that variable is set,
|
|
13
|
+
otherwise `~/.local/state/caret`:
|
|
14
|
+
|
|
15
|
+
- `reviews/<id>.json` — one JSON review record per file, kept on disk as history after it
|
|
16
|
+
resolves. Each record carries `id`, `sessionId`, `cwd`, `title`, `status`
|
|
17
|
+
(`pending`/`rejected`/`approved`/`expired`), a `versions` array (plan revisions), and —
|
|
18
|
+
once resolved — a `decision` (`behavior`/`feedback`/`acceptMode`/`decidedAt`).
|
|
19
|
+
- `caret.log` — NDJSON records from the short-lived `caret review` hook process, one JSON
|
|
20
|
+
object per line: `level` (pino numeric: 20 debug, 30 info, 40 warn, 50 error), `time`
|
|
21
|
+
(ISO 8601 UTC), `step`, `source` (the emitting process), `caller` (the emitting
|
|
22
|
+
`file:line`, when resolvable), `msg`, review-scoped extras
|
|
23
|
+
(`sessionId`/`cwd`/`reviewId`, plus `feedbackChars`/`acceptMode` on a decision record),
|
|
24
|
+
and — on errors — `err` with `message`, `stack`, and a nested `cause` chain. Feedback
|
|
25
|
+
and plan bodies are never logged — only counts like `feedbackChars` (EXC-444). Normal
|
|
26
|
+
operation (a review decision, a format reject) logs at info; only genuine failures sit
|
|
27
|
+
at level ≥ 50.
|
|
28
|
+
- `daemon.log` — the detached daemon's stdout/stderr: the same NDJSON shape (tagged with
|
|
29
|
+
`pid`) for lifecycle and request errors, possibly interleaved with raw non-JSON lines
|
|
30
|
+
(crash traces, port messages).
|
|
31
|
+
|
|
32
|
+
Lines that don't start with `{` (including pre-NDJSON sentinel records from older caret
|
|
33
|
+
versions) are skipped by the `grep '^{'` filters below.
|
|
34
|
+
|
|
35
|
+
Resolve the directory once:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
dir="${XDG_STATE_HOME:-$HOME/.local/state}/caret"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## 2. Session review
|
|
42
|
+
|
|
43
|
+
Reconstruct the current session's reviews. Identify the session by filtering reviews whose
|
|
44
|
+
`cwd` matches the working directory and taking the `sessionId` of the most recently
|
|
45
|
+
updated match, then list every review in that session, oldest first:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
sid=$(jq -rs --arg cwd "$PWD" '[.[] | select(.cwd == $cwd)] | sort_by(.updatedAt) | last | .sessionId // empty' "$dir"/reviews/*.json)
|
|
49
|
+
jq -s --arg sid "$sid" '[.[] | select(.sessionId == $sid)] | sort_by(.createdAt) | .[] | {id, title, status, versions: (.versions | length), decidedAt: .decision.decidedAt, feedback: .decision.feedback}' "$dir"/reviews/*.json
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
If `$dir/reviews` is missing or empty, the glob won't match and these commands error
|
|
53
|
+
(shell or jq, depending on the shell) — treat that as "no reviews recorded", not as a
|
|
54
|
+
failure.
|
|
55
|
+
|
|
56
|
+
Present the result grouped by status:
|
|
57
|
+
|
|
58
|
+
- **pending** — awaiting a decision in the browser.
|
|
59
|
+
- **rejected** — changes requested; awaiting a revised plan. Include a short excerpt of
|
|
60
|
+
the decision `feedback`.
|
|
61
|
+
- **approved** — plan accepted; terminal success.
|
|
62
|
+
- **expired** — abandoned by its hook (timeout) or superseded by a resubmitted plan;
|
|
63
|
+
terminal, never reviewed (EXC-454).
|
|
64
|
+
|
|
65
|
+
For each review show its id, title, and version count (`versions` above — the number of
|
|
66
|
+
plan revisions). Note that the field whitelist above is deliberate: `versions[].plan` and
|
|
67
|
+
`generalCommentDraft` hold full plan and draft bodies — never select or echo them.
|
|
68
|
+
|
|
69
|
+
If no review matches the working directory (`sid` comes back empty), say so, then fall
|
|
70
|
+
back to the most recently updated session across all reviews — recompute `sid` and re-run
|
|
71
|
+
the listing command above with it:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
sid=$(jq -rs 'sort_by(.updatedAt) | last | .sessionId // empty' "$dir"/reviews/*.json)
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## 3. Recent errors
|
|
78
|
+
|
|
79
|
+
- **caret.log** — extract the **last 5 error records** (level ≥ 50), then report each
|
|
80
|
+
one's step, msg, and `err` message/cause/stack:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
grep '^{' "$dir/caret.log" | jq -s '[.[] | select(.level >= 50)] | .[-5:]'
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
- **daemon.log** — same extraction for the daemon side, plus a raw tail for non-JSON crash
|
|
87
|
+
output near the time of the hook failure:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
grep '^{' "$dir/daemon.log" | jq -s '[.[] | select(.level >= 50)] | .[-5:]'
|
|
91
|
+
tail -n 40 "$dir/daemon.log"
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
For a human-readable rendering of either log: `grep '^{' <log> | bunx pino-pretty`.
|
|
95
|
+
|
|
96
|
+
If `jq` isn't available, fall back to `grep '^{' <log> | tail -n 20` and read the raw
|
|
97
|
+
NDJSON directly — each line is a self-contained JSON record.
|
|
98
|
+
|
|
99
|
+
A "socket connection closed" on the hook side often has its real cause on the daemon side,
|
|
100
|
+
so check both. The surrounding info records (review created/resolved, plan rejected with
|
|
101
|
+
its `feedbackChars`) give the timeline leading up to a failure:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
grep '^{' "$dir/caret.log" | tail -n 10 | jq -c '{time, level, step, msg}'
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## 4. Handle the empty case
|
|
108
|
+
|
|
109
|
+
Two independent axes — report each on its own:
|
|
110
|
+
|
|
111
|
+
- **No reviews for this project** — if the cwd matches no review and the fallback finds
|
|
112
|
+
nothing, state that plainly. Don't imply a failure occurred; an absence of reviews just
|
|
113
|
+
means none have been sent from here yet.
|
|
114
|
+
- **No error records** — if neither log contains a record with `level >= 50`, report
|
|
115
|
+
**"caret has no errors recorded"**. Info records alone (rejected plans, routine
|
|
116
|
+
lifecycle) are normal operation, not errors. The session review still renders if reviews
|
|
117
|
+
exist.
|
|
118
|
+
|
|
119
|
+
## 5. Debug
|
|
120
|
+
|
|
121
|
+
If a failure is present (an error record at level ≥ 50) and the `/systematic-debugging`
|
|
122
|
+
skill is available, invoke it to drive root-cause investigation from the logged error
|
|
123
|
+
(it's the right tool for turning a stack trace into a confirmed root cause). Otherwise,
|
|
124
|
+
reason from the failing step, msg, cause, and stack to the likely cause and propose a fix.
|
|
125
|
+
|
|
126
|
+
If no failure is present, stop after the session review — there is nothing to debug.
|
|
127
|
+
|
|
128
|
+
Keep your output diagnostic-focused — step, msg, cause, stack. The logs deliberately avoid
|
|
129
|
+
full plan bodies, and review JSON contains them under `versions[].plan`; never fetch or
|
|
130
|
+
echo plan content into this conversation.
|
package/commands/demo.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Demo caret by presenting a short fake plan via ExitPlanMode
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Read the shared fake-plan fixture at `${CLAUDE_PLUGIN_ROOT}/scripts/dev/fake-plan.md` and
|
|
6
|
+
present its contents **verbatim** to the user by calling `ExitPlanMode` with that markdown
|
|
7
|
+
as the `plan` argument. This is the same fixture `mise run dev` seeds, so the demo and the
|
|
8
|
+
dev environment draw their plan from one source of truth. Do **not** do any real work,
|
|
9
|
+
research, or file edits — this is only to exercise the review flow. If the fixture can't
|
|
10
|
+
be read, fall back to inventing a short, plausible-but-fake plan (a Context section, an
|
|
11
|
+
Approach section, and a couple of Steps).
|
|
12
|
+
|
|
13
|
+
This triggers caret's `PermissionRequest`/`ExitPlanMode` hook, which opens the plan in a
|
|
14
|
+
local browser UI for inline review. When the user approves or requests changes there, the
|
|
15
|
+
decision flows back to you:
|
|
16
|
+
|
|
17
|
+
- **Approved** → proceed (this is just a demo, so simply acknowledge that caret approved
|
|
18
|
+
the plan and stop).
|
|
19
|
+
- **Changes requested** → the feedback arrives as the denial reason. Revise the plan
|
|
20
|
+
accordingly and present it again via `ExitPlanMode` (caret captures it as a new
|
|
21
|
+
version).
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Gather a redacted diagnostics snapshot of this caret install and present it ready to paste into a bug report
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
caret's `discovery` subcommand prints a one-shot, read-only snapshot of the local install
|
|
6
|
+
— running caret processes, daemon identity, lock/port state, effective settings, review
|
|
7
|
+
counts, the agent adapter's install-state probe (plugin version, enabled state, and
|
|
8
|
+
whether a manual hook sits in the agent's user settings), log sizes and error counts,
|
|
9
|
+
install/runtime info, and system basics. The report is **always redacted** (home paths
|
|
10
|
+
become `~`, usernames in foreign home paths are censored) and never contains plan, prompt,
|
|
11
|
+
or feedback bodies, nor any log contents — it exists to be shared.
|
|
12
|
+
|
|
13
|
+
First ask the user (via `AskUserQuestion`) which format they want:
|
|
14
|
+
|
|
15
|
+
- **JSON** — for pasting into a bug report or feeding to tooling.
|
|
16
|
+
- **Human-readable** — for scanning in the conversation.
|
|
17
|
+
|
|
18
|
+
Then run the matching invocation:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
"${CLAUDE_PLUGIN_ROOT}/bin/caret" discovery --json # JSON
|
|
22
|
+
"${CLAUDE_PLUGIN_ROOT}/bin/caret" discovery # human-readable
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
End your output with the command's stdout **verbatim** in a fenced code block — ` ```json
|
|
26
|
+
` for the JSON format, plain ` ``` ` for the human-readable one — so the user can copy it
|
|
27
|
+
straight into a bug report. Add nothing inside the block and do not summarize away
|
|
28
|
+
sections; the report is already redacted and complete. A degraded section (e.g.
|
|
29
|
+
`daemon error: …` or `"error": "…"`) is normal when the daemon is down — present it as-is
|
|
30
|
+
rather than treating it as a failure of this command.
|
|
31
|
+
|
|
32
|
+
If the command exits non-zero, no report could be produced at all: present the exit code
|
|
33
|
+
and stderr instead, and suggest `/caret:debug` for log-side diagnosis. If the binary
|
|
34
|
+
itself is missing (a source checkout that has never been built), say so and point at
|
|
35
|
+
`scripts/install.sh` or `mise run build`.
|