@nxuss/lemma 1.23.0 → 1.24.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 (151) hide show
  1. package/dist/cjs/cli/lemma-proxy.d.ts.map +1 -1
  2. package/dist/cjs/cli/lemma-proxy.js +15 -3
  3. package/dist/cjs/cli/lemma-proxy.js.map +1 -1
  4. package/dist/cjs/infra/errorCause.d.ts +36 -0
  5. package/dist/cjs/infra/errorCause.d.ts.map +1 -0
  6. package/dist/cjs/infra/errorCause.js +143 -0
  7. package/dist/cjs/infra/errorCause.js.map +1 -0
  8. package/dist/cjs/infra/providers/JenkinsProvider.d.ts.map +1 -1
  9. package/dist/cjs/infra/providers/JenkinsProvider.js +5 -0
  10. package/dist/cjs/infra/providers/JenkinsProvider.js.map +1 -1
  11. package/dist/cjs/infra/providers/OKDProvider.d.ts.map +1 -1
  12. package/dist/cjs/infra/providers/OKDProvider.js +5 -1
  13. package/dist/cjs/infra/providers/OKDProvider.js.map +1 -1
  14. package/dist/cjs/infra/providers/TerraformProvider.d.ts.map +1 -1
  15. package/dist/cjs/infra/providers/TerraformProvider.js +3 -1
  16. package/dist/cjs/infra/providers/TerraformProvider.js.map +1 -1
  17. package/dist/cjs/mcp/index.js +21 -0
  18. package/dist/cjs/mcp/index.js.map +1 -1
  19. package/dist/cjs/mcp/tool-profiles.d.ts +6 -4
  20. package/dist/cjs/mcp/tool-profiles.d.ts.map +1 -1
  21. package/dist/cjs/mcp/tool-profiles.js.map +1 -1
  22. package/dist/cjs/mcp/tools/context-tools.d.ts.map +1 -1
  23. package/dist/cjs/mcp/tools/context-tools.js +3 -1
  24. package/dist/cjs/mcp/tools/context-tools.js.map +1 -1
  25. package/dist/cjs/mcp/tools/memory.d.ts.map +1 -1
  26. package/dist/cjs/mcp/tools/memory.js +45 -10
  27. package/dist/cjs/mcp/tools/memory.js.map +1 -1
  28. package/dist/cjs/mcp/tools/misc.d.ts.map +1 -1
  29. package/dist/cjs/mcp/tools/misc.js +21 -9
  30. package/dist/cjs/mcp/tools/misc.js.map +1 -1
  31. package/dist/cjs/mcp/tools/squeeze-cache.d.ts +6 -0
  32. package/dist/cjs/mcp/tools/squeeze-cache.d.ts.map +1 -1
  33. package/dist/cjs/mcp/tools/squeeze-cache.js +57 -17
  34. package/dist/cjs/mcp/tools/squeeze-cache.js.map +1 -1
  35. package/dist/cjs/mcp/tools/workspace.d.ts.map +1 -1
  36. package/dist/cjs/mcp/tools/workspace.js +7 -2
  37. package/dist/cjs/mcp/tools/workspace.js.map +1 -1
  38. package/dist/cjs/mcp/tools.d.ts +9 -0
  39. package/dist/cjs/mcp/tools.d.ts.map +1 -1
  40. package/dist/cjs/mcp/tools.js +72 -12
  41. package/dist/cjs/mcp/tools.js.map +1 -1
  42. package/dist/cjs/mcp/utils.d.ts.map +1 -1
  43. package/dist/cjs/mcp/utils.js +18 -4
  44. package/dist/cjs/mcp/utils.js.map +1 -1
  45. package/dist/cjs/mcp/workspaceShared.d.ts +1 -0
  46. package/dist/cjs/mcp/workspaceShared.d.ts.map +1 -1
  47. package/dist/cjs/mcp/workspaceShared.js +27 -0
  48. package/dist/cjs/mcp/workspaceShared.js.map +1 -1
  49. package/dist/cjs/subconscious/TheBrainV2.d.ts +43 -0
  50. package/dist/cjs/subconscious/TheBrainV2.d.ts.map +1 -1
  51. package/dist/cjs/subconscious/TheBrainV2.js +79 -7
  52. package/dist/cjs/subconscious/TheBrainV2.js.map +1 -1
  53. package/dist/cjs/utils/AnomalyInventory.d.ts +29 -0
  54. package/dist/cjs/utils/AnomalyInventory.d.ts.map +1 -0
  55. package/dist/cjs/utils/AnomalyInventory.js +58 -0
  56. package/dist/cjs/utils/AnomalyInventory.js.map +1 -0
  57. package/dist/cjs/utils/ExecutiveReport.d.ts +10 -0
  58. package/dist/cjs/utils/ExecutiveReport.d.ts.map +1 -1
  59. package/dist/cjs/utils/ExecutiveReport.js +17 -1
  60. package/dist/cjs/utils/ExecutiveReport.js.map +1 -1
  61. package/dist/cjs/utils/SavingsLedger.d.ts +45 -2
  62. package/dist/cjs/utils/SavingsLedger.d.ts.map +1 -1
  63. package/dist/cjs/utils/SavingsLedger.js +89 -5
  64. package/dist/cjs/utils/SavingsLedger.js.map +1 -1
  65. package/dist/cjs/utils/SessionEvidence.d.ts +28 -0
  66. package/dist/cjs/utils/SessionEvidence.d.ts.map +1 -0
  67. package/dist/cjs/utils/SessionEvidence.js +55 -0
  68. package/dist/cjs/utils/SessionEvidence.js.map +1 -0
  69. package/dist/cjs/utils/StateHashCache.d.ts +10 -0
  70. package/dist/cjs/utils/StateHashCache.d.ts.map +1 -1
  71. package/dist/cjs/utils/StateHashCache.js +15 -0
  72. package/dist/cjs/utils/StateHashCache.js.map +1 -1
  73. package/dist/cjs/utils/reportSavings.d.ts +4 -0
  74. package/dist/cjs/utils/reportSavings.d.ts.map +1 -1
  75. package/dist/cjs/utils/reportSavings.js.map +1 -1
  76. package/dist/esm/cli/lemma-proxy.d.ts.map +1 -1
  77. package/dist/esm/cli/lemma-proxy.js +15 -3
  78. package/dist/esm/cli/lemma-proxy.js.map +1 -1
  79. package/dist/esm/infra/errorCause.d.ts +36 -0
  80. package/dist/esm/infra/errorCause.d.ts.map +1 -0
  81. package/dist/esm/infra/errorCause.js +138 -0
  82. package/dist/esm/infra/errorCause.js.map +1 -0
  83. package/dist/esm/infra/providers/JenkinsProvider.d.ts.map +1 -1
  84. package/dist/esm/infra/providers/JenkinsProvider.js +5 -0
  85. package/dist/esm/infra/providers/JenkinsProvider.js.map +1 -1
  86. package/dist/esm/infra/providers/OKDProvider.d.ts.map +1 -1
  87. package/dist/esm/infra/providers/OKDProvider.js +5 -1
  88. package/dist/esm/infra/providers/OKDProvider.js.map +1 -1
  89. package/dist/esm/infra/providers/TerraformProvider.d.ts.map +1 -1
  90. package/dist/esm/infra/providers/TerraformProvider.js +3 -1
  91. package/dist/esm/infra/providers/TerraformProvider.js.map +1 -1
  92. package/dist/esm/mcp/index.js +21 -0
  93. package/dist/esm/mcp/index.js.map +1 -1
  94. package/dist/esm/mcp/tool-profiles.d.ts +6 -4
  95. package/dist/esm/mcp/tool-profiles.d.ts.map +1 -1
  96. package/dist/esm/mcp/tool-profiles.js.map +1 -1
  97. package/dist/esm/mcp/tools/context-tools.d.ts.map +1 -1
  98. package/dist/esm/mcp/tools/context-tools.js +3 -1
  99. package/dist/esm/mcp/tools/context-tools.js.map +1 -1
  100. package/dist/esm/mcp/tools/memory.d.ts.map +1 -1
  101. package/dist/esm/mcp/tools/memory.js +45 -10
  102. package/dist/esm/mcp/tools/memory.js.map +1 -1
  103. package/dist/esm/mcp/tools/misc.d.ts.map +1 -1
  104. package/dist/esm/mcp/tools/misc.js +21 -9
  105. package/dist/esm/mcp/tools/misc.js.map +1 -1
  106. package/dist/esm/mcp/tools/squeeze-cache.d.ts +6 -0
  107. package/dist/esm/mcp/tools/squeeze-cache.d.ts.map +1 -1
  108. package/dist/esm/mcp/tools/squeeze-cache.js +56 -17
  109. package/dist/esm/mcp/tools/squeeze-cache.js.map +1 -1
  110. package/dist/esm/mcp/tools/workspace.d.ts.map +1 -1
  111. package/dist/esm/mcp/tools/workspace.js +8 -3
  112. package/dist/esm/mcp/tools/workspace.js.map +1 -1
  113. package/dist/esm/mcp/tools.d.ts +9 -0
  114. package/dist/esm/mcp/tools.d.ts.map +1 -1
  115. package/dist/esm/mcp/tools.js +71 -12
  116. package/dist/esm/mcp/tools.js.map +1 -1
  117. package/dist/esm/mcp/utils.d.ts.map +1 -1
  118. package/dist/esm/mcp/utils.js +18 -4
  119. package/dist/esm/mcp/utils.js.map +1 -1
  120. package/dist/esm/mcp/workspaceShared.d.ts +1 -0
  121. package/dist/esm/mcp/workspaceShared.d.ts.map +1 -1
  122. package/dist/esm/mcp/workspaceShared.js +26 -0
  123. package/dist/esm/mcp/workspaceShared.js.map +1 -1
  124. package/dist/esm/subconscious/TheBrainV2.d.ts +43 -0
  125. package/dist/esm/subconscious/TheBrainV2.d.ts.map +1 -1
  126. package/dist/esm/subconscious/TheBrainV2.js +79 -7
  127. package/dist/esm/subconscious/TheBrainV2.js.map +1 -1
  128. package/dist/esm/utils/AnomalyInventory.d.ts +29 -0
  129. package/dist/esm/utils/AnomalyInventory.d.ts.map +1 -0
  130. package/dist/esm/utils/AnomalyInventory.js +49 -0
  131. package/dist/esm/utils/AnomalyInventory.js.map +1 -0
  132. package/dist/esm/utils/ExecutiveReport.d.ts +10 -0
  133. package/dist/esm/utils/ExecutiveReport.d.ts.map +1 -1
  134. package/dist/esm/utils/ExecutiveReport.js +17 -1
  135. package/dist/esm/utils/ExecutiveReport.js.map +1 -1
  136. package/dist/esm/utils/SavingsLedger.d.ts +45 -2
  137. package/dist/esm/utils/SavingsLedger.d.ts.map +1 -1
  138. package/dist/esm/utils/SavingsLedger.js +89 -5
  139. package/dist/esm/utils/SavingsLedger.js.map +1 -1
  140. package/dist/esm/utils/SessionEvidence.d.ts +28 -0
  141. package/dist/esm/utils/SessionEvidence.d.ts.map +1 -0
  142. package/dist/esm/utils/SessionEvidence.js +49 -0
  143. package/dist/esm/utils/SessionEvidence.js.map +1 -0
  144. package/dist/esm/utils/StateHashCache.d.ts +10 -0
  145. package/dist/esm/utils/StateHashCache.d.ts.map +1 -1
  146. package/dist/esm/utils/StateHashCache.js +14 -0
  147. package/dist/esm/utils/StateHashCache.js.map +1 -1
  148. package/dist/esm/utils/reportSavings.d.ts +4 -0
  149. package/dist/esm/utils/reportSavings.d.ts.map +1 -1
  150. package/dist/esm/utils/reportSavings.js.map +1 -1
  151. package/package.json +1 -1
