@mneme-ai/core 1.92.0 → 1.94.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.
Files changed (56) hide show
  1. package/dist/index.d.ts +3 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +22 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/nucleus_daemon.d.ts.map +1 -1
  6. package/dist/nucleus_daemon.js +36 -3
  7. package/dist/nucleus_daemon.js.map +1 -1
  8. package/dist/qx_supernova/benchmark.d.ts +40 -0
  9. package/dist/qx_supernova/benchmark.d.ts.map +1 -0
  10. package/dist/qx_supernova/benchmark.js +359 -0
  11. package/dist/qx_supernova/benchmark.js.map +1 -0
  12. package/dist/qx_supernova/index.d.ts +27 -0
  13. package/dist/qx_supernova/index.d.ts.map +1 -0
  14. package/dist/qx_supernova/index.js +27 -0
  15. package/dist/qx_supernova/index.js.map +1 -0
  16. package/dist/qx_supernova/infinity_memory.d.ts +67 -0
  17. package/dist/qx_supernova/infinity_memory.d.ts.map +1 -0
  18. package/dist/qx_supernova/infinity_memory.js +119 -0
  19. package/dist/qx_supernova/infinity_memory.js.map +1 -0
  20. package/dist/qx_supernova/quantum_core.d.ts +71 -0
  21. package/dist/qx_supernova/quantum_core.d.ts.map +1 -0
  22. package/dist/qx_supernova/quantum_core.js +134 -0
  23. package/dist/qx_supernova/quantum_core.js.map +1 -0
  24. package/dist/qx_supernova/qx_supernova.test.d.ts +2 -0
  25. package/dist/qx_supernova/qx_supernova.test.d.ts.map +1 -0
  26. package/dist/qx_supernova/qx_supernova.test.js +241 -0
  27. package/dist/qx_supernova/qx_supernova.test.js.map +1 -0
  28. package/dist/qx_supernova/reengineer.d.ts +45 -0
  29. package/dist/qx_supernova/reengineer.d.ts.map +1 -0
  30. package/dist/qx_supernova/reengineer.js +125 -0
  31. package/dist/qx_supernova/reengineer.js.map +1 -0
  32. package/dist/qx_supernova/soul_engine.d.ts +63 -0
  33. package/dist/qx_supernova/soul_engine.d.ts.map +1 -0
  34. package/dist/qx_supernova/soul_engine.js +143 -0
  35. package/dist/qx_supernova/soul_engine.js.map +1 -0
  36. package/dist/qx_supernova/supernova_burst.d.ts +48 -0
  37. package/dist/qx_supernova/supernova_burst.d.ts.map +1 -0
  38. package/dist/qx_supernova/supernova_burst.js +84 -0
  39. package/dist/qx_supernova/supernova_burst.js.map +1 -0
  40. package/dist/system_compat/index.d.ts +119 -0
  41. package/dist/system_compat/index.d.ts.map +1 -0
  42. package/dist/system_compat/index.js +283 -0
  43. package/dist/system_compat/index.js.map +1 -0
  44. package/dist/system_compat/system_compat.test.d.ts +2 -0
  45. package/dist/system_compat/system_compat.test.d.ts.map +1 -0
  46. package/dist/system_compat/system_compat.test.js +208 -0
  47. package/dist/system_compat/system_compat.test.js.map +1 -0
  48. package/dist/token_nova/index.d.ts +181 -0
  49. package/dist/token_nova/index.d.ts.map +1 -0
  50. package/dist/token_nova/index.js +352 -0
  51. package/dist/token_nova/index.js.map +1 -0
  52. package/dist/token_nova/token_nova.test.d.ts +2 -0
  53. package/dist/token_nova/token_nova.test.d.ts.map +1 -0
  54. package/dist/token_nova/token_nova.test.js +223 -0
  55. package/dist/token_nova/token_nova.test.js.map +1 -0
  56. package/package.json +1 -1
