memory-journal-mcp 6.1.2 → 6.2.1

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 (372) hide show
  1. package/README.md +44 -28
  2. package/dist/{chunk-X4SWFATC.js → chunk-BI4ZNSKA.js} +38 -24
  3. package/dist/{chunk-HCEWINSB.js → chunk-N6EBIDN7.js} +99 -102
  4. package/dist/cli.js +2 -2
  5. package/dist/index.js +2 -2
  6. package/dist/tools-WPRY5MJ6.js +2 -0
  7. package/package.json +10 -1
  8. package/skills/github-commander/SKILL.md +151 -0
  9. package/skills/github-commander/config/project-config.example.md +125 -0
  10. package/skills/github-commander/workflows/code-quality-audit.md +80 -0
  11. package/skills/github-commander/workflows/full-audit.md +134 -0
  12. package/skills/github-commander/workflows/issue-triage.md +239 -0
  13. package/skills/github-commander/workflows/milestone-sprint.md +81 -0
  14. package/skills/github-commander/workflows/perf-audit.md +142 -0
  15. package/skills/github-commander/workflows/pr-review.md +123 -0
  16. package/skills/github-commander/workflows/security-audit.md +170 -0
  17. package/skills/github-commander/workflows/update-deps.md +109 -0
  18. package/.dockerignore +0 -139
  19. package/.gitattributes +0 -20
  20. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -95
  21. package/.github/ISSUE_TEMPLATE/config.yml +0 -11
  22. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -110
  23. package/.github/ISSUE_TEMPLATE/question.md +0 -78
  24. package/.github/aw/actions-lock.json +0 -14
  25. package/.github/copilot-instructions.md +0 -122
  26. package/.github/dependabot.yml +0 -93
  27. package/.github/pull_request_template.md +0 -135
  28. package/.github/workflows/README.md +0 -133
  29. package/.github/workflows/agentics-maintenance.yml +0 -141
  30. package/.github/workflows/auto-release.yml +0 -68
  31. package/.github/workflows/ci-health-monitor.lock.yml +0 -1121
  32. package/.github/workflows/ci-health-monitor.md +0 -87
  33. package/.github/workflows/codeql.yml +0 -41
  34. package/.github/workflows/dependabot-auto-merge.yml +0 -42
  35. package/.github/workflows/dependency-maintenance.lock.yml +0 -1182
  36. package/.github/workflows/dependency-maintenance.md +0 -147
  37. package/.github/workflows/docker-publish.yml +0 -254
  38. package/.github/workflows/docs-drift-detector.lock.yml +0 -1142
  39. package/.github/workflows/docs-drift-detector.md +0 -115
  40. package/.github/workflows/lint-and-test.yml +0 -60
  41. package/.github/workflows/publish-npm.yml +0 -85
  42. package/.github/workflows/secrets-scanning.yml +0 -32
  43. package/.github/workflows/security-update.yml +0 -127
  44. package/.gitleaks.toml +0 -9
  45. package/.prettierignore +0 -21
  46. package/.prettierrc +0 -33
  47. package/.scout-ignore +0 -12
  48. package/.trivyignore +0 -21
  49. package/CHANGELOG.md +0 -1814
  50. package/CODE_OF_CONDUCT.md +0 -133
  51. package/CONTRIBUTING.md +0 -263
  52. package/DOCKER_README.md +0 -331
  53. package/Dockerfile +0 -128
  54. package/SECURITY.md +0 -227
  55. package/UNRELEASED.md +0 -1
  56. package/dist/tools-T4U5A3X4.js +0 -2
  57. package/docker-compose.yml +0 -71
  58. package/docs/README.md +0 -18
  59. package/docs/agentic-journal-synergy.md +0 -175
  60. package/docs/copilot-setup.md +0 -72
  61. package/eslint.config.js +0 -110
  62. package/mcp-config-example.json +0 -21
  63. package/playwright.config.ts +0 -35
  64. package/releases/v2.1.0.md +0 -220
  65. package/releases/v2.2.0.md +0 -168
  66. package/releases/v3.0.0.md +0 -237
  67. package/releases/v3.1.0.md +0 -104
  68. package/releases/v3.1.1.md +0 -42
  69. package/releases/v3.1.2.md +0 -40
  70. package/releases/v3.1.3.md +0 -64
  71. package/releases/v3.1.4.md +0 -32
  72. package/releases/v3.1.5.md +0 -44
  73. package/releases/v4.0.0.md +0 -71
  74. package/releases/v4.1.0.md +0 -88
  75. package/releases/v4.2.0.md +0 -90
  76. package/releases/v4.3.0.md +0 -92
  77. package/releases/v4.3.1.md +0 -69
  78. package/releases/v4.4.0.md +0 -120
  79. package/releases/v4.4.1.md +0 -33
  80. package/releases/v4.4.2.md +0 -31
  81. package/releases/v4.5.0.md +0 -116
  82. package/releases/v5.0.0.md +0 -105
  83. package/releases/v5.0.1.md +0 -25
  84. package/releases/v5.1.0.md +0 -83
  85. package/releases/v5.1.1.md +0 -10
  86. package/releases/v6.0.0.md +0 -48
  87. package/releases/v6.0.1.md +0 -36
  88. package/releases/v6.1.0.md +0 -68
  89. package/releases/v6.1.1.md +0 -30
  90. package/releases/v6.1.2.md +0 -23
  91. package/scripts/generate-server-instructions.ts +0 -306
  92. package/scripts/server-instructions-function-body.ts +0 -107
  93. package/scripts/server-instructions-gotchas.ts +0 -45
  94. package/server.json +0 -42
  95. package/social-preview.png +0 -0
  96. package/src/auth/auth-context.ts +0 -78
  97. package/src/auth/authorization-server-discovery.ts +0 -263
  98. package/src/auth/errors.ts +0 -215
  99. package/src/auth/index.ts +0 -58
  100. package/src/auth/middleware.ts +0 -392
  101. package/src/auth/oauth-resource-server.ts +0 -170
  102. package/src/auth/scope-map.ts +0 -46
  103. package/src/auth/scopes.ts +0 -256
  104. package/src/auth/token-validator.ts +0 -293
  105. package/src/auth/transport-agnostic.ts +0 -164
  106. package/src/auth/types.ts +0 -372
  107. package/src/cli.ts +0 -279
  108. package/src/codemode/api-constants.ts +0 -263
  109. package/src/codemode/api.ts +0 -302
  110. package/src/codemode/auto-return.ts +0 -65
  111. package/src/codemode/index.ts +0 -47
  112. package/src/codemode/sandbox-factory.ts +0 -144
  113. package/src/codemode/sandbox.ts +0 -220
  114. package/src/codemode/security.ts +0 -155
  115. package/src/codemode/types.ts +0 -228
  116. package/src/codemode/worker-sandbox.ts +0 -277
  117. package/src/codemode/worker-script.ts +0 -239
  118. package/src/constants/icons.ts +0 -183
  119. package/src/constants/server-instructions.md +0 -166
  120. package/src/constants/server-instructions.ts +0 -514
  121. package/src/database/adapter-factory.ts +0 -16
  122. package/src/database/core/entry-columns.ts +0 -10
  123. package/src/database/core/interfaces.ts +0 -188
  124. package/src/database/core/schema.ts +0 -152
  125. package/src/database/sqlite-adapter/backup.ts +0 -167
  126. package/src/database/sqlite-adapter/entries/crud.ts +0 -233
  127. package/src/database/sqlite-adapter/entries/importance.ts +0 -76
  128. package/src/database/sqlite-adapter/entries/index.ts +0 -142
  129. package/src/database/sqlite-adapter/entries/search.ts +0 -294
  130. package/src/database/sqlite-adapter/entries/shared.ts +0 -102
  131. package/src/database/sqlite-adapter/entries/statistics.ts +0 -162
  132. package/src/database/sqlite-adapter/index.ts +0 -265
  133. package/src/database/sqlite-adapter/native-connection.ts +0 -301
  134. package/src/database/sqlite-adapter/relationships.ts +0 -70
  135. package/src/database/sqlite-adapter/tags.ts +0 -182
  136. package/src/filtering/tool-filter.ts +0 -312
  137. package/src/github/github-integration/client.ts +0 -114
  138. package/src/github/github-integration/index.ts +0 -297
  139. package/src/github/github-integration/insights.ts +0 -155
  140. package/src/github/github-integration/issues.ts +0 -213
  141. package/src/github/github-integration/milestones.ts +0 -262
  142. package/src/github/github-integration/projects.ts +0 -414
  143. package/src/github/github-integration/pull-requests.ts +0 -235
  144. package/src/github/github-integration/repository.ts +0 -110
  145. package/src/github/github-integration/types.ts +0 -43
  146. package/src/handlers/prompts/github.ts +0 -210
  147. package/src/handlers/prompts/index.ts +0 -97
  148. package/src/handlers/prompts/workflow.ts +0 -361
  149. package/src/handlers/resources/core/briefing/context-section.ts +0 -182
  150. package/src/handlers/resources/core/briefing/github-section.ts +0 -354
  151. package/src/handlers/resources/core/briefing/index.ts +0 -106
  152. package/src/handlers/resources/core/briefing/user-message.ts +0 -114
  153. package/src/handlers/resources/core/health.ts +0 -75
  154. package/src/handlers/resources/core/index.ts +0 -31
  155. package/src/handlers/resources/core/instructions.ts +0 -45
  156. package/src/handlers/resources/core/utilities.ts +0 -310
  157. package/src/handlers/resources/github.ts +0 -340
  158. package/src/handlers/resources/graph.ts +0 -218
  159. package/src/handlers/resources/help.ts +0 -410
  160. package/src/handlers/resources/index.ts +0 -143
  161. package/src/handlers/resources/shared.ts +0 -219
  162. package/src/handlers/resources/team.ts +0 -134
  163. package/src/handlers/resources/templates.ts +0 -334
  164. package/src/handlers/tools/admin.ts +0 -351
  165. package/src/handlers/tools/analytics.ts +0 -346
  166. package/src/handlers/tools/backup.ts +0 -272
  167. package/src/handlers/tools/codemode.ts +0 -188
  168. package/src/handlers/tools/core.ts +0 -359
  169. package/src/handlers/tools/error-fields-mixin.ts +0 -10
  170. package/src/handlers/tools/export.ts +0 -150
  171. package/src/handlers/tools/github/copilot-tools.ts +0 -72
  172. package/src/handlers/tools/github/helpers.ts +0 -125
  173. package/src/handlers/tools/github/insights-tools.ts +0 -112
  174. package/src/handlers/tools/github/issue-tools.ts +0 -442
  175. package/src/handlers/tools/github/kanban-tools.ts +0 -153
  176. package/src/handlers/tools/github/milestone-tools.ts +0 -371
  177. package/src/handlers/tools/github/mutation-tools.ts +0 -17
  178. package/src/handlers/tools/github/read-tools.ts +0 -302
  179. package/src/handlers/tools/github/schemas.ts +0 -435
  180. package/src/handlers/tools/github.ts +0 -39
  181. package/src/handlers/tools/index.ts +0 -255
  182. package/src/handlers/tools/relationships.ts +0 -390
  183. package/src/handlers/tools/schemas.ts +0 -165
  184. package/src/handlers/tools/search.ts +0 -448
  185. package/src/handlers/tools/team/admin-tools.ts +0 -164
  186. package/src/handlers/tools/team/analytics-tools.ts +0 -233
  187. package/src/handlers/tools/team/backup-tools.ts +0 -83
  188. package/src/handlers/tools/team/core-tools.ts +0 -197
  189. package/src/handlers/tools/team/export-tools.ts +0 -130
  190. package/src/handlers/tools/team/helpers.ts +0 -66
  191. package/src/handlers/tools/team/index.ts +0 -45
  192. package/src/handlers/tools/team/relationship-tools.ts +0 -219
  193. package/src/handlers/tools/team/schemas.ts +0 -558
  194. package/src/handlers/tools/team/search-tools.ts +0 -145
  195. package/src/handlers/tools/team/vector-tools.ts +0 -261
  196. package/src/index.ts +0 -57
  197. package/src/server/mcp-server.ts +0 -446
  198. package/src/server/registration.ts +0 -141
  199. package/src/server/scheduler.ts +0 -283
  200. package/src/transports/http/handlers.ts +0 -78
  201. package/src/transports/http/index.ts +0 -8
  202. package/src/transports/http/security.ts +0 -147
  203. package/src/transports/http/server/index.ts +0 -397
  204. package/src/transports/http/server/legacy-sse.ts +0 -87
  205. package/src/transports/http/server/stateful.ts +0 -222
  206. package/src/transports/http/server/stateless.ts +0 -42
  207. package/src/transports/http/types.ts +0 -132
  208. package/src/types/entities.ts +0 -145
  209. package/src/types/error-types.ts +0 -92
  210. package/src/types/errors.ts +0 -200
  211. package/src/types/filtering.ts +0 -55
  212. package/src/types/github.ts +0 -216
  213. package/src/types/index.ts +0 -348
  214. package/src/utils/error-helpers.ts +0 -78
  215. package/src/utils/errors/error-response-fields.ts +0 -29
  216. package/src/utils/errors/suggestions.ts +0 -94
  217. package/src/utils/github-helpers.ts +0 -33
  218. package/src/utils/logger.ts +0 -107
  219. package/src/utils/mcp-logger.ts +0 -155
  220. package/src/utils/progress-utils.ts +0 -100
  221. package/src/utils/query-helpers.ts +0 -78
  222. package/src/utils/resource-annotations.ts +0 -75
  223. package/src/utils/security-utils.ts +0 -198
  224. package/src/utils/vector-index-helpers.ts +0 -24
  225. package/src/vector/vector-search-manager.ts +0 -409
  226. package/src/version.ts +0 -15
  227. package/test-server/README.md +0 -193
  228. package/test-server/code-map.md +0 -399
  229. package/test-server/test-agent-experience.md +0 -213
  230. package/test-server/test-filter-instructions.mjs +0 -295
  231. package/test-server/test-instruction-levels.mjs +0 -102
  232. package/test-server/test-preflight.md +0 -55
  233. package/test-server/test-prompts.mjs +0 -185
  234. package/test-server/test-scheduler.mjs +0 -174
  235. package/test-server/test-tool-annotations.mjs +0 -115
  236. package/test-server/test-tools-codemode.md +0 -632
  237. package/test-server/test-tools-codemode2.md +0 -1218
  238. package/test-server/test-tools-team.md +0 -215
  239. package/test-server/test-tools.md +0 -429
  240. package/test-server/test-tools2.md +0 -361
  241. package/test-server/test-tools3.md +0 -396
  242. package/test-server/tool-reference.md +0 -231
  243. package/tests/README.md +0 -54
  244. package/tests/auth/auth-context.test.ts +0 -162
  245. package/tests/auth/authorization-server-discovery.test.ts +0 -265
  246. package/tests/auth/errors.test.ts +0 -170
  247. package/tests/auth/middleware.test.ts +0 -585
  248. package/tests/auth/oauth-resource-server.test.ts +0 -173
  249. package/tests/auth/scope-map.test.ts +0 -66
  250. package/tests/auth/scopes.test.ts +0 -347
  251. package/tests/auth/token-validator.test.ts +0 -271
  252. package/tests/codemode/api.test.ts +0 -396
  253. package/tests/codemode/auto-return.test.ts +0 -167
  254. package/tests/codemode/codemode-tool-handlers.test.ts +0 -197
  255. package/tests/codemode/sandbox-factory.test.ts +0 -152
  256. package/tests/codemode/sandbox.test.ts +0 -190
  257. package/tests/codemode/security.test.ts +0 -242
  258. package/tests/codemode/worker-sandbox.test.ts +0 -106
  259. package/tests/constants/icons.test.ts +0 -101
  260. package/tests/constants/server-instructions.test.ts +0 -514
  261. package/tests/database/crud-workflow-branches.test.ts +0 -418
  262. package/tests/database/database-branches.test.ts +0 -132
  263. package/tests/database/entries-auth-branches.test.ts +0 -390
  264. package/tests/database/native-connection.test.ts +0 -249
  265. package/tests/database/shared-helpers.test.ts +0 -103
  266. package/tests/database/sqlite-adapter.bench.ts +0 -63
  267. package/tests/database/sqlite-adapter.test.ts +0 -690
  268. package/tests/database/tags.test.ts +0 -134
  269. package/tests/e2e/README.md +0 -39
  270. package/tests/e2e/auth.spec.ts +0 -106
  271. package/tests/e2e/codemode-abuse.spec.ts +0 -75
  272. package/tests/e2e/health.spec.ts +0 -63
  273. package/tests/e2e/helpers.ts +0 -139
  274. package/tests/e2e/oauth-discovery.spec.ts +0 -102
  275. package/tests/e2e/oauth-scopes.spec.ts +0 -222
  276. package/tests/e2e/payloads-admin.spec.ts +0 -76
  277. package/tests/e2e/payloads-analytics.spec.ts +0 -37
  278. package/tests/e2e/payloads-backup-restore.spec.ts +0 -102
  279. package/tests/e2e/payloads-backup.spec.ts +0 -44
  280. package/tests/e2e/payloads-codemode-api.spec.ts +0 -131
  281. package/tests/e2e/payloads-codemode-readonly.spec.ts +0 -116
  282. package/tests/e2e/payloads-codemode.spec.ts +0 -116
  283. package/tests/e2e/payloads-core.spec.ts +0 -82
  284. package/tests/e2e/payloads-error-contracts.spec.ts +0 -159
  285. package/tests/e2e/payloads-export.spec.ts +0 -46
  286. package/tests/e2e/payloads-github-degradation.spec.ts +0 -73
  287. package/tests/e2e/payloads-github.spec.ts +0 -176
  288. package/tests/e2e/payloads-relationships.spec.ts +0 -56
  289. package/tests/e2e/payloads-search.spec.ts +0 -64
  290. package/tests/e2e/payloads-team-happy.spec.ts +0 -231
  291. package/tests/e2e/payloads-team.spec.ts +0 -174
  292. package/tests/e2e/prompts-expanded.spec.ts +0 -137
  293. package/tests/e2e/prompts.spec.ts +0 -62
  294. package/tests/e2e/protocols.spec.ts +0 -134
  295. package/tests/e2e/rate-limiting.spec.ts +0 -291
  296. package/tests/e2e/resources-briefing-env.spec.ts +0 -106
  297. package/tests/e2e/resources-complete.spec.ts +0 -180
  298. package/tests/e2e/resources-expanded.spec.ts +0 -83
  299. package/tests/e2e/resources-instructions-levels.spec.ts +0 -145
  300. package/tests/e2e/resources-templates.spec.ts +0 -123
  301. package/tests/e2e/resources.spec.ts +0 -103
  302. package/tests/e2e/scheduler.spec.ts +0 -79
  303. package/tests/e2e/security.spec.ts +0 -112
  304. package/tests/e2e/session-advanced.spec.ts +0 -152
  305. package/tests/e2e/sessions.spec.ts +0 -95
  306. package/tests/e2e/stateless.spec.ts +0 -79
  307. package/tests/e2e/streaming.spec.ts +0 -176
  308. package/tests/e2e/tool-filtering-presets.spec.ts +0 -192
  309. package/tests/e2e/tool-filtering.spec.ts +0 -77
  310. package/tests/e2e/tools.spec.ts +0 -111
  311. package/tests/filtering/tool-filter.test.ts +0 -314
  312. package/tests/github/client-issues-errors.test.ts +0 -433
  313. package/tests/github/github-integration-branches.test.ts +0 -490
  314. package/tests/github/github-integration.test.ts +0 -1015
  315. package/tests/github/github-managers-branches.test.ts +0 -907
  316. package/tests/github/pull-requests.test.ts +0 -334
  317. package/tests/handlers/analytics-branches.test.ts +0 -222
  318. package/tests/handlers/backup-branches.test.ts +0 -270
  319. package/tests/handlers/briefing-context-section.test.ts +0 -388
  320. package/tests/handlers/briefing-github-section.test.ts +0 -392
  321. package/tests/handlers/briefing-user-message.test.ts +0 -405
  322. package/tests/handlers/codemode-tools.test.ts +0 -85
  323. package/tests/handlers/copilot-tools.test.ts +0 -126
  324. package/tests/handlers/error-path-coverage.test.ts +0 -324
  325. package/tests/handlers/export-tools.test.ts +0 -203
  326. package/tests/handlers/github-resource-handlers.test.ts +0 -929
  327. package/tests/handlers/github-tool-handlers.test.ts +0 -1452
  328. package/tests/handlers/handler-error-branches.test.ts +0 -346
  329. package/tests/handlers/help-resource.test.ts +0 -92
  330. package/tests/handlers/prompt-handler-coverage.test.ts +0 -108
  331. package/tests/handlers/prompt-handlers.test.ts +0 -131
  332. package/tests/handlers/resource-handler-coverage.test.ts +0 -281
  333. package/tests/handlers/resource-handlers.test.ts +0 -357
  334. package/tests/handlers/resource-prompt-branches.test.ts +0 -495
  335. package/tests/handlers/search-tool-handlers.test.ts +0 -379
  336. package/tests/handlers/targeted-gap-closure.test.ts +0 -387
  337. package/tests/handlers/team-admin.test.ts +0 -291
  338. package/tests/handlers/team-analytics.test.ts +0 -220
  339. package/tests/handlers/team-core.test.ts +0 -148
  340. package/tests/handlers/team-data.test.ts +0 -198
  341. package/tests/handlers/team-relationships.test.ts +0 -271
  342. package/tests/handlers/team-resource-handlers.test.ts +0 -161
  343. package/tests/handlers/team-search.test.ts +0 -134
  344. package/tests/handlers/team-tool-handlers.test.ts +0 -301
  345. package/tests/handlers/team-vector.test.ts +0 -213
  346. package/tests/handlers/template-github-branches.test.ts +0 -676
  347. package/tests/handlers/tool-annotations.test.ts +0 -90
  348. package/tests/handlers/tool-handler-coverage.test.ts +0 -514
  349. package/tests/handlers/tool-handlers.test.ts +0 -510
  350. package/tests/handlers/tool-output-schemas.test.ts +0 -116
  351. package/tests/handlers/vector-tool-handlers.test.ts +0 -238
  352. package/tests/security/sql-injection.test.ts +0 -284
  353. package/tests/server/mcp-server.bench.ts +0 -55
  354. package/tests/server/mcp-server.test.ts +0 -1326
  355. package/tests/server/scheduler.test.ts +0 -400
  356. package/tests/transports/http-legacy-sse.test.ts +0 -275
  357. package/tests/transports/http-security.test.ts +0 -322
  358. package/tests/transports/http-stateful.test.ts +0 -487
  359. package/tests/transports/http-transport-server.test.ts +0 -301
  360. package/tests/transports/http-transport.test.ts +0 -771
  361. package/tests/utils/github-helpers.test.ts +0 -58
  362. package/tests/utils/logger.test.ts +0 -180
  363. package/tests/utils/mcp-logger.test.ts +0 -211
  364. package/tests/utils/progress-utils.test.ts +0 -156
  365. package/tests/utils/query-helpers.test.ts +0 -80
  366. package/tests/utils/security-utils.test.ts +0 -82
  367. package/tests/vector/vector-search-branches.test.ts +0 -111
  368. package/tests/vector/vector-search-manager.test.ts +0 -375
  369. package/tests/vector/vector-search.bench.ts +0 -48
  370. package/tsconfig.json +0 -42
  371. package/tsup.config.ts +0 -19
  372. package/vitest.config.ts +0 -25