@@ -17,6 +17,16 @@ export interface ReportMetrics {
17
17
  devHoursUSD: number;
18
18
  totalBusinessValue: number;
19
19
  securityEventsCount: number;
20
+ /**
21
+ * A-3: the other half of the ledger. Earlier versions of this report presented
22
+ * gross savings only, which read as a net win even while the ledger showed Lemma
23
+ * costing more than it saved. Consumers must net these against tokensSaved.
24
+ */
25
+ totalTokensSpent: number;
26
+ totalCostSpent: number;
27
+ netTokens: number;
28
+ /** tokensSaved / tokensSpent; Infinity when nothing was spent yet. */
29
+ netRatio: number;
20
30
  }
21
31
  /**
22
32
  * Calculates metrics and writes a highly structured Markdown corporate report.
@@ -1 +1 @@
1
- {"version":3,"file":"ExecutiveReport.d.ts","sourceRoot":"","sources":["../../../src/utils/ExecutiveReport.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,MAAM,EACrB,MAAM,GAAE,YAAiB,GACxB;IAAE,OAAO,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CA2GlE"}
1
+ {"version":3,"file":"ExecutiveReport.d.ts","sourceRoot":"","sources":["../../../src/utils/ExecutiveReport.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,MAAM,EACrB,MAAM,GAAE,YAAiB,GACxB;IAAE,OAAO,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CA2HlE"}
@@ -21,6 +21,12 @@ export function generateExecutiveReport(workspaceRoot, config = {}) {
21
21
  // 2. Compute metrics
22
22
  const totalTokensSaved = snapshot.total.tokensSaved;
23
23
  const totalCostSaved = snapshot.total.costSaved;
24
+ // A-3: gross savings without the cost side is how the 48x-style over-claims happen.
25
+ // The net position comes from the same auditable snapshot — never from a separate count.
26
+ const totalTokensSpent = snapshot.totalCost.tokensSpent;
27
+ const totalCostSpent = snapshot.totalCost.costSpent;
28
+ const netTokens = snapshot.net.netTokens;
29
+ const netRatio = snapshot.net.ratio;
24
30
  // Estimate developer time saved:
25
31
  // - 1 cache hit saves ~15 mins (0.25 hrs) of debug/reasoning.
26
32
  // - 1 clipboard/context squeeze reduces prompt overhead & wait times, saving ~15 seconds (0.004 hrs) per event.
@@ -62,6 +68,12 @@ export function generateExecutiveReport(workspaceRoot, config = {}) {
62
68
  lines.push(`| **Time Value Reclaimed** | \`$${devHoursUSD.toFixed(2)}\` | Productivity value based on $${costPerDevHour}/hr dev cost |`);
63
69
  lines.push(`| **Total Business Value** | **$${totalBusinessValue.toFixed(2)}** | Combined Direct & Indirect Return on Investment |`);
64
70
  lines.push(`| **Privacy Safeguards** | \`${securityEventsCount} Events\` | Auto-masked credentials/PII on clipboard |`);
71
+ lines.push(`| **Tokens Spent (Lemma overhead)** | \`${totalTokensSpent.toLocaleString()}\` | Schemas, tool results, cache misses |`);
72
+ lines.push(`| **Net Tokens (saved − spent)** | \`${netTokens.toLocaleString()}\` | ${netTokens >= 0 ? "net positive" : "NET NEGATIVE — Lemma cost more than it saved"} |`);
73
+ lines.push(`| **Net Ratio (saved / spent)** | \`${netRatio === Infinity ? "n/a (nothing spent yet)" : netRatio.toFixed(2) + "x"}\` | Below 1.0x means net cost, not ROI |`);
74
+ lines.push(``);
75
+ lines.push(`> [!CAUTION]`);
76
+ lines.push(`> **Methodology — read before quoting:** all token figures are chars/4 estimates, not counts from the connected model's real tokenizer. "Saved" is measured against re-deriving from scratch; result-injection costs are counted in "Spent". Dev-hours and projections assume every event replaces manual work and scale linearly — they are planning heuristics, not invoices. The auditable per-call source of truth is \`token_receipt\`, not this report.`);
65
77
  lines.push(``);
66
78
  lines.push(`## 🗜️ Savings Breakdown by Category`);
67
79
  lines.push(``);
@@ -96,7 +108,11 @@ export function generateExecutiveReport(workspaceRoot, config = {}) {
96
108
  devHoursSaved,
97
109
  devHoursUSD,
98
110
  totalBusinessValue,
99
- securityEventsCount
111
+ securityEventsCount,
112
+ totalTokensSpent,
113
+ totalCostSpent,
114
+ netTokens,
115
+ netRatio
100
116
  },
101
117
  markdown,
102
118
  reportPath
@@ -1 +1 @@
1
- {"version":3,"file":"ExecutiveReport.js","sourceRoot":"","sources":["../../../src/utils/ExecutiveReport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ExecutiveReport.js","sourceRoot":"","sources":["../../../src/utils/ExecutiveReport.ts"],"names":[],"mappings":"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"}
@@ -33,6 +33,27 @@ export interface CostStats {
33
33
  /** Estimated USD spent (tokensSpent * avg price per token) */
