@nxuss/lemma 1.40.0 → 1.41.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 (231) hide show
  1. package/README.md +45 -14
  2. package/bin/brain-ingest.js +41 -0
  3. package/bin/init.js +92 -92
  4. package/bin/postinstall.js +58 -4
  5. package/dashboard/dist/assets/index-Ca05LJvs.js +453 -0
  6. package/dashboard/dist/assets/{index-DNTQXLER.css → index-DdEVyDRj.css} +1 -1
  7. package/dashboard/dist/index.html +2 -2
  8. package/dist/cjs/cli/hostHooks.d.ts +14 -1
  9. package/dist/cjs/cli/hostHooks.d.ts.map +1 -1
  10. package/dist/cjs/cli/hostHooks.js +53 -6
  11. package/dist/cjs/cli/hostHooks.js.map +1 -1
  12. package/dist/cjs/cli/lemma-proxy.d.ts.map +1 -1
  13. package/dist/cjs/cli/lemma-proxy.js +29 -10
  14. package/dist/cjs/cli/lemma-proxy.js.map +1 -1
  15. package/dist/cjs/contracts/evidence.d.ts +8 -1
  16. package/dist/cjs/contracts/evidence.d.ts.map +1 -1
  17. package/dist/cjs/mcp/index.js +19 -0
  18. package/dist/cjs/mcp/index.js.map +1 -1
  19. package/dist/cjs/mcp/prompts.d.ts +1 -1
  20. package/dist/cjs/mcp/prompts.d.ts.map +1 -1
  21. package/dist/cjs/mcp/prompts.js +6 -16
  22. package/dist/cjs/mcp/prompts.js.map +1 -1
  23. package/dist/cjs/mcp/tool-profiles.d.ts.map +1 -1
  24. package/dist/cjs/mcp/tool-profiles.js +8 -4
  25. package/dist/cjs/mcp/tool-profiles.js.map +1 -1
  26. package/dist/cjs/mcp/tools/context-tools.d.ts.map +1 -1
  27. package/dist/cjs/mcp/tools/context-tools.js +21 -17
  28. package/dist/cjs/mcp/tools/context-tools.js.map +1 -1
  29. package/dist/cjs/mcp/tools/memory.d.ts.map +1 -1
  30. package/dist/cjs/mcp/tools/memory.js +25 -4
  31. package/dist/cjs/mcp/tools/memory.js.map +1 -1
  32. package/dist/cjs/mcp/tools/workspace.d.ts.map +1 -1
  33. package/dist/cjs/mcp/tools/workspace.js +97 -54
  34. package/dist/cjs/mcp/tools/workspace.js.map +1 -1
  35. package/dist/cjs/mcp/tools.d.ts.map +1 -1
  36. package/dist/cjs/mcp/tools.js +95 -34
  37. package/dist/cjs/mcp/tools.js.map +1 -1
  38. package/dist/cjs/mcp/utils.d.ts.map +1 -1
  39. package/dist/cjs/mcp/utils.js +6 -1
  40. package/dist/cjs/mcp/utils.js.map +1 -1
  41. package/dist/cjs/mcp/workspaceShared.d.ts.map +1 -1
  42. package/dist/cjs/mcp/workspaceShared.js +14 -9
  43. package/dist/cjs/mcp/workspaceShared.js.map +1 -1
  44. package/dist/cjs/proxy/KeyManager.d.ts +10 -0
  45. package/dist/cjs/proxy/KeyManager.d.ts.map +1 -1
  46. package/dist/cjs/proxy/KeyManager.js +45 -8
  47. package/dist/cjs/proxy/KeyManager.js.map +1 -1
  48. package/dist/cjs/security/SemanticScrubber.d.ts.map +1 -1
  49. package/dist/cjs/security/SemanticScrubber.js +19 -1
  50. package/dist/cjs/security/SemanticScrubber.js.map +1 -1
  51. package/dist/cjs/subconscious/HostRecall.d.ts +7 -5
  52. package/dist/cjs/subconscious/HostRecall.d.ts.map +1 -1
  53. package/dist/cjs/subconscious/HostRecall.js +115 -13
  54. package/dist/cjs/subconscious/HostRecall.js.map +1 -1
  55. package/dist/cjs/subconscious/TheBrainV2.d.ts +6 -1
  56. package/dist/cjs/subconscious/TheBrainV2.d.ts.map +1 -1
  57. package/dist/cjs/subconscious/TheBrainV2.js +21 -9
  58. package/dist/cjs/subconscious/TheBrainV2.js.map +1 -1
  59. package/dist/cjs/subconscious/freshness/LocalFsResolver.d.ts +3 -0
  60. package/dist/cjs/subconscious/freshness/LocalFsResolver.d.ts.map +1 -1
  61. package/dist/cjs/subconscious/freshness/LocalFsResolver.js +32 -14
  62. package/dist/cjs/subconscious/freshness/LocalFsResolver.js.map +1 -1
  63. package/dist/cjs/utils/CommandOutputDistiller.d.ts +10 -0
  64. package/dist/cjs/utils/CommandOutputDistiller.d.ts.map +1 -1
  65. package/dist/cjs/utils/CommandOutputDistiller.js +40 -2
  66. package/dist/cjs/utils/CommandOutputDistiller.js.map +1 -1
  67. package/dist/cjs/utils/ContextSqueezer.d.ts +13 -1
  68. package/dist/cjs/utils/ContextSqueezer.d.ts.map +1 -1
  69. package/dist/cjs/utils/ContextSqueezer.js +176 -3
  70. package/dist/cjs/utils/ContextSqueezer.js.map +1 -1
  71. package/dist/cjs/utils/FixCapture.d.ts.map +1 -1
  72. package/dist/cjs/utils/FixCapture.js +56 -0
  73. package/dist/cjs/utils/FixCapture.js.map +1 -1
  74. package/dist/cjs/utils/LineNumberMap.d.ts.map +1 -1
  75. package/dist/cjs/utils/LineNumberMap.js +27 -0
  76. package/dist/cjs/utils/LineNumberMap.js.map +1 -1
  77. package/dist/cjs/utils/PatchMatcher.d.ts.map +1 -1
  78. package/dist/cjs/utils/PatchMatcher.js +26 -0
  79. package/dist/cjs/utils/PatchMatcher.js.map +1 -1
  80. package/dist/cjs/utils/ProLicense.d.ts +2 -0
  81. package/dist/cjs/utils/ProLicense.d.ts.map +1 -0
  82. package/dist/cjs/utils/ProLicense.js +31 -0
  83. package/dist/cjs/utils/ProLicense.js.map +1 -0
  84. package/dist/cjs/utils/RevivalThrottle.d.ts +9 -0
  85. package/dist/cjs/utils/RevivalThrottle.d.ts.map +1 -0
  86. package/dist/cjs/utils/RevivalThrottle.js +25 -0
  87. package/dist/cjs/utils/RevivalThrottle.js.map +1 -0
  88. package/dist/cjs/utils/SavingsLedger.d.ts +58 -18
  89. package/dist/cjs/utils/SavingsLedger.d.ts.map +1 -1
  90. package/dist/cjs/utils/SavingsLedger.js +332 -179
  91. package/dist/cjs/utils/SavingsLedger.js.map +1 -1
  92. package/dist/cjs/utils/SearchCache.d.ts +2 -2
  93. package/dist/cjs/utils/SearchCache.d.ts.map +1 -1
  94. package/dist/cjs/utils/SearchCache.js +8 -6
  95. package/dist/cjs/utils/SearchCache.js.map +1 -1
  96. package/dist/cjs/utils/SessionCapture.d.ts +65 -0
  97. package/dist/cjs/utils/SessionCapture.d.ts.map +1 -0
  98. package/dist/cjs/utils/SessionCapture.js +339 -0
  99. package/dist/cjs/utils/SessionCapture.js.map +1 -0
  100. package/dist/cjs/utils/StaleDelta.d.ts +2 -0
  101. package/dist/cjs/utils/StaleDelta.d.ts.map +1 -0
  102. package/dist/cjs/utils/StaleDelta.js +60 -0
  103. package/dist/cjs/utils/StaleDelta.js.map +1 -0
  104. package/dist/cjs/utils/TokenBudgetedReader.d.ts.map +1 -1
  105. package/dist/cjs/utils/TokenBudgetedReader.js +56 -15
  106. package/dist/cjs/utils/TokenBudgetedReader.js.map +1 -1
  107. package/dist/cjs/utils/WorkspaceSearch.d.ts +8 -1
  108. package/dist/cjs/utils/WorkspaceSearch.d.ts.map +1 -1
  109. package/dist/cjs/utils/WorkspaceSearch.js +75 -5
  110. package/dist/cjs/utils/WorkspaceSearch.js.map +1 -1
  111. package/dist/cjs/utils/reportSavings.d.ts +3 -0
  112. package/dist/cjs/utils/reportSavings.d.ts.map +1 -1
  113. package/dist/cjs/utils/reportSavings.js +44 -5
  114. package/dist/cjs/utils/reportSavings.js.map +1 -1
  115. package/dist/esm/cli/hostHooks.d.ts +14 -1
  116. package/dist/esm/cli/hostHooks.d.ts.map +1 -1
  117. package/dist/esm/cli/hostHooks.js +52 -5
  118. package/dist/esm/cli/hostHooks.js.map +1 -1
  119. package/dist/esm/cli/lemma-proxy.d.ts.map +1 -1
  120. package/dist/esm/cli/lemma-proxy.js +30 -11
  121. package/dist/esm/cli/lemma-proxy.js.map +1 -1
  122. package/dist/esm/contracts/evidence.d.ts +8 -1
  123. package/dist/esm/contracts/evidence.d.ts.map +1 -1
  124. package/dist/esm/mcp/index.js +20 -1
  125. package/dist/esm/mcp/index.js.map +1 -1
  126. package/dist/esm/mcp/prompts.d.ts +1 -1
  127. package/dist/esm/mcp/prompts.d.ts.map +1 -1
  128. package/dist/esm/mcp/prompts.js +6 -16
  129. package/dist/esm/mcp/prompts.js.map +1 -1
  130. package/dist/esm/mcp/tool-profiles.d.ts.map +1 -1
  131. package/dist/esm/mcp/tool-profiles.js +8 -4
  132. package/dist/esm/mcp/tool-profiles.js.map +1 -1
  133. package/dist/esm/mcp/tools/context-tools.d.ts.map +1 -1
  134. package/dist/esm/mcp/tools/context-tools.js +21 -17
  135. package/dist/esm/mcp/tools/context-tools.js.map +1 -1
  136. package/dist/esm/mcp/tools/memory.d.ts.map +1 -1
  137. package/dist/esm/mcp/tools/memory.js +26 -5
  138. package/dist/esm/mcp/tools/memory.js.map +1 -1
  139. package/dist/esm/mcp/tools/workspace.d.ts.map +1 -1
  140. package/dist/esm/mcp/tools/workspace.js +98 -55
  141. package/dist/esm/mcp/tools/workspace.js.map +1 -1
  142. package/dist/esm/mcp/tools.d.ts.map +1 -1
  143. package/dist/esm/mcp/tools.js +94 -33
  144. package/dist/esm/mcp/tools.js.map +1 -1
  145. package/dist/esm/mcp/utils.d.ts.map +1 -1
  146. package/dist/esm/mcp/utils.js +6 -1
  147. package/dist/esm/mcp/utils.js.map +1 -1
  148. package/dist/esm/mcp/workspaceShared.d.ts.map +1 -1
  149. package/dist/esm/mcp/workspaceShared.js +14 -9
  150. package/dist/esm/mcp/workspaceShared.js.map +1 -1
  151. package/dist/esm/proxy/KeyManager.d.ts +10 -0
  152. package/dist/esm/proxy/KeyManager.d.ts.map +1 -1
  153. package/dist/esm/proxy/KeyManager.js +43 -6
  154. package/dist/esm/proxy/KeyManager.js.map +1 -1
  155. package/dist/esm/security/SemanticScrubber.d.ts.map +1 -1
  156. package/dist/esm/security/SemanticScrubber.js +19 -1
  157. package/dist/esm/security/SemanticScrubber.js.map +1 -1
  158. package/dist/esm/subconscious/HostRecall.d.ts +7 -5
  159. package/dist/esm/subconscious/HostRecall.d.ts.map +1 -1
  160. package/dist/esm/subconscious/HostRecall.js +115 -14
  161. package/dist/esm/subconscious/HostRecall.js.map +1 -1
  162. package/dist/esm/subconscious/TheBrainV2.d.ts +6 -1
  163. package/dist/esm/subconscious/TheBrainV2.d.ts.map +1 -1
  164. package/dist/esm/subconscious/TheBrainV2.js +21 -9
  165. package/dist/esm/subconscious/TheBrainV2.js.map +1 -1
  166. package/dist/esm/subconscious/freshness/LocalFsResolver.d.ts +3 -0
  167. package/dist/esm/subconscious/freshness/LocalFsResolver.d.ts.map +1 -1
  168. package/dist/esm/subconscious/freshness/LocalFsResolver.js +32 -14
  169. package/dist/esm/subconscious/freshness/LocalFsResolver.js.map +1 -1
  170. package/dist/esm/utils/CommandOutputDistiller.d.ts +10 -0
  171. package/dist/esm/utils/CommandOutputDistiller.d.ts.map +1 -1
  172. package/dist/esm/utils/CommandOutputDistiller.js +39 -2
  173. package/dist/esm/utils/CommandOutputDistiller.js.map +1 -1
  174. package/dist/esm/utils/ContextSqueezer.d.ts +13 -1
  175. package/dist/esm/utils/ContextSqueezer.d.ts.map +1 -1
  176. package/dist/esm/utils/ContextSqueezer.js +175 -3
  177. package/dist/esm/utils/ContextSqueezer.js.map +1 -1
  178. package/dist/esm/utils/FixCapture.d.ts.map +1 -1
  179. package/dist/esm/utils/FixCapture.js +56 -0
  180. package/dist/esm/utils/FixCapture.js.map +1 -1
  181. package/dist/esm/utils/LineNumberMap.d.ts.map +1 -1
  182. package/dist/esm/utils/LineNumberMap.js +27 -0
  183. package/dist/esm/utils/LineNumberMap.js.map +1 -1
  184. package/dist/esm/utils/PatchMatcher.d.ts.map +1 -1
  185. package/dist/esm/utils/PatchMatcher.js +26 -0
  186. package/dist/esm/utils/PatchMatcher.js.map +1 -1
  187. package/dist/esm/utils/ProLicense.d.ts +2 -0
  188. package/dist/esm/utils/ProLicense.d.ts.map +1 -0
  189. package/dist/esm/utils/ProLicense.js +25 -0
  190. package/dist/esm/utils/ProLicense.js.map +1 -0
  191. package/dist/esm/utils/RevivalThrottle.d.ts +9 -0
  192. package/dist/esm/utils/RevivalThrottle.d.ts.map +1 -0
  193. package/dist/esm/utils/RevivalThrottle.js +22 -0
  194. package/dist/esm/utils/RevivalThrottle.js.map +1 -0
  195. package/dist/esm/utils/SavingsLedger.d.ts +58 -18
  196. package/dist/esm/utils/SavingsLedger.d.ts.map +1 -1
  197. package/dist/esm/utils/SavingsLedger.js +332 -179
  198. package/dist/esm/utils/SavingsLedger.js.map +1 -1
  199. package/dist/esm/utils/SearchCache.d.ts +2 -2
  200. package/dist/esm/utils/SearchCache.d.ts.map +1 -1
  201. package/dist/esm/utils/SearchCache.js +8 -6
  202. package/dist/esm/utils/SearchCache.js.map +1 -1
  203. package/dist/esm/utils/SessionCapture.d.ts +65 -0
  204. package/dist/esm/utils/SessionCapture.d.ts.map +1 -0
  205. package/dist/esm/utils/SessionCapture.js +328 -0
  206. package/dist/esm/utils/SessionCapture.js.map +1 -0
  207. package/dist/esm/utils/StaleDelta.d.ts +2 -0
  208. package/dist/esm/utils/StaleDelta.d.ts.map +1 -0
  209. package/dist/esm/utils/StaleDelta.js +54 -0
  210. package/dist/esm/utils/StaleDelta.js.map +1 -0
  211. package/dist/esm/utils/TokenBudgetedReader.d.ts.map +1 -1
  212. package/dist/esm/utils/TokenBudgetedReader.js +56 -15
  213. package/dist/esm/utils/TokenBudgetedReader.js.map +1 -1
  214. package/dist/esm/utils/WorkspaceSearch.d.ts +8 -1
  215. package/dist/esm/utils/WorkspaceSearch.d.ts.map +1 -1
  216. package/dist/esm/utils/WorkspaceSearch.js +74 -5
  217. package/dist/esm/utils/WorkspaceSearch.js.map +1 -1
  218. package/dist/esm/utils/reportSavings.d.ts +3 -0
  219. package/dist/esm/utils/reportSavings.d.ts.map +1 -1
  220. package/dist/esm/utils/reportSavings.js +42 -5
  221. package/dist/esm/utils/reportSavings.js.map +1 -1
  222. package/package.json +4 -4
  223. package/dashboard/dist/assets/index-DzL_Zu3m.js +0 -452
  224. package/dist/cjs/examples/basic-usage.d.ts +0 -12
  225. package/dist/cjs/examples/basic-usage.d.ts.map +0 -1
  226. package/dist/cjs/examples/basic-usage.js +0 -128
  227. package/dist/cjs/examples/basic-usage.js.map +0 -1
  228. package/dist/esm/examples/basic-usage.d.ts +0 -12
  229. package/dist/esm/examples/basic-usage.d.ts.map +0 -1
  230. package/dist/esm/examples/basic-usage.js +0 -126
  231. package/dist/esm/examples/basic-usage.js.map +0 -1
