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,155 +0,0 @@
1
- /**
2
- * Memory Journal MCP Server - MCP Protocol Logger
3
- *
4
- * Logging that sends structured messages via MCP notifications/message.
5
- * Falls back to stderr when MCP server is not connected.
6
- * Follows RFC 5424 severity levels as per MCP spec.
7
- */
8
-
9
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'
10
-
11
- /**
12
- * MCP log levels per RFC 5424
13
- */
14
- export type McpLogLevel =
15
- | 'debug'
16
- | 'info'
17
- | 'notice'
18
- | 'warning'
19
- | 'error'
20
- | 'critical'
21
- | 'alert'
22
- | 'emergency'
23
-
24
- const LOG_LEVEL_PRIORITY: Record<McpLogLevel, number> = {
25
- emergency: 0,
26
- alert: 1,
27
- critical: 2,
28
- error: 3,
29
- warning: 4,
30
- notice: 5,
31
- info: 6,
32
- debug: 7,
33
- }
34
-
35
- interface LogData {
36
- message: string
37
- module?: string
38
- operation?: string
39
- [key: string]: unknown
40
- }
41
-
42
- /**
43
- * MCP Protocol Logger
44
- *
45
- * Sends structured log messages via MCP notifications/message protocol.
46
- * Falls back to stderr when server not connected.
47
- */
48
- export class McpLogger {
49
- private server: McpServer | null = null
50
- private minLevel: McpLogLevel = 'info'
51
-
52
- /**
53
- * Connect to MCP server for protocol logging
54
- */
55
- setServer(server: McpServer): void {
56
- this.server = server
57
- }
58
-
59
- /**
60
- * Set minimum log level (from logging/setLevel request)
61
- */
62
- setLevel(level: McpLogLevel): void {
63
- if (level in LOG_LEVEL_PRIORITY) {
64
- this.minLevel = level
65
- }
66
- }
67
-
68
- /**
69
- * Get current minimum log level
70
- */
71
- getLevel(): McpLogLevel {
72
- return this.minLevel
73
- }
74
-
75
- /**
76
- * Check if a level should be logged
77
- */
78
- private shouldLog(level: McpLogLevel): boolean {
79
- return LOG_LEVEL_PRIORITY[level] <= LOG_LEVEL_PRIORITY[this.minLevel]
80
- }
81
-
82
- /**
83
- * Format message for stderr fallback
84
- */
85
- private formatForStderr(level: McpLogLevel, loggerName: string, data: LogData): string {
86
- const timestamp = new Date().toISOString()
87
- const levelUpper = level.toUpperCase().padEnd(9)
88
- const module = loggerName ? `[${loggerName}]` : ''
89
-
90
- let formatted = `[${timestamp}] [${levelUpper}] ${module} ${data.message}`
91
-
92
- // Add extra context (filter out message and module)
93
- const extras = Object.fromEntries(
94
- Object.entries(data).filter(([key]) => key !== 'message' && key !== 'module')
95
- )
96
-
97
- if (Object.keys(extras).length > 0) {
98
- formatted += ` ${JSON.stringify(extras)}`
99
- }
100
-
101
- return formatted
102
- }
103
-
104
- /**
105
- * Send log message via MCP protocol or fallback to stderr
106
- */
107
- log(level: McpLogLevel, loggerName: string, data: LogData): void {
108
- if (!this.shouldLog(level)) return
109
-
110
- // Send via MCP protocol if server connected
111
- if (this.server) {
112
- try {
113
- void this.server.sendLoggingMessage({
114
- level,
115
- logger: loggerName,
116
- data,
117
- })
118
- } catch {
119
- // Fallback to stderr if MCP send fails
120
- console.error(this.formatForStderr(level, loggerName, data))
121
- }
122
- }
123
-
124
- // Always also log to stderr for local debugging
125
- console.error(this.formatForStderr(level, loggerName, data))
126
- }
127
-
128
- // Convenience methods
129
- debug(loggerName: string, message: string, context?: Record<string, unknown>): void {
130
- this.log('debug', loggerName, { message, ...context })
131
- }
132
-
133
- info(loggerName: string, message: string, context?: Record<string, unknown>): void {
134
- this.log('info', loggerName, { message, ...context })
135
- }
136
-
137
- notice(loggerName: string, message: string, context?: Record<string, unknown>): void {
138
- this.log('notice', loggerName, { message, ...context })
139
- }
140
-
141
- warning(loggerName: string, message: string, context?: Record<string, unknown>): void {
142
- this.log('warning', loggerName, { message, ...context })
143
- }
144
-
145
- error(loggerName: string, message: string, context?: Record<string, unknown>): void {
146
- this.log('error', loggerName, { message, ...context })
147
- }
148
-
149
- critical(loggerName: string, message: string, context?: Record<string, unknown>): void {
150
- this.log('critical', loggerName, { message, ...context })
151
- }
152
- }
153
-
154
- // Singleton instance
155
- export const mcpLogger = new McpLogger()
@@ -1,100 +0,0 @@
1
- /**
2
- * Memory Journal MCP Server - Progress Notification Utilities
3
- *
4
- * Utilities for sending MCP progress notifications during long-running operations.
5
- * Follows MCP 2025-11-25 specification for notifications/progress.
6
- */
7
-
8
- /**
9
- * Minimal interface for sending MCP notifications.
10
- * Uses structural typing to avoid importing the deprecated Server class.
11
- */
12
- interface NotificationSender {
13
- notification(notification: {
14
- method: 'notifications/progress'
15
- params: {
16
- progressToken: string | number
17
- progress: number
18
- total?: number
19
- message?: string
20
- }
21
- }): Promise<void>
22
- }
23
-
24
- /** Progress token from client request _meta */
25
- export type ProgressToken = string | number
26
-
27
- /** Context required to send progress notifications */
28
- export interface ProgressContext {
29
- /** Object with notification method for sending progress updates */
30
- server: NotificationSender
31
- /** Progress token from request _meta (if client requested progress) */
32
- progressToken?: ProgressToken
33
- }
34
-
35
- /**
36
- * Send a progress notification to the client.
37
- *
38
- * Only sends if a progressToken was provided in the original request.
39
- * Silently no-ops if no token was provided.
40
- *
41
- * @param ctx - Progress context with server and optional token
42
- * @param progress - Current progress value (e.g., items processed)
43
- * @param total - Optional total value for percentage calculation
44
- * @param message - Optional human-readable status message
45
- */
46
- export async function sendProgress(
47
- ctx: ProgressContext | undefined,
48
- progress: number,
49
- total?: number,
50
- message?: string
51
- ): Promise<void> {
52
- // Early return if no context, no progressToken, or no server
53
- if (ctx === undefined) return
54
- if (ctx.progressToken === undefined) return
55
-
56
- try {
57
- // Use the underlying Protocol's notification method
58
- // The server extends Protocol which has notification() method
59
- const notification = {
60
- method: 'notifications/progress' as const,
61
- params: {
62
- progressToken: ctx.progressToken,
63
- progress,
64
- ...(total !== undefined && { total }),
65
- ...(message !== undefined && message !== '' && { message }),
66
- },
67
- }
68
-
69
- // Access the notification sender through the server's protocol
70
- // The Server class exposes notification() which we need to call directly
71
- await ctx.server.notification(notification)
72
- } catch {
73
- // Non-critical: progress notifications are best-effort
74
- // Don't let notification failures break the operation
75
- }
76
- }
77
-
78
- /**
79
- * Create a progress reporter function for batch operations.
80
- *
81
- * @param ctx - Progress context
82
- * @param total - Total number of items to process
83
- * @param throttle - Report every N items (default: 10)
84
- * @returns Async function to call on each item processed
85
- */
86
- export function createBatchProgressReporter(
87
- ctx: ProgressContext | undefined,
88
- total: number,
89
- throttle = 10
90
- ): (current: number, message?: string) => Promise<void> {
91
- let lastReported = 0
92
-
93
- return async (current: number, message?: string) => {
94
- // Report progress at throttle intervals or at completion
95
- if (current - lastReported >= throttle || current === total) {
96
- await sendProgress(ctx, current, total, message)
97
- lastReported = current
98
- }
99
- }
100
- }
@@ -1,78 +0,0 @@
1
- /**
2
- * Query Helpers — Input Coercion Utilities
3
- *
4
- * Standard coercion helpers that safely convert MCP SDK inputs (which may
5
- * arrive as strings due to JSON serialization) into their expected types.
6
- *
7
- * Used with `z.preprocess()` to ensure bad input reaches the handler's
8
- * try/catch instead of causing raw -32602 protocol errors.
9
- */
10
-
11
- // =============================================================================
12
- // Constants
13
- // =============================================================================
14
-
15
- /** Default number of rows returned by query tools */
16
- export const DEFAULT_QUERY_LIMIT = 100
17
-
18
- // =============================================================================
19
- // Coercion Functions
20
- // =============================================================================
21
-
22
- /**
23
- * Coerce a value to a number. Returns `undefined` for non-numeric input
24
- * so Zod treats it as "not provided" instead of producing NaN.
25
- *
26
- * Usage: `z.preprocess(coerceNumber, z.number().optional())`
27
- */
28
- export function coerceNumber(val: unknown): unknown {
29
- if (typeof val === 'number') return val
30
- if (typeof val === 'string') {
31
- const n = Number(val)
32
- return Number.isNaN(n) ? undefined : n
33
- }
34
- return undefined
35
- }
36
-
37
- /**
38
- * Coerce a value to a boolean. Handles string "true"/"false" from
39
- * MCP SDK serialization.
40
- *
41
- * Usage: `z.preprocess(coerceBoolean, z.boolean().optional())`
42
- */
43
- export function coerceBoolean(val: unknown): unknown {
44
- if (typeof val === 'boolean') return val
45
- if (val === 'true') return true
46
- if (val === 'false') return false
47
- return undefined
48
- }
49
-
50
- /**
51
- * Coerce a raw limit value to a usable number.
52
- * - `undefined` → `defaultLimit`
53
- * - `NaN` → `defaultLimit`
54
- * - `0` → `null` (meaning "unlimited")
55
- * - negative → `defaultLimit`
56
- * - positive → the value itself
57
- *
58
- * Works with both `z.preprocess(coerceNumber, ...)` and `z.coerce.number()`
59
- * outputs, safely handling NaN and undefined.
60
- */
61
- export function coerceLimit(
62
- raw: unknown,
63
- defaultLimit: number = DEFAULT_QUERY_LIMIT
64
- ): number | null {
65
- if (raw === undefined || raw === null) return defaultLimit
66
- const num = Number(raw)
67
- if (Number.isNaN(num)) return defaultLimit
68
- if (num === 0) return null
69
- return num > 0 ? num : defaultLimit
70
- }
71
-
72
- /**
73
- * Build a SQL LIMIT clause from a coerced limit value.
74
- * `null` means "no limit" — returns an empty string.
75
- */
76
- export function buildLimitClause(limitVal: number | null): string {
77
- return limitVal !== null ? ` LIMIT ${String(limitVal)}` : ''
78
- }
@@ -1,75 +0,0 @@
1
- /**
2
- * Resource Annotation Presets
3
- *
4
- * Centralized annotation presets for MCP resources following
5
- * MCP 2025-11-25 spec. Use these instead of inline annotation
6
- * objects to ensure consistency across all resource definitions.
7
- */
8
-
9
- // =============================================================================
10
- // Preset Types
11
- // =============================================================================
12
-
13
- interface ResourceAnnotation {
14
- audience?: ('user' | 'assistant')[]
15
- priority?: number
16
- autoRead?: boolean
17
- sessionInit?: boolean
18
- }
19
-
20
- // =============================================================================
21
- // Standard Presets
22
- // =============================================================================
23
-
24
- /** Critical state resources (health, schema, activity) — priority 0.9 */
25
- export const HIGH_PRIORITY: ResourceAnnotation = {
26
- priority: 0.9,
27
- audience: ['user', 'assistant'],
28
- }
29
-
30
- /** Analysis/monitoring resources (stats, indexes) — priority 0.6 */
31
- export const MEDIUM_PRIORITY: ResourceAnnotation = {
32
- priority: 0.6,
33
- audience: ['user', 'assistant'],
34
- }
35
-
36
- /** Supplementary resources (pool stats, extension status) — priority 0.4 */
37
- export const LOW_PRIORITY: ResourceAnnotation = {
38
- priority: 0.4,
39
- audience: ['user', 'assistant'],
40
- }
41
-
42
- /** Agent-only resources (capabilities, settings, instructions) — priority 0.5 */
43
- export const ASSISTANT_FOCUSED: ResourceAnnotation = {
44
- priority: 0.5,
45
- audience: ['assistant'],
46
- }
47
-
48
- // =============================================================================
49
- // Helpers
50
- // =============================================================================
51
-
52
- /**
53
- * Create a custom-priority annotation, optionally extending a base preset.
54
- */
55
- export function withPriority(
56
- priority: number,
57
- base: ResourceAnnotation = MEDIUM_PRIORITY
58
- ): ResourceAnnotation {
59
- return { ...base, priority }
60
- }
61
-
62
- /**
63
- * Clone a base annotation with autoRead flag set.
64
- * Useful for session-init resources that should be auto-read.
65
- */
66
- export function withAutoRead(base: ResourceAnnotation = HIGH_PRIORITY): ResourceAnnotation {
67
- return { ...base, autoRead: true }
68
- }
69
-
70
- /**
71
- * Clone a base annotation with sessionInit flag set.
72
- */
73
- export function withSessionInit(base: ResourceAnnotation = HIGH_PRIORITY): ResourceAnnotation {
74
- return { ...base, sessionInit: true }
75
- }
@@ -1,198 +0,0 @@
1
- import { execFileSync } from 'node:child_process'
2
- import { MemoryJournalMcpError } from '../types/errors.js'
3
- import { ErrorCategory } from '../types/error-types.js'
4
-
5
- /** Timeout for shelling out to git commands (ms) */
6
- const GIT_COMMAND_TIMEOUT_MS = 3000
7
-
8
- // ============================================================================
9
- // Typed Security Errors
10
- // ============================================================================
11
-
12
- /**
13
- * Base class for security-related errors.
14
- * Extends MemoryJournalMcpError with VALIDATION category.
15
- */
16
- export class SecurityError extends MemoryJournalMcpError {
17
- constructor(message: string, code: string) {
18
- super(message, code, ErrorCategory.VALIDATION, {
19
- suggestion: 'Check input for security violations',
20
- recoverable: false,
21
- })
22
- this.name = 'SecurityError'
23
- }
24
- }
25
-
26
- /**
27
- * Thrown when an invalid date format pattern is detected
28
- */
29
- export class InvalidDateFormatError extends SecurityError {
30
- constructor(value: string) {
31
- super(`Invalid date format pattern: '${value}'`, 'INVALID_DATE_FORMAT')
32
- this.name = 'InvalidDateFormatError'
33
- }
34
- }
35
-
36
- /**
37
- * Thrown when path traversal is detected in input
38
- */
39
- export class PathTraversalError extends SecurityError {
40
- constructor(path: string) {
41
- super(`Path traversal detected: '${path}'`, 'PATH_TRAVERSAL')
42
- this.name = 'PathTraversalError'
43
- }
44
- }
45
-
46
- // ============================================================================
47
- // Date Format Validation
48
- // ============================================================================
49
-
50
- /**
51
- * Whitelist of allowed strftime format patterns for SQLite.
52
- * These are the only patterns allowed to be interpolated into SQL.
53
- */
54
- const ALLOWED_DATE_FORMATS: Record<string, string> = {
55
- day: '%Y-%m-%d',
56
- week: '%Y-W%W',
57
- month: '%Y-%m',
58
- } as const
59
-
60
- export type DateGroupBy = 'day' | 'week' | 'month'
61
-
62
- /**
63
- * Validates and returns a safe strftime format pattern.
64
- *
65
- * @param groupBy - The grouping period ('day', 'week', or 'month')
66
- * @returns The validated strftime format pattern
67
- * @throws InvalidDateFormatError if the groupBy value is invalid
68
- *
69
- * @example
70
- * ```typescript
71
- * const format = validateDateFormatPattern('day') // Returns '%Y-%m-%d'
72
- * const format = validateDateFormatPattern('invalid') // Throws InvalidDateFormatError
73
- * ```
74
- */
75
- export function validateDateFormatPattern(groupBy: string): string {
76
- const format = ALLOWED_DATE_FORMATS[groupBy]
77
- if (!format) {
78
- throw new InvalidDateFormatError(groupBy)
79
- }
80
- return format
81
- }
82
-
83
- // ============================================================================
84
- // Search Query Sanitization
85
- // ============================================================================
86
-
87
- /**
88
- * Escapes special characters in LIKE patterns to prevent injection.
89
- * SQLite LIKE uses % and _ as wildcards.
90
- *
91
- * @param query - The user-provided search query
92
- * @returns Escaped query safe for use in LIKE patterns
93
- *
94
- * @example
95
- * ```typescript
96
- * sanitizeSearchQuery('100%') // Returns '100\\%'
97
- * sanitizeSearchQuery('test_value') // Returns 'test\\_value'
98
- * ```
99
- */
100
- export function sanitizeSearchQuery(query: string): string {
101
- // Escape backslashes first, then LIKE wildcards
102
- return query.replace(/\\/g, '\\\\').replace(/%/g, '\\%').replace(/_/g, '\\_')
103
- }
104
-
105
- // ============================================================================
106
- // Path Validation
107
- // ============================================================================
108
-
109
- /**
110
- * Validates that a filename does not contain path traversal characters.
111
- *
112
- * @param filename - The filename to validate
113
- * @throws PathTraversalError if path traversal is detected
114
- */
115
- export function assertNoPathTraversal(filename: string): void {
116
- if (filename.includes('/') || filename.includes('\\') || filename.includes('..')) {
117
- throw new PathTraversalError(filename)
118
- }
119
- }
120
-
121
- // ============================================================================
122
- // Error Message Sanitization
123
- // ============================================================================
124
-
125
- /**
126
- * Patterns that may contain sensitive tokens in error messages.
127
- * Used to scrub error output before logging.
128
- */
129
- const TOKEN_PATTERNS = [
130
- // GitHub personal access tokens (classic and fine-grained)
131
- /ghp_[A-Za-z0-9_]{36,}/g,
132
- /github_pat_[A-Za-z0-9_]{82,}/g,
133
- // Authorization headers in error dumps
134
- /Authorization:\s*(?:token|Bearer)\s+\S+/gi,
135
- // Generic Bearer tokens
136
- /Bearer\s+[A-Za-z0-9._\-~+/]+=*/gi,
137
- ] as const
138
-
139
- /**
140
- * Sanitizes an error message by replacing any detected tokens with '[REDACTED]'.
141
- * This is a defense-in-depth measure for error logging paths.
142
- *
143
- * @param message - The error message to sanitize
144
- * @returns The sanitized message with tokens replaced
145
- */
146
- export function sanitizeErrorForLogging(message: string): string {
147
- let sanitized = message
148
- for (const pattern of TOKEN_PATTERNS) {
149
- // Reset lastIndex for global regex patterns
150
- pattern.lastIndex = 0
151
- sanitized = sanitized.replace(pattern, '[REDACTED]')
152
- }
153
- return sanitized
154
- }
155
-
156
- // ============================================================================
157
- // Author Sanitization
158
- // ============================================================================
159
-
160
- /**
161
- * Sanitize an author string: strip control characters and cap length.
162
- * Prevents crafted git config or TEAM_AUTHOR values from injecting
163
- * control characters into the database or JSON payloads.
164
- *
165
- * @param raw - The raw author string from git config or environment
166
- * @returns Sanitized string with control characters removed and length capped at 100
167
- */
168
- export function sanitizeAuthor(raw: string): string {
169
- // eslint-disable-next-line no-control-regex
170
- return raw.replace(/[\x00-\x1f\x7f]/g, '').slice(0, 100)
171
- }
172
-
173
- // ============================================================================
174
- // Author Resolution
175
- // ============================================================================
176
-
177
- /**
178
- * Resolve the author name for team-shared entries.
179
- * Priority: TEAM_AUTHOR env → git config user.name → 'unknown'
180
- *
181
- * Uses sanitizeAuthor() to strip control characters and cap length.
182
- */
183
- export function resolveAuthor(): string {
184
- const envAuthor = process.env['TEAM_AUTHOR']?.trim().replace(/"/g, '')
185
- if (envAuthor) return sanitizeAuthor(envAuthor)
186
- try {
187
- const gitUser = execFileSync('git', ['config', 'user.name'], {
188
- encoding: 'utf-8',
189
- timeout: GIT_COMMAND_TIMEOUT_MS,
190
- })
191
- .trim()
192
- .replace(/"/g, '')
193
- if (gitUser) return sanitizeAuthor(gitUser)
194
- } catch {
195
- // Git not available
196
- }
197
- return 'unknown'
198
- }
@@ -1,24 +0,0 @@
1
- /**
2
- * Vector Index Helpers
3
- *
4
- * Shared fire-and-forget vector indexing logic used by entry-creation
5
- * handlers (create_entry, create_entry_minimal, restore_entry, etc.).
6
- */
7
-
8
- import type { VectorSearchManager } from '../vector/vector-search-manager.js'
9
-
10
- /**
11
- * Auto-index an entry to the vector store for semantic search.
12
- * Non-critical — failures are silently ignored because the entry
13
- * is already persisted in the database.
14
- */
15
- export function autoIndexEntry(
16
- vectorManager: VectorSearchManager | undefined,
17
- entryId: number,
18
- content: string
19
- ): void {
20
- if (vectorManager === undefined) return
21
- vectorManager.addEntry(entryId, content).catch(() => {
22
- // Non-critical failure — entry already saved to DB
23
- })
24
- }