mindlore 0.7.6 → 0.7.7

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 (148) hide show
  1. package/.claude-plugin/marketplace.json +3 -3
  2. package/.claude-plugin/plugin.json +2 -2
  3. package/README.md +3 -1
  4. package/dist/scripts/bundle-hooks.js +5 -1
  5. package/dist/scripts/bundle-hooks.js.map +1 -1
  6. package/dist/scripts/init.js +49 -10
  7. package/dist/scripts/init.js.map +1 -1
  8. package/dist/scripts/lib/constants.d.ts +8 -0
  9. package/dist/scripts/lib/constants.d.ts.map +1 -1
  10. package/dist/scripts/lib/constants.js +9 -1
  11. package/dist/scripts/lib/constants.js.map +1 -1
  12. package/dist/scripts/lib/db-helpers.d.ts +6 -0
  13. package/dist/scripts/lib/db-helpers.d.ts.map +1 -1
  14. package/dist/scripts/lib/db-helpers.js +6 -0
  15. package/dist/scripts/lib/db-helpers.js.map +1 -1
  16. package/dist/scripts/lib/read-guard-core.d.ts +21 -0
  17. package/dist/scripts/lib/read-guard-core.d.ts.map +1 -0
  18. package/dist/scripts/lib/read-guard-core.js +40 -0
  19. package/dist/scripts/lib/read-guard-core.js.map +1 -0
  20. package/dist/scripts/lib/search-cache.d.ts +1 -7
  21. package/dist/scripts/lib/search-cache.d.ts.map +1 -1
  22. package/dist/scripts/lib/search-cache.js +3 -25
  23. package/dist/scripts/lib/search-cache.js.map +1 -1
  24. package/dist/scripts/lib/search-throttle.d.ts +10 -0
  25. package/dist/scripts/lib/search-throttle.d.ts.map +1 -0
  26. package/dist/scripts/lib/search-throttle.js +32 -0
  27. package/dist/scripts/lib/search-throttle.js.map +1 -0
  28. package/dist/scripts/lib/settings-cleanup.d.ts.map +1 -1
  29. package/dist/scripts/lib/settings-cleanup.js +2 -1
  30. package/dist/scripts/lib/settings-cleanup.js.map +1 -1
  31. package/dist/scripts/lib/setup-wizard.d.ts +13 -0
  32. package/dist/scripts/lib/setup-wizard.d.ts.map +1 -0
  33. package/dist/scripts/lib/setup-wizard.js +51 -0
  34. package/dist/scripts/lib/setup-wizard.js.map +1 -0
  35. package/dist/scripts/lib/tool-adapters/decide-adapter.d.ts.map +1 -1
  36. package/dist/scripts/lib/tool-adapters/decide-adapter.js +3 -3
  37. package/dist/scripts/lib/tool-adapters/decide-adapter.js.map +1 -1
  38. package/dist/scripts/lib/tool-adapters/get-adapter.d.ts.map +1 -1
  39. package/dist/scripts/lib/tool-adapters/get-adapter.js +10 -2
  40. package/dist/scripts/lib/tool-adapters/get-adapter.js.map +1 -1
  41. package/dist/scripts/lib/tool-adapters/ingest-adapter.d.ts.map +1 -1
  42. package/dist/scripts/lib/tool-adapters/ingest-adapter.js +3 -3
  43. package/dist/scripts/lib/tool-adapters/ingest-adapter.js.map +1 -1
  44. package/dist/scripts/lib/transcript-token-estimator.d.ts +8 -0
  45. package/dist/scripts/lib/transcript-token-estimator.d.ts.map +1 -0
  46. package/dist/scripts/lib/transcript-token-estimator.js +164 -0
  47. package/dist/scripts/lib/transcript-token-estimator.js.map +1 -0
  48. package/dist/scripts/maintain-cleanup.d.ts.map +1 -1
  49. package/dist/scripts/maintain-cleanup.js +2 -1
  50. package/dist/scripts/maintain-cleanup.js.map +1 -1
  51. package/dist/scripts/mcp-server.js +3 -3
  52. package/dist/scripts/mcp-server.js.map +1 -1
  53. package/dist/scripts/mindlore-backup.d.ts.map +1 -1
  54. package/dist/scripts/mindlore-backup.js +3 -2
  55. package/dist/scripts/mindlore-backup.js.map +1 -1
  56. package/dist/scripts/mindlore-clean-cache.d.ts +4 -1
  57. package/dist/scripts/mindlore-clean-cache.d.ts.map +1 -1
  58. package/dist/scripts/mindlore-clean-cache.js +47 -20
  59. package/dist/scripts/mindlore-clean-cache.js.map +1 -1
  60. package/dist/scripts/mindlore-doctor.d.ts +4 -0
  61. package/dist/scripts/mindlore-doctor.d.ts.map +1 -1
  62. package/dist/scripts/mindlore-doctor.js +9 -1
  63. package/dist/scripts/mindlore-doctor.js.map +1 -1
  64. package/dist/scripts/mindlore-health-check.d.ts +7 -0
  65. package/dist/scripts/mindlore-health-check.d.ts.map +1 -1
  66. package/dist/scripts/mindlore-health-check.js +57 -4
  67. package/dist/scripts/mindlore-health-check.js.map +1 -1
  68. package/dist/scripts/mindlore-learnings.d.ts +6 -0
  69. package/dist/scripts/mindlore-learnings.d.ts.map +1 -0
  70. package/dist/scripts/mindlore-learnings.js +106 -0
  71. package/dist/scripts/mindlore-learnings.js.map +1 -0
  72. package/dist/scripts/mindlore-obsidian.js +6 -5
  73. package/dist/scripts/mindlore-obsidian.js.map +1 -1
  74. package/dist/scripts/quality-populate.js +2 -1
  75. package/dist/scripts/quality-populate.js.map +1 -1
  76. package/dist/scripts/uninstall.js +2 -1
  77. package/dist/scripts/uninstall.js.map +1 -1
  78. package/dist/tests/clean-cache-eperm.test.d.ts +2 -0
  79. package/dist/tests/clean-cache-eperm.test.d.ts.map +1 -0
  80. package/dist/tests/clean-cache-eperm.test.js +74 -0
  81. package/dist/tests/clean-cache-eperm.test.js.map +1 -0
  82. package/dist/tests/doctor.test.js +18 -0
  83. package/dist/tests/doctor.test.js.map +1 -1
  84. package/dist/tests/health-check.test.d.ts +2 -0
  85. package/dist/tests/health-check.test.d.ts.map +1 -0
  86. package/dist/tests/health-check.test.js +61 -0
  87. package/dist/tests/health-check.test.js.map +1 -0
  88. package/dist/tests/helpers/db.d.ts +7 -2
  89. package/dist/tests/helpers/db.d.ts.map +1 -1
  90. package/dist/tests/helpers/db.js +16 -14
  91. package/dist/tests/helpers/db.js.map +1 -1
  92. package/dist/tests/mindlore-ingest-extraction.test.d.ts +2 -0
  93. package/dist/tests/mindlore-ingest-extraction.test.d.ts.map +1 -0
  94. package/dist/tests/mindlore-ingest-extraction.test.js +48 -0
  95. package/dist/tests/mindlore-ingest-extraction.test.js.map +1 -0
  96. package/dist/tests/mindlore-learnings.test.d.ts +2 -0
  97. package/dist/tests/mindlore-learnings.test.d.ts.map +1 -0
  98. package/dist/tests/mindlore-learnings.test.js +63 -0
  99. package/dist/tests/mindlore-learnings.test.js.map +1 -0
  100. package/dist/tests/read-guard-perf.test.d.ts +2 -0
  101. package/dist/tests/read-guard-perf.test.d.ts.map +1 -0
  102. package/dist/tests/read-guard-perf.test.js +31 -0
  103. package/dist/tests/read-guard-perf.test.js.map +1 -0
  104. package/dist/tests/reflect-trigger.test.js +8 -1
  105. package/dist/tests/reflect-trigger.test.js.map +1 -1
  106. package/dist/tests/search-cache.test.js +0 -35
  107. package/dist/tests/search-cache.test.js.map +1 -1
  108. package/dist/tests/search-throttle.test.d.ts +2 -0
  109. package/dist/tests/search-throttle.test.d.ts.map +1 -0
  110. package/dist/tests/search-throttle.test.js +53 -0
  111. package/dist/tests/search-throttle.test.js.map +1 -0
  112. package/dist/tests/session-focus-reflect-nudge.test.js +3 -3
  113. package/dist/tests/session-focus-reflect-nudge.test.js.map +1 -1
  114. package/dist/tests/setup-wizard.test.d.ts +2 -0
  115. package/dist/tests/setup-wizard.test.d.ts.map +1 -0
  116. package/dist/tests/setup-wizard.test.js +35 -0
  117. package/dist/tests/setup-wizard.test.js.map +1 -0
  118. package/dist/tests/transcript-token-estimator.test.d.ts +2 -0
  119. package/dist/tests/transcript-token-estimator.test.d.ts.map +1 -0
  120. package/dist/tests/transcript-token-estimator.test.js +122 -0
  121. package/dist/tests/transcript-token-estimator.test.js.map +1 -0
  122. package/hooks/cc-memory-bulk-sync.cjs +9 -1
  123. package/hooks/cc-session-sync.cjs +9 -1
  124. package/hooks/lib/learnings-loader.cjs +21 -11
  125. package/hooks/lib/reflect-trigger.cjs +6 -3
  126. package/hooks/mindlore-cwd-changed.cjs +4 -5
  127. package/hooks/mindlore-dont-repeat.cjs +2 -1
  128. package/hooks/mindlore-post-read.cjs +2 -1
  129. package/hooks/mindlore-pre-compact.cjs +3 -2
  130. package/hooks/mindlore-read-guard.cjs +62 -35
  131. package/hooks/mindlore-search.cjs +231 -31
  132. package/hooks/mindlore-session-end.cjs +6 -8
  133. package/hooks/mindlore-session-focus.cjs +472 -23
  134. package/hooks/src/mindlore-cwd-changed.cjs +4 -5
  135. package/hooks/src/mindlore-dont-repeat.cjs +2 -1
  136. package/hooks/src/mindlore-post-read.cjs +2 -1
  137. package/hooks/src/mindlore-pre-compact.cjs +3 -2
  138. package/hooks/src/mindlore-read-guard.cjs +15 -55
  139. package/hooks/src/mindlore-search.cjs +39 -10
  140. package/hooks/src/mindlore-session-end.cjs +6 -8
  141. package/hooks/src/mindlore-session-focus.cjs +29 -21
  142. package/mcp-server.cjs +41 -25
  143. package/package.json +1 -1
  144. package/plugin.json +6 -1
  145. package/skills/mindlore-ingest/SKILL.md +21 -0
  146. package/skills/mindlore-learnings/SKILL.md +30 -0
  147. package/start.cjs +1 -1
  148. package/templates/config.json +1 -1
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const fs = __importStar(require("fs"));
37
+ const path = __importStar(require("path"));
38
+ describe('ingest SKILL.md type-aware extraction (docs-presence)', () => {
39
+ const skillPath = path.join(__dirname, '..', 'skills', 'mindlore-ingest', 'SKILL.md');
40
+ const content = fs.readFileSync(skillPath, 'utf8');
41
+ it('documents github-repo template fields', () => {
42
+ expect(content).toMatch(/### github-repo[\s\S]*Tech Stack[\s\S]*Key Features[\s\S]*Setup[\s\S]*License/);
43
+ });
44
+ it('documents cc-session template fields', () => {
45
+ expect(content).toMatch(/### cc-session[\s\S]*Decisions[\s\S]*Patterns[\s\S]*Actionable Items[\s\S]*Open Questions/);
46
+ });
47
+ });
48
+ //# sourceMappingURL=mindlore-ingest-extraction.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mindlore-ingest-extraction.test.js","sourceRoot":"","sources":["../../tests/mindlore-ingest-extraction.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAE7B,QAAQ,CAAC,uDAAuD,EAAE,GAAG,EAAE;IACrE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,iBAAiB,EAAE,UAAU,CAAC,CAAC;IACtF,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAEnD,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,+EAA+E,CAAC,CAAC;IAC3G,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,2FAA2F,CAAC,CAAC;IACvH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mindlore-learnings.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mindlore-learnings.test.d.ts","sourceRoot":"","sources":["../../tests/mindlore-learnings.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const globals_1 = require("@jest/globals");
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const os = __importStar(require("os"));
40
+ const mindlore_learnings_1 = require("../scripts/mindlore-learnings");
41
+ (0, globals_1.describe)('mindlore-learnings', () => {
42
+ let tmp;
43
+ beforeEach(() => {
44
+ tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'mll-'));
45
+ fs.mkdirSync(path.join(tmp, 'learnings'));
46
+ fs.writeFileSync(path.join(tmp, 'learnings', 'dev-patterns-2026-04.md'), '# Dev Patterns\nLine 2\nLine 3\nLine 4\nLine 5\nLine 6\nLine 7');
47
+ });
48
+ afterEach(() => { fs.rmSync(tmp, { recursive: true, force: true }); });
49
+ (0, globals_1.it)('returns full content for existing slug', () => {
50
+ const out = (0, mindlore_learnings_1.showLearning)(tmp, 'dev-patterns-2026-04');
51
+ (0, globals_1.expect)(out).toContain('Line 7');
52
+ (0, globals_1.expect)(out).toContain('# Dev Patterns');
53
+ });
54
+ (0, globals_1.it)('returns closest match for missing slug', () => {
55
+ (0, globals_1.expect)(() => (0, mindlore_learnings_1.showLearning)(tmp, 'dev-patrn')).toThrow(/closest match.*dev-patterns-2026-04/);
56
+ });
57
+ (0, globals_1.it)('lists all learnings with first line', () => {
58
+ const list = (0, mindlore_learnings_1.listLearnings)(tmp);
59
+ (0, globals_1.expect)(list).toHaveLength(1);
60
+ (0, globals_1.expect)(list[0]).toEqual({ slug: 'dev-patterns-2026-04', firstLine: '# Dev Patterns' });
61
+ });
62
+ });
63
+ //# sourceMappingURL=mindlore-learnings.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mindlore-learnings.test.js","sourceRoot":"","sources":["../../tests/mindlore-learnings.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAqD;AACrD,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AACzB,sEAA4E;AAE5E,IAAA,kBAAQ,EAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,IAAI,GAAW,CAAC;IAChB,UAAU,CAAC,GAAG,EAAE;QACd,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QACrD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC;QAC1C,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,yBAAyB,CAAC,EAAE,gEAAgE,CAAC,CAAC;IAC7I,CAAC,CAAC,CAAC;IACH,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvE,IAAA,YAAE,EAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,GAAG,GAAG,IAAA,iCAAY,EAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;QACtD,IAAA,gBAAM,EAAC,GAAG,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAChC,IAAA,gBAAM,EAAC,GAAG,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,IAAA,YAAE,EAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,IAAA,gBAAM,EAAC,GAAG,EAAE,CAAC,IAAA,iCAAY,EAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IAEH,IAAA,YAAE,EAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,IAAI,GAAG,IAAA,kCAAa,EAAC,GAAG,CAAC,CAAC;QAChC,IAAA,gBAAM,EAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAA,gBAAM,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACzF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=read-guard-perf.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-guard-perf.test.d.ts","sourceRoot":"","sources":["../../tests/read-guard-perf.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const globals_1 = require("@jest/globals");
4
+ const read_guard_core_1 = require("../scripts/lib/read-guard-core");
5
+ (0, globals_1.describe)('read-guard performance', () => {
6
+ (0, globals_1.it)('completes within 30ms budget for cached path', () => {
7
+ const input = { filePath: '/tmp/test-read.txt', basename: 'test-read.txt' };
8
+ const reads = {};
9
+ (0, read_guard_core_1.runReadGuard)(input, reads);
10
+ const start = Date.now();
11
+ (0, read_guard_core_1.runReadGuard)(input, reads);
12
+ const elapsed = Date.now() - start;
13
+ (0, globals_1.expect)(elapsed).toBeLessThan(30);
14
+ });
15
+ (0, globals_1.it)('blocks on 3rd read', () => {
16
+ const input = { filePath: '/tmp/test-read.txt', basename: 'test-read.txt' };
17
+ const reads = {};
18
+ (0, read_guard_core_1.runReadGuard)(input, reads);
19
+ (0, read_guard_core_1.runReadGuard)(input, reads);
20
+ const decision = (0, read_guard_core_1.runReadGuard)(input, reads);
21
+ (0, globals_1.expect)(decision.block).toBe(true);
22
+ });
23
+ (0, globals_1.it)('warns on 2nd read', () => {
24
+ const input = { filePath: '/tmp/test-read.txt', basename: 'test-read.txt' };
25
+ const reads = {};
26
+ (0, read_guard_core_1.runReadGuard)(input, reads);
27
+ const decision = (0, read_guard_core_1.runReadGuard)(input, reads);
28
+ (0, globals_1.expect)(decision.additionalContext).toContain('2. kez okunuyor');
29
+ });
30
+ });
31
+ //# sourceMappingURL=read-guard-perf.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-guard-perf.test.js","sourceRoot":"","sources":["../../tests/read-guard-perf.test.ts"],"names":[],"mappings":";;AAAA,2CAAqD;AACrD,oEAA8D;AAE9D,IAAA,kBAAQ,EAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,IAAA,YAAE,EAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,KAAK,GAAG,EAAE,QAAQ,EAAE,oBAAoB,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;QAC5E,MAAM,KAAK,GAAiF,EAAE,CAAC;QAC/F,IAAA,8BAAY,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAA,8BAAY,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACnC,IAAA,gBAAM,EAAC,OAAO,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,IAAA,YAAE,EAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,MAAM,KAAK,GAAG,EAAE,QAAQ,EAAE,oBAAoB,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;QAC5E,MAAM,KAAK,GAAiF,EAAE,CAAC;QAC/F,IAAA,8BAAY,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3B,IAAA,8BAAY,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAA,8BAAY,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC5C,IAAA,gBAAM,EAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,IAAA,YAAE,EAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,MAAM,KAAK,GAAG,EAAE,QAAQ,EAAE,oBAAoB,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;QAC5E,MAAM,KAAK,GAAiF,EAAE,CAAC;QAC/F,IAAA,8BAAY,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAA,8BAAY,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC5C,IAAA,gBAAM,EAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const { shouldNudgeReflect } = require('../hooks/lib/reflect-trigger.cjs');
3
+ const { shouldNudgeReflect, buildNudgeMessage } = require('../hooks/lib/reflect-trigger.cjs');
4
4
  const now = new Date('2026-05-15T12:00:00Z');
