mindlore 0.6.4 → 0.6.5
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 +1 -1
- package/dist/scripts/cc-memory-bulk-sync.js +1 -1
- package/dist/scripts/cc-memory-bulk-sync.js.map +1 -1
- package/dist/scripts/cc-session-sync.js +2 -2
- package/dist/scripts/cc-session-sync.js.map +1 -1
- package/dist/scripts/fetch-raw.js +17 -8
- package/dist/scripts/fetch-raw.js.map +1 -1
- package/dist/scripts/init.js +8 -8
- package/dist/scripts/init.js.map +1 -1
- package/dist/scripts/lib/daemon.d.ts.map +1 -1
- package/dist/scripts/lib/daemon.js +3 -0
- package/dist/scripts/lib/daemon.js.map +1 -1
- package/dist/scripts/lib/input-validation.d.ts +5 -0
- package/dist/scripts/lib/input-validation.d.ts.map +1 -0
- package/dist/scripts/lib/input-validation.js +48 -0
- package/dist/scripts/lib/input-validation.js.map +1 -0
- package/dist/scripts/lib/privacy-filter.d.ts.map +1 -1
- package/dist/scripts/lib/privacy-filter.js +3 -0
- package/dist/scripts/lib/privacy-filter.js.map +1 -1
- package/dist/scripts/lib/rrf.d.ts.map +1 -1
- package/dist/scripts/lib/rrf.js +10 -10
- package/dist/scripts/lib/rrf.js.map +1 -1
- package/dist/scripts/lib/search-cache.d.ts +1 -0
- package/dist/scripts/lib/search-cache.d.ts.map +1 -1
- package/dist/scripts/lib/search-cache.js +6 -0
- package/dist/scripts/lib/search-cache.js.map +1 -1
- package/dist/scripts/lib/search-engine.d.ts +1 -1
- package/dist/scripts/lib/search-engine.d.ts.map +1 -1
- package/dist/scripts/lib/search-engine.js +3 -2
- package/dist/scripts/lib/search-engine.js.map +1 -1
- package/dist/scripts/mindlore-daemon.js +1 -3
- package/dist/scripts/mindlore-daemon.js.map +1 -1
- package/dist/scripts/mindlore-obsidian.js +4 -0
- package/dist/scripts/mindlore-obsidian.js.map +1 -1
- package/dist/tests/fetch-raw-security.test.d.ts +2 -0
- package/dist/tests/fetch-raw-security.test.d.ts.map +1 -0
- package/dist/tests/fetch-raw-security.test.js +72 -0
- package/dist/tests/fetch-raw-security.test.js.map +1 -0
- package/dist/tests/fetch-raw.test.js +4 -4
- package/dist/tests/fetch-raw.test.js.map +1 -1
- package/dist/tests/fts5.test.js +0 -22
- package/dist/tests/fts5.test.js.map +1 -1
- package/dist/tests/input-validation.test.d.ts +2 -0
- package/dist/tests/input-validation.test.d.ts.map +1 -0
- package/dist/tests/input-validation.test.js +113 -0
- package/dist/tests/input-validation.test.js.map +1 -0
- package/dist/tests/privacy-filter.test.js +25 -50
- package/dist/tests/privacy-filter.test.js.map +1 -1
- package/dist/tests/search-hook.test.js +0 -44
- package/dist/tests/search-hook.test.js.map +1 -1
- package/dist/tests/sec-regression.test.d.ts +2 -0
- package/dist/tests/sec-regression.test.d.ts.map +1 -0
- package/dist/tests/sec-regression.test.js +174 -0
- package/dist/tests/sec-regression.test.js.map +1 -0
- package/dist/tests/stop-words.test.js +26 -0
- package/dist/tests/stop-words.test.js.map +1 -1
- package/hooks/lib/mindlore-common.cjs +23 -4
- package/hooks/mindlore-fts5-sync.cjs +4 -3
- package/hooks/mindlore-index.cjs +6 -7
- package/hooks/mindlore-pre-compact.cjs +5 -4
- package/hooks/mindlore-session-end.cjs +10 -10
- package/hooks/mindlore-session-focus.cjs +11 -1
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/templates/SCHEMA.md +10 -108
- package/templates/config.json +1 -1
- package/dist/scripts/lib/hybrid-search.d.ts +0 -62
- package/dist/scripts/lib/hybrid-search.d.ts.map +0 -1
- package/dist/scripts/lib/hybrid-search.js +0 -171
- package/dist/scripts/lib/hybrid-search.js.map +0 -1
- package/dist/tests/hybrid-search.test.d.ts +0 -2
- package/dist/tests/hybrid-search.test.d.ts.map +0 -1
- package/dist/tests/hybrid-search.test.js +0 -139
- package/dist/tests/hybrid-search.test.js.map +0 -1
- package/dist/tests/index-cli-embed.test.d.ts +0 -7
- package/dist/tests/index-cli-embed.test.d.ts.map +0 -1
- package/dist/tests/index-cli-embed.test.js +0 -128
- package/dist/tests/index-cli-embed.test.js.map +0 -1
- package/dist/tests/search-cli-hybrid.test.d.ts +0 -6
- package/dist/tests/search-cli-hybrid.test.d.ts.map +0 -1
- package/dist/tests/search-cli-hybrid.test.js +0 -103
- package/dist/tests/search-cli-hybrid.test.js.map +0 -1
|
@@ -0,0 +1,113 @@
|
|
|
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 input_validation_js_1 = require("../scripts/lib/input-validation.js");
|
|
7
|
+
const os_1 = __importDefault(require("os"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
describe('validatePath', () => {
|
|
10
|
+
const homeDir = os_1.default.homedir();
|
|
11
|
+
const allowedBase = path_1.default.join(homeDir, '.mindlore');
|
|
12
|
+
it('accepts path under allowed base', () => {
|
|
13
|
+
expect(() => (0, input_validation_js_1.validatePath)(path_1.default.join(allowedBase, 'raw'), allowedBase)).not.toThrow();
|
|
14
|
+
});
|
|
15
|
+
it('accepts exact allowed base', () => {
|
|
16
|
+
expect(() => (0, input_validation_js_1.validatePath)(allowedBase, allowedBase)).not.toThrow();
|
|
17
|
+
});
|
|
18
|
+
it('rejects path traversal with ..', () => {
|
|
19
|
+
expect(() => (0, input_validation_js_1.validatePath)(path_1.default.join(allowedBase, '..', 'etc'), allowedBase)).toThrow(/must be under/);
|
|
20
|
+
});
|
|
21
|
+
it('rejects absolute path outside base', () => {
|
|
22
|
+
expect(() => (0, input_validation_js_1.validatePath)('/etc/passwd', allowedBase)).toThrow(/must be under/);
|
|
23
|
+
});
|
|
24
|
+
it('rejects path with .. embedded', () => {
|
|
25
|
+
expect(() => (0, input_validation_js_1.validatePath)(path_1.default.join(allowedBase, 'raw', '..', '..', 'etc'), allowedBase)).toThrow(/must be under/);
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
describe('validateUrl', () => {
|
|
29
|
+
it('accepts public URL', () => {
|
|
30
|
+
expect(() => (0, input_validation_js_1.validateUrl)('https://example.com')).not.toThrow();
|
|
31
|
+
});
|
|
32
|
+
it('rejects localhost', () => {
|
|
33
|
+
expect(() => (0, input_validation_js_1.validateUrl)('http://127.0.0.1/api')).toThrow(/private/i);
|
|
34
|
+
});
|
|
35
|
+
it('rejects 10.x.x.x range', () => {
|
|
36
|
+
expect(() => (0, input_validation_js_1.validateUrl)('http://10.0.0.1/secret')).toThrow(/private/i);
|
|
37
|
+
});
|
|
38
|
+
it('rejects 192.168.x.x range', () => {
|
|
39
|
+
expect(() => (0, input_validation_js_1.validateUrl)('http://192.168.1.1/admin')).toThrow(/private/i);
|
|
40
|
+
});
|
|
41
|
+
it('rejects 169.254.x.x link-local', () => {
|
|
42
|
+
expect(() => (0, input_validation_js_1.validateUrl)('http://169.254.169.254/metadata')).toThrow(/private/i);
|
|
43
|
+
});
|
|
44
|
+
it('rejects 0.0.0.0', () => {
|
|
45
|
+
expect(() => (0, input_validation_js_1.validateUrl)('http://0.0.0.0/')).toThrow(/private/i);
|
|
46
|
+
});
|
|
47
|
+
it('rejects 172.16-31.x range', () => {
|
|
48
|
+
expect(() => (0, input_validation_js_1.validateUrl)('http://172.16.0.1/')).toThrow(/private/i);
|
|
49
|
+
expect(() => (0, input_validation_js_1.validateUrl)('http://172.31.255.255/')).toThrow(/private/i);
|
|
50
|
+
});
|
|
51
|
+
it('rejects fc00: IPv6', () => {
|
|
52
|
+
expect(() => (0, input_validation_js_1.validateUrl)('http://[fc00::1]/')).toThrow(/private/i);
|
|
53
|
+
});
|
|
54
|
+
it('rejects fe80: link-local IPv6', () => {
|
|
55
|
+
expect(() => (0, input_validation_js_1.validateUrl)('http://[fe80::1]/')).toThrow(/private/i);
|
|
56
|
+
});
|
|
57
|
+
it('rejects ::1 loopback IPv6', () => {
|
|
58
|
+
expect(() => (0, input_validation_js_1.validateUrl)('http://[::1]/')).toThrow(/private/i);
|
|
59
|
+
});
|
|
60
|
+
it('rejects localhost hostname', () => {
|
|
61
|
+
expect(() => (0, input_validation_js_1.validateUrl)('http://localhost/admin')).toThrow(/private/i);
|
|
62
|
+
});
|
|
63
|
+
it('accepts github.com', () => {
|
|
64
|
+
expect(() => (0, input_validation_js_1.validateUrl)('https://github.com/user/repo')).not.toThrow();
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
describe('sanitizeForExecFile', () => {
|
|
68
|
+
it('accepts alphanumeric with hyphens and dots', () => {
|
|
69
|
+
expect((0, input_validation_js_1.sanitizeForExecFile)('my-repo.js')).toBe('my-repo.js');
|
|
70
|
+
});
|
|
71
|
+
it('rejects semicolons', () => {
|
|
72
|
+
expect(() => (0, input_validation_js_1.sanitizeForExecFile)('foo;whoami')).toThrow(/invalid/i);
|
|
73
|
+
});
|
|
74
|
+
it('rejects backticks', () => {
|
|
75
|
+
expect(() => (0, input_validation_js_1.sanitizeForExecFile)('foo`id`')).toThrow(/invalid/i);
|
|
76
|
+
});
|
|
77
|
+
it('rejects pipe', () => {
|
|
78
|
+
expect(() => (0, input_validation_js_1.sanitizeForExecFile)('foo|cat /etc/passwd')).toThrow(/invalid/i);
|
|
79
|
+
});
|
|
80
|
+
it('rejects $() subshell', () => {
|
|
81
|
+
expect(() => (0, input_validation_js_1.sanitizeForExecFile)('$(whoami)')).toThrow(/invalid/i);
|
|
82
|
+
});
|
|
83
|
+
it('accepts valid GitHub owner/repo names', () => {
|
|
84
|
+
expect((0, input_validation_js_1.sanitizeForExecFile)('anthropics')).toBe('anthropics');
|
|
85
|
+
expect((0, input_validation_js_1.sanitizeForExecFile)('claude-code')).toBe('claude-code');
|
|
86
|
+
expect((0, input_validation_js_1.sanitizeForExecFile)('my_repo.v2')).toBe('my_repo.v2');
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
describe('escapeYamlValue', () => {
|
|
90
|
+
it('escapes double quotes', () => {
|
|
91
|
+
expect((0, input_validation_js_1.escapeYamlValue)('hello "world"')).not.toContain('"world"');
|
|
92
|
+
});
|
|
93
|
+
it('escapes newlines', () => {
|
|
94
|
+
const result = (0, input_validation_js_1.escapeYamlValue)('line1\nline2');
|
|
95
|
+
expect(result).not.toContain('\n');
|
|
96
|
+
});
|
|
97
|
+
it('escapes carriage returns', () => {
|
|
98
|
+
const result = (0, input_validation_js_1.escapeYamlValue)('line1\rline2');
|
|
99
|
+
expect(result).not.toContain('\r');
|
|
100
|
+
});
|
|
101
|
+
it('handles colons safely', () => {
|
|
102
|
+
const result = (0, input_validation_js_1.escapeYamlValue)('key: value');
|
|
103
|
+
expect(result).toBe('"key: value"');
|
|
104
|
+
});
|
|
105
|
+
it('returns plain string for safe values', () => {
|
|
106
|
+
expect((0, input_validation_js_1.escapeYamlValue)('simple title')).toBe('"simple title"');
|
|
107
|
+
});
|
|
108
|
+
it('escapes backslashes', () => {
|
|
109
|
+
const result = (0, input_validation_js_1.escapeYamlValue)('path\\to\\file');
|
|
110
|
+
expect(result).toContain('\\\\');
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
//# sourceMappingURL=input-validation.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-validation.test.js","sourceRoot":"","sources":["../../tests/input-validation.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,66 +1,41 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const privacy_filter_js_1 = require("../scripts/lib/privacy-filter.js");
|
|
4
|
-
describe('
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const result = (0, privacy_filter_js_1.redactSecrets)(input);
|
|
8
|
-
expect(result).toBe('My key is [REDACTED]');
|
|
9
|
-
expect(result).not.toContain('sk-proj-');
|
|
4
|
+
describe('privacy-filter redaction (SEC-5)', () => {
|
|
5
|
+
it('redacts api_key key-value pair', () => {
|
|
6
|
+
expect((0, privacy_filter_js_1.redactSecrets)('api_key=sk_test_12345abcdef')).not.toContain('sk_test_12345abcdef');
|
|
10
7
|
});
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const result = (0, privacy_filter_js_1.redactSecrets)(input);
|
|
14
|
-
expect(result).toContain('[REDACTED]');
|
|
15
|
-
expect(result).not.toContain('AKIA');
|
|
8
|
+
it('redacts auth_token key-value pair', () => {
|
|
9
|
+
expect((0, privacy_filter_js_1.redactSecrets)('auth_token: "mySecretToken123"')).not.toContain('mySecretToken123');
|
|
16
10
|
});
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
const result = (0, privacy_filter_js_1.redactSecrets)(input);
|
|
20
|
-
expect(result).toContain('[REDACTED]');
|
|
21
|
-
expect(result).not.toContain('ghp_');
|
|
11
|
+
it('redacts access_token', () => {
|
|
12
|
+
expect((0, privacy_filter_js_1.redactSecrets)('access_token=eyJhbGciOiJIUzI1NiJ9')).not.toContain('eyJhbGciOiJIUzI1NiJ9');
|
|
22
13
|
});
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const result = (0, privacy_filter_js_1.redactSecrets)(input);
|
|
26
|
-
expect(result).toContain('[REDACTED]');
|
|
14
|
+
it('redacts refresh_token', () => {
|
|
15
|
+
expect((0, privacy_filter_js_1.redactSecrets)('refresh_token: refresh_abc123def456')).not.toContain('refresh_abc123def456');
|
|
27
16
|
});
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
const result = (0, privacy_filter_js_1.redactSecrets)(input);
|
|
31
|
-
expect(result).toContain('[REDACTED]');
|
|
32
|
-
expect(result).not.toContain('pass@');
|
|
17
|
+
it('redacts client_secret', () => {
|
|
18
|
+
expect((0, privacy_filter_js_1.redactSecrets)('client_secret="superSecretValue123"')).not.toContain('superSecretValue123');
|
|
33
19
|
});
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
const result = (0, privacy_filter_js_1.redactSecrets)(input);
|
|
37
|
-
expect(result).not.toContain('supersecret123');
|
|
38
|
-
expect(result).not.toContain('mytoken456');
|
|
20
|
+
it('redacts private_key value', () => {
|
|
21
|
+
expect((0, privacy_filter_js_1.redactSecrets)("private_key = 'my-private-key-value-here'")).not.toContain('my-private-key-value-here');
|
|
39
22
|
});
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
const result = (0, privacy_filter_js_1.redactSecrets)(input);
|
|
43
|
-
expect(result).toBe(input);
|
|
23
|
+
it('redacts Authorization Basic header', () => {
|
|
24
|
+
expect((0, privacy_filter_js_1.redactSecrets)('Basic dXNlcjpwYXNzd29yZA==')).not.toContain('dXNlcjpwYXNzd29yZA==');
|
|
44
25
|
});
|
|
45
|
-
|
|
46
|
-
const
|
|
47
|
-
const custom = [/CUSTOM_KEY=\S+/g];
|
|
48
|
-
const result = (0, privacy_filter_js_1.redactSecrets)(input, custom);
|
|
26
|
+
it('redacts BEGIN CERTIFICATE', () => {
|
|
27
|
+
const result = (0, privacy_filter_js_1.redactSecrets)('-----BEGIN CERTIFICATE-----');
|
|
49
28
|
expect(result).toContain('[REDACTED]');
|
|
50
29
|
});
|
|
51
|
-
|
|
52
|
-
expect(
|
|
53
|
-
|
|
30
|
+
it('preserves non-secret text', () => {
|
|
31
|
+
expect((0, privacy_filter_js_1.redactSecrets)('Hello world, this is normal text')).toBe('Hello world, this is normal text');
|
|
32
|
+
});
|
|
33
|
+
it('redacts existing patterns still work (JWT)', () => {
|
|
34
|
+
const jwt = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.dozjgNryP4J3jVmNHl0w5N_XgL0n3I9PlFUP0THsR8U';
|
|
35
|
+
expect((0, privacy_filter_js_1.redactSecrets)(jwt)).not.toContain(jwt);
|
|
54
36
|
});
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
const iterations = 1000;
|
|
58
|
-
const start = performance.now();
|
|
59
|
-
for (let i = 0; i < iterations; i++) {
|
|
60
|
-
(0, privacy_filter_js_1.redactSecrets)(cleanText);
|
|
61
|
-
}
|
|
62
|
-
const elapsed = performance.now() - start;
|
|
63
|
-
expect(elapsed).toBeLessThan(500);
|
|
37
|
+
it('redacts secret_key key-value', () => {
|
|
38
|
+
expect((0, privacy_filter_js_1.redactSecrets)('secret_key: abcdefghijklmnop')).not.toContain('abcdefghijklmnop');
|
|
64
39
|
});
|
|
65
40
|
});
|
|
66
41
|
//# sourceMappingURL=privacy-filter.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"privacy-filter.test.js","sourceRoot":"","sources":["../../tests/privacy-filter.test.ts"],"names":[],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"file":"privacy-filter.test.js","sourceRoot":"","sources":["../../tests/privacy-filter.test.ts"],"names":[],"mappings":";;AAAA,wEAAiE;AAEjE,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,IAAA,iCAAa,EAAC,6BAA6B,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,IAAA,iCAAa,EAAC,gCAAgC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,CAAC,IAAA,iCAAa,EAAC,mCAAmC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;IACnG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,MAAM,CAAC,IAAA,iCAAa,EAAC,qCAAqC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;IACrG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,MAAM,CAAC,IAAA,iCAAa,EAAC,qCAAqC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;IACpG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,IAAA,iCAAa,EAAC,2CAA2C,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;IAChH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,IAAA,iCAAa,EAAC,4BAA4B,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,MAAM,GAAG,IAAA,iCAAa,EAAC,6BAA6B,CAAC,CAAC;QAC5D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,IAAA,iCAAa,EAAC,kCAAkC,CAAC,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IACrG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,GAAG,GAAG,8GAA8G,CAAC;QAC3H,MAAM,CAAC,IAAA,iCAAa,EAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,IAAA,iCAAa,EAAC,8BAA8B,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -116,50 +116,6 @@ describe('Search Hook — DB Access Pattern', () => {
|
|
|
116
116
|
expect(hookSource).toContain("hookLog('search'");
|
|
117
117
|
});
|
|
118
118
|
});
|
|
119
|
-
describe('Search Hook Hybrid Integration', () => {
|
|
120
|
-
test('should fall back gracefully when hybrid search is not available', () => {
|
|
121
|
-
// Simulate hook's search function — pure FTS5 path
|
|
122
|
-
// Uses the shared DB already set up in beforeEach
|
|
123
|
-
const { searchFts5 } = require('../scripts/lib/hybrid-search.js');
|
|
124
|
-
const db = new better_sqlite3_1.default(DB_PATH, { readonly: true });
|
|
125
|
-
const results = searchFts5(db, 'react hooks', 3);
|
|
126
|
-
expect(results.length).toBeGreaterThan(0);
|
|
127
|
-
db.close();
|
|
128
|
-
});
|
|
129
|
-
test('should return FusedResult with score when using hybridSearch without vec', () => {
|
|
130
|
-
const { hybridSearch } = require('../scripts/lib/hybrid-search.js');
|
|
131
|
-
const db = new better_sqlite3_1.default(DB_PATH, { readonly: true });
|
|
132
|
-
// No vec table — hybridSearch should fall back to FTS5 and return FusedResult format
|
|
133
|
-
const results = hybridSearch(db, 'react hooks', { maxResults: 3 });
|
|
134
|
-
expect(results.length).toBeGreaterThan(0);
|
|
135
|
-
expect(results[0]).toHaveProperty('slug');
|
|
136
|
-
expect(results[0]).toHaveProperty('score');
|
|
137
|
-
expect(typeof results[0].score).toBe('number');
|
|
138
|
-
expect(results[0].score).toBeGreaterThan(0);
|
|
139
|
-
expect(results[0].slug).toBe('react-hooks');
|
|
140
|
-
db.close();
|
|
141
|
-
});
|
|
142
|
-
test('should expand synonyms and find results via hybridSearch', () => {
|
|
143
|
-
const { hybridSearch } = require('../scripts/lib/hybrid-search.js');
|
|
144
|
-
const { expandQuery } = require('../scripts/lib/synonym.js');
|
|
145
|
-
const db = new better_sqlite3_1.default(DB_PATH, { readonly: true });
|
|
146
|
-
const synonyms = { react: ['reactjs', 'react.js'] };
|
|
147
|
-
const expanded = expandQuery('react', synonyms);
|
|
148
|
-
const query = expanded.join(' ');
|
|
149
|
-
const results = hybridSearch(db, query, { maxResults: 3 });
|
|
150
|
-
expect(results.length).toBeGreaterThan(0);
|
|
151
|
-
expect(results[0].slug).toBe('react-hooks');
|
|
152
|
-
db.close();
|
|
153
|
-
});
|
|
154
|
-
test('should respect project filter in hybridSearch', () => {
|
|
155
|
-
const { hybridSearch } = require('../scripts/lib/hybrid-search.js');
|
|
156
|
-
const db = new better_sqlite3_1.default(DB_PATH, { readonly: true });
|
|
157
|
-
// Search with non-existent project — should return empty
|
|
158
|
-
const results = hybridSearch(db, 'react', { maxResults: 3, project: 'nonexistent-project' });
|
|
159
|
-
expect(results).toHaveLength(0);
|
|
160
|
-
db.close();
|
|
161
|
-
});
|
|
162
|
-
});
|
|
163
119
|
describe('Search Hook — Synonym Loader Verification', () => {
|
|
164
120
|
test('loadSynonyms and expandQuery work with config synonyms', () => {
|
|
165
121
|
const { loadSynonyms, expandQuery } = require('../scripts/lib/synonym.js');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-hook.test.js","sourceRoot":"","sources":["../../tests/search-hook.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"search-hook.test.js","sourceRoot":"","sources":["../../tests/search-hook.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sec-regression.test.d.ts","sourceRoot":"","sources":["../../tests/sec-regression.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,174 @@
|
|
|
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 os_1 = __importDefault(require("os"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const common = require('../hooks/lib/mindlore-common.cjs');
|
|
10
|
+
describe('SEC-13: baseDir resolution with path.sep guard', () => {
|
|
11
|
+
const MINDLORE_DIR = common.MINDLORE_DIR;
|
|
12
|
+
function extractBaseDir(filePath) {
|
|
13
|
+
return common.extractMindloreBaseDir(path_1.default.resolve(filePath));
|
|
14
|
+
}
|
|
15
|
+
it('extracts baseDir from valid .mindlore path', () => {
|
|
16
|
+
const p = path_1.default.join('C:', 'Users', 'test', '.mindlore', 'sources', 'x.md');
|
|
17
|
+
const result = extractBaseDir(p);
|
|
18
|
+
expect(result).not.toBeNull();
|
|
19
|
+
expect(result.endsWith(MINDLORE_DIR)).toBe(true);
|
|
20
|
+
});
|
|
21
|
+
it('rejects .mindlore-backup (partial match)', () => {
|
|
22
|
+
const p = path_1.default.join('C:', 'Users', 'test', '.mindlore-backup', 'foo.md');
|
|
23
|
+
const result = extractBaseDir(p);
|
|
24
|
+
expect(result).toBeNull();
|
|
25
|
+
});
|
|
26
|
+
it('rejects .mindlore-old (partial match)', () => {
|
|
27
|
+
const p = path_1.default.join('C:', 'Users', 'test', '.mindlore-old', 'sources', 'x.md');
|
|
28
|
+
const result = extractBaseDir(p);
|
|
29
|
+
expect(result).toBeNull();
|
|
30
|
+
});
|
|
31
|
+
it('handles nested .mindlore with lastIndexOf', () => {
|
|
32
|
+
const p = path_1.default.join('C:', 'Users', '.mindlore', 'projects', '.mindlore', 'sources', 'x.md');
|
|
33
|
+
const result = extractBaseDir(p);
|
|
34
|
+
expect(result).not.toBeNull();
|
|
35
|
+
const parts = result.split(path_1.default.sep);
|
|
36
|
+
const mindloreCount = parts.filter(seg => seg === MINDLORE_DIR).length;
|
|
37
|
+
expect(mindloreCount).toBe(2);
|
|
38
|
+
});
|
|
39
|
+
it('returns null for path without .mindlore', () => {
|
|
40
|
+
const p = path_1.default.join('C:', 'Users', 'test', 'Documents', 'file.md');
|
|
41
|
+
expect(extractBaseDir(p)).toBeNull();
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
describe('SEC-12: _rotateFile atomic write', () => {
|
|
45
|
+
let tmpDir;
|
|
46
|
+
beforeEach(() => {
|
|
47
|
+
tmpDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'sec12-'));
|
|
48
|
+
});
|
|
49
|
+
afterEach(() => {
|
|
50
|
+
fs_1.default.rmSync(tmpDir, { recursive: true, force: true });
|
|
51
|
+
});
|
|
52
|
+
it('rotates file exceeding maxBytes and leaves no .tmp', () => {
|
|
53
|
+
const filePath = path_1.default.join(tmpDir, 'test.log');
|
|
54
|
+
const lines = Array.from({ length: 100 }, (_, i) => `line-${i}`);
|
|
55
|
+
fs_1.default.writeFileSync(filePath, lines.join('\n') + '\n');
|
|
56
|
+
const keepLines = 10;
|
|
57
|
+
common._rotateFile(filePath, 50, keepLines);
|
|
58
|
+
const content = fs_1.default.readFileSync(filePath, 'utf8').trim().split('\n');
|
|
59
|
+
expect(content.length).toBe(keepLines);
|
|
60
|
+
expect(content[content.length - 1]).toBe('line-99');
|
|
61
|
+
expect(fs_1.default.existsSync(filePath + '.tmp')).toBe(false);
|
|
62
|
+
});
|
|
63
|
+
it('does not rotate file under maxBytes', () => {
|
|
64
|
+
const filePath = path_1.default.join(tmpDir, 'small.log');
|
|
65
|
+
fs_1.default.writeFileSync(filePath, 'small content\n');
|
|
66
|
+
const before = fs_1.default.readFileSync(filePath, 'utf8');
|
|
67
|
+
common._rotateFile(filePath, 999999, 10);
|
|
68
|
+
expect(fs_1.default.readFileSync(filePath, 'utf8')).toBe(before);
|
|
69
|
+
});
|
|
70
|
+
it('handles non-existent file gracefully', () => {
|
|
71
|
+
const filePath = path_1.default.join(tmpDir, 'does-not-exist.log');
|
|
72
|
+
expect(() => common._rotateFile(filePath, 50, 10)).not.toThrow();
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
describe('SEC-9: isDaemonRunning TOCTOU-safe', () => {
|
|
76
|
+
let tmpDir;
|
|
77
|
+
beforeEach(() => {
|
|
78
|
+
tmpDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'sec9-'));
|
|
79
|
+
});
|
|
80
|
+
afterEach(() => {
|
|
81
|
+
fs_1.default.rmSync(tmpDir, { recursive: true, force: true });
|
|
82
|
+
});
|
|
83
|
+
it('returns running:false when PID file does not exist', () => {
|
|
84
|
+
const pidFile = path_1.default.join(tmpDir, 'nonexistent.pid');
|
|
85
|
+
const result = common.isDaemonRunning(pidFile);
|
|
86
|
+
expect(result).toEqual({ running: false });
|
|
87
|
+
});
|
|
88
|
+
it('returns running:false for corrupt/NaN PID content', () => {
|
|
89
|
+
const pidFile = path_1.default.join(tmpDir, 'bad.pid');
|
|
90
|
+
fs_1.default.writeFileSync(pidFile, 'not-a-number\n');
|
|
91
|
+
const result = common.isDaemonRunning(pidFile);
|
|
92
|
+
expect(result.running).toBe(false);
|
|
93
|
+
});
|
|
94
|
+
it('returns running:false for stale PID and cleans up file', () => {
|
|
95
|
+
const pidFile = path_1.default.join(tmpDir, 'stale.pid');
|
|
96
|
+
fs_1.default.writeFileSync(pidFile, '999999999\n');
|
|
97
|
+
const result = common.isDaemonRunning(pidFile);
|
|
98
|
+
expect(result.running).toBe(false);
|
|
99
|
+
expect(fs_1.default.existsSync(pidFile)).toBe(false);
|
|
100
|
+
});
|
|
101
|
+
it('returns running:true for live PID (current process)', () => {
|
|
102
|
+
const pidFile = path_1.default.join(tmpDir, 'live.pid');
|
|
103
|
+
fs_1.default.writeFileSync(pidFile, `${process.pid}\n`);
|
|
104
|
+
const result = common.isDaemonRunning(pidFile);
|
|
105
|
+
expect(result).toEqual({ running: true, pid: process.pid });
|
|
106
|
+
fs_1.default.unlinkSync(pidFile);
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
describe('SEC-4: restrictive file permissions (0o600/0o700)', () => {
|
|
110
|
+
let tmpDir;
|
|
111
|
+
beforeEach(() => {
|
|
112
|
+
tmpDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'sec4-'));
|
|
113
|
+
});
|
|
114
|
+
afterEach(() => {
|
|
115
|
+
fs_1.default.rmSync(tmpDir, { recursive: true, force: true });
|
|
116
|
+
});
|
|
117
|
+
it('_rotateFile writes with mode 0o600', () => {
|
|
118
|
+
const filePath = path_1.default.join(tmpDir, 'secret.log');
|
|
119
|
+
const lines = Array.from({ length: 50 }, (_, i) => `line-${i}`);
|
|
120
|
+
fs_1.default.writeFileSync(filePath, lines.join('\n') + '\n');
|
|
121
|
+
common._rotateFile(filePath, 10, 5);
|
|
122
|
+
if (process.platform !== 'win32') {
|
|
123
|
+
const stat = fs_1.default.statSync(filePath);
|
|
124
|
+
expect(stat.mode & 0o777).toBe(0o600);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
expect(fs_1.default.existsSync(filePath)).toBe(true);
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
it('writeFileSync in hooks uses mode 0o600 for sensitive files', () => {
|
|
131
|
+
const hookSrc = fs_1.default.readFileSync(path_1.default.join(__dirname, '..', 'hooks', 'mindlore-session-end.cjs'), 'utf8');
|
|
132
|
+
const writeMatches = hookSrc.match(/writeFileSync\([^)]+\)/g) ?? [];
|
|
133
|
+
const sensitiveWrites = writeMatches.filter(m => !m.includes('.pid') && !m.includes('.port'));
|
|
134
|
+
for (const w of sensitiveWrites) {
|
|
135
|
+
if (w.includes('mode')) {
|
|
136
|
+
expect(w).toMatch(/0o600/);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
describe('SEC-6: no execSync with user-controlled input', () => {
|
|
142
|
+
const FILES_WITH_SUBPROCESSES = [
|
|
143
|
+
{ file: 'hooks/mindlore-pre-compact.cjs', minExecFile: 1 },
|
|
144
|
+
{ file: 'hooks/mindlore-session-end.cjs', minExecFile: 5 },
|
|
145
|
+
{ file: 'scripts/init.ts', minExecFile: 1 },
|
|
146
|
+
];
|
|
147
|
+
it.each(FILES_WITH_SUBPROCESSES)('$file has zero execSync calls', ({ file }) => {
|
|
148
|
+
const src = fs_1.default.readFileSync(path_1.default.join(__dirname, '..', file), 'utf8');
|
|
149
|
+
const execSyncCalls = src.match(/\bexecSync\s*\(/g) ?? [];
|
|
150
|
+
expect(execSyncCalls.length).toBe(0);
|
|
151
|
+
});
|
|
152
|
+
it.each(FILES_WITH_SUBPROCESSES)('$file uses execFileSync (min $minExecFile calls)', ({ file, minExecFile }) => {
|
|
153
|
+
const src = fs_1.default.readFileSync(path_1.default.join(__dirname, '..', file), 'utf8');
|
|
154
|
+
const execFileSyncCalls = src.match(/\bexecFileSync\s*\(/g) ?? [];
|
|
155
|
+
expect(execFileSyncCalls.length).toBeGreaterThanOrEqual(minExecFile);
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
describe('SEC-8: daemon TCP connection limits', () => {
|
|
159
|
+
it('daemon.ts source sets maxConnections = 10', () => {
|
|
160
|
+
const src = fs_1.default.readFileSync(path_1.default.join(__dirname, '..', 'scripts', 'lib', 'daemon.ts'), 'utf8');
|
|
161
|
+
expect(src).toMatch(/server\.maxConnections\s*=\s*10/);
|
|
162
|
+
});
|
|
163
|
+
it('daemon.ts source sets connection timeout', () => {
|
|
164
|
+
const src = fs_1.default.readFileSync(path_1.default.join(__dirname, '..', 'scripts', 'lib', 'daemon.ts'), 'utf8');
|
|
165
|
+
expect(src).toMatch(/conn\.setTimeout\(\d+\)/);
|
|
166
|
+
expect(src).toMatch(/conn\.on\(['"]timeout['"]/);
|
|
167
|
+
});
|
|
168
|
+
it('daemon.ts source enforces buffer limit', () => {
|
|
169
|
+
const src = fs_1.default.readFileSync(path_1.default.join(__dirname, '..', 'scripts', 'lib', 'daemon.ts'), 'utf8');
|
|
170
|
+
expect(src).toMatch(/MAX_BUFFER/);
|
|
171
|
+
expect(src).toMatch(/buffer\.length\s*>\s*MAX_BUFFER/);
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
//# sourceMappingURL=sec-regression.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sec-regression.test.js","sourceRoot":"","sources":["../../tests/sec-regression.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
const constants_1 = require("../scripts/lib/constants");
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
4
8
|
describe('STOP_WORDS', () => {
|
|
5
9
|
it('contains core English stop words', () => {
|
|
6
10
|
expect(constants_1.STOP_WORDS.has('the')).toBe(true);
|
|
@@ -18,4 +22,26 @@ describe('STOP_WORDS', () => {
|
|
|
18
22
|
expect(constants_1.STOP_WORDS_MIN_LENGTH).toBe(2);
|
|
19
23
|
});
|
|
20
24
|
});
|
|
25
|
+
describe('STOP_WORDS fallback (S4)', () => {
|
|
26
|
+
it('mindlore-common.cjs loads without dist/ by using inline fallback', () => {
|
|
27
|
+
const commonPath = path_1.default.resolve(__dirname, '../hooks/lib/mindlore-common.cjs');
|
|
28
|
+
const common = require(commonPath);
|
|
29
|
+
expect(typeof common.extractKeywords).toBe('function');
|
|
30
|
+
const keywords = common.extractKeywords('the TypeScript hooks are powerful');
|
|
31
|
+
expect(keywords).toContain('typescript');
|
|
32
|
+
expect(keywords).toContain('hooks');
|
|
33
|
+
expect(keywords).toContain('powerful');
|
|
34
|
+
expect(keywords).not.toContain('the');
|
|
35
|
+
expect(keywords).not.toContain('are');
|
|
36
|
+
});
|
|
37
|
+
it('fallback STOP_WORDS set contains expected common words', () => {
|
|
38
|
+
const commonPath = path_1.default.resolve(__dirname, '../hooks/lib/mindlore-common.cjs');
|
|
39
|
+
const common = require(commonPath);
|
|
40
|
+
const keywords = common.extractKeywords('a bu ve the is are TypeScript');
|
|
41
|
+
expect(keywords).toContain('typescript');
|
|
42
|
+
expect(keywords).not.toContain('the');
|
|
43
|
+
expect(keywords).not.toContain('bu');
|
|
44
|
+
expect(keywords).not.toContain('ve');
|
|
45
|
+
});
|
|
46
|
+
});
|
|
21
47
|
//# sourceMappingURL=stop-words.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stop-words.test.js","sourceRoot":"","sources":["../../tests/stop-words.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stop-words.test.js","sourceRoot":"","sources":["../../tests/stop-words.test.ts"],"names":[],"mappings":"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"}
|