@@ -17,6 +17,8 @@ const path_1 = __importDefault(require("path"));
17
17
  const AtomicFile_1 = require("./AtomicFile");
18
18
  /** Hard cap on tracked tool names so a hostile caller cannot grow ledger.json unbounded. */
19
19
  const MAX_ATTRIBUTED_TOOLS = 300;
20
+ /** tool x host pairs: ~90 tools times a handful of hosts, so room for the product but still bounded. */
21
+ const MAX_ATTRIBUTED_PAIRS = 1000;
20
22
  /** Daily totals kept on disk: enough for any window the dashboard shows, bounded. */
21
23
  const MAX_DAYS_KEPT = 90;
22
24
  const RECENT_WINDOW_DAYS = 7;
@@ -37,7 +39,7 @@ function readRollup(raw) {
37
39
  if (!raw || typeof raw !== 'object' || Array.isArray(raw))
38
40
  return out;
39
41
  for (const [key, value] of Object.entries(raw)) {
40
- if (typeof key !== 'string' || key.length === 0 || key.length > 128)
42
+ if (typeof key !== 'string' || key.length === 0 || key.length > 192)
41
43
  continue;
42
44
  if (!value || typeof value !== 'object')
43
45
  continue;
@@ -52,186 +54,122 @@ function readRollup(raw) {
52
54
  }
53
55
  return out;
54
56
  }
55
- class SavingsLedger {
56
- constructor() {
57
+ const GLOBAL_CAPS = { tools: MAX_ATTRIBUTED_TOOLS, pairs: MAX_ATTRIBUTED_PAIRS };
58
+ /** A project's slice is a second, smaller copy of the ledger, and there can be many of them. */
59
+ const PROJECT_CAPS = { tools: 120, pairs: 300 };
60
+ /** Hard cap on tracked projects; later ones merge into PROJECT_OVERFLOW, like tools do. */
61
+ const MAX_PROJECTS = 200;
62
+ const PROJECT_OVERFLOW = '__other';
63
+ const MAX_PROJECT_KEY = 512;
64
+ /** A workspace path as a stable key: trimmed, no trailing separator. Empty -> no project. */
65
+ function projectKey(raw) {
66
+ if (typeof raw !== 'string')
67
+ return null;
68
+ const trimmed = raw.trim().replace(/[\\/]+$/, '').slice(0, MAX_PROJECT_KEY);
69
+ return trimmed.length > 0 ? trimmed : null;
70
+ }
71
+ function emptySources() {
72
+ return {
73
+ clipboard: { events: 0, tokensSaved: 0, costSaved: 0 },
74
+ contextSqueeze: { events: 0, tokensSaved: 0, costSaved: 0 },
75
+ historyPrune: { events: 0, tokensSaved: 0, costSaved: 0 },
76
+ complexityRouting: { events: 0, tokensSaved: 0, costSaved: 0 },
77
+ cache: { events: 0, tokensSaved: 0, costSaved: 0 },
78
+ };
79
+ }
80
+ function emptyCosts() {
81
+ return {
82
+ mcpInstructions: { events: 0, tokensSpent: 0, costSpent: 0 },
83
+ toolResult: { events: 0, tokensSpent: 0, costSpent: 0 },
84
+ cacheMiss: { events: 0, tokensSpent: 0, costSpent: 0 },
85
+ };
86
+ }
87
+ /**
88
+ * Everything the ledger counts, for one scope. The daemon keeps one of these for the whole
89
+ * daemon and one per project, so a user who works in several repos at once can see the sum or
90
+ * any single repo through the same snapshot shape. No I/O here: SavingsLedger owns the file.
91
+ */
92
+ class LedgerState {
93
+ constructor(caps) {
94
+ this.caps = caps;
95
+ this.sources = emptySources();
96
+ this.costs = emptyCosts();
97
+ /** Savings by "<source>:<tool>"; events without a tool name are counted in the source totals only. */
98
+ this.savedByTool = {};
99
+ /** Per-tool rollup of toolResult spend: tool name -> { events, tokensSpent }. */
100
+ this.costByTool = {};
101
+ /** Per-host rollup (hosts are a handful of known values — no cap needed). */
102
+ this.costByHost = {};
103
+ /** Per-origin rollup: "lemma" vs anything explicitly reported otherwise. */
104
+ this.costByOrigin = {};
105
+ /** "<tool>|<host>" -> cost: who called which tool. */
106
+ this.costByToolHost = {};
57
107
  /** Local day (YYYY-MM-DD) -> tokens saved/spent that day. */
58
108
  this.daily = {};
59
- this.sessionStartedAt = new Date().toISOString();
60
- this.sources = {
61
- clipboard: { events: 0, tokensSaved: 0, costSaved: 0 },
62
- contextSqueeze: { events: 0, tokensSaved: 0, costSaved: 0 },
63
- historyPrune: { events: 0, tokensSaved: 0, costSaved: 0 },
64
- complexityRouting: { events: 0, tokensSaved: 0, costSaved: 0 },
65
- cache: { events: 0, tokensSaved: 0, costSaved: 0 },
66
- };
67
- this.costs = {
68
- mcpInstructions: { events: 0, tokensSpent: 0, costSpent: 0 },
69
- toolResult: { events: 0, tokensSpent: 0, costSpent: 0 },
70
- cacheMiss: { events: 0, tokensSpent: 0, costSpent: 0 },
71
- };
109
+ }
110
+ clear() {
111
+ this.sources = emptySources();
112
+ this.costs = emptyCosts();
113
+ this.savedByTool = {};
72
114
  this.costByTool = {};
73
115
  this.costByHost = {};
74
116
  this.costByOrigin = {};
75
- this.load();
76
- }
77
- load() {
78
- try {
79
- const dir = path_1.default.dirname(LEDGER_FILE);
80
- if (!fs_1.default.existsSync(dir)) {
81
- fs_1.default.mkdirSync(dir, { recursive: true });
82
- }
83
- if (fs_1.default.existsSync(LEDGER_FILE)) {
84
- const content = fs_1.default.readFileSync(LEDGER_FILE, 'utf8');
85
- const parsed = JSON.parse(content);
86
- if (parsed && typeof parsed === 'object') {
87
- for (const key of Object.keys(this.sources)) {
88
- if (parsed[key]) {
89
- this.sources[key] = {
90
- events: Number(parsed[key].events || 0),
91
- tokensSaved: Number(parsed[key].tokensSaved || 0),
92
- costSaved: Number(parsed[key].costSaved || 0),
93
- };
94
- }
95
- }
96
- // v2 adds the cost side under `_costs`. Ledgers written before v2 simply
97
- // have no cost history — they load with zeroes rather than failing.
98
- const parsedCosts = parsed._costs;
99
- if (parsedCosts && typeof parsedCosts === 'object') {
100
- for (const key of Object.keys(this.costs)) {
101
- if (parsedCosts[key]) {
102
- this.costs[key] = {
103
- events: Number(parsedCosts[key].events || 0),
104
- tokensSpent: Number(parsedCosts[key].tokensSpent || 0),
105
- costSpent: Number(parsedCosts[key].costSpent || 0),
106
- };
107
- }
108
- }
109
- // Attribution rollups (additive under _costs): absent on older ledgers -> empty.
110
- // Validated entry-by-entry — a corrupt _byTool must not poison the totals.
111
- this.costByTool = readRollup(parsedCosts._byTool);
112
- this.costByHost = readRollup(parsedCosts._byHost);
113
- this.costByOrigin = readRollup(parsedCosts._byOrigin);
114
- }
115
- const parsedDaily = parsed._daily;
116
- if (parsedDaily && typeof parsedDaily === 'object' && !Array.isArray(parsedDaily)) {
117
- for (const [day, v] of Object.entries(parsedDaily)) {
118
- if (!/^\d{4}-\d{2}-\d{2}$/.test(day) || !v || typeof v !== 'object')
119
- continue;
120
- const saved = Number(v.saved);
121
- const spent = Number(v.spent);
122
- if (!Number.isFinite(saved) || !Number.isFinite(spent) || saved < 0 || spent < 0)
123
- continue;
124
- this.daily[day] = { saved: Math.floor(saved), spent: Math.floor(spent) };
125
- }
126
- }
127
- }
128
- }
129
- }
130
- catch (err) {
131
- // An unreadable ledger is set aside rather than overwritten by the next save.
132
- if (err instanceof SyntaxError)
133
- (0, AtomicFile_1.quarantineCorrupt)(LEDGER_FILE);
134
- }
135
- }
136
- save() {
137
- try {
138
- const dir = path_1.default.dirname(LEDGER_FILE);
139
- if (!fs_1.default.existsSync(dir)) {
140
- fs_1.default.mkdirSync(dir, { recursive: true });
141
- }
142
- // Savings stay at the top level so pre-v2 readers keep working; costs are
143
- // additive under `_costs`. Attribution rollups ride along under `_costs` so a
144
- // v2 reader sees exactly the shape it expects plus three ignorable extra keys.
145
- const payload = {
146
- ...this.sources,
147
- _costs: { ...this.costs, _byTool: this.costByTool, _byHost: this.costByHost, _byOrigin: this.costByOrigin },
148
- _daily: this.daily,
149
- // Stays 2: the rollups are additive keys a v2 reader already ignores, so no
150
- // format bump — and the existing round-trip contract pins this number.
151
- _version: 2,
152
- };
153
- (0, AtomicFile_1.writeFileAtomic)(LEDGER_FILE, JSON.stringify(payload, null, 2));
154
- }
155
- catch (err) {
156
- // Fail silently
157
- }
158
- }
159
- /**
160
- * Record a savings event by char counts (automatically converts to token estimate).
161
- * @param source Which module recorded the savings
162
- * @param charsBefore Original char count before compression/routing
163
- * @param charsAfter Resulting char count after compression/routing
164
- */
165
- record(source, charsBefore, charsAfter) {
166
- const charsSaved = Math.max(0, charsBefore - charsAfter);
167
- if (charsSaved === 0)
168
- return;
169
- const tokensSaved = Math.floor(charsSaved / 4);
170
- const costSaved = tokensSaved * exports.AVG_COST_PER_TOKEN;
171
- this.sources[source].events++;
172
- this.sources[source].tokensSaved += tokensSaved;
173
- this.sources[source].costSaved += costSaved;
174
- this.bumpDay('saved', tokensSaved);
175
- this.save();
176
- }
177
- /** Adds to today's totals and drops days past MAX_DAYS_KEPT. */
178
- bumpDay(side, tokens) {
179
- const today = dayKey();
180
- const slot = this.daily[today] ?? (this.daily[today] = { saved: 0, spent: 0 });
181
- slot[side] += tokens;
182
- const days = Object.keys(this.daily).sort();
183
- for (const old of days.slice(0, Math.max(0, days.length - MAX_DAYS_KEPT)))
184
- delete this.daily[old];
117
+ this.costByToolHost = {};
118
+ this.daily = {};
185
119
  }
186
- /**
187
- * Record a savings event directly in tokens (for sources that already know their token count).
188
- */
189
- recordTokens(source, tokensSaved) {
190
- if (tokensSaved <= 0)
191
- return;
192
- const costSaved = tokensSaved * exports.AVG_COST_PER_TOKEN;
120
+ addSaved(source, tokensSaved, attribution) {
193
121
  this.sources[source].events++;
194
122
  this.sources[source].tokensSaved += tokensSaved;
195
- this.sources[source].costSaved += costSaved;
123
+ this.sources[source].costSaved += tokensSaved * exports.AVG_COST_PER_TOKEN;
196
124
  this.bumpDay('saved', tokensSaved);
197
- this.save();
125
+ this.bumpSaved(source, attribution, tokensSaved);
198
126
  }
199
- /**
200
- * Record tokens Lemma *spent*. Counterpart to record()/recordTokens() — without
201
- * this the ledger can only ever grow, which is not evidence of anything.
202
- *
203
- * `attribution` is what makes the totals auditable (AN-01): every toolResult
204
- * recorded in-process carries its tool name, the connected host, and origin
205
- * "lemma". Rollups stay consistent with totals by construction — they are only
206
- * ever incremented alongside the bucket they annotate.
207
- */
208
- recordCost(source, tokensSpent, attribution) {
209
- if (tokensSpent <= 0)
210
- return;
127
+ addCost(source, tokensSpent, attribution) {
211
128
  this.costs[source].events++;
212
129
  this.costs[source].tokensSpent += tokensSpent;
213
130
  this.costs[source].costSpent += tokensSpent * exports.AVG_COST_PER_TOKEN;
214
131
  this.bumpDay('spent', tokensSpent);
215
- if (source === 'toolResult') {
216
- // byTool needs an explicit tool name; host/origin ALWAYS annotate (defaulting
217
- // to unknown/lemma) so the rollups sum to the bucket totals — a smoke test
218
- // caught unattributed events vanishing from byHost, which would have made the
219
- // breakdown unfalsifiable in exactly the way the audit complained about.
220
- if (attribution?.tool)
221
- this.bumpRollup(this.costByTool, attribution.tool, tokensSpent, true);
222
- const host = attribution?.host && attribution.host.trim() ? attribution.host.trim().slice(0, 64) : 'unknown';
223
- this.bumpRollup(this.costByHost, host, tokensSpent, false);
224
- const origin = attribution?.origin && attribution.origin.trim() ? attribution.origin.trim().slice(0, 64) : 'lemma';
225
- this.bumpRollup(this.costByOrigin, origin, tokensSpent, false);
132
+ if (source !== 'toolResult')
133
+ return;
134
+ // byTool needs an explicit tool name; host/origin ALWAYS annotate (defaulting
135
+ // to unknown/lemma) so the rollups sum to the bucket totals — a smoke test
136
+ // caught unattributed events vanishing from byHost, which would have made the
137
+ // breakdown unfalsifiable in exactly the way the audit complained about.
138
+ if (attribution?.tool)
139
+ this.bumpRollup(this.costByTool, attribution.tool, tokensSpent, this.caps.tools);
140
+ const host = attribution?.host && attribution.host.trim() ? attribution.host.trim().slice(0, 64) : 'unknown';
141
+ this.bumpRollup(this.costByHost, host, tokensSpent);
142
+ // Tool x host: byTool and byHost alone cannot say whether 2,000 token_budget calls came from
143
+ // an agent or from a script. Only events that name a tool, same as byTool.
144
+ if (attribution?.tool)
145
+ this.bumpRollup(this.costByToolHost, `${attribution.tool}|${host}`, tokensSpent, this.caps.pairs);
146
+ const origin = attribution?.origin && attribution.origin.trim() ? attribution.origin.trim().slice(0, 64) : 'lemma';
147
+ this.bumpRollup(this.costByOrigin, origin, tokensSpent);
148
+ }
149
+ /** One attributed saving into the by-tool rollup (capped; overflow merges into "__other"). */
150
+ bumpSaved(source, attribution, tokensSaved) {
151
+ const tool = attribution?.tool?.trim();
152
+ if (!tool)
153
+ return;
154
+ const key = `${source}:${tool}`.slice(0, 160);
155
+ let slot = this.savedByTool[key];
156
+ if (!slot) {
157
+ if (Object.keys(this.savedByTool).length >= this.caps.tools) {
158
+ slot = this.savedByTool.__other ?? (this.savedByTool.__other = { events: 0, tokensSaved: 0 });
159
+ }
160
+ else {
161
+ slot = this.savedByTool[key] = { events: 0, tokensSaved: 0 };
162
+ }
226
163
  }
227
- this.save();
164
+ slot.events++;
165
+ slot.tokensSaved += tokensSaved;
228
166
  }
229
- /** One attributed event into a rollup map. byTool is capped; host/origin are naturally small. */
230
- bumpRollup(map, key, tokensSpent, capped) {
231
- const clean = key.slice(0, 128);
167
+ /** One attributed event into a rollup map. Capped maps merge overflow into "__other". */
168
+ bumpRollup(map, key, tokensSpent, cap) {
169
+ const clean = key.slice(0, 192);
232
170
  let slot = map[clean];
233
171
  if (!slot) {
234
- if (capped && Object.keys(map).length >= MAX_ATTRIBUTED_TOOLS) {
172
+ if (cap !== undefined && Object.keys(map).length >= cap) {
235
173
  // Bounded memory over perfect recall: merge into an overflow bucket rather
236
174
  // than growing ledger.json without limit or dropping the event from totals
237
175
  // (totals above already counted it — rollups must never contradict them).
@@ -244,12 +182,102 @@ class SavingsLedger {
244
182
  slot.events++;
245
183
  slot.tokensSpent += tokensSpent;
246
184
  }
247
- /** Record a cost event by char count (converts with the same chars/4 heuristic). */
248
- recordCostChars(source, chars, attribution) {
249
- this.recordCost(source, Math.floor(Math.max(0, chars) / 4), attribution);
185
+ /** Adds to today's totals and drops days past MAX_DAYS_KEPT. */
186
+ bumpDay(side, tokens) {
187
+ const today = dayKey();
188
+ const slot = this.daily[today] ?? (this.daily[today] = { saved: 0, spent: 0 });
189
+ slot[side] += tokens;
190
+ const days = Object.keys(this.daily).sort();
191
+ for (const old of days.slice(0, Math.max(0, days.length - MAX_DAYS_KEPT)))
192
+ delete this.daily[old];
193
+ }
194
+ totals() {
195
+ let tokensSaved = 0;
196
+ let tokensSpent = 0;
197
+ for (const src of Object.values(this.sources))
198
+ tokensSaved += src.tokensSaved;
199
+ for (const c of Object.values(this.costs))
200
+ tokensSpent += c.tokensSpent;
201
+ return { tokensSaved, tokensSpent, netTokens: tokensSaved - tokensSpent };
202
+ }
203
+ /** The v2 on-disk shape: savings at the top level, costs and rollups additive under `_costs`. */
204
+ toJSON() {
205
+ return {
206
+ ...this.sources,
207
+ _costs: {
208
+ ...this.costs,
209
+ _byTool: this.costByTool,
210
+ _byHost: this.costByHost,
211
+ _byOrigin: this.costByOrigin,
212
+ _byToolHost: this.costByToolHost,
213
+ },
214
+ _daily: this.daily,
215
+ _savedByTool: this.savedByTool,
216
+ // Stays 2: the rollups are additive keys a v2 reader already ignores, so no
217
+ // format bump — and the existing round-trip contract pins this number.
218
+ _version: 2,
219
+ };
220
+ }
221
+ /** Reads one slice off disk. Every part is validated on its own: a corrupt rollup must not poison totals. */
222
+ loadFrom(parsed) {
223
+ if (!parsed || typeof parsed !== 'object')
224
+ return;
225
+ for (const key of Object.keys(this.sources)) {
226
+ if (parsed[key]) {
227
+ this.sources[key] = {
228
+ events: Number(parsed[key].events || 0),
229
+ tokensSaved: Number(parsed[key].tokensSaved || 0),
230
+ costSaved: Number(parsed[key].costSaved || 0),
231
+ };
232
+ }
233
+ }
234
+ // v2 adds the cost side under `_costs`. Ledgers written before v2 simply
235
+ // have no cost history — they load with zeroes rather than failing.
236
+ const parsedCosts = parsed._costs;
237
+ if (parsedCosts && typeof parsedCosts === 'object') {
238
+ for (const key of Object.keys(this.costs)) {
239
+ if (parsedCosts[key]) {
240
+ this.costs[key] = {
241
+ events: Number(parsedCosts[key].events || 0),
242
+ tokensSpent: Number(parsedCosts[key].tokensSpent || 0),
243
+ costSpent: Number(parsedCosts[key].costSpent || 0),
244
+ };
245
+ }
246
+ }
247
+ // Attribution rollups (additive under _costs): absent on older ledgers -> empty.
248
+ this.costByTool = readRollup(parsedCosts._byTool);
249
+ this.costByHost = readRollup(parsedCosts._byHost);
250
+ this.costByOrigin = readRollup(parsedCosts._byOrigin);
251
+ this.costByToolHost = readRollup(parsedCosts._byToolHost);
252
+ }
253
+ // Savings attribution (additive, top level, underscore-prefixed like _daily): absent on
254
+ // older ledgers -> empty. Entry-by-entry, so a corrupt map cannot poison the totals.
255
+ const parsedSaved = parsed._savedByTool;
256
+ if (parsedSaved && typeof parsedSaved === 'object' && !Array.isArray(parsedSaved)) {
257
+ for (const [key, v] of Object.entries(parsedSaved)) {
258
+ if (typeof key !== 'string' || key.length === 0 || key.length > 160 || !v || typeof v !== 'object')
259
+ continue;
260
+ const events = Number(v.events);
261
+ const tokensSaved = Number(v.tokensSaved);
262
+ if (!Number.isFinite(events) || !Number.isFinite(tokensSaved) || events < 0 || tokensSaved < 0)
263
+ continue;
264
+ this.savedByTool[key] = { events: Math.floor(events), tokensSaved: Math.floor(tokensSaved) };
265
+ }
266
+ }
267
+ const parsedDaily = parsed._daily;
268
+ if (parsedDaily && typeof parsedDaily === 'object' && !Array.isArray(parsedDaily)) {
269
+ for (const [day, v] of Object.entries(parsedDaily)) {
270
+ if (!/^\d{4}-\d{2}-\d{2}$/.test(day) || !v || typeof v !== 'object')
271
+ continue;
272
+ const saved = Number(v.saved);
273
+ const spent = Number(v.spent);
274
+ if (!Number.isFinite(saved) || !Number.isFinite(spent) || saved < 0 || spent < 0)
275
+ continue;
276
+ this.daily[day] = { saved: Math.floor(saved), spent: Math.floor(spent) };
277
+ }
278
+ }
250
279
  }
251
- /** Returns a full snapshot including computed totals, costs and net position */
252
- getSnapshot() {
280
+ snapshot(sessionStartedAt, project, projectTotals) {
253
281
  const total = { events: 0, tokensSaved: 0, costSaved: 0 };
254
282
  for (const src of Object.values(this.sources)) {
255
283
  total.events += src.events;
@@ -291,14 +319,147 @@ class SavingsLedger {
291
319
  totalCost,
292
320
  net,
293
321
  recent,
294
- sessionStartedAt: this.sessionStartedAt,
322
+ sessionStartedAt,
295
323
  costAttribution: {
296
324
  byTool: { ...this.costByTool },
297
325
  byHost: { ...this.costByHost },
298
326
  byOrigin: { ...this.costByOrigin },
327
+ byToolHost: { ...this.costByToolHost },
299
328
  },
329
+ savingsAttribution: { byTool: { ...this.savedByTool } },
330
+ project,
331
+ projectTotals,
300
332
  };
301
333
  }
334
+ }
335
+ class SavingsLedger {
336
+ constructor() {
337
+ /** The whole daemon: every event, with or without a project. */
338
+ this.all = new LedgerState(GLOBAL_CAPS);
339
+ /** One slice per workspace path, fed only by events that said which project they came from. */
340
+ this.projects = {};
341
+ this.sessionStartedAt = new Date().toISOString();
342
+ this.load();
343
+ }
344
+ load() {
345
+ try {
346
+ const dir = path_1.default.dirname(LEDGER_FILE);
347
+ if (!fs_1.default.existsSync(dir)) {
348
+ fs_1.default.mkdirSync(dir, { recursive: true });
349
+ }
350
+ if (fs_1.default.existsSync(LEDGER_FILE)) {
351
+ const content = fs_1.default.readFileSync(LEDGER_FILE, 'utf8');
352
+ const parsed = JSON.parse(content);
353
+ if (parsed && typeof parsed === 'object') {
354
+ this.all.loadFrom(parsed);
355
+ // Per-project slices (additive, top level): absent on older ledgers -> none.
356
+ const parsedProjects = parsed._projects;
357
+ if (parsedProjects && typeof parsedProjects === 'object' && !Array.isArray(parsedProjects)) {
358
+ for (const [rawKey, v] of Object.entries(parsedProjects)) {
359
+ const key = projectKey(rawKey) ?? undefined;
360
+ if (!key || Object.keys(this.projects).length >= MAX_PROJECTS + 1)
361
+ continue;
362
+ const state = new LedgerState(PROJECT_CAPS);
363
+ state.loadFrom(v);
364
+ this.projects[key] = state;
365
+ }
366
+ }
367
+ }
368
+ }
369
+ }
370
+ catch (err) {
371
+ // An unreadable ledger is set aside rather than overwritten by the next save.
372
+ if (err instanceof SyntaxError)
373
+ (0, AtomicFile_1.quarantineCorrupt)(LEDGER_FILE);
374
+ }
375
+ }
376
+ save() {
377
+ try {
378
+ const dir = path_1.default.dirname(LEDGER_FILE);
379
+ if (!fs_1.default.existsSync(dir)) {
380
+ fs_1.default.mkdirSync(dir, { recursive: true });
381
+ }
382
+ const projects = {};
383
+ for (const [key, state] of Object.entries(this.projects))
384
+ projects[key] = state.toJSON();
385
+ (0, AtomicFile_1.writeFileAtomic)(LEDGER_FILE, JSON.stringify({ ...this.all.toJSON(), _projects: projects }, null, 2));
386
+ }
387
+ catch (err) {
388
+ // Fail silently
389
+ }
390
+ }
391
+ /** The slice an event belongs to, created on first sight; past MAX_PROJECTS they share one overflow slice. */
392
+ projectState(raw) {
393
+ const key = projectKey(raw);
394
+ if (!key)
395
+ return undefined;
396
+ const existing = this.projects[key];
397
+ if (existing)
398
+ return existing;
399
+ const slot = Object.keys(this.projects).length >= MAX_PROJECTS ? PROJECT_OVERFLOW : key;
400
+ return this.projects[slot] ?? (this.projects[slot] = new LedgerState(PROJECT_CAPS));
401
+ }
402
+ applySaved(source, tokensSaved, attribution) {
403
+ this.all.addSaved(source, tokensSaved, attribution);
404
+ this.projectState(attribution?.project)?.addSaved(source, tokensSaved, attribution);
405
+ this.save();
406
+ }
407
+ /**
408
+ * Record a savings event by char counts (automatically converts to token estimate).
409
+ * @param source Which module recorded the savings
410
+ * @param charsBefore Original char count before compression/routing
411
+ * @param charsAfter Resulting char count after compression/routing
412
+ */
413
+ record(source, charsBefore, charsAfter, attribution) {
414
+ const charsSaved = Math.max(0, charsBefore - charsAfter);
415
+ if (charsSaved === 0)
416
+ return;
417
+ this.applySaved(source, Math.floor(charsSaved / 4), attribution);
418
+ }
419
+ /**
420
+ * Record a savings event directly in tokens (for sources that already know their token count).
421
+ */
422
+ recordTokens(source, tokensSaved, attribution) {
423
+ if (tokensSaved <= 0)
424
+ return;
425
+ this.applySaved(source, tokensSaved, attribution);
426
+ }
427
+ /**
428
+ * Record tokens Lemma *spent*. Counterpart to record()/recordTokens() — without
429
+ * this the ledger can only ever grow, which is not evidence of anything.
430
+ *
431
+ * `attribution` is what makes the totals auditable (AN-01): every toolResult
432
+ * recorded in-process carries its tool name, the connected host, and origin
433
+ * "lemma". Rollups stay consistent with totals by construction — they are only
434
+ * ever incremented alongside the bucket they annotate.
435
+ */
436
+ recordCost(source, tokensSpent, attribution) {
437
+ if (tokensSpent <= 0)
438
+ return;
439
+ this.all.addCost(source, tokensSpent, attribution);
440
+ this.projectState(attribution?.project)?.addCost(source, tokensSpent, attribution);
441
+ this.save();
442
+ }
443
+ /** Record a cost event by char count (converts with the same chars/4 heuristic). */
444
+ recordCostChars(source, chars, attribution) {
445
+ this.recordCost(source, Math.floor(Math.max(0, chars) / 4), attribution);
446
+ }
447
+ projectTotals() {
448
+ const out = {};
449
+ for (const [key, state] of Object.entries(this.projects))
450
+ out[key] = state.totals();
451
+ return out;
452
+ }
453
+ /**
454
+ * A full snapshot: totals, costs and net position. With `project`, the same shape scoped to that
455
+ * workspace (zeros when nothing was attributed to it yet — never the daemon's totals, which would
456
+ * read as that project's own).
457
+ */
458
+ getSnapshot(project) {
459
+ const key = projectKey(project);
460
+ const state = key ? (this.projects[key] ?? new LedgerState(PROJECT_CAPS)) : this.all;
461
+ return state.snapshot(this.sessionStartedAt, key, this.projectTotals());
462
+ }
302
463
  /** Returns a pretty terminal summary block */
303
464
  getTerminalSummary() {
304
465
  const snap = this.getSnapshot();
@@ -345,16 +506,8 @@ class SavingsLedger {
345
506
  }
346
507
  /** Reset all counters (e.g., on cache clear) */
347
508
  reset() {
348
- for (const key of Object.keys(this.sources)) {
349
- this.sources[key] = { events: 0, tokensSaved: 0, costSaved: 0 };
350
- }
351
- for (const key of Object.keys(this.costs)) {
352
- this.costs[key] = { events: 0, tokensSpent: 0, costSpent: 0 };
353
- }
354
- this.costByTool = {};
355
- this.costByHost = {};
356
- this.costByOrigin = {};
357
- this.daily = {};
509
+ this.all.clear();
510
+ this.projects = {};
358
511
  this.save();
359
512
  }
360
513
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SavingsLedger.js","sourceRoot":"","sources":["../../../src/utils/SavingsLedger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SavingsLedger.js","sourceRoot":"","sources":["../../../src/utils/SavingsLedger.ts"],"names":[],"mappings":"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"}