@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.
Files changed (365) hide show
  1. package/.claude-plugin/plugin.json +18 -0
  2. package/LICENSE +21 -0
  3. package/README.md +122 -0
  4. package/bin/caret +53 -0
  5. package/commands/debug.md +130 -0
  6. package/commands/demo.md +21 -0
  7. package/commands/discovery.md +35 -0
  8. package/dist/cli.js +32593 -0
  9. package/hooks/hooks.json +28 -0
  10. package/opencode/caret.plugin.ts +293 -0
  11. package/opencode/commands/debug.md +53 -0
  12. package/opencode/commands/demo.md +29 -0
  13. package/opencode/commands/discovery.md +31 -0
  14. package/package.json +65 -0
  15. package/ui/dist/assets/abap-CLvhMVsD.js +1 -0
  16. package/ui/dist/assets/actionscript-3--17pq3dv.js +1 -0
  17. package/ui/dist/assets/ada-C5qYipkI.js +1 -0
  18. package/ui/dist/assets/angular-html-Cg_qO4OQ.js +1 -0
  19. package/ui/dist/assets/angular-ts-BmV-Wd4K.js +1 -0
  20. package/ui/dist/assets/apache-U0d_L8uA.js +1 -0
  21. package/ui/dist/assets/apex-VAyPSnFM.js +1 -0
  22. package/ui/dist/assets/apl-CnwPGSsG.js +1 -0
  23. package/ui/dist/assets/apl-DDDJQLEy.js +1 -0
  24. package/ui/dist/assets/applescript-CCn79oCD.js +1 -0
  25. package/ui/dist/assets/ara-4CJ0cIlV.js +1 -0
  26. package/ui/dist/assets/asciiarmor-qTkVPQu6.js +1 -0
  27. package/ui/dist/assets/asciidoc-DE70LPWp.js +1 -0
  28. package/ui/dist/assets/asm-Cmm7eHzH.js +1 -0
  29. package/ui/dist/assets/asn1-Dr8qZg38.js +1 -0
  30. package/ui/dist/assets/asterisk-Bja0s6e1.js +1 -0
  31. package/ui/dist/assets/astro-Cq94xJ2F.js +1 -0
  32. package/ui/dist/assets/awk-BWXHIvNe.js +1 -0
  33. package/ui/dist/assets/ballerina-B7ZEbQpA.js +1 -0
  34. package/ui/dist/assets/bat-Bo4NYOV-.js +1 -0
  35. package/ui/dist/assets/beancount-D-usSTwE.js +1 -0
  36. package/ui/dist/assets/berry-DKpUyyne.js +1 -0
  37. package/ui/dist/assets/bibtex-Ci_nEsc7.js +1 -0
  38. package/ui/dist/assets/bicep-CUHmPFLl.js +1 -0
  39. package/ui/dist/assets/bird2-C6vDhewU.js +1 -0
  40. package/ui/dist/assets/blade-DZCNRrZB.js +1 -0
  41. package/ui/dist/assets/brainfuck-D5EjA2JK.js +1 -0
  42. package/ui/dist/assets/bsl-BkkzgIyY.js +1 -0
  43. package/ui/dist/assets/c-CwNkiPnO.js +1 -0
  44. package/ui/dist/assets/c3-BFHwR3_K.js +1 -0
  45. package/ui/dist/assets/cadence-CQ2zXKGN.js +1 -0
  46. package/ui/dist/assets/cairo-DLTphjLi.js +1 -0
  47. package/ui/dist/assets/clarity-SemFz856.js +1 -0
  48. package/ui/dist/assets/clike-DHH8Ad3s.js +1 -0
  49. package/ui/dist/assets/clojure-BflJGmDX.js +1 -0
  50. package/ui/dist/assets/clojure-DqKBuwfJ.js +1 -0
  51. package/ui/dist/assets/cmake-Bj61d0ZC.js +1 -0
  52. package/ui/dist/assets/cmake-CyVbuzPu.js +1 -0
  53. package/ui/dist/assets/cobol-B_OZ4V-R.js +1 -0
  54. package/ui/dist/assets/cobol-CgSNuNV-.js +1 -0
  55. package/ui/dist/assets/codeowners-C8r90Shi.js +1 -0
  56. package/ui/dist/assets/codeql-oeQT6MSM.js +1 -0
  57. package/ui/dist/assets/coffee-DWlIdtuG.js +1 -0
  58. package/ui/dist/assets/coffeescript-B2pKbFk8.js +1 -0
  59. package/ui/dist/assets/common-lisp-Cv5bFMCO.js +1 -0
  60. package/ui/dist/assets/commonlisp-CcllspGY.js +1 -0
  61. package/ui/dist/assets/coq-BrsZFFmf.js +1 -0
  62. package/ui/dist/assets/cpp-CmiYyU8y.js +1 -0
  63. package/ui/dist/assets/crystal-BiyOLiea.js +1 -0
  64. package/ui/dist/assets/crystal-M5-qzICs.js +1 -0
  65. package/ui/dist/assets/csharp-oqKa8noW.js +1 -0
  66. package/ui/dist/assets/css-CYpP4FRV.js +1 -0
  67. package/ui/dist/assets/css-DGiwxBdC.js +1 -0
  68. package/ui/dist/assets/csv-Dx-8-gkx.js +1 -0
  69. package/ui/dist/assets/cue-CE9AQfxI.js +1 -0
  70. package/ui/dist/assets/cypher-ClKdZ_lG.js +1 -0
  71. package/ui/dist/assets/cypher-p9eYesGn.js +1 -0
  72. package/ui/dist/assets/d-BhMjBjQP.js +1 -0
  73. package/ui/dist/assets/d-qD-0Kul2.js +1 -0
  74. package/ui/dist/assets/dart-CnvKMtbv.js +1 -0
  75. package/ui/dist/assets/dax-BkyTk9wS.js +1 -0
  76. package/ui/dist/assets/desktop-Dlh5hvp9.js +1 -0
  77. package/ui/dist/assets/diff-ChtP43wD.js +1 -0
  78. package/ui/dist/assets/diff-woXpYk--.js +1 -0
  79. package/ui/dist/assets/dist-24WuufPm.js +1 -0
  80. package/ui/dist/assets/dist-B-SHQUSo.js +1 -0
  81. package/ui/dist/assets/dist-B3mK9QMK.js +1 -0
  82. package/ui/dist/assets/dist-BViEvwEG.js +2 -0
  83. package/ui/dist/assets/dist-BXtMxuI7.js +1 -0
  84. package/ui/dist/assets/dist-BkSlyoLl.js +1 -0
  85. package/ui/dist/assets/dist-C-hQPg8K.js +1 -0
  86. package/ui/dist/assets/dist-C1Qk3ApG.js +1 -0
  87. package/ui/dist/assets/dist-C9DszYV1.js +9 -0
  88. package/ui/dist/assets/dist-CCQGXHXf.js +1 -0
  89. package/ui/dist/assets/dist-CKVYvLDM.js +11 -0
  90. package/ui/dist/assets/dist-CNR9H9hI.js +1 -0
  91. package/ui/dist/assets/dist-C_IYb7Qh.js +1 -0
  92. package/ui/dist/assets/dist-CbS4AEdX.js +1 -0
  93. package/ui/dist/assets/dist-CfztD2mm.js +1 -0
  94. package/ui/dist/assets/dist-Cr9g-IkY.js +1 -0
  95. package/ui/dist/assets/dist-D_I8tzqw.js +1 -0
  96. package/ui/dist/assets/docker-IyjqRm3v.js +1 -0
  97. package/ui/dist/assets/dockerfile-BLkNEvjs.js +1 -0
  98. package/ui/dist/assets/dotenv-_5a1GRtc.js +1 -0
  99. package/ui/dist/assets/dream-maker-DW3nJb8Q.js +1 -0
  100. package/ui/dist/assets/dtd-DTF72YNO.js +1 -0
  101. package/ui/dist/assets/dylan-C6jEEEk-.js +1 -0
  102. package/ui/dist/assets/ebnf-D4c0_ac3.js +1 -0
  103. package/ui/dist/assets/ecl-BSZaIHnp.js +1 -0
  104. package/ui/dist/assets/edge-CZXzS9pm.js +1 -0
  105. package/ui/dist/assets/eiffel-BEjRio4Q.js +1 -0
  106. package/ui/dist/assets/elixir-BTnUmaBf.js +1 -0
  107. package/ui/dist/assets/elm-Bq5po3Zd.js +1 -0
  108. package/ui/dist/assets/elm-Cshzl8qu.js +1 -0
  109. package/ui/dist/assets/emacs-lisp-B4R74twV.js +1 -0
  110. package/ui/dist/assets/erb-BOVmqWJf.js +1 -0
  111. package/ui/dist/assets/erlang-Cphh6RMH.js +1 -0
  112. package/ui/dist/assets/erlang-DaB2Rkuy.js +1 -0
  113. package/ui/dist/assets/factor-D7LVTn2l.js +1 -0
  114. package/ui/dist/assets/fcl-ClOhbFR7.js +1 -0
  115. package/ui/dist/assets/fennel-DQxkIbk2.js +1 -0
  116. package/ui/dist/assets/fish-BJitypiv.js +1 -0
  117. package/ui/dist/assets/fluent-C03EYrpw.js +1 -0
  118. package/ui/dist/assets/forth-Cezjo90N.js +1 -0
  119. package/ui/dist/assets/fortran-Bt6PBEDR.js +1 -0
  120. package/ui/dist/assets/fortran-fixed-form-DEKoE2YW.js +1 -0
  121. package/ui/dist/assets/fortran-free-form-CYNrtFtB.js +1 -0
  122. package/ui/dist/assets/fsharp-D13ZGOAj.js +1 -0
  123. package/ui/dist/assets/gas-BHEdbvp9.js +1 -0
  124. package/ui/dist/assets/gdresource-C0sCabJj.js +1 -0
  125. package/ui/dist/assets/gdscript-Cp2uCuqX.js +1 -0
  126. package/ui/dist/assets/gdshader-CBce3t8t.js +1 -0
  127. package/ui/dist/assets/genie-CV2tkWYe.js +1 -0
  128. package/ui/dist/assets/gherkin-DExj1W_8.js +1 -0
  129. package/ui/dist/assets/gherkin-oBAE_ms0.js +1 -0
  130. package/ui/dist/assets/git-commit-BSykSTBG.js +1 -0
  131. package/ui/dist/assets/git-rebase-DLQM-CxK.js +1 -0
  132. package/ui/dist/assets/gleam-CSRkHgEL.js +1 -0
  133. package/ui/dist/assets/glimmer-js-DzMlcKY7.js +1 -0
  134. package/ui/dist/assets/glimmer-ts-Dz691XKF.js +1 -0
  135. package/ui/dist/assets/glsl-CMQZ1AkF.js +1 -0
  136. package/ui/dist/assets/gn-ilITqXS6.js +1 -0
  137. package/ui/dist/assets/gnuplot-7GGW24-e.js +1 -0
  138. package/ui/dist/assets/go-rLFTqkRN.js +1 -0
  139. package/ui/dist/assets/graphql-DBKIWtF7.js +1 -0
  140. package/ui/dist/assets/groovy-BC3IOsC8.js +1 -0
  141. package/ui/dist/assets/groovy-CacY0gHj.js +1 -0
  142. package/ui/dist/assets/hack-DZbb_fkF.js +1 -0
  143. package/ui/dist/assets/haml-CSjdx5hj.js +1 -0
  144. package/ui/dist/assets/handlebars-Mu9SxQrl.js +1 -0
  145. package/ui/dist/assets/haskell-BRsoo5mP.js +1 -0
  146. package/ui/dist/assets/haskell-D8IpX4py.js +1 -0
  147. package/ui/dist/assets/haxe-DIz0ZZqd.js +1 -0
  148. package/ui/dist/assets/haxe-OTjmBuCE.js +1 -0
  149. package/ui/dist/assets/hcl-Dh228itO.js +1 -0
  150. package/ui/dist/assets/hjson-CxZEssPk.js +1 -0
  151. package/ui/dist/assets/hlsl-Cvrh5tZx.js +1 -0
  152. package/ui/dist/assets/html-D4wtNI0H.js +1 -0
  153. package/ui/dist/assets/html-derivative-DHrkr74L.js +1 -0
  154. package/ui/dist/assets/http-CLVgA2GD.js +1 -0
  155. package/ui/dist/assets/http-DtBk1Y64.js +1 -0
  156. package/ui/dist/assets/hurl-1qu6SWMo.js +1 -0
  157. package/ui/dist/assets/hxml-B0Qn7Nwc.js +1 -0
  158. package/ui/dist/assets/hy-CZbG8q4J.js +1 -0
  159. package/ui/dist/assets/idl-BUZw3wgd.js +1 -0
  160. package/ui/dist/assets/imba-DsUTQ-LC.js +1 -0
  161. package/ui/dist/assets/index-DT45eblI.css +1 -0
  162. package/ui/dist/assets/index-Dqm3ZFVQ.js +554 -0
  163. package/ui/dist/assets/ini-B5eOa1yu.js +1 -0
  164. package/ui/dist/assets/java-CLLSyNOn.js +1 -0
  165. package/ui/dist/assets/javascript-9Tg8ixDm.js +1 -0
  166. package/ui/dist/assets/javascript-B-_kYMSx.js +1 -0
  167. package/ui/dist/assets/jinja-BtHF51nI.js +1 -0
  168. package/ui/dist/assets/jison-C93_a--j.js +1 -0
  169. package/ui/dist/assets/json-C4FWYbGR.js +1 -0
  170. package/ui/dist/assets/json5-BR5RXkoi.js +1 -0
  171. package/ui/dist/assets/jsonc-CYpm1nAK.js +1 -0
  172. package/ui/dist/assets/jsonl-CmCQp5Yx.js +1 -0
  173. package/ui/dist/assets/jsonnet-CJTPZ8u_.js +1 -0
  174. package/ui/dist/assets/jssm-DXw9l8Rf.js +1 -0
  175. package/ui/dist/assets/jsx-BdkuTVvH.js +1 -0
  176. package/ui/dist/assets/julia-BmboAp4o.js +1 -0
  177. package/ui/dist/assets/julia-CQfgDRfP.js +1 -0
  178. package/ui/dist/assets/just-E1Wftakf.js +1 -0
  179. package/ui/dist/assets/kdl-CsD5j6eV.js +1 -0
  180. package/ui/dist/assets/kotlin-DhhofPvG.js +1 -0
  181. package/ui/dist/assets/kusto-C7mF5XQf.js +1 -0
  182. package/ui/dist/assets/latex-DZFvvGDu.js +1 -0
  183. package/ui/dist/assets/lean-CewbzKMR.js +1 -0
  184. package/ui/dist/assets/less-DVTAwKKz.js +1 -0
  185. package/ui/dist/assets/liquid-BUTRgRVi.js +1 -0
  186. package/ui/dist/assets/livescript-BXxG0Yva.js +1 -0
  187. package/ui/dist/assets/llvm-Cm23YOpf.js +1 -0
  188. package/ui/dist/assets/log-BNLmms1o.js +1 -0
  189. package/ui/dist/assets/logo-Cluzi2Zq.js +1 -0
  190. package/ui/dist/assets/lua-CiA1ziua.js +1 -0
  191. package/ui/dist/assets/lua-Dl1ciOfH.js +1 -0
  192. package/ui/dist/assets/luau-FMPmPwt6.js +1 -0
  193. package/ui/dist/assets/make-Dixweg8N.js +1 -0
  194. package/ui/dist/assets/markdown-BYOwaDjH.js +1 -0
  195. package/ui/dist/assets/marko-Bh-A3HQZ.js +1 -0
  196. package/ui/dist/assets/mathematica-u8YMmbU0.js +1 -0
  197. package/ui/dist/assets/matlab-D7qyCx1q.js +1 -0
  198. package/ui/dist/assets/mbox-BEMVcqjs.js +1 -0
  199. package/ui/dist/assets/mdc-C2XCGsSV.js +1 -0
  200. package/ui/dist/assets/mdx-DQZ5AkYe.js +1 -0
  201. package/ui/dist/assets/mermaid-Bk4SNUv9.js +1 -0
  202. package/ui/dist/assets/mipsasm-BMqwQI7S.js +1 -0
  203. package/ui/dist/assets/mirc-C9zpzAZU.js +1 -0
  204. package/ui/dist/assets/mllike-B45xgp2S.js +1 -0
  205. package/ui/dist/assets/modelica-CqHI_q-D.js +1 -0
  206. package/ui/dist/assets/mojo-BgCJLMeH.js +1 -0
  207. package/ui/dist/assets/moonbit-CaWjb8XO.js +1 -0
  208. package/ui/dist/assets/move-B1IS1UjX.js +1 -0
  209. package/ui/dist/assets/mscgen-qgSLujhx.js +1 -0
  210. package/ui/dist/assets/mumps-CW_TBmxz.js +1 -0
  211. package/ui/dist/assets/narrat-_X_XdTYD.js +1 -0
  212. package/ui/dist/assets/nextflow-BJtWHP5T.js +1 -0
  213. package/ui/dist/assets/nextflow-groovy-DJMQeKeT.js +1 -0
  214. package/ui/dist/assets/nginx-BMaDbqW3.js +1 -0
  215. package/ui/dist/assets/nginx-igqyMv_F.js +1 -0
  216. package/ui/dist/assets/nim-DelsCcX1.js +1 -0
  217. package/ui/dist/assets/nix-IvuFDN5E.js +1 -0
  218. package/ui/dist/assets/nsis-AQ_alPln.js +1 -0
  219. package/ui/dist/assets/ntriples-d28e9m0E.js +1 -0
  220. package/ui/dist/assets/nushell-DcLAeLz5.js +1 -0
  221. package/ui/dist/assets/objective-c-D1A_Heim.js +1 -0
  222. package/ui/dist/assets/objective-cpp-BsSzOQcm.js +1 -0
  223. package/ui/dist/assets/ocaml-O90oeIOV.js +1 -0
  224. package/ui/dist/assets/octave-D2Q8cUp1.js +1 -0
  225. package/ui/dist/assets/odin-B1RWQWA5.js +1 -0
  226. package/ui/dist/assets/openscad-BUDT5pXO.js +1 -0
  227. package/ui/dist/assets/oz-BwTct_5T.js +1 -0
  228. package/ui/dist/assets/pascal-4ZHwLPI5.js +1 -0
  229. package/ui/dist/assets/pascal-Dp_KdFgX.js +1 -0
  230. package/ui/dist/assets/perl-CdEHsPfU.js +1 -0
  231. package/ui/dist/assets/perl-Cgh7mkol.js +1 -0
  232. package/ui/dist/assets/php-DXn-4Rf4.js +1 -0
  233. package/ui/dist/assets/pig-AF4Hwhju.js +1 -0
  234. package/ui/dist/assets/pkl-ot-7Btpt.js +1 -0
  235. package/ui/dist/assets/plsql-DGHpHOYJ.js +1 -0
  236. package/ui/dist/assets/po-BiJDBrnU.js +1 -0
  237. package/ui/dist/assets/polar-C7UOKdEL.js +1 -0
  238. package/ui/dist/assets/postcss-BXeXVLqQ.js +1 -0
  239. package/ui/dist/assets/powerquery-DNMTfnFr.js +1 -0
  240. package/ui/dist/assets/powershell-CzG71I4L.js +1 -0
  241. package/ui/dist/assets/powershell-DshXNtvi.js +1 -0
  242. package/ui/dist/assets/prisma-BsRQq5mF.js +1 -0
  243. package/ui/dist/assets/prolog-iXnhIJG7.js +1 -0
  244. package/ui/dist/assets/properties-C357ku5U.js +1 -0
  245. package/ui/dist/assets/proto-DB4EqR-F.js +1 -0
  246. package/ui/dist/assets/protobuf-D1ij_kNL.js +1 -0
  247. package/ui/dist/assets/pug-BNWZhj7f.js +1 -0
  248. package/ui/dist/assets/pug-Bugr-47h.js +1 -0
  249. package/ui/dist/assets/puppet-B4hC2X4m.js +1 -0
  250. package/ui/dist/assets/puppet-CDv2pdJW.js +1 -0
  251. package/ui/dist/assets/purescript-9MfHhQsQ.js +1 -0
  252. package/ui/dist/assets/python-BqYw9LYJ.js +1 -0
  253. package/ui/dist/assets/python-gzcpVVnB.js +1 -0
  254. package/ui/dist/assets/q-B9NhS7L_.js +1 -0
  255. package/ui/dist/assets/qml-CHLXijrJ.js +1 -0
  256. package/ui/dist/assets/qmldir-DCQb3MpD.js +1 -0
  257. package/ui/dist/assets/qss-Fe1Jh2GI.js +1 -0
  258. package/ui/dist/assets/r-DADKenSm.js +1 -0
  259. package/ui/dist/assets/r-g949Oasl.js +1 -0
  260. package/ui/dist/assets/racket-DcIDlBhZ.js +1 -0
  261. package/ui/dist/assets/raku-B3gFvitq.js +1 -0
  262. package/ui/dist/assets/razor-BUv8GTQg.js +1 -0
  263. package/ui/dist/assets/reg-CRGYupPL.js +1 -0
  264. package/ui/dist/assets/regexp-Dxi3LqhO.js +1 -0
  265. package/ui/dist/assets/rel-BtDbiS_P.js +1 -0
  266. package/ui/dist/assets/riscv-Ckw8ddFX.js +1 -0
  267. package/ui/dist/assets/ron-VUp2lXgN.js +1 -0
  268. package/ui/dist/assets/rosmsg-CAekHB0j.js +1 -0
  269. package/ui/dist/assets/rpm-gpDK5sbt.js +1 -0
  270. package/ui/dist/assets/rst-CMQNxthU.js +1 -0
  271. package/ui/dist/assets/ruby-CDBQomnV.js +1 -0
  272. package/ui/dist/assets/ruby-DsYpTuWg.js +1 -0
  273. package/ui/dist/assets/rust-Cfkwpbl8.js +1 -0
  274. package/ui/dist/assets/sas-C2OyD2Y6.js +1 -0
  275. package/ui/dist/assets/sas-uuqXrFx7.js +1 -0
  276. package/ui/dist/assets/sass-DXrisJhu.js +1 -0
  277. package/ui/dist/assets/scala-DKOlJaKm.js +1 -0
  278. package/ui/dist/assets/scheme-CyDdOh7e.js +1 -0
  279. package/ui/dist/assets/scheme-DQCgrYNe.js +1 -0
  280. package/ui/dist/assets/scss-CniJSQ3f.js +1 -0
  281. package/ui/dist/assets/sdbl-bTVj8UrX.js +1 -0
  282. package/ui/dist/assets/shaderlab-TOUzSsQk.js +1 -0
  283. package/ui/dist/assets/shell-Du5Qg9im.js +1 -0
  284. package/ui/dist/assets/shellscript-CuBMk1iS.js +1 -0
  285. package/ui/dist/assets/shellsession-BzDlSDO2.js +1 -0
  286. package/ui/dist/assets/sieve-BAxa3IjF.js +1 -0
  287. package/ui/dist/assets/simple-mode-DRpGK0lJ.js +1 -0
  288. package/ui/dist/assets/smalltalk-B16xEiuN.js +1 -0
  289. package/ui/dist/assets/smalltalk-BLp5-jwC.js +1 -0
  290. package/ui/dist/assets/solidity-CKzVLygQ.js +1 -0
  291. package/ui/dist/assets/solr-BBopId9w.js +1 -0
  292. package/ui/dist/assets/soy-e0u5_VID.js +1 -0
  293. package/ui/dist/assets/sparql-D_iOobhT.js +1 -0
  294. package/ui/dist/assets/sparql-Dz-mlCAC.js +1 -0
  295. package/ui/dist/assets/splunk-BC2Px7Mm.js +1 -0
  296. package/ui/dist/assets/spreadsheet-CTIncYxj.js +1 -0
  297. package/ui/dist/assets/sql-Cbg060Y9.js +1 -0
  298. package/ui/dist/assets/sql-DcCJ9jop.js +1 -0
  299. package/ui/dist/assets/ssh-config-BgfXC-Er.js +1 -0
  300. package/ui/dist/assets/stata-n_N_Lnpt.js +1 -0
  301. package/ui/dist/assets/stex-sDrdk2BW.js +1 -0
  302. package/ui/dist/assets/stylus-B6D30XZt.js +1 -0
  303. package/ui/dist/assets/stylus-DLLZ8dgm.js +1 -0
  304. package/ui/dist/assets/surrealql-Sa2566xv.js +1 -0
  305. package/ui/dist/assets/svelte-B0zgpD2X.js +1 -0
  306. package/ui/dist/assets/swift-DKB6_1j6.js +1 -0
  307. package/ui/dist/assets/swift-DonLKvLd.js +1 -0
  308. package/ui/dist/assets/system-verilog-DJ5XKQeo.js +1 -0
  309. package/ui/dist/assets/systemd-BxMlprV5.js +1 -0
  310. package/ui/dist/assets/talonscript-CohzipZa.js +1 -0
  311. package/ui/dist/assets/tasl-DMoTqEGO.js +1 -0
  312. package/ui/dist/assets/tcl-BGfruO1u.js +1 -0
  313. package/ui/dist/assets/tcl-CZd0xW_V.js +1 -0
  314. package/ui/dist/assets/templ-BMfZts2f.js +1 -0
  315. package/ui/dist/assets/terraform-DswuEJGm.js +1 -0
  316. package/ui/dist/assets/tex-7PyiPoxe.js +1 -0
  317. package/ui/dist/assets/textile-DWBqthVk.js +1 -0
  318. package/ui/dist/assets/tiddlywiki-VlUiK86J.js +1 -0
  319. package/ui/dist/assets/tiki-CxVlf5KZ.js +1 -0
  320. package/ui/dist/assets/toml-CcmNWLt0.js +1 -0
  321. package/ui/dist/assets/toml-LvoKBwCs.js +1 -0
  322. package/ui/dist/assets/troff-C2dAgh7P.js +1 -0
  323. package/ui/dist/assets/ts-tags-nHnZDDzD.js +1 -0
  324. package/ui/dist/assets/tsv-sltzmVWM.js +1 -0
  325. package/ui/dist/assets/tsx-BgvqLYni.js +1 -0
  326. package/ui/dist/assets/ttcn-BePYh-hG.js +1 -0
  327. package/ui/dist/assets/ttcn-cfg-CY0aot7Q.js +1 -0
  328. package/ui/dist/assets/turtle-BDLWE2cD.js +1 -0
  329. package/ui/dist/assets/turtle-ByJddavk.js +1 -0
  330. package/ui/dist/assets/twig-BqJ1gUqf.js +1 -0
  331. package/ui/dist/assets/typescript-C2nbCIiA.js +1 -0
  332. package/ui/dist/assets/typespec-BRdr0IET.js +1 -0
  333. package/ui/dist/assets/typst-DI99ib-x.js +1 -0
  334. package/ui/dist/assets/unused-shiki-extras-CUWqhvIR.js +1 -0
  335. package/ui/dist/assets/v-DETTlOr0.js +1 -0
  336. package/ui/dist/assets/vala-zf12oZj6.js +1 -0
  337. package/ui/dist/assets/vb-BthdM_4N.js +1 -0
  338. package/ui/dist/assets/vb-Djn5o6TS.js +1 -0
  339. package/ui/dist/assets/vbscript-D9f6rSsU.js +1 -0
  340. package/ui/dist/assets/velocity-CqftRsjg.js +1 -0
  341. package/ui/dist/assets/verilog-CiiDBU1e.js +1 -0
  342. package/ui/dist/assets/verilog-D-x6ne0Z.js +1 -0
  343. package/ui/dist/assets/vhdl-BroJfC0k.js +1 -0
  344. package/ui/dist/assets/vhdl-CMrOq2q1.js +1 -0
  345. package/ui/dist/assets/viml-DvXPmvsu.js +1 -0
  346. package/ui/dist/assets/vue-B_l4_yyQ.js +1 -0
  347. package/ui/dist/assets/vue-html-qalJD3cY.js +1 -0
  348. package/ui/dist/assets/vue-vine-Cle_s8sp.js +1 -0
  349. package/ui/dist/assets/vyper-CgoNMtux.js +1 -0
  350. package/ui/dist/assets/wasm-ByWQv1Qj.js +1 -0
  351. package/ui/dist/assets/webidl-D5jiJvOU.js +1 -0
  352. package/ui/dist/assets/wenyan-C8pVoKbM.js +1 -0
  353. package/ui/dist/assets/wgsl-BsKzXJz4.js +1 -0
  354. package/ui/dist/assets/wikitext-ClFFjSW2.js +1 -0
  355. package/ui/dist/assets/wit-DdvCle-K.js +1 -0
  356. package/ui/dist/assets/wolfram-DLL8P-h_.js +1 -0
  357. package/ui/dist/assets/xml-CnKUcNAY.js +1 -0
  358. package/ui/dist/assets/xquery-fj_R-kMw.js +1 -0
  359. package/ui/dist/assets/xsl-D5cPGaiC.js +1 -0
  360. package/ui/dist/assets/yacas-CXXgtw0p.js +1 -0
  361. package/ui/dist/assets/yaml-BcZKwY9y.js +1 -0
  362. package/ui/dist/assets/z80-CL1naaMV.js +1 -0
  363. package/ui/dist/assets/zenscript-BnlCZFoB.js +1 -0
  364. package/ui/dist/assets/zig-CMLA9XwU.js +1 -0
  365. 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.
@@ -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`.