@nxuss/lemma 1.25.0 → 1.26.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.
Files changed (34) hide show
  1. package/README.md +14 -3
  2. package/dist/cjs/cli/lemma-proxy.d.ts.map +1 -1
  3. package/dist/cjs/cli/lemma-proxy.js +10 -2
  4. package/dist/cjs/cli/lemma-proxy.js.map +1 -1
  5. package/dist/cjs/mcp/index.js +15 -0
  6. package/dist/cjs/mcp/index.js.map +1 -1
  7. package/dist/cjs/mcp/tools/memory.d.ts.map +1 -1
  8. package/dist/cjs/mcp/tools/memory.js +57 -7
  9. package/dist/cjs/mcp/tools/memory.js.map +1 -1
  10. package/dist/cjs/subconscious/TheBrainV2.d.ts +20 -0
  11. package/dist/cjs/subconscious/TheBrainV2.d.ts.map +1 -1
  12. package/dist/cjs/subconscious/TheBrainV2.js +76 -10
  13. package/dist/cjs/subconscious/TheBrainV2.js.map +1 -1
  14. package/dist/cjs/utils/ClipboardWatcher.d.ts +5 -2
  15. package/dist/cjs/utils/ClipboardWatcher.d.ts.map +1 -1
  16. package/dist/cjs/utils/ClipboardWatcher.js +38 -4
  17. package/dist/cjs/utils/ClipboardWatcher.js.map +1 -1
  18. package/dist/esm/cli/lemma-proxy.d.ts.map +1 -1
  19. package/dist/esm/cli/lemma-proxy.js +10 -2
  20. package/dist/esm/cli/lemma-proxy.js.map +1 -1
  21. package/dist/esm/mcp/index.js +15 -0
  22. package/dist/esm/mcp/index.js.map +1 -1
  23. package/dist/esm/mcp/tools/memory.d.ts.map +1 -1
  24. package/dist/esm/mcp/tools/memory.js +57 -7
  25. package/dist/esm/mcp/tools/memory.js.map +1 -1
  26. package/dist/esm/subconscious/TheBrainV2.d.ts +20 -0
  27. package/dist/esm/subconscious/TheBrainV2.d.ts.map +1 -1
  28. package/dist/esm/subconscious/TheBrainV2.js +75 -10
  29. package/dist/esm/subconscious/TheBrainV2.js.map +1 -1
  30. package/dist/esm/utils/ClipboardWatcher.d.ts +5 -2
  31. package/dist/esm/utils/ClipboardWatcher.d.ts.map +1 -1
  32. package/dist/esm/utils/ClipboardWatcher.js +39 -5
  33. package/dist/esm/utils/ClipboardWatcher.js.map +1 -1
  34. package/package.json +1 -1
@@ -8,22 +8,56 @@ const child_process_1 = require("child_process");
8
8
  const ContextSqueezer_1 = require("./ContextSqueezer");
9
9
  const SavingsLedger_1 = require("./SavingsLedger");
10
10
  /**
11
- * Reads text content from the macOS system clipboard using native pbpaste
11
+ * Reads text content from the OS system clipboard.
12
+ * macOS: pbpaste. Windows: PowerShell Get-Clipboard. Linux: xclip/xsel (best-effort,
13
+ * neither is guaranteed to be installed on a headless box, so failures are silent).
12
14
  */
13
15
  function readClipboard() {
14
16
  try {
15
- return (0, child_process_1.execSync)('pbpaste', { encoding: 'utf8' });
17
+ if (process.platform === 'darwin') {
18
+ return (0, child_process_1.execFileSync)('pbpaste', { encoding: 'utf8' });
19
+ }
20
+ if (process.platform === 'win32') {
21
+ return (0, child_process_1.execFileSync)('powershell.exe', ['-NoProfile', '-NonInteractive', '-Command', 'Get-Clipboard -Raw'], { encoding: 'utf8', windowsHide: true });
22
+ }
23
+ try {
24
+ return (0, child_process_1.execFileSync)('xclip', ['-selection', 'clipboard', '-o'], { encoding: 'utf8' });
25
+ }
26
+ catch {
27
+ return (0, child_process_1.execFileSync)('xsel', ['--clipboard', '--output'], { encoding: 'utf8' });
28
+ }
16
29
  }
17
30
  catch (err) {
18
31
  return '';
19
32
  }
20
33
  }
21
34
  /**
22
- * Writes text content to the macOS system clipboard using native pbcopy
35
+ * Writes text content to the OS system clipboard.
36
+ * macOS: pbcopy. Windows: PowerShell Set-Clipboard. Linux: xclip/xsel (best-effort).
23
37
  */
