mindlore 0.6.8 → 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 (124) hide show
  1. package/README.md +259 -259
  2. package/SCHEMA.md +292 -292
  3. package/dist/scripts/cc-memory-bulk-sync.d.ts.map +1 -1
  4. package/dist/scripts/cc-memory-bulk-sync.js +2 -1
  5. package/dist/scripts/cc-memory-bulk-sync.js.map +1 -1
  6. package/dist/scripts/cc-session-sync.d.ts.map +1 -1
  7. package/dist/scripts/cc-session-sync.js +6 -5
  8. package/dist/scripts/cc-session-sync.js.map +1 -1
  9. package/dist/scripts/fetch-raw.js +5 -4
  10. package/dist/scripts/fetch-raw.js.map +1 -1
  11. package/dist/scripts/init.js +12 -11
  12. package/dist/scripts/init.js.map +1 -1
  13. package/dist/scripts/lib/consolidation.js +10 -10
  14. package/dist/scripts/lib/constants.d.ts +2 -0
  15. package/dist/scripts/lib/constants.d.ts.map +1 -1
  16. package/dist/scripts/lib/constants.js +10 -1
  17. package/dist/scripts/lib/constants.js.map +1 -1
  18. package/dist/scripts/lib/decay.js +9 -9
  19. package/dist/scripts/lib/episodes.js +23 -23
  20. package/dist/scripts/lib/migrations-v061.js +21 -21
  21. package/dist/scripts/lib/migrations-v062.js +11 -11
  22. package/dist/scripts/lib/migrations-v063.js +14 -14
  23. package/dist/scripts/lib/migrations-v067.js +11 -11
  24. package/dist/scripts/lib/schema-version.js +6 -6
  25. package/dist/scripts/lib/search-cache.js +11 -11
  26. package/dist/scripts/lib/secure-io.d.ts +11 -0
  27. package/dist/scripts/lib/secure-io.d.ts.map +1 -0
  28. package/dist/scripts/lib/secure-io.js +26 -0
  29. package/dist/scripts/lib/secure-io.js.map +1 -0
  30. package/dist/scripts/lib/session-payload.js +7 -7
  31. package/dist/scripts/lib/triage.js +3 -3
  32. package/dist/scripts/lib/validate-manifest.d.ts +8 -0
  33. package/dist/scripts/lib/validate-manifest.d.ts.map +1 -0
  34. package/dist/scripts/lib/validate-manifest.js +80 -0
  35. package/dist/scripts/lib/validate-manifest.js.map +1 -0
  36. package/dist/scripts/mindlore-backup.js +9 -9
  37. package/dist/scripts/mindlore-fts5-index.js +10 -10
  38. package/dist/scripts/validate-manifest-cli.d.ts +2 -0
  39. package/dist/scripts/validate-manifest-cli.d.ts.map +1 -0
  40. package/dist/scripts/validate-manifest-cli.js +38 -0
  41. package/dist/scripts/validate-manifest-cli.js.map +1 -0
  42. package/dist/tests/cc-memory-sync.test.js +3 -3
  43. package/dist/tests/chunks-migration.test.js +1 -1
  44. package/dist/tests/compaction-snapshot.test.js +2 -2
  45. package/dist/tests/consolidation.test.js +3 -3
  46. package/dist/tests/decay.test.js +9 -9
  47. package/dist/tests/diary.test.js +4 -4
  48. package/dist/tests/episode-file.test.js +2 -1
  49. package/dist/tests/episode-file.test.js.map +1 -1
  50. package/dist/tests/episodes-inject.test.js +9 -9
  51. package/dist/tests/fetch-raw.test.js +1 -2
  52. package/dist/tests/fetch-raw.test.js.map +1 -1
  53. package/dist/tests/fts5.test.js +75 -75
  54. package/dist/tests/fuzzy.test.js +1 -1
  55. package/dist/tests/git-snapshot.test.js +3 -5
  56. package/dist/tests/git-snapshot.test.js.map +1 -1
  57. package/dist/tests/helpers/db.d.ts +1 -2
  58. package/dist/tests/helpers/db.d.ts.map +1 -1
  59. package/dist/tests/helpers/db.js +18 -26
  60. package/dist/tests/helpers/db.js.map +1 -1
  61. package/dist/tests/manifest-v2.test.d.ts +2 -0
  62. package/dist/tests/manifest-v2.test.d.ts.map +1 -0
  63. package/dist/tests/manifest-v2.test.js +74 -0
  64. package/dist/tests/manifest-v2.test.js.map +1 -0
  65. package/dist/tests/migrations-v053.test.js +16 -16
  66. package/dist/tests/migrations-v061.test.js +10 -10
  67. package/dist/tests/migrations-v063.test.js +4 -4
  68. package/dist/tests/migrations-v068.test.js +6 -3
  69. package/dist/tests/migrations-v068.test.js.map +1 -1
  70. package/dist/tests/nomination-counts.test.js +6 -6
  71. package/dist/tests/nomination-counts.test.js.map +1 -1
  72. package/dist/tests/pre-compact.test.js +2 -1
  73. package/dist/tests/pre-compact.test.js.map +1 -1
  74. package/dist/tests/recall-telemetry.test.js +12 -11
  75. package/dist/tests/recall-telemetry.test.js.map +1 -1
  76. package/dist/tests/rrf.test.js +3 -3
  77. package/dist/tests/search-engine.test.js +1 -1
  78. package/dist/tests/search-hook.test.js +2 -2
  79. package/dist/tests/search-offload.test.js +1 -1
  80. package/dist/tests/search-offload.test.js.map +1 -1
  81. package/dist/tests/secure-io.test.d.ts +2 -0
  82. package/dist/tests/secure-io.test.d.ts.map +1 -0
  83. package/dist/tests/secure-io.test.js +65 -0
  84. package/dist/tests/secure-io.test.js.map +1 -0
  85. package/dist/tests/session-payload.test.js +1 -1
  86. package/dist/tests/session-summary.test.js +1 -1
  87. package/dist/tests/similarity.test.js +1 -1
  88. package/dist/tests/skill-path-resolution.test.js +22 -3
  89. package/dist/tests/skill-path-resolution.test.js.map +1 -1
  90. package/dist/tests/triage.test.js +1 -1
  91. package/hooks/lib/constants.cjs +15 -15
  92. package/hooks/lib/mindlore-common.cjs +975 -974
  93. package/hooks/mindlore-cwd-changed.cjs +57 -57
  94. package/hooks/mindlore-decision-detector.cjs +54 -54
  95. package/hooks/mindlore-dont-repeat.cjs +222 -222
  96. package/hooks/mindlore-fts5-sync.cjs +98 -97
  97. package/hooks/mindlore-index.cjs +230 -229
  98. package/hooks/mindlore-model-router.cjs +54 -54
  99. package/hooks/mindlore-post-compact.cjs +69 -69
  100. package/hooks/mindlore-post-read.cjs +106 -106
  101. package/hooks/mindlore-pre-compact.cjs +154 -154
  102. package/hooks/mindlore-read-guard.cjs +105 -105
  103. package/hooks/mindlore-research-guard.cjs +176 -176
  104. package/hooks/mindlore-search.cjs +200 -200
  105. package/hooks/mindlore-session-end.cjs +510 -509
  106. package/hooks/mindlore-session-focus.cjs +256 -256
  107. package/package.json +76 -75
  108. package/plugin.json +2 -1
  109. package/skills/mindlore-diary/SKILL.md +85 -85
  110. package/skills/mindlore-evolve/SKILL.md +126 -126
  111. package/skills/mindlore-explore/SKILL.md +109 -109
  112. package/skills/mindlore-ingest/SKILL.md +195 -195
  113. package/skills/mindlore-maintain/SKILL.md +125 -125
  114. package/skills/mindlore-query/SKILL.md +151 -151
  115. package/skills/mindlore-reflect/SKILL.md +141 -141
  116. package/skills/mindlore-stats/SKILL.md +106 -106
  117. package/templates/INDEX.md +14 -14
  118. package/templates/SCHEMA.md +292 -292
  119. package/templates/config.json +1 -1
  120. package/templates/extraction/article.md +15 -15
  121. package/templates/extraction/changelog.md +15 -15
  122. package/templates/extraction/default.md +15 -15
  123. package/templates/extraction/docs.md +15 -15
  124. package/templates/extraction/github-repo.md +17 -17
