@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 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, with what a Claude
64
- Code session shows of the workspace, worded by the CLI — the session-start
65
- banner, the status line entry, the scope's plans `In progress` and the
66
- notes of the safety net (see "Hooks"). The plugin's mod reads it (see
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
- - **The status line**: `<scope> · <n> in progress`, with `⚠ <n>` when
176
- there are notes. Claude Code draws it after the plugin's name:
177
- `⚠ rness: web · 1 in progress` (2.1.289).
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; no model turn. The pane takes the
180
- keyboard as it opens: a tab's digit (written before its name), or Tab
181
- then Enter, shows that tab; ↑/↓, `PgUp`/`PgDn`, `Home`/`End` scroll, as
182
- in the full-screen `rness status`; Esc and `q` close it, and so does Esc
183
- at an empty prompt once the prompt has the keys back. A pane has no
184
- ←/→ in Claude Code 2.1.289. In `claude -p`, or where no pane can be
185
- placed, the skill's tables answer instead.
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. It loads
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
- status line or pane; 2.1.280 or later does — claude update`. The version
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
@@ -6,7 +6,7 @@ import {
6
6
  findDelegate,
7
7
  reportError,
8
8
  run
9
- } from "../chunk-U5SBNWVD.js";
9
+ } from "../chunk-2AFAQO5B.js";
10
10
 
11
11
  // src/bin/rness.ts
12
12
  import { pathToFileURL } from "url";
@@ -511,7 +511,7 @@ function parseRepoSpec(spec, org, host) {
511
511
  }
512
512
 
513
513
  // src/version.ts
514
- var VERSION = "0.19.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
- var BODY_LIMIT = 65536;
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, status line or pane; ${MOD_FLOOR} or later does \u2014 claude update`;
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 `${scope ?? "global"} \xB7 ${inProgress.length} in progress${acting > 0 ? ` \xB7 \u26A0 ${acting}` : ""}`;
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
- tabs
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-U5SBNWVD.js.map
10305
+ //# sourceMappingURL=chunk-2AFAQO5B.js.map