@nxuss/lemma 1.34.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.
Files changed (70) hide show
  1. package/README.md +37 -0
  2. package/bin/brain-ingest.js +28 -0
  3. package/bin/checkpoint.js +6 -0
  4. package/dist/cjs/cli/hostHooks.d.ts +3 -1
  5. package/dist/cjs/cli/hostHooks.d.ts.map +1 -1
  6. package/dist/cjs/cli/hostHooks.js +31 -13
  7. package/dist/cjs/cli/hostHooks.js.map +1 -1
  8. package/dist/cjs/mcp/index.js +2 -0
  9. package/dist/cjs/mcp/index.js.map +1 -1
  10. package/dist/cjs/mcp/staleBuild.d.ts +19 -0
  11. package/dist/cjs/mcp/staleBuild.d.ts.map +1 -1
  12. package/dist/cjs/mcp/staleBuild.js +73 -0
  13. package/dist/cjs/mcp/staleBuild.js.map +1 -1
  14. package/dist/cjs/mcp/tools/memory.d.ts.map +1 -1
  15. package/dist/cjs/mcp/tools/memory.js +84 -13
  16. package/dist/cjs/mcp/tools/memory.js.map +1 -1
  17. package/dist/cjs/subconscious/ExternalRefs.d.ts +47 -0
  18. package/dist/cjs/subconscious/ExternalRefs.d.ts.map +1 -0
  19. package/dist/cjs/subconscious/ExternalRefs.js +131 -0
  20. package/dist/cjs/subconscious/ExternalRefs.js.map +1 -0
  21. package/dist/cjs/subconscious/HostRecall.d.ts +22 -0
  22. package/dist/cjs/subconscious/HostRecall.d.ts.map +1 -1
  23. package/dist/cjs/subconscious/HostRecall.js +96 -0
  24. package/dist/cjs/subconscious/HostRecall.js.map +1 -1
  25. package/dist/cjs/subconscious/TheBrainV2.d.ts +16 -0
  26. package/dist/cjs/subconscious/TheBrainV2.d.ts.map +1 -1
  27. package/dist/cjs/subconscious/TheBrainV2.js +17 -0
  28. package/dist/cjs/subconscious/TheBrainV2.js.map +1 -1
  29. package/dist/cjs/utils/StoreDraft.d.ts +26 -0
  30. package/dist/cjs/utils/StoreDraft.d.ts.map +1 -0
  31. package/dist/cjs/utils/StoreDraft.js +81 -0
  32. package/dist/cjs/utils/StoreDraft.js.map +1 -0
  33. package/dist/cjs/utils/ageLabel.d.ts +3 -0
  34. package/dist/cjs/utils/ageLabel.d.ts.map +1 -0
  35. package/dist/cjs/utils/ageLabel.js +17 -0
  36. package/dist/cjs/utils/ageLabel.js.map +1 -0
  37. package/dist/esm/cli/hostHooks.d.ts +3 -1
  38. package/dist/esm/cli/hostHooks.d.ts.map +1 -1
  39. package/dist/esm/cli/hostHooks.js +30 -12
  40. package/dist/esm/cli/hostHooks.js.map +1 -1
  41. package/dist/esm/mcp/index.js +2 -0
  42. package/dist/esm/mcp/index.js.map +1 -1
  43. package/dist/esm/mcp/staleBuild.d.ts +19 -0
  44. package/dist/esm/mcp/staleBuild.d.ts.map +1 -1
  45. package/dist/esm/mcp/staleBuild.js +70 -0
  46. package/dist/esm/mcp/staleBuild.js.map +1 -1
  47. package/dist/esm/mcp/tools/memory.d.ts.map +1 -1
  48. package/dist/esm/mcp/tools/memory.js +84 -13
  49. package/dist/esm/mcp/tools/memory.js.map +1 -1
  50. package/dist/esm/subconscious/ExternalRefs.d.ts +47 -0
  51. package/dist/esm/subconscious/ExternalRefs.d.ts.map +1 -0
  52. package/dist/esm/subconscious/ExternalRefs.js +124 -0
  53. package/dist/esm/subconscious/ExternalRefs.js.map +1 -0
  54. package/dist/esm/subconscious/HostRecall.d.ts +22 -0
  55. package/dist/esm/subconscious/HostRecall.d.ts.map +1 -1
  56. package/dist/esm/subconscious/HostRecall.js +93 -0
  57. package/dist/esm/subconscious/HostRecall.js.map +1 -1
  58. package/dist/esm/subconscious/TheBrainV2.d.ts +16 -0
  59. package/dist/esm/subconscious/TheBrainV2.d.ts.map +1 -1
  60. package/dist/esm/subconscious/TheBrainV2.js +17 -0
  61. package/dist/esm/subconscious/TheBrainV2.js.map +1 -1
  62. package/dist/esm/utils/StoreDraft.d.ts +26 -0
  63. package/dist/esm/utils/StoreDraft.d.ts.map +1 -0
  64. package/dist/esm/utils/StoreDraft.js +74 -0
  65. package/dist/esm/utils/StoreDraft.js.map +1 -0
  66. package/dist/esm/utils/ageLabel.d.ts +3 -0
  67. package/dist/esm/utils/ageLabel.d.ts.map +1 -0
  68. package/dist/esm/utils/ageLabel.js +14 -0
  69. package/dist/esm/utils/ageLabel.js.map +1 -0
  70. package/package.json +1 -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,3 @@
1
+ /** "3d ago" / "5h ago" — a memory's age is half of whether to trust it, so it is always shown. */
2
+ export declare function ageLabel(iso: string | undefined, now?: number): string;
3
+ //# sourceMappingURL=ageLabel.d.ts.map
@@ -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.34.0",
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",