@@ -6,9 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.resolveProject = exports.extractFtsMetadata = exports.parseFrontmatter = void 0;
7
7
  exports.sha256 = sha256;
8
8
  exports.createTestDb = createTestDb;
9
- exports.createTestDbWithFullSchema = createTestDbWithFullSchema;
10
9
  exports.createTestDbAtVersion = createTestDbAtVersion;
11
- exports.createTestDbWithMigrations = createTestDbWithMigrations;
10
+ exports.createTestDbWithFullSchema = createTestDbWithFullSchema;
12
11
  exports.insertFts = insertFts;
13
12
  exports.createTestDbWithEpisodes = createTestDbWithEpisodes;
14
13
  exports.setupTestDir = setupTestDir;
@@ -43,20 +42,20 @@ function createTestDb(dbPath) {
43
42
  const db = new better_sqlite3_1.default(dbPath);
44
43
  db.pragma('journal_mode = WAL');
45
44
  db.exec(SQL_FTS_CREATE);
46
- db.exec(`
47
- CREATE TABLE IF NOT EXISTS file_hashes (
48
- path TEXT PRIMARY KEY,
49
- content_hash TEXT NOT NULL,
50
- last_indexed TEXT NOT NULL,
51
- created_at TEXT,
52
- updated_at TEXT,
53
- source_type TEXT DEFAULT 'mindlore',
54
- project_scope TEXT,
55
- recall_count INTEGER DEFAULT 0,
56
- last_recalled_at TEXT,
57
- archived_at TEXT,
58
- importance REAL
59
- );
45
+ db.exec(`
46
+ CREATE TABLE IF NOT EXISTS file_hashes (
47
+ path TEXT PRIMARY KEY,
48
+ content_hash TEXT NOT NULL,
49
+ last_indexed TEXT NOT NULL,
50
+ created_at TEXT,
51
+ updated_at TEXT,
52
+ source_type TEXT DEFAULT 'mindlore',
53
+ project_scope TEXT,
54
+ recall_count INTEGER DEFAULT 0,
55
+ last_recalled_at TEXT,
56
+ archived_at TEXT,
57
+ importance REAL
58
+ );
60
59
  `);
61
60
  return db;
62
61
  }
@@ -66,13 +65,6 @@ const ALL_MIGRATIONS = [
66
65
  ...migrations_v063_js_1.V063_MIGRATIONS, ...migrations_v066_js_1.V066_MIGRATIONS, ...migrations_v067_js_1.V067_MIGRATIONS,
67
66
  ...migrations_v068_js_1.V068_MIGRATIONS,
68
67
  ];
69
- function createTestDbWithFullSchema(dbPath) {
70
- const db = createTestDb(dbPath);
71
- ensureEpisodesTableCjs(db);
72
- (0, schema_version_js_1.ensureSchemaTable)(db);
73
- (0, schema_version_js_1.runMigrations)(db, ALL_MIGRATIONS);
74
- return db;
75
- }
76
68
  function createTestDbAtVersion(dbPath, maxVersion) {
77
69
  const db = createTestDb(dbPath);
78
70
  ensureEpisodesTableCjs(db);
@@ -81,7 +73,7 @@ function createTestDbAtVersion(dbPath, maxVersion) {
81
73
  (0, schema_version_js_1.runMigrations)(db, filtered);
82
74
  return db;
83
75
  }
84
- function createTestDbWithMigrations(dbPath) {
76
+ function createTestDbWithFullSchema(dbPath) {
85
77
  const db = createTestDb(dbPath);
86
78
  ensureEpisodesTableCjs(db);
87
79
  (0, schema_version_js_1.ensureSchemaTable)(db);
@@ -119,7 +111,7 @@ function destroyEpisodesTestEnv(env) {
119
111
  function createEpisodesTestEnvWithMigrations(prefix) {
120
112
  const tmpDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), `mindlore-${prefix}-`));
121
113
  const dbPath = path_1.default.join(tmpDir, 'test.db');
122
- const db = createTestDbWithMigrations(dbPath);
114
+ const db = createTestDbWithFullSchema(dbPath);
123
115
  return { db, tmpDir };
124
116
  }
125
117
  exports.parseFrontmatter = parseFrontmatterCjs;
@@ -136,7 +128,7 @@ function insertEpisode(db, overrides = {}) {
136
128
  created_at: new Date().toISOString(),
137
129
  };
138
130
  const data = { ...defaults, ...overrides };
139
- const result = db.prepare(`INSERT INTO episodes (id, kind, status, project, summary, graduated_at, created_at)
131
+ const result = db.prepare(`INSERT INTO episodes (id, kind, status, project, summary, graduated_at, created_at)
140
132
  VALUES (?, ?, ?, ?, ?, ?, ?)`).run(data.id, data.kind, data.status, data.project, data.summary, data.graduated_at, data.created_at);
141
133
  return Number(result.lastInsertRowid);
142
134
  }
@@ -1 +1 @@
1
- {"version":3,"file":"db.js","sourceRoot":"","sources":["../../../tests/helpers/db.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../../tests/helpers/db.ts"],"names":[],"mappings":";;;;;;AA2BA,wBAEC;AAED,oCAoBC;AASD,sDAOC;AAED,gEAMC;AAiBD,8BAEC;AAED,4DAIC;AAED,oCAMC;AAED,0CAEC;AAOD,sDAKC;AAED,wDAGC;AAED,kFAKC;AAgBD,sCAgBC;AAED,0CAKC;AA/KD,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AACpB,oDAA4B;AAC5B,oEAAsC;AACtC,2EAAuF;AACvF,mEAAkE;AAClE,6EAAuE;AACvE,6EAAuE;AACvE,6EAAuE;AACvE,6EAAuE;AACvE,6EAAuE;AACvE,6EAAuE;AACvE,6EAAuE;AACvE,6EAAuE;AACvE,6EAAuE;AAEvE,oEAAoE;AACpE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,cAAc,EAAE,iBAAiB,EAAE,GAOpM,OAAO,CAAC,qCAAqC,CAAC,CAAC;AAEnD,SAAgB,MAAM,CAAC,OAAe;IACpC,OAAO,gBAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3E,CAAC;AAED,SAAgB,YAAY,CAAC,MAAc;IACzC,MAAM,EAAE,GAAG,IAAI,wBAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACxB,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;GAcP,CAAC,CAAC;IACH,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,cAAc,GAAG;IACrB,GAAG,+BAAe,EAAE,GAAG,oCAAe,EAAE,GAAG,oCAAe;IAC1D,GAAG,oCAAe,EAAE,GAAG,oCAAe,EAAE,GAAG,oCAAe;IAC1D,GAAG,oCAAe,EAAE,GAAG,oCAAe,EAAE,GAAG,oCAAe;IAC1D,GAAG,oCAAe;CACnB,CAAC;AAEF,SAAgB,qBAAqB,CAAC,MAAc,EAAE,UAAkB;IACtE,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAChC,sBAAsB,CAAC,EAAE,CAAC,CAAC;IAC3B,IAAA,qCAAiB,EAAC,EAAE,CAAC,CAAC;IACtB,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,UAAU,CAAC,CAAC;IACrE,IAAA,iCAAa,EAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC5B,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAgB,0BAA0B,CAAC,MAAc;IACvD,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAChC,sBAAsB,CAAC,EAAE,CAAC,CAAC;IAC3B,IAAA,qCAAiB,EAAC,EAAE,CAAC,CAAC;IACtB,IAAA,iCAAa,EAAC,EAAE,EAAE,cAAc,CAAC,CAAC;IAClC,OAAO,EAAE,CAAC;AACZ,CAAC;AAiBD,SAAgB,SAAS,CAAC,EAAqB,EAAE,KAAe;IAC9D,YAAY,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED,SAAgB,wBAAwB,CAAC,MAAc;IACrD,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAChC,sBAAsB,CAAC,EAAE,CAAC,CAAC;IAC3B,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAgB,YAAY,CAAC,OAAe,EAAE,OAAkB;IAC9D,MAAM,IAAI,GAAG,OAAO,IAAI,EAAE,CAAC;IAC3B,YAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,YAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,SAAgB,eAAe,CAAC,OAAe;IAC7C,YAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACvD,CAAC;AAOD,SAAgB,qBAAqB,CAAC,MAAc;IAClD,MAAM,MAAM,GAAG,YAAE,CAAC,WAAW,CAAC,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,YAAY,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7E,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC5C,MAAM,EAAE,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAC5C,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;AACxB,CAAC;AAED,SAAgB,sBAAsB,CAAC,GAAoB;IACzD,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IACf,YAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,SAAgB,mCAAmC,CAAC,MAAc;IAChE,MAAM,MAAM,GAAG,YAAE,CAAC,WAAW,CAAC,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,YAAY,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7E,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC5C,MAAM,EAAE,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;AACxB,CAAC;AAEY,QAAA,gBAAgB,GAAG,mBAAmB,CAAC;AACvC,QAAA,kBAAkB,GAAG,qBAAqB,CAAC;AAC3C,QAAA,cAAc,GAAG,iBAAiB,CAAC;AAYhD,SAAgB,aAAa,CAAC,EAAqB,EAAE,YAA2B,EAAE;IAChF,MAAM,QAAQ,GAAG;QACf,EAAE,EAAE,gBAAM,CAAC,UAAU,EAAE;QACvB,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,cAAc;QACvB,OAAO,EAAE,sBAAsB;QAC/B,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACrC,CAAC;IACF,MAAM,IAAI,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,SAAS,EAAE,CAAC;IAC3C,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CACvB;kCAC8B,CAC/B,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACvG,OAAO,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;AACxC,CAAC;AAED,SAAgB,eAAe,CAAC,EAAqB,EAAE,SAAiB,EAAE,SAAiB,EAAE,UAAmB;IAC9G,MAAM,EAAE,GAAG,UAAU,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAClD,EAAE,CAAC,OAAO,CACR,iGAAiG,CAClG,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=manifest-v2.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-v2.test.d.ts","sourceRoot":"","sources":["../../tests/manifest-v2.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const validate_manifest_js_1 = require("../scripts/lib/validate-manifest.js");
4
+ describe('validate-manifest', () => {
5
+ const validV2 = {
6
+ manifestVersion: 2,
7
+ name: 'mindlore',
8
+ version: '0.6.9',
9
+ description: 'AI-native knowledge system',
10
+ skills: [],
11
+ hooks: [],
12
+ };
13
+ it('accepts valid v2 manifest', () => {
14
+ const result = (0, validate_manifest_js_1.validateManifest)(validV2);
15
+ expect(result.valid).toBe(true);
16
+ expect(result.errors).toHaveLength(0);
17
+ });
18
+ it('accepts v1 manifest (no manifestVersion field)', () => {
19
+ const v1 = { name: 'test', description: 'test plugin', skills: [], hooks: [] };
20
+ const result = (0, validate_manifest_js_1.validateManifest)(v1);
21
+ expect(result.valid).toBe(true);
22
+ expect(result.manifestVersion).toBe(1);
23
+ });
24
+ it('rejects missing name', () => {
25
+ const bad = { ...validV2, name: undefined };
26
+ const result = (0, validate_manifest_js_1.validateManifest)(bad);
27
+ expect(result.valid).toBe(false);
28
+ expect(result.errors[0]).toMatch(/name/i);
29
+ });
30
+ it('rejects invalid version format', () => {
31
+ const bad = { ...validV2, version: 'not-semver' };
32
+ const result = (0, validate_manifest_js_1.validateManifest)(bad);
33
+ expect(result.valid).toBe(false);
34
+ expect(result.errors[0]).toMatch(/version/i);
35
+ });
36
+ it('rejects invalid manifestVersion', () => {
37
+ const bad = { ...validV2, manifestVersion: 99 };
38
+ const result = (0, validate_manifest_js_1.validateManifest)(bad);
39
+ expect(result.valid).toBe(false);
40
+ expect(result.errors[0]).toMatch(/manifestVersion/i);
41
+ });
42
+ it('accepts optional fields when missing', () => {
43
+ const withOptionals = { ...validV2, minCCVersion: '2.1.0', conflicts: ['other'] };
44
+ delete withOptionals.minCCVersion;
45
+ delete withOptionals.conflicts;
46
+ const result = (0, validate_manifest_js_1.validateManifest)(withOptionals);
47
+ expect(result.valid).toBe(true);
48
+ });
49
+ it('validates minCCVersion format when present', () => {
50
+ const withCC = { ...validV2, minCCVersion: '2.1.100' };
51
+ expect((0, validate_manifest_js_1.validateManifest)(withCC).valid).toBe(true);
52
+ const badCC = { ...validV2, minCCVersion: 'abc' };
53
+ expect((0, validate_manifest_js_1.validateManifest)(badCC).valid).toBe(false);
54
+ });
55
+ it('validates conflicts is array of strings', () => {
56
+ const good = { ...validV2, conflicts: ['other-plugin'] };
57
+ expect((0, validate_manifest_js_1.validateManifest)(good).valid).toBe(true);
58
+ const bad = { ...validV2, conflicts: [123] };
59
+ expect((0, validate_manifest_js_1.validateManifest)(bad).valid).toBe(false);
60
+ });
61
+ it('validates skills have name and path', () => {
62
+ const good = { ...validV2, skills: [{ name: 'test', path: 'skills/test/SKILL.md', description: 'desc' }] };
63
+ expect((0, validate_manifest_js_1.validateManifest)(good).valid).toBe(true);
64
+ const bad = { ...validV2, skills: [{ name: 'test' }] };
65
+ expect((0, validate_manifest_js_1.validateManifest)(bad).valid).toBe(false);
66
+ });
67
+ it('validates hooks have event and script', () => {
68
+ const good = { ...validV2, hooks: [{ event: 'SessionStart', script: 'hooks/test.cjs' }] };
69
+ expect((0, validate_manifest_js_1.validateManifest)(good).valid).toBe(true);
70
+ const bad = { ...validV2, hooks: [{ event: 'SessionStart' }] };
71
+ expect((0, validate_manifest_js_1.validateManifest)(bad).valid).toBe(false);
72
+ });
73
+ });
74
+ //# sourceMappingURL=manifest-v2.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-v2.test.js","sourceRoot":"","sources":["../../tests/manifest-v2.test.ts"],"names":[],"mappings":"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"}
@@ -17,27 +17,27 @@ function createBaseDb(dbPath) {
17
17
  const db = new better_sqlite3_1.default(dbPath);
18
18
  db.pragma('journal_mode = WAL');
19
19
  db.exec(SQL_FTS_CREATE);
20
- db.exec(`
21
- CREATE TABLE IF NOT EXISTS file_hashes (
22
- path TEXT PRIMARY KEY,
23
- content_hash TEXT NOT NULL,
24
- last_indexed TEXT NOT NULL
25
- );
20
+ db.exec(`
21
+ CREATE TABLE IF NOT EXISTS file_hashes (
22
+ path TEXT PRIMARY KEY,
23
+ content_hash TEXT NOT NULL,
24
+ last_indexed TEXT NOT NULL
25
+ );
26
26
  `);
27
27
  (0, schema_version_js_1.ensureSchemaTable)(db);
28
28
  return db;
29
29
  }
30
30
  function addEpisodesTable(db) {
31
- db.exec(`
32
- CREATE TABLE IF NOT EXISTS episodes (
33
- id INTEGER PRIMARY KEY AUTOINCREMENT,
34
- session_id TEXT NOT NULL,
35
- timestamp TEXT NOT NULL,
36
- summary TEXT NOT NULL,
37
- project TEXT,
38
- tags TEXT,
39
- quality REAL DEFAULT 0.5
40
- );
31
+ db.exec(`
32
+ CREATE TABLE IF NOT EXISTS episodes (
33
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
34
+ session_id TEXT NOT NULL,
35
+ timestamp TEXT NOT NULL,
36
+ summary TEXT NOT NULL,
37
+ project TEXT,
38
+ tags TEXT,
39
+ quality REAL DEFAULT 0.5
40
+ );
41
41
  `);
42
42
  }
43
43
  describe('v0.5.3 Migrations', () => {
@@ -11,16 +11,16 @@ const migrations_v052_js_1 = require("../scripts/lib/migrations-v052.js");
11
11
  const migrations_v053_js_1 = require("../scripts/lib/migrations-v053.js");
12
12
  function setupDb() {
13
13
  const db = new better_sqlite3_1.default(':memory:');
14
- db.exec(`
15
- CREATE VIRTUAL TABLE mindlore_fts USING fts5(
16
- path, slug, description, type, category, title, content, tags,
17
- quality, date_captured, project
18
- );
19
- CREATE TABLE IF NOT EXISTS file_hashes (
20
- path TEXT PRIMARY KEY, content_hash TEXT, last_indexed TEXT,
21
- recall_count INTEGER DEFAULT 0, last_recalled_at TEXT,
22
- archived_at TEXT, importance REAL DEFAULT 1.0
23
- );
14
+ db.exec(`
15
+ CREATE VIRTUAL TABLE mindlore_fts USING fts5(
16
+ path, slug, description, type, category, title, content, tags,
17
+ quality, date_captured, project
18
+ );
19
+ CREATE TABLE IF NOT EXISTS file_hashes (
20
+ path TEXT PRIMARY KEY, content_hash TEXT, last_indexed TEXT,
21
+ recall_count INTEGER DEFAULT 0, last_recalled_at TEXT,
22
+ archived_at TEXT, importance REAL DEFAULT 1.0
23
+ );
24
24
  `);
25
25
  (0, schema_version_js_1.ensureSchemaTable)(db);
26
26
  const allPrior = [...migrations_js_1.V050_MIGRATIONS, ...migrations_js_1.V051_MIGRATIONS, ...migrations_v052_js_1.V052_MIGRATIONS, ...migrations_v053_js_1.V053_MIGRATIONS];
@@ -28,7 +28,7 @@ function cleanup(dir, db) {
28
28
  describe('v0.6.3 migrations', () => {
29
29
  test('migration creates trigram table', () => {
30
30
  const dir = makeTmpDir();
31
- const db = (0, db_js_1.createTestDbWithMigrations)(path_1.default.join(dir, 'mindlore.db'));
31
+ const db = (0, db_js_1.createTestDbWithFullSchema)(path_1.default.join(dir, 'mindlore.db'));
32
32
  const tables = db.prepare("SELECT name FROM sqlite_master").all();
33
33
  const names = tables.map(t => t.name);
34
34
  expect(names).toContain('mindlore_fts_trigram');
@@ -36,7 +36,7 @@ describe('v0.6.3 migrations', () => {
36
36
  });
37
37
  test('migration creates vocabulary table', () => {
38
38
  const dir = makeTmpDir();
39
- const db = (0, db_js_1.createTestDbWithMigrations)(path_1.default.join(dir, 'mindlore.db'));
39
+ const db = (0, db_js_1.createTestDbWithFullSchema)(path_1.default.join(dir, 'mindlore.db'));
40
40
  const tables = db.prepare("SELECT name FROM sqlite_master WHERE type='table'").all();
41
41
  const names = tables.map(t => t.name);
42
42
  expect(names).toContain('vocabulary');
@@ -66,14 +66,14 @@ describe('v0.6.3 migrations', () => {
66
66
  });
67
67
  test('schema version is 19 after migration', () => {
68
68
  const dir = makeTmpDir();
69
- const db = (0, db_js_1.createTestDbWithMigrations)(path_1.default.join(dir, 'mindlore.db'));
69
+ const db = (0, db_js_1.createTestDbWithFullSchema)(path_1.default.join(dir, 'mindlore.db'));
70
70
  const row = db.prepare('SELECT MAX(version) as v FROM schema_versions').get();
71
71
  expect(row.v).toBe(19);
72
72
  cleanup(dir, db);
73
73
  });
74
74
  test('vocabulary table accepts inserts and dedup', () => {
75
75
  const dir = makeTmpDir();
76
- const db = (0, db_js_1.createTestDbWithMigrations)(path_1.default.join(dir, 'mindlore.db'));
76
+ const db = (0, db_js_1.createTestDbWithFullSchema)(path_1.default.join(dir, 'mindlore.db'));
77
77
  db.prepare('INSERT INTO vocabulary (word) VALUES (?)').run('typescript');
78
78
  db.prepare('INSERT OR IGNORE INTO vocabulary (word) VALUES (?)').run('typescript');
79
79
  const count = db.prepare('SELECT COUNT(*) as c FROM vocabulary').get().c;
@@ -12,13 +12,16 @@ const migrations_v068_js_1 = require("../scripts/lib/migrations-v068.js");
12
12
  const schema_version_js_1 = require("../scripts/lib/schema-version.js");
13
13
  describe('V068 Migrations', () => {
14
14
  let db;
15
- const dbPath = path_1.default.join(os_1.default.tmpdir(), `mindlore-v068-test-${Date.now()}.db`);
15
+ let tmpDir;
16
+ let dbPath;
16
17
  beforeEach(() => {
17
- db = (0, db_js_1.createTestDbWithMigrations)(dbPath);
18
+ tmpDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'mindlore-v068-test-'));
19
+ dbPath = path_1.default.join(tmpDir, 'test.db');
20
+ db = (0, db_js_1.createTestDbWithFullSchema)(dbPath);
18
21
  });
19
22
  afterEach(() => {
20
23
  db.close();
21
- fs_1.default.unlinkSync(dbPath);
24
+ fs_1.default.rmSync(tmpDir, { recursive: true, force: true });
22
25
  });
23
26
  test('v18: creates injected_at index', () => {
24
27
  (0, schema_version_js_1.runMigrations)(db, migrations_v068_js_1.V068_MIGRATIONS);
@@ -1 +1 @@
1
- {"version":3,"file":"migrations-v068.test.js","sourceRoot":"","sources":["../../tests/migrations-v068.test.ts"],"names":[],"mappings":";AAAA,gEAAgE;;;;;AAGhE,gDAAwB;AACxB,4CAAoB;AACpB,4CAAoB;AACpB,2CAA6D;AAC7D,0EAAoE;AACpE,wEAAiE;AAEjE,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAI,EAAqB,CAAC;IAC1B,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,sBAAsB,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAE7E,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,GAAG,IAAA,kCAA0B,EAAC,MAAM,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,YAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAC1C,IAAA,iCAAa,EAAC,EAAE,EAAE,oCAAe,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CACxB,qFAAqF,CACtF,CAAC,GAAG,EAA6B,CAAC;QACnC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,4BAA4B,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC9B,IAAA,iCAAa,EAAC,EAAE,EAAE,oCAAe,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,iCAAa,EAAC,EAAE,EAAE,oCAAe,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACtD,gEAAgE;QAChE,EAAE,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QAC3D,MAAM,SAAS,GAAG;YAChB,oBAAoB,EAAE,sBAAsB;YAC5C,sBAAsB,EAAE,+BAA+B;YACvD,gCAAgC,EAAE,8BAA8B;YAChE,yBAAyB;SAC1B,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,EAAE,CAAC,IAAI,CAAC,+BAA+B,KAAK,4BAA4B,CAAC,CAAC;QAC5E,CAAC;QACD,IAAA,iCAAa,EAAC,EAAE,EAAE,oCAAe,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAC1B,kFAAkF,CACnF,CAAC,GAAG,EAA6B,CAAC;QACnC,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAClD,IAAA,iCAAa,EAAC,EAAE,EAAE,oCAAe,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,iCAAa,EAAC,EAAE,EAAE,oCAAe,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"migrations-v068.test.js","sourceRoot":"","sources":["../../tests/migrations-v068.test.ts"],"names":[],"mappings":";AAAA,gEAAgE;;;;;AAGhE,gDAAwB;AACxB,4CAAoB;AACpB,4CAAoB;AACpB,2CAA6D;AAC7D,0EAAoE;AACpE,wEAAiE;AAEjE,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAI,EAAqB,CAAC;IAC1B,IAAI,MAAc,CAAC;IACnB,IAAI,MAAc,CAAC;IAEnB,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,YAAE,CAAC,WAAW,CAAC,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC;QACvE,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACtC,EAAE,GAAG,IAAA,kCAA0B,EAAC,MAAM,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,YAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAC1C,IAAA,iCAAa,EAAC,EAAE,EAAE,oCAAe,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CACxB,qFAAqF,CACtF,CAAC,GAAG,EAA6B,CAAC;QACnC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,4BAA4B,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC9B,IAAA,iCAAa,EAAC,EAAE,EAAE,oCAAe,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,iCAAa,EAAC,EAAE,EAAE,oCAAe,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACtD,gEAAgE;QAChE,EAAE,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QAC3D,MAAM,SAAS,GAAG;YAChB,oBAAoB,EAAE,sBAAsB;YAC5C,sBAAsB,EAAE,+BAA+B;YACvD,gCAAgC,EAAE,8BAA8B;YAChE,yBAAyB;SAC1B,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,EAAE,CAAC,IAAI,CAAC,+BAA+B,KAAK,4BAA4B,CAAC,CAAC;QAC5E,CAAC;QACD,IAAA,iCAAa,EAAC,EAAE,EAAE,oCAAe,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAC1B,kFAAkF,CACnF,CAAC,GAAG,EAA6B,CAAC;QACnC,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAClD,IAAA,iCAAa,EAAC,EAAE,EAAE,oCAAe,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,iCAAa,EAAC,EAAE,EAAE,oCAAe,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -7,20 +7,20 @@ const path_1 = __importDefault(require("path"));
7
7
  const os_1 = __importDefault(require("os"));
8
8
  const fs_1 = __importDefault(require("fs"));
9
9
  const db_js_1 = require("./helpers/db.js");
10
- // NOT: createTestDbWithMigrations kullanılıyor (createTestDbWithFullSchema değil)
11
- // çünkü bu test v18 migration'a bağımlı değil. R5 (Task 16) sonrası
12
- // createTestDbWithFullSchema'ya geçiş opsiyonel.
13
10
  const { getNominationCounts } = require('../hooks/lib/mindlore-common.cjs');
14
11
  describe('getNominationCounts', () => {
15
12
  let db;
16
- const dbPath = path_1.default.join(os_1.default.tmpdir(), `mindlore-nom-counts-${Date.now()}.db`);
13
+ let tmpDir;
14
+ let dbPath;
17
15
  beforeEach(() => {
18
- db = (0, db_js_1.createTestDbWithMigrations)(dbPath);
16
+ tmpDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'mindlore-nom-counts-'));
17
+ dbPath = path_1.default.join(tmpDir, 'test.db');
18
+ db = (0, db_js_1.createTestDbWithFullSchema)(dbPath);
19
19
  });
20
20
  afterEach(() => {
21
21
  db.close();
22
22
  try {
23
- fs_1.default.unlinkSync(dbPath);
23
+ fs_1.default.rmSync(tmpDir, { recursive: true, force: true });
24
24
  }
25
25
  catch { }
26
26
  });
@@ -1 +1 @@
1
- {"version":3,"file":"nomination-counts.test.js","sourceRoot":"","sources":["../../tests/nomination-counts.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nomination-counts.test.js","sourceRoot":"","sources":["../../tests/nomination-counts.test.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const fs_1 = __importDefault(require("fs"));
7
7
  const path_1 = __importDefault(require("path"));
8
+ const os_1 = __importDefault(require("os"));
8
9
  const child_process_1 = require("child_process");
9
10
  const exec_js_1 = require("./helpers/exec.js");
10
11
  const HOOK_PATH = path_1.default.join(__dirname, '..', 'hooks', 'mindlore-pre-compact.cjs');
@@ -24,7 +25,7 @@ function runHook(cwd) {
24
25
  describe('mindlore-pre-compact hook', () => {
25
26
  let testDir;
26
27
  beforeEach(() => {
27
- testDir = path_1.default.join(__dirname, `.test-pre-compact-${Date.now()}`);
28
+ testDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'mindlore-pre-compact-'));
28
29
  const mindloreDir = path_1.default.join(testDir, '.mindlore');
29
30
  fs_1.default.mkdirSync(path_1.default.join(mindloreDir, 'episodes'), { recursive: true });
30
31
  fs_1.default.writeFileSync(path_1.default.join(mindloreDir, 'log.md'), '');
@@ -1 +1 @@
1
- {"version":3,"file":"pre-compact.test.js","sourceRoot":"","sources":["../../tests/pre-compact.test.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,iDAA6C;AAC7C,+CAAkD;AAElD,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,0BAA0B,CAAC,CAAC;AAElF,SAAS,OAAO,CAAC,GAAW;IAC1B,IAAI,CAAC;QACH,OAAO,IAAA,4BAAY,EAAC,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE;YACvC,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,KAAK;YACd,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE;YACrF,GAAG;SACJ,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,OAAO,IAAA,uBAAa,EAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,IAAI,OAAe,CAAC;IAEpB,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAClE,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACpD,YAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,YAAE,CAAC,aAAa,CAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,YAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACzD,OAAO,CAAC,OAAO,CAAC,CAAC;QACjB,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,YAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;QACpF,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACvC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"pre-compact.test.js","sourceRoot":"","sources":["../../tests/pre-compact.test.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AACpB,iDAA6C;AAC7C,+CAAkD;AAElD,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,0BAA0B,CAAC,CAAC;AAElF,SAAS,OAAO,CAAC,GAAW;IAC1B,IAAI,CAAC;QACH,OAAO,IAAA,4BAAY,EAAC,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE;YACvC,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,KAAK;YACd,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE;YACrF,GAAG;SACJ,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,OAAO,IAAA,uBAAa,EAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,IAAI,OAAe,CAAC;IAEpB,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,GAAG,YAAE,CAAC,WAAW,CAAC,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,uBAAuB,CAAC,CAAC,CAAC;QAC1E,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACpD,YAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,YAAE,CAAC,aAAa,CAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,YAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACzD,OAAO,CAAC,OAAO,CAAC,CAAC;QACjB,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,YAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;QACpF,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACvC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -12,22 +12,23 @@ const migrations_js_1 = require("../scripts/lib/migrations.js");
12
12
  const migrations_v052_js_1 = require("../scripts/lib/migrations-v052.js");
13
13
  const migrations_v053_js_1 = require("../scripts/lib/migrations-v053.js");
14
14
  describe('Recall Telemetry', () => {
15
- const tmpDir = path_1.default.join(os_1.default.tmpdir(), `mindlore-recall-${Date.now()}`);
16
- const dbPath = path_1.default.join(tmpDir, 'mindlore.db');
15
+ let tmpDir;
16
+ let dbPath;
17
17
  beforeEach(() => {
18
- fs_1.default.mkdirSync(tmpDir, { recursive: true });
18
+ tmpDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'mindlore-recall-'));
19
+ dbPath = path_1.default.join(tmpDir, 'mindlore.db');
19
20
  const db = new better_sqlite3_1.default(dbPath);
20
- db.exec(`
21
- CREATE TABLE IF NOT EXISTS file_hashes (path TEXT PRIMARY KEY, hash TEXT, last_indexed TEXT);
22
- CREATE VIRTUAL TABLE IF NOT EXISTS mindlore_fts USING fts5(
23
- path, slug, description, type, category, title, content, tags, quality, date_captured, project
24
- );
21
+ db.exec(`
22
+ CREATE TABLE IF NOT EXISTS file_hashes (path TEXT PRIMARY KEY, hash TEXT, last_indexed TEXT);
23
+ CREATE VIRTUAL TABLE IF NOT EXISTS mindlore_fts USING fts5(
24
+ path, slug, description, type, category, title, content, tags, quality, date_captured, project
25
+ );
25
26
  `);
26
27
  (0, schema_version_js_1.ensureSchemaTable)(db);
27
28
  (0, schema_version_js_1.runMigrations)(db, [...migrations_js_1.V050_MIGRATIONS, ...migrations_js_1.V051_MIGRATIONS, ...migrations_v052_js_1.V052_MIGRATIONS, ...migrations_v053_js_1.V053_MIGRATIONS]);
28
- db.exec(`
29
- INSERT INTO file_hashes (path, hash, last_indexed, recall_count, last_recalled_at)
30
- VALUES ('/test/file.md', 'abc123', '2026-01-01', 0, NULL);
29
+ db.exec(`
30
+ INSERT INTO file_hashes (path, hash, last_indexed, recall_count, last_recalled_at)
31
+ VALUES ('/test/file.md', 'abc123', '2026-01-01', 0, NULL);
31
32
  `);
32
33
  db.close();
33
34
  });
@@ -1 +1 @@
1
- {"version":3,"file":"recall-telemetry.test.js","sourceRoot":"","sources":["../../tests/recall-telemetry.test.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AACpB,oEAAsC;AACtC,wEAAoF;AACpF,gEAAgF;AAChF,0EAAoE;AACpE,0EAAoE;AAEpE,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,mBAAmB,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAEhD,UAAU,CAAC,GAAG,EAAE;QACd,YAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,MAAM,EAAE,GAAG,IAAI,wBAAQ,CAAC,MAAM,CAAC,CAAC;QAChC,EAAE,CAAC,IAAI,CAAC;;;;;KAKP,CAAC,CAAC;QACH,IAAA,qCAAiB,EAAC,EAAE,CAAC,CAAC;QACtB,IAAA,iCAAa,EAAC,EAAE,EAAE,CAAC,GAAG,+BAAe,EAAE,GAAG,+BAAe,EAAE,GAAG,oCAAe,EAAE,GAAG,oCAAe,CAAC,CAAC,CAAC;QACpG,EAAE,CAAC,IAAI,CAAC;;;KAGP,CAAC,CAAC;QACH,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE,CAAC,YAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAErE,IAAI,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAChF,MAAM,EAAE,GAAG,IAAI,wBAAQ,CAAC,MAAM,CAAC,CAAC;QAChC,MAAM,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC,kCAAkC,CAAC,CAAC;QAC7E,oBAAoB,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;QAC1C,iJAAiJ;QACjJ,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,uEAAuE,CAAC,CAAC,GAAG,CAAC,eAAe,CAA8D,CAAC;QAClL,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,UAAU,EAAE,CAAC;QAC1C,oBAAoB,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;QAC1C,iJAAiJ;QACjJ,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,qDAAqD,CAAC,CAAC,GAAG,CAAC,eAAe,CAA6B,CAAC;QAChI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClC,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uDAAuD,EAAE,GAAG,EAAE;QACjE,MAAM,EAAE,GAAG,IAAI,wBAAQ,CAAC,MAAM,CAAC,CAAC;QAChC,MAAM,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC,kCAAkC,CAAC,CAAC;QAC7E,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACxE,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"recall-telemetry.test.js","sourceRoot":"","sources":["../../tests/recall-telemetry.test.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AACpB,oEAAsC;AACtC,wEAAoF;AACpF,gEAAgF;AAChF,0EAAoE;AACpE,0EAAoE;AAEpE,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,IAAI,MAAc,CAAC;IACnB,IAAI,MAAc,CAAC;IAEnB,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,YAAE,CAAC,WAAW,CAAC,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC;QACpE,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAC1C,MAAM,EAAE,GAAG,IAAI,wBAAQ,CAAC,MAAM,CAAC,CAAC;QAChC,EAAE,CAAC,IAAI,CAAC;;;;;KAKP,CAAC,CAAC;QACH,IAAA,qCAAiB,EAAC,EAAE,CAAC,CAAC;QACtB,IAAA,iCAAa,EAAC,EAAE,EAAE,CAAC,GAAG,+BAAe,EAAE,GAAG,+BAAe,EAAE,GAAG,oCAAe,EAAE,GAAG,oCAAe,CAAC,CAAC,CAAC;QACpG,EAAE,CAAC,IAAI,CAAC;;;KAGP,CAAC,CAAC;QACH,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE,CAAC,YAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAErE,IAAI,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAChF,MAAM,EAAE,GAAG,IAAI,wBAAQ,CAAC,MAAM,CAAC,CAAC;QAChC,MAAM,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC,kCAAkC,CAAC,CAAC;QAC7E,oBAAoB,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;QAC1C,iJAAiJ;QACjJ,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,uEAAuE,CAAC,CAAC,GAAG,CAAC,eAAe,CAA8D,CAAC;QAClL,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,UAAU,EAAE,CAAC;QAC1C,oBAAoB,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;QAC1C,iJAAiJ;QACjJ,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,qDAAqD,CAAC,CAAC,GAAG,CAAC,eAAe,CAA6B,CAAC;QAChI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClC,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uDAAuD,EAAE,GAAG,EAAE;QACjE,MAAM,EAAE,GAAG,IAAI,wBAAQ,CAAC,MAAM,CAAC,CAAC;QAChC,MAAM,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC,kCAAkC,CAAC,CAAC;QAC7E,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACxE,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -70,7 +70,7 @@ describe('computeRRF', () => {
70
70
  describe('searchPorter + searchTrigram', () => {
71
71
  test('searchPorter returns ranked results from FTS5', () => {
72
72
  const dir = makeTmpDir();
73
- const db = (0, db_js_1.createTestDbWithMigrations)(path_1.default.join(dir, 'mindlore.db'));
73
+ const db = (0, db_js_1.createTestDbWithFullSchema)(path_1.default.join(dir, 'mindlore.db'));
74
74
  (0, db_js_1.insertFts)(db, {
75
75
  path: '/sources/ts.md',
76
76
  slug: 'typescript-guide',
@@ -89,7 +89,7 @@ describe('searchPorter + searchTrigram', () => {
89
89
  });
90
90
  test('searchTrigram returns results from trigram table', () => {
91
91
  const dir = makeTmpDir();
92
- const db = (0, db_js_1.createTestDbWithMigrations)(path_1.default.join(dir, 'mindlore.db'));
92
+ const db = (0, db_js_1.createTestDbWithFullSchema)(path_1.default.join(dir, 'mindlore.db'));
93
93
  (0, db_js_1.insertFts)(db, {
94
94
  path: '/sources/ts.md',
95
95
  slug: 'typescript-guide',
@@ -106,7 +106,7 @@ describe('searchPorter + searchTrigram', () => {
106
106
  });
107
107
  test('searchPorter returns empty for no match', () => {
108
108
  const dir = makeTmpDir();
109
- const db = (0, db_js_1.createTestDbWithMigrations)(path_1.default.join(dir, 'mindlore.db'));
109
+ const db = (0, db_js_1.createTestDbWithFullSchema)(path_1.default.join(dir, 'mindlore.db'));
110
110
  const results = (0, rrf_js_1.searchPorter)(db, { query: 'nonexistentxyz', limit: 5 });
111
111
  expect(results).toEqual([]);
112
112
  cleanup(dir, db);
@@ -19,7 +19,7 @@ function cleanup(dir, db) {
19
19
  fs_1.default.rmSync(dir, { recursive: true, force: true });
20
20
  }
21
21
  function seedDb(dbPath) {
22
- const db = (0, db_js_1.createTestDbWithMigrations)(dbPath);
22
+ const db = (0, db_js_1.createTestDbWithFullSchema)(dbPath);
23
23
  (0, db_js_1.insertFts)(db, {
24
24
  path: '/sources/typescript.md',
25
25
  slug: 'typescript',
@@ -78,8 +78,8 @@ describe('Search Hook — FTS5 Query', () => {
78
78
  function queryFts(query) {
79
79
  const db = new better_sqlite3_1.default(DB_PATH, { readonly: true });
80
80
  try {
81
- return (0, db_helpers_js_1.dbAll)(db, `SELECT path, rank FROM mindlore_fts
82
- WHERE mindlore_fts MATCH ?
81
+ return (0, db_helpers_js_1.dbAll)(db, `SELECT path, rank FROM mindlore_fts
82
+ WHERE mindlore_fts MATCH ?
83
83
  ORDER BY rank LIMIT 3`, query);
84
84
  }
85
85
  finally {
@@ -7,7 +7,7 @@ const fs_1 = __importDefault(require("fs"));
7
7
  const path_1 = __importDefault(require("path"));
8
8
  const os_1 = __importDefault(require("os"));
9
9
  describe('search hook offload+pointer', () => {
10
- const tmpDir = path_1.default.join(os_1.default.tmpdir(), 'mindlore-offload-' + Date.now());
10
+ const tmpDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'mindlore-offload-'));
11
11
  const mindloreDir = path_1.default.join(tmpDir, '.mindlore');
12
12
  const tmpSubDir = path_1.default.join(mindloreDir, 'tmp');
13
13
  beforeEach(() => { fs_1.default.mkdirSync(tmpSubDir, { recursive: true }); });
@@ -1 +1 @@
1
- {"version":3,"file":"search-offload.test.js","sourceRoot":"","sources":["../../tests/search-offload.test.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AAEpB,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,mBAAmB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACxE,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAEhD,UAAU,CAAC,GAAG,EAAE,GAAG,YAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,SAAS,CAAC,GAAG,EAAE,GAAG,YAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE1E,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;QACjE,YAAE,CAAC,aAAa,CAAC,UAAU,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QAEnD,uCAAuC;QACvC,MAAM,IAAI,GAAG,YAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE7C,wBAAwB;QACxB,MAAM,OAAO,GAAG,qBAAqB,YAAY,CAAC,MAAM,uBAAuB,UAAU,eAAe,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,4BAA4B,UAAU,GAAG,CAAC;QACnL,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC1C,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtC,uCAAuC;QACvC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"search-offload.test.js","sourceRoot":"","sources":["../../tests/search-offload.test.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AAEpB,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,MAAM,MAAM,GAAG,YAAE,CAAC,WAAW,CAAC,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAC3E,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAEhD,UAAU,CAAC,GAAG,EAAE,GAAG,YAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,SAAS,CAAC,GAAG,EAAE,GAAG,YAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE1E,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;QACjE,YAAE,CAAC,aAAa,CAAC,UAAU,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QAEnD,uCAAuC;QACvC,MAAM,IAAI,GAAG,YAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE7C,wBAAwB;QACxB,MAAM,OAAO,GAAG,qBAAqB,YAAY,CAAC,MAAM,uBAAuB,UAAU,eAAe,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,4BAA4B,UAAU,GAAG,CAAC;QACnL,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC1C,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtC,uCAAuC;QACvC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=secure-io.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secure-io.test.d.ts","sourceRoot":"","sources":["../../tests/secure-io.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,65 @@
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 secure_io_js_1 = require("../scripts/lib/secure-io.js");
10
+ describe('secure-io', () => {
11
+ let tmpDir;
12
+ beforeEach(() => {
13
+ tmpDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'mindlore-secio-'));
14
+ });
15
+ afterEach(() => {
16
+ fs_1.default.rmSync(tmpDir, { recursive: true, force: true });
17
+ });
18
+ describe('safeMkdir', () => {
19
+ it('creates directory with 0o700 permissions', () => {
20
+ const dir = path_1.default.join(tmpDir, 'subdir');
21
+ (0, secure_io_js_1.safeMkdir)(dir);
22
+ expect(fs_1.default.existsSync(dir)).toBe(true);
23
+ if (process.platform !== 'win32') {
24
+ const mode = fs_1.default.statSync(dir).mode & 0o777;
25
+ expect(mode).toBe(0o700);
26
+ }
27
+ });
28
+ it('is idempotent — does not throw on existing dir', () => {
29
+ const dir = path_1.default.join(tmpDir, 'subdir');
30
+ (0, secure_io_js_1.safeMkdir)(dir);
31
+ expect(() => (0, secure_io_js_1.safeMkdir)(dir)).not.toThrow();
32
+ });
33
+ it('creates nested directories', () => {
34
+ const dir = path_1.default.join(tmpDir, 'a', 'b', 'c');
35
+ (0, secure_io_js_1.safeMkdir)(dir);
36
+ expect(fs_1.default.existsSync(dir)).toBe(true);
37
+ });
38
+ });
39
+ describe('safeWriteFile', () => {
40
+ it('writes file with 0o600 permissions', () => {
41
+ const fp = path_1.default.join(tmpDir, 'test.txt');
42
+ (0, secure_io_js_1.safeWriteFile)(fp, 'hello');
43
+ expect(fs_1.default.readFileSync(fp, 'utf8')).toBe('hello');
44
+ if (process.platform !== 'win32') {
45
+ const mode = fs_1.default.statSync(fp).mode & 0o777;
46
+ expect(mode).toBe(0o600);
47
+ }
48
+ });
49
+ it('overwrites existing file', () => {
50
+ const fp = path_1.default.join(tmpDir, 'test.txt');
51
+ (0, secure_io_js_1.safeWriteFile)(fp, 'first');
52
+ (0, secure_io_js_1.safeWriteFile)(fp, 'second');
53
+ expect(fs_1.default.readFileSync(fp, 'utf8')).toBe('second');
54
+ });
55
+ });
56
+ describe('safeWriteJson', () => {
57
+ it('writes JSON with trailing newline', () => {
58
+ const fp = path_1.default.join(tmpDir, 'data.json');
59
+ (0, secure_io_js_1.safeWriteJson)(fp, { key: 'value' });
60
+ const content = fs_1.default.readFileSync(fp, 'utf8');
61
+ expect(content).toBe('{\n "key": "value"\n}\n');
62
+ });
63
+ });
64
+ });
65
+ //# sourceMappingURL=secure-io.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secure-io.test.js","sourceRoot":"","sources":["../../tests/secure-io.test.ts"],"names":[],"mappings":"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"}