mindlore 0.7.2 → 0.7.4

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 (101) hide show
  1. package/.claude-plugin/marketplace.json +33 -0
  2. package/.claude-plugin/plugin.json +30 -0
  3. package/dist/scripts/init.js +152 -151
  4. package/dist/scripts/init.js.map +1 -1
  5. package/dist/scripts/lib/constants.d.ts +1 -1
  6. package/dist/scripts/lib/constants.d.ts.map +1 -1
  7. package/dist/scripts/lib/constants.js +2 -7
  8. package/dist/scripts/lib/constants.js.map +1 -1
  9. package/dist/scripts/lib/detect-plugin.d.ts +2 -0
  10. package/dist/scripts/lib/detect-plugin.d.ts.map +1 -0
  11. package/dist/scripts/lib/detect-plugin.js +14 -0
  12. package/dist/scripts/lib/detect-plugin.js.map +1 -0
  13. package/dist/scripts/lib/hook-helpers.d.ts +8 -0
  14. package/dist/scripts/lib/hook-helpers.d.ts.map +1 -0
  15. package/dist/scripts/lib/hook-helpers.js +27 -0
  16. package/dist/scripts/lib/hook-helpers.js.map +1 -0
  17. package/dist/scripts/lib/mcp-namespace.d.ts.map +1 -1
  18. package/dist/scripts/lib/mcp-namespace.js +0 -5
  19. package/dist/scripts/lib/mcp-namespace.js.map +1 -1
  20. package/dist/scripts/lib/mcp-tools.d.ts.map +1 -1
  21. package/dist/scripts/lib/mcp-tools.js +3 -19
  22. package/dist/scripts/lib/mcp-tools.js.map +1 -1
  23. package/dist/scripts/lib/relation-helpers.js +1 -1
  24. package/dist/scripts/lib/relation-helpers.js.map +1 -1
  25. package/dist/scripts/lib/session-payload.d.ts.map +1 -1
  26. package/dist/scripts/lib/session-payload.js +4 -16
  27. package/dist/scripts/lib/session-payload.js.map +1 -1
  28. package/dist/scripts/lib/settings-cleanup.d.ts +6 -0
  29. package/dist/scripts/lib/settings-cleanup.d.ts.map +1 -0
  30. package/dist/scripts/lib/settings-cleanup.js +61 -0
  31. package/dist/scripts/lib/settings-cleanup.js.map +1 -0
  32. package/dist/scripts/lib/tool-adapters/decide-adapter.d.ts +1 -1
  33. package/dist/scripts/lib/tool-adapters/decide-adapter.d.ts.map +1 -1
  34. package/dist/scripts/lib/tool-adapters/decide-adapter.js +5 -0
  35. package/dist/scripts/lib/tool-adapters/decide-adapter.js.map +1 -1
  36. package/dist/scripts/mcp-server.js +40 -3
  37. package/dist/scripts/mcp-server.js.map +1 -1
  38. package/dist/scripts/mindlore-doctor.d.ts +4 -1
  39. package/dist/scripts/mindlore-doctor.d.ts.map +1 -1
  40. package/dist/scripts/mindlore-doctor.js +86 -40
  41. package/dist/scripts/mindlore-doctor.js.map +1 -1
  42. package/dist/scripts/mindlore-health-check.js +2 -2
  43. package/dist/scripts/mindlore-health-check.js.map +1 -1
  44. package/dist/scripts/mindlore-perf.d.ts +3 -1
  45. package/dist/scripts/mindlore-perf.d.ts.map +1 -1
  46. package/dist/scripts/mindlore-perf.js +13 -6
  47. package/dist/scripts/mindlore-perf.js.map +1 -1
  48. package/dist/scripts/uninstall.js +14 -38
  49. package/dist/scripts/uninstall.js.map +1 -1
  50. package/dist/tests/db-singleton.test.d.ts +2 -0
  51. package/dist/tests/db-singleton.test.d.ts.map +1 -0
  52. package/dist/tests/db-singleton.test.js +22 -0
  53. package/dist/tests/db-singleton.test.js.map +1 -0
  54. package/dist/tests/doctor.test.js +45 -15
  55. package/dist/tests/doctor.test.js.map +1 -1
  56. package/dist/tests/dont-repeat-dedup.test.js +13 -1
  57. package/dist/tests/dont-repeat-dedup.test.js.map +1 -1
  58. package/dist/tests/fts5-sync.test.js +11 -117
  59. package/dist/tests/fts5-sync.test.js.map +1 -1
  60. package/dist/tests/hook-helpers.test.d.ts +2 -0
  61. package/dist/tests/hook-helpers.test.d.ts.map +1 -0
  62. package/dist/tests/hook-helpers.test.js +44 -0
  63. package/dist/tests/hook-helpers.test.js.map +1 -0
  64. package/dist/tests/install-matrix.test.d.ts +2 -0
  65. package/dist/tests/install-matrix.test.d.ts.map +1 -0
  66. package/dist/tests/install-matrix.test.js +110 -0
  67. package/dist/tests/install-matrix.test.js.map +1 -0
  68. package/dist/tests/latency-budget.test.d.ts +2 -0
  69. package/dist/tests/latency-budget.test.d.ts.map +1 -0
  70. package/dist/tests/latency-budget.test.js +37 -0
  71. package/dist/tests/latency-budget.test.js.map +1 -0
  72. package/dist/tests/mcp-namespace.test.d.ts +2 -0
  73. package/dist/tests/mcp-namespace.test.d.ts.map +1 -0
  74. package/dist/tests/mcp-namespace.test.js +41 -0
  75. package/dist/tests/mcp-namespace.test.js.map +1 -0
  76. package/dist/tests/session-payload.test.js +13 -5
  77. package/dist/tests/session-payload.test.js.map +1 -1
  78. package/dist/tests/settings-cleanup.test.d.ts +2 -0
  79. package/dist/tests/settings-cleanup.test.d.ts.map +1 -0
  80. package/dist/tests/settings-cleanup.test.js +126 -0
  81. package/dist/tests/settings-cleanup.test.js.map +1 -0
  82. package/dist/tests/telemetry-perf.test.js +9 -8
  83. package/dist/tests/telemetry-perf.test.js.map +1 -1
  84. package/dist/tests/version-sync.test.d.ts +2 -0
  85. package/dist/tests/version-sync.test.d.ts.map +1 -0
  86. package/dist/tests/version-sync.test.js +41 -0
  87. package/dist/tests/version-sync.test.js.map +1 -0
  88. package/hooks/cc-memory-bulk-sync.cjs +2 -5
  89. package/hooks/cc-session-sync.cjs +2 -5
  90. package/hooks/lib/mindlore-common.cjs +41 -8
  91. package/hooks/mindlore-fts5-sync.cjs +5 -1
  92. package/hooks/mindlore-search.cjs +20 -14
  93. package/hooks/mindlore-session-focus.cjs +5 -17
  94. package/hooks/src/mindlore-fts5-sync.cjs +7 -4
  95. package/hooks/src/mindlore-search.cjs +19 -11
  96. package/hooks/src/mindlore-session-focus.cjs +1 -1
  97. package/package.json +3 -2
  98. package/plugin.json +5 -2
  99. package/skills/mindlore-decide/SKILL.md +7 -0
  100. package/skills/mindlore-log/SKILL.md +7 -0
  101. package/templates/config.json +1 -1
