crbro-memory 2.6.0 → 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/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 +8 -2
- package/dist/engine/triggers.d.ts.map +1 -1
- package/dist/engine/triggers.js +21 -11
- 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 +98 -10
- 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-lifecycle.mjs +608 -0
- package/hooks/crbro-subagent.mjs +17 -4
- package/package.json +2 -1
package/dist/engine/triggers.js
CHANGED
|
@@ -24,6 +24,7 @@ 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");
|
|
@@ -207,18 +208,27 @@ function lessonsFor(index, command, max = exports.MAX_LESSONS) {
|
|
|
207
208
|
function triggerIndexPath(brain) {
|
|
208
209
|
return node_path_1.default.join(brain.paths.search, exports.TRIGGER_FILE);
|
|
209
210
|
}
|
|
210
|
-
/**
|
|
211
|
-
async function
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
neurons.push(n);
|
|
219
|
-
}
|
|
220
|
-
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);
|
|
221
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);
|
|
222
232
|
const index = buildTriggerIndex(neurons);
|
|
223
233
|
await (0, fs_js_1.writeJSON)(triggerIndexPath(brain), index, { pretty: false });
|
|
224
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;;;;;;AAoGhD,sCAsBC;AAOD,kCAgBC;AAED,8CAqBC;AAGD,gCAOC;AAED,4CAEC;AAGD,
|
|
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":";AAAA,mEAAmE;AACnE,EAAE;AACF,6EAA6E;AAC7E,2EAA2E;AAC3E,8EAA8E;AAC9E,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,sFAAsF;AACtF,8EAA8E;AAC9E,qEAAqE;AACrE,EAAE;AACF,6EAA6E;AAC7E,gFAAgF;AAChF,+EAA+E;AAC/E,wEAAwE;AACxE,EAAE;AACF,+EAA+E;AAC/E,uEAAuE;AACvE,8EAA8E;AAC9E,+BAA+B;AAC/B,EAAE;AACF,6EAA6E;AAC7E,8EAA8E;AAC9E,EAAE;AACF,6EAA6E;AAC7E,6BAA6B;;AAqC7B,gCAEC;AAED,gCAEC;AA0BD,8BAsBC;AAkED,oCAwCC;AAID,kBAEC;AAcD,kCA8CC;AArQD,4DAAyJ;AAiCzJ,MAAM,MAAM,GAAG,CAAC,cAAc,EAAE,eAAe,EAAE,6BAA6B,EAAE,yBAAyB,CAAU,CAAC;AAEpH,SAAgB,UAAU;IACxB,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,2BAA2B,EAAE,CAAC,EAAE,uBAAuB,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AACxH,CAAC;AAED,SAAgB,UAAU,CAAC,CAAc;IACvC,OAAO,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,2BAA2B,GAAG,CAAC,CAAC,uBAAuB,CAAC;AACtG,CAAC;AAED,SAAS,GAAG,CAAC,IAAiB,EAAE,CAAc;IAC5C,KAAK,MAAM,CAAC,IAAI,MAAM;QAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC;AAC9B,CAAC;AAED,SAAS,GAAG,CAAC,CAAU;IACrB,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC;AAYD;;;;GAIG;AACH,SAAgB,SAAS,CAAC,KAAU;IAClC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IACnF,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACrD,MAAM,KAAK,GAAG,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7F,MAAM,EAAE,GAAG,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;QAClE,CAAC,CAAC,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IACpF,MAAM,EAAE,GAAG,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACnF,OAAO;QACL,GAAG,EAAE,EAAE;QACP,KAAK;QACL,SAAS,EAAE,KAAK,CAAC,WAAW,KAAK,IAAI;QACrC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;QACnC,MAAM,EAAE;YACN,YAAY,EAAE,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC;YACrC,aAAa,EAAE,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC;YACvC,2BAA2B,EAAE,GAAG,CAAC,KAAK,CAAC,2BAA2B,CAAC;YACnE,uBAAuB,EAAE,GAAG,CAAC,KAAK,CAAC,uBAAuB,CAAC;SAC5D;KACF,CAAC;AACJ,CAAC;AAID,sEAAsE;AACtE,MAAM,YAAY,GAAG,SAAS,CAAC;AAE/B;;;GAGG;AACH,KAAK,UAAU,YAAY,CACzB,CAAe,EAAE,KAAgB,EAAE,OAAoB,EAAE,MAAc;IAEvE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,MAAM,GAAwD,EAAE,CAAC;IACvE,IAAI,CAAC,CAAC,IAAI;QAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACxD,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IAEzE,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,MAAM,EAAE,CAAC;QACpC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC;YACH,IAAI,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,IAAA,0BAAS,EAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gBACtF,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;gBAC3B,IAAI,CAAC,CAAC;oBAAE,SAAS;gBACjB,qEAAqE;gBACrE,wCAAwC;gBACxC,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;oBAAE,SAAS;gBAC9E,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE,GAAG,MAAM;oBAAE,SAAS;gBAC7C,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;gBACvC,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,SAAS;gBAC/B,MAAM,CAAC,GAAyB,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC;gBACvF,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACxE,CAAC;qBAAM,CAAC;oBACN,KAAK,MAAM,CAAC,IAAI,MAAM;wBAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjF,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,2DAA2D,CAAC,CAAC;IACzE,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE;QAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAElD,MAAM,IAAI,GAAY,EAAE,CAAC;IACzB,MAAM,SAAS,GAAY,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACpD,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,UAAU,EAAE,CAAC;QAC3C,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;IACD,OAAO;QACL,KAAK,EAAE;YACL,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,OAAO,EAAE,CAAC,CAAC,SAAS;YACpB,aAAa,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE;YAChD,IAAI;YACJ,SAAS;YACT,cAAc,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM;SACnC;QACD,KAAK;KACN,CAAC;AACJ,CAAC;AAIM,KAAK,UAAU,YAAY,CAAC,OAAqB,EAAE;IACxD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAA,mCAAkB,GAAE,CAAC;IAC/C,MAAM,QAAQ,GAAG,MAAM,IAAA,6BAAY,EAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,IAAA,6BAAY,GAAE,CAAC;IAC7B,MAAM,MAAM,GAAgB;QAC1B,IAAI;QACJ,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI;QACvB,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;QAC5E,UAAU,EAAE,CAAC;QACb,YAAY,EAAE,CAAC;QACf,eAAe,EAAE,CAAC;KACnB,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC1G,0EAA0E;IAC1E,uEAAuE;IACvE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QACxC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACvE,MAAM,CAAC,UAAU,IAAI,KAAK,CAAC;QAC3B,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAChG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QACpC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,WAAW,CAAU,EAAE,CAAC;YAClD,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBACrD,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC;gBAC1G,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAChB,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAChB,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5B,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC;IACnC,MAAM,CAAC,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC;IACzC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,mEAAmE;AAEnE,SAAgB,GAAG,CAAC,CAAS;IAC3B,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,SAAS,CAAC,CAAU;IAC3B,MAAM,CAAC,GAAG,UAAU,EAAE,CAAC;IACvB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5C,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,GAAG,CAAC,KAAa,EAAE,CAAc,EAAE,CAAS;IACnD,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,2BAA2B,EAAE,CAAC,CAAC,uBAAuB,EAAE,CAAC,CAAC,QAAQ,CAAC;SACjH,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1C,OAAO,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC;AACvC,CAAC;AAED,SAAgB,WAAW,CAAC,CAAc,EAAE,OAAyB,EAAE;IACrE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;IAC3B,MAAM,CAAC,GAAa,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;IAC9D,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACX,CAAC,CAAC,IAAI,CAAC,mBAAmB,MAAM,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,eAAe,CAAC,CAAC,UAAU,aAAa,CAAC,CAAC;IACjG,CAAC,CAAC,IAAI,CAAC,kGAAkG,CAAC,CAAC;IAC3G,CAAC,CAAC,IAAI,CAAC,kFAAkF,CAAC,CAAC;IAC3F,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACX,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,CAAC,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,IAAI,mBAAmB,CAAC,CAAC;QACtE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACX,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACzH,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7G,CAAC,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IAC3C,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ;YAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACxD,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ;YAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC;IACD,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEX,MAAM,MAAM,GAAG,CAAC,CAAe,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IACvG,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnC,CAAC,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,MAAM,wBAAwB,MAAM,CAAC,MAAM,EAAE,mDAAmD,CAAC,CAAC;IAChL,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC5D,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAChE,CAAC,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,0BAA0B,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,cAAc,SAAS,CAAC,CAAC;IAC5K,CAAC;IACD,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC;QACxC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACX,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,YAAY,4DAA4D,CAAC,CAAC,eAAe,YAAY,CAAC,CAAC;IACtI,CAAC;IACD,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACX,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC"}
|
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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"}
|