34
34
  costSpent: number;
35
35
  }
36
+ /**
37
+ * Where a cost event came from. AN-01: the ledger used to aggregate every tool
38
+ * result into one unattributed `toolResult` bucket, which made `netRatio` unusable
39
+ * as accounting — no per-tool, per-host, or per-call breakdown existed.
40
+ */
41
+ export interface CostAttribution {
42
+ /** Lemma tool whose result was charged (e.g. "search_memory", "read_workspace_file") */
43
+ tool?: string;
44
+ /** Connected host that issued the call ("claude-code", "cursor", ...; "unknown" when unreported) */
45
+ host?: string;
46
+ /**
47
+ * "lemma" = a Lemma tool result measured in-process. Anything else must arrive
48
+ * through an explicit channel — never inferred by dividing totals by call counts.
49
+ */
50
+ origin?: string;
51
+ }
52
+ /** Per-tool rollup of one CostSource — the breakdown token_budget prints. Bounded. */
53
+ export interface ToolCostStats {
54
+ events: number;
55
+ tokensSpent: number;
56
+ }
36
57
  export interface NetStats {
37
58
  /** tokensSaved - tokensSpent. Negative means Lemma cost more than it saved. */
38
59
  netTokens: number;
@@ -52,10 +73,25 @@ export interface SavingsSnapshot {
52
73
  totalCost: CostStats;
53
74
  net: NetStats;
54
75
  sessionStartedAt: string;
76
+ /**
77
+ * AN-01 attribution: per-tool / per-host / per-origin rollups of toolResult.
78
+ * Empty maps mean "recorded before attribution existed", never "zero".
79
+ */
80
+ costAttribution: {
81
+ byTool: Record<string, ToolCostStats>;
82
+ byHost: Record<string, ToolCostStats>;
83
+ byOrigin: Record<string, ToolCostStats>;
84
+ };
55
85
  }
56
86
  declare class SavingsLedger {
57
87
  private sources;
58
88
  private costs;
89
+ /** Per-tool rollup of toolResult spend: tool name -> { events, tokensSpent }. */
90
+ private costByTool;
91
+ /** Per-host rollup (hosts are a handful of known values — no cap needed). */
92
+ private costByHost;
93
+ /** Per-origin rollup: "lemma" vs anything explicitly reported otherwise. */
94
+ private costByOrigin;
59
95
  private readonly sessionStartedAt;
60
96
  constructor();
61
97
  private load;
@@ -74,10 +110,17 @@ declare class SavingsLedger {
74
110
  /**
75
111
  * Record tokens Lemma *spent*. Counterpart to record()/recordTokens() — without
76
112
  * this the ledger can only ever grow, which is not evidence of anything.
113
+ *
114
+ * `attribution` is what makes the totals auditable (AN-01): every toolResult
115
+ * recorded in-process carries its tool name, the connected host, and origin
116
+ * "lemma". Rollups stay consistent with totals by construction — they are only
117
+ * ever incremented alongside the bucket they annotate.
77
118
  */
78
- recordCost(source: CostSource, tokensSpent: number): void;
119
+ recordCost(source: CostSource, tokensSpent: number, attribution?: CostAttribution): void;
120
+ /** One attributed event into a rollup map. byTool is capped; host/origin are naturally small. */
121
+ private bumpRollup;
79
122
  /** Record a cost event by char count (converts with the same chars/4 heuristic). */
80
- recordCostChars(source: CostSource, chars: number): void;
123
+ recordCostChars(source: CostSource, chars: number, attribution?: CostAttribution): void;
81
124
  /** Returns a full snapshot including computed totals, costs and net position */
82
125
  getSnapshot(): SavingsSnapshot;
83
126
  /** Returns a pretty terminal summary block */
@@ -1 +1 @@
1
- {"version":3,"file":"SavingsLedger.d.ts","sourceRoot":"","sources":["../../../src/utils/SavingsLedger.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,gBAAgB,GAAG,cAAc,GAAG,mBAAmB,GAAG,OAAO,CAAC;AAE5G;;;;;;;;GAQG;AACH,MAAM,MAAM,UAAU,GAAG,iBAAiB,GAAG,YAAY,GAAG,WAAW,CAAC;AAExE,MAAM,WAAW,WAAW;IAC1B,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,+EAA+E;IAC/E,SAAS,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,iFAAiF;IACjF,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,WAAW,CAAC;IACvB,cAAc,EAAE,WAAW,CAAC;IAC5B,YAAY,EAAE,WAAW,CAAC;IAC1B,iBAAiB,EAAE,WAAW,CAAC;IAC/B,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACrC,SAAS,EAAE,SAAS,CAAC;IACrB,GAAG,EAAE,QAAQ,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAQD,cAAM,aAAa;IACjB,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;;IAmB1C,OAAO,CAAC,IAAI;IAwCZ,OAAO,CAAC,IAAI;IAeZ;;;;;OAKG;IACH,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAa5E;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAS9D;;;OAGG;IACH,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAQzD,oFAAoF;IACpF,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIxD,gFAAgF;IAChF,WAAW,IAAI,eAAe;IAkC9B,8CAA8C;IAC9C,kBAAkB,IAAI,MAAM;IAoD5B,gDAAgD;IAChD,KAAK,IAAI,IAAI;CASd;AAED,gDAAgD;AAChD,eAAO,MAAM,aAAa,eAAsB,CAAC;AACjD,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"SavingsLedger.d.ts","sourceRoot":"","sources":["../../../src/utils/SavingsLedger.ts"],"names":[],"mappings":"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"}
@@ -8,10 +8,36 @@
8
8
  */
9
9
  import fs from 'fs';
10
10
  import path from 'path';
11
+ /** Hard cap on tracked tool names so a hostile caller cannot grow ledger.json unbounded. */
12
+ const MAX_ATTRIBUTED_TOOLS = 300;
11
13
  /** Average blended cost per input token across GPT-4o / Claude Sonnet / Gemini Pro */
12
14
  const AVG_COST_PER_TOKEN = 0.000008; // $0.008 per 1K tokens
13
15
  const HOME = process.env.HOME || process.env.USERPROFILE || '~';
14
16
  const LEDGER_FILE = path.join(HOME, '.lemma-cache', 'ledger.json');
17
+ /**
18
+ * Validate one attribution rollup read off disk. Anything malformed collapses to
19
+ * empty — totals are authoritative, rollups are annotation.
20
+ */
21
+ function readRollup(raw) {
22
+ const out = {};
23
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw))
24
+ return out;
25
+ for (const [key, value] of Object.entries(raw)) {
26
+ if (typeof key !== 'string' || key.length === 0 || key.length > 128)
27
+ continue;
28
+ if (!value || typeof value !== 'object')
29
+ continue;
30
+ const v = value;
31
+ const events = Number(v.events);
32
+ const tokensSpent = Number(v.tokensSpent);
33
+ if (!Number.isFinite(events) || !Number.isFinite(tokensSpent))
34
+ continue;
35
+ if (events < 0 || tokensSpent < 0)
36
+ continue;
37
+ out[key] = { events: Math.floor(events), tokensSpent: Math.floor(tokensSpent) };
38
+ }
39
+ return out;
40
+ }
15
41
  class SavingsLedger {
16
42
  constructor() {
17
43
  this.sessionStartedAt = new Date().toISOString();
@@ -27,6 +53,9 @@ class SavingsLedger {
27
53
  toolResult: { events: 0, tokensSpent: 0, costSpent: 0 },
28
54
  cacheMiss: { events: 0, tokensSpent: 0, costSpent: 0 },
29
55
  };
56
+ this.costByTool = {};
57
+ this.costByHost = {};
58
+ this.costByOrigin = {};
30
59
  this.load();
31
60
  }
32
61
  load() {
@@ -61,6 +90,11 @@ class SavingsLedger {
61
90
  };
62
91
  }
63
92
  }
93
+ // Attribution rollups (additive under _costs): absent on older ledgers -> empty.
94
+ // Validated entry-by-entry — a corrupt _byTool must not poison the totals.
95
+ this.costByTool = readRollup(parsedCosts._byTool);
96
+ this.costByHost = readRollup(parsedCosts._byHost);
97
+ this.costByOrigin = readRollup(parsedCosts._byOrigin);
64
98
  }
65
99
  }
66
100
  }
