@macintacos/caret 1.1.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +8 -4
- package/bin/caret-launcher +36 -8
- package/dist/cli.js +1262 -339
- package/opencode/caret.core.ts +458 -0
- package/opencode/caret.plugin.ts +83 -456
- package/opencode/caret.plugin.v2.ts +243 -0
- package/opencode/caret.tui.ts +75 -0
- package/opencode/index.ts +6 -5
- package/opencode/permission.ts +102 -0
- package/package.json +2 -1
- package/ui/dist/assets/{angular-html-BECXXPyr.js → angular-html-BVXNFElL.js} +1 -1
- package/ui/dist/assets/{angular-ts-CJKAKY9F.js → angular-ts-BBdNNVOV.js} +1 -1
- package/ui/dist/assets/{apl-CCcfDDqZ.js → apl-DN-9LSnm.js} +1 -1
- package/ui/dist/assets/{astro-DKCnAnVR.js → astro-DuMkehjz.js} +1 -1
- package/ui/dist/assets/{blade-DQ_JdT2N.js → blade-B_5LVqnt.js} +1 -1
- package/ui/dist/assets/{c-D3TwszVj.js → c-5LpWn0DJ.js} +1 -1
- package/ui/dist/assets/{chapel-C-2sPcCX.js → chapel-qw3-lXMw.js} +1 -1
- package/ui/dist/assets/{cobol-BPmo_4f_.js → cobol-BAnr3Azd.js} +1 -1
- package/ui/dist/assets/{coffee-DMTsNDVt.js → coffee-CGRFpAgb.js} +1 -1
- package/ui/dist/assets/{cpp-BJr6_Y8R.js → cpp-olfuBwwP.js} +1 -1
- package/ui/dist/assets/{crystal-pIWESUkD.js → crystal-qe9b46tp.js} +1 -1
- package/ui/dist/assets/{css-DRd9Q4Li.js → css-DkXCh44l.js} +1 -1
- package/ui/dist/assets/{dist-aKlRxpD_.js → dist-B1RcczPQ.js} +1 -1
- package/ui/dist/assets/{dist-BGfsV7n2.js → dist-BnIbJslb.js} +1 -1
- package/ui/dist/assets/{dist-BJ7SLVNC.js → dist-BnbtGh0F.js} +1 -1
- package/ui/dist/assets/{dist-BFQBMwmz.js → dist-CFbPxPI-.js} +1 -1
- package/ui/dist/assets/{dist-DoJTqy3z.js → dist-CHZr2-kE.js} +1 -1
- package/ui/dist/assets/{dist-BNr0c85A.js → dist-CMOjVm1q.js} +1 -1
- package/ui/dist/assets/{dist-C6t67BjE.js → dist-CfHYS987.js} +1 -1
- package/ui/dist/assets/{dist-CU5aMlNo.js → dist-D8lZm-8I.js} +1 -1
- package/ui/dist/assets/{dist-CD25BkNS.js → dist-KWgwFCxG.js} +1 -1
- package/ui/dist/assets/{dist-RKKeH1zs.js → dist-iPRbc51X.js} +1 -1
- package/ui/dist/assets/{edge-DeNk4F2G.js → edge-hytDa3H3.js} +1 -1
- package/ui/dist/assets/{elixir-DHc-DOO8.js → elixir-DnjerbFh.js} +1 -1
- package/ui/dist/assets/{elm-CJRqEcvz.js → elm-Cy60APyX.js} +1 -1
- package/ui/dist/assets/{erb-BEWGTHDA.js → erb-Rclm0zaT.js} +1 -1
- package/ui/dist/assets/{git-rebase-DzlcWhg9.js → git-rebase-Be7W4GuM.js} +1 -1
- package/ui/dist/assets/{glimmer-js-B-aWCRIZ.js → glimmer-js-DAN9CyDo.js} +1 -1
- package/ui/dist/assets/{glimmer-ts-DcjmPyQn.js → glimmer-ts-Bd4Ltw2M.js} +1 -1
- package/ui/dist/assets/{glsl-C9FOT-Uv.js → glsl-DIrrPSk8.js} +1 -1
- package/ui/dist/assets/{graphql-BgKSoRp0.js → graphql-CBXqF557.js} +1 -1
- package/ui/dist/assets/{hack-BOedpUUE.js → hack-D_K_3nhB.js} +1 -1
- package/ui/dist/assets/{haml-Cpngw1vd.js → haml-g7mpgDGW.js} +1 -1
- package/ui/dist/assets/{handlebars-CpW1IyBg.js → handlebars-DRWwCyqd.js} +1 -1
- package/ui/dist/assets/{html-CV142D8s.js → html-Byvm88Y2.js} +1 -1
- package/ui/dist/assets/{html-derivative-Df7h1Nuw.js → html-derivative-DpLoxBsM.js} +1 -1
- package/ui/dist/assets/{http-Cneddv9N.js → http-DGq_mf9b.js} +1 -1
- package/ui/dist/assets/{hurl-D6TS55N6.js → hurl-qkfW8ihO.js} +1 -1
- package/ui/dist/assets/{index-Ci9yCNtV.js → index-BwtwrzNC.js} +4 -4
- package/ui/dist/assets/{java-BicD3zQH.js → java-BHSPy0gM.js} +1 -1
- package/ui/dist/assets/{javascript-l6vKHWBV.js → javascript-BGu3ZEma.js} +1 -1
- package/ui/dist/assets/{jinja-BJF2iot2.js → jinja-BkUiOuUL.js} +1 -1
- package/ui/dist/assets/{jison-DiXPFJAT.js → jison-DQ_FQMYl.js} +1 -1
- package/ui/dist/assets/{json-BDRuI4UV.js → json-BHyU93c5.js} +1 -1
- package/ui/dist/assets/{jsx-BvfdkIOy.js → jsx-DhxI-Xjj.js} +1 -1
- package/ui/dist/assets/{julia-bXAhreI5.js → julia-BpY5TdkA.js} +1 -1
- package/ui/dist/assets/{just-BOxCfXDg.js → just-Dy9X30SL.js} +1 -1
- package/ui/dist/assets/{latex-B9OiTBLF.js → latex-DnqjVTTq.js} +1 -1
- package/ui/dist/assets/{liquid-DuLKDeWE.js → liquid-DSLF1wIz.js} +1 -1
- package/ui/dist/assets/{lua-Dbh9FQm_.js → lua-CWQ1tn9q.js} +1 -1
- package/ui/dist/assets/{marko--tjEBgDM.js → marko-CVOaD8Lr.js} +1 -1
- package/ui/dist/assets/{mdc-ByNJpl3m.js → mdc-CorrsEtK.js} +1 -1
- package/ui/dist/assets/{nginx-D4wsmFK9.js → nginx--n2A1zuK.js} +1 -1
- package/ui/dist/assets/{nim-Cy8RxisP.js → nim-eb5p3yB7.js} +1 -1
- package/ui/dist/assets/{org-CAm7o61d.js → org-Cnlel0O3.js} +1 -1
- package/ui/dist/assets/{perl-BAvaFGKe.js → perl-DDWGMuBV.js} +1 -1
- package/ui/dist/assets/{php-DpAf3w7u.js → php-Bz2SRtKk.js} +1 -1
- package/ui/dist/assets/{pug-Dm7otyJU.js → pug-cGPMemK2.js} +1 -1
- package/ui/dist/assets/{qml-D4rWQQKC.js → qml-B4Hbmvdi.js} +1 -1
- package/ui/dist/assets/{r-DMKUX8qf.js → r-BuuNGonz.js} +1 -1
- package/ui/dist/assets/{razor-BIUJkuf_.js → razor-CHpWr94T.js} +1 -1
- package/ui/dist/assets/{regexp-D8W_pVHj.js → regexp-9s1znDWq.js} +1 -1
- package/ui/dist/assets/{rst-aFr0DP5H.js → rst-BBsXWDuP.js} +1 -1
- package/ui/dist/assets/{ruby-BzH6kUKr.js → ruby-pQqViN30.js} +1 -1
- package/ui/dist/assets/{sas-CDk9DyCV.js → sas-C4SSIJLx.js} +1 -1
- package/ui/dist/assets/{scss-DABbvU5W.js → scss-D8e130Cq.js} +1 -1
- package/ui/dist/assets/{shellscript-B0ObP3K-.js → shellscript-CHUzbqv1.js} +1 -1
- package/ui/dist/assets/{shellsession-2sv3Jq0j.js → shellsession-BulTL_bH.js} +1 -1
- package/ui/dist/assets/{soy-irSRV4oq.js → soy-zGj4V7Ec.js} +1 -1
- package/ui/dist/assets/{sql-DJCHoKvP.js → sql-CnJYFgwb.js} +1 -1
- package/ui/dist/assets/{stata-a8YnzbIc.js → stata-BXDojqs4.js} +1 -1
- package/ui/dist/assets/{surrealql-DdXPOg8s.js → surrealql-3hRFCpnH.js} +1 -1
- package/ui/dist/assets/{svelte-ClAKUEZR.js → svelte-C8TzlKVd.js} +1 -1
- package/ui/dist/assets/{templ-NUCvvUBA.js → templ-D5KJNb8h.js} +1 -1
- package/ui/dist/assets/{tex-DwZeSAfC.js → tex-szX76TU8.js} +1 -1
- package/ui/dist/assets/{ts-tags-CFJEHYY_.js → ts-tags-H1v1spsZ.js} +1 -1
- package/ui/dist/assets/{tsx-B934yX2T.js → tsx-CoyAoKjY.js} +1 -1
- package/ui/dist/assets/{twig-NFkkOj3w.js → twig-pqXRFgM9.js} +1 -1
- package/ui/dist/assets/{typescript-7bmMC_xU.js → typescript-CNl_4SRH.js} +1 -1
- package/ui/dist/assets/{typst-BQEjp9tn.js → typst-Dr_K1Jqf.js} +1 -1
- package/ui/dist/assets/{vue-JqD9ieOF.js → vue-Wl1CPRGX.js} +1 -1
- package/ui/dist/assets/{vue-html-CT4XQRX1.js → vue-html-F5NdFsoh.js} +1 -1
- package/ui/dist/assets/{vue-vine-DIR27Dmn.js → vue-vine-YWSKUX3v.js} +1 -1
- package/ui/dist/assets/{xml-DhsMbw-1.js → xml-crSJzq2-.js} +1 -1
- package/ui/dist/assets/{xsl-BvqsVUg9.js → xsl-D-YjJFxJ.js} +1 -1
- package/ui/dist/assets/{yaml-C8eWjK_Q.js → yaml-BZWjhwN4.js} +1 -1
- package/ui/dist/index.html +1 -1
package/README.md
CHANGED
|
@@ -76,10 +76,12 @@ Turn the check off from that same pane, or by hand in
|
|
|
76
76
|
check = false
|
|
77
77
|
```
|
|
78
78
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
79
|
+
`caret` supports OpenCode v1 1.3.4 or later. See
|
|
80
|
+
[the OpenCode adapter](doc/ARCHITECTURE.md#the-opencode-adapter) for the by-hand
|
|
81
|
+
equivalents, for pinning a version in OpenCode's plugin array (`plugin` on v1, `plugins`
|
|
82
|
+
on v2), and for what each agent's install touches;
|
|
83
|
+
[the Claude Code adapter](doc/ARCHITECTURE.md#the-claude-code-adapter) covers the hooks
|
|
84
|
+
`caret` registers there.
|
|
83
85
|
|
|
84
86
|
## Using `caret`
|
|
85
87
|
|
|
@@ -107,6 +109,8 @@ your browser instead of the terminal prompt. There you:
|
|
|
107
109
|
port, the review timeout, the log level — it reads an optional `config.toml` and `CARET_*`
|
|
108
110
|
environment variables. Every key, every variable, and their defaults are in
|
|
109
111
|
[`doc/CONFIGURING.md`](doc/CONFIGURING.md).
|
|
112
|
+
To open the review UI from another device, such as a phone or a laptop, see
|
|
113
|
+
[Reaching caret from another device](doc/RUNNING.md#reaching-caret-from-another-device).
|
|
110
114
|
|
|
111
115
|
## Documentation
|
|
112
116
|
|
package/bin/caret-launcher
CHANGED
|
@@ -30,7 +30,9 @@ set -euo pipefail
|
|
|
30
30
|
state="${XDG_STATE_HOME:-$HOME/.local/state}/caret"
|
|
31
31
|
records="$state/launcher"
|
|
32
32
|
claude_roots="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/plugins/cache/caret/caret"
|
|
33
|
-
|
|
33
|
+
opencode_cache="${XDG_CACHE_HOME:-$HOME/.cache}/opencode"
|
|
34
|
+
opencode_v1_roots="$opencode_cache/packages/@macintacos"
|
|
35
|
+
opencode_v2_roots="$opencode_cache/npm/@macintacos"
|
|
34
36
|
# Keep in sync with ownedRootsDir() (src/config/paths.ts).
|
|
35
37
|
owned_roots="$state/roots"
|
|
36
38
|
|
|
@@ -92,16 +94,42 @@ candidate_version() {
|
|
|
92
94
|
sed -n 's/^[[:space:]]*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p' "$1/package.json" 2>/dev/null | head -1
|
|
93
95
|
}
|
|
94
96
|
|
|
97
|
+
# OpenCode v2's live install under spec dir $1: the numerically largest all-digit
|
|
98
|
+
# child. Older generations persist beside it and are never loaded. Keep in sync with
|
|
99
|
+
# liveGenerationDir (src/adapters/opencode/paths.ts).
|
|
100
|
+
live_generation() {
|
|
101
|
+
local dir name newest=""
|
|
102
|
+
for dir in "$1"/*; do
|
|
103
|
+
name="${dir##*/}"
|
|
104
|
+
case "$name" in '' | *[!0-9]*) continue ;; esac
|
|
105
|
+
if [ -z "$newest" ] || [ "$name" -gt "$newest" ]; then newest="$name"; fi
|
|
106
|
+
done
|
|
107
|
+
if [ -n "$newest" ]; then printf '%s' "$1/$newest"; fi
|
|
108
|
+
}
|
|
109
|
+
|
|
95
110
|
# Every dir either agent's cache or caret's own copies offer, runnable caret or
|
|
96
111
|
# not — the difference between a broken install (terminal) and an empty cache
|
|
97
|
-
# (eviction).
|
|
98
|
-
#
|
|
99
|
-
#
|
|
100
|
-
#
|
|
112
|
+
# (eviction). OpenCode's cache dir is named exactly `caret` or `caret@<spec>`: v1's
|
|
113
|
+
# holds a two-line npm project with the root one level down; v2's holds numbered
|
|
114
|
+
# generations, of which only the live one is offered. `*` skips dot-prefixed dirs,
|
|
115
|
+
# so a half-copied owned root is never a candidate. Keep in sync with
|
|
116
|
+
# launcherCandidateDirs (src/commands/install/launcher.ts) and opencodeRootPaths
|
|
117
|
+
# (src/adapters/opencode/paths.ts); both suites pin it through
|
|
118
|
+
# test/core/commands/install/fixtures/launcher-caches.txt.
|
|
101
119
|
candidate_dirs() {
|
|
102
|
-
local dir
|
|
103
|
-
for dir in "$claude_roots"/*
|
|
104
|
-
"$
|
|
120
|
+
local dir spec live
|
|
121
|
+
for dir in "$claude_roots"/* \
|
|
122
|
+
"$opencode_v1_roots"/caret/node_modules/@macintacos/caret \
|
|
123
|
+
"$opencode_v1_roots"/caret@*/node_modules/@macintacos/caret; do
|
|
124
|
+
if [ -d "$dir" ]; then printf '%s\n' "$dir"; fi
|
|
125
|
+
done
|
|
126
|
+
for spec in "$opencode_v2_roots"/caret "$opencode_v2_roots"/caret@*; do
|
|
127
|
+
if [ ! -d "$spec" ]; then continue; fi
|
|
128
|
+
live="$(live_generation "$spec")"
|
|
129
|
+
dir="$live/node_modules/@macintacos/caret"
|
|
130
|
+
if [ -n "$live" ] && [ -d "$dir" ]; then printf '%s\n' "$dir"; fi
|
|
131
|
+
done
|
|
132
|
+
for dir in "$owned_roots"/*; do
|
|
105
133
|
if [ -d "$dir" ]; then printf '%s\n' "$dir"; fi
|
|
106
134
|
done
|
|
107
135
|
}
|