@nxuss/lemma 1.33.0 → 1.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -0
- package/bin/brain-ingest.js +28 -0
- package/bin/checkpoint.js +6 -0
- package/dashboard/README.md +28 -332
- package/dashboard/dist/assets/{index-Dh-whqJ7.js → index-euG1IvQ7.js} +82 -82
- package/dashboard/dist/index.html +1 -1
- package/dist/cjs/cli/hostHooks.d.ts +3 -1
- package/dist/cjs/cli/hostHooks.d.ts.map +1 -1
- package/dist/cjs/cli/hostHooks.js +31 -13
- package/dist/cjs/cli/hostHooks.js.map +1 -1
- package/dist/cjs/cli/lemma-proxy.d.ts.map +1 -1
- package/dist/cjs/cli/lemma-proxy.js +20 -1
- package/dist/cjs/cli/lemma-proxy.js.map +1 -1
- package/dist/cjs/mcp/index.js +2 -0
- package/dist/cjs/mcp/index.js.map +1 -1
- package/dist/cjs/mcp/staleBuild.d.ts +19 -0
- package/dist/cjs/mcp/staleBuild.d.ts.map +1 -1
- package/dist/cjs/mcp/staleBuild.js +73 -0
- package/dist/cjs/mcp/staleBuild.js.map +1 -1
- package/dist/cjs/mcp/tools/memory.d.ts.map +1 -1
- package/dist/cjs/mcp/tools/memory.js +84 -13
- package/dist/cjs/mcp/tools/memory.js.map +1 -1
- package/dist/cjs/proxy/DebuggerState.d.ts +3 -0
- package/dist/cjs/proxy/DebuggerState.d.ts.map +1 -0
- package/dist/cjs/proxy/DebuggerState.js +18 -0
- package/dist/cjs/proxy/DebuggerState.js.map +1 -0
- package/dist/cjs/subconscious/ExternalRefs.d.ts +47 -0
- package/dist/cjs/subconscious/ExternalRefs.d.ts.map +1 -0
- package/dist/cjs/subconscious/ExternalRefs.js +131 -0
- package/dist/cjs/subconscious/ExternalRefs.js.map +1 -0
- package/dist/cjs/subconscious/HostRecall.d.ts +22 -0
- package/dist/cjs/subconscious/HostRecall.d.ts.map +1 -1
- package/dist/cjs/subconscious/HostRecall.js +96 -0
- package/dist/cjs/subconscious/HostRecall.js.map +1 -1
- package/dist/cjs/subconscious/TheBrainV2.d.ts +16 -0
- package/dist/cjs/subconscious/TheBrainV2.d.ts.map +1 -1
- package/dist/cjs/subconscious/TheBrainV2.js +17 -0
- package/dist/cjs/subconscious/TheBrainV2.js.map +1 -1
- package/dist/cjs/utils/StoreDraft.d.ts +26 -0
- package/dist/cjs/utils/StoreDraft.d.ts.map +1 -0
- package/dist/cjs/utils/StoreDraft.js +81 -0
- package/dist/cjs/utils/StoreDraft.js.map +1 -0
- package/dist/cjs/utils/ageLabel.d.ts +3 -0
- package/dist/cjs/utils/ageLabel.d.ts.map +1 -0
- package/dist/cjs/utils/ageLabel.js +17 -0
- package/dist/cjs/utils/ageLabel.js.map +1 -0
- package/dist/esm/cli/hostHooks.d.ts +3 -1
- package/dist/esm/cli/hostHooks.d.ts.map +1 -1
- package/dist/esm/cli/hostHooks.js +30 -12
- package/dist/esm/cli/hostHooks.js.map +1 -1
- package/dist/esm/cli/lemma-proxy.d.ts.map +1 -1
- package/dist/esm/cli/lemma-proxy.js +20 -1
- package/dist/esm/cli/lemma-proxy.js.map +1 -1
- package/dist/esm/mcp/index.js +2 -0
- package/dist/esm/mcp/index.js.map +1 -1
- package/dist/esm/mcp/staleBuild.d.ts +19 -0
- package/dist/esm/mcp/staleBuild.d.ts.map +1 -1
- package/dist/esm/mcp/staleBuild.js +70 -0
- package/dist/esm/mcp/staleBuild.js.map +1 -1
- package/dist/esm/mcp/tools/memory.d.ts.map +1 -1
- package/dist/esm/mcp/tools/memory.js +84 -13
- package/dist/esm/mcp/tools/memory.js.map +1 -1
- package/dist/esm/proxy/DebuggerState.d.ts +3 -0
- package/dist/esm/proxy/DebuggerState.d.ts.map +1 -0
- package/dist/esm/proxy/DebuggerState.js +14 -0
- package/dist/esm/proxy/DebuggerState.js.map +1 -0
- package/dist/esm/subconscious/ExternalRefs.d.ts +47 -0
- package/dist/esm/subconscious/ExternalRefs.d.ts.map +1 -0
- package/dist/esm/subconscious/ExternalRefs.js +124 -0
- package/dist/esm/subconscious/ExternalRefs.js.map +1 -0
- package/dist/esm/subconscious/HostRecall.d.ts +22 -0
- package/dist/esm/subconscious/HostRecall.d.ts.map +1 -1
- package/dist/esm/subconscious/HostRecall.js +93 -0
- package/dist/esm/subconscious/HostRecall.js.map +1 -1
- package/dist/esm/subconscious/TheBrainV2.d.ts +16 -0
- package/dist/esm/subconscious/TheBrainV2.d.ts.map +1 -1
- package/dist/esm/subconscious/TheBrainV2.js +17 -0
- package/dist/esm/subconscious/TheBrainV2.js.map +1 -1
- package/dist/esm/utils/StoreDraft.d.ts +26 -0
- package/dist/esm/utils/StoreDraft.d.ts.map +1 -0
- package/dist/esm/utils/StoreDraft.js +74 -0
- package/dist/esm/utils/StoreDraft.js.map +1 -0
- package/dist/esm/utils/ageLabel.d.ts +3 -0
- package/dist/esm/utils/ageLabel.d.ts.map +1 -0
- package/dist/esm/utils/ageLabel.js +14 -0
- package/dist/esm/utils/ageLabel.js.map +1 -0
- package/package.json +4 -2
- package/dashboard/dist/assets/index-Dh-whqJ7.js.map +0 -1
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StoreDraft — the write trigger the Brain was missing.
|
|
3
|
+
*
|
|
4
|
+
* Rule 4 (store only after verification) is right, but nothing prompted a store at the moment
|
|
5
|
+
* something was verified; by the next session the merge, the green pipeline and the closed issue
|
|
6
|
+
* were facts no memory held. A SessionEnd hook cannot speak to the model, so the checkpoint
|
|
7
|
+
* leaves a draft behind and the next UserPromptSubmit surfaces it once (see recallForPrompt):
|
|
8
|
+
* what moved in the last session, with commit shas ready to attach as `refs`.
|
|
9
|
+
*
|
|
10
|
+
* It only records what git shows. It never stores a memory and never decides something was
|
|
11
|
+
* verified — that stays the agent's call.
|
|
12
|
+
*/
|
|
13
|
+
import fs from 'fs';
|
|
14
|
+
import path from 'path';
|
|
15
|
+
import { execFileSync } from 'child_process';
|
|
16
|
+
const DRAFT_FILE = path.join('.lemma', 'session', 'store-draft.json');
|
|
17
|
+
/** Commits older than this were not this session's work. */
|
|
18
|
+
const WINDOW = '12.hours';
|
|
19
|
+
function git(root, args) {
|
|
20
|
+
try {
|
|
21
|
+
return execFileSync('git', ['-C', root, ...args], { encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }).trimEnd();
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return '';
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/** Writes a draft when the session left something to store; returns it, or null when quiet. */
|
|
28
|
+
export function writeStoreDraft(root) {
|
|
29
|
+
try {
|
|
30
|
+
const branch = git(root, ['rev-parse', '--abbrev-ref', 'HEAD']);
|
|
31
|
+
if (!branch)
|
|
32
|
+
return null;
|
|
33
|
+
const commits = git(root, ['log', `--since=${WINDOW}`, '-5', '--format=%h%x09%s'])
|
|
34
|
+
.split('\n')
|
|
35
|
+
.filter(Boolean)
|
|
36
|
+
.map((l) => {
|
|
37
|
+
const [sha, ...rest] = l.split('\t');
|
|
38
|
+
return { sha, subject: rest.join('\t').slice(0, 100) };
|
|
39
|
+
});
|
|
40
|
+
const uncommittedFiles = git(root, ['status', '--porcelain']).split('\n').filter(Boolean).length;
|
|
41
|
+
if (commits.length === 0 && uncommittedFiles === 0)
|
|
42
|
+
return null;
|
|
43
|
+
const draft = { createdAt: new Date().toISOString(), branch, commits, uncommittedFiles };
|
|
44
|
+
const file = path.join(root, DRAFT_FILE);
|
|
45
|
+
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
46
|
+
fs.writeFileSync(file, JSON.stringify(draft));
|
|
47
|
+
return draft;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/** One-shot: returns the note for a pending draft and deletes it, or '' when there is none. */
|
|
54
|
+
export function consumeStoreDraft(root) {
|
|
55
|
+
const file = path.join(root, DRAFT_FILE);
|
|
56
|
+
try {
|
|
57
|
+
const d = JSON.parse(fs.readFileSync(file, 'utf8'));
|
|
58
|
+
fs.unlinkSync(file);
|
|
59
|
+
if (!d || !Array.isArray(d.commits))
|
|
60
|
+
return '';
|
|
61
|
+
const parts = [];
|
|
62
|
+
if (d.commits.length > 0)
|
|
63
|
+
parts.push(`${d.commits.length} commit(s) on ${d.branch} (${d.commits.map((c) => `${c.sha} ${c.subject}`).join('; ')})`);
|
|
64
|
+
if (d.uncommittedFiles > 0)
|
|
65
|
+
parts.push(`${d.uncommittedFiles} uncommitted file(s)`);
|
|
66
|
+
if (parts.length === 0)
|
|
67
|
+
return '';
|
|
68
|
+
return `🧠 The last session ended with ${parts.join(' and ')} and the Brain holds nothing about them unless you stored it. If something was verified (fix confirmed, MR merged, issue closed), store_memory it — attach commit shas, and MR/issue numbers with their state, as \`refs\` so verify_memory can tell when it goes stale.`;
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return '';
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=StoreDraft.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StoreDraft.js","sourceRoot":"","sources":["../../../src/utils/StoreDraft.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ageLabel.d.ts","sourceRoot":"","sources":["../../../src/utils/ageLabel.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,GAAE,MAAmB,GAAG,MAAM,CAQlF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** "3d ago" / "5h ago" — a memory's age is half of whether to trust it, so it is always shown. */
|
|
2
|
+
export function ageLabel(iso, now = Date.now()) {
|
|
3
|
+
const t = Date.parse(iso || '');
|
|
4
|
+
if (!Number.isFinite(t))
|
|
5
|
+
return 'age unknown';
|
|
6
|
+
const mins = Math.max(0, Math.round((now - t) / 60000));
|
|
7
|
+
if (mins < 60)
|
|
8
|
+
return `${mins}m ago`;
|
|
9
|
+
const hours = Math.round(mins / 60);
|
|
10
|
+
if (hours < 48)
|
|
11
|
+
return `${hours}h ago`;
|
|
12
|
+
return `${Math.round(hours / 24)}d ago`;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=ageLabel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ageLabel.js","sourceRoot":"","sources":["../../../src/utils/ageLabel.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,MAAM,UAAU,QAAQ,CAAC,GAAuB,EAAE,MAAc,IAAI,CAAC,GAAG,EAAE;IACxE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IAChC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,aAAa,CAAC;IAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,KAAM,CAAC,CAAC,CAAC;IACzD,IAAI,IAAI,GAAG,EAAE;QAAE,OAAO,GAAG,IAAI,OAAO,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;IACpC,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,GAAG,KAAK,OAAO,CAAC;IACvC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC;AAC1C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nxuss/lemma",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.35.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",
|
|
@@ -93,6 +93,7 @@
|
|
|
93
93
|
"bin/brain-ingest.js",
|
|
94
94
|
".agents/skills/lemma/SKILL.md",
|
|
95
95
|
"dashboard/dist/**/*",
|
|
96
|
+
"!dashboard/dist/**/*.map",
|
|
96
97
|
"sdks/crewai/dist/**/*",
|
|
97
98
|
"!dist/examples/**",
|
|
98
99
|
"README.md",
|
|
@@ -103,11 +104,12 @@
|
|
|
103
104
|
"proxy:stop": "node lemma-proxy.cjs stop",
|
|
104
105
|
"proxy:stats": "node lemma-proxy.cjs stats",
|
|
105
106
|
"proxy:status": "node lemma-proxy.cjs status",
|
|
106
|
-
"build": "npm run build:esm && npm run build:cjs && npm run build:sdks",
|
|
107
|
+
"build": "npm run build:esm && npm run build:cjs && npm run build:sdks && npm run build:dashboard",
|
|
107
108
|
"build:full": "npm run build",
|
|
108
109
|
"build:esm": "tsc --outDir ./dist/esm",
|
|
109
110
|
"build:cjs": "tsc --project tsconfig.cjs.json",
|
|
110
111
|
"build:sdks": "npm run sdk:build",
|
|
112
|
+
"build:dashboard": "npm --prefix dashboard run build",
|
|
111
113
|
"postbuild": "node scripts/post-build.js && node scripts/fix-esm-extensions.js",
|
|
112
114
|
"prepare": "npm run build:cjs 2>&1 | tail -n 5 || true",
|
|
113
115
|
"postinstall": "node bin/postinstall.js || true",
|