@@ -95,12 +95,9 @@ describe('buildSessionPayload', () => {
95
95
  const expectedTotal = payload.sections.reduce((s, sec) => s + sec.tokens, 0);
96
96
  expect(payload.totalTokens).toBe(expectedTotal);
97
97
  });
98
- test('reads latest delta file when multiple exist', () => {
99
- writeDelta('delta-2026-04-18.md', '# Old\n- Old stuff');
100
- writeDelta('delta-2026-04-19.md', '# Latest\n- Latest stuff');
101
- const payload = (0, session_payload_js_1.buildSessionPayload)({ db, baseDir, project: PROJECT });
98
+ test('uses latestDeltaContent parameter for Session section', () => {
99
+ const payload = (0, session_payload_js_1.buildSessionPayload)({ db, baseDir, project: PROJECT, latestDeltaContent: '# Latest\n- Latest stuff' });
102
100
  expect(payload.sections[0].content).toContain('Latest stuff');
103
- expect(payload.sections[0].content).not.toContain('Old stuff');
104
101
  });
105
102
  test('only returns episodes for matching project', () => {
106
103
  insertEpisode('decision', 'My project decision', { project: PROJECT });
@@ -118,5 +115,16 @@ describe('buildSessionPayload', () => {
118
115
  expect(payload.sections).toHaveLength(1);
119
116
  expect(payload.sections[0].label).toBe('Session');
120
117
  });
118
+ test('Session section shows "No previous session data" when latestDeltaContent is undefined', () => {
119
+ writeDelta('delta-2026-04-19.md', '---\nproject: other-project\n---\n# Other\n- Kastell stuff');
120
+ const payload = (0, session_payload_js_1.buildSessionPayload)({ db, baseDir, project: PROJECT });
121
+ expect(payload.sections[0].content).toContain('No previous session data');
122
+ expect(payload.sections[0].content).not.toContain('Kastell');
123
+ });
124
+ test('Session section uses latestDeltaContent when provided', () => {
125
+ const delta = '# My Project\n- Did feature work\n- Fixed bug';
126
+ const payload = (0, session_payload_js_1.buildSessionPayload)({ db, baseDir, project: PROJECT, latestDeltaContent: delta });
127
+ expect(payload.sections[0].content).toContain('Did feature work');
128
+ });
121
129
  });
122
130
  //# sourceMappingURL=session-payload.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-payload.test.js","sourceRoot":"","sources":["../../tests/session-payload.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-payload.test.js","sourceRoot":"","sources":["../../tests/session-payload.test.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;AAEH,4CAAoB;AACpB,gDAAwB;AAExB,2CAAgF;AAEhF,0EAE2C;AAE3C,IAAI,GAAoB,CAAC;AACzB,IAAI,EAAqB,CAAC;AAC1B,IAAI,OAAe,CAAC;AAEpB,MAAM,OAAO,GAAG,cAAc,CAAC;AAE/B,SAAS,aAAa,CACpB,IAAY,EACZ,OAAe,EACf,OAAmE,EAAE;IAErE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IAC3D,EAAE,CAAC,OAAO,CACR;0CACsC,CACvC,CAAC,GAAG,CACH,EAAE,EACF,IAAI,EACJ,IAAI,CAAC,OAAO,IAAI,OAAO,EACvB,OAAO,EACP,IAAI,CAAC,MAAM,IAAI,QAAQ,EACvB,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAC5C,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,QAAgB,EAAE,OAAe;IACnD,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7C,YAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,YAAE,CAAC,aAAa,CAAC,cAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AACnE,CAAC;AAED,UAAU,CAAC,GAAG,EAAE;IACd,GAAG,GAAG,IAAA,6BAAqB,EAAC,iBAAiB,CAAC,CAAC;IAC/C,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;IACZ,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC;AACvB,CAAC,CAAC,CAAC;AAEH,SAAS,CAAC,GAAG,EAAE;IACb,IAAA,8BAAsB,EAAC,GAAG,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC7C,UAAU,CAAC,qBAAqB,EAAE,6BAA6B,CAAC,CAAC;QACjE,aAAa,CAAC,UAAU,EAAE,gCAAgC,CAAC,CAAC;QAC5D,aAAa,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC;QACjD,aAAa,CAAC,UAAU,EAAE,0BAA0B,CAAC,CAAC;QAEtD,MAAM,OAAO,GAAG,IAAA,wCAAmB,EAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAEvE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACrD,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACrD,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACpD,UAAU,CAAC,qBAAqB,EAAE,oBAAoB,CAAC,CAAC;QACxD,aAAa,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QAC5C,aAAa,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QAC5C,aAAa,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QAE5C,MAAM,OAAO,GAAG,IAAA,wCAAmB,EAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;QAExF,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC9E,UAAU,CAAC,qBAAqB,EAAE,mBAAmB,CAAC,CAAC;QACvD,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACjC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAClC,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAEnC,MAAM,IAAI,GAAG,IAAA,wCAAmB,EAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QACxF,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC;QAC/C,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC;QAEhD,MAAM,UAAU,GAAG,aAAa,GAAG,cAAc,GAAG,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,IAAA,wCAAmB,EAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;QAEhG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACvC,MAAM,OAAO,GAAG,IAAA,wCAAmB,EAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAEvE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;QAC3E,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QACtE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QACrE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,iCAAiC,EAAE,GAAG,EAAE;QAC3C,aAAa,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAExC,MAAM,OAAO,GAAG,IAAA,wCAAmB,EAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAEvE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;QAC3E,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,oBAAoB;QACzC,UAAU,CAAC,qBAAqB,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC;QAEpD,MAAM,OAAO,GAAG,IAAA,wCAAmB,EAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAEvE,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACvC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC7D,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC9C,CAAC;QACD,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC7E,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uDAAuD,EAAE,GAAG,EAAE;QACjE,MAAM,OAAO,GAAG,IAAA,wCAAmB,EAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,CAAC,CAAC;QAEvH,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACtD,aAAa,CAAC,UAAU,EAAE,qBAAqB,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QACvE,aAAa,CAAC,UAAU,EAAE,wBAAwB,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;QAElF,MAAM,OAAO,GAAG,IAAA,wCAAmB,EAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAEvE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QACtE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAChE,UAAU,CAAC,qBAAqB,EAAE,gCAAgC,CAAC,CAAC;QACpE,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACjC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAClC,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAEnC,MAAM,OAAO,GAAG,IAAA,wCAAmB,EAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;QAEvF,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uFAAuF,EAAE,GAAG,EAAE;QACjG,UAAU,CAAC,qBAAqB,EAAE,4DAA4D,CAAC,CAAC;QAEhG,MAAM,OAAO,GAAG,IAAA,wCAAmB,EAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAEvE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;QAC3E,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uDAAuD,EAAE,GAAG,EAAE;QACjE,MAAM,KAAK,GAAG,+CAA+C,CAAC;QAE9D,MAAM,OAAO,GAAG,IAAA,wCAAmB,EAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC;QAElG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=settings-cleanup.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-cleanup.test.d.ts","sourceRoot":"","sources":["../../tests/settings-cleanup.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const fs_1 = __importDefault(require("fs"));
7
+ const path_1 = __importDefault(require("path"));
8
+ const os_1 = __importDefault(require("os"));
9
+ const settings_cleanup_js_1 = require("../scripts/lib/settings-cleanup.js");
10
+ const FIXTURES = path_1.default.join(__dirname, 'fixtures');
11
+ function loadFixture(name) {
12
+ const tmpDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'mindlore-test-'));
13
+ const src = path_1.default.join(FIXTURES, name);
14
+ const dest = path_1.default.join(tmpDir, 'settings.json');
15
+ fs_1.default.copyFileSync(src, dest);
16
+ return dest;
17
+ }
18
+ function readJson(filePath) {
19
+ return JSON.parse(fs_1.default.readFileSync(filePath, 'utf8'));
20
+ }
21
+ afterEach(() => {
22
+ // tmpdir cleanup handled by OS
23
+ });
24
+ describe('cleanupLegacyHooks', () => {
25
+ it('removes hooks with node_modules/mindlore/hooks/ path', () => {
26
+ const settingsPath = loadFixture('settings-with-mindlore-hooks.json');
27
+ const result = (0, settings_cleanup_js_1.cleanupLegacyHooks)(settingsPath);
28
+ expect(result.removed).toBe(4);
29
+ expect(result.backupCreated).toBe(true);
30
+ const settings = readJson(settingsPath);
31
+ /* eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- test fixture shape */
32
+ const hooks = settings.hooks;
33
+ // PreToolUse should keep only bash-guard (user hook)
34
+ expect(hooks.PreToolUse).toHaveLength(1);
35
+ // SessionStart had only mindlore hook → event key removed
36
+ expect(hooks.SessionStart).toBeUndefined();
37
+ // UserPromptSubmit had only mindlore hook → event key removed
38
+ expect(hooks.UserPromptSubmit).toBeUndefined();
39
+ });
40
+ it('does nothing on clean settings.json (no mindlore hooks)', () => {
41
+ const settingsPath = loadFixture('settings-clean.json');
42
+ const result = (0, settings_cleanup_js_1.cleanupLegacyHooks)(settingsPath);
43
+ expect(result.removed).toBe(0);
44
+ expect(result.backupCreated).toBe(false);
45
+ });
46
+ it('preserves user custom hooks with mindlore- prefix but non-node_modules path', () => {
47
+ const settingsPath = loadFixture('settings-mixed-hooks.json');
48
+ const result = (0, settings_cleanup_js_1.cleanupLegacyHooks)(settingsPath);
49
+ expect(result.removed).toBe(2); // read-guard + session-end
50
+ const settings = readJson(settingsPath);
51
+ /* eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- test fixture shape */
52
+ const hooks = settings.hooks;
53
+ // PreToolUse: bash-guard + user custom mindlore hook kept, node_modules one removed
54
+ expect(hooks.PreToolUse).toHaveLength(2);
55
+ // SessionEnd had only node_modules hook → removed
56
+ expect(hooks.SessionEnd).toBeUndefined();
57
+ });
58
+ it('creates backup file before modifying', () => {
59
+ const settingsPath = loadFixture('settings-with-mindlore-hooks.json');
60
+ const backupPath = settingsPath + '.mindlore-migration-backup';
61
+ (0, settings_cleanup_js_1.cleanupLegacyHooks)(settingsPath);
62
+ expect(fs_1.default.existsSync(backupPath)).toBe(true);
63
+ // Backup should be the original content
64
+ const backup = readJson(backupPath);
65
+ /* eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- test fixture shape */
66
+ const hooks = backup.hooks;
67
+ expect(hooks.PreToolUse).toHaveLength(3);
68
+ });
69
+ it('does not overwrite existing backup', () => {
70
+ const settingsPath = loadFixture('settings-with-mindlore-hooks.json');
71
+ const backupPath = settingsPath + '.mindlore-migration-backup';
72
+ // Create fake backup first
73
+ fs_1.default.writeFileSync(backupPath, '{"fake": true}', 'utf8');
74
+ (0, settings_cleanup_js_1.cleanupLegacyHooks)(settingsPath);
75
+ // Original fake backup should be preserved
76
+ const backup = readJson(backupPath);
77
+ expect(backup.fake).toBe(true);
78
+ });
79
+ it('returns correct result when settings.json does not exist', () => {
80
+ const result = (0, settings_cleanup_js_1.cleanupLegacyHooks)('/nonexistent/path/settings.json');
81
+ expect(result.removed).toBe(0);
82
+ expect(result.backupCreated).toBe(false);
83
+ });
84
+ it('is idempotent — second run removes nothing', () => {
85
+ const settingsPath = loadFixture('settings-with-mindlore-hooks.json');
86
+ const first = (0, settings_cleanup_js_1.cleanupLegacyHooks)(settingsPath);
87
+ expect(first.removed).toBe(4);
88
+ const second = (0, settings_cleanup_js_1.cleanupLegacyHooks)(settingsPath);
89
+ expect(second.removed).toBe(0);
90
+ expect(second.backupCreated).toBe(false);
91
+ });
92
+ it('handles both forward-slash and backslash node_modules paths', () => {
93
+ const settingsPath = loadFixture('settings-with-mindlore-hooks.json');
94
+ const result = (0, settings_cleanup_js_1.cleanupLegacyHooks)(settingsPath);
95
+ // All fixtures use backslash (Windows) — verify they're caught
96
+ expect(result.removed).toBeGreaterThan(0);
97
+ });
98
+ });
99
+ describe('init.ts plugin gate verification', () => {
100
+ it('init.ts should have detectPluginInstalled gate', () => {
101
+ const initSource = fs_1.default.readFileSync(path_1.default.join(__dirname, '..', 'scripts', 'init.ts'), 'utf8');
102
+ expect(initSource).toContain('detectPluginInstalled');
103
+ });
104
+ it('init.ts should have both mergeHooks and cleanupLegacyHooks (gated)', () => {
105
+ const initSource = fs_1.default.readFileSync(path_1.default.join(__dirname, '..', 'scripts', 'init.ts'), 'utf8');
106
+ expect(initSource).toContain('mergeHooks');
107
+ expect(initSource).toContain('cleanupLegacyHooks');
108
+ });
109
+ it('init.ts should have registerSkills and registerAgents for npx-only path', () => {
110
+ const initSource = fs_1.default.readFileSync(path_1.default.join(__dirname, '..', 'scripts', 'init.ts'), 'utf8');
111
+ expect(initSource).toContain('registerSkills');
112
+ expect(initSource).toContain('registerAgents');
113
+ });
114
+ });
115
+ describe('uninstall.ts shared module usage', () => {
116
+ it('uninstall.ts should not contain inline removeHooks implementation', () => {
117
+ const uninstallSource = fs_1.default.readFileSync(path_1.default.join(__dirname, '..', 'scripts', 'uninstall.ts'), 'utf8');
118
+ // Should not have inline hook filtering logic
119
+ expect(uninstallSource).not.toContain("includes('mindlore-')");
120
+ });
121
+ it('uninstall.ts should import from settings-cleanup', () => {
122
+ const uninstallSource = fs_1.default.readFileSync(path_1.default.join(__dirname, '..', 'scripts', 'uninstall.ts'), 'utf8');
123
+ expect(uninstallSource).toContain('settings-cleanup');
124
+ });
125
+ });
126
+ //# sourceMappingURL=settings-cleanup.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-cleanup.test.js","sourceRoot":"","sources":["../../tests/settings-cleanup.test.ts"],"names":[],"mappings":"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"}
@@ -26,23 +26,24 @@ describe('mindlore-perf', () => {
26
26
  expect(entries).toHaveLength(5);
27
27
  });
