@macintacos/caret 0.9.0 → 0.10.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 +59 -52
- package/commands/discovery.md +4 -4
- package/dist/cli.js +312 -111
- package/opencode/commands/discovery.md +4 -4
- package/package.json +3 -2
- package/ui/dist/assets/{angular-html-BOjikgNB.js → angular-html-166Zp_qr.js} +1 -1
- package/ui/dist/assets/{angular-ts-BjxNvVmD.js → angular-ts-DJf9y5RJ.js} +1 -1
- package/ui/dist/assets/{apl-BkiW4daM.js → apl-BRtDRKgK.js} +1 -1
- package/ui/dist/assets/{astro-3adpTlIH.js → astro-B9_p1ZlX.js} +1 -1
- package/ui/dist/assets/{blade-DPTGWOFi.js → blade-DUQgH5UI.js} +1 -1
- package/ui/dist/assets/{c-Gr6AqmnN.js → c-DkmnqVR5.js} +1 -1
- package/ui/dist/assets/{cobol-C8hrPk4X.js → cobol-D_DeO3_Y.js} +1 -1
- package/ui/dist/assets/{coffee-COAUS6hR.js → coffee-BlbmSk0s.js} +1 -1
- package/ui/dist/assets/{cpp-DRNHed7s.js → cpp-C-2HRkcc.js} +1 -1
- package/ui/dist/assets/{crystal-xGCPBQ2Z.js → crystal-CpLflAjJ.js} +1 -1
- package/ui/dist/assets/{css-g3rqYwXR.js → css-BVuUbqzr.js} +1 -1
- package/ui/dist/assets/{dist-DAyUKqoN.js → dist-B9dAYtn2.js} +1 -1
- package/ui/dist/assets/{dist-B8chzuGI.js → dist-BtZ4f0sy.js} +1 -1
- package/ui/dist/assets/{dist-DPkspc9Q.js → dist-BxKUx0iz.js} +1 -1
- package/ui/dist/assets/{dist-D8G49gMQ.js → dist-CmhY3KNJ.js} +1 -1
- package/ui/dist/assets/{dist-B3rxpa4n.js → dist-D-vK_12F.js} +1 -1
- package/ui/dist/assets/{dist-D55VuegY.js → dist-D1hccSXB.js} +1 -1
- package/ui/dist/assets/{dist-Baejo1Q0.js → dist-DWjpoB5Q.js} +1 -1
- package/ui/dist/assets/{dist-ALQWrgOU.js → dist-Dd0x4Lgi.js} +1 -1
- package/ui/dist/assets/{dist--Ppdbw_u.js → dist-Deoj7mVd.js} +1 -1
- package/ui/dist/assets/{dist-B57N0_ad.js → dist-DtJjv6C-.js} +1 -1
- package/ui/dist/assets/{dist-B0fJR4WS.js → dist-DyJyAkU7.js} +1 -1
- package/ui/dist/assets/{dist-BeBmdH90.js → dist-DzbZtok6.js} +1 -1
- package/ui/dist/assets/{dist-BtEZoKjT.js → dist-Jn2c79bF.js} +1 -1
- package/ui/dist/assets/{dist-CqeZRBk3.js → dist-WBctQMJH.js} +1 -1
- package/ui/dist/assets/{dist-DGuk1LV9.js → dist-nPPt0-3f.js} +1 -1
- package/ui/dist/assets/{dist-CbLm1gmp.js → dist-qtw8Ijdq.js} +1 -1
- package/ui/dist/assets/{dist-ekL3xCM_.js → dist-vj9fsPbi.js} +1 -1
- package/ui/dist/assets/{edge-1tf_B5nG.js → edge-Bvaq3vgu.js} +1 -1
- package/ui/dist/assets/{elixir-Ca3rBU7D.js → elixir-AtYS8b3T.js} +1 -1
- package/ui/dist/assets/{elm-CbkPZkSz.js → elm-DiPfkLEI.js} +1 -1
- package/ui/dist/assets/{erb-DV7pKwEX.js → erb-DFPsOHl7.js} +1 -1
- package/ui/dist/assets/{git-rebase-DItBLEqi.js → git-rebase-DOQhjkkB.js} +1 -1
- package/ui/dist/assets/{glimmer-js-CAykgXKb.js → glimmer-js-DnsoKoXj.js} +1 -1
- package/ui/dist/assets/{glimmer-ts-BPT-EGHX.js → glimmer-ts-efCSUcGf.js} +1 -1
- package/ui/dist/assets/{glsl-CMfWGTLW.js → glsl-8mp3VUjq.js} +1 -1
- package/ui/dist/assets/{graphql-CR_NOWo2.js → graphql-NvuaWD7i.js} +1 -1
- package/ui/dist/assets/{hack-BWP6dwsC.js → hack-BJ5H84Wq.js} +1 -1
- package/ui/dist/assets/{haml-CDa-RN50.js → haml-Dzosfq8Y.js} +1 -1
- package/ui/dist/assets/{handlebars-sJHLZ5A7.js → handlebars-tKuTe0db.js} +1 -1
- package/ui/dist/assets/{html-63fn47vQ.js → html-JqbgrVrs.js} +1 -1
- package/ui/dist/assets/{html-derivative-BXnhYyFs.js → html-derivative-0a3abtuv.js} +1 -1
- package/ui/dist/assets/{http-IOW0RfUa.js → http-DMJqqRWL.js} +1 -1
- package/ui/dist/assets/{hurl-CTSYkbKC.js → hurl-N2MzWbSO.js} +1 -1
- package/ui/dist/assets/index-BMSMV2hN.css +1 -0
- package/ui/dist/assets/index-C_IKB4Ku.js +2501 -0
- package/ui/dist/assets/{java-DOX-o9K8.js → java-B3EVVFFi.js} +1 -1
- package/ui/dist/assets/{javascript-NWcTx9fC.js → javascript-Y0fZ_N_R.js} +1 -1
- package/ui/dist/assets/{jinja-TT5Clkg-.js → jinja-BD-QmqJ0.js} +1 -1
- package/ui/dist/assets/{jison-DoZAP4a3.js → jison-BK-X5L2R.js} +1 -1
- package/ui/dist/assets/{json-Dd1DbJZw.js → json-DlHOOSIb.js} +1 -1
- package/ui/dist/assets/{jsx-D95PvYev.js → jsx-XohAHRMn.js} +1 -1
- package/ui/dist/assets/{julia-DzNcHVqx.js → julia-BBLrPT8A.js} +1 -1
- package/ui/dist/assets/{just-DapN_z3p.js → just-DEry_8sa.js} +1 -1
- package/ui/dist/assets/{latex-Bf3O2fQb.js → latex-BuCB4qwR.js} +1 -1
- package/ui/dist/assets/{liquid-NXRAWoEl.js → liquid-ZtUmbkDf.js} +1 -1
- package/ui/dist/assets/{lua-DgnpxH9p.js → lua-BmOQjHgA.js} +1 -1
- package/ui/dist/assets/{marko-wkWPjoQ9.js → marko-BXMGyPGo.js} +1 -1
- package/ui/dist/assets/{mdc-DtOun-X2.js → mdc-Byn32K04.js} +1 -1
- package/ui/dist/assets/{nginx-XCdDX9Gp.js → nginx-BrQiZd4C.js} +1 -1
- package/ui/dist/assets/{nim-CnDu2vnO.js → nim-Ceo1IkbE.js} +1 -1
- package/ui/dist/assets/{perl-mCSP7zn3.js → perl-Bum057xI.js} +1 -1
- package/ui/dist/assets/{php-CnDYV7m9.js → php-DcJ8ynWT.js} +1 -1
- package/ui/dist/assets/{pug-DUv1_GFU.js → pug-CA9Zezth.js} +1 -1
- package/ui/dist/assets/{qml-Cw49qsJy.js → qml-BHS1pXn9.js} +1 -1
- package/ui/dist/assets/{r-DUSb08Z8.js → r-B4aRkCWL.js} +1 -1
- package/ui/dist/assets/{razor-CKco3Dbd.js → razor-BXH-K44T.js} +1 -1
- package/ui/dist/assets/{regexp-DbjqCAsi.js → regexp-DUs7aoKy.js} +1 -1
- package/ui/dist/assets/{rst-iLrpHokU.js → rst-DCrs7vP-.js} +1 -1
- package/ui/dist/assets/{ruby-BBYneGfk.js → ruby-0-lN-lO6.js} +1 -1
- package/ui/dist/assets/{sas-DoS0TCZm.js → sas-B-GmRmDQ.js} +1 -1
- package/ui/dist/assets/{scss-DwjazCIb.js → scss-oB6C5dt1.js} +1 -1
- package/ui/dist/assets/{shellscript-bR-cjL3L.js → shellscript-BDueQ3Pr.js} +1 -1
- package/ui/dist/assets/{shellsession-D54KuySr.js → shellsession-snwU-yjZ.js} +1 -1
- package/ui/dist/assets/{soy-QeEusSoH.js → soy-1UzSzCS_.js} +1 -1
- package/ui/dist/assets/{sql-BjJgWH0F.js → sql-_8rHrLe0.js} +1 -1
- package/ui/dist/assets/{stata---E5T02y.js → stata-BFBQv4-R.js} +1 -1
- package/ui/dist/assets/{surrealql-B3nSLmva.js → surrealql-C-hPyRoi.js} +1 -1
- package/ui/dist/assets/{svelte-BrJnUGsO.js → svelte-COzcYWbs.js} +1 -1
- package/ui/dist/assets/{templ-Cp6BywaR.js → templ-CIF5RvVU.js} +1 -1
- package/ui/dist/assets/{tex-yFYe_F-5.js → tex-DiIjyX_E.js} +1 -1
- package/ui/dist/assets/{ts-tags-Dn1XZNS9.js → ts-tags-Bb-cll5a.js} +1 -1
- package/ui/dist/assets/{tsx-BnhO4Hkv.js → tsx-B_TJQczU.js} +1 -1
- package/ui/dist/assets/{twig-B-zB3u-Z.js → twig-B2bev-dI.js} +1 -1
- package/ui/dist/assets/{typescript-D49Rl_Ln.js → typescript-Ii543U_f.js} +1 -1
- package/ui/dist/assets/{vue-DmTXiGeI.js → vue-CGYOL_ei.js} +1 -1
- package/ui/dist/assets/{vue-html-CeXpHptR.js → vue-html-DJiTs0pH.js} +1 -1
- package/ui/dist/assets/{vue-vine-C2uWvGRx.js → vue-vine-BWgBzdhj.js} +1 -1
- package/ui/dist/assets/{xml-SZiG-U1T.js → xml-wwBhpto-.js} +1 -1
- package/ui/dist/assets/{xsl-DksAOCj6.js → xsl-ia_QpSvH.js} +1 -1
- package/ui/dist/assets/{yaml-DX7HDqJF.js → yaml-DPR0vpXc.js} +1 -1
- package/ui/dist/index.html +2 -2
- package/ui/dist/assets/index-B-GFE-1x.css +0 -1
- package/ui/dist/assets/index-CtmSI3Ho.js +0 -1203
package/README.md
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# 🥕 caret
|
|
2
2
|
|
|
3
|
-
>
|
|
4
|
-
>
|
|
5
|
-
>
|
|
3
|
+
> [!WARNING]
|
|
4
|
+
> caret is an early prototype and may change substantially over the next little while —
|
|
5
|
+
> interfaces, hooks, storage, and the install flow are all still settling. Expect rough
|
|
6
|
+
> edges and breaking changes.
|
|
6
7
|
|
|
7
8
|
caret is a Claude Code (and OpenCode) plugin that replaces the terminal plan-approval
|
|
8
9
|
prompt with a local web UI. When your agent presents a plan, caret opens it in your
|
|
@@ -21,44 +22,53 @@ Want to develop caret rather than use it? Start with [CONTRIBUTING.md](CONTRIBUT
|
|
|
21
22
|
|
|
22
23
|
caret needs [`bun`](https://bun.sh) on your `PATH` — it runs from a `bun` bundle.
|
|
23
24
|
|
|
25
|
+
> [!NOTE]
|
|
26
|
+
> caret is **macOS-first**; Linux and Windows are best-effort. See
|
|
27
|
+
> [`doc/CONFIGURING.md`](doc/CONFIGURING.md#platform-support) for what differs on each
|
|
28
|
+
> platform and what to fall back on.
|
|
29
|
+
|
|
24
30
|
```sh
|
|
25
31
|
bunx --no-cache @macintacos/caret@latest install
|
|
26
32
|
```
|
|
27
33
|
|
|
28
|
-
That
|
|
29
|
-
[Claude Code](https://claude.com/claude-code), [OpenCode](https://opencode.ai), or
|
|
30
|
-
asks which of them to install into, and registers the _published_ caret with each:
|
|
31
|
-
prebuilt artifacts, the `/caret:*` slash commands, and the rumdl
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
non-interactively, and `--dry-run` previews the run without changing anything.
|
|
35
|
-
|
|
36
|
-
Restart the agent afterward — OpenCode installs the plugin package on its next start —
|
|
37
|
-
then try `/caret:demo`, which presents a short fake plan to exercise the flow.
|
|
34
|
+
That is the whole install — no `git clone`, no compile step. It detects which agents you
|
|
35
|
+
have — [Claude Code](https://claude.com/claude-code), [OpenCode](https://opencode.ai), or
|
|
36
|
+
both — asks which of them to install into, and registers the _published_ caret with each:
|
|
37
|
+
prebuilt artifacts, the `/caret:*` slash commands, and the [rumdl](https://rumdl.dev/)
|
|
38
|
+
plan formatter. Where it can't ask — off a terminal — it installs into every agent it
|
|
39
|
+
detected.
|
|
38
40
|
|
|
39
|
-
|
|
41
|
+
Two steps finish the job:
|
|
40
42
|
|
|
41
|
-
**
|
|
43
|
+
1. **Restart the agent.** OpenCode installs the plugin package on its next start.
|
|
44
|
+
2. **Run `/caret:demo`.** It presents a short fake plan, so you can exercise the whole
|
|
45
|
+
flow before a real one arrives.
|
|
42
46
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
47
|
+
| Flag | What it does |
|
|
48
|
+
| ------------------- | ----------------------------------------------------------------- |
|
|
49
|
+
| `--target <agents>` | Skip the chooser: `claude`, `opencode`, or both, comma-separated. |
|
|
50
|
+
| `--dry-run` | Preview the run without changing anything. |
|
|
51
|
+
| `--refresh` | Update an existing install. |
|
|
52
|
+
| `--uninstall` | Remove caret, offering the same agent chooser. |
|
|
46
53
|
|
|
47
|
-
|
|
48
|
-
applies the update. In OpenCode, caret toasts you at startup when a newer release is out;
|
|
49
|
-
a plain `install` at a terminal runs its own check against npm and asks before taking it.
|
|
50
|
-
See [`doc/ADVANCED.md`](doc/ADVANCED.md#how-it-works) for the by-hand equivalents and for
|
|
51
|
-
pinning a version in OpenCode's config.
|
|
54
|
+
### Updating and uninstalling
|
|
52
55
|
|
|
53
|
-
|
|
56
|
+
Both are the install command with one flag:
|
|
54
57
|
|
|
55
58
|
```sh
|
|
56
|
-
bunx --no-cache @macintacos/caret@latest install --
|
|
59
|
+
bunx --no-cache @macintacos/caret@latest install --refresh # update
|
|
60
|
+
bunx --no-cache @macintacos/caret@latest install --uninstall # remove
|
|
57
61
|
```
|
|
58
62
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
and
|
|
63
|
+
`--target` pins the agents on both, exactly as it does on a fresh install. Restarting each
|
|
64
|
+
agent applies an update. In OpenCode, caret toasts you at startup when a newer release is
|
|
65
|
+
out; a plain `install` at a terminal runs its own check against npm and asks before taking
|
|
66
|
+
it.
|
|
67
|
+
|
|
68
|
+
See [the OpenCode adapter](doc/ARCHITECTURE.md#the-opencode-adapter) for the by-hand
|
|
69
|
+
equivalents, for pinning a version in OpenCode's `plugin` array, and for what each agent's
|
|
70
|
+
install touches; [the Claude Code adapter](doc/ARCHITECTURE.md#the-claude-code-adapter)
|
|
71
|
+
covers the hooks caret registers there.
|
|
62
72
|
|
|
63
73
|
## Using caret
|
|
64
74
|
|
|
@@ -72,44 +82,41 @@ prompt. There you:
|
|
|
72
82
|
auto mode) or **Request changes**, which sends your comments back to the agent to revise
|
|
73
83
|
and re-present.
|
|
74
84
|
|
|
75
|
-
|
|
76
|
-
a
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
`
|
|
80
|
-
its approval step through the same review UI. Claude Code has no equivalent — see
|
|
81
|
-
[`doc/ADVANCED.md`](doc/ADVANCED.md#calling-the-review-tool-from-your-own-skill).
|
|
85
|
+
> [!TIP]
|
|
86
|
+
> **In OpenCode**, you don't have to wait to be intercepted: caret registers a
|
|
87
|
+
> `caret_review_plan` tool your agent can call directly, so a skill of your own can route
|
|
88
|
+
> its approval step through the same review UI. Claude Code has no equivalent — see
|
|
89
|
+
> [`doc/ARCHITECTURE.md`](doc/ARCHITECTURE.md#calling-the-review-tool-from-your-own-skill).
|
|
82
90
|
|
|
83
91
|
## Configuration
|
|
84
92
|
|
|
85
|
-
caret runs with sensible defaults and needs no configuration. To tune it
|
|
86
|
-
optional `config.toml` and `CARET_*`
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
[`doc/ADVANCED.md`](doc/ADVANCED.md#configuration).
|
|
93
|
+
caret runs with sensible defaults and needs no configuration. To tune it — the daemon
|
|
94
|
+
port, the review timeout, the log level — it reads an optional `config.toml` and `CARET_*`
|
|
95
|
+
environment variables. Every key, every variable, and their defaults are in
|
|
96
|
+
[`doc/CONFIGURING.md`](doc/CONFIGURING.md).
|
|
90
97
|
|
|
91
|
-
##
|
|
98
|
+
## Diagnostics
|
|
92
99
|
|
|
93
100
|
- `/caret:discovery` prints a one-shot, read-only diagnostics snapshot of your install —
|
|
94
|
-
|
|
101
|
+
always redacted, and it never contains plan, prompt, or feedback bodies, nor any log
|
|
102
|
+
contents.
|
|
95
103
|
- `/caret:debug` reviews the current session's plans and recent errors.
|
|
96
104
|
|
|
97
|
-
|
|
98
|
-
|
|
105
|
+
Logs are written raw by default. `caret redact` writes scrubbed `*.redacted.log` copies
|
|
106
|
+
alongside them — paste one of those into a chat, a gist, or an AI assistant, never the
|
|
107
|
+
original. [`doc/RUNNING.md`](doc/RUNNING.md#logging--debugging) says where they live.
|
|
99
108
|
|
|
100
|
-
##
|
|
109
|
+
## Documentation
|
|
101
110
|
|
|
102
|
-
|
|
103
|
-
|
|
111
|
+
[`doc/README.md`](doc/README.md) maps the `doc/` directory — start there and it routes you
|
|
112
|
+
to the reference page that answers your question.
|
|
104
113
|
|
|
105
|
-
|
|
114
|
+
Two more live at the repo root:
|
|
106
115
|
|
|
107
|
-
- [`doc/ADVANCED.md`](doc/ADVANCED.md) — the deep reference: build-from-source,
|
|
108
|
-
architecture, the agent adapters, the full configuration surface, and the development
|
|
109
|
-
workflow.
|
|
110
116
|
- [CONTRIBUTING.md](CONTRIBUTING.md) — develop caret locally: setup, the `mise` workflow,
|
|
111
117
|
and where tests live.
|
|
112
|
-
- [
|
|
118
|
+
- [CLAUDE.md](CLAUDE.md) — for coding agents: routes a change to the rules-of-the-road
|
|
119
|
+
that govern it.
|
|
113
120
|
|
|
114
121
|
## License
|
|
115
122
|
|
package/commands/discovery.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Gather a redacted diagnostics snapshot of this caret install and present it ready to
|
|
2
|
+
description: Gather a redacted diagnostics snapshot of this caret install and present it ready to share
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
caret's `discovery` subcommand prints a one-shot, read-only snapshot of the local install
|
|
@@ -12,7 +12,7 @@ or feedback bodies, nor any log contents — it exists to be shared.
|
|
|
12
12
|
|
|
13
13
|
First ask the user (via `AskUserQuestion`) which format they want:
|
|
14
14
|
|
|
15
|
-
- **JSON** — for
|
|
15
|
+
- **JSON** — for feeding to tooling.
|
|
16
16
|
- **Human-readable** — for scanning in the conversation.
|
|
17
17
|
|
|
18
18
|
Then run the matching invocation:
|
|
@@ -24,8 +24,8 @@ Then run the matching invocation:
|
|
|
24
24
|
|
|
25
25
|
End your output with the command's stdout **verbatim** in a fenced code block —
|
|
26
26
|
` ```json ` for the JSON format, plain ` ``` ` for the human-readable one — so the user
|
|
27
|
-
can copy it
|
|
28
|
-
|
|
27
|
+
can copy it out in one piece. 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
29
|
`daemon error: …` or `"error": "…"`) is normal when the daemon is down — present it as-is
|
|
30
30
|
rather than treating it as a failure of this command.
|
|
31
31
|
|