@satanwagen/reviewkit 0.1.4 → 0.1.5
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/CHANGELOG.md +127 -0
- package/README.md +3 -1
- package/dist/{chunk-EOX3UJNP.js → chunk-L7JLBD7Q.js} +1 -1
- package/dist/{chunk-5MAFDRUI.js → chunk-VNRVRNZX.js} +10 -2
- package/dist/chunk-VNRVRNZX.js.map +1 -0
- package/dist/client/index.cjs +9 -1
- package/dist/client/index.cjs.map +1 -1
- package/dist/client/index.js +1 -1
- package/dist/index.cjs +9 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/lazy.cjs +9 -1
- package/dist/lazy.cjs.map +1 -1
- package/dist/lazy.js +1 -1
- package/dist/next.cjs +9 -1
- package/dist/next.cjs.map +1 -1
- package/dist/next.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-5MAFDRUI.js.map +0 -1
- /package/dist/{chunk-EOX3UJNP.js.map → chunk-L7JLBD7Q.js.map} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,132 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.5 — 2026-09-02
|
|
4
|
+
|
|
5
|
+
Fixes the "status won't change" bug for good.
|
|
6
|
+
|
|
7
|
+
- **Root cause:** the browser session is per origin (all pages), rooms are per
|
|
8
|
+
page, and on every connect the client uploaded its whole session into the
|
|
9
|
+
current room. Each item therefore existed in several rooms; a status change
|
|
10
|
+
updated one copy and the others stayed stale, so the web and the terminal
|
|
11
|
+
showed a mix.
|
|
12
|
+
- **Client:** on connect only items of the current page are re-uploaded.
|
|
13
|
+
- **Server (deployed):** items live in the room of their own `route`: an add
|
|
14
|
+
for another page is redirected there (an already-known id is confirmed,
|
|
15
|
+
never duplicated), and an update / status / delete for an id the current
|
|
16
|
+
room does not hold is applied in the sibling room that does — the sender
|
|
17
|
+
still gets the echo. On load, items stored in the wrong room are moved to
|
|
18
|
+
their own room ("rehomed"), so old duplicates disappear by themselves.
|
|
19
|
+
- **CLI (0.1.12):** shows each item once even if a stale copy still exists,
|
|
20
|
+
preferring the copy in its own page's room.
|
|
21
|
+
|
|
22
|
+
## 0.1.12 — 2026-09-02 (`@satanwagen/reviewkit-cli` only)
|
|
23
|
+
|
|
24
|
+
- Each item is listed once even when an old duplicate lingers in another
|
|
25
|
+
room (see 0.1.5 of the main package); mutations target the right room.
|
|
26
|
+
- First `e` (edit prompt) without `$EDITOR` offers to install **micro**, a
|
|
27
|
+
terminal editor with VS Code keys (Ctrl+S save, Ctrl+Q quit, Ctrl+Z undo,
|
|
28
|
+
mouse): `y` installs (Homebrew on macOS, otherwise getmic.ro into
|
|
29
|
+
`~/.local/bin`) and uses it from then on, `n` sticks with nano. The choice
|
|
30
|
+
is remembered; `EDITOR=…` in the shell always wins. micro is preferred
|
|
31
|
+
automatically when already installed.
|
|
32
|
+
|
|
33
|
+
## 0.1.11 — 2026-09-02 (`@satanwagen/reviewkit-cli` only)
|
|
34
|
+
|
|
35
|
+
- Prompt editing (`e`) uses `$VISUAL` / `$EDITOR`, else **nano** when
|
|
36
|
+
installed, else vi; the terminal shows how to save and leave before the
|
|
37
|
+
editor opens (nano: Ctrl+O, Enter, Ctrl+X · vi: Esc `:wq`). GUI editors
|
|
38
|
+
(code, cursor, subl, zed) get `--wait` so the run waits for you.
|
|
39
|
+
|
|
40
|
+
## 0.1.10 — 2026-09-02 (`@satanwagen/reviewkit-cli` only)
|
|
41
|
+
|
|
42
|
+
- **Follow-ups.** `r` on a finished run opens a reply line; what you type goes
|
|
43
|
+
to the same agent session (`--resume <session id>`) as a new run marked
|
|
44
|
+
`#4↩2`, with the original items named, so "also make the button darker"
|
|
45
|
+
lands in the right context. Works for Claude Code; Cursor gets the same
|
|
46
|
+
flag best-effort.
|
|
47
|
+
- **Prompt review.** Before anything is sent you see the exact prompt: `⏎`
|
|
48
|
+
sends, `n` adds a one-line note, `e` opens it in `$EDITOR` for real edits,
|
|
49
|
+
`←` goes back to the model.
|
|
50
|
+
- **Run view.** Agent runs are cards (colour bar, `WORK` / `DONE` / `FAIL`
|
|
51
|
+
badge, agent, model, items, elapsed, last step). `Tab` focuses the cards,
|
|
52
|
+
`⏎` opens a run: its items with live statuses, model, turns, cost, session,
|
|
53
|
+
the full scrollable log and a follow-up line at the bottom (`⏎` sends into
|
|
54
|
+
the same session, `y` copies the log, `K` stop, `X` close).
|
|
55
|
+
- **Inline only.** The full-screen interactive agent mode is gone; agents
|
|
56
|
+
always work inside the view.
|
|
57
|
+
|
|
58
|
+
## 0.1.9 — 2026-09-02 (`@satanwagen/reviewkit-cli` only)
|
|
59
|
+
|
|
60
|
+
- **Parallel agents.** Up to 10 runs at once, each on its own items (an item
|
|
61
|
+
already being worked on is skipped). One line per run in the pane with a
|
|
62
|
+
`WORK` / `DONE` / `FAIL` badge, agent, model, item count, elapsed time and
|
|
63
|
+
the latest step; `Tab` focuses a run, `K` stops it, `L` shows its log, `X`
|
|
64
|
+
closes a finished one. Finished runs show `✓ n/m applied · turns · $`.
|
|
65
|
+
- **Leftovers closed.** When a run ends OK, items the agent forgot to mark are
|
|
66
|
+
set to `applied` on its behalf (logged); the agent prompt now requires a
|
|
67
|
+
status call per item.
|
|
68
|
+
- **Fix:** status changes from the terminal silently did nothing for items
|
|
69
|
+
whose route has a trailing slash (`/about/` vs room `/about`): the change
|
|
70
|
+
went to the wrong room. Routes are compared normalised now, so it reaches
|
|
71
|
+
the room and every browser.
|
|
72
|
+
|
|
73
|
+
## 0.1.8 — 2026-09-02 (`@satanwagen/reviewkit-cli` only)
|
|
74
|
+
|
|
75
|
+
- **Cursor support.** The agent picker offers every agent CLI found on PATH:
|
|
76
|
+
Claude Code (`claude`) and Cursor (`cursor-agent`, print mode with
|
|
77
|
+
`--force`, MCP from `~/.cursor/mcp.json` which `reviewkit setup` writes).
|
|
78
|
+
Two-step picker: agent → model, last choice remembered per agent.
|
|
79
|
+
- **Bulk hand-over.** `space` selects items (◆), `a` hands the selection (or
|
|
80
|
+
all open items when nothing is selected) to the agent; `1`–`4` change the
|
|
81
|
+
status of every selected item at once.
|
|
82
|
+
- **Agent finish = status change.** Items the agent worked on but did not
|
|
83
|
+
mark itself become `accepted` when the run ends OK.
|
|
84
|
+
- **Filters that exist.** `f` opens a filter panel (environment, status, type,
|
|
85
|
+
priority, page — arrows to move and change), `/` is a live text search
|
|
86
|
+
(id, text, author, note, selector); active filters are chips in the header,
|
|
87
|
+
`F` clears. `s` cycles status, `o` cycles environment.
|
|
88
|
+
- **No accidental quits.** `q` asks for a second `q`; Ctrl+C quits at once.
|
|
89
|
+
`esc` clears the selection, then the filters.
|
|
90
|
+
- **Redrawn table and footer.** Type glyphs (✎ ▣ ❝ ✕ ⇄ ◐), status dots, column
|
|
91
|
+
separators, key chips in the footer, a shorter header (name · environments
|
|
92
|
+
· who is online · counts). Long descriptive hints are gone.
|
|
93
|
+
- **No flicker.** Frames are painted line by line with erase-to-end-of-line
|
|
94
|
+
and redraws are coalesced (max one per 16 ms) instead of clearing the
|
|
95
|
+
screen for every update.
|
|
96
|
+
|
|
97
|
+
## 0.1.7 — 2026-09-02 (`@satanwagen/reviewkit-cli` only)
|
|
98
|
+
|
|
99
|
+
- **Agent works inside the live view.** `a` (all open items) or Enter → "Apply
|
|
100
|
+
with claude here" opens a picker — model per task: Fable 5.1, Opus, Sonnet,
|
|
101
|
+
Haiku or the Claude Code default (last pick preselected) — then runs
|
|
102
|
+
Claude Code in print mode with the reviewkit MCP attached and streams its
|
|
103
|
+
steps into an agent pane under the list (`▸ Edit page.tsx`, `it-3f9a →
|
|
104
|
+
applied`, cost and turns at the end). Items being worked on spin; statuses
|
|
105
|
+
flip live for reviewers too. `K` stops, `L` shows the full log, `X` closes
|
|
106
|
+
the pane, `A` / menu `C` still open full-screen interactive Claude.
|
|
107
|
+
- Detail strip under the list: selector, tag, text snippet and the request of
|
|
108
|
+
the selected item.
|
|
109
|
+
- Edits are auto-accepted (`--permission-mode acceptEdits`), reviewkit MCP
|
|
110
|
+
tools pre-allowed; `REVIEWKIT_AGENT_PERMISSIONS=bypassPermissions` for
|
|
111
|
+
trusted repos, `REVIEWKIT_AGENT` to swap the binary.
|
|
112
|
+
|
|
113
|
+
## 0.1.6 — 2026-09-02 (`@satanwagen/reviewkit-cli` only)
|
|
114
|
+
|
|
115
|
+
- **Environments.** One repo usually runs on several origins (localhost, a
|
|
116
|
+
dev domain, production); a project now carries a list of them. Pairing from
|
|
117
|
+
another environment with the same token **adds** its origin instead of
|
|
118
|
+
replacing the file; `reviewkit env` lists them, `env add <url>` / `env rm`
|
|
119
|
+
edit them. The live view shows all environments at once (a `where` column
|
|
120
|
+
with the host) and `o` switches between them; `list`/`watch` take
|
|
121
|
+
`--env <origin>`; MCP `reviewkit_list` accepts `origin` and tags items with
|
|
122
|
+
theirs. Items keep non-enumerable origin/route tags so exports stay clean.
|
|
123
|
+
|
|
124
|
+
## 0.1.5 — 2026-09-02 (`@satanwagen/reviewkit-cli` only)
|
|
125
|
+
|
|
126
|
+
- CLI: a `.reviewkit/emblema-sync.json` or `project.json` still pointing at
|
|
127
|
+
the retired `agropolio.fucking.style` host resolves to the default public
|
|
128
|
+
server instead of a dead URL. The main package stays at 0.1.4.
|
|
129
|
+
|
|
3
130
|
## 0.1.4 — 2026-09-02
|
|
4
131
|
|
|
5
132
|
### Added
|
package/README.md
CHANGED
|
@@ -312,7 +312,9 @@ reviewkit # first run pairs the repo (one click in the review panel), t
|
|
|
312
312
|
|
|
313
313
|
**Pairing is one click, no copy-paste.** Bare `reviewkit` in an unpaired repo runs `setup` first; it detects the site's `token` (and a custom `syncToken` / `syncUrl`, if any) in the repo, opens a loopback port and waits. In the browser open the review panel → gear → **Connect terminal / agent…** → **Connect**: the panel finds the waiting terminal and pushes the connection into `<repo>/.reviewkit/project.json` (gitignored). `setup` also registers the MCP server in Claude Code and Cursor when it finds them. The dialog keeps a copyable key as the fallback for a terminal on another machine.
|
|
314
314
|
|
|
315
|
-
The live view is interactive: arrow keys walk the items, Enter opens actions (detail, apply
|
|
315
|
+
The live view is interactive: arrow keys walk the items, Enter opens actions (detail, apply with Claude Code, copy as prompt, mark applied / accepted / rejected / reopen, delete), `space` selects items and `a` hands them (or all open ones) to Claude Code or Cursor — you pick agent and model per task (Fable / Opus / Sonnet / Haiku…) and watch it work in an agent pane right under the list while statuses flip live; `f` filters, `/` searches — and the header shows who is reviewing right now in their own colours. Everything is the shared room state, so a status flipped in the terminal or by an agent changes in reviewers' browsers instantly, and vice versa.
|
|
316
|
+
|
|
317
|
+
One repo, several environments (localhost, dev domain, production): pairing from each adds its origin to the project, the live view shows them all with a `where` column, `o` switches between them, `reviewkit env` manages the list.
|
|
316
318
|
|
|
317
319
|
Everyday commands: `reviewkit list --status open`, `reviewkit show <id>`, `reviewkit status <id> applied`, `reviewkit watch`, `reviewkit export -o review.json`, `reviewkit prompt` (agent-ready work list), `reviewkit rooms`, `reviewkit projects` / `-p <name>` to act on another paired site. Full table in [`cli/README.md`](./cli/README.md).
|
|
318
320
|
|
|
@@ -3750,6 +3750,11 @@ function currentAuthor(name) {
|
|
|
3750
3750
|
|
|
3751
3751
|
// src/client/sync.ts
|
|
3752
3752
|
var DEFAULT_SYNC_URL = "wss://2-59-219-26.sslip.io/rk-sync";
|
|
3753
|
+
function normalizeRoute(route) {
|
|
3754
|
+
let r = String(route ?? "/");
|
|
3755
|
+
if (!r.startsWith("/")) r = "/" + r;
|
|
3756
|
+
return r.length > 1 ? r.replace(/\/+$/, "") : r;
|
|
3757
|
+
}
|
|
3753
3758
|
function resolveSyncUrl(config) {
|
|
3754
3759
|
return typeof config.syncUrl === "string" && config.syncUrl !== "" ? config.syncUrl : DEFAULT_SYNC_URL;
|
|
3755
3760
|
}
|
|
@@ -3832,8 +3837,11 @@ function useRealtimeSync(state, rawDispatch, config, reducer2) {
|
|
|
3832
3837
|
for (const id2 of deletedIds) dispatch({ type: "REMOTE_DELETE", id: id2 });
|
|
3833
3838
|
dispatch({ type: "PEERS_SET", peers: peers.filter((peer) => peer.id !== id).map(toPeerState) });
|
|
3834
3839
|
const serverIds = new Set(items.map((item) => item.id));
|
|
3840
|
+
const here = normalizeRoute(window.location.pathname);
|
|
3835
3841
|
for (const item of stateRef.current.session?.items ?? []) {
|
|
3836
|
-
if (
|
|
3842
|
+
if (serverIds.has(item.id) || deleted.has(item.id)) continue;
|
|
3843
|
+
if (normalizeRoute(item.route) !== here) continue;
|
|
3844
|
+
sync.addItem(item);
|
|
3837
3845
|
}
|
|
3838
3846
|
},
|
|
3839
3847
|
onPeerJoin: (peer) => dispatch({
|
|
@@ -7660,4 +7668,4 @@ export {
|
|
|
7660
7668
|
importSessionFile,
|
|
7661
7669
|
ReviewKit
|
|
7662
7670
|
};
|
|
7663
|
-
//# sourceMappingURL=chunk-
|
|
7671
|
+
//# sourceMappingURL=chunk-VNRVRNZX.js.map
|