28
28
  it('calculates p50/p95 per hook', () => {
29
- const { parseTelemetry, calculatePercentiles } = require('../dist/scripts/mindlore-perf.js');
29
+ const { parseTelemetry, groupByHook, calculatePercentiles } = require('../dist/scripts/mindlore-perf.js');
30
30
  const entries = parseTelemetry(telPath);
31
- const percs = calculatePercentiles(entries, 'search');
31
+ const groups = groupByHook(entries);
32
+ const percs = calculatePercentiles(groups['search'] ?? []);
32
33
  expect(percs.p50).toBe(200);
33
34
  expect(percs.count).toBe(3);
34
35
  });
35
36
  it('calculates percentiles for session-focus', () => {
36
- const { parseTelemetry, calculatePercentiles } = require('../dist/scripts/mindlore-perf.js');
37
+ const { parseTelemetry, groupByHook, calculatePercentiles } = require('../dist/scripts/mindlore-perf.js');
37
38
  const entries = parseTelemetry(telPath);
38
- const percs = calculatePercentiles(entries, 'session-focus');
39
+ const groups = groupByHook(entries);
40
+ const percs = calculatePercentiles(groups['session-focus'] ?? []);
39
41
  expect(percs.count).toBe(2);
40
42
  expect(percs.errorCount).toBe(1);
41
43
  });