@@ -1,409 +0,0 @@
1
- /**
2
- * Memory Journal MCP Server - Vector Search Manager
3
- *
4
- * Semantic search using @huggingface/transformers for embeddings
5
- * and sqlite-vec for vector indexing (stored in the same SQLite database).
6
- */
7
-
8
- // @huggingface/transformers is loaded lazily via dynamic import() in initialize()
9
- // to avoid 1.5s cold-start penalty from eagerly loading the module.
10
- import type { Database as BetterSqlite3Database } from 'better-sqlite3'
11
- import { logger } from '../utils/logger.js'
12
- import type { IDatabaseAdapter } from '../database/core/interfaces.js'
13
- import type { JournalEntry } from '../types/index.js'
14
- import { sendProgress, type ProgressContext } from '../utils/progress-utils.js'
15
- import { ConfigurationError } from '../types/errors.js'
16
-
17
- /** Default model for embeddings (same as Python version) */
18
- const DEFAULT_MODEL = 'Xenova/all-MiniLM-L6-v2'
19
-
20
- /** Embedding dimensions for all-MiniLM-L6-v2 */
21
- const EMBEDDING_DIMENSIONS = 384
22
-
23
- /** Number of entries to embed concurrently during rebuild */
24
- const REBUILD_BATCH_SIZE = 5
25
-
26
- /** Number of entries to fetch per page during rebuild */
27
- const REBUILD_PAGE_SIZE = 200
28
-
29
- /** Search result with similarity score */
30
- export interface SemanticSearchResult {
31
- entryId: number
32
- score: number
33
- entry?: JournalEntry
34
- }
35
-
36
- /**
37
- * VectorSearchManager - Handles semantic search with local embeddings
38
- *
39
- * Stores embeddings in the same SQLite database using the sqlite-vec extension.
40
- * Uses vec0 virtual tables for efficient KNN vector search via SQL.
41
- */
42
- export class VectorSearchManager {
43
- // Use a more flexible type since FeatureExtractionPipeline doesn't fully implement Pipeline
44
- private embedder:
45
- | ((text: string, options?: Record<string, unknown>) => Promise<unknown>)
46
- | null = null
47
- private db: BetterSqlite3Database | null = null
48
- private readonly modelName: string
49
- private initialized = false
50
- private initializing = false
51
-
52
- constructor(
53
- private readonly dbAdapter: IDatabaseAdapter,
54
- modelName = DEFAULT_MODEL
55
- ) {
56
- this.modelName = modelName
57
- }
58
-
59
- /**
60
- * Check if vector search is initialized
61
- */
62
- isInitialized(): boolean {
63
- return this.initialized
64
- }
65
-
66
- /**
67
- * Initialize the vector search manager (lazy loading)
68
- */
69
- async initialize(): Promise<void> {
70
- if (this.initialized || this.initializing) return
71
-
72
- this.initializing = true
73
-
74
- try {
75
- logger.info('Initializing vector search...', { module: 'VectorSearch' })
76
-
77
- // Load embedding model (downloads on first use, ~23MB)
78
- // Dynamic import avoids 1.5s cold-start penalty from eagerly loading the module
79
- logger.info(`Loading embedding model: ${this.modelName}`, { module: 'VectorSearch' })
80
- const { pipeline } = await import('@huggingface/transformers')
81
- this.embedder = await pipeline('feature-extraction', this.modelName, {
82
- dtype: 'q8', // Quantized int8 for faster inference and smaller model size
83
- })
84
- logger.info('Embedding model loaded', { module: 'VectorSearch' })
85
-
86
- // Get the raw better-sqlite3 database instance
87
- // sqlite-vec extension is already loaded by NativeConnectionManager
88
- this.db = this.dbAdapter.getRawDb() as BetterSqlite3Database
89
-
90
- this.initialized = true
91
- this.initializing = false
92
- logger.info('Vector search initialized successfully', { module: 'VectorSearch' })
93
- } catch (error) {
94
- this.initializing = false
95
- logger.error('Failed to initialize vector search', {
96
- module: 'VectorSearch',
97
- error: error instanceof Error ? error.message : String(error),
98
- })
99
- throw error
100
- }
101
- }
102
-
103
- /**
104
- * Generate embedding for text
105
- */
106
- async generateEmbedding(text: string): Promise<number[]> {
107
- if (!this.embedder) {
108
- throw new ConfigurationError('Vector search not initialized')
109
- }
110
-
111
- // Generate embedding using feature-extraction pipeline
112
- // The pipeline returns a Tensor with a data property containing the embeddings
113
- const output = (await this.embedder(text, {
114
- pooling: 'mean',
115
- normalize: true,
116
- })) as { data: ArrayLike<number> }
117
-
118
- // Convert to number array
119
- const embedding = Array.from(output.data)
120
- return embedding
121
- }
122
-
123
- /**
124
- * Add an entry to the vector index (upsert - replaces if exists)
125
- */
126
- async addEntry(
127
- entryId: number,
128
- content: string
129
- ): Promise<{ success: boolean; error?: string }> {
130
- if (!this.initialized) {
131
- try {
132
- await this.initialize()
133
- } catch (initError) {
134
- const msg = initError instanceof Error ? initError.message : String(initError)
135
- return { success: false, error: `Vector search initialization failed: ${msg}` }
136
- }
137
- }
138
-
139
- if (!this.db) {
140
- return { success: false, error: 'Vector database not available' }
141
- }
142
-
143
- try {
144
- // Generate embedding
145
- const embedding = await this.generateEmbedding(content)
146
-
147
- // vec0 virtual tables don't support INSERT OR REPLACE — use DELETE+INSERT
148
- const vec = new Float32Array(embedding)
149
- const bigId = BigInt(entryId)
150
- // DELETE is a no-op if entry doesn't exist
151
- this.db.prepare('DELETE FROM vec_embeddings WHERE entry_id = ?').run(bigId)
152
- this.db
153
- .prepare('INSERT INTO vec_embeddings(entry_id, embedding) VALUES (?, ?)')
154
- .run(bigId, vec)
155
-
156
- logger.debug('Added entry to vector index', {
157
- module: 'VectorSearch',
158
- entityId: entryId,
159
- })
160
-
161
- return { success: true }
162
- } catch (error) {
163
- const errorMessage = error instanceof Error ? error.message : String(error)
164
- logger.error('Failed to add entry to vector index', {
165
- module: 'VectorSearch',
166
- entityId: entryId,
167
- error: errorMessage,
168
- })
169
- return { success: false, error: errorMessage }
170
- }
171
- }
172
-
173
- /**
174
- * Perform semantic search
175
- *
176
- * sqlite-vec returns L2 distance (lower = more similar).
177
- * We convert to a similarity score: score = 1 / (1 + distance)
178
- */
179
- async search(
180
- query: string,
181
- limit = 10,
182
- similarityThreshold = 0.3
183
- ): Promise<SemanticSearchResult[]> {
184
- if (!this.initialized) {
185
- try {
186
- await this.initialize()
187
- } catch {
188
- return []
189
- }
190
- }
191
-
192
- if (!this.db) {
193
- return []
194
- }
195
-
196
- try {
197
- // Generate query embedding
198
- const queryEmbedding = await this.generateEmbedding(query)
199
- const queryVec = new Float32Array(queryEmbedding)
200
-
201
- // KNN search via sqlite-vec vec0 virtual table
202
- // Returns entry_id and distance (L2), ordered by distance ascending
203
- const results = this.db
204
- .prepare(
205
- `SELECT entry_id, distance
206
- FROM vec_embeddings
207
- WHERE embedding MATCH ?
208
- ORDER BY distance
209
- LIMIT ?`
210
- )
211
- .all(queryVec, limit * 2) as { entry_id: number; distance: number }[]
212
-
213
- // Convert L2 distance to similarity score and filter by threshold
214
- const filteredResults: SemanticSearchResult[] = results
215
- .map((r) => ({
216
- entryId: r.entry_id,
217
- score: 1 / (1 + r.distance),
218
- }))
219
- .filter((r) => r.score >= similarityThreshold)
220
- .slice(0, limit)
221
-
222
- return filteredResults
223
- } catch (error) {
224
- logger.error('Semantic search failed', {
225
- module: 'VectorSearch',
226
- error: error instanceof Error ? error.message : String(error),
227
- })
228
- return []
229
- }
230
- }
231
-
232
- /**
233
- * Remove an entry from the vector index
234
- */
235
- removeEntry(entryId: number): boolean {
236
- if (!this.db) return false
237
-
238
- try {
239
- // sqlite-vec vec0 requires BigInt primary keys through better-sqlite3 bindings
240
- this.db.prepare('DELETE FROM vec_embeddings WHERE entry_id = ?').run(BigInt(entryId))
241
- return true
242
- } catch (error) {
243
- logger.debug('Vector removeEntry failed (item may not exist)', {
244
- module: 'VectorSearch',
245
- entityId: entryId,
246
- error: error instanceof Error ? error.message : String(error),
247
- })
248
- return false
249
- }
250
- }
251
-
252
- /**
253
- * Rebuild index from database entries.
254
- * Uses paginated fetching and parallel batch embedding for performance.
255
- * @param db - Database adapter
256
- * @param progress - Optional progress context for notifications
257
- */
258
- async rebuildIndex(
259
- db: IDatabaseAdapter,
260
- progress?: ProgressContext
261
- ): Promise<{ indexed: number; failed: number; firstError: string | null }> {
262
- if (!this.initialized) {
263
- try {
264
- await this.initialize()
265
- } catch (initError) {
266
- const msg = initError instanceof Error ? initError.message : String(initError)
267
- return {
268
- indexed: 0,
269
- failed: 0,
270
- firstError: `Vector search initialization failed: ${msg}`,
271
- }
272
- }
273
- }
274
-
275
- if (!this.db) {
276
- return { indexed: 0, failed: 0, firstError: null }
277
- }
278
-
279
- logger.info('Rebuilding vector index from database...', { module: 'VectorSearch' })
280
-
281
- // Step 1: Get total entry count for progress reporting
282
- const totalEntries = db.getActiveEntryCount()
283
-
284
- // Step 2: Clear existing embeddings (O(1) operation)
285
- this.db.prepare('DELETE FROM vec_embeddings').run()
286
- logger.info('Cleared vec_embeddings table for rebuild', { module: 'VectorSearch' })
287
-
288
- // Step 3: Re-index all entries using paginated fetch
289
- // Embeddings are generated in parallel batches (CPU-bound, safe),
290
- // then inserted into SQLite (synchronous, fast, concurrency-safe via WAL)
291
- await sendProgress(progress, 0, totalEntries, 'Starting vector index rebuild...')
292
-
293
- // Prepare insert statement once for reuse
294
- const insertStmt = this.db.prepare(
295
- 'INSERT INTO vec_embeddings(entry_id, embedding) VALUES (?, ?)'
296
- )
297
-
298
- let indexed = 0
299
- let failed = 0
300
- let firstError: string | null = null
301
- for (let offset = 0; offset < totalEntries; offset += REBUILD_PAGE_SIZE) {
302
- const page = db.getEntriesPage(offset, REBUILD_PAGE_SIZE)
303
-
304
- // Generate embeddings in parallel batches
305
- for (let i = 0; i < page.length; i += REBUILD_BATCH_SIZE) {
306
- const batch = page.slice(i, i + REBUILD_BATCH_SIZE)
307
-
308
- // Parallel embedding generation
309
- const embeddings = await Promise.all(
310
- batch.map(async (entry: JournalEntry) => {
311
- try {
312
- return {
313
- entry,
314
- embedding: await this.generateEmbedding(entry.content),
315
- error: null,
316
- }
317
- } catch (embError) {
318
- const errorMsg =
319
- embError instanceof Error ? embError.message : String(embError)
320
- logger.debug('Failed to generate embedding for entry', {
321
- module: 'VectorSearch',
322
- entityId: entry.id,
323
- error: errorMsg,
324
- })
325
- return { entry, embedding: null as number[] | null, error: errorMsg }
326
- }
327
- })
328
- )
329
-
330
- // Insert embeddings into SQLite
331
- for (const { entry, embedding, error: embError } of embeddings) {
332
- if (embedding !== null) {
333
- try {
334
- const vec = new Float32Array(embedding)
335
- // sqlite-vec vec0 requires BigInt primary keys through better-sqlite3 bindings
336
- insertStmt.run(BigInt(entry.id), vec)
337
- indexed++
338
- } catch (error) {
339
- failed++
340
- const errorMsg = error instanceof Error ? error.message : String(error)
341
- firstError ??= errorMsg
342
- logger.error('Failed to insert entry into vector index', {
343
- module: 'VectorSearch',
344
- entityId: entry.id,
345
- error: errorMsg,
346
- })
347
- }
348
- } else {
349
- failed++
350
- if (embError !== null) firstError ??= embError
351
- }
352
- }
353
-
354
- // Report progress every 10 entries to avoid flooding
355
- if (indexed % 10 === 0 || indexed === totalEntries) {
356
- await sendProgress(
357
- progress,
358
- indexed,
359
- totalEntries,
360
- `Indexed ${String(indexed)} of ${String(totalEntries)} entries`
361
- )
362
- }
363
- }
364
- }
365
-
366
- // Final progress
367
- await sendProgress(progress, indexed, totalEntries, 'Vector index rebuild complete')
368
-
369
- if (failed > 0) {
370
- logger.warning(
371
- `Vector index rebuild: ${String(indexed)} indexed, ${String(failed)} failed`,
372
- {
373
- module: 'VectorSearch',
374
- }
375
- )
376
- } else {
377
- logger.info(`Rebuilt vector index with ${String(indexed)} entries`, {
378
- module: 'VectorSearch',
379
- })
380
- }
381
- return { indexed, failed, firstError }
382
- }
383
-
384
- /**
385
- * Get index statistics
386
- */
387
- getStats(): { itemCount: number; modelName: string; dimensions: number } {
388
- if (!this.db) {
389
- return { itemCount: 0, modelName: this.modelName, dimensions: EMBEDDING_DIMENSIONS }
390
- }
391
-
392
- try {
393
- const result = this.db.prepare('SELECT COUNT(*) as count FROM vec_embeddings').get() as
394
- | { count: number }
395
- | undefined
396
- return {
397
- itemCount: result?.count ?? 0,
398
- modelName: this.modelName,
399
- dimensions: EMBEDDING_DIMENSIONS,
400
- }
401
- } catch (error) {
402
- logger.debug('Failed to get vector index stats', {
403
- module: 'VectorSearch',
404
- error: error instanceof Error ? error.message : String(error),
405
- })
406
- return { itemCount: 0, modelName: this.modelName, dimensions: EMBEDDING_DIMENSIONS }
407
- }
408
- }
409
- }
package/src/version.ts DELETED
@@ -1,15 +0,0 @@
1
- /**
2
- * Version SSoT — Single Source of Truth
3
- *
4
- * Reads the version from package.json at runtime via createRequire.
5
- * All modules that need the version string should import from here
6
- * instead of importing package.json directly.
7
- */
8
-
9
- import { createRequire } from 'node:module'
10
-
11
- const require = createRequire(import.meta.url)
12
- const pkg = require('../package.json') as { version: string }
13
-
14
- /** The current server version, read from package.json */
15
- export const VERSION: string = pkg.version
@@ -1,193 +0,0 @@
1
- # Memory Journal MCP Test Server — Agent Testing Instructions
2
-
3
- > **This README is optimized for AI agent consumption.** It serves as the primary orchestration document for running manual MCP functionality tests against the `memory-journal-mcp` service. Test `.db` files in this directory are `.gitignore`d.
4
-
5
- ## Files
6
-
7
- | File | Purpose | When to Read |
8
- | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- |
9
- | `test-tools.md` | **Pass 1: Core Functionality** — Phases 0-8, 10 covering seed data, happy paths, error paths, and feature verification for 41 core tools, 24 resources, 16 prompts, and scheduler | Always read first |
10
- | `test-tools-team.md` | **Pass 1b: Team Collaboration** — Phase 9 covering 20 team tools + 2 team resources | After Pass 1 completes |
11
- | `test-tools2.md` | **Pass 2: Validation & Edge Cases** — Phases 11-15 covering outputSchema validation, structured error verification, data integrity, boundary values, and implementation bug detection | After Pass 1 completes |
12
- | `test-tools-codemode.md` | **Pass 3: Code Mode** — Phases 16-21 covering sandbox execution, API discoverability, multi-step workflows, readonly mode, error handling, and cross-group orchestration | After Pass 1 completes |
13
- | `test-tools-codemode2.md` | **Pass 4: Code Mode Advanced** — Extended Code Mode scenarios | After Pass 3 completes |
14
-
15
- | `test-preflight.md` | **Pre-flight check** — validates tiered instructions, resources, and tool-filter alignment in 5 steps | Before any test pass |
16
- | `test-agent-experience.md` | **Agent experience test** — 23 open-ended scenarios across 4 passes validating instruction sufficiency for cold-start | After instruction changes |
17
- | [`tool-reference.md`](tool-reference.md) | **Tool Reference** — Categorized list of all 61 tools across 11 groups | Reference |
18
- | [`code-map.md`](code-map.md) | **Source Code Map** — Directory tree, handler→tool mapping, type locations, error hierarchy, key constants, architecture patterns | When debugging source code or making changes |
19
-
20
- ## Integration Test Scripts
21
-
22
- These scripts test features that require separate server processes — they **cannot** be run via MCP tool calls. All scripts are Node.js (`.mjs`), require no dependencies beyond Node.js, and exit with code 0 on success.
23
-
24
- > [!IMPORTANT]
25
- > Always `npm run build` before running these scripts — they execute `dist/cli.js` directly.
26
-
27
- ### Script Reference
28
-
29
- | Script | Tests | Transport | Duration |
30
- | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------- | ------------- | -------- |
31
- | `test-instruction-levels.mjs` | `--instruction-level` essential/standard/full token ordering | stdio | ~10s |
32
- | `test-filter-instructions.mjs` | Filter-aware sections — validates each `--tool-filter` config includes/excludes correct sections + reports token estimates per filter | stdio | ~90s |
33
- | `test-tool-annotations.mjs` | `tools/list` openWorldHint annotation counts (45 false + 16 true = 61) | stdio | ~5s |
34
- | `test-prompts.mjs` | `prompts/list` + `prompts/get` for all 16 prompts (shape + errors) | stdio | ~10s |
35
- | `test-scheduler.mjs` | Scheduler job execution (backup, vacuum, rebuild-index) | HTTP stateful | ~130s |
36
-
37
- ### Quick Run
38
-
39
- ```powershell
40
- cd C:\Users\chris\Desktop\memory-journal-mcp
41
- npm run build
42
-
43
- # Phase 1.3A — Instruction levels
44
- node test-server/test-instruction-levels.mjs
45
-
46
- # Phase 1.3B — Filter-aware instruction sections + token estimates
47
- node test-server/test-filter-instructions.mjs
48
-
49
- # Phase 1.3C — Tool annotations
50
- node test-server/test-tool-annotations.mjs
51
-
52
- # Phase 8 — Prompt handlers
53
- node test-server/test-prompts.mjs
54
-
55
- # Phase 9 — Scheduler (requires HTTP server in a separate terminal)
56
- node dist/cli.js --transport http --port 3099 --backup-interval 1 --keep-backups 3 --vacuum-interval 2 --rebuild-index-interval 2
57
- # In another terminal:
58
- node test-server/test-scheduler.mjs
59
- ```
60
-
61
- ### Scheduler Script Options
62
-
63
- | Env Variable | Default | Description |
64
- | -------------- | --------------------------- | -------------------------------------------------------------------- |
65
- | `MCP_URL` | `http://localhost:3099/mcp` | HTTP endpoint URL |
66
- | `WAIT_SECONDS` | `130` | Seconds to wait for jobs to fire (set to `0` for initial check only) |
67
-
68
- ### Dual Transport Notes
69
-
70
- The server supports three transport modes:
71
-
72
- | Mode | CLI Flags | Scheduler | Sessions |
73
- | -------------- | ------------------------------ | ----------- | ------------------------ |
74
- | stdio | `--transport stdio` (default) | ❌ Inactive | N/A |
75
- | HTTP stateful | `--transport http` | ✅ Active | `mcp-session-id` header |
76
- | HTTP stateless | `--transport http --stateless` | ✅ Active | No sessions (serverless) |
77
-
78
- The scheduler activates in **both** HTTP modes. The test script handles SSE response parsing automatically (HTTP transport returns `text/event-stream`). In stateless mode, there are no sessions so each request is independent — the scheduler still runs but session-scoped resources behave differently.
79
-
80
- ## Success Criteria
81
-
82
- ### Instruction Levels (Phase 1.3A)
83
-
84
- - [ ] essential (~1.2K tokens) < standard (~1.4K) < full (~6.7K)
85
- - [ ] No runtime errors in server logs
86
-
87
- ### Filter-Aware Instructions (Phase 1.3B)
88
-
89
- - [ ] 9/9 filter configs pass section presence/absence checks
90
- - [ ] `full` includes CORE + COPILOT + CODE_MODE + GITHUB_INTEGRATION + SEARCH_ROW (~1790 tokens)
91
- - [ ] `codemode` omits COPILOT + GITHUB_INTEGRATION + SEARCH_ROW (~1190 tokens)
92
- - [ ] `essential` — CORE + CODE_MODE only (~1214 tokens)
93
- - [ ] `starter` — CORE + CODE_MODE + SEARCH_ROW (~1250 tokens)
94
- - [ ] `core` — CORE only (~759 tokens)
95
- - [ ] `full -codemode` — COPILOT + GITHUB_INTEGRATION + SEARCH_ROW, no CODE_MODE (~1147 tokens)
96
- - [ ] `full -github` — CODE_MODE + SEARCH_ROW, no COPILOT/GITHUB_INTEGRATION (~1391 tokens)
97
- - [ ] `readonly` — CORE + SEARCH_ROW, no CODE_MODE/COPILOT/GITHUB_INTEGRATION (~771 tokens)
98
- - [ ] `full --instruction-level essential` — omits GITHUB_INTEGRATION but keeps COPILOT + CODE_MODE (~1582 tokens)
99
-
100
- ### Tool Annotations (Phase 1.3C)
101
-
102
- - [ ] 61 tools returned, all with `annotations` object
103
- - [ ] 45 tools with `openWorldHint: false`, 16 with `openWorldHint: true`, 0 missing
104
-
105
- ### Scheduler (Phase 9)
106
-
107
- - [ ] `memory://health` shows `scheduler.active: false` and empty `jobs` array in stdio mode
108
- - [ ] Server logs confirm scheduler started with correct intervals
109
- - [ ] `memory://health` shows all 3 jobs active with `nextRun` timestamps
110
- - [ ] Backup job creates timestamped `.db` files and prunes to `--keep-backups` limit
111
- - [ ] Vacuum job logs `PRAGMA optimize` completion
112
- - [ ] Rebuild-index job logs vector index rebuild with entry count
113
- - [ ] All `lastResult` values are `"success"` after jobs fire
114
- - [ ] `lastError` remains `null` for all jobs
115
- - [ ] Error in one job does not prevent others from running
116
-
117
- ## Conventions & Protocols
118
-
119
- | Convention | Rule |
120
- | ----------------------------- | -------------------------------------------------------------------------------------------------------------------- |
121
- | **Reporting** | ❌ Fail, ⚠️ Issue, 📦 Payload. ✅ inline only, omit from final summary. |
122
- | **Error testing** | Must return `{success: false, error: "...", code, category, suggestion, recoverable}`, NOT raw MCP error exceptions. |
123
- | **Error items in checklists** | Marked with 🔴 prefix |
124
- | **Post-test** | Clean up test databases/data → plan fixes → implement → lint+typecheck → changelog → commit (no push) |
125
-
126
- ## Connection Details & Portability
127
-
128
- The SQLite database path for `memory-journal-mcp` is entirely portable and **does not require code changes**.
129
-
130
- The server initializes its database locations using **Smart Path Resolution**:
131
-
132
- 1. If `--db` or `DB_PATH` is passed explicitly, it is used immediately.
133
- 2. If `memory_journal.db` exists in the root directory, it is used.
134
- 3. If `test-server/test-memory-journal.db` exists, it falls back to this test database automatically.
135
- 4. If neither exist, it creates a new `memory_journal.db` in the root.
136
-
137
- _(The identical fallback pattern applies to `--team-db` / `TEAM_DB_PATH` / `test-team-journal.db`)_.
138
-
139
- ### Automated Test Artifacts
140
-
141
- When you run automated testing (e.g., `npm run test:e2e` or `vitest`), the test suites generate isolated database artifacts into the `.test-output/` directory (gitignored):
142
-
143
- - `.test-output/e2e/test-e2e.db`
144
- - `.test-output/e2e/test-e2e-auth.db`
145
- - `.test-output/e2e/test-e2e-stateless.db`
146
- - `.test-output/e2e/test-isolation-dir/`
147
-
148
- **You do NOT need to maintain a copy of your real journal database here.** The test prompts and automated suites are designed for "from-scratch" database workflows.
149
-
150
- ## Agent Workflow
151
-
152
- 1. Read the server instructions you received during initialization, then `memory://briefing`.
153
- 2. Read `test-tools.md` for Pass 1 protocol, phases, and success criteria.
154
- 3. Execute via direct MCP tool calls. Run both happy-path and 🔴 error-path tests.
155
- 4. **Run integration test scripts** for Phase 1.3 (instruction levels, annotations), Phase 8 (prompts), and Phase 9 (scheduler).
156
- 5. Provide manual cleanup (e.g., deleting test nodes) if testing stateful behavior.
157
- 6. Report findings returning proper handler formatting.
158
- 7. (Optional) Run Pass 1b from `test-tools-team.md` for team collaboration testing.
159
- 8. (Optional) Run Pass 2 from `test-tools2.md` after Pass 1 completes successfully.
160
- 9. (Optional) Run Pass 3 from `test-tools-codemode.md` for Code Mode sandbox testing.
161
- 10. (Optional) Run Pass 4 from `test-tools-codemode2.md` for advanced Code Mode scenarios.
162
-
163
- ## Troubleshooting
164
-
165
- ### SQLite database locked
166
-
167
- The `memory-journal-mcp` uses `better-sqlite3` (native SQLite) in WAL mode. Lock errors are uncommon but can occur if multiple processes access the same `.db` file:
168
-
169
- 1. Stop all MCP server instances accessing the database
170
- 2. Delete any `*.db-journal` or `*.db-wal` files alongside the database
171
- 3. Restart a single server instance
172
-
173
- ### GitHub tools return "Could not auto-detect repository"
174
-
175
- 1. Verify `GITHUB_REPO_PATH` is set in `mcp_config.json` env
176
- 2. Verify the path points to a directory with a `.git` folder and a valid `origin` remote
177
- 3. Alternatively, pass `owner` and `repo` parameters explicitly in tool calls
178
-
179
- ### GitHub tools return 401/403
180
-
181
- 1. Verify `GITHUB_TOKEN` is set and not expired
182
- 2. Required scopes: `repo`, `project`, `read:org` (for org-level project discovery)
183
- 3. For traffic/insights data, the token needs push access to the repository
184
-
185
- ### Vector search returns no results
186
-
187
- 1. Run `rebuild_vector_index` to re-index all entries
188
- 2. Check `get_vector_index_stats` — if `itemCount: 0`, the index is empty
189
- 3. The first index build triggers ML model download (~30MB) — verify network access
190
-
191
- ### Team tools return "Team database not configured"
192
-
193
- Set `TEAM_DB_PATH` in `mcp_config.json` env or via `--team-db` CLI flag. The path can be any writable location.