@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,28 @@
1
+ {
2
+ "hooks": {
3
+ "PermissionRequest": [
4
+ {
5
+ "matcher": "ExitPlanMode",
6
+ "hooks": [
7
+ {
8
+ "type": "command",
9
+ "command": "${CLAUDE_PLUGIN_ROOT}/bin/caret review",
10
+ "timeout": 3900
11
+ }
12
+ ]
13
+ }
14
+ ],
15
+ "PostToolUse": [
16
+ {
17
+ "matcher": "EnterPlanMode",
18
+ "hooks": [
19
+ {
20
+ "type": "command",
21
+ "command": "${CLAUDE_PLUGIN_ROOT}/bin/caret prewarm",
22
+ "timeout": 30
23
+ }
24
+ ]
25
+ }
26
+ ]
27
+ }
28
+ }
@@ -0,0 +1,293 @@
1
+ // caret's OpenCode plugin (EXC-339). OpenCode is plugin-shaped, not command-hook
2
+ // shaped: it loads this in-process module and lets it register tools and mutate
3
+ // config. caret has no native plan-approval gate to intercept here (OpenCode has
4
+ // no ExitPlanMode equivalent), so this plugin REGISTERS its own plan-review tool,
5
+ // steers the Plan agent to call it, and
6
+ // runs the review synchronously inside the tool's execute(): it spawns
7
+ // `caret review` (CARET_AGENT=opencode) with a caret-defined envelope on stdin,
8
+ // blocks until the human decides in caret's browser UI, and returns the approval
9
+ // or change-request string as the tool result. The whole caret daemon/review
10
+ // pipeline is reused unchanged — this plugin is the OpenCode-side counterpart to
11
+ // Claude Code's hooks.json, which likewise spawns `caret review`.
12
+ //
13
+ // Subagent-bypass mitigation: OpenCode's tool.execute.before does not fire for
14
+ // subagent tool calls, so caret does NOT rely on a hook to gate subagents. The
15
+ // config hook restricts the tool to primary agents (experimental.primary_tools +
16
+ // per-agent permission), and the tool body re-checks the caller — defense in depth.
17
+ //
18
+ // This file is deployed verbatim (with the two __CARET_*__ markers substituted) by
19
+ // `caret install-opencode` into OpenCode's auto-loaded plugin dir, so it is
20
+ // self-contained: its only imports are node:child_process and @opencode-ai/plugin
21
+ // (the latter resolved by OpenCode at runtime). Live in-OpenCode verification of
22
+ // the exact ctx/tool/config shapes against the installed OpenCode version is a
23
+ // documented follow-up; the pure logic below is covered by test/opencode/.
24
+
25
+ import { spawn } from "node:child_process";
26
+ import { type Hooks, type Plugin, tool } from "@opencode-ai/plugin";
27
+
28
+ /** Install-time markers: `caret install-opencode` rewrites these string literals
29
+ * with the resolved caret version and binary path before deploying this file. */
30
+ export const CARET_PLUGIN_VERSION = "__CARET_VERSION__";
31
+ const CARET_BIN = "__CARET_BIN__";
32
+
33
+ /** The plan-review tool the Plan agent calls. */
34
+ export const REVIEW_TOOL = "caret_review_plan";
35
+
36
+ /** OpenCode's built-in primary planning agent — the one agent caret steers toward
37
+ * the review tool and allows to call it. */
38
+ export const PLANNING_AGENTS = ["plan"] as const;
39
+
40
+ export interface CaretDecision {
41
+ behavior: "allow" | "deny";
42
+ feedback?: string;
43
+ }
44
+
45
+ // ---------------------------------------------------------------------------
46
+ // Pure helpers (exported for unit tests)
47
+ // ---------------------------------------------------------------------------
48
+
49
+ /** The first markdown heading in the plan, used as the review title — or
50
+ * undefined when the plan has no `# ` heading. */
51
+ export function planTitle(plan: string): string | undefined {
52
+ for (const line of plan.split("\n")) {
53
+ const m = line.match(/^#\s+(.+?)\s*$/);
54
+ if (m?.[1]) return m[1];
55
+ }
56
+ return undefined;
57
+ }
58
+
59
+ /** Build the caret review envelope `caret review` (CARET_AGENT=opencode) parses.
60
+ * Mirrors the snake_case session/cwd shape the opencode adapter's parseHookInput
61
+ * reads — both ends are caret-owned. */
62
+ export function buildEnvelope(
63
+ plan: string,
64
+ ctx: { sessionID?: string; directory?: string },
65
+ ): string {
66
+ return JSON.stringify({
67
+ session_id: ctx.sessionID,
68
+ cwd: ctx.directory,
69
+ tool_input: { plan, title: planTitle(plan) },
70
+ });
71
+ }
72
+
73
+ /** Parse the single decision JSON line `caret review` prints on stdout. Fail-safe:
74
+ * anything unrecognized or unparseable becomes a deny — shipping an unreviewed
75
+ * plan is the one outcome caret never allows. */
76
+ export function parseDecision(stdout: string): CaretDecision {
77
+ const line =
78
+ stdout
79
+ .trim()
80
+ .split("\n")
81
+ .map((s) => s.trim())
82
+ .filter(Boolean)
83
+ .at(-1) ?? "";
84
+ try {
85
+ const d = JSON.parse(line) as { behavior?: unknown; feedback?: unknown };
86
+ if (d.behavior === "allow") return { behavior: "allow" };
87
+ if (d.behavior === "deny") {
88
+ return {
89
+ behavior: "deny",
90
+ feedback: typeof d.feedback === "string" ? d.feedback : "Plan changes requested.",
91
+ };
92
+ }
93
+ return failsafeDeny("caret: unrecognized review decision — denying to fail safe.");
94
+ } catch {
95
+ return failsafeDeny("caret: could not parse the review decision — denying to fail safe.");
96
+ }
97
+ }
98
+
99
+ function failsafeDeny(feedback: string): CaretDecision {
100
+ return { behavior: "deny", feedback };
101
+ }
102
+
103
+ /** Only the configured planning agent(s) may call the review tool — the second
104
+ * line of defense against the subagent-bypass (the config hook is the first). */
105
+ export function isPlanningAgent(agent: string | undefined): boolean {
106
+ return agent !== undefined && (PLANNING_AGENTS as readonly string[]).includes(agent);
107
+ }
108
+
109
+ /** Tool result returned to the agent on approval. */
110
+ export function approvedMessage(): string {
111
+ return "caret: the user APPROVED this plan. Proceed with the implementation as planned.";
112
+ }
113
+
114
+ /** Tool result returned to the agent on a change request: the reviewer feedback
115
+ * plus a line-numbered copy of the current plan so the agent can revise precisely
116
+ * and resubmit via the same tool. */
117
+ export function deniedMessage(feedback: string, plan: string): string {
118
+ const lines = plan.split("\n");
119
+ const numbered = lines.map((l, i) => `${i + 1}\t${l}`).join("\n");
120
+ return [
121
+ "caret: the user requested CHANGES to this plan.",
122
+ "",
123
+ "Feedback:",
124
+ feedback,
125
+ "",
126
+ `Revise the plan accordingly, then call \`${REVIEW_TOOL}\` again with the updated plan.`,
127
+ "",
128
+ `## Current plan (${lines.length} lines)`,
129
+ "",
130
+ "```",
131
+ numbered,
132
+ "```",
133
+ ].join("\n");
134
+ }
135
+
136
+ /** The planning-prompt steer appended to the system array so the Plan agent
137
+ * submits its plan to caret instead of calling the native plan_exit. */
138
+ export function planningSteer(): string {
139
+ return [
140
+ "## Plan review (caret)",
141
+ "",
142
+ `When you have a plan ready for the user, do NOT call plan_exit. Instead call the \`${REVIEW_TOOL}\` tool with your full plan (markdown) as the \`plan\` argument.`,
143
+ "It opens caret's visual review UI in the browser; the user approves or requests changes. Any change request comes back as the tool result — revise the plan and call the tool again until it is approved.",
144
+ ].join("\n");
145
+ }
146
+
147
+ // --- config-hook mutation (subagent-bypass mitigation) -------------------------
148
+
149
+ type LooseAgent = { mode?: string; permission?: unknown } & Record<string, unknown>;
150
+ type LooseConfig = {
151
+ experimental?: { primary_tools?: string[] } & Record<string, unknown>;
152
+ agent?: Record<string, LooseAgent>;
153
+ } & Record<string, unknown>;
154
+
155
+ /** Mutate the OpenCode config in place to (1) mark the review tool primary-only so
156
+ * subagents cannot call it, and (2) allow it on the planning agent while denying it
157
+ * on the build agent. Idempotent and preservation-safe (existing primary_tools,
158
+ * agent modes, and other permissions are kept). */
159
+ export function applyCaretConfig(config: LooseConfig): void {
160
+ config.experimental ??= {};
161
+ const pt = Array.isArray(config.experimental.primary_tools)
162
+ ? config.experimental.primary_tools
163
+ : [];
164
+ if (!pt.includes(REVIEW_TOOL)) config.experimental.primary_tools = [...pt, REVIEW_TOOL];
165
+
166
+ for (const name of PLANNING_AGENTS) setToolPermission(config, name, "allow");
167
+ // Deny on the build agent so a non-planning primary can't ship an unreviewed plan.
168
+ setToolPermission(config, "build", "deny");
169
+ }
170
+
171
+ function ensureAgent(config: LooseConfig, name: string): LooseAgent {
172
+ config.agent ??= {};
173
+ config.agent[name] ??= {};
174
+ return config.agent[name];
175
+ }
176
+
177
+ /** Return the agent's permission map, normalizing the two degenerate shapes
178
+ * OpenCode allows — a bare action string (preserved as a `"*"` catch-all) or an
179
+ * absent/non-object value — so the assignment below never corrupts it. */
180
+ function ensurePermission(agent: LooseAgent): Record<string, unknown> {
181
+ const p = agent.permission;
182
+ if (typeof p === "string") agent.permission = { "*": p };
183
+ else if (typeof p !== "object" || p === null) agent.permission = {};
184
+ return agent.permission as Record<string, unknown>;
185
+ }
186
+
187
+ function setToolPermission(config: LooseConfig, agentName: string, action: "allow" | "deny"): void {
188
+ ensurePermission(ensureAgent(config, agentName))[REVIEW_TOOL] = action;
189
+ }
190
+
191
+ // --- the spawn bridge ----------------------------------------------------------
192
+
193
+ /** Runs `caret review`, returning its captured stdout. Injected so execute() is
194
+ * unit-testable without spawning a real process. */
195
+ export type SpawnRunner = (
196
+ bin: string,
197
+ env: Record<string, string | undefined>,
198
+ stdin: string,
199
+ ) => Promise<{ stdout: string; exitCode: number }>;
200
+
201
+ /** Spawn `caret review` with the review envelope on stdin and CARET_AGENT=opencode,
202
+ * then parse its decision line. Any spawn failure fails safe to a deny. */
203
+ export async function runReviewViaCaret(
204
+ envelope: string,
205
+ opts: { bin: string; run: SpawnRunner },
206
+ ): Promise<CaretDecision> {
207
+ try {
208
+ const { stdout } = await opts.run(
209
+ opts.bin,
210
+ { ...process.env, CARET_AGENT: "opencode" },
211
+ envelope,
212
+ );
213
+ return parseDecision(stdout);
214
+ } catch (e) {
215
+ const message = e instanceof Error ? e.message : String(e);
216
+ return failsafeDeny(`caret: review failed to run (${message}) — denying to fail safe.`);
217
+ }
218
+ }
219
+
220
+ /** Production runner: spawn the caret binary's `review` subcommand. stderr is
221
+ * inherited so caret's "review this plan at <url>" line reaches the user. */
222
+ const nodeSpawnRunner: SpawnRunner = (bin, env, stdin) =>
223
+ new Promise((resolve, reject) => {
224
+ const child = spawn(bin, ["review"], { env, stdio: ["pipe", "pipe", "inherit"] });
225
+ let stdout = "";
226
+ child.stdout.on("data", (chunk) => {
227
+ stdout += chunk.toString();
228
+ });
229
+ child.on("error", reject);
230
+ child.on("close", (code) => resolve({ stdout, exitCode: code ?? 0 }));
231
+ child.stdin.write(stdin);
232
+ child.stdin.end();
233
+ });
234
+
235
+ // ---------------------------------------------------------------------------
236
+ // The plugin
237
+ // ---------------------------------------------------------------------------
238
+
239
+ /** Build the caret OpenCode plugin. The DI seam (bin/run) keeps the tool's
240
+ * execute() unit-testable; the default export wires the production runner. */
241
+ export function createCaretPlugin(opts: { bin?: string; run?: SpawnRunner } = {}): Plugin {
242
+ const bin = opts.bin ?? process.env.CARET_OPENCODE_BIN ?? CARET_BIN;
243
+ const run = opts.run ?? nodeSpawnRunner;
244
+
245
+ return async () => {
246
+ const hooks: Hooks = {
247
+ // Restrict the review tool to primary agents + allow/deny per agent.
248
+ config: async (config) => {
249
+ applyCaretConfig(config as unknown as LooseConfig);
250
+ },
251
+ // Steer the Plan agent to submit its plan to caret instead of plan_exit.
252
+ "experimental.chat.system.transform": async (_input, output) => {
253
+ output.system.push(planningSteer());
254
+ },
255
+ // Redirect the native plan_exit tool's description toward caret's tool.
256
+ "tool.definition": async (input, output) => {
257
+ if (input.toolID === "plan_exit") {
258
+ output.description = `Do not call this tool. Call ${REVIEW_TOOL} instead — it opens caret's visual plan-review UI for human approval.`;
259
+ }
260
+ },
261
+ tool: {
262
+ [REVIEW_TOOL]: tool({
263
+ description:
264
+ "Submit the current plan to caret for human review in a local browser UI. Blocks until the user approves or requests changes. On a change request, revise the plan and call this tool again with the updated plan.",
265
+ args: {
266
+ plan: tool.schema
267
+ .string()
268
+ .describe("The complete plan, as markdown, to present for human review."),
269
+ },
270
+ async execute(args, context) {
271
+ const agent = (context as { agent?: string }).agent;
272
+ if (!isPlanningAgent(agent)) {
273
+ return `${REVIEW_TOOL} is restricted to the plan agent (${PLANNING_AGENTS.join(", ")}); it was called by "${agent ?? "unknown"}". Continue without caret review, or switch to the plan agent and resubmit.`;
274
+ }
275
+ const envelope = buildEnvelope(args.plan, {
276
+ sessionID: context.sessionID,
277
+ directory: context.directory,
278
+ });
279
+ const decision = await runReviewViaCaret(envelope, { bin, run });
280
+ return decision.behavior === "allow"
281
+ ? approvedMessage()
282
+ : deniedMessage(decision.feedback ?? "Plan changes requested.", args.plan);
283
+ },
284
+ }),
285
+ },
286
+ };
287
+ return hooks;
288
+ };
289
+ }
290
+
291
+ /** The deployed plugin OpenCode auto-loads (bare default-export function). */
292
+ const CaretPlugin: Plugin = createCaretPlugin();
293
+ export default CaretPlugin;
@@ -0,0 +1,53 @@
1
+ ---
2
+ description: Review caret's recent reviews and errors from its logs 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 sent for review and their outcomes — and surfaces recent errors so a
7
+ failure can be diagnosed. A failure usually first shows as a deny like "caret: … — denying
8
+ so no unreviewed plan ships."
9
+
10
+ ## 1. Locate caret's state
11
+
12
+ ```bash
13
+ dir="${XDG_STATE_HOME:-$HOME/.local/state}/caret"
14
+ ```
15
+
16
+ - `reviews/<id>.json` — one JSON review record per file: `id`, `sessionId`, `cwd`,
17
+ `title`, `status` (`pending`/`rejected`/`approved`/`expired`), a `versions` array, and
18
+ (once resolved) a `decision`.
19
+ - `caret.log` / `daemon.log` — NDJSON, one object per line: `level` (pino numeric: 20
20
+ debug, 30 info, 40 warn, 50 error), `time`, `step`, `msg`, and on errors an `err` chain.
21
+ Feedback and plan bodies are never logged.
22
+
23
+ ## 2. Session review
24
+
25
+ Reconstruct this session's reviews (newest session whose `cwd` matches the working
26
+ directory), grouped by status. Never select or echo `versions[].plan` or
27
+ `generalCommentDraft` — they hold full plan/draft bodies.
28
+
29
+ ```bash
30
+ sid=$(jq -rs --arg cwd "$PWD" '[.[] | select(.cwd == $cwd)] | sort_by(.updatedAt) | last | .sessionId // empty' "$dir"/reviews/*.json)
31
+ jq -s --arg sid "$sid" '[.[] | select(.sessionId == $sid)] | sort_by(.createdAt) | .[] | {id, title, status, versions: (.versions | length), feedback: .decision.feedback}' "$dir"/reviews/*.json
32
+ ```
33
+
34
+ If `$dir/reviews` is missing or empty the glob won't match — treat that as "no reviews
35
+ recorded", not a failure.
36
+
37
+ ## 3. Recent errors
38
+
39
+ ```bash
40
+ grep '^{' "$dir/caret.log" | jq -s '[.[] | select(.level >= 50)] | .[-5:]'
41
+ grep '^{' "$dir/daemon.log" | jq -s '[.[] | select(.level >= 50)] | .[-5:]'
42
+ tail -n 40 "$dir/daemon.log"
43
+ ```
44
+
45
+ A "socket connection closed" on the hook side often has its real cause on the daemon side
46
+ — check both. If neither log has a record with `level >= 50`, report "caret has no errors
47
+ recorded".
48
+
49
+ ## 4. Debug
50
+
51
+ If a failure is present, reason from the failing step, msg, cause, and stack to the likely
52
+ cause and propose a fix. Keep output diagnostic-focused; never fetch or echo plan content
53
+ into the conversation.
@@ -0,0 +1,29 @@
1
+ ---
2
+ description: Demo caret by submitting a short fake plan to caret's review UI
3
+ agent: plan
4
+ ---
5
+
6
+ This is a caret demo. Do **not** do any real work, research, or file edits — the only goal
7
+ is to exercise caret's plan-review flow.
8
+
9
+ Call the `caret_review_plan` tool with the following short, deliberately-fake plan as the
10
+ `plan` argument (verbatim):
11
+
12
+ ```markdown
13
+ # Demo plan
14
+
15
+ ## Context
16
+ Exercise caret's review flow end to end — nothing here is real work.
17
+
18
+ ## Steps
19
+ 1. Pretend to add a `GET /status` endpoint returning `{ ok: true }`.
20
+ 2. Pretend to register it before the rate limiter.
21
+ 3. Pretend to add a unit test asserting 200 and the JSON body.
22
+ ```
23
+
24
+ caret opens the plan in a local browser UI for inline review. When the user approves or
25
+ requests changes, the decision returns as the tool result:
26
+
27
+ - **Approved** → acknowledge that caret approved the demo plan, and stop.
28
+ - **Changes requested** → revise the fake plan per the feedback and call
29
+ `caret_review_plan` again (caret captures it as a new version).
@@ -0,0 +1,31 @@
1
+ ---
2
+ description: Gather a redacted caret diagnostics snapshot 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 OpenCode adapter's install-state probe (plugin version, enabled state), log
8
+ sizes and error counts, and system basics. The report is **always redacted** (home paths
9
+ become `~`, foreign usernames censored) and never contains plan, prompt, or feedback
10
+ bodies — it exists to be shared.
11
+
12
+ First ask the user (briefly) which format they want:
13
+
14
+ - **JSON** — for pasting into a bug report or feeding to tooling.
15
+ - **Human-readable** — for scanning in the conversation.
16
+
17
+ Then run the matching invocation (the `CARET_AGENT=opencode` selector makes the install
18
+ probe read caret's OpenCode plugin state):
19
+
20
+ ```bash
21
+ CARET_AGENT=opencode "__CARET_BIN__" discovery --json # JSON
22
+ CARET_AGENT=opencode "__CARET_BIN__" discovery # human-readable
23
+ ```
24
+
25
+ End your output with the command's stdout **verbatim** in a fenced code block so the user
26
+ can copy it straight into a bug report. Add nothing inside the block and do not summarize
27
+ sections away — the report is already redacted and complete. A degraded section (e.g.
28
+ `daemon error: …`) is normal when the daemon is down; present it as-is.
29
+
30
+ If the command exits non-zero, present the exit code and stderr instead. If the binary is
31
+ missing (a checkout that was never built), say so and point at caret's install script.
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "@macintacos/caret",
3
+ "version": "0.1.1",
4
+ "license": "MIT",
5
+ "type": "module",
6
+ "description": "A Claude Code plugin that replaces the terminal plan-approval prompt with a local web UI for inline review, annotation, and approval.",
7
+ "homepage": "https://github.com/macintacos/caret",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/macintacos/caret.git"
11
+ },
12
+ "publishConfig": {
13
+ "access": "public"
14
+ },
15
+ "files": [
16
+ "dist/",
17
+ "ui/dist/",
18
+ "bin/caret",
19
+ "hooks/",
20
+ "commands/",
21
+ "opencode/",
22
+ ".claude-plugin/plugin.json"
23
+ ],
24
+ "scripts": {
25
+ "test": "bun test --conditions browser",
26
+ "lint": "mise run lint",
27
+ "format": "mise run format",
28
+ "build": "mise run build"
29
+ },
30
+ "devDependencies": {
31
+ "@happy-dom/global-registrator": "^20.9.0",
32
+ "@opencode-ai/plugin": "^1.16.2",
33
+ "@playwright/test": "^1.60.0",
34
+ "@sveltejs/vite-plugin-svelte": "^7.1.2",
35
+ "@types/bun": "^1.3.14",
36
+ "@types/semver": "^7.7.1",
37
+ "happy-dom": "^20.9.0",
38
+ "listr2": "^10.2.1",
39
+ "pino-pretty": "^13.1.3",
40
+ "svelte": "^5.55.9",
41
+ "svelte-check": "^4.4.8",
42
+ "typescript": "^6.0.3",
43
+ "vite": "^8.0.14"
44
+ },
45
+ "dependencies": {
46
+ "@codemirror/commands": "^6.10.3",
47
+ "@codemirror/lang-markdown": "^6.5.0",
48
+ "@codemirror/language": "^6.12.3",
49
+ "@codemirror/language-data": "^6.5.2",
50
+ "@codemirror/state": "^6.6.0",
51
+ "@codemirror/view": "^6.43.0",
52
+ "@commander-js/extra-typings": "^15.0.0",
53
+ "@lezer/highlight": "^1.2.3",
54
+ "@pierre/diffs": "1.2.7",
55
+ "commander": "^15.0.0",
56
+ "marked": "^18.0.4",
57
+ "pino": "^10.3.1",
58
+ "prettier": "3.8.3",
59
+ "semver": "^7.8.1",
60
+ "shiki": "^4.1.0",
61
+ "smol-toml": "1.6.1",
62
+ "xss": "^1.0.15",
63
+ "zod": "4.4.3"
64
+ }
65
+ }
@@ -0,0 +1 @@
1
+ var e=[Object.freeze(JSON.parse(`{"displayName":"ABAP","fileTypes":["abap","ABAP"],"foldingStartMarker":"/\\\\*\\\\*|\\\\{\\\\s*$","foldingStopMarker":"\\\\*\\\\*/|^\\\\s*}","name":"abap","patterns":[{"captures":{"1":{"name":"punctuation.definition.comment.abap"}},"match":"^\\\\*.*\\\\n?","name":"comment.line.full.abap"},{"captures":{"1":{"name":"punctuation.definition.comment.abap"}},"match":"\\".*\\\\n?","name":"comment.line.partial.abap"},{"match":"(?<!\\\\S)##.*?(?=([,.:\\\\s]))","name":"comment.line.pragma.abap"},{"match":"(?i)(?<=[-~\\\\s])(?<=[-=]>)([/_a-z][/-9_a-z]*)(?=\\\\s+(?:|[-*+/]|&&?)=\\\\s+)","name":"variable.other.abap"},{"match":"\\\\b[0-9]+(\\\\b|[,.])","name":"constant.numeric.abap"},{"match":"(?i)(^|\\\\s+)((P(?:UBLIC|RIVATE|ROTECTED))\\\\sSECTION)(?=\\\\s+|[.:])","name":"storage.modifier.class.abap"},{"begin":"(?<!\\\\\\\\)(\\\\|)(.*?)","beginCaptures":{"1":{"name":"constant.character.escape.abap"}},"end":"(?<!\\\\\\\\)(\\\\||(\\\\\\\\\\\\\\\\\\\\|))","endCaptures":{"1":{"name":"constant.character.escape.abap"}},"name":"string.interpolated.abap","patterns":[{"match":"(\\\\{ )|( })","name":"constant.character.escape"},{"match":"\\\\\\\\\\\\|","name":"constant.character.escape.abap"},{"match":"(?i)(?<=\\\\s)(align|alpha|case|country|currency|date|decimals|exponent|number|pad|sign|style|time|timestamp|timezone|width|xsd|zero)(?=\\\\s=)","name":"entity.name.property.stringtemplate.abap"},{"match":"(?i)(?<==\\\\s)(center|engineering|environment|in|iso|left|leftplus|leftspace|lower|no|out|raw|right|rightplus|rightspace|scale_preserving|scale_preserving_scientific|scientific|scientific_with_leading_zero|sign_as_postfix|simple|space|upper|user|yes)(?=\\\\s)","name":"entity.value.property.stringtemplate.abap"}]},{"begin":"'","end":"'","name":"string.quoted.single.abap","patterns":[{"match":"''","name":"constant.character.escape.abap"}]},{"begin":"\`","end":"\`","name":"string.quoted.single.abap","patterns":[{"match":"\`\`","name":"constant.character.escape.abap"}]},{"begin":"(?i)^\\\\s*(class)\\\\s([/_a-z][/-9_a-z]*)","beginCaptures":{"1":{"name":"storage.type.block.abap"},"2":{"name":"entity.name.type.block.abap"}},"end":"\\\\s*\\\\.\\\\s*\\\\n?","name":"meta.block.begin.implementation.abap","patterns":[{"match":"(?i)(^|\\\\s+)(definition|implementation|public|inheriting\\\\s+from|final|deferred|abstract|shared\\\\s+memory\\\\s+enabled|(global|local)*\\\\s*friends|(create\\\\s+(p(?:ublic|rotected|rivate)))|for\\\\s+behavior\\\\s+of|for\\\\s+testing|risk\\\\s+level\\\\s+(critical|dangerous|harmless))|duration\\\\s(short|medium|long)(?=\\\\s+|\\\\.)","name":"storage.modifier.class.abap"},{"begin":"(?=[A-Z_a-z][0-9A-Z_a-z]*)","contentName":"entity.name.type.block.abap","end":"(?![0-9A-Z_a-z])","patterns":[{"include":"#generic_names"}]}]},{"begin":"(?i)^\\\\s*(method)\\\\s(?:([/_a-z][/-9_a-z]*)~)?([/_a-z][/-9_a-z]*)","beginCaptures":{"1":{"name":"storage.type.block.abap"},"2":{"name":"entity.name.type.abap"},"3":{"name":"entity.name.function.abap"}},"end":"\\\\s*\\\\.\\\\s*\\\\n?","patterns":[{"match":"(?i)(?<=^|\\\\s)(BY(?:\\\\s+DATABASE(\\\\s+PROCEDURE|\\\\s+FUNCTION|\\\\s+GRAPH\\\\s+WORKSPACE)|\\\\s+KERNEL\\\\s+MODULE))(?=\\\\s+|\\\\.)","name":"storage.modifier.method.abap"},{"match":"(?i)(?<=^|\\\\s)(FOR\\\\s+(HDB|LLANG))(?=\\\\s+|\\\\.)","name":"storage.modifier.method.abap"},{"match":"(?i)(?<=\\\\s)(OPTIONS\\\\s+(READ-ONLY|DETERMINISTIC|SUPPRESS\\\\s+SYNTAX\\\\s+ERRORS))(?=\\\\s+|\\\\.)","name":"storage.modifier.method.abap"},{"match":"(?i)(?<=^|\\\\s)(LANGUAGE\\\\s+(SQLSCRIPT|SQL|GRAPH))(?=\\\\s+|\\\\.)","name":"storage.modifier.method.abap"},{"captures":{"1":{"name":"storage.modifier.method.abap"}},"match":"(?i)(?<=\\\\s)(USING)\\\\s+([/_a-z][/-9=>_a-z]*)+(?=\\\\s+|\\\\.)"},{"begin":"(?=[A-Z_a-z][0-9A-Z_a-z]*)","end":"(?![0-9A-Z_a-z])","patterns":[{"include":"#generic_names"}]}]},{"begin":"(?i)^\\\\s*(INTERFACE)\\\\s([/_a-z][/-9_a-z]*)","beginCaptures":{"1":{"name":"storage.type.block.abap"},"2":{"name":"entity.name.type.abap"}},"end":"\\\\s*\\\\.\\\\s*\\\\n?","patterns":[{"match":"(?i)(?<=^|\\\\s)(DEFERRED|PUBLIC)(?=\\\\s+|\\\\.)","name":"storage.modifier.method.abap"}]},{"begin":"(?i)^\\\\s*(FORM)\\\\s([/_a-z][-/-9?_a-z]*)","beginCaptures":{"1":{"name":"storage.type.block.abap"},"2":{"name":"entity.name.type.abap"}},"end":"\\\\s*\\\\.\\\\s*\\\\n?","patterns":[{"match":"(?i)(?<=^|\\\\s)(USING|TABLES|CHANGING|RAISING|IMPLEMENTATION|DEFINITION)(?=\\\\s+|\\\\.)","name":"storage.modifier.form.abap"},{"include":"#abaptypes"},{"include":"#keywords_followed_by_braces"}]},{"match":"(?i)(end(?:class|method|form|interface))","name":"storage.type.block.end.abap"},{"match":"(?i)(<[A-Z_a-z][0-9A-Z_a-z]*>)","name":"variable.other.field.symbol.abap"},{"include":"#keywords"},{"include":"#abap_constants"},{"include":"#reserved_names"},{"include":"#operators"},{"include":"#builtin_functions"},{"include":"#abaptypes"},{"include":"#system_fields"},{"include":"#sql_functions"},{"include":"#sql_types"}],"repository":{"abap_constants":{"match":"(?i)(?<=\\\\s)(initial|null|@?space|@?abap_true|@?abap_false|@?abap_undefined|table_line|%_final|%_hints|%_predefined|col_background|col_group|col_heading|col_key|col_negative|col_normal|col_positive|col_total|adabas|as400|db2|db6|hdb|oracle|sybase|mssqlnt|pos_low|pos_high)(?=[,.\\\\s])","name":"constant.language.abap"},"abaptypes":{"patterns":[{"match":"(?i)\\\\s(abap_bool|string|xstring|any|clike|csequence|numeric|xsequence|decfloat|decfloat16|decfloat34|utclong|simple|int8|[cdfinptx])(?=[,.\\\\s])","name":"support.type.abap"},{"match":"(?i)\\\\s(TYPE|REF|TO|LIKE|LINE|OF|STRUCTURE|STANDARD|SORTED|HASHED|INDEX|TABLE|WITH|UNIQUE|NON-UNIQUE|SECONDARY|DEFAULT|KEY)(?=[,.\\\\s])","name":"keyword.control.simple.abap"}]},"arithmetic_operator":{"match":"(?i)(?<=\\\\s)([-*+]|\\\\*\\\\*|[%/]|DIV|MOD|BIT-AND|BIT-OR|BIT-XOR|BIT-NOT)(?=\\\\s)","name":"keyword.control.simple.abap"},"builtin_functions":{"match":"(?i)(?<=\\\\s)(abs|sign|ceil|floor|trunc|frac|acos|asin|atan|cos|sin|tan|cosh|sinh|tanh|exp|log|log10|sqrt|strlen|xstrlen|charlen|lines|numofchar|dbmaxlen|round|rescale|nmax|nmin|cmax|cmin|boolc|boolx|xsdbool|contains|contains_any_of|contains_any_not_of|matches|line_exists|ipow|char_off|count|count_any_of|count_any_not_of|distance|condense|concat_lines_of|escape|find|find_end|find_any_of|find_any_not_of|insert|match|repeat|replace|reverse|segment|shift_left|shift_right|substring|substring_after|substring_from|substring_before|substring_to|to_upper|to_lower|to_mixed|from_mixed|translate|bit-set|line_index)(?=\\\\()","name":"entity.name.function.builtin.abap"},"comparison_operator":{"match":"(?i)(?<=\\\\s)([<>]|<=|>=|=|<>|eq|ne|lt|le|gt|ge|cs|cp|co|cn|ca|na|ns|np|byte-co|byte-cn|byte-ca|byte-na|byte-cs|byte-ns|[moz])(?=\\\\s)","name":"keyword.control.simple.abap"},"control_keywords":{"match":"(?i)(^|\\\\s)(at|case|catch|continue|do|elseif|else|endat|endcase|endcatch|enddo|endif|endloop|endon|endtry|endwhile|if|loop|on|raise|try|while)(?=[.:\\\\s])","name":"keyword.control.flow.abap"},"generic_names":{"match":"[A-Z_a-z][0-9A-Z_a-z]*"},"keywords":{"patterns":[{"include":"#main_keywords"},{"include":"#text_symbols"},{"include":"#control_keywords"},{"include":"#keywords_followed_by_braces"}]},"keywords_followed_by_braces":{"captures":{"1":{"name":"keyword.control.simple.abap"},"2":{"name":"variable.other.abap"}},"match":"(?i)\\\\b(data|value|field-symbol|final|reference|resumable)\\\\((<?[/_a-z][/-9_a-z]*>?)\\\\)"},"logical_operator":{"match":"(?i)(?<=\\\\s)(not|or|and)(?=\\\\s)","name":"keyword.control.simple.abap"},"main_keywords":{"match":"(?i)(?<=^|\\\\s)(abap-source|abstract|accept|accepting|access|according|action|activation|actual|add|add-corresponding|adjacent|after|alias|aliases|all|allocate|amdp|analysis|analyzer|append|appending|application|archive|area|arithmetic|as|ascending|assert|assign|assigned|assigning|association|asynchronous|at|attributes|authority|authority-check|authorization|auto|back|background|backward|badi|base|before|begin|behavior|between|binary|bit|blanks??|blocks??|bound|boundaries|bounds|boxed|break|break-point|buffer|by|bypassing|byte|byte-order|call|calling|cast|casting|cds|centered|change|changing|channels|char-to-hex|character|check|checkbox|cid|circular|class|class-data|class-events|class-methods??|class-pool|cleanup|clear|clients??|clock|clone|close|cnt|code|collect|color|column|comments??|commit|common|communication|comparing|components??|compression|compute|concatenate|cond|condense|condition|connection|constants??|contexts??|controls??|conv|conversion|convert|copy|corresponding|count|country|cover|create|currency|current|cursor|customer-function|data|database|datainfo|dataset|date|daylight|ddl|deallocate|decimals|declarations|deep|default|deferred|define|delete|deleting|demand|descending|describe|destination|detail|determine|dialog|did|directory|discarding|display|display-mode|distance|distinct|divide|divide-corresponding|dummy|duplicates??|duration|during|dynpro|edit|editor-call|empty|enabled|enabling|encoding|end|end-enhancement-section|end-of-definition|end-of-page|end-of-selection|end-test-injection|end-test-seam|endenhancement|endexec|endfunction|endian|ending|endmodule|endprovide|endselect|endwith|enhancement|enhancement-point|enhancement-section|enhancements|entities|entity|entries|entry|enum|equiv|errors|escape|escaping|events??|exact|except|exception|exception-table|exceptions|excluding|exec|execute|exists|exit|exit-command|expanding|explicit|exponent|export|exporting|extended|extension|extract|fail|failed|features|fetch|field|field-groups|field-symbols|fields|file|fill|filters??|final|find|first|first-line|fixed-point|flush|following|for|format|forward|found|frames??|free|from|full|function|function-pool|generate|get|giving|graph|groups??|handler??|hashed|having|headers??|heading|help-id|help-request|hide|hint|hold|hotspot|icon|id|identification|identifier|ignore|ignoring|immediately|implemented|implicit|import|importing|in|inactive|incl|includes??|including|increment|index|index-line|indicators|infotypes|inheriting|init|initial|initialization|inner|input|insert|instances??|intensified|interface|interface-pool|interfaces|internal|intervals|into|inverse|inverted-date|is|job|join|keep|keeping|kernel|keys??|keywords|kind|language|last|late|layout|leading|leave|left|left-justified|legacy|length|let|levels??|like|line|line-count|line-selection|line-size|linefeed|lines|link|list|list-processing|listbox|load|load-of-program|locale??|locks??|log-point|logical|lower|mapped|mapping|margin|mark|mask|match|matchcode|maximum|members|memory|mesh|message|message-id|messages|messaging|methods??|mode|modif|modifier|modify|module|move|move-corresponding|multiply|multiply-corresponding|name|nametab|native|nested|nesting|new|new-line|new-page|new-section|next|no-display|no-extension|no-gaps??|no-grouping|no-heading|no-scrolling|no-sign|no-title|no-zero|nodes|non-unicode|non-unique|number|objects??|objmgr|obligatory|occurences??|occurrences??|occurs|of|offset|on|only|open|optional|options??|order|others|out|outer|output|output-length|overflow|overlay|pack|package|padding|page|parameter|parameter-table|parameters|part|partially|pcre|perform|performing|permissions|pf-status|places|pool|position|pragmas|preceding|precompiled|preferred|preserving|primary|print|print-control|private|privileged|procedure|process|program|property|protected|provide|push|pushbutton|put|query|queue-only|queueonly|quickinfo|radiobutton|raising|ranges??|read|read-only|received??|receiving|redefinition|reduce|ref|reference|refresh|regex|reject|renaming|replace|replacement|replacing|report|reported|request|requested|required|reserve|reset|resolution|respecting|response|restore|results??|resumable|resume|retry|return|returning|right|right-justified|rollback|rows|rp-provide-from-last|run|sap|sap-spool|save|saving|scan|screen|scroll|scroll-boundary|scrolling|search|seconds|section|select|select-options|selection|selection-screen|selection-sets??|selection-table|selections|send|separated??|session|set|shared|shift|shortdump|shortdump-id|sign|simple|simulation|single|size|skip|skipping|smart|some|sort|sortable|sorted|source|specified|split|spool|spots|sql|stable|stamp|standard|start-of-selection|starting|state|statements??|statics??|statusinfo|step|step-loop|stop|structures??|style|subkey|submatches|submit|subroutine|subscreen|substring|subtract|subtract-corresponding|suffix|sum|summary|supplied|supply|suppress|switch|symbol|syntax-check|syntax-trace|system-call|system-exceptions|tab|tabbed|tables??|tableview|tabstrip|target|tasks??|test|test-injection|test-seam|testing|text|textpool|then|throw|times??|title|titlebar|to|tokens|top-lines|top-of-page|trace-file|trace-table|trailing|transaction|transfer|transformation|translate|transporting|trmac|truncate|truncation|type|type-pools??|types|uline|unassign|unbounded|under|unicode|union|unique|unit|unix|unpack|until|unwind|up|update|upper|user|user-command|using|utf-8|uuid|valid|validate|value|value-request|values|vary|varying|version|via|visible|wait|when|where|windows??|with|with-heading|with-title|without|word|work|workspace|write|xml|zone)(?=[,.:\\\\s])","name":"keyword.control.simple.abap"},"operators":{"patterns":[{"include":"#other_operator"},{"include":"#arithmetic_operator"},{"include":"#comparison_operator"},{"include":"#logical_operator"}]},"other_operator":{"match":"(?<=\\\\s)(&&?|\\\\?=|\\\\+=|-=|/=|\\\\*=|&&=|&=)(?=\\\\s)","name":"keyword.control.simple.abap"},"reserved_names":{"match":"(?i)(?<=\\\\s)(me|super)(?=[,.\\\\s]|->)","name":"constant.language.abap"},"sql_functions":{"match":"(?i)(?<=\\\\s)(abap_system_timezone|abap_user_timezone|abs|add_days|add_months|allow_precision_loss|as_geo_json|avg|bintohex|cast|ceil|coalesce|concat_with_space|concat|corr_spearman|corr|count|currency_conversion|datn_add_days|datn_add_months|datn_days_between|dats_add_days|dats_add_months|dats_days_between|dats_from_datn|dats_is_valid|dats_tims_to_tstmp|dats_to_datn|dayname|days_between|dense_rank|division|div|extract_day|extract_hour|extract_minute|extract_month|extract_second|extract_year|first_value|floor|grouping|hextobin|initcap|instr|is_valid|lag|last_value|lead|left|length|like_regexpr|locate_regexpr_after|locate_regexpr|locate|lower|lpad|ltrim|max|median|min|mod|monthname|ntile|occurrences_regexpr|over|product|rank|replace_regexpr|replace|rigth|round|row_number|rpad|rtrim|stddev|string_agg|substring_regexpr|substring|sum|tims_from_timn|tims_is_valid|tims_to_timn|to_blob|to_clob|tstmp_add_seconds|tstmp_current_utctimestamp|tstmp_is_valid|tstmp_seconds_between|tstmp_to_dats|tstmp_to_dst|tstmp_to_tims|tstmpl_from_utcl|tstmpl_to_utcl|unit_conversion|upper|utcl_add_seconds|utcl_current|utcl_seconds_between|uuid|var|weekday)(?=\\\\()","name":"entity.name.function.sql.abap"},"sql_types":{"match":"(?i)(?<=\\\\s)(char|clnt|cuky|curr|datn|dats|dec|decfloat16|decfloat34|fltp|int1|int2|int4|int8|lang|numc|quan|raw|sstring|timn|tims|unit|utclong)(?=[()\\\\s])","name":"entity.name.type.sql.abap"},"system_fields":{"captures":{"1":{"name":"variable.language.abap"},"2":{"name":"variable.language.abap"}},"match":"(?i)\\\\b(sy)-(abcde|batch|binpt|calld|callr|colno|cpage|cprog|cucol|curow|datar|datlo|datum|dayst|dbcnt|dbnam|dbsysc|dyngr|dynnr|fdayw|fdpos|host|index|langu|ldbpg|lilli|linct|linno|linsz|lisel|listi|loopc|lsind|macol|mandt|marow|modno|msgid|msgli|msgno|msgty|msgv[1-4]|opsysc|pagno|pfkey|repid|saprl|scols|slset|spono|srows|staco|staro|stepl|subrc|sysid|tabix|tcode|tfill|timlo|title|tleng|tvar[0-9]|tzone|ucomm|uline|uname|uzeit|vline|wtitl|zonlo)(?=[.\\\\s])"},"text_symbols":{"captures":{"1":{"name":"keyword.control.simple.abap"},"2":{"name":"constant.numeric.abap"}},"match":"(?i)(?<=^|\\\\s)(text)-([0-9A-Z]{1,3})(?=[,.:\\\\s])"}},"scopeName":"source.abap"}`))];export{e as default};
@@ -0,0 +1 @@
1
+ var e=[Object.freeze(JSON.parse(`{"displayName":"ActionScript","fileTypes":["as"],"name":"actionscript-3","patterns":[{"include":"#comments"},{"include":"#package"},{"include":"#class"},{"include":"#interface"},{"include":"#namespace_declaration"},{"include":"#import"},{"include":"#mxml"},{"include":"#strings"},{"include":"#regexp"},{"include":"#variable_declaration"},{"include":"#numbers"},{"include":"#primitive_types"},{"include":"#primitive_error_types"},{"include":"#dynamic_type"},{"include":"#primitive_functions"},{"include":"#language_constants"},{"include":"#language_variables"},{"include":"#guess_type"},{"include":"#guess_constant"},{"include":"#other_operators"},{"include":"#arithmetic_operators"},{"include":"#logical_operators"},{"include":"#array_access_operators"},{"include":"#vector_creation_operators"},{"include":"#control_keywords"},{"include":"#other_keywords"},{"include":"#use_namespace"},{"include":"#functions"}],"repository":{"arithmetic_operators":{"match":"([-%+/]|(?<!:)\\\\*)","name":"keyword.operator.actionscript.3"},"array_access_operators":{"match":"([]\\\\[])","name":"keyword.operator.actionscript.3"},"class":{"begin":"(^|\\\\s+|;)(\\\\b(dynamic|final|abstract)\\\\b\\\\s+)?(\\\\b(internal|public)\\\\b\\\\s+)?(\\\\b(dynamic|final|abstract)\\\\b\\\\s+)?(?=\\\\bclass\\\\b)","beginCaptures":{"3":{"name":"storage.modifier.actionscript.3"},"5":{"name":"storage.modifier.actionscript.3"},"7":{"name":"storage.modifier.actionscript.3"}},"end":"}","name":"meta.class.actionscript.3","patterns":[{"include":"#class_declaration"},{"include":"#declaration_code_block"},{"include":"#metadata"},{"include":"#method"},{"include":"#comments"},{"include":"#strings"},{"include":"#regexp"},{"include":"#numbers"},{"include":"#primitive_types"},{"include":"#primitive_error_types"},{"include":"#dynamic_type"},{"include":"#primitive_functions"},{"include":"#language_constants"},{"include":"#language_variables"},{"include":"#other_operators"},{"include":"#other_keywords"},{"include":"#use_namespace"},{"include":"#guess_type"},{"include":"#guess_constant"},{"include":"#arithmetic_operators"},{"include":"#array_access_operators"},{"include":"#vector_creation_operators"},{"include":"#variable_declaration"},{"include":"#object_literal"},{"include":"#conditional_compilation"}]},"class_declaration":{"begin":"\\\\b(class)\\\\b\\\\s+([$.0-9A-Z_a-z]+|\\\\*)","beginCaptures":{"1":{"name":"storage.type.class.actionscript.3"},"2":{"name":"entity.name.class.actionscript.3"}},"end":"\\\\{","name":"meta.class_declaration.actionscript.3","patterns":[{"include":"#extends"},{"include":"#implements"},{"include":"#comments"}]},"comments":{"patterns":[{"begin":"/\\\\*\\\\*(?!/)","end":"\\\\*/","name":"comment.block.documentation.actionscript.3","patterns":[{"match":"@(copy|default|eventType|example|exampleText|includeExample|inheritDoc|internal|param|private|return|see|since|throws)\\\\b","name":"keyword.other.documentation.actionscript.3.asdoc"}]},{"begin":"/\\\\*","end":"\\\\*/","name":"comment.block.actionscript.3"},{"match":"//.*","name":"comment.line.actionscript.3"}]},"conditional_compilation":{"captures":{"2":{"name":"constant.other.actionscript.3"},"3":{"name":"constant.other.actionscript.3"}},"match":"(^|\\\\s+|;)\\\\b(\\\\w+)\\\\b::\\\\b(\\\\w+)\\\\b","name":"meta.conditional.actionscript.3"},"control_keywords":{"match":"\\\\b(if|else|do|while|for|each|continue|return|switch|case|default|break|try|catch|finally|throw|with)\\\\b","name":"keyword.control.actionscript.3"},"declaration_code_block":{"begin":"\\\\{","end":"}","name":"meta.code_block.actionscript.3","patterns":[{"include":"#method"},{"include":"#variable_declaration"},{"include":"#comments"},{"include":"#strings"},{"include":"#regexp"},{"include":"#numbers"},{"include":"#primitive_types"},{"include":"#primitive_error_types"},{"include":"#dynamic_type"},{"include":"#primitive_functions"},{"include":"#language_constants"},{"include":"#language_variables"},{"include":"#guess_type"},{"include":"#guess_constant"},{"include":"#other_operators"},{"include":"#arithmetic_operators"},{"include":"#logical_operators"},{"include":"#array_access_operators"},{"include":"#vector_creation_operators"},{"include":"#control_keywords"},{"include":"#other_keywords"},{"include":"#use_namespace"},{"include":"#functions"},{"include":"#import"}]},"dynamic_type":{"captures":{"1":{"name":"support.type.actionscript.3"}},"match":"(?<=:)\\\\s*(\\\\*)"},"escapes":{"match":"\\\\\\\\(x\\\\h{2}|[012][0-7]{0,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)","name":"constant.character.escape.actionscript.3"},"extends":{"captures":{"1":{"name":"keyword.other.actionscript.3"},"2":{"name":"entity.other.inherited-class.actionscript.3"},"3":{"name":"entity.other.inherited-class.actionscript.3"}},"match":"\\\\b(extends)\\\\b\\\\s+([$.0-9A-Z_a-z]+)\\\\s*(?:,\\\\s*([$.0-9A-Z_a-z]+))*\\\\s*","name":"meta.extends.actionscript.3"},"function_arguments":{"begin":"\\\\(","end":"\\\\)","name":"meta.function_arguments.actionscript.3","patterns":[{"include":"#parameters"},{"include":"#comments"}]},"functions":{"begin":"\\\\b(function)\\\\b(?:\\\\s+\\\\b([gs]et)\\\\b\\\\s+)?\\\\s*([$0-9A-Z_a-z]+\\\\b)?","beginCaptures":{"1":{"name":"storage.type.function.actionscript.3"},"2":{"name":"storage.modifier.actionscript.3"},"3":{"name":"entity.name.function.actionscript.3"}},"end":"($|;|(?=\\\\{))","name":"meta.function.actionscript.3","patterns":[{"include":"#function_arguments"},{"include":"#return_type"},{"include":"#comments"}]},"guess_constant":{"captures":{"1":{"name":"constant.other.actionscript.3"}},"match":"\\\\b([$A-Z][0-9A-Z_]+)\\\\b"},"guess_type":{"captures":{"1":{"name":"support.type.actionscript.3"}},"match":"\\\\b((?:[$0-9A-Z_a-z]+\\\\.)*[A-Z][0-9A-Z]*[a-z]+[$0-9A-Z_a-z]*)\\\\b"},"implements":{"captures":{"1":{"name":"keyword.other.actionscript.3"},"2":{"name":"entity.other.inherited-class.actionscript.3"},"3":{"name":"entity.other.inherited-class.actionscript.3"}},"match":"\\\\b(implements)\\\\b\\\\s+([$.0-9A-Z_a-z]+)\\\\s*(?:,\\\\s*([$.0-9A-Z_a-z]+))*\\\\s*","name":"meta.implements.actionscript.3"},"import":{"captures":{"2":{"name":"keyword.control.import.actionscript.3"},"3":{"name":"support.type.actionscript.3"}},"match":"(^|\\\\s+|;)\\\\b(import)\\\\b\\\\s+([$.0-9A-Z_a-z]+(?:\\\\.\\\\*)?)\\\\s*(?=;|$)","name":"meta.import.actionscript.3"},"interface":{"begin":"(^|\\\\s+|;)(\\\\b(internal|public)\\\\b\\\\s+)?(?=\\\\binterface\\\\b)","beginCaptures":{"3":{"name":"storage.modifier.actionscript.3"}},"end":"}","name":"meta.interface.actionscript.3","patterns":[{"include":"#interface_declaration"},{"include":"#metadata"},{"include":"#functions"},{"include":"#comments"}]},"interface_declaration":{"begin":"\\\\b(interface)\\\\b\\\\s+([$.0-9A-Z_a-z]+)","beginCaptures":{"1":{"name":"storage.type.interface.actionscript.3"},"2":{"name":"entity.name.class.actionscript.3"}},"end":"\\\\{","name":"meta.class_declaration.actionscript.3","patterns":[{"include":"#extends"},{"include":"#comments"}]},"language_constants":{"match":"\\\\b(true|false|null|Infinity|-Infinity|NaN|undefined)\\\\b","name":"constant.language.actionscript.3"},"language_variables":{"match":"\\\\b(super|this|arguments)\\\\b","name":"variable.language.actionscript.3"},"local_code_block":{"begin":"\\\\{","end":"}","name":"meta.code_block.actionscript.3","patterns":[{"include":"#local_code_block"},{"include":"#comments"},{"include":"#strings"},{"include":"#regexp"},{"include":"#variable_declaration"},{"include":"#numbers"},{"include":"#primitive_types"},{"include":"#primitive_error_types"},{"include":"#dynamic_type"},{"include":"#primitive_functions"},{"include":"#language_constants"},{"include":"#language_variables"},{"include":"#guess_type"},{"include":"#guess_constant"},{"include":"#other_operators"},{"include":"#arithmetic_operators"},{"include":"#logical_operators"},{"include":"#array_access_operators"},{"include":"#vector_creation_operators"},{"include":"#control_keywords"},{"include":"#other_keywords"},{"include":"#use_namespace"},{"include":"#functions"},{"include":"#import"}]},"logical_operators":{"match":"([!\\\\&<>?^|~])","name":"keyword.operator.actionscript.3"},"metadata":{"begin":"(?<=(?:^|[;{}]|\\\\*/)\\\\s*)\\\\[\\\\s*\\\\b([$A-Z_a-z][$0-9A-Z_a-z]+)\\\\b","beginCaptures":{"1":{"name":"keyword.other.actionscript.3"}},"end":"]","name":"meta.metadata_info.actionscript.3","patterns":[{"include":"#metadata_info"}]},"metadata_info":{"begin":"\\\\(","end":"\\\\)","patterns":[{"include":"#strings"},{"captures":{"1":{"name":"variable.parameter.actionscript.3"},"2":{"name":"keyword.operator.actionscript.3"}},"match":"(\\\\w+)\\\\s*(=)"}]},"method":{"begin":"(^|\\\\s+)((\\\\w+)\\\\s+)?((\\\\w+)\\\\s+)?((\\\\w+)\\\\s+)?((\\\\w+)\\\\s+)?(?=\\\\bfunction\\\\b)","beginCaptures":{"3":{"name":"storage.modifier.actionscript.3"},"5":{"name":"storage.modifier.actionscript.3"},"7":{"name":"storage.modifier.actionscript.3"},"8":{"name":"storage.modifier.actionscript.3"}},"end":"(?<=([;}]))","name":"meta.method.actionscript.3","patterns":[{"include":"#functions"},{"include":"#local_code_block"}]},"mxml":{"begin":"<!\\\\[CDATA\\\\[","end":"]]>","name":"meta.cdata.actionscript.3","patterns":[{"include":"#comments"},{"include":"#import"},{"include":"#metadata"},{"include":"#class"},{"include":"#namespace_declaration"},{"include":"#use_namespace"},{"include":"#class_declaration"},{"include":"#method"},{"include":"#comments"},{"include":"#strings"},{"include":"#regexp"},{"include":"#numbers"},{"include":"#primitive_types"},{"include":"#primitive_error_types"},{"include":"#dynamic_type"},{"include":"#primitive_functions"},{"include":"#language_constants"},{"include":"#language_variables"},{"include":"#other_keywords"},{"include":"#guess_type"},{"include":"#guess_constant"},{"include":"#other_operators"},{"include":"#arithmetic_operators"},{"include":"#array_access_operators"},{"include":"#vector_creation_operators"},{"include":"#variable_declaration"}]},"namespace_declaration":{"captures":{"2":{"name":"storage.modifier.actionscript.3"},"3":{"name":"storage.modifier.actionscript.3"}},"match":"((\\\\w+)\\\\s+)?(namespace)\\\\s+[$0-9A-Z_a-z]+","name":"meta.namespace_declaration.actionscript.3"},"numbers":{"match":"\\\\b((0([Xx])\\\\h*)|(([0-9]+\\\\.?[0-9]*)|(\\\\.[0-9]+))(([Ee])([-+])?[0-9]+)?)([Ll]|UL|ul|[FUfu])?\\\\b","name":"constant.numeric.actionscript.3"},"object_literal":{"begin":"\\\\{","end":"}","name":"meta.object_literal.actionscript.3","patterns":[{"include":"#object_literal"},{"include":"#comments"},{"include":"#strings"},{"include":"#regexp"},{"include":"#numbers"},{"include":"#primitive_types"},{"include":"#primitive_error_types"},{"include":"#dynamic_type"},{"include":"#primitive_functions"},{"include":"#language_constants"},{"include":"#language_variables"},{"include":"#guess_type"},{"include":"#guess_constant"},{"include":"#array_access_operators"},{"include":"#vector_creation_operators"},{"include":"#functions"}]},"other_keywords":{"match":"\\\\b(as|delete|in|instanceof|is|native|new|to|typeof)\\\\b","name":"keyword.other.actionscript.3"},"other_operators":{"match":"([.=])","name":"keyword.operator.actionscript.3"},"package":{"begin":"(^|\\\\s+)(package)\\\\b","beginCaptures":{"2":{"name":"keyword.other.actionscript.3"}},"end":"}","name":"meta.package.actionscript.3","patterns":[{"include":"#package_name"},{"include":"#variable_declaration"},{"include":"#method"},{"include":"#comments"},{"include":"#return_type"},{"include":"#import"},{"include":"#use_namespace"},{"include":"#strings"},{"include":"#numbers"},{"include":"#language_constants"},{"include":"#metadata"},{"include":"#class"},{"include":"#interface"},{"include":"#namespace_declaration"}]},"package_name":{"begin":"(?<=package)\\\\s+([._\\\\w]*)\\\\b","end":"\\\\{","name":"meta.package_name.actionscript.3"},"parameters":{"begin":"(\\\\.\\\\.\\\\.)?\\\\s*([$A-Z_a-z][$0-9A-Z_a-z]*)(?:\\\\s*(:)\\\\s*(?:([$A-Za-z][$0-9A-Z_a-z]+(?:\\\\.[$A-Za-z][$0-9A-Z_a-z]+)*)(?:\\\\.<([$A-Za-z][$0-9A-Z_a-z]+(?:\\\\.[$A-Za-z][$0-9A-Z_a-z]+)*)>)?|(\\\\*)))?(?:\\\\s*(=))?","beginCaptures":{"1":{"name":"keyword.operator.actionscript.3"},"2":{"name":"variable.parameter.actionscript.3"},"3":{"name":"keyword.operator.actionscript.3"},"4":{"name":"support.type.actionscript.3"},"5":{"name":"support.type.actionscript.3"},"6":{"name":"support.type.actionscript.3"},"7":{"name":"keyword.operator.actionscript.3"}},"end":",|(?=\\\\))","patterns":[{"include":"#strings"},{"include":"#numbers"},{"include":"#language_constants"},{"include":"#comments"},{"include":"#primitive_types"},{"include":"#primitive_error_types"},{"include":"#dynamic_type"},{"include":"#guess_type"},{"include":"#guess_constant"}]},"primitive_error_types":{"captures":{"1":{"name":"support.class.error.actionscript.3"}},"match":"\\\\b((Argument|Definition|Eval|Internal|Range|Reference|Security|Syntax|Type|URI|Verify)?Error)\\\\b"},"primitive_functions":{"captures":{"1":{"name":"support.function.actionscript.3"}},"match":"\\\\b(decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|isFinite|isNaN|isXMLName|parseFloat|parseInt|trace|unescape)(?=\\\\s*\\\\()"},"primitive_types":{"captures":{"1":{"name":"support.class.builtin.actionscript.3"}},"match":"\\\\b(Array|Boolean|Class|Date|Function|int|JSON|Math|Namespace|Number|Object|QName|RegExp|String|uint|Vector|XML|XMLList|\\\\*(?<=a))\\\\b"},"regexp":{"begin":"(?<=[(,:=\\\\[]|^|return|&&|\\\\|\\\\||!)\\\\s*(/)(?![*+/?{}])","end":"$|(/)[gim]*","name":"string.regex.actionscript.3","patterns":[{"match":"\\\\\\\\.","name":"constant.character.escape.actionscript.3"},{"match":"\\\\[(\\\\\\\\]|[^]])*]","name":"constant.character.class.actionscript.3"}]},"return_type":{"captures":{"1":{"name":"keyword.operator.actionscript.3"},"2":{"name":"support.type.actionscript.3"},"3":{"name":"support.type.actionscript.3"},"4":{"name":"support.type.actionscript.3"}},"match":"(:)\\\\s*([$A-Za-z][$0-9A-Z_a-z]+(?:\\\\.[$A-Za-z][$0-9A-Z_a-z]+)*)(?:\\\\.<([$A-Za-z][$0-9A-Z_a-z]+(?:\\\\.[$A-Za-z][$0-9A-Z_a-z]+)*)>)?|(\\\\*)"},"strings":{"patterns":[{"begin":"@\\"","end":"\\"","name":"string.quoted.verbatim.actionscript.3"},{"begin":"\\"","end":"\\"","name":"string.quoted.double.actionscript.3","patterns":[{"include":"#escapes"}]},{"begin":"'","end":"'","name":"string.quoted.single.actionscript.3","patterns":[{"include":"#escapes"}]}]},"use_namespace":{"captures":{"2":{"name":"keyword.other.actionscript.3"},"3":{"name":"keyword.other.actionscript.3"},"4":{"name":"storage.modifier.actionscript.3"}},"match":"(^|\\\\s+|;)(use\\\\s+)?(namespace)\\\\s+(\\\\w+)\\\\s*(;|$)"},"variable_declaration":{"captures":{"2":{"name":"storage.modifier.actionscript.3"},"4":{"name":"storage.modifier.actionscript.3"},"6":{"name":"storage.modifier.actionscript.3"},"7":{"name":"storage.modifier.actionscript.3"},"8":{"name":"keyword.operator.actionscript.3"}},"match":"((static)\\\\s+)?((\\\\w+)\\\\s+)?((static)\\\\s+)?(const|var)\\\\s+[$0-9A-Z_a-z]+(?:\\\\s*(:))?","name":"meta.variable_declaration.actionscript.3"},"vector_creation_operators":{"match":"([<>])","name":"keyword.operator.actionscript.3"}},"scopeName":"source.actionscript.3"}`))];export{e as default};