5
5
  const daysAgo = (n) => new Date(now.getTime() - n * 86400000).toISOString();
6
6
  const hoursAgo = (n) => new Date(now.getTime() - n * 3600000).toISOString();
@@ -28,4 +28,11 @@ test('returns false for invalid reflect date string', () => {
28
28
  test('handles invalid nudge date gracefully (ignored, falls through to reflect check)', () => {
29
29
  expect(shouldNudgeReflect(daysAgo(8), 'invalid', now)).toBe(true);
30
30
  });
31
+ test('buildNudgeMessage includes days, episodes, diary, and command', () => {
32
+ const msg = buildNudgeMessage({ daysSince: 9, episodeCount: 42, diaryCount: 15 });
33
+ expect(msg).toContain('9 gün');
34
+ expect(msg).toContain('42');
35
+ expect(msg).toContain('15');
36
+ expect(msg).toContain('/mindlore-reflect');
37
+ });
31
38
  //# sourceMappingURL=reflect-trigger.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reflect-trigger.test.js","sourceRoot":"","sources":["../../tests/reflect-trigger.test.ts"],"names":[],"mappings":";;AAAA,MAAM,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,kCAAkC,CAAC,CAAC;AAE3E,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAC7C,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;AACpF,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;AAEpF,IAAI,CAAC,2DAA2D,EAAE,GAAG,EAAE;IACrE,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2DAA2D,EAAE,GAAG,EAAE;IACrE,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/D,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2EAA2E,EAAE,GAAG,EAAE;IACrF,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mFAAmF,EAAE,GAAG,EAAE;IAC7F,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+DAA+D,EAAE,GAAG,EAAE;IACzE,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kDAAkD,EAAE,GAAG,EAAE;IAC5D,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/D,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+CAA+C,EAAE,GAAG,EAAE;IACzD,MAAM,CAAC,kBAAkB,CAAC,YAAY,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iFAAiF,EAAE,GAAG,EAAE;IAC3F,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpE,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"reflect-trigger.test.js","sourceRoot":"","sources":["../../tests/reflect-trigger.test.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,6 @@ const search_cache_js_1 = require("../scripts/lib/search-cache.js");
11
11
  const migrations_v063_js_1 = require("../scripts/lib/migrations-v063.js");
12
12
  function setupCacheTables(db) {
13
13
  db.exec(migrations_v063_js_1.SQL_SEARCH_CACHE_CREATE);
14
- db.exec(migrations_v063_js_1.SQL_SEARCH_THROTTLE_CREATE);
15
14
  }
16
15
  describe('TTL Cache', () => {
17
16
  let db;
@@ -90,38 +89,4 @@ describe('SearchCache hit rate', () => {
90
89
  expect(cache.getStats()).toEqual({ hits: 0, misses: 0, hitRate: 0 });
91
90
  });
92
91
  });
93
- describe('Progressive Throttling', () => {
94
- let db;
95
- let tmpDir;
96
- beforeEach(() => {
97
- tmpDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'mindlore-throttle-'));
98
- db = new better_sqlite3_1.default(path_1.default.join(tmpDir, 'test.db'));
99
- db.pragma('journal_mode = WAL');
100
- setupCacheTables(db);
101
- });
102
- afterEach(() => {
103
- db.close();
104
- fs_1.default.rmSync(tmpDir, { recursive: true, force: true });
105
- });
106
- test('returns 3 results for calls 1-10', () => {
107
- const throttle = new search_cache_js_1.SearchThrottle(db);
108
- expect(throttle.getMaxResults(1)).toBe(3);
109
- expect(throttle.getMaxResults(10)).toBe(3);
110
- });
111
- test('returns 1 result for calls 11-20', () => {
112
- const throttle = new search_cache_js_1.SearchThrottle(db);
113
- expect(throttle.getMaxResults(11)).toBe(1);
114
- expect(throttle.getMaxResults(20)).toBe(1);
115
- });
116
- test('returns 0 for calls 21+', () => {
117
- const throttle = new search_cache_js_1.SearchThrottle(db);
118
- expect(throttle.getMaxResults(21)).toBe(0);
119
- });
120
- test('incrementCallCount tracks per session', () => {
121
- const throttle = new search_cache_js_1.SearchThrottle(db);
122
- expect(throttle.incrementCallCount('sess-1')).toBe(1);
123
- expect(throttle.incrementCallCount('sess-1')).toBe(2);
124
- expect(throttle.incrementCallCount('sess-2')).toBe(1);
125
- });
126
- });
127
92
  //# sourceMappingURL=search-cache.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"search-cache.test.js","sourceRoot":"","sources":["../../tests/search-cache.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search-cache.test.js","sourceRoot":"","sources":["../../tests/search-cache.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=search-throttle.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-throttle.test.d.ts","sourceRoot":"","sources":["../../tests/search-throttle.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,53 @@
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 better_sqlite3_1 = __importDefault(require("better-sqlite3"));
10
+ const search_throttle_js_1 = require("../scripts/lib/search-throttle.js");
11
+ const migrations_v063_js_1 = require("../scripts/lib/migrations-v063.js");
12
+ function setupThrottleTable(db) {
13
+ db.exec(migrations_v063_js_1.SQL_SEARCH_THROTTLE_CREATE);
14
+ }
15
+ describe('SearchThrottle', () => {
16
+ let db;
17
+ let tmpDir;
18
+ beforeEach(() => {
19
+ tmpDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'mindlore-throttle-'));
20
+ db = new better_sqlite3_1.default(path_1.default.join(tmpDir, 'test.db'));
21
+ db.pragma('journal_mode = WAL');
22
+ setupThrottleTable(db);
23
+ });
24
+ afterEach(() => {
25
+ db.close();
26
+ fs_1.default.rmSync(tmpDir, { recursive: true, force: true });
27
+ });
28
+ it('allows first request', () => {
29
+ const throttle = new search_throttle_js_1.SearchThrottle(db);
30
+ expect(throttle.incrementCallCount('q1')).toBe(1);
31
+ });
32
+ it('blocks duplicate within window (call count caps)', () => {
33
+ const throttle = new search_throttle_js_1.SearchThrottle(db);
34
+ throttle.incrementCallCount('q1');
35
+ expect(throttle.getMaxResults(5)).toBe(3);
36
+ expect(throttle.getMaxResults(15)).toBe(1);
37
+ expect(throttle.getMaxResults(25)).toBe(0);
38
+ });
39
+ it('honors baseMax under throttle threshold (adaptive expansion)', () => {
40
+ const throttle = new search_throttle_js_1.SearchThrottle(db);
41
+ expect(throttle.getMaxResults(5, 5)).toBe(5);
42
+ expect(throttle.getMaxResults(5, 2)).toBe(2);
43
+ expect(throttle.getMaxResults(15, 5)).toBe(1);
44
+ expect(throttle.getMaxResults(25, 5)).toBe(0);
45
+ });
46
+ it('tracks per session', () => {
47
+ const throttle = new search_throttle_js_1.SearchThrottle(db);
48
+ expect(throttle.incrementCallCount('sess-1')).toBe(1);
49
+ expect(throttle.incrementCallCount('sess-1')).toBe(2);
50
+ expect(throttle.incrementCallCount('sess-2')).toBe(1);
51
+ });
52
+ });
53
+ //# sourceMappingURL=search-throttle.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-throttle.test.js","sourceRoot":"","sources":["../../tests/search-throttle.test.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,4CAAoB;AACpB,gDAAwB;AACxB,oEAAsC;AACtC,0EAAmE;AACnE,0EAA+E;AAE/E,SAAS,kBAAkB,CAAC,EAAqB;IAC/C,EAAE,CAAC,IAAI,CAAC,+CAA0B,CAAC,CAAC;AACtC,CAAC;AAED,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAI,EAAqB,CAAC;IAC1B,IAAI,MAAc,CAAC;IAEnB,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,YAAE,CAAC,WAAW,CAAC,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,oBAAoB,CAAC,CAAC,CAAC;QACtE,EAAE,GAAG,IAAI,wBAAQ,CAAC,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;QAChD,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAChC,kBAAkB,CAAC,EAAE,CAAC,CAAC;IACzB,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,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,QAAQ,GAAG,IAAI,mCAAc,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,QAAQ,GAAG,IAAI,mCAAc,CAAC,EAAE,CAAC,CAAC;QACxC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,QAAQ,GAAG,IAAI,mCAAc,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,MAAM,QAAQ,GAAG,IAAI,mCAAc,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtD,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtD,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -40,15 +40,15 @@ function runHook() {
40
40
  }
