mindlore 0.6.7 → 0.6.9

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 (164) hide show
  1. package/dist/scripts/cc-memory-bulk-sync.d.ts.map +1 -1
  2. package/dist/scripts/cc-memory-bulk-sync.js +49 -43
  3. package/dist/scripts/cc-memory-bulk-sync.js.map +1 -1
  4. package/dist/scripts/cc-session-sync.d.ts.map +1 -1
  5. package/dist/scripts/cc-session-sync.js +59 -48
  6. package/dist/scripts/cc-session-sync.js.map +1 -1
  7. package/dist/scripts/fetch-raw.js +5 -4
  8. package/dist/scripts/fetch-raw.js.map +1 -1
  9. package/dist/scripts/init.js +8 -7
  10. package/dist/scripts/init.js.map +1 -1
  11. package/dist/scripts/lib/all-migrations.d.ts.map +1 -1
  12. package/dist/scripts/lib/all-migrations.js +4 -1
  13. package/dist/scripts/lib/all-migrations.js.map +1 -1
  14. package/dist/scripts/lib/consolidation.d.ts +4 -3
  15. package/dist/scripts/lib/consolidation.d.ts.map +1 -1
  16. package/dist/scripts/lib/consolidation.js.map +1 -1
  17. package/dist/scripts/lib/constants.d.ts +3 -7
  18. package/dist/scripts/lib/constants.d.ts.map +1 -1
  19. package/dist/scripts/lib/constants.js +11 -9
  20. package/dist/scripts/lib/constants.js.map +1 -1
  21. package/dist/scripts/lib/db-helpers.d.ts +0 -15
  22. package/dist/scripts/lib/db-helpers.d.ts.map +1 -1
  23. package/dist/scripts/lib/db-helpers.js +1 -51
  24. package/dist/scripts/lib/db-helpers.js.map +1 -1
  25. package/dist/scripts/lib/decay.d.ts.map +1 -1
  26. package/dist/scripts/lib/decay.js.map +1 -1
  27. package/dist/scripts/lib/migrations-v068.d.ts +3 -0
  28. package/dist/scripts/lib/migrations-v068.d.ts.map +1 -0
  29. package/dist/scripts/lib/migrations-v068.js +37 -0
  30. package/dist/scripts/lib/migrations-v068.js.map +1 -0
  31. package/dist/scripts/lib/migrations.d.ts.map +1 -1
  32. package/dist/scripts/lib/migrations.js +0 -15
  33. package/dist/scripts/lib/migrations.js.map +1 -1
  34. package/dist/scripts/lib/secure-io.d.ts +11 -0
  35. package/dist/scripts/lib/secure-io.d.ts.map +1 -0
  36. package/dist/scripts/lib/secure-io.js +26 -0
  37. package/dist/scripts/lib/secure-io.js.map +1 -0
  38. package/dist/scripts/lib/session-payload.d.ts.map +1 -1
  39. package/dist/scripts/lib/session-payload.js.map +1 -1
  40. package/dist/scripts/lib/validate-manifest.d.ts +8 -0
  41. package/dist/scripts/lib/validate-manifest.d.ts.map +1 -0
  42. package/dist/scripts/lib/validate-manifest.js +80 -0
  43. package/dist/scripts/lib/validate-manifest.js.map +1 -0
  44. package/dist/scripts/mindlore-fts5-index.d.ts +1 -2
  45. package/dist/scripts/mindlore-fts5-index.d.ts.map +1 -1
  46. package/dist/scripts/mindlore-fts5-index.js +2 -54
  47. package/dist/scripts/mindlore-fts5-index.js.map +1 -1
  48. package/dist/scripts/mindlore-health-check.d.ts.map +1 -1
  49. package/dist/scripts/mindlore-health-check.js +0 -11
  50. package/dist/scripts/mindlore-health-check.js.map +1 -1
  51. package/dist/scripts/validate-manifest-cli.d.ts +2 -0
  52. package/dist/scripts/validate-manifest-cli.d.ts.map +1 -0
  53. package/dist/scripts/validate-manifest-cli.js +38 -0
  54. package/dist/scripts/validate-manifest-cli.js.map +1 -0
  55. package/dist/tests/cc-memory-bulk-sync.test.js +23 -0
  56. package/dist/tests/cc-memory-bulk-sync.test.js.map +1 -1
  57. package/dist/tests/cc-memory-sync.test.js +3 -3
  58. package/dist/tests/cc-session-sync.test.js +25 -0
  59. package/dist/tests/cc-session-sync.test.js.map +1 -1
  60. package/dist/tests/chunks-migration.test.js +1 -1
  61. package/dist/tests/consolidation.test.js +2 -2
  62. package/dist/tests/consolidation.test.js.map +1 -1
  63. package/dist/tests/episode-file.test.js +2 -1
  64. package/dist/tests/episode-file.test.js.map +1 -1
  65. package/dist/tests/episode-kind-constant.test.d.ts +2 -0
  66. package/dist/tests/episode-kind-constant.test.d.ts.map +1 -0
  67. package/dist/tests/episode-kind-constant.test.js +28 -0
  68. package/dist/tests/episode-kind-constant.test.js.map +1 -0
  69. package/dist/tests/fetch-raw.test.js +1 -2
  70. package/dist/tests/fetch-raw.test.js.map +1 -1
  71. package/dist/tests/fts5.test.js +15 -74
  72. package/dist/tests/fts5.test.js.map +1 -1
  73. package/dist/tests/fuzzy.test.js +1 -1
  74. package/dist/tests/git-snapshot.test.js +3 -5
  75. package/dist/tests/git-snapshot.test.js.map +1 -1
  76. package/dist/tests/globalSetup.d.ts +2 -0
  77. package/dist/tests/globalSetup.d.ts.map +1 -0
  78. package/dist/tests/globalSetup.js +36 -0
  79. package/dist/tests/globalSetup.js.map +1 -0
  80. package/dist/tests/helpers/db.d.ts +13 -6
  81. package/dist/tests/helpers/db.d.ts.map +1 -1
  82. package/dist/tests/helpers/db.js +41 -22
  83. package/dist/tests/helpers/db.js.map +1 -1
  84. package/dist/tests/lesson-graduation.test.js +11 -11
  85. package/dist/tests/lesson-graduation.test.js.map +1 -1
  86. package/dist/tests/manifest-v2.test.d.ts +2 -0
  87. package/dist/tests/manifest-v2.test.d.ts.map +1 -0
  88. package/dist/tests/manifest-v2.test.js +74 -0
  89. package/dist/tests/manifest-v2.test.js.map +1 -0
  90. package/dist/tests/migrations-v063.test.js +6 -6
  91. package/dist/tests/migrations-v068.test.d.ts +2 -0
  92. package/dist/tests/migrations-v068.test.d.ts.map +1 -0
  93. package/dist/tests/migrations-v068.test.js +56 -0
  94. package/dist/tests/migrations-v068.test.js.map +1 -0
  95. package/dist/tests/nomination-counts.test.d.ts +2 -0
  96. package/dist/tests/nomination-counts.test.d.ts.map +1 -0
  97. package/dist/tests/nomination-counts.test.js +51 -0
  98. package/dist/tests/nomination-counts.test.js.map +1 -0
  99. package/dist/tests/pre-compact.test.js +2 -1
  100. package/dist/tests/pre-compact.test.js.map +1 -1
  101. package/dist/tests/recall-telemetry.test.js +4 -3
  102. package/dist/tests/recall-telemetry.test.js.map +1 -1
  103. package/dist/tests/rrf.test.js +3 -3
  104. package/dist/tests/schema-version.test.js +3 -7
  105. package/dist/tests/schema-version.test.js.map +1 -1
  106. package/dist/tests/search-engine.test.js +1 -1
  107. package/dist/tests/search-offload.test.js +1 -1
  108. package/dist/tests/search-offload.test.js.map +1 -1
  109. package/dist/tests/sec-regression.test.js +0 -50
  110. package/dist/tests/sec-regression.test.js.map +1 -1
  111. package/dist/tests/secure-io.test.d.ts +2 -0
  112. package/dist/tests/secure-io.test.d.ts.map +1 -0
  113. package/dist/tests/secure-io.test.js +65 -0
  114. package/dist/tests/secure-io.test.js.map +1 -0
  115. package/dist/tests/session-end-cleanup.test.js +3 -20
  116. package/dist/tests/session-end-cleanup.test.js.map +1 -1
  117. package/dist/tests/session-focus.test.js +7 -30
  118. package/dist/tests/session-focus.test.js.map +1 -1
  119. package/dist/tests/similarity.test.js +1 -1
  120. package/dist/tests/skill-path-resolution.test.js +22 -3
  121. package/dist/tests/skill-path-resolution.test.js.map +1 -1
  122. package/dist/tests/triage.test.js +1 -1
  123. package/hooks/lib/constants.cjs +15 -0
  124. package/hooks/lib/mindlore-common.cjs +18 -85
  125. package/hooks/mindlore-fts5-sync.cjs +27 -17
  126. package/hooks/mindlore-index.cjs +3 -2
  127. package/hooks/mindlore-session-end.cjs +5 -21
  128. package/hooks/mindlore-session-focus.cjs +11 -14
  129. package/package.json +3 -5
  130. package/plugin.json +2 -1
  131. package/skills/mindlore-query/SKILL.md +2 -2
  132. package/templates/config.json +1 -1
  133. package/dist/scripts/lib/daemon.d.ts +0 -16
  134. package/dist/scripts/lib/daemon.d.ts.map +0 -1
  135. package/dist/scripts/lib/daemon.js +0 -133
  136. package/dist/scripts/lib/daemon.js.map +0 -1
  137. package/dist/scripts/lib/embedding.d.ts +0 -5
  138. package/dist/scripts/lib/embedding.d.ts.map +0 -1
  139. package/dist/scripts/lib/embedding.js +0 -44
  140. package/dist/scripts/lib/embedding.js.map +0 -1
  141. package/dist/scripts/mindlore-daemon.d.ts +0 -2
  142. package/dist/scripts/mindlore-daemon.d.ts.map +0 -1
  143. package/dist/scripts/mindlore-daemon.js +0 -117
  144. package/dist/scripts/mindlore-daemon.js.map +0 -1
  145. package/dist/tests/daemon-integration.test.d.ts +0 -2
  146. package/dist/tests/daemon-integration.test.d.ts.map +0 -1
  147. package/dist/tests/daemon-integration.test.js +0 -37
  148. package/dist/tests/daemon-integration.test.js.map +0 -1
  149. package/dist/tests/daemon.test.d.ts +0 -2
  150. package/dist/tests/daemon.test.d.ts.map +0 -1
  151. package/dist/tests/daemon.test.js +0 -187
  152. package/dist/tests/daemon.test.js.map +0 -1
  153. package/dist/tests/embedding-hf-integration.test.d.ts +0 -2
  154. package/dist/tests/embedding-hf-integration.test.d.ts.map +0 -1
  155. package/dist/tests/embedding-hf-integration.test.js +0 -52
  156. package/dist/tests/embedding-hf-integration.test.js.map +0 -1
  157. package/dist/tests/embedding.test.d.ts +0 -6
  158. package/dist/tests/embedding.test.d.ts.map +0 -1
  159. package/dist/tests/embedding.test.js +0 -71
  160. package/dist/tests/embedding.test.js.map +0 -1
  161. package/dist/tests/sqlite-vec-v12.test.d.ts +0 -2
  162. package/dist/tests/sqlite-vec-v12.test.d.ts.map +0 -1
  163. package/dist/tests/sqlite-vec-v12.test.js +0 -72
  164. package/dist/tests/sqlite-vec-v12.test.js.map +0 -1