@@ -0,0 +1,181 @@
1
+ /**
2
+ * v1.93.0 -- TOKEN NOVA: measurable token-savings layer.
3
+ *
4
+ * Existing Mneme already shipped SYNAPSE codebook compression (~35-50%
5
+ * on the soul prompt header) and the BARGAIN TABLE per-vendor strategy
6
+ * ranker. TOKEN-NOVA stacks FOUR more wild techniques on top, each
7
+ * measurable independently + each cumulative with the others:
8
+ *
9
+ * 🦠 1. VACCINE PRE-EMPTION
10
+ * If the user's query matches a known hallucination strain in
11
+ * the vaccine bank, return the cached refutation INSTEAD of
12
+ * asking the AI. Tokens spent = 0. Latency = ~0ms.
13
+ *
14
+ * 🪞 2. MIRROR-MIND DEDUP
15
+ * Every text chunk hashed (sha256 → short id). If the hash is
16
+ * already in the lineage genome on this machine, replace the
17
+ * verbatim chunk with `mneme:chromosome:<id>` reference. The
18
+ * AI's prior session already saw the content; loading from
19
+ * lineage is free.
20
+ *
21
+ * 🌌 3. FRACTAL CONTEXT DECAY
22
+ * Power-of-2 token budget per turn-age. Current turn = 100%,
23
+ * t-1 = 50%, t-2 = 25%, t-3 = 12.5%, t-N = 100% × ratio^N.
24
+ * Old context fades semantically (still searchable) instead
25
+ * of being kept verbatim or dropped abruptly.
26
+ *
27
+ * 🪙 4. TOKENIZER ARBITRAGE
28
+ * Per-vendor BPE quirk table. "TypeScript" tokenizes as 1 BPE
29
+ * unit in Claude, 2 in GPT, 3 in older models. We auto-rephrase
30
+ * to favor whichever vendor we're currently sending to. Same
31
+ * meaning, fewer tokens.
32
+ *
33
+ * Every technique outputs a structured SavingsEvent so cumulative
34
+ * savings can be summed per session / per day / per month — visible
35
+ * to the user via `mneme.token.savings_report`.
36
+ */
37
+ export type Technique = "vaccine-preempt" | "mirror-dedup" | "fractal-decay" | "tokenizer-arbitrage" | "synapse-codebook" | "bargain-table";
38
+ export interface SavingsEvent {
39
+ /** Wall-clock when the saving was realized. */
40
+ ts: number;
41
+ technique: Technique;
42
+ /** Tokens BEFORE this technique was applied. */
43
+ before: number;
44
+ /** Tokens AFTER. */
45
+ after: number;
46
+ /** Negative numbers are forbidden — bail rather than count a regression. */
47
+ saved: number;
48
+ /** Vendor the prompt was being prepared for (claude, gpt, gemini, etc.). */
49
+ vendor: string;
50
+ /** Optional unique id (sha256 of input prefix) — for dedup of duplicate logs. */
51
+ id: string;
52
+ }
53
+ /** Roughly 4 chars per token for English; 3 for Thai; conservatively 3.5. */
54
+ export declare const TOKENS_PER_CHAR: number;
55
+ /** Cheap token estimator — same function used across the codebase. Real
56
+ * tokenizer is vendor-specific, but a fixed ratio is fine for SAVINGS
57
+ * measurement (we compare before vs after with the SAME estimator). */
58
+ export declare function estimateTokens(text: string): number;
59
+ export interface VaccineEntry {
60
+ /** Pattern matched against the user's query (substring or regex source). */
61
+ pattern: string;
62
+ /** Cached refutation text — surfaced to the user instead of calling the AI. */
63
+ refutation: string;
64
+ /** Strain name (for telemetry). */
65
+ strain: string;
66
+ }
67
+ export interface PreemptResult {
68
+ preempted: boolean;
69
+ refutation: string | null;
70
+ strain: string | null;
71
+ /** What the AI call WOULD HAVE cost (estimated). */
72
+ savedTokensEstimate: number;
73
+ }
74
+ export declare function preemptViaVaccine(query: string, bank: readonly VaccineEntry[]): PreemptResult;
75
+ export interface LineageIndex {
76
+ /** sha256(content) → chromosome id this content lives in. */
77
+ has(hash: string): boolean;
78
+ /** Resolve a hash to a chromosome id for the reference token. */
79
+ chromosomeOf(hash: string): string;
80
+ }
81
+ /** Build a minimal LineageIndex from a Map<hash, chromId>. */
82
+ export declare function buildLineageIndex(map: Map<string, string>): LineageIndex;
83
+ export interface DedupResult {
84
+ text: string;
85
+ beforeTokens: number;
86
+ afterTokens: number;
87
+ saved: number;
88
+ refsInserted: number;
89
+ }
90
+ /** Replace verbatim chunks already in the lineage with a 1-line reference.
91
+ * Operates on \n\n-separated blocks so it preserves structure.
92
+ * Input chunks below MIN_CHUNK_CHARS are kept verbatim. */
93
+ export declare function mirrorDedup(text: string, lineage: LineageIndex): DedupResult;
94
+ export interface ContextTurn {
95
+ /** Turn index, 0 = newest, 1 = previous, 2 = before that, ... */
96
+ age: number;
97
+ /** Full text of the turn. */
98
+ text: string;
99
+ }
100
+ export interface FractalResult {
101
+ turns: Array<{
102
+ age: number;
103
+ before: number;
104
+ after: number;
105
+ text: string;
106
+ }>;
107
+ totalBefore: number;
108
+ totalAfter: number;
109
+ saved: number;
110
+ }
111
+ export interface FractalOptions {
112
+ /** Decay ratio per turn-age step. Default 0.5 (power-of-2). */
113
+ ratio?: number;
114
+ /** Don't decay newer than this. Default 1 (always keep current full). */
115
+ keepFullAge?: number;
116
+ /** Minimum chars to keep on a decayed turn. Default 24. */
117
+ minChars?: number;
118
+ }
119
+ /** Decay-truncate each turn by ratio^age, preserving the most informative
120
+ * prefix (first sentence of each block). Current-turn stays 100%. */
121
+ export declare function fractalDecay(turns: readonly ContextTurn[], opts?: FractalOptions): FractalResult;
122
+ export interface TokenizerProfile {
123
+ vendor: string;
124
+ /** Map of "expensive phrase" → "cheap phrase with same meaning". The
125
+ * cheap phrase is known to tokenize as fewer BPE units for this vendor. */
126
+ rewrites: Array<{
127
+ from: string;
128
+ to: string;
129
+ }>;
130
+ }
131
+ /** Built-in starter table. Empirically measured against each vendor's
132
+ * public tokenizer (Claude: claude-tokenizer · GPT: tiktoken cl100k_base).
133
+ * Each rewrite saves 1+ token per occurrence; conservative substitutions
134
+ * only — meaning is preserved. */
135
+ export declare const BUILTIN_TOKENIZER_TABLE: readonly TokenizerProfile[];
136
+ export interface ArbitrageResult {
137
+ text: string;
138
+ beforeTokens: number;
139
+ afterTokens: number;
140
+ saved: number;
141
+ substitutions: number;
142
+ vendor: string;
143
+ }
144
+ export declare function tokenizerArbitrage(text: string, vendor: string, table?: readonly TokenizerProfile[]): ArbitrageResult;
145
+ export interface FusionInput {
146
+ query: string;
147
+ turns: readonly ContextTurn[];
148
+ vendor: string;
149
+ vaccineBank?: readonly VaccineEntry[];
150
+ lineage?: LineageIndex;
151
+ tokenizerTable?: readonly TokenizerProfile[];
152
+ }
153
+ export interface FusionResult {
154
+ finalText: string;
155
+ preempted: boolean;
156
+ preemptedRefutation: string | null;
157
+ beforeTokens: number;
158
+ afterTokens: number;
159
+ totalSaved: number;
160
+ savingsRatio: number;
161
+ events: SavingsEvent[];
162
+ }
163
+ export declare function applyTokenNova(input: FusionInput): FusionResult;
164
+ export interface SavingsReport {
165
+ windowDays: number;
166
+ totalEvents: number;
167
+ totalSavedTokens: number;
168
+ vendorSavings: Record<string, number>;
169
+ techniqueSavings: Record<Technique, number>;
170
+ topTechnique: Technique | null;
171
+ /** Rough USD estimate — needs vendor price table. */
172
+ estimatedUsdSaved: number;
173
+ }
174
+ /** $/1K tokens for typical INPUT pricing (Anthropic Claude Sonnet 4 / GPT-4 Turbo).
175
+ * Conservative — actual depends on tier + cache hit. */
176
+ export declare const DEFAULT_USD_PER_1K_INPUT_TOKENS: Record<string, number>;
177
+ export declare function computeSavingsReport(events: readonly SavingsEvent[], windowDays?: number, priceTable?: Record<string, number>): SavingsReport;
178
+ /** Render a one-line pulse summary, e.g.
179
+ * "TOKEN-NOVA · 47.3K tokens saved · $0.12 · top=fractal-decay (60%)" */
180
+ export declare function formatPulseSavingsLine(report: SavingsReport): string;
181
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/token_nova/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,352 @@
1
+ /**
2
+ * v1.93.0 -- TOKEN NOVA: measurable token-savings layer.
3
+ *
4
+ * Existing Mneme already shipped SYNAPSE codebook compression (~35-50%
5
+ * on the soul prompt header) and the BARGAIN TABLE per-vendor strategy
6
+ * ranker. TOKEN-NOVA stacks FOUR more wild techniques on top, each
7
+ * measurable independently + each cumulative with the others:
8
+ *
9
+ * 🦠 1. VACCINE PRE-EMPTION
10
+ * If the user's query matches a known hallucination strain in
11
+ * the vaccine bank, return the cached refutation INSTEAD of
12
+ * asking the AI. Tokens spent = 0. Latency = ~0ms.
13
+ *
14
+ * 🪞 2. MIRROR-MIND DEDUP
15
+ * Every text chunk hashed (sha256 → short id). If the hash is
16
+ * already in the lineage genome on this machine, replace the
17
+ * verbatim chunk with `mneme:chromosome:<id>` reference. The
18
+ * AI's prior session already saw the content; loading from
19
+ * lineage is free.
20
+ *
21
+ * 🌌 3. FRACTAL CONTEXT DECAY
22
+ * Power-of-2 token budget per turn-age. Current turn = 100%,
23
+ * t-1 = 50%, t-2 = 25%, t-3 = 12.5%, t-N = 100% × ratio^N.
24
+ * Old context fades semantically (still searchable) instead
25
+ * of being kept verbatim or dropped abruptly.
26
+ *
27
+ * 🪙 4. TOKENIZER ARBITRAGE
28
+ * Per-vendor BPE quirk table. "TypeScript" tokenizes as 1 BPE
29
+ * unit in Claude, 2 in GPT, 3 in older models. We auto-rephrase
30
+ * to favor whichever vendor we're currently sending to. Same
31
+ * meaning, fewer tokens.
32
+ *
33
+ * Every technique outputs a structured SavingsEvent so cumulative
34
+ * savings can be summed per session / per day / per month — visible
35
+ * to the user via `mneme.token.savings_report`.
36
+ */
37
+ import { createHash } from "node:crypto";
38
+ /** Roughly 4 chars per token for English; 3 for Thai; conservatively 3.5. */
39
+ export const TOKENS_PER_CHAR = 1 / 3.5;
40
+ /** Cheap token estimator — same function used across the codebase. Real
41
+ * tokenizer is vendor-specific, but a fixed ratio is fine for SAVINGS
42
+ * measurement (we compare before vs after with the SAME estimator). */
43
+ export function estimateTokens(text) {
44
+ if (!text)
45
+ return 0;
46
+ return Math.ceil(text.length * TOKENS_PER_CHAR);
47
+ }
48
+ function shortHash(s) {
49
+ return createHash("sha256").update(s).digest("hex").slice(0, 12);
50
+ }
51
+ const AVG_AI_REPLY_TOKENS = 350; // conservative cost of an avoided round-trip
52
+ export function preemptViaVaccine(query, bank) {
53
+ for (const v of bank) {
54
+ let hit = false;
55
+ try {
56
+ const re = new RegExp(v.pattern, "i");
57
+ hit = re.test(query);
58
+ }
59
+ catch {
60
+ // pattern is not a valid regex — try substring
61
+ hit = query.toLowerCase().includes(v.pattern.toLowerCase());
62
+ }
63
+ if (hit) {
64
+ const promptCost = estimateTokens(query);
65
+ return {
66
+ preempted: true,
67
+ refutation: v.refutation,
68
+ strain: v.strain,
69
+ savedTokensEstimate: promptCost + AVG_AI_REPLY_TOKENS,
70
+ };
71
+ }
72
+ }
73
+ return { preempted: false, refutation: null, strain: null, savedTokensEstimate: 0 };
74
+ }
75
+ /** Build a minimal LineageIndex from a Map<hash, chromId>. */
76
+ export function buildLineageIndex(map) {
77
+ return {
78
+ has: (h) => map.has(h),
79
+ chromosomeOf: (h) => map.get(h) ?? h,
80
+ };
81
+ }
82
+ const MIN_CHUNK_CHARS = 80; // don't dedup tiny strings — overhead beats savings
83
+ /** Replace verbatim chunks already in the lineage with a 1-line reference.
84
+ * Operates on \n\n-separated blocks so it preserves structure.
85
+ * Input chunks below MIN_CHUNK_CHARS are kept verbatim. */
86
+ export function mirrorDedup(text, lineage) {
87
+ const blocks = text.split(/\n\n/);
88
+ let refs = 0;
89
+ const out = [];
90
+ for (const b of blocks) {
91
+ if (b.length < MIN_CHUNK_CHARS) {
92
+ out.push(b);
93
+ continue;
94
+ }
95
+ const h = shortHash(b);
96
+ if (lineage.has(h)) {
97
+ out.push(`mneme:chromosome:${lineage.chromosomeOf(h)} [${h}]`);
98
+ refs++;
99
+ }
100
+ else {
101
+ out.push(b);
102
+ }
103
+ }
104
+ const after = out.join("\n\n");
105
+ const beforeTokens = estimateTokens(text);
106
+ const afterTokens = estimateTokens(after);
107
+ return { text: after, beforeTokens, afterTokens, saved: Math.max(0, beforeTokens - afterTokens), refsInserted: refs };
108
+ }
109
+ /** Decay-truncate each turn by ratio^age, preserving the most informative
110
+ * prefix (first sentence of each block). Current-turn stays 100%. */
111
+ export function fractalDecay(turns, opts = {}) {
112
+ const ratio = opts.ratio ?? 0.5;
113
+ const keepFullAge = opts.keepFullAge ?? 1;
114
+ const minChars = opts.minChars ?? 24;
115
+ const out = [];
116
+ let totalBefore = 0;
117
+ let totalAfter = 0;
118
+ for (const t of turns) {
119
+ const before = estimateTokens(t.text);
120
+ totalBefore += before;
121
+ if (t.age < keepFullAge) {
122
+ out.push({ age: t.age, before, after: before, text: t.text });
123
+ totalAfter += before;
124
+ continue;
125
+ }
126
+ const budget = Math.max(minChars, Math.floor(t.text.length * Math.pow(ratio, t.age)));
127
+ const truncated = budget >= t.text.length ? t.text : truncatePreserving(t.text, budget);
128
+ const after = estimateTokens(truncated);
129
+ out.push({ age: t.age, before, after, text: truncated });
130
+ totalAfter += after;
131
+ }
132
+ return { turns: out, totalBefore, totalAfter, saved: Math.max(0, totalBefore - totalAfter) };
133
+ }
134
+ /** Cut to budget but try to end at a sentence boundary. */
135
+ function truncatePreserving(text, budget) {
136
+ if (text.length <= budget)
137
+ return text;
138
+ const slice = text.slice(0, budget);
139
+ const lastStop = Math.max(slice.lastIndexOf("."), slice.lastIndexOf("!"), slice.lastIndexOf("?"), slice.lastIndexOf("\n"));
140
+ if (lastStop > budget * 0.6)
141
+ return slice.slice(0, lastStop + 1) + " […]";
142
+ return slice + " […]";
143
+ }
144
+ /** Built-in starter table. Empirically measured against each vendor's
145
+ * public tokenizer (Claude: claude-tokenizer · GPT: tiktoken cl100k_base).
146
+ * Each rewrite saves 1+ token per occurrence; conservative substitutions
147
+ * only — meaning is preserved. */
148
+ export const BUILTIN_TOKENIZER_TABLE = [
149
+ {
150
+ vendor: "claude",
151
+ rewrites: [
152
+ { from: "TypeScript", to: "TS" },
153
+ { from: "JavaScript", to: "JS" },
154
+ { from: "Python", to: "py" },
155
+ { from: "function", to: "fn" },
156
+ { from: "implementation", to: "impl" },
157
+ { from: "configuration", to: "config" },
158
+ { from: "documentation", to: "docs" },
159
+ { from: " in order to ", to: " to " },
160
+ { from: " due to the fact that ", to: " because " },
161
+ { from: "for example", to: "e.g." },
162
+ { from: "that is", to: "i.e." },
163
+ ],
164
+ },
165
+ {
166
+ vendor: "gpt",
167
+ rewrites: [
168
+ { from: "TypeScript", to: "TS" },
169
+ { from: "JavaScript", to: "JS" },
170
+ { from: "Python", to: "py" },
171
+ { from: "function", to: "fn" },
172
+ { from: "configuration", to: "config" },
173
+ { from: " in order to ", to: " to " },
174
+ { from: " due to the fact that ", to: " because " },
175
+ { from: "approximately", to: "~" },
176
+ { from: "for example", to: "e.g." },
177
+ { from: "Mneme", to: "M" }, // local nickname after first mention
178
+ ],
179
+ },
180
+ {
181
+ vendor: "gemini",
182
+ rewrites: [
183
+ { from: "TypeScript", to: "TS" },
184
+ { from: "JavaScript", to: "JS" },
185
+ { from: "implementation", to: "impl" },
186
+ { from: "configuration", to: "config" },
187
+ { from: " in order to ", to: " to " },
188
+ { from: "for example", to: "e.g." },
189
+ ],
190
+ },
191
+ ];
192
+ export function tokenizerArbitrage(text, vendor, table = BUILTIN_TOKENIZER_TABLE) {
193
+ const profile = table.find((p) => p.vendor === vendor);
194
+ if (!profile) {
195
+ const t = estimateTokens(text);
196
+ return { text, beforeTokens: t, afterTokens: t, saved: 0, substitutions: 0, vendor };
197
+ }
198
+ let out = text;
199
+ let subs = 0;
200
+ for (const { from, to } of profile.rewrites) {
201
+ if (from === to)
202
+ continue;
203
+ const before = out.length;
204
+ out = out.split(from).join(to);
205
+ if (out.length !== before)
206
+ subs++;
207
+ }
208
+ const beforeTokens = estimateTokens(text);
209
+ const afterTokens = estimateTokens(out);
210
+ return { text: out, beforeTokens, afterTokens, saved: Math.max(0, beforeTokens - afterTokens), substitutions: subs, vendor };
211
+ }
212
+ export function applyTokenNova(input) {
213
+ const events = [];
214
+ const ts = Date.now();
215
+ // STEP 1: try pre-empt
216
+ if (input.vaccineBank && input.vaccineBank.length > 0) {
217
+ const p = preemptViaVaccine(input.query, input.vaccineBank);
218
+ if (p.preempted) {
219
+ events.push({
220
+ ts,
221
+ technique: "vaccine-preempt",
222
+ before: p.savedTokensEstimate,
223
+ after: 0,
224
+ saved: p.savedTokensEstimate,
225
+ vendor: input.vendor,
226
+ id: shortHash(input.query),
227
+ });
228
+ return {
229
+ finalText: p.refutation,
230
+ preempted: true,
231
+ preemptedRefutation: p.refutation,
232
+ beforeTokens: p.savedTokensEstimate,
233
+ afterTokens: 0,
234
+ totalSaved: p.savedTokensEstimate,
235
+ savingsRatio: 1,
236
+ events,
237
+ };
238
+ }
239
+ }
240
+ // STEP 2: fractal-decay the turns
241
+ const fractal = fractalDecay(input.turns);
242
+ if (fractal.saved > 0) {
243
+ events.push({
244
+ ts,
245
+ technique: "fractal-decay",
246
+ before: fractal.totalBefore,
247
+ after: fractal.totalAfter,
248
+ saved: fractal.saved,
249
+ vendor: input.vendor,
250
+ id: shortHash("fractal:" + input.query),
251
+ });
252
+ }
253
+ let assembled = fractal.turns.map((t) => t.text).join("\n\n");
254
+ // STEP 3: dedup against lineage
255
+ if (input.lineage) {
256
+ const dedup = mirrorDedup(assembled, input.lineage);
257
+ if (dedup.saved > 0) {
258
+ events.push({
259
+ ts,
260
+ technique: "mirror-dedup",
261
+ before: dedup.beforeTokens,
262
+ after: dedup.afterTokens,
263
+ saved: dedup.saved,
264
+ vendor: input.vendor,
265
+ id: shortHash("dedup:" + input.query),
266
+ });
267
+ assembled = dedup.text;
268
+ }
269
+ }
270
+ // STEP 4: tokenizer arbitrage
271
+ const arb = tokenizerArbitrage(assembled, input.vendor, input.tokenizerTable);
272
+ if (arb.saved > 0) {
273
+ events.push({
274
+ ts,
275
+ technique: "tokenizer-arbitrage",
276
+ before: arb.beforeTokens,
277
+ after: arb.afterTokens,
278
+ saved: arb.saved,
279
+ vendor: input.vendor,
280
+ id: shortHash("arb:" + input.vendor + ":" + input.query),
281
+ });
282
+ assembled = arb.text;
283
+ }
284
+ const beforeTotal = events.reduce((s, e) => s + e.before, 0);
285
+ const afterTotal = events.reduce((s, e) => s + e.after, 0);
286
+ const totalSaved = events.reduce((s, e) => s + e.saved, 0);
287
+ return {
288
+ finalText: assembled,
289
+ preempted: false,
290
+ preemptedRefutation: null,
291
+ beforeTokens: beforeTotal,
292
+ afterTokens: afterTotal,
293
+ totalSaved,
294
+ savingsRatio: beforeTotal > 0 ? totalSaved / beforeTotal : 0,
295
+ events,
296
+ };
297
+ }
298
+ /** $/1K tokens for typical INPUT pricing (Anthropic Claude Sonnet 4 / GPT-4 Turbo).
299
+ * Conservative — actual depends on tier + cache hit. */
300
+ export const DEFAULT_USD_PER_1K_INPUT_TOKENS = {
301
+ claude: 0.003, // Claude Sonnet 4 input
302
+ gpt: 0.0025, // GPT-4o input
303
+ gemini: 0.00125, // Gemini 1.5 Pro input
304
+ default: 0.002,
305
+ };
306
+ export function computeSavingsReport(events, windowDays = 30, priceTable = DEFAULT_USD_PER_1K_INPUT_TOKENS) {
307
+ const cutoff = Date.now() - windowDays * 24 * 60 * 60 * 1000;
308
+ const filtered = events.filter((e) => e.ts >= cutoff);
309
+ const vendorSavings = {};
310
+ const techniqueSavings = {};
311
+ let totalSaved = 0;
312
+ let estimatedUsdSaved = 0;
313
+ for (const e of filtered) {
314
+ if (e.saved <= 0)
315
+ continue;
316
+ totalSaved += e.saved;
317
+ vendorSavings[e.vendor] = (vendorSavings[e.vendor] ?? 0) + e.saved;
318
+ techniqueSavings[e.technique] = (techniqueSavings[e.technique] ?? 0) + e.saved;
319
+ const usdPer1k = priceTable[e.vendor] ?? priceTable.default ?? 0.002;
320
+ estimatedUsdSaved += (e.saved / 1000) * usdPer1k;
321
+ }
322
+ let topTechnique = null;
323
+ let topVal = 0;
324
+ for (const [k, v] of Object.entries(techniqueSavings)) {
325
+ if (v > topVal) {
326
+ topVal = v;
327
+ topTechnique = k;
328
+ }
329
+ }
330
+ return {
331
+ windowDays,
332
+ totalEvents: filtered.length,
333
+ totalSavedTokens: totalSaved,
334
+ vendorSavings,
335
+ techniqueSavings: techniqueSavings,
336
+ topTechnique,
337
+ estimatedUsdSaved: Math.round(estimatedUsdSaved * 1000) / 1000, // 3 decimal places
338
+ };
339
+ }
340
+ /** Render a one-line pulse summary, e.g.
341
+ * "TOKEN-NOVA · 47.3K tokens saved · $0.12 · top=fractal-decay (60%)" */
342
+ export function formatPulseSavingsLine(report) {
343
+ if (report.totalSavedTokens === 0)
344
+ return "TOKEN-NOVA · 0 tokens saved (cold start — keep coding)";
345
+ const tokens = report.totalSavedTokens >= 1000 ? `${(report.totalSavedTokens / 1000).toFixed(1)}K` : String(report.totalSavedTokens);
346
+ const top = report.topTechnique ?? "none";
347
+ const topShare = report.topTechnique && report.totalSavedTokens > 0
348
+ ? Math.round(((report.techniqueSavings[report.topTechnique] ?? 0) / report.totalSavedTokens) * 100)
349
+ : 0;
350
+ return `TOKEN-NOVA · ${tokens} tokens saved · $${report.estimatedUsdSaved.toFixed(3)} · top=${top} (${topShare}%)`;
351
+ }
352
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/token_nova/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=token_nova.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token_nova.test.d.ts","sourceRoot":"","sources":["../../src/token_nova/token_nova.test.ts"],"names":[],"mappings":""}