@@ -76,8 +110,15 @@ class SavingsLedger {
76
110
  fs.mkdirSync(dir, { recursive: true });
77
111
  }
78
112
  // Savings stay at the top level so pre-v2 readers keep working; costs are
79
- // additive under `_costs`.
80
- const payload = { ...this.sources, _costs: this.costs, _version: 2 };
113
+ // additive under `_costs`. Attribution rollups ride along under `_costs` so a
114
+ // v2 reader sees exactly the shape it expects plus three ignorable extra keys.
115
+ const payload = {
116
+ ...this.sources,
117
+ _costs: { ...this.costs, _byTool: this.costByTool, _byHost: this.costByHost, _byOrigin: this.costByOrigin },
118
+ // Stays 2: the rollups are additive keys a v2 reader already ignores, so no
119
+ // format bump — and the existing round-trip contract pins this number.
120
+ _version: 2,
121
+ };
81
122
  fs.writeFileSync(LEDGER_FILE, JSON.stringify(payload, null, 2), 'utf8');
82
123
  }
83
124
  catch (err) {
@@ -116,18 +157,53 @@ class SavingsLedger {
116
157
  /**
117
158
  * Record tokens Lemma *spent*. Counterpart to record()/recordTokens() — without
118
159
  * this the ledger can only ever grow, which is not evidence of anything.
160
+ *
161
+ * `attribution` is what makes the totals auditable (AN-01): every toolResult
162
+ * recorded in-process carries its tool name, the connected host, and origin
163
+ * "lemma". Rollups stay consistent with totals by construction — they are only
164
+ * ever incremented alongside the bucket they annotate.
119
165
  */
120
- recordCost(source, tokensSpent) {
166
+ recordCost(source, tokensSpent, attribution) {
121
167
  if (tokensSpent <= 0)
122
168
  return;
123
169
  this.costs[source].events++;
124
170
  this.costs[source].tokensSpent += tokensSpent;
125
171
  this.costs[source].costSpent += tokensSpent * AVG_COST_PER_TOKEN;
172
+ if (source === 'toolResult') {
173
+ // byTool needs an explicit tool name; host/origin ALWAYS annotate (defaulting
174
+ // to unknown/lemma) so the rollups sum to the bucket totals — a smoke test
175
+ // caught unattributed events vanishing from byHost, which would have made the
176
+ // breakdown unfalsifiable in exactly the way the audit complained about.
177
+ if (attribution?.tool)
178
+ this.bumpRollup(this.costByTool, attribution.tool, tokensSpent, true);
179
+ const host = attribution?.host && attribution.host.trim() ? attribution.host.trim().slice(0, 64) : 'unknown';
180
+ this.bumpRollup(this.costByHost, host, tokensSpent, false);
181
+ const origin = attribution?.origin && attribution.origin.trim() ? attribution.origin.trim().slice(0, 64) : 'lemma';
182
+ this.bumpRollup(this.costByOrigin, origin, tokensSpent, false);
183
+ }
126
184
  this.save();
127
185
  }
186
+ /** One attributed event into a rollup map. byTool is capped; host/origin are naturally small. */
187
+ bumpRollup(map, key, tokensSpent, capped) {
188
+ const clean = key.slice(0, 128);
189
+ let slot = map[clean];
190
+ if (!slot) {
191
+ if (capped && Object.keys(map).length >= MAX_ATTRIBUTED_TOOLS) {
192
+ // Bounded memory over perfect recall: merge into an overflow bucket rather
193
+ // than growing ledger.json without limit or dropping the event from totals
194
+ // (totals above already counted it — rollups must never contradict them).
195
+ slot = map.__other ?? (map.__other = { events: 0, tokensSpent: 0 });
196
+ }
197
+ else {
198
+ slot = map[clean] = { events: 0, tokensSpent: 0 };
199
+ }
200
+ }
201
+ slot.events++;
202
+ slot.tokensSpent += tokensSpent;
203
+ }
128
204
  /** Record a cost event by char count (converts with the same chars/4 heuristic). */
129
- recordCostChars(source, chars) {
130
- this.recordCost(source, Math.floor(Math.max(0, chars) / 4));
205
+ recordCostChars(source, chars, attribution) {
206
+ this.recordCost(source, Math.floor(Math.max(0, chars) / 4), attribution);
131
207
  }
132
208
  /** Returns a full snapshot including computed totals, costs and net position */
133
209
  getSnapshot() {
@@ -157,6 +233,11 @@ class SavingsLedger {
157
233
  totalCost,
158
234
  net,
159
235
  sessionStartedAt: this.sessionStartedAt,
236
+ costAttribution: {
237
+ byTool: { ...this.costByTool },
238
+ byHost: { ...this.costByHost },
239
+ byOrigin: { ...this.costByOrigin },
240
+ },
160
241
  };
161
242
  }
162
243
  /** Returns a pretty terminal summary block */
@@ -211,6 +292,9 @@ class SavingsLedger {
211
292
  for (const key of Object.keys(this.costs)) {
212
293
  this.costs[key] = { events: 0, tokensSpent: 0, costSpent: 0 };
213
294
  }
295
+ this.costByTool = {};
296
+ this.costByHost = {};
297
+ this.costByOrigin = {};
214
298
  this.save();
215
299
  }
216
300
  }
@@ -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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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * F1.2 (AN-09/AN-11): store_memory today only tracks filePaths/symbols the caller
3
+ * remembers to pass by hand — the audit found 55% of new entries untracked as a result.
4
+ * Lemma already sees every read/write/patch/symbol-context call in this session; this module
5
+ * keeps a small recency-ordered log of those touches so store_memory can derive evidence by
6
+ * default instead of depending on manual opt-in. Process-scoped, like ReadWorkspaceCache —
7
+ * lives for the MCP server's lifetime, which is normally the whole conversation.
8
+ */
9
+ /** Record a file the current session just read, wrote, created, or patched. */
10
+ export declare function recordFileTouch(filePath: string): void;
11
+ /** Record a specific symbol the session just inspected or edited within a file. */
12
+ export declare function recordSymbolTouch(filePath: string, symbolName: string): void;
13
+ export interface RecentEvidence {
14
+ filePaths: string[];
15
+ symbols: Array<{
16
+ filePath: string;
17
+ symbolName: string;
18
+ }>;
19
+ }
20
+ /**
21
+ * Most-recently-touched files/symbols, newest first, deduplicated. `limit` caps each list
22
+ * independently — store_memory calls this with a small limit so an unrelated file skimmed
23
+ * several turns ago doesn't get attached to an answer about something else.
24
+ */
25
+ export declare function getRecentEvidence(limit?: number): RecentEvidence;
26
+ /** Test seam — the lists are module-global and would otherwise leak between test cases. */
27
+ export declare function resetSessionEvidence(): void;
28
+ //# sourceMappingURL=SessionEvidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionEvidence.d.ts","sourceRoot":"","sources":["../../../src/utils/SessionEvidence.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAwBH,+EAA+E;AAC/E,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAGtD;AAED,mFAAmF;AACnF,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAG5E;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,SAAI,GAAG,cAAc,CAK3D;AAED,2FAA2F;AAC3F,wBAAgB,oBAAoB,IAAI,IAAI,CAG3C"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * F1.2 (AN-09/AN-11): store_memory today only tracks filePaths/symbols the caller
3
+ * remembers to pass by hand — the audit found 55% of new entries untracked as a result.
4
+ * Lemma already sees every read/write/patch/symbol-context call in this session; this module
5
+ * keeps a small recency-ordered log of those touches so store_memory can derive evidence by
6
+ * default instead of depending on manual opt-in. Process-scoped, like ReadWorkspaceCache —
7
+ * lives for the MCP server's lifetime, which is normally the whole conversation.
8
+ */
9
+ const MAX_ENTRIES = 20;
10
+ // Most-recent-last; read out reversed. Deliberately not a Set — recency order is the point.
11
+ const fileTouches = [];
12
+ const symbolTouches = [];
13
+ function pushCapped(list, entry, isSame) {
14
+ const existingIdx = list.findIndex(isSame);
15
+ if (existingIdx !== -1)
16
+ list.splice(existingIdx, 1);
17
+ list.push(entry);
18
+ while (list.length > MAX_ENTRIES)
19
+ list.shift();
20
+ }
21
+ /** Record a file the current session just read, wrote, created, or patched. */
22
+ export function recordFileTouch(filePath) {
23
+ if (!filePath)
24
+ return;
25
+ pushCapped(fileTouches, { filePath }, (t) => t.filePath === filePath);
26
+ }
27
+ /** Record a specific symbol the session just inspected or edited within a file. */
28
+ export function recordSymbolTouch(filePath, symbolName) {
29
+ if (!filePath || !symbolName)
30
+ return;
31
+ pushCapped(symbolTouches, { filePath, symbolName }, (t) => t.filePath === filePath && t.symbolName === symbolName);
32
+ }
33
+ /**
34
+ * Most-recently-touched files/symbols, newest first, deduplicated. `limit` caps each list
35
+ * independently — store_memory calls this with a small limit so an unrelated file skimmed
36
+ * several turns ago doesn't get attached to an answer about something else.
37
+ */
38
+ export function getRecentEvidence(limit = 5) {
39
+ return {
40
+ filePaths: fileTouches.slice(-limit).reverse().map((t) => t.filePath),
41
+ symbols: symbolTouches.slice(-limit).reverse().map((t) => ({ filePath: t.filePath, symbolName: t.symbolName })),
42
+ };
43
+ }
44
+ /** Test seam — the lists are module-global and would otherwise leak between test cases. */
45
+ export function resetSessionEvidence() {
46
+ fileTouches.length = 0;
47
+ symbolTouches.length = 0;
48
+ }
49
+ //# sourceMappingURL=SessionEvidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionEvidence.js","sourceRoot":"","sources":["../../../src/utils/SessionEvidence.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,GAAG,EAAE,CAAC;AAWvB,4FAA4F;AAC5F,MAAM,WAAW,GAAgB,EAAE,CAAC;AACpC,MAAM,aAAa,GAAkB,EAAE,CAAC;AAExC,SAAS,UAAU,CAAI,IAAS,EAAE,KAAQ,EAAE,MAAyB;IACnE,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,WAAW,KAAK,CAAC,CAAC;QAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACpD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjB,OAAO,IAAI,CAAC,MAAM,GAAG,WAAW;QAAE,IAAI,CAAC,KAAK,EAAE,CAAC;AACjD,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,IAAI,CAAC,QAAQ;QAAE,OAAO;IACtB,UAAU,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;AACxE,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,UAAkB;IACpE,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU;QAAE,OAAO;IACrC,UAAU,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC;AACrH,CAAC;AAOD;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAK,GAAG,CAAC;IACzC,OAAO;QACL,SAAS,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;QACrE,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;KAChH,CAAC;AACJ,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,oBAAoB;IAClC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;IACvB,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3B,CAAC"}
@@ -19,6 +19,16 @@ export interface StateHashEntry {
19
19
  createdAt: number;
20
20
  hits: number;
21
21
  }
22
+ /**
23
+ * AN-19: state_hash_cache was advertised as "step 0 — look up before reasoning" but that was
24
+ * pure prose, with nothing operational reminding the caller at the moment it matters — the
25
+ * audit found 0 uses despite the documentation. `formatRecallNote` (workspaceShared.ts)
26
+ * already proved the pattern that actually gets adoption for search_memory: attach a nudge to
27
+ * an event that already happens (a file read), not to advisory text nobody re-reads. This is
28
+ * the same idea for the exact-hash cache: which stored entries reference this file, so a
29
+ * read_workspace_file caller can be told a matching cached answer might already exist.
30
+ */
31
+ export declare function entriesForFile(projectRoot: string, filePath: string): StateHashEntry[];
22
32
  export interface StateHashLookupResult {
23
33
  status: 'hit' | 'miss';
24
34
  entry?: StateHashEntry;
@@ -1 +1 @@
1
- {"version":3,"file":"StateHashCache.d.ts","sourceRoot":"","sources":["../../../src/utils/StateHashCache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AASH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAmED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,yFAAyF;AACzF,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EAAE,GAClB,qBAAqB,CAwBvB;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EAAE,GAClB,cAAc,CAmBhB"}
1
+ {"version":3,"file":"StateHashCache.d.ts","sourceRoot":"","sources":["../../../src/utils/StateHashCache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AASH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAmED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,EAAE,CAMtF;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,yFAAyF;AACzF,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EAAE,GAClB,qBAAqB,CAwBvB;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EAAE,GAClB,cAAc,CAmBhB"}
@@ -76,6 +76,20 @@ function hashFiles(projectRoot, filePaths) {
76
76
  }
77
77
  return hashes;
78
78
  }
79
+ /**
80
+ * AN-19: state_hash_cache was advertised as "step 0 — look up before reasoning" but that was
81
+ * pure prose, with nothing operational reminding the caller at the moment it matters — the
82
+ * audit found 0 uses despite the documentation. `formatRecallNote` (workspaceShared.ts)
83
+ * already proved the pattern that actually gets adoption for search_memory: attach a nudge to
84
+ * an event that already happens (a file read), not to advisory text nobody re-reads. This is
85
+ * the same idea for the exact-hash cache: which stored entries reference this file, so a
86
+ * read_workspace_file caller can be told a matching cached answer might already exist.
87
+ */
88
+ export function entriesForFile(projectRoot, filePath) {
89
+ const data = loadCache(projectRoot);
90
+ const target = path.resolve(projectRoot, filePath);
91
+ return data.entries.filter((e) => Object.keys(e.fileHashes).some((f) => path.resolve(projectRoot, f) === target));
92
+ }
79
93
  /** Look up a cached answer. Only a hit if every referenced file's hash still matches. */
80
94
  export function lookupStateHash(projectRoot, query, filePaths) {
81
95
  const data = loadCache(projectRoot);
@@ -1 +1 @@
1
- {"version":3,"file":"StateHashCache.js","sourceRoot":"","sources":["../../../src/utils/StateHashCache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StateHashCache.js","sourceRoot":"","sources":["../../../src/utils/StateHashCache.ts"],"names":[],"mappings":"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"}
@@ -34,6 +34,10 @@ interface CostPayload {
34
34
  /** Chars spent — converted with the same chars/4 heuristic as savings. */
35
35
  chars?: number;
36
36
  toolName?: string;
37
+ /** Connected host name ("claude-code", "cursor", ...). The proxy defaults to "unknown". */
38
+ host?: string;
39
+ /** Cost origin — in-process Lemma tool results report "lemma". */
40
+ origin?: string;
37
41
  }
38
42
  /**
39
43
  * Report tokens Lemma *spent* to the proxy's ledger. Same fire-and-forget contract
@@ -1 +1 @@
1
- {"version":3,"file":"reportSavings.d.ts","sourceRoot":"","sources":["../../../src/utils/reportSavings.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,KAAK,aAAa,GAAG,WAAW,GAAG,gBAAgB,GAAG,cAAc,GAAG,mBAAmB,GAAG,OAAO,CAAC;AAErG,UAAU,aAAa;IACrB,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,cAAc;IACtB,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,KAAK,aAAa,GAAG,aAAa,GAAG,cAAc,CAAC;AAYpD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAQ1D;AAED,KAAK,UAAU,GAAG,iBAAiB,GAAG,YAAY,GAAG,WAAW,CAAC;AAEjE,UAAU,WAAW;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAMrD"}
1
+ {"version":3,"file":"reportSavings.d.ts","sourceRoot":"","sources":["../../../src/utils/reportSavings.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,KAAK,aAAa,GAAG,WAAW,GAAG,gBAAgB,GAAG,cAAc,GAAG,mBAAmB,GAAG,OAAO,CAAC;AAErG,UAAU,aAAa;IACrB,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,cAAc;IACtB,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,KAAK,aAAa,GAAG,aAAa,GAAG,cAAc,CAAC;AAYpD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAQ1D;AAED,KAAK,UAAU,GAAG,iBAAiB,GAAG,YAAY,GAAG,WAAW,CAAC;AAEjE,UAAU,WAAW;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2FAA2F;IAC3F,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAMrD"}
@@ -1 +1 @@
1
- {"version":3,"file":"reportSavings.js","sourceRoot":"","sources":["../../../src/utils/reportSavings.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAuB7D,SAAS,YAAY;IACnB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,yBAAyB,CAAC,CAAC;QACpE,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAClD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,OAAsB;IAClD,IAAI,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;IACrC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5H,mFAAmF;QACnF,gEAAgE;QAChE,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAaD;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,OAAoB;IAC7C,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACrH,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED,SAAS,IAAI,CAAC,QAAgB,EAAE,OAAgB;IAC9C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAErC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;YACvB,QAAQ,EAAE,WAAW;YACrB,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;YACpB,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;aAC1C;SACF,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,yCAAyC;QACpE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChB,GAAG,CAAC,GAAG,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,kDAAkD;IACpD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"reportSavings.js","sourceRoot":"","sources":["../../../src/utils/reportSavings.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAuB7D,SAAS,YAAY;IACnB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,yBAAyB,CAAC,CAAC;QACpE,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAClD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,OAAsB;IAClD,IAAI,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;IACrC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5H,mFAAmF;QACnF,gEAAgE;QAChE,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAiBD;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,OAAoB;IAC7C,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACrH,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED,SAAS,IAAI,CAAC,QAAgB,EAAE,OAAgB;IAC9C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAErC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;YACvB,QAAQ,EAAE,WAAW;YACrB,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;YACpB,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;aAC1C;SACF,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,yCAAyC;QACpE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChB,GAAG,CAAC,GAAG,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,kDAAkD;IACpD,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nxuss/lemma",
3
- "version": "1.23.0",
3
+ "version": "1.24.0",
4
4
  "description": "Intelligent AI Gateway for IDEs & Agents — Semantic cache, Privacy Firewall, Infrastructure Command Center, and Autonomous Cost-Optimization.",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "module": "./dist/esm/index.js",