crbro-memory 2.5.1 → 2.7.0
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 +515 -487
- package/SECURITY.md +222 -0
- package/bin/crbro.mjs +241 -6
- package/dist/daemon/daemon.d.ts.map +1 -1
- package/dist/daemon/daemon.js +6 -3
- package/dist/daemon/daemon.js.map +1 -1
- package/dist/engine/backup.d.ts.map +1 -1
- package/dist/engine/backup.js +5 -1
- package/dist/engine/backup.js.map +1 -1
- package/dist/engine/cortex.d.ts +61 -0
- package/dist/engine/cortex.d.ts.map +1 -1
- package/dist/engine/cortex.js +270 -24
- package/dist/engine/cortex.js.map +1 -1
- package/dist/engine/hookverify.d.ts +42 -0
- package/dist/engine/hookverify.d.ts.map +1 -0
- package/dist/engine/hookverify.js +169 -0
- package/dist/engine/hookverify.js.map +1 -0
- package/dist/engine/maintenance.d.ts.map +1 -1
- package/dist/engine/maintenance.js +15 -2
- package/dist/engine/maintenance.js.map +1 -1
- package/dist/engine/postmortem.d.ts +73 -0
- package/dist/engine/postmortem.d.ts.map +1 -0
- package/dist/engine/postmortem.js +423 -0
- package/dist/engine/postmortem.js.map +1 -0
- package/dist/engine/prefrontal.d.ts +1 -0
- package/dist/engine/prefrontal.d.ts.map +1 -1
- package/dist/engine/prefrontal.js +8 -2
- package/dist/engine/prefrontal.js.map +1 -1
- package/dist/engine/secrets.d.ts +9 -0
- package/dist/engine/secrets.d.ts.map +1 -1
- package/dist/engine/secrets.js +7 -0
- package/dist/engine/secrets.js.map +1 -1
- package/dist/engine/triggers.d.ts +11 -4
- package/dist/engine/triggers.d.ts.map +1 -1
- package/dist/engine/triggers.js +53 -14
- package/dist/engine/triggers.js.map +1 -1
- package/dist/engine/usage.d.ts +61 -0
- package/dist/engine/usage.d.ts.map +1 -0
- package/dist/engine/usage.js +252 -0
- package/dist/engine/usage.js.map +1 -0
- package/dist/search/index.d.ts +40 -0
- package/dist/search/index.d.ts.map +1 -1
- package/dist/search/index.js +186 -5
- package/dist/search/index.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +100 -11
- package/dist/server.js.map +1 -1
- package/dist/sync/materialize.d.ts.map +1 -1
- package/dist/sync/materialize.js +54 -1
- package/dist/sync/materialize.js.map +1 -1
- package/dist/types/index.d.ts +28 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/ids.d.ts +6 -0
- package/dist/utils/ids.d.ts.map +1 -1
- package/dist/utils/ids.js +14 -4
- package/dist/utils/ids.js.map +1 -1
- package/dist/utils/transcripts.d.ts +63 -0
- package/dist/utils/transcripts.d.ts.map +1 -0
- package/dist/utils/transcripts.js +242 -0
- package/dist/utils/transcripts.js.map +1 -0
- package/hooks/crbro-guard.mjs +18 -2
- package/hooks/crbro-lifecycle.mjs +608 -0
- package/hooks/crbro-subagent.mjs +17 -4
- package/package.json +63 -62
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"triggers.d.ts","sourceRoot":"","sources":["../../src/engine/triggers.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,eAAO,MAAM,qBAAqB,IAAI,CAAC;AACvC,eAAO,MAAM,YAAY,kBAAkB,CAAC;AAE5C,8FAA8F;AAC9F,eAAO,MAAM,WAAW,IAAI,CAAC;AAE7B,MAAM,WAAW,YAAY;IAC3B,uGAAuG;IACvG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;CAC3F;AACD,MAAM,WAAW,YAAY;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/B,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;
|
|
1
|
+
{"version":3,"file":"triggers.d.ts","sourceRoot":"","sources":["../../src/engine/triggers.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,eAAO,MAAM,qBAAqB,IAAI,CAAC;AACvC,eAAO,MAAM,YAAY,kBAAkB,CAAC;AAE5C,8FAA8F;AAC9F,eAAO,MAAM,WAAW,IAAI,CAAC;AAE7B,MAAM,WAAW,YAAY;IAC3B,uGAAuG;IACvG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;CAC3F;AACD,MAAM,WAAW,YAAY;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/B,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAsED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAsBvD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAgBlD;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,MAAc,GAAG,YAAY,CAqB1F;AAED,yFAAyF;AACzF,wBAAgB,UAAU,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,MAAoB,GAAG,YAAY,EAAE,CAO1G;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAErD;AAED,wGAAwG;AACxG,wBAAsB,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CASpE;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAS1I"}
|
package/dist/engine/triggers.js
CHANGED
|
@@ -24,11 +24,12 @@ exports.keysOfEntry = keysOfEntry;
|
|
|
24
24
|
exports.buildTriggerIndex = buildTriggerIndex;
|
|
25
25
|
exports.lessonsFor = lessonsFor;
|
|
26
26
|
exports.triggerIndexPath = triggerIndexPath;
|
|
27
|
+
exports.loadAllNeurons = loadAllNeurons;
|
|
27
28
|
exports.writeTriggerIndex = writeTriggerIndex;
|
|
28
29
|
const node_path_1 = __importDefault(require("node:path"));
|
|
29
30
|
const fs_js_1 = require("../utils/fs.js");
|
|
30
31
|
const ops_js_1 = require("../sync/ops.js");
|
|
31
|
-
exports.TRIGGER_INDEX_VERSION =
|
|
32
|
+
exports.TRIGGER_INDEX_VERSION = 2; // 2: path: keys, so exploring a project wakes its lessons
|
|
32
33
|
exports.TRIGGER_FILE = 'triggers.json';
|
|
33
34
|
const PREVIEW = 320;
|
|
34
35
|
/** Lessons handed over per command. More than this is a lecture, and lectures get skimmed. */
|
|
@@ -81,13 +82,40 @@ function stripHeredocs(command) {
|
|
|
81
82
|
}
|
|
82
83
|
return out.join('\n');
|
|
83
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* The project folders a text walks into, as `path:<folder>` keys.
|
|
87
|
+
*
|
|
88
|
+
* Command keys only fire on the program being run, so the first commands of a
|
|
89
|
+
* task — `ls`, `find`, `grep -r` over someone's repo — woke nothing, and the
|
|
90
|
+
* lesson about that repo arrived ten commands late, once a `git` line finally
|
|
91
|
+
* matched. A folder name is what those commands and the lesson have in common.
|
|
92
|
+
*
|
|
93
|
+
* Only hyphenated segments of six characters or more count (`crbro-memory`,
|
|
94
|
+
* `synthetica-decks`): plain words like `projects`, `src` or `docs` name
|
|
95
|
+
* everything and would wake everything.
|
|
96
|
+
*/
|
|
97
|
+
function pathKeys(text) {
|
|
98
|
+
const keys = new Set();
|
|
99
|
+
for (const m of text.matchAll(/[A-Za-z0-9._-]{2,}[\\/][A-Za-z0-9._\\/-]{2,}/g)) {
|
|
100
|
+
for (const seg of m[0].split(/[\\/]+/)) {
|
|
101
|
+
const s = seg.toLowerCase();
|
|
102
|
+
if (s.length >= 6 && s.includes('-') && !/^-|-$/.test(s) && !/\.[a-z0-9]{1,5}$/.test(s))
|
|
103
|
+
keys.add(`path:${s}`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return [...keys];
|
|
107
|
+
}
|
|
84
108
|
/**
|
|
85
109
|
* The keys a COMMAND LINE asks about. Deliberately dumb and mirrored in
|
|
86
110
|
* hooks/crbro-guard.mjs: per segment, the program and its next word, the word
|
|
87
|
-
* after a wrapper, and a script when it is what runs
|
|
111
|
+
* after a wrapper, and a script when it is what runs, plus the project folders
|
|
112
|
+
* it touches.
|
|
88
113
|
*/
|
|
89
114
|
function keysOfCommand(command) {
|
|
90
115
|
const keys = new Set();
|
|
116
|
+
const body = stripHeredocs(command);
|
|
117
|
+
for (const k of pathKeys(body))
|
|
118
|
+
keys.add(k);
|
|
91
119
|
for (const segment of stripHeredocs(command).split(/&&|\|\||[;|\n]/)) {
|
|
92
120
|
let t = segment.trim().split(/\s+/).map(word).filter(Boolean);
|
|
93
121
|
while (t.length && (/^[a-z_][a-z0-9_]*=/.test(t[0]) || t[0] === '&' || WRAPPERS.has(t[0]))) {
|
|
@@ -119,6 +147,8 @@ function keysOfCommand(command) {
|
|
|
119
147
|
*/
|
|
120
148
|
function keysOfEntry(text) {
|
|
121
149
|
const keys = new Set();
|
|
150
|
+
for (const k of pathKeys(text))
|
|
151
|
+
keys.add(k);
|
|
122
152
|
for (const m of text.matchAll(/`([^`\n]{2,200})`/g))
|
|
123
153
|
for (const k of keysOfCommand(m[1]))
|
|
124
154
|
keys.add(k);
|
|
@@ -136,7 +166,7 @@ function keysOfEntry(text) {
|
|
|
136
166
|
keys.add(DEEP.has(`${w} ${next}`) && third && SUBCOMMAND.test(third) && !third.startsWith('-') && !PROSE.has(third) ? `${w} ${next} ${third}` : `${w} ${next}`);
|
|
137
167
|
}
|
|
138
168
|
// A script is only a trigger as the thing that runs; a program pair needs a known program.
|
|
139
|
-
return [...keys].filter(k => (k.includes(' ') ? HEADS.has(k.split(' ')[0]) || WRAPPERS.has(k.split(' ')[0]) : SCRIPT.test(k)));
|
|
169
|
+
return [...keys].filter(k => k.startsWith('path:') || (k.includes(' ') ? HEADS.has(k.split(' ')[0]) || WRAPPERS.has(k.split(' ')[0]) : SCRIPT.test(k)));
|
|
140
170
|
}
|
|
141
171
|
function buildTriggerIndex(neurons, builtAt = (0, fs_js_1.now)()) {
|
|
142
172
|
const index = { v: exports.TRIGGER_INDEX_VERSION, built: builtAt, keys: {}, entries: [] };
|
|
@@ -178,18 +208,27 @@ function lessonsFor(index, command, max = exports.MAX_LESSONS) {
|
|
|
178
208
|
function triggerIndexPath(brain) {
|
|
179
209
|
return node_path_1.default.join(brain.paths.search, exports.TRIGGER_FILE);
|
|
180
210
|
}
|
|
181
|
-
/**
|
|
182
|
-
async function
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
neurons.push(n);
|
|
190
|
-
}
|
|
191
|
-
catch { /* corrupted: the integrity check reports it */ }
|
|
211
|
+
/** Every readable neuron of the cortex. A corrupted file is skipped: the integrity check reports it. */
|
|
212
|
+
async function loadAllNeurons(brain) {
|
|
213
|
+
const neurons = [];
|
|
214
|
+
for (const id of await (0, fs_js_1.listJSONFiles)(brain.paths.cortex)) {
|
|
215
|
+
try {
|
|
216
|
+
const n = await (0, fs_js_1.readJSON)(brain.paths.neuron(id));
|
|
217
|
+
if (n)
|
|
218
|
+
neurons.push(n);
|
|
192
219
|
}
|
|
220
|
+
catch { /* corrupted: the integrity check reports it */ }
|
|
221
|
+
}
|
|
222
|
+
return neurons;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Rebuild from the cortex and write. Derived data: a failure is reported,
|
|
226
|
+
* never thrown. `preloaded` lets consolidate read the cortex once for this
|
|
227
|
+
* and for promotion_candidates (2.7) instead of twice.
|
|
228
|
+
*/
|
|
229
|
+
async function writeTriggerIndex(brain, preloaded) {
|
|
230
|
+
try {
|
|
231
|
+
const neurons = preloaded ?? await loadAllNeurons(brain);
|
|
193
232
|
const index = buildTriggerIndex(neurons);
|
|
194
233
|
await (0, fs_js_1.writeJSON)(triggerIndexPath(brain), index, { pretty: false });
|
|
195
234
|
return { entries: index.entries.length, keys: Object.keys(index.keys).length };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"triggers.js","sourceRoot":"","sources":["../../src/engine/triggers.ts"],"names":[],"mappings":";AAAA,oEAAoE;AACpE,EAAE;AACF,0EAA0E;AAC1E,wEAAwE;AACxE,2EAA2E;AAC3E,uEAAuE;AACvE,0EAA0E;AAC1E,0DAA0D;AAC1D,EAAE;AACF,6EAA6E;AAC7E,6EAA6E;AAC7E,0EAA0E;AAC1E,2EAA2E;AAC3E,2EAA2E;AAC3E,gDAAgD;;;;;;
|
|
1
|
+
{"version":3,"file":"triggers.js","sourceRoot":"","sources":["../../src/engine/triggers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { type FindOptions } from '../utils/transcripts.js';
|
|
2
|
+
export interface TokenCounts {
|
|
3
|
+
input_tokens: number;
|
|
4
|
+
output_tokens: number;
|
|
5
|
+
cache_creation_input_tokens: number;
|
|
6
|
+
cache_read_input_tokens: number;
|
|
7
|
+
/** API responses, after merging the lines of each one. */
|
|
8
|
+
messages: number;
|
|
9
|
+
}
|
|
10
|
+
export type ByModel = Record<string, TokenCounts>;
|
|
11
|
+
export interface SessionUsage {
|
|
12
|
+
project: string;
|
|
13
|
+
session: string;
|
|
14
|
+
last_activity: string;
|
|
15
|
+
main: ByModel;
|
|
16
|
+
subagents: ByModel;
|
|
17
|
+
subagent_files: number;
|
|
18
|
+
}
|
|
19
|
+
export interface UsageReport {
|
|
20
|
+
root: string;
|
|
21
|
+
days: number | null;
|
|
22
|
+
sessions: SessionUsage[];
|
|
23
|
+
by_model: Record<string, {
|
|
24
|
+
main: TokenCounts;
|
|
25
|
+
subagents: TokenCounts;
|
|
26
|
+
total: TokenCounts;
|
|
27
|
+
}>;
|
|
28
|
+
totals: {
|
|
29
|
+
main: TokenCounts;
|
|
30
|
+
subagents: TokenCounts;
|
|
31
|
+
total: TokenCounts;
|
|
32
|
+
};
|
|
33
|
+
files_read: number;
|
|
34
|
+
lines_broken: number;
|
|
35
|
+
lines_oversized: number;
|
|
36
|
+
}
|
|
37
|
+
export declare function zeroCounts(): TokenCounts;
|
|
38
|
+
export declare function tokenTotal(c: TokenCounts): number;
|
|
39
|
+
export interface UsagePick {
|
|
40
|
+
/** message.id, else requestId; null when the line has neither. */
|
|
41
|
+
key: string | null;
|
|
42
|
+
model: string;
|
|
43
|
+
sidechain: boolean;
|
|
44
|
+
/** entry.timestamp in ms, or null when missing or unparseable. */
|
|
45
|
+
at: number | null;
|
|
46
|
+
counts: Omit<TokenCounts, 'messages'>;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* The only function that looks at a transcript entry for `usage`, and the only
|
|
50
|
+
* fields it reads. Anything else in the entry, the content above all, is
|
|
51
|
+
* never accessed.
|
|
52
|
+
*/
|
|
53
|
+
export declare function pickUsage(entry: any): UsagePick | null;
|
|
54
|
+
export interface UsageOptions extends FindOptions {
|
|
55
|
+
}
|
|
56
|
+
export declare function collectUsage(opts?: UsageOptions): Promise<UsageReport>;
|
|
57
|
+
export declare function fmt(n: number): string;
|
|
58
|
+
export declare function formatUsage(r: UsageReport, opts?: {
|
|
59
|
+
top?: number;
|
|
60
|
+
}): string;
|
|
61
|
+
//# sourceMappingURL=usage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/engine/usage.ts"],"names":[],"mappings":"AA4BA,OAAO,EAA6D,KAAK,WAAW,EAAqC,MAAM,yBAAyB,CAAC;AAEzJ,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,2BAA2B,EAAE,MAAM,CAAC;IACpC,uBAAuB,EAAE,MAAM,CAAC;IAChC,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAElD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,SAAS,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,WAAW,CAAA;KAAE,CAAC,CAAC;IAC5F,MAAM,EAAE;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,SAAS,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,WAAW,CAAA;KAAE,CAAC;IAC1E,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;CACzB;AAID,wBAAgB,UAAU,IAAI,WAAW,CAExC;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAEjD;AAWD,MAAM,WAAW,SAAS;IACxB,kEAAkE;IAClE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,kEAAkE;IAClE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;CACvC;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,SAAS,GAAG,IAAI,CAsBtD;AAgED,MAAM,WAAW,YAAa,SAAQ,WAAW;CAAG;AAEpD,wBAAsB,YAAY,CAAC,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAwChF;AAID,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAErC;AAcD,wBAAgB,WAAW,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,MAAM,CA8C/E"}
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ─── Token spend, from metadata only ────────────────────────────
|
|
3
|
+
//
|
|
4
|
+
// `crbro usage`: how many tokens each model took, per session, with the main
|
|
5
|
+
// conversation and its subagents kept apart. A workflow that fans out to a
|
|
6
|
+
// dozen agents can cost more than the conversation that launched it, and that
|
|
7
|
+
// is invisible from inside the conversation.
|
|
8
|
+
//
|
|
9
|
+
// Privacy contract: of each transcript line this reads message.model,
|
|
10
|
+
// message.usage, message.id, requestId, isSidechain and timestamp — nothing else. The
|
|
11
|
+
// content of the conversation is never touched, and lines that cannot carry a
|
|
12
|
+
// usage block are dropped as raw bytes before they are even decoded.
|
|
13
|
+
//
|
|
14
|
+
// One API response is written as several lines (one per content block), each
|
|
15
|
+
// repeating the same message.id and usage, with output_tokens growing until the
|
|
16
|
+
// last one. Summing lines would count a response three or four times, so lines
|
|
17
|
+
// are merged per message id, keeping the largest value of each counter.
|
|
18
|
+
//
|
|
19
|
+
// A resumed or forked session copies the earlier responses into its own .jsonl
|
|
20
|
+
// with the same message.id and usage. So the merge is report-wide, not
|
|
21
|
+
// per-session: the oldest session that holds a response is charged for it and
|
|
22
|
+
// every later copy is skipped.
|
|
23
|
+
//
|
|
24
|
+
// With --days, a response is counted only if its own timestamp is inside the
|
|
25
|
+
// window: a long session resumed today does not bring weeks of spend with it.
|
|
26
|
+
//
|
|
27
|
+
// No prices: they change, differ by plan and are not in the transcript. This
|
|
28
|
+
// counts tokens and says so.
|
|
29
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.zeroCounts = zeroCounts;
|
|
31
|
+
exports.tokenTotal = tokenTotal;
|
|
32
|
+
exports.pickUsage = pickUsage;
|
|
33
|
+
exports.collectUsage = collectUsage;
|
|
34
|
+
exports.fmt = fmt;
|
|
35
|
+
exports.formatUsage = formatUsage;
|
|
36
|
+
const transcripts_js_1 = require("../utils/transcripts.js");
|
|
37
|
+
const FIELDS = ['input_tokens', 'output_tokens', 'cache_creation_input_tokens', 'cache_read_input_tokens'];
|
|
38
|
+
function zeroCounts() {
|
|
39
|
+
return { input_tokens: 0, output_tokens: 0, cache_creation_input_tokens: 0, cache_read_input_tokens: 0, messages: 0 };
|
|
40
|
+
}
|
|
41
|
+
function tokenTotal(c) {
|
|
42
|
+
return c.input_tokens + c.output_tokens + c.cache_creation_input_tokens + c.cache_read_input_tokens;
|
|
43
|
+
}
|
|
44
|
+
function add(into, c) {
|
|
45
|
+
for (const f of FIELDS)
|
|
46
|
+
into[f] += c[f];
|
|
47
|
+
into.messages += c.messages;
|
|
48
|
+
}
|
|
49
|
+
function num(v) {
|
|
50
|
+
return typeof v === 'number' && Number.isFinite(v) && v > 0 ? v : 0;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* The only function that looks at a transcript entry for `usage`, and the only
|
|
54
|
+
* fields it reads. Anything else in the entry, the content above all, is
|
|
55
|
+
* never accessed.
|
|
56
|
+
*/
|
|
57
|
+
function pickUsage(entry) {
|
|
58
|
+
if (!entry || typeof entry !== 'object' || entry.type !== 'assistant')
|
|
59
|
+
return null;
|
|
60
|
+
const message = entry.message;
|
|
61
|
+
if (!message || typeof message !== 'object')
|
|
62
|
+
return null;
|
|
63
|
+
const usage = message.usage;
|
|
64
|
+
if (!usage || typeof usage !== 'object')
|
|
65
|
+
return null;
|
|
66
|
+
const model = typeof message.model === 'string' && message.model ? message.model : 'unknown';
|
|
67
|
+
const id = typeof message.id === 'string' && message.id ? message.id
|
|
68
|
+
: typeof entry.requestId === 'string' && entry.requestId ? entry.requestId : null;
|
|
69
|
+
const at = typeof entry.timestamp === 'string' ? Date.parse(entry.timestamp) : NaN;
|
|
70
|
+
return {
|
|
71
|
+
key: id,
|
|
72
|
+
model,
|
|
73
|
+
sidechain: entry.isSidechain === true,
|
|
74
|
+
at: Number.isFinite(at) ? at : null,
|
|
75
|
+
counts: {
|
|
76
|
+
input_tokens: num(usage.input_tokens),
|
|
77
|
+
output_tokens: num(usage.output_tokens),
|
|
78
|
+
cache_creation_input_tokens: num(usage.cache_creation_input_tokens),
|
|
79
|
+
cache_read_input_tokens: num(usage.cache_read_input_tokens),
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/** A line that carries a usage block contains this key, unescaped. */
|
|
84
|
+
const USAGE_NEEDLE = '"usage"';
|
|
85
|
+
/**
|
|
86
|
+
* `claimed`: response keys already charged to an older session of this report.
|
|
87
|
+
* `cutoff`: responses timestamped before it are left out (-Infinity = no window).
|
|
88
|
+
*/
|
|
89
|
+
async function sessionUsage(s, stats, claimed, cutoff) {
|
|
90
|
+
const merged = new Map();
|
|
91
|
+
let files = 0;
|
|
92
|
+
const toRead = [];
|
|
93
|
+
if (s.main)
|
|
94
|
+
toRead.push({ file: s.main, role: 'main' });
|
|
95
|
+
for (const f of s.subagents)
|
|
96
|
+
toRead.push({ file: f, role: 'subagents' });
|
|
97
|
+
for (const { file, role } of toRead) {
|
|
98
|
+
files++;
|
|
99
|
+
try {
|
|
100
|
+
for await (const { line, entry } of (0, transcripts_js_1.readJsonl)(file, { anyOf: [USAGE_NEEDLE], stats })) {
|
|
101
|
+
const u = pickUsage(entry);
|
|
102
|
+
if (!u)
|
|
103
|
+
continue;
|
|
104
|
+
// "<synthetic>": a message the client wrote itself (an API error, an
|
|
105
|
+
// interruption). No request, no tokens.
|
|
106
|
+
if (u.model.startsWith('<') && FIELDS.every(f => u.counts[f] === 0))
|
|
107
|
+
continue;
|
|
108
|
+
if (u.at !== null && u.at < cutoff)
|
|
109
|
+
continue;
|
|
110
|
+
const key = u.key ?? `${file}#${line}`;
|
|
111
|
+
if (claimed.has(key))
|
|
112
|
+
continue;
|
|
113
|
+
const r = role === 'main' && !u.sidechain ? 'main' : 'subagents';
|
|
114
|
+
const prev = merged.get(key);
|
|
115
|
+
if (!prev) {
|
|
116
|
+
merged.set(key, { model: u.model, role: r, counts: { ...u.counts } });
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
for (const f of FIELDS)
|
|
120
|
+
prev.counts[f] = Math.max(prev.counts[f], u.counts[f]);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
catch { /* unreadable file: counted as read, contributes nothing */ }
|
|
125
|
+
}
|
|
126
|
+
for (const key of merged.keys())
|
|
127
|
+
claimed.add(key);
|
|
128
|
+
const main = {};
|
|
129
|
+
const subagents = {};
|
|
130
|
+
for (const m of merged.values()) {
|
|
131
|
+
const bucket = m.role === 'main' ? main : subagents;
|
|
132
|
+
const c = bucket[m.model] ??= zeroCounts();
|
|
133
|
+
add(c, { ...m.counts, messages: 1 });
|
|
134
|
+
}
|
|
135
|
+
return {
|
|
136
|
+
usage: {
|
|
137
|
+
project: s.project,
|
|
138
|
+
session: s.sessionId,
|
|
139
|
+
last_activity: new Date(s.mtimeMs).toISOString(),
|
|
140
|
+
main,
|
|
141
|
+
subagents,
|
|
142
|
+
subagent_files: s.subagents.length,
|
|
143
|
+
},
|
|
144
|
+
files,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
async function collectUsage(opts = {}) {
|
|
148
|
+
const root = opts.root ?? (0, transcripts_js_1.claudeProjectsRoot)();
|
|
149
|
+
const sessions = await (0, transcripts_js_1.findSessions)({ ...opts, root });
|
|
150
|
+
const stats = (0, transcripts_js_1.newReadStats)();
|
|
151
|
+
const report = {
|
|
152
|
+
root,
|
|
153
|
+
days: opts.days ?? null,
|
|
154
|
+
sessions: [],
|
|
155
|
+
by_model: {},
|
|
156
|
+
totals: { main: zeroCounts(), subagents: zeroCounts(), total: zeroCounts() },
|
|
157
|
+
files_read: 0,
|
|
158
|
+
lines_broken: 0,
|
|
159
|
+
lines_oversized: 0,
|
|
160
|
+
};
|
|
161
|
+
const cutoff = opts.days !== undefined && opts.days > 0 ? Date.now() - opts.days * 86_400_000 : -Infinity;
|
|
162
|
+
// Oldest first, so a response copied into a resumed session is charged to
|
|
163
|
+
// the session where it happened. The report keeps findSessions' order.
|
|
164
|
+
const claimed = new Set();
|
|
165
|
+
const found = [];
|
|
166
|
+
for (const s of [...sessions].reverse()) {
|
|
167
|
+
const { usage, files } = await sessionUsage(s, stats, claimed, cutoff);
|
|
168
|
+
report.files_read += files;
|
|
169
|
+
if (Object.keys(usage.main).length === 0 && Object.keys(usage.subagents).length === 0)
|
|
170
|
+
continue;
|
|
171
|
+
found.push(usage);
|
|
172
|
+
}
|
|
173
|
+
for (const usage of found.reverse()) {
|
|
174
|
+
report.sessions.push(usage);
|
|
175
|
+
for (const role of ['main', 'subagents']) {
|
|
176
|
+
for (const [model, c] of Object.entries(usage[role])) {
|
|
177
|
+
const m = report.by_model[model] ??= { main: zeroCounts(), subagents: zeroCounts(), total: zeroCounts() };
|
|
178
|
+
add(m[role], c);
|
|
179
|
+
add(m.total, c);
|
|
180
|
+
add(report.totals[role], c);
|
|
181
|
+
add(report.totals.total, c);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
report.lines_broken = stats.broken;
|
|
186
|
+
report.lines_oversized = stats.oversized;
|
|
187
|
+
return report;
|
|
188
|
+
}
|
|
189
|
+
// ─── Text output ────────────────────────────────────────────────
|
|
190
|
+
function fmt(n) {
|
|
191
|
+
return String(Math.round(n)).replace(/\B(?=(\d{3})+(?!\d))/g, ',');
|
|
192
|
+
}
|
|
193
|
+
function sumModels(b) {
|
|
194
|
+
const t = zeroCounts();
|
|
195
|
+
for (const c of Object.values(b))
|
|
196
|
+
add(t, c);
|
|
197
|
+
return t;
|
|
198
|
+
}
|
|
199
|
+
function row(label, c, w) {
|
|
200
|
+
const cols = [c.input_tokens, c.output_tokens, c.cache_creation_input_tokens, c.cache_read_input_tokens, c.messages]
|
|
201
|
+
.map(v => fmt(v).padStart(15)).join('');
|
|
202
|
+
return ` ${label.padEnd(w)}${cols}`;
|
|
203
|
+
}
|
|
204
|
+
function formatUsage(r, opts = {}) {
|
|
205
|
+
const top = opts.top ?? 15;
|
|
206
|
+
const L = [];
|
|
207
|
+
const period = r.days ? `last ${r.days} days` : 'all history';
|
|
208
|
+
L.push('');
|
|
209
|
+
L.push(` Token spend — ${period} · ${r.sessions.length} sessions · ${r.files_read} files read`);
|
|
210
|
+
L.push(' Metadata only (message.model and message.usage); the content of the conversations is not read.');
|
|
211
|
+
L.push(' Tokens, not money: the price depends on the plan and is not in the transcript.');
|
|
212
|
+
L.push('');
|
|
213
|
+
if (r.sessions.length === 0) {
|
|
214
|
+
L.push(` No sessions with usage data in ${r.root} for that filter.`);
|
|
215
|
+
L.push('');
|
|
216
|
+
return L.join('\n');
|
|
217
|
+
}
|
|
218
|
+
const models = Object.keys(r.by_model).sort((a, b) => tokenTotal(r.by_model[b].total) - tokenTotal(r.by_model[a].total));
|
|
219
|
+
const w = Math.max(28, ...models.map(m => m.length + 4));
|
|
220
|
+
const head = ['input', 'output', 'cache write', 'cache read', 'responses'].map(h => h.padStart(15)).join('');
|
|
221
|
+
L.push(` ${'By model'.padEnd(w)}${head}`);
|
|
222
|
+
for (const m of models) {
|
|
223
|
+
const b = r.by_model[m];
|
|
224
|
+
L.push(row(m, b.total, w));
|
|
225
|
+
if (b.main.messages)
|
|
226
|
+
L.push(row(' · main', b.main, w));
|
|
227
|
+
if (b.subagents.messages)
|
|
228
|
+
L.push(row(' · subagents', b.subagents, w));
|
|
229
|
+
}
|
|
230
|
+
L.push(row('Total', r.totals.total, w));
|
|
231
|
+
L.push(row(' · main', r.totals.main, w));
|
|
232
|
+
L.push(row(' · subagents', r.totals.subagents, w));
|
|
233
|
+
L.push('');
|
|
234
|
+
const weight = (s) => tokenTotal(sumModels(s.main)) + tokenTotal(sumModels(s.subagents));
|
|
235
|
+
const ranked = [...r.sessions].sort((a, b) => weight(b) - weight(a));
|
|
236
|
+
const shown = ranked.slice(0, top);
|
|
237
|
+
L.push(` By session (${shown.length === ranked.length ? 'all' : `the ${shown.length} with most tokens of ${ranked.length}`}; --session <id> for one, --json for everything):`);
|
|
238
|
+
for (const s of shown) {
|
|
239
|
+
const mn = sumModels(s.main);
|
|
240
|
+
const sb = sumModels(s.subagents);
|
|
241
|
+
const when = s.last_activity.slice(0, 16).replace('T', ' ');
|
|
242
|
+
L.push(` ${when} UTC ${s.session.slice(0, 8)} ${s.project}`);
|
|
243
|
+
L.push(` main ${fmt(tokenTotal(mn))} tokens in ${fmt(mn.messages)} responses · subagents ${fmt(tokenTotal(sb))} in ${fmt(sb.messages)} (${s.subagent_files} files)`);
|
|
244
|
+
}
|
|
245
|
+
if (r.lines_broken || r.lines_oversized) {
|
|
246
|
+
L.push('');
|
|
247
|
+
L.push(` Lines skipped: ${r.lines_broken} unreadable (e.g. the last one of a session still open), ${r.lines_oversized} too long.`);
|
|
248
|
+
}
|
|
249
|
+
L.push('');
|
|
250
|
+
return L.join('\n');
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/engine/usage.ts"],"names":[],"mappings":"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"}
|
package/dist/search/index.d.ts
CHANGED
|
@@ -224,6 +224,22 @@ export declare class SearchEngine {
|
|
|
224
224
|
* re-indexed; chunks of deleted neurons are removed on the spot.
|
|
225
225
|
*/
|
|
226
226
|
private materializeResults;
|
|
227
|
+
/**
|
|
228
|
+
* Where the matching entry came from — but only when it is NOT the user's
|
|
229
|
+
* own, so the common case costs nothing: no field, no token. Read from what
|
|
230
|
+
* the entry already carries: a fact's `source` ('team:<author>' from a
|
|
231
|
+
* sync, 'miner', 'import…'), a decision's or map's `by`, and the
|
|
232
|
+
* entry_source sidecar for the rest.
|
|
233
|
+
*
|
|
234
|
+
* A line that came through a shared space keeps its mark even when `by` is
|
|
235
|
+
* this machine's own author name: `by` is self-declared in the shared log
|
|
236
|
+
* and anyone with push access can write any name, so matching it is no
|
|
237
|
+
* proof the line is the user's. Another device of the same person shows
|
|
238
|
+
* as team:<space> with by=<their own name>, which is honest. When the
|
|
239
|
+
* neuron is no longer in shared-map.json (after unshare) the space is not
|
|
240
|
+
* known and origin is plain 'team'.
|
|
241
|
+
*/
|
|
242
|
+
private originOf;
|
|
227
243
|
/**
|
|
228
244
|
* Does the chunk still describe something the neuron holds as current?
|
|
229
245
|
* A retired entry (entry_status sidecar) counts as dead, exactly like a
|
|
@@ -239,6 +255,24 @@ export declare class SearchEngine {
|
|
|
239
255
|
private searchTerm;
|
|
240
256
|
/** Build and insert every chunk of a neuron. */
|
|
241
257
|
private insertNeuronChunks;
|
|
258
|
+
/**
|
|
259
|
+
* The neurons about one project, for crbro_boot's `project` (2.7).
|
|
260
|
+
*
|
|
261
|
+
* `project` is a folder path, a repo name or a remote ("owner/repo",
|
|
262
|
+
* "…/repo.git"); only its last segment counts. A neuron matches when its
|
|
263
|
+
* NAME is that project (or the project's leading words: "Invokard" for
|
|
264
|
+
* invokard-plugin), when its system MAP mentions it, or when a fact's
|
|
265
|
+
* KEYS do. Served from the index already in memory — one prefix query for
|
|
266
|
+
* the project's first word, no neuron file read beyond an existence check
|
|
267
|
+
* of the few it returns — so a boot that passes a project pays about one
|
|
268
|
+
* recall term, and a boot that does not pays nothing.
|
|
269
|
+
*/
|
|
270
|
+
projectNeurons(project: string, limit?: number): Promise<Array<{
|
|
271
|
+
id: string;
|
|
272
|
+
name: string;
|
|
273
|
+
match: 'name' | 'map' | 'keys';
|
|
274
|
+
heat: number;
|
|
275
|
+
}>>;
|
|
242
276
|
/**
|
|
243
277
|
* Index one session log, replacing whatever it had. Called by consolidate
|
|
244
278
|
* for the day just logged and by rebuild for the whole diary.
|
|
@@ -274,4 +308,10 @@ export declare class SearchEngine {
|
|
|
274
308
|
*/
|
|
275
309
|
private dropLegacyIndex;
|
|
276
310
|
}
|
|
311
|
+
/** A fact that has been superseded or retracted must not surface in recall. */
|
|
312
|
+
/**
|
|
313
|
+
* The project a `crbro_boot project=` value names: the last segment of a
|
|
314
|
+
* path, a remote or "owner/repo", without a trailing ".git".
|
|
315
|
+
*/
|
|
316
|
+
export declare function projectSlugOf(raw: string): string;
|
|
277
317
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/search/index.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAQ,MAAM,mBAAmB,CAAC;AAEpE;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,IAAI,CAAC;AAoD/B,oFAAoF;AACpF,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAM1E;AAED,8FAA8F;AAC9F,eAAO,MAAM,YAAY,gFAAiF,CAAC;AAC3G,MAAM,MAAM,UAAU,GAAG,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;AAErD;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3B;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/search/index.ts"],"names":[],"mappings":"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"}
|