@nxuss/lemma 1.23.0 → 1.24.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -6
- package/dist/cjs/cli/lemma-proxy.d.ts.map +1 -1
- package/dist/cjs/cli/lemma-proxy.js +15 -3
- package/dist/cjs/cli/lemma-proxy.js.map +1 -1
- package/dist/cjs/infra/errorCause.d.ts +36 -0
- package/dist/cjs/infra/errorCause.d.ts.map +1 -0
- package/dist/cjs/infra/errorCause.js +143 -0
- package/dist/cjs/infra/errorCause.js.map +1 -0
- package/dist/cjs/infra/providers/JenkinsProvider.d.ts.map +1 -1
- package/dist/cjs/infra/providers/JenkinsProvider.js +5 -0
- package/dist/cjs/infra/providers/JenkinsProvider.js.map +1 -1
- package/dist/cjs/infra/providers/OKDProvider.d.ts.map +1 -1
- package/dist/cjs/infra/providers/OKDProvider.js +5 -1
- package/dist/cjs/infra/providers/OKDProvider.js.map +1 -1
- package/dist/cjs/infra/providers/TerraformProvider.d.ts.map +1 -1
- package/dist/cjs/infra/providers/TerraformProvider.js +3 -1
- package/dist/cjs/infra/providers/TerraformProvider.js.map +1 -1
- package/dist/cjs/mcp/index.js +21 -0
- package/dist/cjs/mcp/index.js.map +1 -1
- package/dist/cjs/mcp/tool-profiles.d.ts +6 -4
- package/dist/cjs/mcp/tool-profiles.d.ts.map +1 -1
- package/dist/cjs/mcp/tool-profiles.js.map +1 -1
- package/dist/cjs/mcp/tools/context-tools.d.ts.map +1 -1
- package/dist/cjs/mcp/tools/context-tools.js +3 -1
- package/dist/cjs/mcp/tools/context-tools.js.map +1 -1
- package/dist/cjs/mcp/tools/memory.d.ts.map +1 -1
- package/dist/cjs/mcp/tools/memory.js +45 -10
- package/dist/cjs/mcp/tools/memory.js.map +1 -1
- package/dist/cjs/mcp/tools/misc.d.ts.map +1 -1
- package/dist/cjs/mcp/tools/misc.js +21 -9
- package/dist/cjs/mcp/tools/misc.js.map +1 -1
- package/dist/cjs/mcp/tools/squeeze-cache.d.ts +6 -0
- package/dist/cjs/mcp/tools/squeeze-cache.d.ts.map +1 -1
- package/dist/cjs/mcp/tools/squeeze-cache.js +57 -17
- package/dist/cjs/mcp/tools/squeeze-cache.js.map +1 -1
- package/dist/cjs/mcp/tools/workspace.d.ts.map +1 -1
- package/dist/cjs/mcp/tools/workspace.js +7 -2
- package/dist/cjs/mcp/tools/workspace.js.map +1 -1
- package/dist/cjs/mcp/tools.d.ts +9 -0
- package/dist/cjs/mcp/tools.d.ts.map +1 -1
- package/dist/cjs/mcp/tools.js +72 -12
- package/dist/cjs/mcp/tools.js.map +1 -1
- package/dist/cjs/mcp/utils.d.ts.map +1 -1
- package/dist/cjs/mcp/utils.js +18 -4
- package/dist/cjs/mcp/utils.js.map +1 -1
- package/dist/cjs/mcp/workspaceShared.d.ts +1 -0
- package/dist/cjs/mcp/workspaceShared.d.ts.map +1 -1
- package/dist/cjs/mcp/workspaceShared.js +27 -0
- package/dist/cjs/mcp/workspaceShared.js.map +1 -1
- package/dist/cjs/subconscious/TheBrainV2.d.ts +43 -0
- package/dist/cjs/subconscious/TheBrainV2.d.ts.map +1 -1
- package/dist/cjs/subconscious/TheBrainV2.js +79 -7
- package/dist/cjs/subconscious/TheBrainV2.js.map +1 -1
- package/dist/cjs/utils/AnomalyInventory.d.ts +29 -0
- package/dist/cjs/utils/AnomalyInventory.d.ts.map +1 -0
- package/dist/cjs/utils/AnomalyInventory.js +58 -0
- package/dist/cjs/utils/AnomalyInventory.js.map +1 -0
- package/dist/cjs/utils/ExecutiveReport.d.ts +10 -0
- package/dist/cjs/utils/ExecutiveReport.d.ts.map +1 -1
- package/dist/cjs/utils/ExecutiveReport.js +17 -1
- package/dist/cjs/utils/ExecutiveReport.js.map +1 -1
- package/dist/cjs/utils/SavingsLedger.d.ts +45 -2
- package/dist/cjs/utils/SavingsLedger.d.ts.map +1 -1
- package/dist/cjs/utils/SavingsLedger.js +89 -5
- package/dist/cjs/utils/SavingsLedger.js.map +1 -1
- package/dist/cjs/utils/SessionEvidence.d.ts +28 -0
- package/dist/cjs/utils/SessionEvidence.d.ts.map +1 -0
- package/dist/cjs/utils/SessionEvidence.js +55 -0
- package/dist/cjs/utils/SessionEvidence.js.map +1 -0
- package/dist/cjs/utils/StateHashCache.d.ts +10 -0
- package/dist/cjs/utils/StateHashCache.d.ts.map +1 -1
- package/dist/cjs/utils/StateHashCache.js +15 -0
- package/dist/cjs/utils/StateHashCache.js.map +1 -1
- package/dist/cjs/utils/reportSavings.d.ts +4 -0
- package/dist/cjs/utils/reportSavings.d.ts.map +1 -1
- package/dist/cjs/utils/reportSavings.js.map +1 -1
- package/dist/esm/cli/lemma-proxy.d.ts.map +1 -1
- package/dist/esm/cli/lemma-proxy.js +15 -3
- package/dist/esm/cli/lemma-proxy.js.map +1 -1
- package/dist/esm/infra/errorCause.d.ts +36 -0
- package/dist/esm/infra/errorCause.d.ts.map +1 -0
- package/dist/esm/infra/errorCause.js +138 -0
- package/dist/esm/infra/errorCause.js.map +1 -0
- package/dist/esm/infra/providers/JenkinsProvider.d.ts.map +1 -1
- package/dist/esm/infra/providers/JenkinsProvider.js +5 -0
- package/dist/esm/infra/providers/JenkinsProvider.js.map +1 -1
- package/dist/esm/infra/providers/OKDProvider.d.ts.map +1 -1
- package/dist/esm/infra/providers/OKDProvider.js +5 -1
- package/dist/esm/infra/providers/OKDProvider.js.map +1 -1
- package/dist/esm/infra/providers/TerraformProvider.d.ts.map +1 -1
- package/dist/esm/infra/providers/TerraformProvider.js +3 -1
- package/dist/esm/infra/providers/TerraformProvider.js.map +1 -1
- package/dist/esm/mcp/index.js +21 -0
- package/dist/esm/mcp/index.js.map +1 -1
- package/dist/esm/mcp/tool-profiles.d.ts +6 -4
- package/dist/esm/mcp/tool-profiles.d.ts.map +1 -1
- package/dist/esm/mcp/tool-profiles.js.map +1 -1
- package/dist/esm/mcp/tools/context-tools.d.ts.map +1 -1
- package/dist/esm/mcp/tools/context-tools.js +3 -1
- package/dist/esm/mcp/tools/context-tools.js.map +1 -1
- package/dist/esm/mcp/tools/memory.d.ts.map +1 -1
- package/dist/esm/mcp/tools/memory.js +45 -10
- package/dist/esm/mcp/tools/memory.js.map +1 -1
- package/dist/esm/mcp/tools/misc.d.ts.map +1 -1
- package/dist/esm/mcp/tools/misc.js +21 -9
- package/dist/esm/mcp/tools/misc.js.map +1 -1
- package/dist/esm/mcp/tools/squeeze-cache.d.ts +6 -0
- package/dist/esm/mcp/tools/squeeze-cache.d.ts.map +1 -1
- package/dist/esm/mcp/tools/squeeze-cache.js +56 -17
- package/dist/esm/mcp/tools/squeeze-cache.js.map +1 -1
- package/dist/esm/mcp/tools/workspace.d.ts.map +1 -1
- package/dist/esm/mcp/tools/workspace.js +8 -3
- package/dist/esm/mcp/tools/workspace.js.map +1 -1
- package/dist/esm/mcp/tools.d.ts +9 -0
- package/dist/esm/mcp/tools.d.ts.map +1 -1
- package/dist/esm/mcp/tools.js +71 -12
- package/dist/esm/mcp/tools.js.map +1 -1
- package/dist/esm/mcp/utils.d.ts.map +1 -1
- package/dist/esm/mcp/utils.js +18 -4
- package/dist/esm/mcp/utils.js.map +1 -1
- package/dist/esm/mcp/workspaceShared.d.ts +1 -0
- package/dist/esm/mcp/workspaceShared.d.ts.map +1 -1
- package/dist/esm/mcp/workspaceShared.js +26 -0
- package/dist/esm/mcp/workspaceShared.js.map +1 -1
- package/dist/esm/subconscious/TheBrainV2.d.ts +43 -0
- package/dist/esm/subconscious/TheBrainV2.d.ts.map +1 -1
- package/dist/esm/subconscious/TheBrainV2.js +79 -7
- package/dist/esm/subconscious/TheBrainV2.js.map +1 -1
- package/dist/esm/utils/AnomalyInventory.d.ts +29 -0
- package/dist/esm/utils/AnomalyInventory.d.ts.map +1 -0
- package/dist/esm/utils/AnomalyInventory.js +49 -0
- package/dist/esm/utils/AnomalyInventory.js.map +1 -0
- package/dist/esm/utils/ExecutiveReport.d.ts +10 -0
- package/dist/esm/utils/ExecutiveReport.d.ts.map +1 -1
- package/dist/esm/utils/ExecutiveReport.js +17 -1
- package/dist/esm/utils/ExecutiveReport.js.map +1 -1
- package/dist/esm/utils/SavingsLedger.d.ts +45 -2
- package/dist/esm/utils/SavingsLedger.d.ts.map +1 -1
- package/dist/esm/utils/SavingsLedger.js +89 -5
- package/dist/esm/utils/SavingsLedger.js.map +1 -1
- package/dist/esm/utils/SessionEvidence.d.ts +28 -0
- package/dist/esm/utils/SessionEvidence.d.ts.map +1 -0
- package/dist/esm/utils/SessionEvidence.js +49 -0
- package/dist/esm/utils/SessionEvidence.js.map +1 -0
- package/dist/esm/utils/StateHashCache.d.ts +10 -0
- package/dist/esm/utils/StateHashCache.d.ts.map +1 -1
- package/dist/esm/utils/StateHashCache.js +14 -0
- package/dist/esm/utils/StateHashCache.js.map +1 -1
- package/dist/esm/utils/reportSavings.d.ts +4 -0
- package/dist/esm/utils/reportSavings.d.ts.map +1 -1
- package/dist/esm/utils/reportSavings.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/@nxuss/lemma)
|
|
4
4
|
[](https://github.com/Nxusbets/lemma/blob/main/LICENSE)
|
|
5
|
-
[](https://github.com/Nxusbets/lemma)
|
|
6
6
|
[](https://github.com/Nxusbets/lemma)
|
|
7
7
|
[](https://github.com/Nxusbets/lemma)
|
|
8
|
-
[](https://github.com/Nxusbets/lemma)
|
|
9
9
|
|
|
10
10
|
```text
|
|
11
11
|
__
|
|
@@ -34,6 +34,12 @@ lemma start # gateway + dashboard on http://localhost:8081
|
|
|
34
34
|
> **Muse** — no setup needed. This repo is already Muse-compatible zero-config: clone and open with `muse` — the skill at `.agents/skills/lemma/SKILL.md` auto-loads and `lemma call` works via `bash`. See [MCP integration](#-mcp-integration).
|
|
35
35
|
>
|
|
36
36
|
> **🆕 v1.22.0 — Lemma auto-activates in every LLM client.** `npm i -g @nxuss/lemma` registers the skill in your **user** catalog (auto-loads in every `muse` session, any project) and `lemma init` wires each project for Muse, Claude Code, Cursor, Codex, Windsurf, Kiro and OpenCode. Health check: `lemma doctor`.
|
|
37
|
+
>
|
|
38
|
+
> **🆕 v1.24.0 — the Brain stops crediting what it can't verify.** `smarter_cache` no longer
|
|
39
|
+
> presents a stale hit as a clean one (`stale:true`/`tokensSaved:0` + why, instead of a silent
|
|
40
|
+
> guess); `store_memory` derives evidence by default from files/symbols the session already
|
|
41
|
+
> touched instead of depending on the caller to pass them; every "tokens saved" figure now cites
|
|
42
|
+
> the `hits` that earned it. See [`CHANGELOG.md`](CHANGELOG.md) for the full list.
|
|
37
43
|
|
|
38
44
|
---
|
|
39
45
|
|
|
@@ -53,8 +59,11 @@ lemma start # gateway + dashboard on http://localhost:8081
|
|
|
53
59
|
tags; a passing `test_oracle` run over an uncommitted diff auto-captures itself; two memories
|
|
54
60
|
about the same symbol that disagree on outcome are flagged, not silently both suggested.
|
|
55
61
|
Every hit explains itself (`whyShown` ranking signals + cited `evidence` files/symbols), and
|
|
56
|
-
every reuse books its savings onto the memory itself — `brain_stats`
|
|
57
|
-
actually pay for the Brain (`totalTokensSaved
|
|
62
|
+
every reuse books its savings onto the memory itself — `brain_stats` and `brain_upkeep` name
|
|
63
|
+
which memories actually pay for the Brain (`totalTokensSaved` alongside the `hits` that earned
|
|
64
|
+
it, never one without the other). `store_memory` derives `filePaths`/`symbols` by default from
|
|
65
|
+
whatever the session already read, wrote, or patched when the caller doesn't pass them —
|
|
66
|
+
flagged as auto-derived in the response, correctable, but no longer opt-in.
|
|
58
67
|
- **A memory that maintains itself** — `brain_upkeep` revalidates the most-reused memories,
|
|
59
68
|
surfaces exact duplicates and merge candidates, dead weight, and savings in one read-only
|
|
60
69
|
pass, each finding with its fix. `brain_merge` folds near-duplicate fragments into one
|
|
@@ -70,8 +79,11 @@ lemma start # gateway + dashboard on http://localhost:8081
|
|
|
70
79
|
corpus AES-256-GCM encrypted under a local 0600 key; secrets never reach disk at all —
|
|
71
80
|
scrub-on-store redacts credentials one-way before indexing or persisting.
|
|
72
81
|
- **Verifiable caching, not marketing numbers** — `state_hash_cache` only hits when the files an
|
|
73
|
-
answer depends on are byte-identical
|
|
74
|
-
|
|
82
|
+
answer depends on are byte-identical, and reading a file it already tracks an answer for
|
|
83
|
+
surfaces that proactively, the same way a Brain memory does. A `smarter_cache` hit on a memory
|
|
84
|
+
whose evidence changed comes back `stale:true`/`tokensSaved:0` with a warning instead of
|
|
85
|
+
looking like a clean hit. `token_receipt` gives a real per-session breakdown of how each answer
|
|
86
|
+
was produced instead of an invented "% saved."
|
|
75
87
|
- **Privacy Firewall** — API keys, credentials, and PII are scrubbed automatically from every file
|
|
76
88
|
read and workspace search, before anything leaves your machine.
|
|
77
89
|
- **Zero-token static intelligence** — dependency graphs, entropy/coupling/risk scores, and an AST
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lemma-proxy.d.ts","sourceRoot":"","sources":["../../../src/cli/lemma-proxy.ts"],"names":[],"mappings":";AA0cA,wBAAgB,+BAA+B,CAAC,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CA4DvF;AAqfD,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGtD;
|
|
1
|
+
{"version":3,"file":"lemma-proxy.d.ts","sourceRoot":"","sources":["../../../src/cli/lemma-proxy.ts"],"names":[],"mappings":";AA0cA,wBAAgB,+BAA+B,CAAC,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CA4DvF;AAqfD,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGtD;AAsrDD,wBAAsB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA8KhL"}
|
|
@@ -1566,16 +1566,28 @@ class LemmaServer {
|
|
|
1566
1566
|
// Cost Record Endpoint — the counterpart to /api/savings-record. Without it the
|
|
1567
1567
|
// ledger only ever counts wins, which makes its totals unfalsifiable.
|
|
1568
1568
|
this.app.post('/api/cost-record', (req, res) => {
|
|
1569
|
-
|
|
1569
|
+
// AN-01: attribution rides in the same body — tool/host/origin are what turn
|
|
1570
|
+
// the toolResult bucket from an inscrutable total into auditable accounting.
|
|
1571
|
+
// Unknown/unset stays "unknown": unattributed events are labeled, never re-homed.
|
|
1572
|
+
const { source, tokens, chars, toolName, tool, host, origin } = req.body || {};
|
|
1570
1573
|
const validSources = ['mcpInstructions', 'toolResult', 'cacheMiss'];
|
|
1571
1574
|
if (!source || !validSources.includes(source)) {
|
|
1572
1575
|
return res.status(400).json({ error: 'Invalid cost source' });
|
|
1573
1576
|
}
|
|
1577
|
+
const attribution = typeof toolName === 'string' || typeof tool === 'string' ||
|
|
1578
|
+
typeof host === 'string' || typeof origin === 'string'
|
|
1579
|
+
? {
|
|
1580
|
+
...(typeof toolName === 'string' && toolName ? { tool: toolName.slice(0, 128) } : {}),
|
|
1581
|
+
...(typeof tool === 'string' && tool ? { tool: tool.slice(0, 128) } : {}),
|
|
1582
|
+
...(typeof host === 'string' && host ? { host } : {}),
|
|
1583
|
+
...(typeof origin === 'string' && origin ? { origin } : {}),
|
|
1584
|
+
}
|
|
1585
|
+
: undefined;
|
|
1574
1586
|
if (typeof tokens === 'number' && tokens > 0) {
|
|
1575
|
-
SavingsLedger_1.savingsLedger.recordCost(source, tokens);
|
|
1587
|
+
SavingsLedger_1.savingsLedger.recordCost(source, tokens, attribution);
|
|
1576
1588
|
}
|
|
1577
1589
|
else if (typeof chars === 'number' && chars > 0) {
|
|
1578
|
-
SavingsLedger_1.savingsLedger.recordCostChars(source, chars);
|
|
1590
|
+
SavingsLedger_1.savingsLedger.recordCostChars(source, chars, attribution);
|
|
1579
1591
|
}
|
|
1580
1592
|
const snap = SavingsLedger_1.savingsLedger.getSnapshot();
|
|
1581
1593
|
res.json({ ok: true, totalCost: snap.totalCost, net: snap.net });
|