bb-cc-lite 0.1.9 → 0.1.11
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 +78 -9
- package/dist/cli.js +42 -14
- package/dist/cli.js.map +1 -1
- package/dist/decision-presentation.d.ts +2 -1
- package/dist/decision-presentation.js +3 -2
- package/dist/decision-presentation.js.map +1 -1
- package/dist/doctor.js +3 -1
- package/dist/doctor.js.map +1 -1
- package/dist/event-store-persistence.d.ts +8 -0
- package/dist/event-store-persistence.js +132 -5
- package/dist/event-store-persistence.js.map +1 -1
- package/dist/event-store-queries.d.ts +7 -0
- package/dist/event-store-queries.js +52 -0
- package/dist/event-store-queries.js.map +1 -1
- package/dist/failure-episodes.d.ts +6 -2
- package/dist/failure-episodes.js +8 -8
- package/dist/failure-episodes.js.map +1 -1
- package/dist/feedback-outcomes.d.ts +9 -0
- package/dist/feedback-outcomes.js +190 -0
- package/dist/feedback-outcomes.js.map +1 -0
- package/dist/feedback-policy.d.ts +43 -0
- package/dist/feedback-policy.js +245 -0
- package/dist/feedback-policy.js.map +1 -0
- package/dist/hook-control.d.ts +11 -0
- package/dist/hook-control.js +145 -0
- package/dist/hook-control.js.map +1 -0
- package/dist/hook-payload.d.ts +4 -1
- package/dist/hook-payload.js +7 -3
- package/dist/hook-payload.js.map +1 -1
- package/dist/hook-response.d.ts +3 -0
- package/dist/hook-response.js +27 -0
- package/dist/hook-response.js.map +1 -0
- package/dist/hook-summary.d.ts +7 -0
- package/dist/hook-summary.js +7 -0
- package/dist/hook-summary.js.map +1 -1
- package/dist/memory-lessons.d.ts +54 -0
- package/dist/memory-lessons.js +211 -0
- package/dist/memory-lessons.js.map +1 -0
- package/dist/project-config.d.ts +6 -0
- package/dist/project-config.js +93 -0
- package/dist/project-config.js.map +1 -0
- package/dist/renderer.js +7 -5
- package/dist/renderer.js.map +1 -1
- package/dist/settings.d.ts +3 -0
- package/dist/settings.js +56 -15
- package/dist/settings.js.map +1 -1
- package/dist/statusline.js +17 -3
- package/dist/statusline.js.map +1 -1
- package/dist/store.d.ts +13 -1
- package/dist/store.js +76 -20
- package/dist/store.js.map +1 -1
- package/dist/tool-metadata.d.ts +2 -0
- package/dist/tool-metadata.js +20 -2
- package/dist/tool-metadata.js.map +1 -1
- package/dist/transcript.d.ts +7 -2
- package/dist/transcript.js +7 -7
- package/dist/transcript.js.map +1 -1
- package/dist/types.d.ts +23 -1
- package/dist/why.d.ts +15 -2
- package/dist/why.js +130 -5
- package/dist/why.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,10 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
Claude Code can look busy while it is doing the wrong thing: retrying the same broken test, editing without checking, filling context, or spending money on a stuck loop.
|
|
6
6
|
|
|
7
|
-
`bb-cc-lite`
|
|
7
|
+
`bb-cc-lite` is a small local Claude Code session supervisor. It adds a status line that answers one question:
|
|
8
8
|
|
|
9
9
|
> Should I let this Claude Code session keep going?
|
|
10
10
|
|
|
11
|
+
By default, it also gives Claude a short nudge when the pattern is clear. If the same test keeps failing without a fix, Claude can be told to inspect the first failure before retrying again. If Claude follows that feedback and recovers, `why` can show the loop. If you turn on guard mode, bb can deny the obvious repeated retry before it runs.
|
|
12
|
+
|
|
11
13
|

