@hypercarrier/rarebit 0.1.0-alpha.6 → 0.2.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/CHANGELOG.md +33 -3
- package/README.md +296 -122
- package/RUNBOOK.md +16 -9
- package/docs/examples/rarebit.settings.json +19 -0
- package/package.json +9 -2
- package/schemas/rarebit.schema.json +2 -1
- package/scripts/e2e-recap-pi.mjs +458 -0
- package/scripts/e2e-settings-pi.mjs +267 -0
- package/scripts/e2e-v020-pi.mjs +271 -0
- package/scripts/experiment-recap-fullscreen.mjs +56 -0
- package/scripts/verify-package.mjs +14 -8
- package/src/extension.mjs +246 -24
- package/src/lifecycle.mjs +32 -7
- package/src/rarebit-artifact-state.mjs +8 -12
- package/src/rarebit-cli.mjs +2 -0
- package/src/rarebit-command.mjs +26 -1
- package/src/rarebit-core.mjs +122 -23
- package/src/rarebit-read-checkpoint.mjs +59 -0
- package/src/rarebit-recap.mjs +479 -0
- package/src/rarebit-service.mjs +65 -9
- package/src/rarebit-settings-ui.mjs +479 -0
- package/src/rarebit-settings.mjs +90 -7
- package/src/types.d.ts +65 -5
- package/test/lifecycle-contract-independent.test.mjs +2 -0
- package/test/package-artifact-identity.test.mjs +54 -0
- package/test/rarebit-artifact-state.test.mjs +10 -4
- package/test/rarebit-command.test.mjs +11 -4
- package/test/rarebit-core.test.mjs +50 -0
- package/test/rarebit-recap.test.mjs +662 -0
- package/test/rarebit-settings-ui.test.mjs +400 -0
- package/test/rarebit-sidecar-protocol.test.mjs +20 -0
- package/test/rarebit-v020.test.mjs +299 -0
- package/test/recap-read-checkpoint.test.mjs +126 -0
- package/test/summary-attention-independent.test.mjs +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.2.1 — 2026-09-29
|
|
4
|
+
|
|
5
|
+
- Move Recap into the scrollable transcript using native custom-entry renderers,
|
|
6
|
+
preserving its muted styling. Retain the widget fallback for older Pi hosts.
|
|
7
|
+
- Request 1–2 sentences and at most 300 characters in the default Summary prompt.
|
|
8
|
+
- Add `Ctrl+Alt+G` and `/rarebit got-it` to persist branch-local recap read
|
|
9
|
+
checkpoints. Subsequent summaries emphasize changes beyond recap coverage.
|
|
10
|
+
- Reuse native Recaps for the same receipt and coverage, including after read
|
|
11
|
+
acknowledgement and resume. Validate read markers against branch evidence.
|
|
12
|
+
- Keep conversation evidence beside read metadata when Summary input is trimmed.
|
|
13
|
+
- Promote newer manual assessments after settlement. Preserve active requests
|
|
14
|
+
until an agent-settled assessment closes them.
|
|
15
|
+
- Display current request-prefix Recaps with their exact receipt coverage.
|
|
16
|
+
Revalidate live branch state after asynchronous reads.
|
|
17
|
+
- Report explicit Summary outcomes even when automatic notices are disabled.
|
|
18
|
+
- Shorten Recap headers to numeric date, 24-hour time, and GMT offset. Keep
|
|
19
|
+
the got-it action inline.
|
|
20
|
+
- Include a native fullscreen renderer probe documenting Pi 0.84.2's mouse-input
|
|
21
|
+
limitation; the read affordance currently supports keyboard activation.
|
|
22
|
+
|
|
23
|
+
## 0.2.0 — 2026-09-27
|
|
24
|
+
|
|
25
|
+
- Add the `/rarebit` action palette and tabbed `/rarebit settings` editor.
|
|
26
|
+
- Add a configurable `summary_prompt` for Summary format and length. Preserve
|
|
27
|
+
paragraphs and bullets; reject oversized output instead of silently cutting it.
|
|
28
|
+
- Show the complete Recap in a muted, labelled TUI section. Remove
|
|
29
|
+
`/rarebit recap expand`.
|
|
30
|
+
- Keep Recap outside Session messages and model context. Typing preserves it;
|
|
31
|
+
submitted input, new turns, and Session or branch changes clear it.
|
|
32
|
+
- Default Summary diagnostics to off, support host or explicit IANA timezones,
|
|
33
|
+
and expose the estimated Summary input budget in settings.
|
|
34
|
+
- Include a complete example config in `docs/examples/rarebit.settings.json`.
|
|
35
|
+
|
|
3
36
|
## 0.1.0-alpha.6 — 2026-09-21
|
|
4
37
|
|
|
5
38
|
- Add bounded `/rarebit fork` and CLI fork flows with native Pi headroom checks.
|
|
@@ -8,9 +41,6 @@
|
|
|
8
41
|
- Keep read-only package commands usable without optional Pi host peers; fork
|
|
9
42
|
runtime loads the Pi adapter only when needed.
|
|
10
43
|
|
|
11
|
-
This is an unpublished release candidate. Intended npm routing after
|
|
12
|
-
publication is `next=alpha.6`; `latest` remains `alpha.4`.
|
|
13
|
-
|
|
14
44
|
## 0.1.0-alpha.5 — 2026-08-16
|
|
15
45
|
|
|
16
46
|
- Repair Pi 0.84.2 Summary calls to use the active Pi model runtime. The
|
package/README.md
CHANGED
|
@@ -1,183 +1,357 @@
|
|
|
1
1
|
# Rarebit
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
[alpha.5 release receipt](release/v0.1.0-alpha.5-release-receipt.md).
|
|
19
|
-
|
|
20
|
-
The old alpha.1, alpha.2, and alpha.3 tag graphs remain public and are not
|
|
21
|
-
privacy-clean. Existing package versions, tags, and releases remain immutable.
|
|
22
|
-
The source-only candidate derivation and vendored-scanner binding is
|
|
23
|
-
[`release/privacy-lineage.v1.json`](release/privacy-lineage.v1.json). It is
|
|
24
|
-
excluded from npm and does not claim publication completion.
|
|
3
|
+
[](https://deephbz.github.io/rarebit)
|
|
4
|
+
|
|
5
|
+
**[Rarebit website](https://deephbz.github.io/rarebit)**
|
|
6
|
+
|
|
7
|
+
## Watch the demo
|
|
8
|
+
|
|
9
|
+
[](https://github.com/deephbz/rarebit/releases/download/v0.2.0/rarebit-promo.mp4)
|
|
10
|
+
|
|
11
|
+
[Play the video inline in the release notes](https://github.com/deephbz/rarebit/releases/tag/v0.2.0#watch-the-demo)
|
|
12
|
+
· [Download the MP4](https://github.com/deephbz/rarebit/releases/download/v0.2.0/rarebit-promo.mp4)
|
|
13
|
+
|
|
14
|
+
Rarebit helps you catch up on a long Pi session without rereading its tool
|
|
15
|
+
traffic. It selects original messages from the active branch so you can read the
|
|
16
|
+
conversation, ask an agent to use it, or start a focused new Session. The
|
|
17
|
+
original Pi Session stays intact.
|
|
25
18
|
|
|
26
|
-
|
|
19
|
+
Rarebit is public alpha software. Its CLI output, exports, sidecar protocol, and
|
|
20
|
+
visual language can change.
|
|
27
21
|
|
|
28
|
-
|
|
22
|
+
## Start here
|
|
23
|
+
|
|
24
|
+
Three outcomes cover the useful path:
|
|
25
|
+
|
|
26
|
+
- **Catch up** — read selected conversational prose from the active branch.
|
|
27
|
+
- **Recall** — let an agent read that same selection for one request.
|
|
28
|
+
- **Fork** — start a fresh native Pi Session from a bounded newest suffix.
|
|
29
|
+
|
|
30
|
+
Install Rarebit and make the first deterministic, zero-model extraction:
|
|
29
31
|
|
|
30
32
|
```sh
|
|
31
|
-
|
|
32
|
-
pi
|
|
33
|
+
# In a shell, install the extension in Pi, then restart Pi to load it.
|
|
34
|
+
pi install npm:@hypercarrier/rarebit@0.2.0
|
|
35
|
+
|
|
36
|
+
# Install the CLI in the Node project where you will run it.
|
|
37
|
+
npm install @hypercarrier/rarebit@0.2.0
|
|
38
|
+
npm exec -- rarebit extract \
|
|
39
|
+
--session /absolute/path/to/session.jsonl --json > selected-prose.json
|
|
33
40
|
```
|
|
34
41
|
|
|
35
|
-
|
|
42
|
+
Replace the example path with an exact Pi Session JSONL path or supported Session
|
|
43
|
+
identifier. Pi normally stores Session JSONL below `~/.pi/agent/sessions/`.
|
|
44
|
+
Open `selected-prose.json` to catch up on the conversation. Then
|
|
45
|
+
choose Recall or Fork when you need an agent request or a fresh Session.
|
|
36
46
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
47
|
+
Summary and Title are optional model-derived projections. Recap only displays
|
|
48
|
+
an existing Summary in the Pi TUI.
|
|
49
|
+
|
|
50
|
+
## The product in one view
|
|
51
|
+
|
|
52
|
+
```text
|
|
53
|
+
long Pi Session
|
|
54
|
+
└─ Distill: selected active-branch prose
|
|
55
|
+
├─ Catch up: read the conversation
|
|
56
|
+
├─ Recall: let an agent use the selection for one request
|
|
57
|
+
├─ Fork: start a new native Pi Session from a bounded suffix
|
|
58
|
+
└─ Summary / Title: optional model-derived projections
|
|
59
|
+
└─ Recap: show an existing Summary in the Pi TUI
|
|
40
60
|
```
|
|
41
61
|
|
|
42
|
-
|
|
43
|
-
Do not install or bundle a second Pi core. Pi packages execute with your user
|
|
44
|
-
permissions, so review source before installation.
|
|
62
|
+
### 1. Catch up and distill
|
|
45
63
|
|
|
46
|
-
|
|
47
|
-
with npm:
|
|
64
|
+
Rarebit selects these occurrences from one exact active branch:
|
|
48
65
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
66
|
+
- readable user messages;
|
|
67
|
+
- assistant prose at a continuation boundary;
|
|
68
|
+
- assistant prose at a normal stop boundary.
|
|
69
|
+
|
|
70
|
+
It excludes tool-call inputs, tool results, hidden reasoning, and transport
|
|
71
|
+
records. Selection is deterministic. It is not model summarization. Each
|
|
72
|
+
selected occurrence keeps its source entry, branch position, role, outcome,
|
|
73
|
+
timestamp when available, and lineage.
|
|
74
|
+
|
|
75
|
+
### 2. Recall for the agent
|
|
76
|
+
|
|
77
|
+
In Pi, run:
|
|
78
|
+
|
|
79
|
+
```text
|
|
80
|
+
/rarebit recall What decisions and open questions should guide the next turn?
|
|
52
81
|
```
|
|
53
82
|
|
|
54
|
-
|
|
83
|
+
Recall writes a private conversation view and a detailed lineage view, then
|
|
84
|
+
sends one user-message envelope with your request and both file references. The
|
|
85
|
+
agent reads those referenced files through its configured model provider. The
|
|
86
|
+
files are private on local disk, but Rarebit makes no provider-privacy claim;
|
|
87
|
+
apply your provider's policy. An idle Pi starts one turn. A busy Pi queues one
|
|
88
|
+
steering message. Recall does not create a durable Recall record or a second
|
|
89
|
+
follow-up message.
|
|
55
90
|
|
|
56
|
-
|
|
57
|
-
|
|
91
|
+
For agent workflows outside the Pi TUI, use the CLI's `extract` operation. It
|
|
92
|
+
is the CLI catch-up interface; there is no CLI `recall` command:
|
|
58
93
|
|
|
59
94
|
```sh
|
|
60
|
-
npm exec -- rarebit
|
|
61
|
-
|
|
95
|
+
npm exec -- rarebit extract \
|
|
96
|
+
--session /absolute/path/to/session.jsonl --json > selected-prose.json
|
|
62
97
|
```
|
|
63
98
|
|
|
64
|
-
|
|
65
|
-
|
|
99
|
+
Treat that output as sensitive. It contains selected raw prose.
|
|
100
|
+
|
|
101
|
+
### 3. Fork as a distilled native fork
|
|
66
102
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
use zero usage, and carry machine-only lineage. The generated opening message
|
|
72
|
-
records source ID/path/leaf, target directory, coverage, and the read-only PiQ
|
|
73
|
-
recovery command. Legacy source entries retain `(sessionId, sourceOrder)` when
|
|
74
|
-
native entry IDs are absent; Rarebit does not migrate those sources.
|
|
103
|
+
Fork creates a new native Pi Session from the newest contiguous suffix of the
|
|
104
|
+
selected active-branch prose. It does not summarize, deduplicate, or modify the
|
|
105
|
+
source. It does not start a model turn and does not transfer mutable Team, Task,
|
|
106
|
+
subscription, or extension state.
|
|
75
107
|
|
|
76
|
-
|
|
108
|
+
In Pi:
|
|
109
|
+
|
|
110
|
+
```text
|
|
111
|
+
/rarebit fork
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
From a shell, use the exact source Session path or ID:
|
|
77
115
|
|
|
78
116
|
```sh
|
|
79
|
-
rarebit fork /absolute/
|
|
80
|
-
rarebit fork /absolute/
|
|
117
|
+
npm exec -- rarebit fork /absolute/path/to/session.jsonl
|
|
118
|
+
npm exec -- rarebit fork /absolute/path/to/session.jsonl \
|
|
119
|
+
--max-token-length 64000 --no-launch --json
|
|
81
120
|
```
|
|
82
121
|
|
|
83
|
-
The
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
the source.
|
|
122
|
+
The default import budget is 64,000 estimated tokens. Fork keeps whole
|
|
123
|
+
occurrences in branch order. If the newest occurrence cannot fit, it refuses
|
|
124
|
+
with an actionable error. The new Session contains machine-readable source
|
|
125
|
+
lineage and a recovery route. It does not promise complete context transfer.
|
|
88
126
|
|
|
89
|
-
|
|
127
|
+
Use `piq` to inspect source evidence that the bounded fork omitted:
|
|
90
128
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
129
|
+
```sh
|
|
130
|
+
npm exec -- piq entries --session /absolute/path/to/session.jsonl
|
|
131
|
+
```
|
|
94
132
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
133
|
+
PiQ is read-only JSONL output for `jq`. It does not classify Rarebits, mutate a
|
|
134
|
+
Session, invoke a model, or migrate legacy entries.
|
|
135
|
+
|
|
136
|
+
### 4. Summary, Title, and Recap
|
|
137
|
+
|
|
138
|
+
Summary and Title are optional derivations over the selected evidence. Recap is
|
|
139
|
+
a presentation of an existing Summary, not a derivation.
|
|
140
|
+
|
|
141
|
+
- **Summary** is a lossy, model-derived Session assessment. It can describe
|
|
142
|
+
what appears finished or needs attention in the selected prose. It is not
|
|
143
|
+
proof of completed work.
|
|
144
|
+
- **Title** is a mutable label proposal derived from a suitable user message.
|
|
145
|
+
- **Recap** presents the current Summary in the Pi TUI. It reads an existing
|
|
146
|
+
receipt and does not generate a Summary.
|
|
147
|
+
|
|
148
|
+
Use the Pi commands for a derivation or presentation:
|
|
149
|
+
|
|
150
|
+
```text
|
|
151
|
+
/rarebit summarize
|
|
152
|
+
/rarebit title
|
|
153
|
+
/rarebit recap
|
|
154
|
+
/rarebit got-it
|
|
104
155
|
```
|
|
105
156
|
|
|
106
|
-
|
|
157
|
+
The CLI exposes the same model operations for an exact Session:
|
|
107
158
|
|
|
108
159
|
```sh
|
|
109
|
-
npm exec -- rarebit summarize
|
|
110
|
-
|
|
160
|
+
npm exec -- rarebit summarize \
|
|
161
|
+
--session /absolute/path/to/session.jsonl --json --force
|
|
162
|
+
npm exec -- rarebit title \
|
|
163
|
+
--session /absolute/path/to/session.jsonl --json
|
|
111
164
|
```
|
|
112
165
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
at persisted direct-input or settled-agent boundaries and only when its policy
|
|
117
|
-
permits it.
|
|
166
|
+
Summary and Title need a configured model. Query, extract, and PiQ inspection
|
|
167
|
+
do not need a model. Fork creation needs an installed Pi peer and a resolvable
|
|
168
|
+
target model context, but it does not invoke that model or start a turn.
|
|
118
169
|
|
|
119
|
-
##
|
|
170
|
+
## Continue from the first result
|
|
120
171
|
|
|
121
|
-
|
|
122
|
-
|
|
172
|
+
1. Install the pinned npm package in Pi and restart Pi. For a local checkout,
|
|
173
|
+
use `pi install /absolute/path/to/rarebit`.
|
|
174
|
+
2. Read or automate against `selected-prose.json`. The deterministic path works
|
|
175
|
+
without a model.
|
|
176
|
+
3. Run `/rarebit recall <request>` when the agent should read selected earlier
|
|
177
|
+
conversation for one request.
|
|
178
|
+
4. Use `/rarebit fork` when a bounded, fresh Session is more useful than
|
|
179
|
+
continuing the original one.
|
|
180
|
+
5. Add model configuration only when you need Summary or Title.
|
|
123
181
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
182
|
+
The package uses Pi's bundled `@earendil-works/pi-ai` peer. Do not install or
|
|
183
|
+
bundle a second Pi core. Pi packages run with your user permissions. Review
|
|
184
|
+
source before installation. Use `npm install @hypercarrier/rarebit@0.2.0` and
|
|
185
|
+
`npm exec -- rarebit --help` when you use the CLI from a normal Node project.
|
|
128
186
|
|
|
129
|
-
|
|
130
|
-
leases live below `~/.pi/agent/rarebit/jobs-v4/`. These directories use mode
|
|
131
|
-
0700 and their files use mode 0600. Receipts retain compact metadata but no
|
|
132
|
-
selected prose, prompt, provider response body, headers, or credentials. They
|
|
133
|
-
remain until you remove them. Session JSONL retention is controlled by Pi.
|
|
187
|
+
## Scope and source
|
|
134
188
|
|
|
135
|
-
|
|
189
|
+
Native Pi Session JSONL remains the evidence authority. Rarebit does not own
|
|
190
|
+
Task, Project, runtime, priority, attention, or delivery state. A Summary is a
|
|
191
|
+
lossy Session assessment, not proof of completed Task or Project work. A Title
|
|
192
|
+
is a label proposal, and Recap only presents the current Summary.
|
|
136
193
|
|
|
137
|
-
|
|
138
|
-
branch selection to two private files: a conversation view and detailed
|
|
139
|
-
lineage evidence. It then sends one atomic, human-readable Markdown user
|
|
140
|
-
message containing your exact request and absolute pointers to both files.
|
|
194
|
+
## Configure optional derivations
|
|
141
195
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
196
|
+
Copy the example from
|
|
197
|
+
[`docs/examples/rarebit.settings.json`](docs/examples/rarebit.settings.json)
|
|
198
|
+
into the `rarebit` object in global Pi settings
|
|
199
|
+
(`~/.pi/agent/settings.json`, or `$PI_CODING_AGENT_DIR/settings.json` when set)
|
|
200
|
+
or a trusted Project's `.pi/settings.json`. Preserve other settings.
|
|
145
201
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
202
|
+
```json
|
|
203
|
+
{
|
|
204
|
+
"rarebit": {
|
|
205
|
+
"model": "provider/model",
|
|
206
|
+
"min_total_length": 80000,
|
|
207
|
+
"max_rarebit_ratio": 0.4,
|
|
208
|
+
"auto_title": true,
|
|
209
|
+
"max_input_tokens": 64000,
|
|
210
|
+
"summary_prompt": "State when evidence is uncertain, confusing, contradictory, or importantly missing.",
|
|
211
|
+
"diagnostics": {
|
|
212
|
+
"summary_triggered": false,
|
|
213
|
+
"summary_updated": false
|
|
214
|
+
},
|
|
215
|
+
"recap": {
|
|
216
|
+
"enabled": true,
|
|
217
|
+
"delay_ms": 60000,
|
|
218
|
+
"timezone": "host"
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
Set `model` to a model available through your authenticated provider. Rarebit
|
|
225
|
+
uses this model for Summary and Title; it does not inherit Pi's interactive
|
|
226
|
+
`defaultModel`.
|
|
227
|
+
|
|
228
|
+
Use `/rarebit settings` to edit the dedicated namespace. The editor supports
|
|
229
|
+
global settings and a trusted Project override. Settings apply to future
|
|
230
|
+
operations. The default Summary prompt requests 1–2 sentences and at most 300
|
|
231
|
+
characters including spaces; this is model guidance, not an enforced truncation.
|
|
232
|
+
Existing custom prompts keep their own length guidance. The `summary_prompt` value changes Summary format and length, but
|
|
233
|
+
Rarebit still owns evidence handling and the structured status contract.
|
|
234
|
+
|
|
235
|
+
Automatic Summary work runs only at eligible persisted direct-input or settled-
|
|
236
|
+
agent boundaries. It also requires the configured minimum estimated Session
|
|
237
|
+
length and maximum selected-prose ratio. A Pi Session start does not trigger
|
|
238
|
+
synthesis. Explicit `/rarebit summarize` or `rarebit summarize --force` remains
|
|
239
|
+
available.
|
|
240
|
+
|
|
241
|
+
After successful materialization, Recap can offer the current Summary in the Pi
|
|
242
|
+
TUI after one minute by default. On Pi with `registerEntryRenderer` (tested on
|
|
243
|
+
0.84.2), it appears in the scrollable transcript with the same muted border and
|
|
244
|
+
prose styling, and survives resume. Older Pi versions retain the pinned widget
|
|
245
|
+
fallback, which clears at input/turn/Session boundaries.
|
|
246
|
+
|
|
247
|
+
Press **Ctrl+Alt+G** or run `/rarebit got-it` to mark the latest displayed Recap
|
|
248
|
+
in the active branch as read. Its inline header affordance changes to `✓ got it`.
|
|
249
|
+
Native Session JSONL stores a read marker for the Recap receipt and covered
|
|
250
|
+
evidence cut. A request-prefix Recap ends at its receipt cut, before later
|
|
251
|
+
assistant prose. New messages remain unread. The next Summary includes the read
|
|
252
|
+
boundary and emphasizes later updates while still checking earlier unresolved
|
|
253
|
+
requests. Reading a Recap does not approve or complete work, and does not trigger
|
|
254
|
+
a model call. The marker is branch-local and survives resume. The read marker
|
|
255
|
+
is unavailable with the legacy widget fallback.
|
|
256
|
+
|
|
257
|
+
A manual `/rarebit summarize` reports when the Summary is current, already
|
|
258
|
+
current or in flight, generated but no longer current, or failed. These result
|
|
259
|
+
messages do not enable automatic Summary notices.
|
|
260
|
+
|
|
261
|
+
Mouse activation is not supported yet: Pi 0.84.2 consumes fullscreen mouse
|
|
262
|
+
input before extension listeners, so the affordance is a keyboard action.
|
|
263
|
+
Set `rarebit.recap.enabled` to `false`, change `delay_ms`, or set
|
|
264
|
+
`timezone` to `host` or an IANA zone such as `Asia/Hong_Kong`.
|
|
265
|
+
|
|
266
|
+
## Privacy and local data
|
|
267
|
+
|
|
268
|
+
- Rarebit reads native Pi Session JSONL locally. Fork writes a new target
|
|
269
|
+
Session but never modifies the source Session.
|
|
270
|
+
- `query` returns metadata and selected occurrence identifiers. `extract`
|
|
271
|
+
returns selected raw prose on demand.
|
|
272
|
+
- Scrollable Recaps and read markers are stored as native custom Session entries.
|
|
273
|
+
They do not enter the main agent model context. Read-boundary metadata enters
|
|
274
|
+
subsequent Rarebit Summary requests.
|
|
275
|
+
- Summary and Title send selected prose to the provider and model you
|
|
276
|
+
configure. If the input exceeds `max_input_tokens`, Rarebit sends a newest
|
|
277
|
+
suffix with an explicit omission marker and coverage record.
|
|
278
|
+
- Rarebit does not send tool inputs, tool results, hidden reasoning, provider
|
|
279
|
+
credentials, or HTTP headers as Rarebit content.
|
|
280
|
+
- Derived receipts live below
|
|
281
|
+
`~/.pi/agent/rarebit/materializations-v4/`. Job leases live below
|
|
282
|
+
`~/.pi/agent/rarebit/jobs-v4/`. These directories use mode `0700`; their
|
|
283
|
+
files use mode `0600`.
|
|
284
|
+
- Receipts retain compact metadata, not selected prose, prompts, provider
|
|
285
|
+
response bodies, headers, or credentials. Receipts remain until you remove
|
|
286
|
+
them.
|
|
287
|
+
- Recall files are private OS-temporary JSON files. They contain selected
|
|
288
|
+
content and lineage and remain until you delete them after the turn no longer
|
|
289
|
+
needs them. The persisted Pi user message and both files are sensitive.
|
|
290
|
+
|
|
291
|
+
Pi controls Session JSONL retention. Do not put Session prose, credentials,
|
|
292
|
+
Recall files, or private paths in public issues.
|
|
150
293
|
|
|
151
294
|
## Update, uninstall, and rollback
|
|
152
295
|
|
|
153
|
-
Pin
|
|
296
|
+
Pin a version when you need reproducible installs:
|
|
154
297
|
|
|
155
298
|
```sh
|
|
156
|
-
pi install npm:@hypercarrier/rarebit@0.
|
|
299
|
+
pi install npm:@hypercarrier/rarebit@0.2.0
|
|
157
300
|
pi remove npm:@hypercarrier/rarebit
|
|
158
301
|
```
|
|
159
302
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
303
|
+
A versioned npm install moves an existing Rarebit npm source to that pin. Pi
|
|
304
|
+
skips versioned npm sources during package updates. Restart Pi after an install
|
|
305
|
+
to load new extension code.
|
|
306
|
+
|
|
307
|
+
To roll back, reinstall a known version:
|
|
308
|
+
|
|
309
|
+
```sh
|
|
310
|
+
pi install npm:@hypercarrier/rarebit@<version>
|
|
311
|
+
```
|
|
164
312
|
|
|
165
|
-
To roll back, reinstall a known version with `pi install npm:@hypercarrier/rarebit@<version>`.
|
|
166
313
|
Removal stops package loading. It does not alter Pi Session JSONL or delete
|
|
167
|
-
Rarebit sidecars, job leases, or Recall
|
|
168
|
-
|
|
314
|
+
Rarebit sidecars, job leases, or Recall temporary files. Review retained local
|
|
315
|
+
data before removing it.
|
|
316
|
+
|
|
317
|
+
If you need source evidence after a fork or a bounded extraction, use the
|
|
318
|
+
read-only PiQ command:
|
|
319
|
+
|
|
320
|
+
```sh
|
|
321
|
+
npm exec -- piq entries --session /absolute/path/to/session.jsonl
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
For sidecar locks, leases, and recovery details, see [`RUNBOOK.md`](RUNBOOK.md).
|
|
169
325
|
|
|
170
326
|
## Compatibility and support
|
|
171
327
|
|
|
172
|
-
|
|
173
|
-
|
|
328
|
+
Rarebit supports Node 22+ and Pi 0.83.0 or later. Its Pi AI peer has no upper
|
|
329
|
+
bound. The release gate runs Recall against Pi 0.83.0 and Pi 0.84.2. Rarebit
|
|
174
330
|
works as a deterministic CLI without a model. Summary, Title, and the Pi
|
|
175
331
|
extension require a compatible Pi installation and configured provider
|
|
176
332
|
credentials.
|
|
177
333
|
|
|
178
|
-
Report security issues privately as described in [SECURITY.md](SECURITY.md).
|
|
179
|
-
Use https://github.com/deephbz/rarebit/issues for normal
|
|
180
|
-
Session prose, credentials, or Recall files in public
|
|
334
|
+
Report security issues privately as described in [`SECURITY.md`](SECURITY.md).
|
|
335
|
+
Use [GitHub Issues](https://github.com/deephbz/rarebit/issues) for normal
|
|
336
|
+
support. Include no Session prose, credentials, or Recall files in public
|
|
337
|
+
reports.
|
|
338
|
+
|
|
339
|
+
## Release and source history
|
|
340
|
+
|
|
341
|
+
Rarebit is released from an immutable version tag by
|
|
342
|
+
[`.github/workflows/publish.yml`](.github/workflows/publish.yml). The workflow
|
|
343
|
+
runs package gates, verifies one packed artifact, scans that artifact, and
|
|
344
|
+
publishes it with npm provenance.
|
|
345
|
+
|
|
346
|
+
The old `alpha.1`, `alpha.2`, and `alpha.3` tag graphs remain public and are not
|
|
347
|
+
privacy-clean. Existing package versions, tags, and releases remain immutable.
|
|
348
|
+
The source-only candidate derivation and vendored-scanner binding is
|
|
349
|
+
[`release/privacy-lineage.v1.json`](release/privacy-lineage.v1.json). It is
|
|
350
|
+
excluded from npm and does not claim publication completion.
|
|
351
|
+
|
|
352
|
+
More detail:
|
|
181
353
|
|
|
182
|
-
|
|
183
|
-
|
|
354
|
+
- [Visual language](VISUAL-LANGUAGE.md) defines evidence marks and Summary
|
|
355
|
+
presentation.
|
|
356
|
+
- [Runbook](RUNBOOK.md) covers operator recovery and sidecars.
|
|
357
|
+
- [Rarebit website](https://deephbz.github.io/rarebit) introduces the product.
|
package/RUNBOOK.md
CHANGED
|
@@ -1,20 +1,27 @@
|
|
|
1
1
|
# Rarebit runbook
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
[CHANGELOG.md](CHANGELOG.md)
|
|
3
|
+
Rarebit release automation lives in
|
|
4
|
+
[`.github/workflows/publish.yml`](.github/workflows/publish.yml). It validates
|
|
5
|
+
an immutable version tag, runs the package gates, verifies one packed artifact,
|
|
6
|
+
and publishes that artifact with npm provenance. See [CHANGELOG.md](CHANGELOG.md)
|
|
7
|
+
for product changes.
|
|
7
8
|
|
|
8
9
|
Set `rarebit.model` in global Pi settings or in a trusted Project's
|
|
9
10
|
`.pi/settings.json`. It must be `provider/model` or an object with `provider`
|
|
10
11
|
and `id`. Rarebit fails closed when it is missing or invalid. It does not use
|
|
11
12
|
Pi's interactive `defaultModel`.
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
Use `/rarebit settings` to edit the dedicated namespace. `summary_prompt`
|
|
15
|
+
changes the Summary text's format and length; the evidence and structured
|
|
16
|
+
status rules remain fixed. Remove the override to restore the built-in prompt.
|
|
17
|
+
If a response exceeds the 8,000-character safety limit, request a shorter
|
|
18
|
+
Summary in the prompt and run `/rarebit summarize` again. Oversized output
|
|
19
|
+
fails explicitly instead of producing a cut-off Recap.
|
|
20
|
+
|
|
21
|
+
Install or move this package to an exact version with
|
|
22
|
+
`pi install npm:@hypercarrier/rarebit@<version>`. Pi treats versioned npm
|
|
23
|
+
sources as pinned, so package update commands skip it. Run `pi remove
|
|
24
|
+
npm:@hypercarrier/rarebit` to
|
|
18
25
|
stop loading it. These commands do not modify native Sessions or remove Rarebit
|
|
19
26
|
retained data.
|
|
20
27
|
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"rarebit": {
|
|
3
|
+
"model": "openai-codex/gpt-5.6-luna",
|
|
4
|
+
"min_total_length": 80000,
|
|
5
|
+
"max_rarebit_ratio": 0.4,
|
|
6
|
+
"auto_title": true,
|
|
7
|
+
"max_input_tokens": 64000,
|
|
8
|
+
"summary_prompt": "The summary is free-form prose. State when evidence is uncertain, confusing, contradictory, or importantly missing instead of inventing a coherent account.",
|
|
9
|
+
"diagnostics": {
|
|
10
|
+
"summary_triggered": false,
|
|
11
|
+
"summary_updated": false
|
|
12
|
+
},
|
|
13
|
+
"recap": {
|
|
14
|
+
"enabled": true,
|
|
15
|
+
"delay_ms": 60000,
|
|
16
|
+
"timezone": "host"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hypercarrier/rarebit",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Sparse, provenance-bearing conversational evidence recovery for Pi sessions.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "HyperCarrier contributors",
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
},
|
|
30
30
|
"scripts": {
|
|
31
31
|
"test": "node --test test/*.test.mjs",
|
|
32
|
+
"test:e2e:tui": "node scripts/e2e-v020-pi.mjs",
|
|
32
33
|
"test:e2e:summary-cache": "node scripts/e2e-summary-cache.mjs",
|
|
33
34
|
"test:e2e:recall": "node scripts/e2e-recall-pi0842.mjs",
|
|
34
35
|
"test:e2e:recall:pi083": "node scripts/e2e-recall-pi083.mjs",
|
|
@@ -36,7 +37,8 @@
|
|
|
36
37
|
},
|
|
37
38
|
"peerDependencies": {
|
|
38
39
|
"@earendil-works/pi-ai": ">=0.83.0",
|
|
39
|
-
"@earendil-works/pi-coding-agent": ">=0.83.0"
|
|
40
|
+
"@earendil-works/pi-coding-agent": ">=0.83.0",
|
|
41
|
+
"@earendil-works/pi-tui": ">=0.83.0"
|
|
40
42
|
},
|
|
41
43
|
"peerDependenciesMeta": {
|
|
42
44
|
"@earendil-works/pi-ai": {
|
|
@@ -44,10 +46,14 @@
|
|
|
44
46
|
},
|
|
45
47
|
"@earendil-works/pi-coding-agent": {
|
|
46
48
|
"optional": true
|
|
49
|
+
},
|
|
50
|
+
"@earendil-works/pi-tui": {
|
|
51
|
+
"optional": true
|
|
47
52
|
}
|
|
48
53
|
},
|
|
49
54
|
"devDependencies": {
|
|
50
55
|
"@earendil-works/pi-coding-agent": "0.84.2",
|
|
56
|
+
"@earendil-works/pi-tui": "0.84.2",
|
|
51
57
|
"ajv": "^6.15.0",
|
|
52
58
|
"typescript": "^5.9.3"
|
|
53
59
|
},
|
|
@@ -104,6 +110,7 @@
|
|
|
104
110
|
"bin/piq.mjs",
|
|
105
111
|
"src",
|
|
106
112
|
"schemas",
|
|
113
|
+
"docs/examples/rarebit.settings.json",
|
|
107
114
|
"scripts",
|
|
108
115
|
"test",
|
|
109
116
|
"README.md",
|