@@ -1,5 +0,0 @@
1
- export declare const EMBEDDING_MODEL = "Xenova/multilingual-e5-small";
2
- export declare const EMBEDDING_DIM = 384;
3
- export declare function generateEmbedding(text: string): Promise<number[]>;
4
- export declare function batchEmbed(texts: string[]): Promise<number[][]>;
5
- //# sourceMappingURL=embedding.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"embedding.d.ts","sourceRoot":"","sources":["../../../scripts/lib/embedding.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,iCAAiC,CAAC;AAC9D,eAAO,MAAM,aAAa,MAAM,CAAC;AAgBjC,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAevE;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAMrE"}
@@ -1,44 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EMBEDDING_DIM = exports.EMBEDDING_MODEL = void 0;
4
- exports.generateEmbedding = generateEmbedding;
5
- exports.batchEmbed = batchEmbed;
6
- exports.EMBEDDING_MODEL = 'Xenova/multilingual-e5-small';
7
- exports.EMBEDDING_DIM = 384;
8
- // Pipeline instance — cached after first load (~16s)
9
- let cachedPipeline = null;
10
- async function getEmbedder() {
11
- if (cachedPipeline)
12
- return cachedPipeline;
13
- // ESM-only package in CJS context — must use dynamic import
14
- const { pipeline: createPipeline } = await import('@huggingface/transformers');
15
- cachedPipeline = await createPipeline('feature-extraction', exports.EMBEDDING_MODEL, {
16
- dtype: 'q8', // int8 quantization — smaller, faster
17
- });
18
- return cachedPipeline;
19
- }
20
- async function generateEmbedding(text) {
21
- const embedder = await getEmbedder();
22
- // multilingual-e5-small expects "query: " or "passage: " prefix
23
- const prefixed = text.startsWith('query:') || text.startsWith('passage:')
24
- ? text
25
- : `passage: ${text}`;
26
- // Pipeline is callable — returns Tensor with tolist()
27
- // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- dynamic import returns typed pipeline but callable signature requires explicit cast
28
- const run = embedder;
29
- // normalize: true in pipeline options already returns L2-normalized vectors
30
- const result = await run([prefixed], { pooling: 'mean', normalize: true });
31
- const list = result.tolist();
32
- const raw = list[0];
33
- if (!raw)
34
- throw new Error('Embedding pipeline returned empty result');
35
- return raw;
36
- }
37
- async function batchEmbed(texts) {
38
- const results = [];
39
- for (const text of texts) {
40
- results.push(await generateEmbedding(text));
41
- }
42
- return results;
43
- }
44
- //# sourceMappingURL=embedding.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../../scripts/lib/embedding.ts"],"names":[],"mappings":";;;AAiBA,8CAeC;AAED,gCAMC;AAxCY,QAAA,eAAe,GAAG,8BAA8B,CAAC;AACjD,QAAA,aAAa,GAAG,GAAG,CAAC;AAEjC,qDAAqD;AACrD,IAAI,cAAc,GAAY,IAAI,CAAC;AAEnC,KAAK,UAAU,WAAW;IACxB,IAAI,cAAc;QAAE,OAAO,cAAc,CAAC;IAE1C,4DAA4D;IAC5D,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IAC/E,cAAc,GAAG,MAAM,cAAc,CAAC,oBAAoB,EAAE,uBAAe,EAAE;QAC3E,KAAK,EAAE,IAAI,EAAE,sCAAsC;KACpD,CAAC,CAAC;IACH,OAAO,cAAc,CAAC;AACxB,CAAC;AAEM,KAAK,UAAU,iBAAiB,CAAC,IAAY;IAClD,MAAM,QAAQ,GAAG,MAAM,WAAW,EAAE,CAAC;IACrC,gEAAgE;IAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QACvE,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC;IACvB,sDAAsD;IACtD,8JAA8J;IAC9J,MAAM,GAAG,GAAG,QAAqG,CAAC;IAClH,4EAA4E;IAC5E,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3E,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IACtE,OAAO,GAAG,CAAC;AACb,CAAC;AAEM,KAAK,UAAU,UAAU,CAAC,KAAe;IAC9C,MAAM,OAAO,GAAe,EAAE,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=mindlore-daemon.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mindlore-daemon.d.ts","sourceRoot":"","sources":["../../scripts/mindlore-daemon.ts"],"names":[],"mappings":""}
@@ -1,117 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- console.warn('[DEPRECATED] mindlore daemon will be replaced by MCP Server in v0.7. No new features will be added.');
7
- const fs_1 = __importDefault(require("fs"));
8
- const net_1 = __importDefault(require("net"));
9
- const constants_js_1 = require("./lib/constants.js");
10
- const daemon_js_1 = require("./lib/daemon.js");
11
- const command = process.argv[2] ?? 'status';
12
- function isDaemonRunning() {
13
- try {
14
- const pid = parseInt(fs_1.default.readFileSync(constants_js_1.DAEMON_PID_FILE, 'utf8').trim());
15
- process.kill(pid, 0);
16
- return { running: true, pid };
17
- }
18
- catch {
19
- try {
20
- fs_1.default.unlinkSync(constants_js_1.DAEMON_PID_FILE);
21
- }
22
- catch { /* already gone */ }
23
- return { running: false };
24
- }
25
- }
26
- function getPort() {
27
- try {
28
- const p = parseInt(fs_1.default.readFileSync(constants_js_1.DAEMON_PORT_FILE, 'utf8').trim());
29
- return isNaN(p) ? null : p;
30
- }
31
- catch {
32
- return null;
33
- }
34
- }
35
- function forceCleanup(pid) {
36
- if (pid) {
37
- try {
38
- process.kill(pid, 'SIGTERM');
39
- }
40
- catch { /* already dead */ }
41
- }
42
- try {
43
- fs_1.default.unlinkSync(constants_js_1.DAEMON_PID_FILE);
44
- }
45
- catch { /* ignore */ }
46
- try {
47
- fs_1.default.unlinkSync(constants_js_1.DAEMON_PORT_FILE);
48
- }
49
- catch { /* ignore */ }
50
- }
51
- async function start() {
52
- const status = isDaemonRunning();
53
- if (status.running) {
54
- console.log(`Daemon already running (PID: ${status.pid})`);
55
- return;
56
- }
57
- console.log('Starting embedding daemon...');
58
- console.log('Loading embedding model (this may take ~16s on first run)...');
59
- const server = (0, daemon_js_1.createDaemonServer)({
60
- pidFile: constants_js_1.DAEMON_PID_FILE,
61
- portFile: constants_js_1.DAEMON_PORT_FILE,
62
- });
63
- await server.start();
64
- console.log(`Daemon started (PID: ${process.pid}, port: ${server.getPort()})`);
65
- }
66
- async function stop() {
67
- const status = isDaemonRunning();
68
- if (!status.running) {
69
- console.log('Daemon is not running.');
70
- return;
71
- }
72
- const port = getPort();
73
- if (!port) {
74
- forceCleanup(status.pid);
75
- console.log('Daemon force-stopped (no port file).');
76
- return;
77
- }
78
- return new Promise((resolve) => {
79
- const client = net_1.default.createConnection(port, constants_js_1.DAEMON_HOST, () => {
80
- client.write(JSON.stringify({ type: 'stop' }) + '\n');
81
- });
82
- client.on('data', () => {
83
- console.log('Daemon stopped.');
84
- client.end();
85
- resolve();
86
- });
87
- client.on('error', () => {
88
- forceCleanup(status.pid);
89
- console.log('Daemon force-stopped.');
90
- resolve();
91
- });
92
- });
93
- }
94
- function showStatus() {
95
- const status = isDaemonRunning();
96
- if (status.running) {
97
- const port = getPort();
98
- console.log(`Daemon is running (PID: ${status.pid}, port: ${port ?? 'unknown'})`);
99
- }
100
- else {
101
- console.log('Daemon is not running.');
102
- }
103
- }
104
- switch (command) {
105
- case 'start':
106
- void start();
107
- break;
108
- case 'stop':
109
- void stop();
110
- break;
111
- case 'status':
112
- showStatus();
113
- break;
114
- default:
115
- console.log('Usage: npx mindlore daemon [start|stop|status]');
116
- }
117
- //# sourceMappingURL=mindlore-daemon.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mindlore-daemon.js","sourceRoot":"","sources":["../../scripts/mindlore-daemon.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=daemon-integration.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"daemon-integration.test.d.ts","sourceRoot":"","sources":["../../tests/daemon-integration.test.ts"],"names":[],"mappings":""}
@@ -1,37 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const fs_1 = __importDefault(require("fs"));
7
- const path_1 = __importDefault(require("path"));
8
- describe('daemon-client.js', () => {
9
- it('should exist as plain JS file (no build needed)', () => {
10
- const clientPath = path_1.default.join(__dirname, '..', 'scripts', 'lib', 'daemon-client.js');
11
- expect(fs_1.default.existsSync(clientPath)).toBe(true);
12
- });
13
- it('should use fs.writeSync for stdout flush on Windows', () => {
14
- const clientPath = path_1.default.join(__dirname, '..', 'scripts', 'lib', 'daemon-client.js');
15
- const src = fs_1.default.readFileSync(clientPath, 'utf8');
16
- expect(src).toContain('writeSync');
17
- });
18
- it('should read port from port file', () => {
19
- const clientPath = path_1.default.join(__dirname, '..', 'scripts', 'lib', 'daemon-client.js');
20
- const src = fs_1.default.readFileSync(clientPath, 'utf8');
21
- expect(src).toContain('port');
22
- expect(src).toContain('127.0.0.1');
23
- });
24
- });
25
- describe('search hook daemon integration', () => {
26
- it('should delegate to search-engine module', () => {
27
- const hookSrc = fs_1.default.readFileSync(path_1.default.join(__dirname, '..', 'hooks', 'mindlore-search.cjs'), 'utf8');
28
- expect(hookSrc).toContain('search-engine.js');
29
- expect(hookSrc).toContain('searchEngineMod.search');
30
- });
31
- it('should log when search-engine module is unavailable', () => {
32
- const hookSrc = fs_1.default.readFileSync(path_1.default.join(__dirname, '..', 'hooks', 'mindlore-search.cjs'), 'utf8');
33
- expect(hookSrc).toContain("hookLog('search'");
34
- expect(hookSrc).toContain('not available');
35
- });
36
- });
37
- //# sourceMappingURL=daemon-integration.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"daemon-integration.test.js","sourceRoot":"","sources":["../../tests/daemon-integration.test.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,gDAAwB;AAExB,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;QACpF,MAAM,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;QACpF,MAAM,GAAG,GAAG,YAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAChD,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;QACpF,MAAM,GAAG,GAAG,YAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAChD,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC9B,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAC7B,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,qBAAqB,CAAC,EAAE,MAAM,CACnE,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC9C,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAC7B,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,qBAAqB,CAAC,EAAE,MAAM,CACnE,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC9C,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=daemon.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"daemon.test.d.ts","sourceRoot":"","sources":["../../tests/daemon.test.ts"],"names":[],"mappings":""}
@@ -1,187 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const net_1 = __importDefault(require("net"));
7
- const fs_1 = __importDefault(require("fs"));
8
- const path_1 = __importDefault(require("path"));
9
- const os_1 = __importDefault(require("os"));
10
- describe('daemon constants', () => {
11
- const constants = require('../dist/scripts/lib/constants.js');
12
- it('should define DAEMON_PORT_FILE inside mindlore dir', () => {
13
- expect(constants.DAEMON_PORT_FILE).toContain('mindlore-daemon.port');
14
- });
15
- it('should define DAEMON_PID_FILE inside mindlore dir', () => {
16
- expect(constants.DAEMON_PID_FILE).toContain('mindlore-daemon.pid');
17
- });
18
- it('should define DAEMON_TIMEOUT_MS as 300', () => {
19
- expect(constants.DAEMON_TIMEOUT_MS).toBe(300);
20
- });
21
- it('should define DAEMON_HOST as 127.0.0.1', () => {
22
- expect(constants.DAEMON_HOST).toBe('127.0.0.1');
23
- });
24
- });
25
- describe('daemon server', () => {
26
- let createDaemonServer;
27
- beforeAll(async () => {
28
- const mod = await import('../scripts/lib/daemon.js');
29
- createDaemonServer = mod.createDaemonServer;
30
- });
31
- it('should start and respond to ping', async () => {
32
- const server = createDaemonServer({ skipModelLoad: true });
33
- await server.start();
34
- const port = server.getPort();
35
- expect(port).toBeGreaterThan(0);
36
- const response = await new Promise((resolve) => {
37
- const client = net_1.default.createConnection(port, '127.0.0.1', () => {
38
- client.write(JSON.stringify({ type: 'ping' }) + '\n');
39
- });
40
- client.on('data', (data) => {
41
- resolve(data.toString().trim());
42
- client.end();
43
- });
44
- });
45
- const parsed = JSON.parse(response);
46
- expect(parsed.type).toBe('pong');
47
- await server.stop();
48
- }, 10000);
49
- it('should respond to embed request with mock embedding', async () => {
50
- const mockEmbed = new Array(384).fill(0.1);
51
- const server = createDaemonServer({ skipModelLoad: true, mockEmbedding: mockEmbed });
52
- await server.start();
53
- const port = server.getPort();
54
- const response = await new Promise((resolve) => {
55
- const client = net_1.default.createConnection(port, '127.0.0.1', () => {
56
- client.write(JSON.stringify({ type: 'embed', text: 'test query' }) + '\n');
57
- });
58
- client.on('data', (data) => {
59
- resolve(data.toString().trim());
60
- client.end();
61
- });
62
- });
63
- const parsed = JSON.parse(response);
64
- expect(parsed.type).toBe('embedding');
65
- expect(parsed.embedding).toHaveLength(384);
66
- await server.stop();
67
- }, 10000);
68
- it('should write PID file on start and remove on stop', async () => {
69
- const pidFile = path_1.default.join(os_1.default.tmpdir(), `mindlore-test-pid-${Date.now()}`);
70
- const portFile = path_1.default.join(os_1.default.tmpdir(), `mindlore-test-port-${Date.now()}`);
71
- const server = createDaemonServer({ skipModelLoad: true, pidFile, portFile });
72
- await server.start();
73
- expect(fs_1.default.existsSync(pidFile)).toBe(true);
74
- const pid = parseInt(fs_1.default.readFileSync(pidFile, 'utf8').trim());
75
- expect(pid).toBe(process.pid);
76
- expect(fs_1.default.existsSync(portFile)).toBe(true);
77
- const writtenPort = parseInt(fs_1.default.readFileSync(portFile, 'utf8').trim());
78
- expect(writtenPort).toBe(server.getPort());
79
- await server.stop();
80
- expect(fs_1.default.existsSync(pidFile)).toBe(false);
81
- expect(fs_1.default.existsSync(portFile)).toBe(false);
82
- }, 10000);
83
- it('should report running status', async () => {
84
- const server = createDaemonServer({ skipModelLoad: true });
85
- expect(server.isRunning()).toBe(false);
86
- await server.start();
87
- expect(server.isRunning()).toBe(true);
88
- await server.stop();
89
- expect(server.isRunning()).toBe(false);
90
- }, 10000);
91
- });
92
- describe('daemon lifecycle edge cases', () => {
93
- let createDaemonServer;
94
- beforeAll(async () => {
95
- const mod = await import('../scripts/lib/daemon.js');
96
- createDaemonServer = mod.createDaemonServer;
97
- });
98
- it('should handle concurrent connections', async () => {
99
- const server = createDaemonServer({
100
- skipModelLoad: true,
101
- mockEmbedding: new Array(384).fill(0.1),
102
- });
103
- await server.start();
104
- const port = server.getPort();
105
- const promises = Array.from({ length: 3 }, () => new Promise((resolve) => {
106
- const client = net_1.default.createConnection(port, '127.0.0.1', () => {
107
- client.write(JSON.stringify({ type: 'ping' }) + '\n');
108
- });
109
- client.on('data', (data) => {
110
- resolve(data.toString().trim());
111
- client.end();
112
- });
113
- }));
114
- const results = await Promise.all(promises);
115
- for (const r of results) {
116
- expect(JSON.parse(r).type).toBe('pong');
117
- }
118
- await server.stop();
119
- }, 10000);
120
- it('should handle invalid JSON gracefully', async () => {
121
- const server = createDaemonServer({ skipModelLoad: true });
122
- await server.start();
123
- const port = server.getPort();
124
- const response = await new Promise((resolve) => {
125
- const client = net_1.default.createConnection(port, '127.0.0.1', () => {
126
- client.write('not valid json\n');
127
- });
128
- client.on('data', (data) => {
129
- resolve(data.toString().trim());
130
- client.end();
131
- });
132
- });
133
- const parsed = JSON.parse(response);
134
- expect(parsed.type).toBe('error');
135
- expect(parsed.error).toContain('Invalid JSON');
136
- await server.stop();
137
- }, 10000);
138
- it('should return error for embed without text', async () => {
139
- const server = createDaemonServer({ skipModelLoad: true });
140
- await server.start();
141
- const port = server.getPort();
142
- const response = await new Promise((resolve) => {
143
- const client = net_1.default.createConnection(port, '127.0.0.1', () => {
144
- client.write(JSON.stringify({ type: 'embed' }) + '\n');
145
- });
146
- client.on('data', (data) => {
147
- resolve(data.toString().trim());
148
- client.end();
149
- });
150
- });
151
- const parsed = JSON.parse(response);
152
- expect(parsed.type).toBe('error');
153
- expect(parsed.error).toContain('No text');
154
- await server.stop();
155
- }, 10000);
156
- it('should handle stop command', async () => {
157
- const server = createDaemonServer({ skipModelLoad: true });
158
- await server.start();
159
- expect(server.isRunning()).toBe(true);
160
- const port = server.getPort();
161
- const response = await new Promise((resolve) => {
162
- const client = net_1.default.createConnection(port, '127.0.0.1', () => {
163
- client.write(JSON.stringify({ type: 'stop' }) + '\n');
164
- });
165
- client.on('data', (data) => {
166
- resolve(data.toString().trim());
167
- client.end();
168
- });
169
- });
170
- expect(JSON.parse(response).type).toBe('stopped');
171
- // Wait for graceful shutdown
172
- await new Promise(r => setTimeout(r, 200));
173
- expect(server.isRunning()).toBe(false);
174
- }, 10000);
175
- });
176
- describe('daemon CLI registration', () => {
177
- it('should be registered as CLI subcommand in init.ts', () => {
178
- const initSource = fs_1.default.readFileSync(path_1.default.join(__dirname, '..', 'scripts', 'init.ts'), 'utf8');
179
- expect(initSource).toContain("daemon:");
180
- expect(initSource).toContain('mindlore-daemon');
181
- });
182
- it('mindlore-daemon.ts script should exist', () => {
183
- const scriptPath = path_1.default.join(__dirname, '..', 'scripts', 'mindlore-daemon.ts');
184
- expect(fs_1.default.existsSync(scriptPath)).toBe(true);
185
- });
186
- });
187
- //# sourceMappingURL=daemon.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"daemon.test.js","sourceRoot":"","sources":["../../tests/daemon.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=embedding-hf-integration.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"embedding-hf-integration.test.d.ts","sourceRoot":"","sources":["../../tests/embedding-hf-integration.test.ts"],"names":[],"mappings":""}
@@ -1,52 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- /**
4
- * Integration smoke test — only runs when @huggingface/transformers installed.
5
- * Skips automatically if package missing (dev environment guard).
6
- */
7
- let pkgAvailable = false;
8
- const skipHF = process.env.CI === 'true' || parseInt(process.versions.node, 10) >= 24;
9
- try {
10
- require.resolve('@huggingface/transformers');
11
- pkgAvailable = true;
12
- }
13
- catch { /* skip */ }
14
- // Skip in CI and Node 24+ — onnxruntime-node Float32Array realm mismatch in Jest sandbox
15
- (pkgAvailable && !skipHF ? describe : describe.skip)('HF Transformers smoke', () => {
16
- test('Xenova/multilingual-e5-small loads from HF package', async () => {
17
- const { pipeline } = await import('@huggingface/transformers');
18
- // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion, @typescript-eslint/no-explicit-any -- ESM pipeline type unresolvable in CJS Jest
19
- const embedder = await pipeline('feature-extraction', 'Xenova/multilingual-e5-small', { dtype: 'q8' });
20
- // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion, @typescript-eslint/no-explicit-any -- callable pipeline signature
21
- const result = await embedder(['passage: hello'], { pooling: 'mean', normalize: true });
22
- const list = result.tolist();
23
- expect(list[0]).toHaveLength(384);
24
- }, 60_000);
25
- test('alternative ID intfloat/multilingual-e5-small loads', async () => {
26
- const { pipeline } = await import('@huggingface/transformers');
27
- const embedder = await pipeline('feature-extraction', 'intfloat/multilingual-e5-small');
28
- // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion, @typescript-eslint/no-explicit-any -- callable pipeline signature
29
- const result = await embedder(['passage: hello'], { pooling: 'mean', normalize: true });
30
- expect(result.tolist()[0]).toHaveLength(384);
31
- }, 60_000);
32
- });
33
- let embeddingAvailable = false;
34
- try {
35
- require('@huggingface/transformers');
36
- embeddingAvailable = true;
37
- }
38
- catch { /* ESM-only module — Jest CJS mode cannot load it */ }
39
- (embeddingAvailable && !skipHF ? describe : describe.skip)('embedding drift check', () => {
40
- test('cosine >=0.99 vs reference v2 embedding', async () => {
41
- const refPath = require('path').join(__dirname, 'fixtures/embedding-v2-reference.json');
42
- expect(require('fs').existsSync(refPath)).toBe(true);
43
- const ref = JSON.parse(require('fs').readFileSync(refPath, 'utf8'));
44
- const { generateEmbedding } = await import('../scripts/lib/embedding.js');
45
- const fresh = await generateEmbedding('passage: mindlore test');
46
- let dot = 0;
47
- for (let i = 0; i < ref.length; i++)
48
- dot += (ref[i] ?? 0) * (fresh[i] ?? 0);
49
- expect(dot).toBeGreaterThanOrEqual(0.99);
50
- }, 60_000);
51
- });
52
- //# sourceMappingURL=embedding-hf-integration.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"embedding-hf-integration.test.js","sourceRoot":"","sources":["../../tests/embedding-hf-integration.test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- /**
2
- * Embedding module unit tests — mock @huggingface/transformers.
3
- * Real model integration test → Task 14 standalone script.
4
- */
5
- export {};
6
- //# sourceMappingURL=embedding.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"embedding.test.d.ts","sourceRoot":"","sources":["../../tests/embedding.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -1,71 +0,0 @@
1
- "use strict";
2
- /**
3
- * Embedding module unit tests — mock @huggingface/transformers.
4
- * Real model integration test → Task 14 standalone script.
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- // Mock the dynamic import before any imports
8
- jest.mock('@huggingface/transformers', () => {
9
- // Return a fake 384-dim embedding based on text hash for deterministic results
10
- function fakeEmbed(texts) {
11
- const embeddings = texts.map(text => {
12
- // Simple deterministic pseudo-embedding from text
13
- const vec = new Array(384).fill(0).map((_, i) => {
14
- let h = 0;
15
- for (let c = 0; c < text.length; c++) {
16
- h = ((h << 5) - h + text.charCodeAt(c) + i) | 0;
17
- }
18
- return (h % 1000) / 1000;
19
- });
20
- // Normalize
21
- const norm = Math.sqrt(vec.reduce((s, v) => s + v * v, 0));
22
- return norm > 0 ? vec.map(v => v / norm) : vec;
23
- });
24
- return { tolist: () => embeddings };
25
- }
26
- return {
27
- __esModule: true,
28
- pipeline: jest.fn().mockResolvedValue(jest.fn().mockImplementation((texts, _opts) => {
29
- return Promise.resolve(fakeEmbed(texts));
30
- })),
31
- };
32
- });
33
- const embedding_js_1 = require("../scripts/lib/embedding.js");
34
- describe('Embedding Module', () => {
35
- test('EMBEDDING_DIM should be 384', () => {
36
- expect(embedding_js_1.EMBEDDING_DIM).toBe(384);
37
- });
38
- test('EMBEDDING_MODEL should be multilingual-e5-small', () => {
39
- expect(embedding_js_1.EMBEDDING_MODEL).toBe('Xenova/multilingual-e5-small');
40
- });
41
- test('should generate a 384-dim embedding', async () => {
42
- const embedding = await (0, embedding_js_1.generateEmbedding)('TypeScript is a programming language');
43
- expect(embedding).toHaveLength(384);
44
- expect(typeof embedding[0]).toBe('number');
45
- // Embeddings should be normalized (L2 norm ≈ 1.0)
46
- const norm = Math.sqrt(embedding.reduce((sum, v) => sum + v * v, 0));
47
- expect(norm).toBeCloseTo(1.0, 1);
48
- });
49
- test('should batch embed multiple texts', async () => {
50
- const texts = ['Hello world', 'Merhaba dünya'];
51
- const embeddings = await (0, embedding_js_1.batchEmbed)(texts);
52
- expect(embeddings).toHaveLength(2);
53
- expect(embeddings[0]).toHaveLength(384);
54
- expect(embeddings[1]).toHaveLength(384);
55
- });
56
- test('should produce different embeddings for different texts', async () => {
57
- const e1 = await (0, embedding_js_1.generateEmbedding)('authentication security');
58
- const e2 = await (0, embedding_js_1.generateEmbedding)('database performance');
59
- // Different texts should produce different embeddings
60
- const same = e1.every((v, i) => v === (e2[i] ?? 0));
61
- expect(same).toBe(false);
62
- });
63
- test('should add passage: prefix when not present', async () => {
64
- const e1 = await (0, embedding_js_1.generateEmbedding)('test text');
65
- const e2 = await (0, embedding_js_1.generateEmbedding)('passage: test text');
66
- // Both should produce valid embeddings
67
- expect(e1).toHaveLength(384);
68
- expect(e2).toHaveLength(384);
69
- });
70
- });
71
- //# sourceMappingURL=embedding.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"embedding.test.js","sourceRoot":"","sources":["../../tests/embedding.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=sqlite-vec-v12.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sqlite-vec-v12.test.d.ts","sourceRoot":"","sources":["../../tests/sqlite-vec-v12.test.ts"],"names":[],"mappings":""}