42
- it('returns zero percentiles for unknown hook', () => {
43
- const { parseTelemetry, calculatePercentiles } = require('../dist/scripts/mindlore-perf.js');
44
- const entries = parseTelemetry(telPath);
45
- const percs = calculatePercentiles(entries, 'nonexistent');
44
+ it('returns zero percentiles for empty array', () => {
45
+ const { calculatePercentiles } = require('../dist/scripts/mindlore-perf.js');
46
+ const percs = calculatePercentiles([]);
46
47
  expect(percs.count).toBe(0);
47
48
  expect(percs.p50).toBe(0);
48
49
  });
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry-perf.test.js","sourceRoot":"","sources":["../../tests/telemetry-perf.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"telemetry-perf.test.js","sourceRoot":"","sources":["../../tests/telemetry-perf.test.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AAEpB,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,MAAM,MAAM,GAAG,YAAE,CAAC,WAAW,CAAC,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAErD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,OAAO,GAAG;YACd,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE;YAC3E,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE;YAC5E,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE;YAC5E,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE;YACnF,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE;SACrF,CAAC;QACF,YAAE,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,QAAQ,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;IAEzE,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,kCAAkC,CAAC,CAAC;QACvE,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC,kCAAkC,CAAC,CAAC;QAC1G,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QAEpC,MAAM,KAAK,GAAG,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3D,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC,kCAAkC,CAAC,CAAC;QAC1G,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QAEpC,MAAM,KAAK,GAAG,oBAAoB,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC;QAClE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC,kCAAkC,CAAC,CAAC;QAE7E,MAAM,KAAK,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAC;QACvC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,kCAAkC,CAAC,CAAC;QACpF,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;QACvE,OAAO,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACjC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,EAAE,GAAG,GAAG,EAAE,GAAwC,CAAC,CAAC;QAC1D,MAAM,MAAM,CAAC,aAAa,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAC3E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=version-sync.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-sync.test.d.ts","sourceRoot":"","sources":["../../tests/version-sync.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const fs_1 = __importDefault(require("fs"));
7
+ const path_1 = __importDefault(require("path"));
8
+ function readJsonVersion(filePath, ...keys) {
9
+ const content = JSON.parse(fs_1.default.readFileSync(filePath, 'utf8'));
10
+ let value = content;
11
+ for (const key of keys) {
12
+ value = value[key];
13
+ }
14
+ /* eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- JSON traversal returns any */
15
+ return value;
16
+ }
17
+ describe('Version Sync', () => {
18
+ const root = path_1.default.resolve(__dirname, '..');
19
+ const versions = () => ({
20
+ packageJson: readJsonVersion(path_1.default.join(root, 'package.json'), 'version'),
21
+ pluginJson: readJsonVersion(path_1.default.join(root, 'plugin.json'), 'version'),
22
+ claudePluginJson: readJsonVersion(path_1.default.join(root, '.claude-plugin', 'plugin.json'), 'version'),
23
+ marketplaceMeta: readJsonVersion(path_1.default.join(root, '.claude-plugin', 'marketplace.json'), 'metadata', 'version'),
24
+ marketplacePlugin: readJsonVersion(path_1.default.join(root, '.claude-plugin', 'marketplace.json'), 'plugins', '0', 'version'),
25
+ });
26
+ it('all 5 version fields are equal', () => {
27
+ const v = versions();
28
+ const allVersions = Object.values(v);
29
+ const unique = new Set(allVersions);
30
+ expect(unique.size).toBe(1);
31
+ // Extra detail on failure
32
+ if (unique.size !== 1) {
33
+ console.log('Version mismatch:', v);
34
+ }
35
+ });
36
+ it('version matches semver pattern', () => {
37
+ const v = versions();
38
+ expect(v.packageJson).toMatch(/^\d+\.\d+\.\d+$/);
39
+ });
40
+ });
41
+ //# sourceMappingURL=version-sync.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-sync.test.js","sourceRoot":"","sources":["../../tests/version-sync.test.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,gDAAwB;AAExB,SAAS,eAAe,CAAC,QAAgB,EAAE,GAAG,IAAc;IAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9D,IAAI,KAAK,GAAG,OAAO,CAAC;IACpB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IACD,wGAAwG;IACxG,OAAO,KAAe,CAAC;AACzB,CAAC;AAED,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,MAAM,IAAI,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAE3C,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,CAAC;QACtB,WAAW,EAAE,eAAe,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,SAAS,CAAC;QACxE,UAAU,EAAE,eAAe,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,SAAS,CAAC;QACtE,gBAAgB,EAAE,eAAe,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,aAAa,CAAC,EAAE,SAAS,CAAC;QAC9F,eAAe,EAAE,eAAe,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC;QAC9G,iBAAiB,EAAE,eAAe,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,CAAC;KACrH,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,GAAG,QAAQ,EAAE,CAAC;QACrB,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;QAEpC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,0BAA0B;QAC1B,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,GAAG,QAAQ,EAAE,CAAC;QACrB,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -34,11 +34,10 @@ 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.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.TYPE_TO_DIR = 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.CONSOLIDATION_THRESHOLD = exports2.STALE_THRESHOLD = exports2.DECAY_HALF_LIFE_DAYS = exports2.DEFAULT_TOKEN_BUDGET = 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.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;
41
- exports2.buildPriorityCase = buildPriorityCase;
42
41
  exports2.homedir = homedir;
43
42
  exports2.getActiveMindloreDir = getActiveMindloreDir;
44
43
  exports2.getAllDbs = getAllDbs;
@@ -336,9 +335,7 @@ var require_constants = __commonJS({
336
335
  };
337
336
  exports2.MAX_RELATED_SOURCES = 5;
338
337
  exports2.RELATED_OVERFETCH = 10;
339
- function buildPriorityCase() {
340
- return Object.entries(exports2.RELATION_PRIORITY).map(([type, priority]) => `WHEN '${type}' THEN ${priority}`).join(" ");
341
- }
338
+ exports2.PRIORITY_CASE = "WHEN 'supersedes' THEN 1 WHEN 'contradicts' THEN 2 WHEN 'extends' THEN 3 WHEN 'cites' THEN 4";
342
339
  exports2.TYPE_TO_DIR = {
343
340
  raw: "raw",
344
341
  source: "sources",
@@ -34,11 +34,10 @@ 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.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.TYPE_TO_DIR = 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.CONSOLIDATION_THRESHOLD = exports2.STALE_THRESHOLD = exports2.DECAY_HALF_LIFE_DAYS = exports2.DEFAULT_TOKEN_BUDGET = 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.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;
41
- exports2.buildPriorityCase = buildPriorityCase;
42
41
  exports2.homedir = homedir;
43
42
  exports2.getActiveMindloreDir = getActiveMindloreDir;
44
43
  exports2.getAllDbs = getAllDbs;
@@ -336,9 +335,7 @@ var require_constants = __commonJS({
336
335
  };
337
336
  exports2.MAX_RELATED_SOURCES = 5;
338
337
  exports2.RELATED_OVERFETCH = 10;
339
- function buildPriorityCase() {
340
- return Object.entries(exports2.RELATION_PRIORITY).map(([type, priority]) => `WHEN '${type}' THEN ${priority}`).join(" ");
341
- }
338
+ exports2.PRIORITY_CASE = "WHEN 'supersedes' THEN 1 WHEN 'contradicts' THEN 2 WHEN 'extends' THEN 3 WHEN 'cites' THEN 4";
342
339
  exports2.TYPE_TO_DIR = {
343
340
  raw: "raw",
344
341
  source: "sources",
@@ -663,6 +663,24 @@ const extractSkeleton = (() => {
663
663
 
664
664
  const TELEMETRY_KEEP_LINES = 200;
665
665
 
666
+ const HOOK_LATENCY_BUDGETS = {
667
+ 'mindlore-session-focus': 100,
668
+ 'mindlore-session-end': 100,
669
+ 'mindlore-pre-compact': 100,
670
+ 'mindlore-post-compact': 100,
671
+ 'mindlore-search': 50,
672
+ 'mindlore-decision-detector': 50,
673
+ 'mindlore-index': 50,
674
+ 'mindlore-fts5-sync': 50,
675
+ 'mindlore-cwd-changed': 50,
676
+ 'mindlore-read-guard': 30,
677
+ 'mindlore-post-read': 30,
678
+ 'mindlore-dont-repeat': 30,
679
+ 'mindlore-model-router': 30,
680
+ 'mindlore-research-guard': 30,
681
+ };
682
+ const DEFAULT_BUDGET_MS = 50;
683
+
666
684
  function _rotateFile(filePath, maxBytes, keepLines) {
667
685
  try {
668
686
  const stat = fs.statSync(filePath);
@@ -677,16 +695,17 @@ function _rotateFile(filePath, maxBytes, keepLines) {
677
695
 
678
696
  let _telDirEnsured = false;
679
697
 
680
- function _writeTelemetry({ hookName, duration_ms, ok, extra }) {
698
+ function _writeTelemetry({ hookName, duration_ms, ok, budget_ms, budget_exceeded, extra }) {
681
699
  try {
700
+ const telDir = globalDir();
682
701
  if (!_telDirEnsured) {
683
- safeMkdir(GLOBAL_MINDLORE_DIR);
702
+ safeMkdir(telDir);
684
703
  _telDirEnsured = true;
685
704
  }
686
- const telPath = path.join(GLOBAL_MINDLORE_DIR, 'telemetry.jsonl');
687
- const entry = { ts: new Date().toISOString(), hook: hookName, duration_ms, ok };
705
+ const telPath = path.join(telDir, 'telemetry.jsonl');
706
+ const entry = { ts: new Date().toISOString(), hook: hookName, duration_ms, ok, budget_ms, budget_exceeded };
688
707
  if (extra && typeof extra === 'object') {
689
- for (const key of ['inject_tokens', 'source_tokens', 'injected_tokens', 'full_read_tokens']) {
708
+ for (const key of ['inject_tokens', 'source_tokens', 'injected_tokens', 'full_read_tokens', 'search_ms', 'result_count']) {
690
709
  if (typeof extra[key] === 'number') entry[key] = extra[key];
691
710
  }
692
711
  }
@@ -707,8 +726,14 @@ async function withTelemetry(hookName, fn) {
707
726
  ok = false;
708
727
  thrown = err;
709
728
  }
729
+ const duration = Date.now() - start;
730
+ const budget = HOOK_LATENCY_BUDGETS[hookName] ?? DEFAULT_BUDGET_MS;
731
+ const budgetExceeded = duration > budget;
732
+ if (budgetExceeded) {
733
+ process.stderr.write(`[Mindlore] hook ${hookName} took ${duration}ms (budget: ${budget}ms)\n`);
734
+ }
710
735
  const extra = (result && typeof result === 'object') ? result : undefined;
711
- _writeTelemetry({ hookName, duration_ms: Date.now() - start, ok, extra });
736
+ _writeTelemetry({ hookName, duration_ms: duration, ok, budget_ms: budget, budget_exceeded: budgetExceeded, extra });
712
737
  if (thrown) throw thrown;
713
738
  return result;
714
739
  }
@@ -724,8 +749,14 @@ function withTelemetrySync(hookName, fn) {
724
749
  ok = false;
725
750
  thrown = err;
726
751
  }
752
+ const duration = Date.now() - start;
753
+ const budget = HOOK_LATENCY_BUDGETS[hookName] ?? DEFAULT_BUDGET_MS;
754
+ const budgetExceeded = duration > budget;
755
+ if (budgetExceeded) {
756
+ process.stderr.write(`[Mindlore] hook ${hookName} took ${duration}ms (budget: ${budget}ms)\n`);
757
+ }
727
758
  const extra = (result && typeof result === 'object') ? result : undefined;
728
- _writeTelemetry({ hookName, duration_ms: Date.now() - start, ok, extra });
759
+ _writeTelemetry({ hookName, duration_ms: duration, ok, budget_ms: budget, budget_exceeded: budgetExceeded, extra });
729
760
  if (thrown) throw thrown;
730
761
  return result;
731
762
  }
@@ -741,7 +772,7 @@ function withTimeoutDb(db, sql, params = [], { timeoutMs = DB_BUSY_TIMEOUT_MS, m
741
772
  return params.length > 0 ? stmt.all(...params) : stmt.all();
742
773
  } catch (err) {
743
774
  hookLog('timeout', 'warn', `DB query timeout/error: ${err.message}`);
744
- _writeTelemetry({ hookName: 'db_timeout', duration_ms: 0, ok: false });
775
+ _writeTelemetry({ hookName: 'db_timeout', duration_ms: 0, ok: false, budget_ms: DEFAULT_BUDGET_MS, budget_exceeded: false });
745
776
  return mode === 'get' ? undefined : [];
746
777
  }
747
778
  }
@@ -837,6 +868,8 @@ module.exports = {
837
868
  // Telemetry (v0.6.0)
838
869
  withTelemetry,
839
870
  withTelemetrySync,
871
+ HOOK_LATENCY_BUDGETS,
872
+ DEFAULT_BUDGET_MS,
840
873
  // DB timeout wrapper (v0.6.1)
841
874
  withTimeoutDb,
842
875
  // Raw file helpers (v0.6.3)
@@ -5,12 +5,15 @@
5
5
  var fs = require("fs");
6
6
  var path = require("path");
7
7
  var { DB_NAME, sha256, openDatabase, getAllMdFiles, parseFrontmatter, extractFtsMetadata, insertFtsRow, readHookStdin, getActiveMindloreDir, getProjectName, resolveProject, hookLog, withTelemetry, SQL_FTS_SESSIONS_INSERT, isSessionCategory, isInsideMindloreDir } = require("./lib/mindlore-common.cjs");
8
+ function shouldIndexFile(filePath) {
9
+ return !!(filePath && filePath.endsWith(".md"));
10
+ }
8
11
  function main() {
9
12
  const filePath = readHookStdin(["path", "file_path"]);
10
13
  if (!filePath) return;
14
+ if (!shouldIndexFile(filePath)) return;
11
15
  const resolved = path.resolve(filePath);
12
16
  if (!isInsideMindloreDir(resolved)) return;
13
- if (filePath.endsWith(".md")) return;
14
17
  const baseDir = getActiveMindloreDir();
15
18
  if (!fs.existsSync(baseDir)) return;
16
19
  const dbPath = path.join(baseDir, DB_NAME);
@@ -63,6 +66,7 @@ function main() {
63
66
  db.close();
64
67
  }
65
68
  }
69
+ module.exports = { shouldIndexFile };
66
70
  withTelemetry("mindlore-fts5-sync", main).catch((err) => {
67
71
  hookLog("mindlore-fts5-sync", "error", err?.message ?? String(err));
68
72
  process.exit(0);
@@ -34,11 +34,10 @@ 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.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.TYPE_TO_DIR = 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.CONSOLIDATION_THRESHOLD = exports2.STALE_THRESHOLD = exports2.DECAY_HALF_LIFE_DAYS = exports2.DEFAULT_TOKEN_BUDGET = 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.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;
41
- exports2.buildPriorityCase = buildPriorityCase;
42
41
  exports2.homedir = homedir;
43
42
  exports2.getActiveMindloreDir = getActiveMindloreDir;
44
43
  exports2.getAllDbs = getAllDbs2;
@@ -336,9 +335,7 @@ var require_constants = __commonJS({
336
335
  };
337
336
  exports2.MAX_RELATED_SOURCES = 5;
338
337
  exports2.RELATED_OVERFETCH = 10;
339
- function buildPriorityCase() {
340
- return Object.entries(exports2.RELATION_PRIORITY).map(([type, priority]) => `WHEN '${type}' THEN ${priority}`).join(" ");
341
- }
338
+ exports2.PRIORITY_CASE = "WHEN 'supersedes' THEN 1 WHEN 'contradicts' THEN 2 WHEN 'extends' THEN 3 WHEN 'cites' THEN 4";
342
339
  exports2.TYPE_TO_DIR = {
343
340
  raw: "raw",
344
341
  source: "sources",
@@ -1103,7 +1100,7 @@ var require_search_cache = __commonJS({
1103
1100
  // hooks/src/mindlore-search.cjs
1104
1101
  var fs = require("fs");
1105
1102
  var path = require("path");
1106
- var { getAllDbs, openDatabase, extractHeadings, readHookStdin, readConfig, hookLog, incrementRecallCount, withTelemetry } = require("./lib/mindlore-common.cjs");
1103
+ var { getAllDbs, openDatabase, extractHeadings, readConfig, hookLog, incrementRecallCount, withTelemetry } = require("./lib/mindlore-common.cjs");
1107
1104
  var MAX_RESULTS = 3;
1108
1105
  var MIN_QUERY_WORDS = 3;
1109
1106
  var searchEngineMod;
@@ -1116,9 +1113,22 @@ try {
1116
1113
  SearchCacheMod = require_search_cache();
1117
1114
  } catch (_err) {
1118
1115
  }
1116
+ function parseStdin() {
1117
+ try {
1118
+ const raw = fs.readFileSync(0, "utf8").trim();
1119
+ if (!raw) return { userMessage: "", sessionId: "unknown" };
1120
+ const parsed = JSON.parse(raw);
1121
+ const userMessage = parsed.prompt || parsed.content || parsed.message || parsed.query || raw;
1122
+ const sessionId = parsed.session_id || "unknown";
1123
+ return { userMessage, sessionId };
1124
+ } catch (_err) {
1125
+ return { userMessage: "", sessionId: "unknown" };
1126
+ }
1127
+ }
1119
1128
  function main() {
1120
- const userMessage = readHookStdin(["prompt", "content", "message", "query"]);
1129
+ const { userMessage, sessionId } = parseStdin();
1121
1130
  if (!userMessage || userMessage.length < MIN_QUERY_WORDS) return;
1131
+ let searchMs = 0;
1122
1132
  const dbPaths = getAllDbs();
1123
1133
  if (dbPaths.length === 0) return;
1124
1134
  if (!searchEngineMod) {
@@ -1128,13 +1138,6 @@ function main() {
1128
1138
  const project = path.basename(process.cwd());
1129
1139
  const config = readConfig(path.dirname(dbPaths[0]));
1130
1140
  const synonyms = config && config.synonyms ? config.synonyms : {};
1131
- let sessionId;
1132
- try {
1133
- const stdinData = JSON.parse(process.env.CLAUDE_HOOK_STDIN || "{}");
1134
- sessionId = stdinData.session_id || "unknown";
1135
- } catch (_) {
1136
- sessionId = "unknown";
1137
- }
1138
1141
  const allResults = [];
1139
1142
  for (const dbPath of dbPaths) {
1140
1143
  const db = openDatabase(dbPath);
@@ -1160,11 +1163,13 @@ function main() {
1160
1163
  continue;
1161
1164
  }
1162
1165
  }
1166
+ const t0 = Date.now();
1163
1167
  const results = searchEngineMod.search(db, userMessage, {
1164
1168
  project,
1165
1169
  maxResults: effectiveMax,
1166
1170
  synonyms
1167
1171
  });
1172
+ searchMs += Date.now() - t0;
1168
1173
  if (cache) cache.set(userMessage, results);
1169
1174
  const baseDir = path.dirname(dbPath);
1170
1175
  for (const r of results) {
@@ -1256,6 +1261,7 @@ Summary: ${summary}...
1256
1261
  }
1257
1262
  process.stdout.write(outputStr);
1258
1263
  }
1264
+ return { search_ms: searchMs, result_count: relevant.length };
1259
1265
  }
1260
1266
  withTelemetry("mindlore-search", main).catch((err) => {
1261
1267
  hookLog("mindlore-search", "error", err?.message ?? String(err));