|
|
12
14
|
|
|
13
15
|
## Requirements
|
|
@@ -18,12 +20,16 @@ Claude Code can look busy while it is doing the wrong thing: retrying the same b
|
|
|
18
20
|
## Install
|
|
19
21
|
|
|
20
22
|
```bash
|
|
21
|
-
npx --yes bb-cc-lite install --scope local
|
|
23
|
+
npx --yes bb-cc-lite install --scope local
|
|
22
24
|
```
|
|
23
25
|
|
|
24
26
|
Restart Claude Code in the project. The status line appears at the bottom.
|
|
25
27
|
|
|
26
|
-
|
|
28
|
+
Default install uses coach mode. It keeps the status line for you and sends Claude short safe feedback when a risky loop is visible. Coach feedback can say things like: a validation check has failed repeatedly, inspect the failure pattern, make one targeted fix, then run one focused check.
|
|
29
|
+
|
|
30
|
+
Coach feedback does not include prompts, command text, tool output, file contents, raw paths, raw session ids, or raw MCP names.
|
|
31
|
+
|
|
32
|
+
Install preserves an existing Claude Code `statusLine` unless you pass `--replace`.
|
|
27
33
|
|
|
28
34
|
To uninstall:
|
|
29
35
|
|
|
@@ -35,13 +41,33 @@ Prefer a global install?
|
|
|
35
41
|
|
|
36
42
|
```bash
|
|
37
43
|
npm install -g bb-cc-lite
|
|
38
|
-
bb-cc-lite install --scope local
|
|
44
|
+
bb-cc-lite install --scope local
|
|
39
45
|
```
|
|
40
46
|
|
|
41
47
|
To replace an existing status line:
|
|
42
48
|
|
|
43
49
|
```bash
|
|
44
|
-
npx --yes bb-cc-lite install --scope local --replace
|
|
50
|
+
npx --yes bb-cc-lite install --scope local --replace
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
To observe only, without sending feedback to Claude:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
npx --yes bb-cc-lite install --scope local --observe-only
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
To enable stricter guard behavior:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
npx --yes bb-cc-lite install --scope local --guard
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Guard mode includes coach feedback. It may deny a high-confidence repeated validation retry with a safe reason. It does not broadly block normal reads or edits.
|
|
66
|
+
|
|
67
|
+
To disable baseline learning and lesson memory:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
npx --yes bb-cc-lite install --scope local --no-learn
|
|
45
71
|
```
|
|
46
72
|
|
|
47
73
|
## What It Catches
|
|
@@ -53,23 +79,46 @@ npx --yes bb-cc-lite install --scope local --replace --hooks
|
|
|
53
79
|
- Cost and time budget signals that make a stuck session easier to spot.
|
|
54
80
|
- Project baseline patterns, when there is enough local aggregate history.
|
|
55
81
|
|
|
82
|
+
## How It Helps Claude
|
|
83
|
+
|
|
84
|
+
In observe-only mode, bb records the pattern and updates the status line, but Claude does not receive feedback.
|
|
85
|
+
|
|
86
|
+
In coach mode, bb can send Claude a short note during the session. Claude can then inspect the failure, make a targeted fix, run a focused check, or summarize why retrying is not useful.
|
|
87
|
+
|
|
88
|
+
In guard mode, bb can deny a high-confidence repeated validation retry. The retry does not run, and Claude sees a safe reason.
|
|
89
|
+
|
|
90
|
+
bb also records safe feedback outcomes. For example, if bb asks Claude to validate after an edit and Claude runs a passing test, `bb-cc-lite why` can show that the feedback was resolved.
|
|
91
|
+
|
|
56
92
|
## What It Shows
|
|
57
93
|
|
|
58
94
|
```text
|
|
59
95
|
bb: Healthy | ctx 42% | $0.18 | cache warm | continue normally
|
|
96
|
+
bb: Healthy | validation resolved | continue normally
|
|
97
|
+
bb: Healthy | read-only exploration | continue normally
|
|
60
98
|
bb: Careful | edits have not been checked yet | ask Claude to run the smallest relevant check
|
|
61
|
-
bb: Careful | 9 tool calls, no check or recovery seen | pause and ask Claude what changed
|
|
62
|
-
bb: Careful | session ran 1h plus 9 tool calls, no check or recovery seen | pause and ask Claude what changed before continuing
|
|
99
|
+
bb: Careful | 9 non-read tool calls, no check or recovery seen | pause and ask Claude what changed
|
|
100
|
+
bb: Careful | session ran 1h plus 9 non-read tool calls, no check or recovery seen | pause and ask Claude what changed before continuing
|
|
63
101
|
bb: Careful | same test failed twice without a fix | inspect first failure
|
|
64
102
|
bb: Careful | tests failed twice; usually passes after one targeted fix | inspect first failure
|
|
65
103
|
bb: Careful | estimated cost $2.25 | ask Claude to summarize progress before continuing
|
|
66
104
|
bb: Stop | why: same failure retried 3x without a fix | do: stop and inspect first failure
|
|
105
|
+
bb: Stop | why: same test retried after feedback | do: inspect first failure
|
|
67
106
|
bb: Stop | why: test loop rarely recovered after 3 failures | do: stop retrying and inspect first failure
|
|
68
107
|
bb: Stop | why: high cost plus repeated failures | do: stop and inspect first failure
|
|
69
108
|
```
|
|
70
109
|
|
|
71
110
|
`Healthy` means keep going. `Careful` means slow down and verify. `Stop` means take over before Claude burns more turns.
|
|
72
111
|
|
|
112
|
+
When available, `why` includes the recent bb loop:
|
|
113
|
+
|
|
114
|
+
```text
|
|
115
|
+
Recent bb loop:
|
|
116
|
+
1. Coach feedback: edits needed validation.
|
|
117
|
+
2. Claude ran tests.
|
|
118
|
+
3. Tests passed.
|
|
119
|
+
4. Outcome: resolved.
|
|
120
|
+
```
|
|
121
|
+
|
|
73
122
|
## Useful Commands
|
|
74
123
|
|
|
75
124
|
```bash
|
|
@@ -79,7 +128,7 @@ bb-cc-lite unlearn
|
|
|
79
128
|
bb-cc-lite uninstall --scope local
|
|
80
129
|
```
|
|
81
130
|
|
|
82
|
-
`why` explains the latest statusline decision. `doctor --baseline` shows safe aggregate baseline facts. `unlearn` clears learned personal
|
|
131
|
+
`why` explains the latest statusline decision and recent feedback outcomes when available. Interactive `why` output is lightly colored; set `NO_COLOR=1` or `BB_CC_LITE_COLOR=0` for plain text. `doctor --baseline` shows safe aggregate baseline facts. `unlearn` clears learned personal baselines, project baselines, and lesson memory. `uninstall` restores the previous Claude Code status line when a backup exists.
|
|
83
132
|
|
|
84
133
|
Budget guard thresholds can be changed with environment variables:
|
|
85
134
|
|
|
@@ -89,12 +138,32 @@ BB_CC_LITE_BUDGET_COST_DELTA_USD=0.25
|
|
|
89
138
|
BB_CC_LITE_BUDGET_DURATION_MINUTES=30
|
|
90
139
|
```
|
|
91
140
|
|
|
141
|
+
## Project-Specific Checks
|
|
142
|
+
|
|
143
|
+
bb already recognizes common checks such as `npm test`, `pytest`, `cargo test`, `go test`, `npm run lint`, and `npm run build`.
|
|
144
|
+
|
|
145
|
+
If your project uses custom validation commands, you can add an optional `.bb-cc-lite.json`:
|
|
146
|
+
|
|
147
|
+
```json
|
|
148
|
+
{
|
|
149
|
+
"validationCommands": {
|
|
150
|
+
"tests": ["make test"],
|
|
151
|
+
"lint": ["make lint"],
|
|
152
|
+
"build": ["make build"]
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
This file is not generated automatically. It is only needed when you want to teach bb what your project's test, lint, typecheck, or build commands look like. bb uses it for classification, but does not copy those raw commands into its event history.
|
|
158
|
+
|
|
92
159
|
## Privacy
|
|
93
160
|
|
|
94
161
|
Everything stays local. `bb-cc-lite` does not upload transcripts, prompts, tool output, shell output, file contents, API keys, raw commands, raw paths, raw Claude session ids, or raw MCP server or tool names.
|
|
95
162
|
|
|
96
|
-
It stores derived data only: counts, rates, percentiles, confidence labels, reason codes, cost/time/context numbers, weak pattern labels, hashed session keys, and hashed project keys.
|
|
163
|
+
It stores derived data only: counts, rates, percentiles, confidence labels, reason codes, feedback outcomes such as `resolved` or `ignored`, safe categories such as `tests`, cost/time/context numbers, weak pattern labels, hashed session keys, and hashed project keys.
|
|
97
164
|
|
|
98
165
|
Project baselines are stored under the bb app home, not inside the repo. They use only a hashed project key and safe summary data from that project. Sparse or corrupt project data falls back to the personal baseline or fixed rules.
|
|
99
166
|
|
|
167
|
+
Lesson memory is also stored under the bb app home by hashed project key. A lesson card contains only safe fields such as a reason code, safe category, confidence, counts, timestamps, and templated wording. Lesson cards decay and can be removed with `bb-cc-lite unlearn`.
|
|
168
|
+
|
|
100
169
|
LiteLLM is used only as public pricing data for cost estimates. `bb-cc-lite` does not run a proxy, gateway, dashboard, or message router.
|
package/dist/cli.js
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { buildPersonalBaseline, clearPersonalBaseline, formatDoctorChecks, runDoctor } from "./doctor.js";
|
|
3
3
|
import { runBaselineRefresh } from "./baseline-refresh.js";
|
|
4
|
-
import {
|
|
4
|
+
import { handleHook } from "./hook-control.js";
|
|
5
5
|
import { installStatusLine, uninstallStatusLine } from "./settings.js";
|
|
6
6
|
import { readStdin } from "./status-input.js";
|
|
7
7
|
import { createStatusLine } from "./statusline.js";
|
|
8
|
-
import {
|
|
9
|
-
import { formatWhy, getWhyDecision } from "./why.js";
|
|
8
|
+
import { formatWhy, formatWhyJson, getWhyContext, shouldColorWhy } from "./why.js";
|
|
10
9
|
async function main() {
|
|
11
10
|
const args = parseArgs(process.argv.slice(2));
|
|
12
11
|
switch (args.command) {
|
|
@@ -52,10 +51,13 @@ async function main() {
|
|
|
52
51
|
}
|
|
53
52
|
async function commandInstall(args) {
|
|
54
53
|
const shouldLearn = !args.flags["no-learn"];
|
|
54
|
+
const mode = installMode(args);
|
|
55
55
|
const result = await installStatusLine({
|
|
56
56
|
scope: scopeFlag(args),
|
|
57
57
|
replace: Boolean(args.flags.replace),
|
|
58
|
-
hooks:
|
|
58
|
+
hooks: true,
|
|
59
|
+
mode,
|
|
60
|
+
learn: shouldLearn,
|
|
59
61
|
projectDir: stringFlag(args, "project"),
|
|
60
62
|
homeDir: stringFlag(args, "home")
|
|
61
63
|
});
|
|
@@ -124,9 +126,13 @@ async function commandBaselineRefresh(args) {
|
|
|
124
126
|
async function commandHook(args) {
|
|
125
127
|
try {
|
|
126
128
|
const fallbackEventName = stringFlag(args, "bb-cc-lite-hook") || args.positionals.find((value) => value !== "--bb-cc-lite-hook");
|
|
127
|
-
const
|
|
128
|
-
|
|
129
|
-
|
|
129
|
+
const response = await handleHook(await readStdin(), {
|
|
130
|
+
fallbackEventName,
|
|
131
|
+
mode: hookMode(args),
|
|
132
|
+
learn: stringFlag(args, "bb-cc-lite-learn") !== "0"
|
|
133
|
+
});
|
|
134
|
+
if (response) {
|
|
135
|
+
process.stdout.write(`${JSON.stringify(response)}\n`);
|
|
130
136
|
}
|
|
131
137
|
}
|
|
132
138
|
catch {
|
|
@@ -134,16 +140,17 @@ async function commandHook(args) {
|
|
|
134
140
|
}
|
|
135
141
|
}
|
|
136
142
|
async function commandWhy(args) {
|
|
137
|
-
const
|
|
143
|
+
const context = await getWhyContext({ sessionId: stringFlag(args, "session") });
|
|
144
|
+
const decision = context.decision;
|
|
138
145
|
if (args.flags.json) {
|
|
139
|
-
console.log(JSON.stringify(decision
|
|
146
|
+
console.log(JSON.stringify(decision ? formatWhyJson(decision, context.feedbackOutcomes) : null, null, 2));
|
|
140
147
|
return;
|
|
141
148
|
}
|
|
142
149
|
if (!decision) {
|
|
143
150
|
console.log("No bb-cc-lite decision has been recorded yet. Run the statusline command from Claude Code first.");
|
|
144
151
|
return;
|
|
145
152
|
}
|
|
146
|
-
console.log(formatWhy(decision));
|
|
153
|
+
console.log(formatWhy(decision, { feedbackOutcomes: context.feedbackOutcomes, color: shouldColorWhy() }));
|
|
147
154
|
}
|
|
148
155
|
async function commandDoctor(args) {
|
|
149
156
|
const checks = await runDoctor({
|
|
@@ -195,6 +202,25 @@ function scopeFlag(args) {
|
|
|
195
202
|
}
|
|
196
203
|
throw new Error(`Invalid --scope ${scope}; expected local, project, or user`);
|
|
197
204
|
}
|
|
205
|
+
function installMode(args) {
|
|
206
|
+
if (args.flags.guard && args.flags["observe-only"]) {
|
|
207
|
+
throw new Error("--guard cannot be combined with --observe-only");
|
|
208
|
+
}
|
|
209
|
+
if (args.flags.guard) {
|
|
210
|
+
return "guard";
|
|
211
|
+
}
|
|
212
|
+
if (args.flags["observe-only"]) {
|
|
213
|
+
return "observe";
|
|
214
|
+
}
|
|
215
|
+
return "coach";
|
|
216
|
+
}
|
|
217
|
+
function hookMode(args) {
|
|
218
|
+
const mode = stringFlag(args, "bb-cc-lite-mode");
|
|
219
|
+
if (mode === "observe" || mode === "coach" || mode === "guard") {
|
|
220
|
+
return mode;
|
|
221
|
+
}
|
|
222
|
+
return "coach";
|
|
223
|
+
}
|
|
198
224
|
function stringFlag(args, name) {
|
|
199
225
|
const value = args.flags[name];
|
|
200
226
|
return typeof value === "string" ? value : undefined;
|
|
@@ -203,8 +229,8 @@ function printHelp() {
|
|
|
203
229
|
console.log(`bb-cc-lite
|
|
204
230
|
|
|
205
231
|
Usage:
|
|
206
|
-
bb-cc-lite install [--scope local|project|user] [--
|
|
207
|
-
[--no-learn]
|
|
232
|
+
bb-cc-lite install [--scope local|project|user] [--observe-only] [--guard]
|
|
233
|
+
[--replace] [--no-learn]
|
|
208
234
|
bb-cc-lite statusline
|
|
209
235
|
bb-cc-lite why [--session <id>] [--json]
|
|
210
236
|
bb-cc-lite doctor [--scope local|project|user] [--transcript <path>] [--refresh-pricing]
|
|
@@ -213,9 +239,11 @@ Usage:
|
|
|
213
239
|
bb-cc-lite uninstall [--scope local|project|user] [--force]
|
|
214
240
|
|
|
215
241
|
Learning:
|
|
216
|
-
install builds a small local baseline by default.
|
|
242
|
+
install enables coach mode and builds a small local baseline by default.
|
|
243
|
+
--observe-only keeps display and local telemetry without Claude-facing feedback.
|
|
244
|
+
--guard enables coach feedback plus strict repeated-validation retry denial.
|
|
217
245
|
install preserves an existing Claude statusLine unless --replace is passed.
|
|
218
|
-
--no-learn skips baseline creation.
|
|
246
|
+
--no-learn skips baseline creation and disables lesson memory.
|
|
219
247
|
doctor --baseline shows a safe aggregate summary, including recent and validation categories.
|
|
220
248
|
doctor --build-baseline refreshes the baseline.
|
|
221
249
|
doctor --replay-baseline evaluates aggregate holdout metrics from local JSONL history.
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,SAAS,EACV,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,5 +7,6 @@ export interface DecisionPresentation {
|
|
|
7
7
|
evidence: DecisionEvidence[];
|
|
8
8
|
impact: string;
|
|
9
9
|
action: string;
|
|
10
|
+
feedbackNote?: string;
|
|
10
11
|
}
|
|
11
|
-
export declare function toDecisionPresentation(decision: Decision): DecisionPresentation;
|
|
12
|
+
export declare function toDecisionPresentation(decision: Decision, feedbackNote?: string): DecisionPresentation;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export function toDecisionPresentation(decision) {
|
|
1
|
+
export function toDecisionPresentation(decision, feedbackNote) {
|
|
2
2
|
return {
|
|
3
3
|
state: decision.state,
|
|
4
4
|
diagnosis: decision.diagnosis,
|
|
@@ -6,7 +6,8 @@ export function toDecisionPresentation(decision) {
|
|
|
6
6
|
primaryEvidence: decision.primaryEvidence,
|
|
7
7
|
evidence: decision.evidence,
|
|
8
8
|
impact: decision.impact,
|
|
9
|
-
action: decision.action
|
|
9
|
+
action: decision.action,
|
|
10
|
+
feedbackNote
|
|
10
11
|
};
|
|
11
12
|
}
|
|
12
13
|
//# sourceMappingURL=decision-presentation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decision-presentation.js","sourceRoot":"","sources":["../src/decision-presentation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"decision-presentation.js","sourceRoot":"","sources":["../src/decision-presentation.ts"],"names":[],"mappings":"AAaA,MAAM,UAAU,sBAAsB,CAAC,QAAkB,EAAE,YAAqB;IAC9E,OAAO;QACL,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,eAAe,EAAE,QAAQ,CAAC,eAAe;QACzC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,YAAY;KACb,CAAC;AACJ,CAAC"}
|
package/dist/doctor.js
CHANGED
|
@@ -4,6 +4,7 @@ import { join } from "node:path";
|
|
|
4
4
|
import { clearAllBaselines, readBaseline, readBaselineForProject, summarizeBaseline } from "./baseline.js";
|
|
5
5
|
import { buildBaseline } from "./baseline-builder.js";
|
|
6
6
|
import { evaluateHistoricalReplay, formatHistoricalReplayMetrics } from "./historical-replay.js";
|
|
7
|
+
import { clearLessonMemory } from "./memory-lessons.js";
|
|
7
8
|
import { baselinePath, pricingCachePath } from "./paths.js";
|
|
8
9
|
import { refreshPricing } from "./pricing.js";
|
|
9
10
|
import { describeSettingsTarget, hasBbHooks, isBbStatusLine, readHooks, readStatusLine, resolveSettingsTarget } from "./settings.js";
|
|
@@ -189,9 +190,10 @@ export async function buildPersonalBaseline(options = {}) {
|
|
|
189
190
|
}
|
|
190
191
|
export async function clearPersonalBaseline(options = {}) {
|
|
191
192
|
await clearAllBaselines(options);
|
|
193
|
+
await clearLessonMemory(options);
|
|
192
194
|
return {
|
|
193
195
|
ok: true,
|
|
194
|
-
message: "cleared learned baselines"
|
|
196
|
+
message: "cleared learned baselines and lesson memory"
|
|
195
197
|
};
|
|
196
198
|
}
|
|
197
199
|
function formatBuiltBaselineMessage(value) {
|
package/dist/doctor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import type { EventStoreData } from "./types.js";
|
|
2
2
|
export declare const STORE_LIMIT = 100;
|
|
3
3
|
export declare const HOOK_STORE_LIMIT = 500;
|
|
4
|
+
export declare const FEEDBACK_OUTCOME_STORE_LIMIT = 500;
|
|
4
5
|
export declare function readStore(storePath?: string): Promise<EventStoreData>;
|
|
5
6
|
export declare function writeStore(store: EventStoreData, storePath: string): Promise<void>;
|
|
7
|
+
export declare function updateStore<T>(storePath: string, update: (store: EventStoreData) => {
|
|
8
|
+
store: EventStoreData;
|
|
9
|
+
result: T;
|
|
10
|
+
} | Promise<{
|
|
11
|
+
store: EventStoreData;
|
|
12
|
+
result: T;
|
|
13
|
+
}>): Promise<T>;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { chmod, mkdir, readFile, rename, writeFile } from "node:fs/promises";
|
|
1
|
+
import { chmod, mkdir, readFile, rename, rm, stat, writeFile } from "node:fs/promises";
|
|
2
2
|
import { dirname } from "node:path";
|
|
3
3
|
import { eventStorePath } from "./paths.js";
|
|
4
4
|
export const STORE_LIMIT = 100;
|
|
5
5
|
export const HOOK_STORE_LIMIT = 500;
|
|
6
|
+
export const FEEDBACK_OUTCOME_STORE_LIMIT = 500;
|
|
6
7
|
export async function readStore(storePath = eventStorePath()) {
|
|
7
8
|
try {
|
|
8
9
|
const parsed = JSON.parse(await readFile(storePath, "utf8"));
|
|
@@ -14,20 +15,37 @@ export async function readStore(storePath = eventStorePath()) {
|
|
|
14
15
|
: [],
|
|
15
16
|
hookEvents: Array.isArray(parsed.hookEvents)
|
|
16
17
|
? parsed.hookEvents.flatMap((event) => sanitizeStoredHookEvent(event) ?? []).slice(-HOOK_STORE_LIMIT)
|
|
18
|
+
: [],
|
|
19
|
+
feedbackOutcomes: Array.isArray(parsed.feedbackOutcomes)
|
|
20
|
+
? parsed.feedbackOutcomes
|
|
21
|
+
.flatMap((outcome) => sanitizeStoredFeedbackOutcome(outcome) ?? [])
|
|
22
|
+
.slice(-FEEDBACK_OUTCOME_STORE_LIMIT)
|
|
17
23
|
: []
|
|
18
24
|
};
|
|
19
25
|
}
|
|
20
26
|
catch {
|
|
21
|
-
return { version: 1, updatedAt: new Date(0).toISOString(), decisions: [], hookEvents: [] };
|
|
27
|
+
return { version: 1, updatedAt: new Date(0).toISOString(), decisions: [], hookEvents: [], feedbackOutcomes: [] };
|
|
22
28
|
}
|
|
23
29
|
}
|
|
24
30
|
export async function writeStore(store, storePath) {
|
|
25
31
|
await mkdir(dirname(storePath), { recursive: true, mode: 0o700 });
|
|
26
|
-
const tempPath = `${storePath}.${process.pid}.tmp`;
|
|
32
|
+
const tempPath = `${storePath}.${process.pid}.${Date.now()}.${Math.random().toString(16).slice(2)}.tmp`;
|
|
27
33
|
await writeFile(tempPath, `${JSON.stringify(store, null, 2)}\n`, { encoding: "utf8", mode: 0o600 });
|
|
28
34
|
await chmod(tempPath, 0o600);
|
|
29
35
|
await rename(tempPath, storePath);
|
|
30
36
|
}
|
|
37
|
+
export async function updateStore(storePath, update) {
|
|
38
|
+
const release = await acquireStoreLock(storePath);
|
|
39
|
+
try {
|
|
40
|
+
const current = await readStore(storePath);
|
|
41
|
+
const { store, result } = await update(current);
|
|
42
|
+
await writeStore(store, storePath);
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
finally {
|
|
46
|
+
await release();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
31
49
|
function sanitizeStoredDecision(value) {
|
|
32
50
|
const record = asRecord(value);
|
|
33
51
|
if (!record || containsForbiddenRawDataKey(record) || containsRawMcpName(record)) {
|
|
@@ -80,7 +98,39 @@ function sanitizeStoredHookEvent(value) {
|
|
|
80
98
|
purpose: stringField(record.purpose),
|
|
81
99
|
category: hookCategory(record.category),
|
|
82
100
|
identityHash: stringField(record.identityHash),
|
|
83
|
-
toolCount: numberField(record.toolCount)
|
|
101
|
+
toolCount: numberField(record.toolCount),
|
|
102
|
+
feedbackAction: feedbackAction(record.feedbackAction),
|
|
103
|
+
cooldownKey: stringField(record.cooldownKey)
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
function sanitizeStoredFeedbackOutcome(value) {
|
|
107
|
+
const record = asRecord(value);
|
|
108
|
+
if (!record || containsForbiddenRawDataKey(record) || containsRawMcpName(record)) {
|
|
109
|
+
return undefined;
|
|
110
|
+
}
|
|
111
|
+
const id = stringField(record.id);
|
|
112
|
+
const kind = record.kind === "feedback_outcome" ? "feedback_outcome" : undefined;
|
|
113
|
+
const feedbackActionValue = feedbackAction(record.feedbackAction);
|
|
114
|
+
const cooldownKey = stringField(record.cooldownKey);
|
|
115
|
+
const expectedAction = feedbackExpectedAction(record.expectedAction);
|
|
116
|
+
const outcome = feedbackOutcome(record.outcome);
|
|
117
|
+
const timestamp = stringField(record.timestamp);
|
|
118
|
+
if (!id || !kind || !feedbackActionValue || !cooldownKey || !expectedAction || !outcome || !timestamp) {
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
id,
|
|
123
|
+
kind,
|
|
124
|
+
sessionKey: stringField(record.sessionKey),
|
|
125
|
+
feedbackAction: feedbackActionValue,
|
|
126
|
+
cooldownKey,
|
|
127
|
+
expectedAction,
|
|
128
|
+
outcome,
|
|
129
|
+
timestamp,
|
|
130
|
+
safeCategory: feedbackSafeCategory(record.safeCategory),
|
|
131
|
+
reasonCode: stringField(record.reasonCode),
|
|
132
|
+
stateBefore: decisionState(record.stateBefore),
|
|
133
|
+
stateAfter: decisionState(record.stateAfter)
|
|
84
134
|
};
|
|
85
135
|
}
|
|
86
136
|
function sanitizeEvidence(value) {
|
|
@@ -121,13 +171,90 @@ function hookKind(value) {
|
|
|
121
171
|
value === "tool_batch" ||
|
|
122
172
|
value === "compaction" ||
|
|
123
173
|
value === "stop" ||
|
|
124
|
-
value === "session_end"
|
|
174
|
+
value === "session_end" ||
|
|
175
|
+
value === "feedback"
|
|
125
176
|
? value
|
|
126
177
|
: undefined;
|
|
127
178
|
}
|
|
128
179
|
function hookCategory(value) {
|
|
129
180
|
return value === "MCP" ? value : undefined;
|
|
130
181
|
}
|
|
182
|
+
function feedbackAction(value) {
|
|
183
|
+
return value === "coach" || value === "guard" ? value : undefined;
|
|
184
|
+
}
|
|
185
|
+
function feedbackExpectedAction(value) {
|
|
186
|
+
return value === "run_validation" ||
|
|
187
|
+
value === "intervene_before_retry" ||
|
|
188
|
+
value === "summarize_or_narrow" ||
|
|
189
|
+
value === "validate_or_summarize"
|
|
190
|
+
? value
|
|
191
|
+
: undefined;
|
|
192
|
+
}
|
|
193
|
+
function feedbackOutcome(value) {
|
|
194
|
+
return value === "pending" || value === "followed" || value === "ignored" || value === "resolved" || value === "superseded"
|
|
195
|
+
? value
|
|
196
|
+
: undefined;
|
|
197
|
+
}
|
|
198
|
+
function feedbackSafeCategory(value) {
|
|
199
|
+
return value === "tests" ||
|
|
200
|
+
value === "lint" ||
|
|
201
|
+
value === "typecheck" ||
|
|
202
|
+
value === "build" ||
|
|
203
|
+
value === "tool" ||
|
|
204
|
+
value === "mcp" ||
|
|
205
|
+
value === "edit" ||
|
|
206
|
+
value === "budget" ||
|
|
207
|
+
value === "activity" ||
|
|
208
|
+
value === "finish"
|
|
209
|
+
? value
|
|
210
|
+
: undefined;
|
|
211
|
+
}
|
|
212
|
+
async function acquireStoreLock(storePath) {
|
|
213
|
+
const lockPath = `${storePath}.lock`;
|
|
214
|
+
await mkdir(dirname(lockPath), { recursive: true, mode: 0o700 });
|
|
215
|
+
const deadline = Date.now() + 2000;
|
|
216
|
+
while (Date.now() < deadline) {
|
|
217
|
+
try {
|
|
218
|
+
await writeFile(lockPath, `${JSON.stringify({ pid: process.pid, startedAt: new Date().toISOString() })}\n`, {
|
|
219
|
+
encoding: "utf8",
|
|
220
|
+
mode: 0o600,
|
|
221
|
+
flag: "wx"
|
|
222
|
+
});
|
|
223
|
+
await chmod(lockPath, 0o600);
|
|
224
|
+
return async () => {
|
|
225
|
+
await rm(lockPath, { force: true });
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
catch (error) {
|
|
229
|
+
if (!isErrno(error, "EEXIST")) {
|
|
230
|
+
throw error;
|
|
231
|
+
}
|
|
232
|
+
if (await lockIsStale(lockPath)) {
|
|
233
|
+
await rm(lockPath, { force: true });
|
|
234
|
+
continue;
|
|
235
|
+
}
|
|
236
|
+
await wait(20);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
throw new Error("event store lock timed out");
|
|
240
|
+
}
|
|
241
|
+
async function lockIsStale(lockPath) {
|
|
242
|
+
try {
|
|
243
|
+
const lockStat = await stat(lockPath);
|
|
244
|
+
return Date.now() - lockStat.mtimeMs > 5000;
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
return true;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
async function wait(ms) {
|
|
251
|
+
await new Promise((resolve) => {
|
|
252
|
+
setTimeout(resolve, ms);
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
function isErrno(error, code) {
|
|
256
|
+
return typeof error === "object" && error !== null && error.code === code;
|
|
257
|
+
}
|
|
131
258
|
function containsForbiddenRawDataKey(value) {
|
|
132
259
|
if (Array.isArray(value)) {
|
|
133
260
|
return value.some((item) => containsForbiddenRawDataKey(item));
|