41
41
  test('session-focus injects nudge when 7+ days passed and no recent nudge', () => {
42
42
  setupDb(8, null);
43
- expect(runHook().stdout).toContain('7+ gün reflect yapılmadı');
43
+ expect(runHook().stdout).toContain('Son reflect');
44
44
  });
45
45
  test('session-focus suppresses nudge during 24h cooldown', () => {
46
46
  setupDb(8, 2);
47
- expect(runHook().stdout).not.toContain('7+ gün reflect yapılmadı');
47
+ expect(runHook().stdout).not.toContain('Son reflect');
48
48
  });
49
49
  test('session-focus no nudge when reflect was recent (5 days)', () => {
50
50
  setupDb(5, null);
51
- expect(runHook().stdout).not.toContain('7+ gün reflect yapılmadı');
51
+ expect(runHook().stdout).not.toContain('Son reflect');
52
52
  });
53
53
  test('session-focus writes last_nudge_date after injecting nudge', () => {
54
54
  setupDb(8, null);
@@ -1 +1 @@
1
- {"version":3,"file":"session-focus-reflect-nudge.test.js","sourceRoot":"","sources":["../../tests/session-focus-reflect-nudge.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-focus-reflect-nudge.test.js","sourceRoot":"","sources":["../../tests/session-focus-reflect-nudge.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=setup-wizard.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-wizard.test.d.ts","sourceRoot":"","sources":["../../tests/setup-wizard.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const globals_1 = require("@jest/globals");
4
+ const setup_wizard_1 = require("../scripts/lib/setup-wizard");
5
+ const stream_1 = require("stream");
6
+ jest.mock('readline/promises', () => ({
7
+ createInterface: jest.fn(),
8
+ }));
9
+ const { createInterface } = jest.requireMock('readline/promises');
10
+ (0, globals_1.describe)('setup-wizard', () => {
11
+ beforeEach(() => {
12
+ createInterface.mockReset();
13
+ });
14
+ (0, globals_1.it)('returns answers from mocked stdin', async () => {
15
+ const question = jest.fn()
16
+ .mockResolvedValueOnce('') // accept default home
17
+ .mockResolvedValueOnce('myproject'); // override project name
18
+ createInterface.mockReturnValue({ question, close: jest.fn() });
19
+ const stdin = new stream_1.Readable({ read() { } });
20
+ const stdout = new stream_1.PassThrough();
21
+ const answers = await (0, setup_wizard_1.runSetupWizard)({ stdin, stdout, defaultMindloreHome: '/default/home', cwd: '/some/project-x' });
22
+ (0, globals_1.expect)(answers).toEqual({ mindloreHome: '/default/home', projectName: 'myproject' });
23
+ });
24
+ (0, globals_1.it)('detects project name from cwd when user accepts default', async () => {
25
+ const question = jest.fn()
26
+ .mockResolvedValueOnce('') // accept default home
27
+ .mockResolvedValueOnce(''); // accept default project
28
+ createInterface.mockReturnValue({ question, close: jest.fn() });
29
+ const stdin = new stream_1.Readable({ read() { } });
30
+ const stdout = new stream_1.PassThrough();
31
+ const answers = await (0, setup_wizard_1.runSetupWizard)({ stdin, stdout, defaultMindloreHome: '/h', cwd: '/some/auto-detected' });
32
+ (0, globals_1.expect)(answers.projectName).toBe('auto-detected');
33
+ });
34
+ });
35
+ //# sourceMappingURL=setup-wizard.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-wizard.test.js","sourceRoot":"","sources":["../../tests/setup-wizard.test.ts"],"names":[],"mappings":";;AAAA,2CAAqD;AACrD,8DAA6D;AAC7D,mCAA+C;AAE/C,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;IACpC,eAAe,EAAE,IAAI,CAAC,EAAE,EAAE;CAC3B,CAAC,CAAC,CAAC;AAEJ,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAmC,CAAC;AAEpG,IAAA,kBAAQ,EAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,UAAU,CAAC,GAAG,EAAE;QACd,eAAe,CAAC,SAAS,EAAE,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,IAAA,YAAE,EAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE;aACvB,qBAAqB,CAAC,EAAE,CAAC,CAAG,sBAAsB;aAClD,qBAAqB,CAAC,WAAW,CAAC,CAAC,CAAE,wBAAwB;QAChE,eAAe,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAEhE,MAAM,KAAK,GAAG,IAAI,iBAAQ,CAAC,EAAE,IAAI,KAAI,CAAC,EAAE,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,IAAI,oBAAW,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,MAAM,IAAA,6BAAc,EAAC,EAAE,KAAK,EAAE,MAAM,EAAE,mBAAmB,EAAE,eAAe,EAAE,GAAG,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACtH,IAAA,gBAAM,EAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;IAEH,IAAA,YAAE,EAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE;aACvB,qBAAqB,CAAC,EAAE,CAAC,CAAG,sBAAsB;aAClD,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAE,yBAAyB;QACxD,eAAe,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAEhE,MAAM,KAAK,GAAG,IAAI,iBAAQ,CAAC,EAAE,IAAI,KAAI,CAAC,EAAE,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,IAAI,oBAAW,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,MAAM,IAAA,6BAAc,EAAC,EAAE,KAAK,EAAE,MAAM,EAAE,mBAAmB,EAAE,IAAI,EAAE,GAAG,EAAE,qBAAqB,EAAE,CAAC,CAAC;QAC/G,IAAA,gBAAM,EAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=transcript-token-estimator.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-token-estimator.test.d.ts","sourceRoot":"","sources":["../../tests/transcript-token-estimator.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const globals_1 = require("@jest/globals");
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const os = __importStar(require("os"));
40
+ const transcript_token_estimator_1 = require("../scripts/lib/transcript-token-estimator");
41
+ (0, globals_1.describe)('transcript-token-estimator', () => {
42
+ let tmpDir;
43
+ let tmpFile;
44
+ (0, globals_1.beforeEach)(() => {
45
+ tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'tte-'));
46
+ tmpFile = path.join(tmpDir, 'transcript.jsonl');
47
+ const lines = Array(100)
48
+ .fill('')
49
+ .map(() => JSON.stringify({ role: 'user', content: 'a'.repeat(200) }));
50
+ fs.writeFileSync(tmpFile, lines.join('\n'));
51
+ });
52
+ (0, globals_1.afterEach)(() => {
53
+ fs.rmSync(tmpDir, { recursive: true, force: true });
54
+ delete process.env.CLAUDE_CONTEXT_WINDOW;
55
+ });
56
+ (0, globals_1.it)('estimates token count from transcript', () => {
57
+ const tokens = (0, transcript_token_estimator_1.estimateContextTokens)(tmpFile, { tailLines: 200 });
58
+ (0, globals_1.expect)(tokens).toBeGreaterThan(4000);
59
+ (0, globals_1.expect)(tokens).toBeLessThan(7000);
60
+ });
61
+ (0, globals_1.it)('returns 0 for missing transcript', () => {
62
+ (0, globals_1.expect)((0, transcript_token_estimator_1.estimateContextTokens)(path.join(tmpDir, 'missing.jsonl'))).toBe(0);
63
+ });
64
+ (0, globals_1.it)('caches by mtime', () => {
65
+ const t1 = (0, transcript_token_estimator_1.estimateContextTokens)(tmpFile);
66
+ const t2 = (0, transcript_token_estimator_1.estimateContextTokens)(tmpFile);
67
+ (0, globals_1.expect)(t1).toBe(t2);
68
+ (0, globals_1.expect)(t1).toBeGreaterThan(0);
69
+ });
70
+ (0, globals_1.it)('maps context % to result count', () => {
71
+ (0, globals_1.expect)((0, transcript_token_estimator_1.resultCountFromContext)(0.40)).toBe(5);
72
+ (0, globals_1.expect)((0, transcript_token_estimator_1.resultCountFromContext)(0.60)).toBe(3);
73
+ (0, globals_1.expect)((0, transcript_token_estimator_1.resultCountFromContext)(0.80)).toBe(2);
74
+ (0, globals_1.expect)((0, transcript_token_estimator_1.resultCountFromContext)(0.95)).toBe(1);
75
+ });
76
+ (0, globals_1.it)('honors CLAUDE_CONTEXT_WINDOW env override', () => {
77
+ process.env.CLAUDE_CONTEXT_WINDOW = '1000000';
78
+ (0, globals_1.expect)((0, transcript_token_estimator_1.getContextWindow)()).toBe(1_000_000);
79
+ delete process.env.CLAUDE_CONTEXT_WINDOW;
80
+ (0, globals_1.expect)((0, transcript_token_estimator_1.getContextWindow)()).toBe(200_000);
81
+ });
82
+ (0, globals_1.it)('ignores invalid CLAUDE_CONTEXT_WINDOW values', () => {
83
+ process.env.CLAUDE_CONTEXT_WINDOW = 'not-a-number';
84
+ (0, globals_1.expect)((0, transcript_token_estimator_1.getContextWindow)()).toBe(200_000);
85
+ process.env.CLAUDE_CONTEXT_WINDOW = '-100';
86
+ (0, globals_1.expect)((0, transcript_token_estimator_1.getContextWindow)()).toBe(200_000);
87
+ });
88
+ (0, globals_1.it)('adaptiveResultCount returns 3 for undefined transcript', () => {
89
+ (0, globals_1.expect)((0, transcript_token_estimator_1.adaptiveResultCount)(undefined)).toBe(3);
90
+ });
91
+ (0, globals_1.it)('adaptiveResultCount returns 5 for low-context transcript', () => {
92
+ process.env.CLAUDE_CONTEXT_WINDOW = '1000000';
93
+ (0, globals_1.expect)((0, transcript_token_estimator_1.adaptiveResultCount)(tmpFile)).toBe(5);
94
+ });
95
+ (0, globals_1.it)('parses real CC transcript schema (message.content as string)', () => {
96
+ const ccFile = path.join(tmpDir, 'cc-string.jsonl');
97
+ const lines = Array(50)
98
+ .fill('')
99
+ .map(() => JSON.stringify({ type: 'user', message: { content: 'b'.repeat(200) } }));
100
+ fs.writeFileSync(ccFile, lines.join('\n'));
101
+ const tokens = (0, transcript_token_estimator_1.estimateContextTokens)(ccFile);
102
+ (0, globals_1.expect)(tokens).toBeGreaterThan(2000);
103
+ });
104
+ (0, globals_1.it)('parses real CC transcript schema (message.content as content-blocks array)', () => {
105
+ const ccFile = path.join(tmpDir, 'cc-blocks.jsonl');
106
+ const lines = Array(50)
107
+ .fill('')
108
+ .map(() => JSON.stringify({
109
+ type: 'assistant',
110
+ message: { content: [{ type: 'text', text: 'c'.repeat(200) }] },
111
+ }));
112
+ fs.writeFileSync(ccFile, lines.join('\n'));
113
+ const tokens = (0, transcript_token_estimator_1.estimateContextTokens)(ccFile);
114
+ (0, globals_1.expect)(tokens).toBeGreaterThan(2000);
115
+ });
116
+ (0, globals_1.it)('returns 0 for line with no recognizable content fields', () => {
117
+ const oddFile = path.join(tmpDir, 'odd.jsonl');
118
+ fs.writeFileSync(oddFile, JSON.stringify({ type: 'meta', timestamp: 'x' }) + '\n');
119
+ (0, globals_1.expect)((0, transcript_token_estimator_1.estimateContextTokens)(oddFile)).toBe(0);
120
+ });
121
+ });
122
+ //# sourceMappingURL=transcript-token-estimator.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-token-estimator.test.js","sourceRoot":"","sources":["../../tests/transcript-token-estimator.test.ts"],"names":[],"mappings":"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"}
@@ -34,7 +34,7 @@ var require_constants = __commonJS({
34
34
  return mod && mod.__esModule ? mod : { "default": mod };
35
35
  };
36
36
  Object.defineProperty(exports2, "__esModule", { value: true });
37
- exports2.CONSOLIDATION_THRESHOLD = exports2.STALE_THRESHOLD = exports2.DECAY_HALF_LIFE_DAYS = exports2.DEFAULT_TOKEN_BUDGET = exports2.TELEMETRY_FILE_ROTATE_BYTES = exports2.TELEMETRY_OUTPUT_MAX_BYTES = exports2.TELEMETRY_FILENAME = exports2.CC_MEMORY_BOOST = exports2.CC_SUBAGENT_CATEGORY = exports2.CC_SESSION_CATEGORY = exports2.CC_MEMORY_CATEGORY = exports2.CC_MEMORY_DIR = exports2.CC_MEMORY_PATH_MARKER = exports2.CC_PLUGIN_CACHE_DIR = exports2.TYPE_TO_DIR = exports2.PRIORITY_CASE = exports2.RELATED_OVERFETCH = exports2.MAX_RELATED_SOURCES = exports2.RELATION_PRIORITY = exports2.SYMMETRIC_TYPES = exports2.RELATION_TYPES = exports2.QUALITY_HEURISTICS = exports2.QUALITY_VALUES = exports2.FRONTMATTER_TYPES = exports2.FTS5_COLUMNS = exports2.STOP_WORDS = exports2.TURKISH_WORD_RE = exports2.STOP_WORDS_MIN_LENGTH = exports2.SESSION_CATEGORIES = exports2.CATEGORIES = exports2.SCHEMA_VERSION = exports2.DEFAULT_MODELS = exports2.CONFIG_FILE = exports2.MCP_BUSY_TIMEOUT_MS = exports2.DB_BUSY_TIMEOUT_MS = exports2.SKIP_FILES = exports2.DIRECTORIES = exports2.DB_NAME = exports2.GLOBAL_MINDLORE_DIR = exports2.MINDLORE_DIR = exports2.KNOWN_HOOK_EVENTS = void 0;
37
+ exports2.CACHE_STALE_AGE_MS = exports2.NUDGE_COOLDOWN_HOURS = exports2.REFLECT_THRESHOLD_DAYS = exports2.LEARNINGS_TOTAL_CHAR_BUDGET = exports2.LEARNINGS_MAX_LINES_PER_LESSON = exports2.LEARNINGS_MAX_LESSONS = exports2.CONSOLIDATION_THRESHOLD = exports2.STALE_THRESHOLD = exports2.DECAY_HALF_LIFE_DAYS = exports2.DEFAULT_TOKEN_BUDGET = exports2.TELEMETRY_FILE_ROTATE_BYTES = exports2.TELEMETRY_OUTPUT_MAX_BYTES = exports2.TELEMETRY_FILENAME = exports2.CC_MEMORY_BOOST = exports2.CC_SUBAGENT_CATEGORY = exports2.CC_SESSION_CATEGORY = exports2.CC_MEMORY_CATEGORY = exports2.CC_MEMORY_DIR = exports2.CC_MEMORY_PATH_MARKER = exports2.CC_PLUGIN_CACHE_DIR = exports2.SLUG_OPTIONAL_TYPES = exports2.NESTED_DIR_TYPES = exports2.TYPE_TO_DIR = exports2.PRIORITY_CASE = exports2.RELATED_OVERFETCH = exports2.MAX_RELATED_SOURCES = exports2.RELATION_PRIORITY = exports2.SYMMETRIC_TYPES = exports2.RELATION_TYPES = exports2.QUALITY_HEURISTICS = exports2.QUALITY_VALUES = exports2.FRONTMATTER_TYPES = exports2.FTS5_COLUMNS = exports2.STOP_WORDS = exports2.TURKISH_WORD_RE = exports2.STOP_WORDS_MIN_LENGTH = exports2.SESSION_CATEGORIES = exports2.CATEGORIES = exports2.SCHEMA_VERSION = exports2.DEFAULT_MODELS = exports2.CONFIG_FILE = exports2.MCP_BUSY_TIMEOUT_MS = exports2.DB_BUSY_TIMEOUT_MS = exports2.SKIP_FILES = exports2.DIRECTORIES = exports2.DB_NAME = exports2.GLOBAL_MINDLORE_DIR = exports2.MINDLORE_DIR = exports2.KNOWN_HOOK_EVENTS = void 0;
38
38
  exports2.isKnownHookEvent = isKnownHookEvent;
39
39
  exports2.isSessionCategory = isSessionCategory;
40
40
  exports2.fixVersionTokens = fixVersionTokens;
@@ -355,6 +355,8 @@ var require_constants = __commonJS({
355
355
  reference: "memory",
356
356
  note: "memory"
357
357
  };
358
+ exports2.NESTED_DIR_TYPES = /* @__PURE__ */ new Set(["raw"]);
359
+ exports2.SLUG_OPTIONAL_TYPES = /* @__PURE__ */ new Set(["raw", "compaction-snapshot"]);
358
360
  exports2.CC_PLUGIN_CACHE_DIR = path_12.default.join(os_12.default.homedir(), ".claude", "plugins", "cache");
359
361
  exports2.CC_MEMORY_PATH_MARKER = path_12.default.join(".claude", "projects");
360
362
  exports2.CC_MEMORY_DIR = "memory";
@@ -426,6 +428,12 @@ var require_constants = __commonJS({
426
428
  exports2.DECAY_HALF_LIFE_DAYS = 30;
427
429
  exports2.STALE_THRESHOLD = 0.3;
428
430
  exports2.CONSOLIDATION_THRESHOLD = 50;
431
+ exports2.LEARNINGS_MAX_LESSONS = 10;
432
+ exports2.LEARNINGS_MAX_LINES_PER_LESSON = 5;
433
+ exports2.LEARNINGS_TOTAL_CHAR_BUDGET = 6e3;
434
+ exports2.REFLECT_THRESHOLD_DAYS = 7;
435
+ exports2.NUDGE_COOLDOWN_HOURS = 24;
436
+ exports2.CACHE_STALE_AGE_MS = 24 * 3600 * 1e3;
429
437
  }
430
438
  });
431
439