@rness/cli 0.19.0 → 0.20.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.
- package/README.md +62 -16
- package/dist/bin/rness.js +1 -1
- package/dist/{chunk-U5SBNWVD.js → chunk-2AFAQO5B.js} +29 -7
- package/dist/chunk-2AFAQO5B.js.map +1 -0
- package/dist/index.js +1 -1
- package/mod/hooks/register.tsx +373 -45
- package/mod/types/index.d.ts +13 -0
- package/package.json +1 -1
- package/dist/chunk-U5SBNWVD.js.map +0 -1
package/README.md
CHANGED
|
@@ -60,10 +60,14 @@ when dropped, red `?` when missing.
|
|
|
60
60
|
`PgUp`/`PgDn`, `Home`/`End` scroll, `q` or `Esc` closes and gives the
|
|
61
61
|
screen back. Read-only.
|
|
62
62
|
- Off a terminal — a pipe, CI, an agent's tool — Markdown: a table per tab.
|
|
63
|
-
- `--json`, terminal or not: the tabs and their rows
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
63
|
+
- `--json`, terminal or not: the tabs and their rows — each row with the
|
|
64
|
+
colour of its status on Agent Pulse (`color`, the board's name for it:
|
|
65
|
+
`yellow` for `In progress`; `red` without a status) and its item there
|
|
66
|
+
(`link`, the board filtered on its path; null without a pulse) — the
|
|
67
|
+
board (`pulse`), and what a Claude Code session shows of the workspace,
|
|
68
|
+
worded by the CLI — the session-start banner, the footer's label, the
|
|
69
|
+
scope's plans `In progress` and the notes of the safety net (see
|
|
70
|
+
"Hooks"). The plugin's mod reads it (see
|
|
67
71
|
"The mod").
|
|
68
72
|
- From Claude Code, `/rness:status [tab]` opens a pane beside the
|
|
69
73
|
conversation when the plugin's mod is loaded (see "The mod"), and shows
|
|
@@ -172,29 +176,46 @@ the pinned copy, and computes nothing itself:
|
|
|
172
176
|
installed copy does not match, problems `validate` would report): those
|
|
173
177
|
notes. The banner is not repeated there; the session-start line says it
|
|
174
178
|
once, in the transcript.
|
|
175
|
-
- **
|
|
176
|
-
|
|
177
|
-
|
|
179
|
+
- **A label in the prompt footer**, among the session modes (`focus`,
|
|
180
|
+
`memory paused`), dim: `rness · <scope> · <n> in progress`, with `⚠ <n>`
|
|
181
|
+
when there are notes. Not the pinned status line a plugin can set:
|
|
182
|
+
Claude Code draws every pinned line after a `⚠` in its warning colour
|
|
183
|
+
(2.1.291), the wrong sign for a line that informs.
|
|
178
184
|
- **`/rness:status [tab]` as a pane** beside the conversation, a tab per
|
|
179
|
-
collection, a row per document
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
185
|
+
collection, a row per document, its status in the colour Agent Pulse
|
|
186
|
+
gives it (yellow in progress, green done, red blocked, gray draft or
|
|
187
|
+
abandoned, blue proposed, purple approved — the board's purple is the
|
|
188
|
+
terminal's magenta); no model turn. The pane takes the keyboard as it
|
|
189
|
+
opens, on the newest row, with the keys of the full-screen view:
|
|
190
|
+
**↑/↓ select a row**, `PgUp`/`PgDn` a page away, `Home`/`End`
|
|
191
|
+
the ends, the window following the selection; **Tab and Shift+Tab
|
|
192
|
+
change the tab**, wrapping, and so does a tab's digit (written before
|
|
193
|
+
its name); **Enter, or a click, on a row shows the document**; Esc and
|
|
194
|
+
`q` close the pane, and so does Esc at an empty prompt once the prompt
|
|
195
|
+
has the keys back. The selected row is drawn between `‹` and `›`, which
|
|
196
|
+
a click presses too. A pane has no ←/→ in Claude Code 2.1.289. The
|
|
197
|
+
document is read from `.rness/` without its front matter, as the
|
|
198
|
+
board's card shows it; `q` brings the list back, Esc still closes. An
|
|
199
|
+
edit of the document shows at the next refresh. **Agent
|
|
200
|
+
Pulse is a link** when the workspace declares a pulse: the board from the
|
|
201
|
+
list, the document's item (the board filtered on its path) from the
|
|
202
|
+
document. The terminal opens it as it opens any hyperlink (cmd+click on
|
|
203
|
+
macOS, as a rule), a desktop surface on a click. In `claude -p`, or where
|
|
204
|
+
no pane can be placed, the skill's tables answer instead.
|
|
186
205
|
|
|
187
206
|
It reads the snapshot again at session start, after an `Edit` or `Write`
|
|
188
207
|
of a file under `.rness/`, and at the end of each turn, off the turn's
|
|
189
208
|
path. The module runs the pinned copy at the one path `sync` writes into it
|
|
190
209
|
for its place (`.rness` at the root, `../../.rness` in a clone), as the
|
|
191
|
-
settings hooks do: never a copy a clone's own tree could hold.
|
|
210
|
+
settings hooks do: never a copy a clone's own tree could hold. Like them,
|
|
211
|
+
it never installs: a pin that drifts from the installed copy is a note in
|
|
212
|
+
the band, and `npm install` in `.rness` is the developer's. It loads
|
|
192
213
|
where the plugin loads — a trusted folder, `claude -p` included — on a
|
|
193
214
|
Claude Code that has mods: run by 2.1.280 and later, ignored without an
|
|
194
215
|
error by 2.1.240 and 2.1.199, where the skills work as before (verified on
|
|
195
216
|
2026-10-04). An older Claude Code is told so once per version and machine,
|
|
196
217
|
in the session-start line: `rness: Claude Code 2.1.240 shows no rness band,
|
|
197
|
-
|
|
218
|
+
footer label or pane; 2.1.280 or later does — claude update`. The version
|
|
198
219
|
comes from `AI_AGENT`, which Claude Code sets (2.1.240 does); one that does
|
|
199
220
|
not set it, or not in that form, is told nothing. The versions told are kept
|
|
200
221
|
in `claude-code.json` beside the login (`~/.config/rness/` by default). Not in
|
|
@@ -674,6 +695,31 @@ per repository, the files to commit there.
|
|
|
674
695
|
Exit codes: 0 success, 1 failure, 2 usage — or a refusal without a TTY.
|
|
675
696
|
`RNESS_DEBUG=1` adds stack traces; `RNESS_NO_DELEGATE=1` skips the delegation.
|
|
676
697
|
|
|
698
|
+
## 0.20.1 — the workspace's line in the prompt footer, without a warning sign; the mod never installs the pin
|
|
699
|
+
|
|
700
|
+
- The workspace's line in Claude Code moves from the pinned status line to
|
|
701
|
+
the prompt footer, among the session modes, dim and without a sign:
|
|
702
|
+
`rness · web · 1 in progress`, `⚠ <n>` at its end when notes need action.
|
|
703
|
+
Claude Code draws every pinned line a plugin sets after a `⚠` in its
|
|
704
|
+
warning colour, the wrong sign for a line that informs. `rness status
|
|
705
|
+
--json`'s `statusLine` carries the leading `rness` again. VS Code and
|
|
706
|
+
mobile surfaces, which draw no session modes, show no line; the
|
|
707
|
+
`/rness:status` pane stays.
|
|
708
|
+
- The mod no longer installs the pin from inside Claude Code. It ran
|
|
709
|
+
`status --json` with catch-up on, so in a workspace whose pin drifts each
|
|
710
|
+
refresh ran `npm install` in `.rness`, without asking, and replaced a
|
|
711
|
+
local copy. It now runs with `RNESS_NO_DELEGATE=1`: the drift is a note
|
|
712
|
+
in the band, as the settings hooks report it.
|
|
713
|
+
|
|
714
|
+
## 0.20.0 — the status pane opens a document; ↑/↓ select, Tab changes the tab; Agent Pulse's colours and links
|
|
715
|
+
|
|
716
|
+
- `/rness:status` in Claude Code: each row's status in Agent Pulse's colour;
|
|
717
|
+
↑/↓ select a row, Tab and Shift+Tab change the tab; Enter, or a click, on
|
|
718
|
+
a row shows the document in the pane and `q` brings the list back; Agent
|
|
719
|
+
Pulse is a link — the board from the list, the document's item from the
|
|
720
|
+
document. `rness status --json` prints each row's `color` and `link`, and
|
|
721
|
+
the board as `pulse`.
|
|
722
|
+
|
|
677
723
|
## 0.19.0 — the plugin's mod; edits of generated files refused before they land
|
|
678
724
|
|
|
679
725
|
- The Claude Code plugin gains a mod (see "The mod"): the notes to act on
|
package/dist/bin/rness.js
CHANGED
|
@@ -511,7 +511,7 @@ function parseRepoSpec(spec, org, host) {
|
|
|
511
511
|
}
|
|
512
512
|
|
|
513
513
|
// src/version.ts
|
|
514
|
-
var VERSION = "0.
|
|
514
|
+
var VERSION = "0.20.1";
|
|
515
515
|
|
|
516
516
|
// src/core/pm.ts
|
|
517
517
|
import { execFile as execFile2 } from "child_process";
|
|
@@ -1259,9 +1259,15 @@ async function plansInProgress(ws, manifest, scope) {
|
|
|
1259
1259
|
// src/pulse/body.ts
|
|
1260
1260
|
import { createHash } from "crypto";
|
|
1261
1261
|
import { posix as posix4 } from "path";
|
|
1262
|
-
|
|
1262
|
+
|
|
1263
|
+
// src/pulse/urls.ts
|
|
1264
|
+
var boardUrl = (org, project) => `https://github.com/orgs/${org}/projects/${project}`;
|
|
1265
|
+
var itemUrl = (org, project, path) => `${boardUrl(org, project)}?filterQuery=${encodeURIComponent(`path:"${path}"`)}`;
|
|
1263
1266
|
var blobUrl = (org, path) => `https://github.com/${org}/.rness/blob/main/${encodeURI(path)}`;
|
|
1264
1267
|
var issueUrl = (org, number) => `https://github.com/${org}/.rness/issues/${number}`;
|
|
1268
|
+
|
|
1269
|
+
// src/pulse/body.ts
|
|
1270
|
+
var BODY_LIMIT = 65536;
|
|
1265
1271
|
function headerOf(path, org) {
|
|
1266
1272
|
return `\`${path}\` \xB7 [on GitHub](${blobUrl(org, path)})`;
|
|
1267
1273
|
}
|
|
@@ -8317,7 +8323,7 @@ async function takeModNotice(env) {
|
|
|
8317
8323
|
);
|
|
8318
8324
|
} catch {
|
|
8319
8325
|
}
|
|
8320
|
-
return `rness: Claude Code ${version} shows no rness band,
|
|
8326
|
+
return `rness: Claude Code ${version} shows no rness band, footer label or pane; ${MOD_FLOOR} or later does \u2014 claude update`;
|
|
8321
8327
|
}
|
|
8322
8328
|
|
|
8323
8329
|
// src/core/edit-guard.ts
|
|
@@ -8786,12 +8792,28 @@ async function scopeBanner(ws, manifest, scope) {
|
|
|
8786
8792
|
var noteLines = (notes) => notes.map((n) => `rness: ${n}`);
|
|
8787
8793
|
function statusLine(scope, inProgress, notes) {
|
|
8788
8794
|
const acting = notes.filter((n) => !n.startsWith(" ")).length;
|
|
8789
|
-
return
|
|
8795
|
+
return `rness \xB7 ${scope ?? "global"} \xB7 ${inProgress.length} in progress${acting > 0 ? ` \xB7 \u26A0 ${acting}` : ""}`;
|
|
8796
|
+
}
|
|
8797
|
+
function pulseOf(manifest) {
|
|
8798
|
+
const project = manifest.projects?.[PULSE];
|
|
8799
|
+
return manifest.org === null || project === void 0 ? null : { org: manifest.org, project };
|
|
8800
|
+
}
|
|
8801
|
+
function snapshotTabs(tabs, pulse) {
|
|
8802
|
+
return tabs.map((tab) => ({
|
|
8803
|
+
name: tab.name,
|
|
8804
|
+
label: tab.label,
|
|
8805
|
+
rows: tab.rows.map((row) => ({
|
|
8806
|
+
...row,
|
|
8807
|
+
color: row.status === null ? "red" : optionColor("Status", row.status),
|
|
8808
|
+
link: pulse === null ? null : itemUrl(pulse.org, pulse.project, row.path)
|
|
8809
|
+
}))
|
|
8810
|
+
}));
|
|
8790
8811
|
}
|
|
8791
8812
|
async function statusSnapshot(ws, manifest, scope, tabs) {
|
|
8792
8813
|
const { banner: banner2 } = await scopeBanner(ws, manifest, scope);
|
|
8793
8814
|
const inProgress = await plansInProgress(ws, manifest, scope);
|
|
8794
8815
|
const notes = await safetyNet(ws, manifest);
|
|
8816
|
+
const pulse = pulseOf(manifest);
|
|
8795
8817
|
return {
|
|
8796
8818
|
version: VERSION,
|
|
8797
8819
|
workspace: workspaceName(manifest, ws.root),
|
|
@@ -8800,7 +8822,8 @@ async function statusSnapshot(ws, manifest, scope, tabs) {
|
|
|
8800
8822
|
statusLine: statusLine(scope, inProgress, notes),
|
|
8801
8823
|
inProgress,
|
|
8802
8824
|
notes: noteLines(notes),
|
|
8803
|
-
|
|
8825
|
+
pulse: pulse === null ? null : boardUrl(pulse.org, pulse.project),
|
|
8826
|
+
tabs: snapshotTabs(tabs, pulse)
|
|
8804
8827
|
};
|
|
8805
8828
|
}
|
|
8806
8829
|
|
|
@@ -9267,7 +9290,6 @@ async function writeOpened(file, opened) {
|
|
|
9267
9290
|
var PROJECT_SCOPE = "project";
|
|
9268
9291
|
var NEEDS_LOGIN = "the pulse needs a GitHub login: run rness login";
|
|
9269
9292
|
var NEEDS_SCOPE = "the pulse needs the project scope: run rness login";
|
|
9270
|
-
var boardUrl = (org, project) => `https://github.com/orgs/${org}/projects/${project}`;
|
|
9271
9293
|
async function fromGithub(work) {
|
|
9272
9294
|
try {
|
|
9273
9295
|
return await work;
|
|
@@ -10280,4 +10302,4 @@ export {
|
|
|
10280
10302
|
OWN_COMMANDS,
|
|
10281
10303
|
catchUp
|
|
10282
10304
|
};
|
|
10283
|
-
//# sourceMappingURL=chunk-
|
|
10305
|
+
//# sourceMappingURL=chunk-2AFAQO5B.js.map
|