24
38
  function writeClipboard(text) {
25
39
  try {
26
- const proc = (0, child_process_1.spawn)('pbcopy');
40
+ if (process.platform === 'darwin') {
41
+ const proc = (0, child_process_1.spawn)('pbcopy');
42
+ proc.on('error', () => { });
43
+ proc.stdin.write(text);
44
+ proc.stdin.end();
45
+ return;
46
+ }
47
+ if (process.platform === 'win32') {
48
+ const proc = (0, child_process_1.spawn)('powershell.exe', ['-NoProfile', '-NonInteractive', '-Command', '$input | Set-Clipboard'], { windowsHide: true });
49
+ proc.on('error', () => { });
50
+ proc.stdin.write(text);
51
+ proc.stdin.end();
52
+ return;
53
+ }
54
+ const proc = (0, child_process_1.spawn)('xclip', ['-selection', 'clipboard']);
55
+ proc.on('error', () => {
56
+ const fallback = (0, child_process_1.spawn)('xsel', ['--clipboard', '--input']);
57
+ fallback.on('error', () => { });
58
+ fallback.stdin.write(text);
59
+ fallback.stdin.end();
60
+ });
27
61
  proc.stdin.write(text);
28
62
  proc.stdin.end();
29
63
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ClipboardWatcher.js","sourceRoot":"","sources":["../../../src/utils/ClipboardWatcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ClipboardWatcher.js","sourceRoot":"","sources":["../../../src/utils/ClipboardWatcher.ts"],"names":[],"mappings":";;AASA,sCAoBC;AAMD,wCA8BC;AAMD,kCA2BC;AAMD,sDA2CC;AAnJD,iDAAoD;AACpD,uDAAgD;AAChD,mDAAgD;AAEhD;;;;GAIG;AACH,SAAgB,aAAa;IAC3B,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClC,OAAO,IAAA,4BAAY,EAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,OAAO,IAAA,4BAAY,EACjB,gBAAgB,EAChB,CAAC,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,oBAAoB,CAAC,EACnE,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CACxC,CAAC;QACJ,CAAC;QACD,IAAI,CAAC;YACH,OAAO,IAAA,4BAAY,EAAC,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACxF,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAA,4BAAY,EAAC,MAAM,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,cAAc,CAAC,IAAY;IACzC,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,IAAA,qBAAK,EAAC,QAAQ,CAAC,CAAC;YAC7B,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACvB,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,IAAA,qBAAK,EAChB,gBAAgB,EAChB,CAAC,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,wBAAwB,CAAC,EACvE,EAAE,WAAW,EAAE,IAAI,EAAE,CACtB,CAAC;YACF,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACvB,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,IAAA,qBAAK,EAAC,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACpB,MAAM,QAAQ,GAAG,IAAA,qBAAK,EAAC,MAAM,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC;YAC3D,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAC/B,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;IACnB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC,CAAA,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,SAAgB,WAAW,CAAC,IAAY;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,KAAK,CAAC;IAEtC,6EAA6E;IAC7E,IAAI,OAAO,CAAC,QAAQ,CAAC,0CAA0C,CAAC;QAAE,OAAO,KAAK,CAAC;IAE/E,mEAAmE;IACnE,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtE,gCAAgC;IAChC,MAAM,WAAW,GAAG;QAClB,sBAAsB;QACtB,0DAA0D;QAC1D,8BAA8B;QAC9B,oCAAoC;QACpC,8BAA8B;QAC9B,gCAAgC;QAChC,wBAAwB,EAAE,SAAS;QACnC,wBAAwB,EAAE,OAAO;QACjC,qCAAqC;QACrC,0BAA0B;QAC1B,sBAAsB;QACtB,uBAAuB;KACxB,CAAC;IAEF,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACrD,CAAC;AAED;;;GAGG;AACH,SAAgB,qBAAqB,CAAC,UAAU,GAAG,IAAI;IACrD,IAAI,oBAAoB,GAAG,aAAa,EAAE,CAAC;IAE3C,OAAO,CAAC,GAAG,CAAC,4EAA4E,UAAU,KAAK,CAAC,CAAC;IACzG,OAAO,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAC;IAEzF,WAAW,CAAC,GAAG,EAAE;QACf,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,aAAa,EAAE,CAAC;YACvC,IAAI,cAAc,KAAK,oBAAoB;gBAAE,OAAO;YAEpD,0DAA0D;YAC1D,oBAAoB,GAAG,cAAc,CAAC;YAEtC,IAAI,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC;gBAChC,MAAM,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC;gBAE7C,qBAAqB;gBACrB,MAAM,QAAQ,GAAG,IAAA,6BAAW,EAAC,cAAc,CAAC,CAAC;gBAE7C,mEAAmE;gBACnE,MAAM,MAAM,GAAG,4CAA4C,CAAC;gBAC5D,MAAM,YAAY,GAAG,GAAG,MAAM,GAAG,QAAQ,EAAE,CAAC;gBAE5C,MAAM,cAAc,GAAG,YAAY,CAAC,MAAM,CAAC;gBAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,cAAc,CAAC,CAAC;gBAC7D,MAAM,OAAO,GAAG,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,cAAc,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBAEzF,8BAA8B;gBAC9B,cAAc,CAAC,YAAY,CAAC,CAAC;gBAE7B,mEAAmE;gBACnE,oBAAoB,GAAG,YAAY,CAAC;gBAEpC,sCAAsC;gBACtC,6BAAa,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;gBAElE,OAAO,CAAC,GAAG,CAAC,kEAAkE,OAAO,sBAAsB,cAAc,MAAM,cAAc,UAAU,CAAC,CAAC;YAC3J,CAAC;QACH,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,8BAA8B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC,EAAE,UAAU,CAAC,CAAC;AACjB,CAAC"}
@@ -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;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"}
1
+ {"version":3,"file":"lemma-proxy.d.ts","sourceRoot":"","sources":["../../../src/cli/lemma-proxy.ts"],"names":[],"mappings":";AA8cA,wBAAgB,+BAA+B,CAAC,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CA8DvF;AAqfD,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGtD;AAwrDD,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"}
@@ -134,7 +134,11 @@ async function ensureChromaRunning() {
134
134
  const cp = spawn('chroma', ['run', '--path', path.join(CACHE_DIR, 'chroma_data')], {
135
135
  stdio: 'ignore',
136
136
  detached: true,
137
+ windowsHide: true,
137
138
  });
139
+ // 'chroma' may not be on PATH (e.g. chromadb not pip-installed) — an ENOENT here is
140
+ // async and, unhandled, would throw and crash whichever process called us.
141
+ cp.on('error', () => console.log('⚠️ Could not start ChromaDB (is it installed and on PATH?)'));
138
142
  cp.unref();
139
143
  await new Promise(resolve => setTimeout(resolve, 3000));
140
144
  }
@@ -507,8 +511,10 @@ export function startBackgroundClipboardWatcher(cliOpts) {
507
511
  const cp = spawn(cmd, args, {
508
512
  stdio: 'ignore',
509
513
  detached: true,
514
+ windowsHide: true,
510
515
  env: { ...process.env }
511
516
  });
517
+ cp.on('error', (err) => console.error(`❌ Could not start Clipboard Watcher: ${err.message}`));
512
518
  cp.unref();
513
519
  if (cp.pid) {
514
520
  fs.writeFileSync(CLIPBOARD_PID_FILE, String(cp.pid));
@@ -2335,10 +2341,12 @@ program.command('start')
2335
2341
  if (!fs.existsSync(chromaDataPath)) {
2336
2342
  fs.mkdirSync(chromaDataPath, { recursive: true });
2337
2343
  }
2338
- const chromaProcess = spawn('chroma', ['run', '--path', chromaDataPath], { stdio: 'ignore', detached: true });
2344
+ const chromaProcess = spawn('chroma', ['run', '--path', chromaDataPath], { stdio: 'ignore', detached: true, windowsHide: true });
2345
+ chromaProcess.on('error', () => console.log(' ⚠️ Could not start ChromaDB (is it installed and on PATH?)'));
2339
2346
  chromaProcess.unref();
2340
2347
  console.log(' ✅ ChromaDB requested');
2341
- const dash = spawn('npm', ['run', 'dev', '--prefix', 'dashboard', '--', '--port', '8082'], { stdio: 'ignore', detached: true });
2348
+ const dash = spawn('npm', ['run', 'dev', '--prefix', 'dashboard', '--', '--port', '8082'], { stdio: 'ignore', detached: true, windowsHide: true, shell: process.platform === 'win32' });
2349
+ dash.on('error', () => console.log(' ⚠️ Could not start the dashboard dev server'));
2342
2350
  dash.unref();
2343
2351
  console.log(' ✅ Dashboard requested (http://localhost:8082)');
2344
2352
  setTimeout(() => {