engram-mcp-server 1.2.8 → 1.4.0

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 (288) hide show
  1. package/README.md +131 -24
  2. package/dist/constants.d.ts +12 -1
  3. package/dist/constants.d.ts.map +1 -1
  4. package/dist/constants.js +19 -1
  5. package/dist/constants.js.map +1 -1
  6. package/dist/database.d.ts +9 -0
  7. package/dist/database.d.ts.map +1 -1
  8. package/dist/database.js +16 -0
  9. package/dist/database.js.map +1 -1
  10. package/dist/index.js +16 -1
  11. package/dist/index.js.map +1 -1
  12. package/dist/installer/config-writer.d.ts +11 -2
  13. package/dist/installer/config-writer.d.ts.map +1 -1
  14. package/dist/installer/config-writer.js +28 -3
  15. package/dist/installer/config-writer.js.map +1 -1
  16. package/dist/installer/ide-detector.d.ts.map +1 -1
  17. package/dist/installer/ide-detector.js +10 -6
  18. package/dist/installer/ide-detector.js.map +1 -1
  19. package/dist/installer/index.d.ts.map +1 -1
  20. package/dist/installer/index.js +156 -23
  21. package/dist/installer/index.js.map +1 -1
  22. package/dist/repositories/changes.repo.d.ts.map +1 -1
  23. package/dist/repositories/changes.repo.js +5 -3
  24. package/dist/repositories/changes.repo.js.map +1 -1
  25. package/dist/repositories/config.repo.d.ts +5 -0
  26. package/dist/repositories/config.repo.d.ts.map +1 -1
  27. package/dist/repositories/config.repo.js +8 -0
  28. package/dist/repositories/config.repo.js.map +1 -1
  29. package/dist/repositories/decisions.repo.d.ts +8 -0
  30. package/dist/repositories/decisions.repo.d.ts.map +1 -1
  31. package/dist/repositories/decisions.repo.js +23 -0
  32. package/dist/repositories/decisions.repo.js.map +1 -1
  33. package/dist/repositories/file-notes.repo.d.ts +9 -0
  34. package/dist/repositories/file-notes.repo.d.ts.map +1 -1
  35. package/dist/repositories/file-notes.repo.js +22 -4
  36. package/dist/repositories/file-notes.repo.js.map +1 -1
  37. package/dist/response.d.ts +1 -0
  38. package/dist/response.d.ts.map +1 -1
  39. package/dist/response.js.map +1 -1
  40. package/dist/services/index.d.ts +2 -0
  41. package/dist/services/index.d.ts.map +1 -1
  42. package/dist/services/index.js +1 -0
  43. package/dist/services/index.js.map +1 -1
  44. package/dist/services/update.service.d.ts +29 -0
  45. package/dist/services/update.service.d.ts.map +1 -0
  46. package/dist/services/update.service.js +166 -0
  47. package/dist/services/update.service.js.map +1 -0
  48. package/dist/tools/backup.d.ts.map +1 -1
  49. package/dist/tools/backup.js +20 -45
  50. package/dist/tools/backup.js.map +1 -1
  51. package/dist/tools/changes.d.ts.map +1 -1
  52. package/dist/tools/changes.js +24 -33
  53. package/dist/tools/changes.js.map +1 -1
  54. package/dist/tools/compaction.d.ts.map +1 -1
  55. package/dist/tools/compaction.js +19 -72
  56. package/dist/tools/compaction.js.map +1 -1
  57. package/dist/tools/conventions.d.ts.map +1 -1
  58. package/dist/tools/conventions.js +9 -18
  59. package/dist/tools/conventions.js.map +1 -1
  60. package/dist/tools/decisions.d.ts.map +1 -1
  61. package/dist/tools/decisions.js +71 -45
  62. package/dist/tools/decisions.js.map +1 -1
  63. package/dist/tools/export-import.d.ts.map +1 -1
  64. package/dist/tools/export-import.js +21 -35
  65. package/dist/tools/export-import.js.map +1 -1
  66. package/dist/tools/file-notes.d.ts.map +1 -1
  67. package/dist/tools/file-notes.js +58 -36
  68. package/dist/tools/file-notes.js.map +1 -1
  69. package/dist/tools/intelligence.d.ts.map +1 -1
  70. package/dist/tools/intelligence.js +109 -164
  71. package/dist/tools/intelligence.js.map +1 -1
  72. package/dist/tools/milestones.d.ts.map +1 -1
  73. package/dist/tools/milestones.js +6 -10
  74. package/dist/tools/milestones.js.map +1 -1
  75. package/dist/tools/scheduler.d.ts.map +1 -1
  76. package/dist/tools/scheduler.js +42 -89
  77. package/dist/tools/scheduler.js.map +1 -1
  78. package/dist/tools/sessions.d.ts.map +1 -1
  79. package/dist/tools/sessions.js +131 -226
  80. package/dist/tools/sessions.js.map +1 -1
  81. package/dist/tools/stats.d.ts.map +1 -1
  82. package/dist/tools/stats.js +169 -8
  83. package/dist/tools/stats.js.map +1 -1
  84. package/dist/tools/tasks.d.ts.map +1 -1
  85. package/dist/tools/tasks.js +9 -20
  86. package/dist/tools/tasks.js.map +1 -1
  87. package/dist/utils.d.ts +9 -0
  88. package/dist/utils.d.ts.map +1 -1
  89. package/dist/utils.js +18 -0
  90. package/dist/utils.js.map +1 -1
  91. package/package.json +60 -52
  92. package/scripts/inject-release-notes.js +66 -0
  93. package/dist/installer.d.ts +0 -2
  94. package/dist/installer.d.ts.map +0 -1
  95. package/dist/installer.js +0 -315
  96. package/dist/installer.js.map +0 -1
  97. package/dist/src/constants.d.ts +0 -21
  98. package/dist/src/constants.d.ts.map +0 -1
  99. package/dist/src/constants.js +0 -81
  100. package/dist/src/constants.js.map +0 -1
  101. package/dist/src/database.d.ts +0 -32
  102. package/dist/src/database.d.ts.map +0 -1
  103. package/dist/src/database.js +0 -143
  104. package/dist/src/database.js.map +0 -1
  105. package/dist/src/errors.d.ts +0 -40
  106. package/dist/src/errors.d.ts.map +0 -1
  107. package/dist/src/errors.js +0 -63
  108. package/dist/src/errors.js.map +0 -1
  109. package/dist/src/index.d.ts +0 -3
  110. package/dist/src/index.d.ts.map +0 -1
  111. package/dist/src/index.js +0 -89
  112. package/dist/src/index.js.map +0 -1
  113. package/dist/src/installer/config-writer.d.ts +0 -25
  114. package/dist/src/installer/config-writer.d.ts.map +0 -1
  115. package/dist/src/installer/config-writer.js +0 -86
  116. package/dist/src/installer/config-writer.js.map +0 -1
  117. package/dist/src/installer/ide-configs.d.ts +0 -19
  118. package/dist/src/installer/ide-configs.d.ts.map +0 -1
  119. package/dist/src/installer/ide-configs.js +0 -131
  120. package/dist/src/installer/ide-configs.js.map +0 -1
  121. package/dist/src/installer/ide-detector.d.ts +0 -6
  122. package/dist/src/installer/ide-detector.d.ts.map +0 -1
  123. package/dist/src/installer/ide-detector.js +0 -45
  124. package/dist/src/installer/ide-detector.js.map +0 -1
  125. package/dist/src/installer/index.d.ts +0 -2
  126. package/dist/src/installer/index.d.ts.map +0 -1
  127. package/dist/src/installer/index.js +0 -229
  128. package/dist/src/installer/index.js.map +0 -1
  129. package/dist/src/logger.d.ts +0 -10
  130. package/dist/src/logger.d.ts.map +0 -1
  131. package/dist/src/logger.js +0 -51
  132. package/dist/src/logger.js.map +0 -1
  133. package/dist/src/migrations.d.ts +0 -4
  134. package/dist/src/migrations.d.ts.map +0 -1
  135. package/dist/src/migrations.js +0 -343
  136. package/dist/src/migrations.js.map +0 -1
  137. package/dist/src/repositories/changes.repo.d.ts +0 -35
  138. package/dist/src/repositories/changes.repo.d.ts.map +0 -1
  139. package/dist/src/repositories/changes.repo.js +0 -53
  140. package/dist/src/repositories/changes.repo.js.map +0 -1
  141. package/dist/src/repositories/config.repo.d.ts +0 -11
  142. package/dist/src/repositories/config.repo.d.ts.map +0 -1
  143. package/dist/src/repositories/config.repo.js +0 -38
  144. package/dist/src/repositories/config.repo.js.map +0 -1
  145. package/dist/src/repositories/conventions.repo.d.ts +0 -15
  146. package/dist/src/repositories/conventions.repo.d.ts.map +0 -1
  147. package/dist/src/repositories/conventions.repo.js +0 -39
  148. package/dist/src/repositories/conventions.repo.js.map +0 -1
  149. package/dist/src/repositories/decisions.repo.d.ts +0 -19
  150. package/dist/src/repositories/decisions.repo.d.ts.map +0 -1
  151. package/dist/src/repositories/decisions.repo.js +0 -48
  152. package/dist/src/repositories/decisions.repo.js.map +0 -1
  153. package/dist/src/repositories/events.repo.d.ts +0 -34
  154. package/dist/src/repositories/events.repo.d.ts.map +0 -1
  155. package/dist/src/repositories/events.repo.js +0 -71
  156. package/dist/src/repositories/events.repo.js.map +0 -1
  157. package/dist/src/repositories/file-notes.repo.d.ts +0 -26
  158. package/dist/src/repositories/file-notes.repo.d.ts.map +0 -1
  159. package/dist/src/repositories/file-notes.repo.js +0 -55
  160. package/dist/src/repositories/file-notes.repo.js.map +0 -1
  161. package/dist/src/repositories/index.d.ts +0 -38
  162. package/dist/src/repositories/index.d.ts.map +0 -1
  163. package/dist/src/repositories/index.js +0 -41
  164. package/dist/src/repositories/index.js.map +0 -1
  165. package/dist/src/repositories/milestones.repo.d.ts +0 -10
  166. package/dist/src/repositories/milestones.repo.d.ts.map +0 -1
  167. package/dist/src/repositories/milestones.repo.js +0 -20
  168. package/dist/src/repositories/milestones.repo.js.map +0 -1
  169. package/dist/src/repositories/sessions.repo.d.ts +0 -27
  170. package/dist/src/repositories/sessions.repo.d.ts.map +0 -1
  171. package/dist/src/repositories/sessions.repo.js +0 -61
  172. package/dist/src/repositories/sessions.repo.js.map +0 -1
  173. package/dist/src/repositories/snapshot.repo.d.ts +0 -11
  174. package/dist/src/repositories/snapshot.repo.d.ts.map +0 -1
  175. package/dist/src/repositories/snapshot.repo.js +0 -17
  176. package/dist/src/repositories/snapshot.repo.js.map +0 -1
  177. package/dist/src/repositories/tasks.repo.d.ts +0 -40
  178. package/dist/src/repositories/tasks.repo.d.ts.map +0 -1
  179. package/dist/src/repositories/tasks.repo.js +0 -90
  180. package/dist/src/repositories/tasks.repo.js.map +0 -1
  181. package/dist/src/response.d.ts +0 -28
  182. package/dist/src/response.d.ts.map +0 -1
  183. package/dist/src/response.js +0 -38
  184. package/dist/src/response.js.map +0 -1
  185. package/dist/src/scripts/install-hooks.d.ts +0 -3
  186. package/dist/src/scripts/install-hooks.d.ts.map +0 -1
  187. package/dist/src/scripts/install-hooks.js +0 -89
  188. package/dist/src/scripts/install-hooks.js.map +0 -1
  189. package/dist/src/services/compaction.service.d.ts +0 -27
  190. package/dist/src/services/compaction.service.d.ts.map +0 -1
  191. package/dist/src/services/compaction.service.js +0 -93
  192. package/dist/src/services/compaction.service.js.map +0 -1
  193. package/dist/src/services/event-trigger.service.d.ts +0 -24
  194. package/dist/src/services/event-trigger.service.d.ts.map +0 -1
  195. package/dist/src/services/event-trigger.service.js +0 -60
  196. package/dist/src/services/event-trigger.service.js.map +0 -1
  197. package/dist/src/services/git.service.d.ts +0 -20
  198. package/dist/src/services/git.service.d.ts.map +0 -1
  199. package/dist/src/services/git.service.js +0 -88
  200. package/dist/src/services/git.service.js.map +0 -1
  201. package/dist/src/services/index.d.ts +0 -5
  202. package/dist/src/services/index.d.ts.map +0 -1
  203. package/dist/src/services/index.js +0 -8
  204. package/dist/src/services/index.js.map +0 -1
  205. package/dist/src/services/project-scan.service.d.ts +0 -19
  206. package/dist/src/services/project-scan.service.d.ts.map +0 -1
  207. package/dist/src/services/project-scan.service.js +0 -66
  208. package/dist/src/services/project-scan.service.js.map +0 -1
  209. package/dist/src/tools/backup.d.ts +0 -3
  210. package/dist/src/tools/backup.d.ts.map +0 -1
  211. package/dist/src/tools/backup.js +0 -191
  212. package/dist/src/tools/backup.js.map +0 -1
  213. package/dist/src/tools/changes.d.ts +0 -3
  214. package/dist/src/tools/changes.d.ts.map +0 -1
  215. package/dist/src/tools/changes.js +0 -97
  216. package/dist/src/tools/changes.js.map +0 -1
  217. package/dist/src/tools/compaction.d.ts +0 -3
  218. package/dist/src/tools/compaction.d.ts.map +0 -1
  219. package/dist/src/tools/compaction.js +0 -151
  220. package/dist/src/tools/compaction.js.map +0 -1
  221. package/dist/src/tools/conventions.d.ts +0 -3
  222. package/dist/src/tools/conventions.d.ts.map +0 -1
  223. package/dist/src/tools/conventions.js +0 -121
  224. package/dist/src/tools/conventions.js.map +0 -1
  225. package/dist/src/tools/decisions.d.ts +0 -3
  226. package/dist/src/tools/decisions.d.ts.map +0 -1
  227. package/dist/src/tools/decisions.js +0 -136
  228. package/dist/src/tools/decisions.js.map +0 -1
  229. package/dist/src/tools/export-import.d.ts +0 -3
  230. package/dist/src/tools/export-import.d.ts.map +0 -1
  231. package/dist/src/tools/export-import.js +0 -180
  232. package/dist/src/tools/export-import.js.map +0 -1
  233. package/dist/src/tools/file-notes.d.ts +0 -3
  234. package/dist/src/tools/file-notes.d.ts.map +0 -1
  235. package/dist/src/tools/file-notes.js +0 -104
  236. package/dist/src/tools/file-notes.js.map +0 -1
  237. package/dist/src/tools/intelligence.d.ts +0 -3
  238. package/dist/src/tools/intelligence.d.ts.map +0 -1
  239. package/dist/src/tools/intelligence.js +0 -427
  240. package/dist/src/tools/intelligence.js.map +0 -1
  241. package/dist/src/tools/milestones.d.ts +0 -3
  242. package/dist/src/tools/milestones.d.ts.map +0 -1
  243. package/dist/src/tools/milestones.js +0 -71
  244. package/dist/src/tools/milestones.js.map +0 -1
  245. package/dist/src/tools/scheduler.d.ts +0 -3
  246. package/dist/src/tools/scheduler.d.ts.map +0 -1
  247. package/dist/src/tools/scheduler.js +0 -363
  248. package/dist/src/tools/scheduler.js.map +0 -1
  249. package/dist/src/tools/sessions.d.ts +0 -3
  250. package/dist/src/tools/sessions.d.ts.map +0 -1
  251. package/dist/src/tools/sessions.js +0 -356
  252. package/dist/src/tools/sessions.js.map +0 -1
  253. package/dist/src/tools/stats.d.ts +0 -3
  254. package/dist/src/tools/stats.d.ts.map +0 -1
  255. package/dist/src/tools/stats.js +0 -63
  256. package/dist/src/tools/stats.js.map +0 -1
  257. package/dist/src/tools/tasks.d.ts +0 -3
  258. package/dist/src/tools/tasks.d.ts.map +0 -1
  259. package/dist/src/tools/tasks.js +0 -206
  260. package/dist/src/tools/tasks.js.map +0 -1
  261. package/dist/src/types.d.ts +0 -170
  262. package/dist/src/types.d.ts.map +0 -1
  263. package/dist/src/types.js +0 -5
  264. package/dist/src/types.js.map +0 -1
  265. package/dist/src/utils.d.ts +0 -58
  266. package/dist/src/utils.d.ts.map +0 -1
  267. package/dist/src/utils.js +0 -190
  268. package/dist/src/utils.js.map +0 -1
  269. package/dist/tests/helpers/test-db.d.ts +0 -12
  270. package/dist/tests/helpers/test-db.d.ts.map +0 -1
  271. package/dist/tests/helpers/test-db.js +0 -149
  272. package/dist/tests/helpers/test-db.js.map +0 -1
  273. package/dist/tests/installer/installer.test.d.ts +0 -2
  274. package/dist/tests/installer/installer.test.d.ts.map +0 -1
  275. package/dist/tests/installer/installer.test.js +0 -160
  276. package/dist/tests/installer/installer.test.js.map +0 -1
  277. package/dist/tests/repositories/repos.test.d.ts +0 -2
  278. package/dist/tests/repositories/repos.test.d.ts.map +0 -1
  279. package/dist/tests/repositories/repos.test.js +0 -220
  280. package/dist/tests/repositories/repos.test.js.map +0 -1
  281. package/dist/tools/maintenance.d.ts +0 -3
  282. package/dist/tools/maintenance.d.ts.map +0 -1
  283. package/dist/tools/maintenance.js +0 -647
  284. package/dist/tools/maintenance.js.map +0 -1
  285. package/dist/tools/memory.d.ts +0 -3
  286. package/dist/tools/memory.d.ts.map +0 -1
  287. package/dist/tools/memory.js +0 -446
  288. package/dist/tools/memory.js.map +0 -1
@@ -1,9 +1,22 @@
1
1
  // ============================================================================
2
- // Engram MCP Server — Stats Tool
2
+ // Engram MCP Server — Stats, Config & Health Tools
3
3
  // ============================================================================
4
- import { getDb, getDbSizeKb } from "../database.js";
5
- import { TOOL_PREFIX } from "../constants.js";
4
+ import { z } from "zod";
5
+ import { getDb, getDbSizeKb, getRepos, now, getCurrentSessionId } from "../database.js";
6
+ import { TOOL_PREFIX, DB_VERSION, SERVER_VERSION, GITHUB_RELEASES_URL, CFG_AUTO_UPDATE_CHECK, CFG_AUTO_UPDATE_LAST_CHECK, CFG_AUTO_UPDATE_AVAILABLE, CFG_AUTO_UPDATE_SKIP_VERSION, CFG_AUTO_UPDATE_REMIND_AFTER, CFG_AUTO_UPDATE_NOTIFY_LEVEL, } from "../constants.js";
7
+ import { success, error } from "../response.js";
8
+ const KNOWN_CONFIG_KEYS = new Set([
9
+ "auto_compact",
10
+ "compact_threshold",
11
+ "retention_days",
12
+ "max_backups",
13
+ CFG_AUTO_UPDATE_CHECK,
14
+ CFG_AUTO_UPDATE_SKIP_VERSION,
15
+ CFG_AUTO_UPDATE_REMIND_AFTER,
16
+ CFG_AUTO_UPDATE_NOTIFY_LEVEL,
17
+ ]);
6
18
  export function registerStatsTools(server) {
19
+ // ─── STATS ────────────────────────────────────────────────────────
7
20
  server.registerTool(`${TOOL_PREFIX}_stats`, {
8
21
  title: "Memory Statistics",
9
22
  description: `Get a comprehensive overview of everything stored in Engram's memory: session count, changes, decisions, file notes, conventions, tasks, milestones, most-changed files, and database size.
@@ -38,7 +51,17 @@ Returns:
38
51
  schemaVersion = vRow ? parseInt(vRow.value, 10) : 0;
39
52
  }
40
53
  catch { /* no schema_meta */ }
41
- const stats = {
54
+ const repos = getRepos();
55
+ const updateAvailable = repos.config.get(CFG_AUTO_UPDATE_AVAILABLE) || null;
56
+ const lastCheck = repos.config.get(CFG_AUTO_UPDATE_LAST_CHECK) || null;
57
+ const autoUpdateEnabled = repos.config.getBool(CFG_AUTO_UPDATE_CHECK, true);
58
+ return success({
59
+ server_version: SERVER_VERSION,
60
+ update_status: updateAvailable
61
+ ? { available: true, version: updateAvailable, releases_url: GITHUB_RELEASES_URL }
62
+ : { available: false },
63
+ auto_update_check: autoUpdateEnabled ? "enabled" : "disabled",
64
+ last_update_check: lastCheck,
42
65
  total_sessions: count("sessions"),
43
66
  total_changes: count("changes"),
44
67
  total_decisions: count("decisions"),
@@ -54,10 +77,148 @@ Returns:
54
77
  tasks_by_status: tasksByStatus,
55
78
  schema_version: schemaVersion,
56
79
  engine: "better-sqlite3 (WAL mode)",
57
- };
58
- return {
59
- content: [{ type: "text", text: JSON.stringify(stats, null, 2) }],
60
- };
80
+ });
81
+ });
82
+ // ─── CONFIG ───────────────────────────────────────────────────────
83
+ server.registerTool(`${TOOL_PREFIX}_config`, {
84
+ title: "Config Management",
85
+ description: `Read or update Engram configuration values.
86
+
87
+ Known keys:
88
+ auto_compact (true/false) — enable/disable auto-compaction
89
+ compact_threshold (number) — sessions before auto-compact triggers
90
+ retention_days (number) — days to retain old session data
91
+ max_backups (number) — max number of backup files to keep
92
+ auto_update_check (true/false) — enable/disable background update checks (default: true)
93
+ auto_update_skip_version (string) — skip notifications for this specific version
94
+ auto_update_remind_after (string) — snooze updates: ISO date or duration like "7d", "2w", "1m"
95
+ auto_update_notify_level (string) — "major", "minor" (default), or "patch"
96
+
97
+ Args:
98
+ - action: "get" (read all config) or "set" (update a key)
99
+ - key (string, optional): Config key to update (required for "set")
100
+ - value (string, optional): New value (required for "set"). For auto_update_remind_after, accepts "7d", "2w", "1m", or an ISO date string.
101
+
102
+ Returns:
103
+ Current config values or confirmation of update.`,
104
+ inputSchema: {
105
+ action: z.enum(["get", "set"]).describe("Read all config or set a key"),
106
+ key: z.string().optional().describe("Config key (for set)"),
107
+ value: z.string().optional().describe("New value (for set)"),
108
+ },
109
+ annotations: {
110
+ readOnlyHint: false,
111
+ destructiveHint: false,
112
+ idempotentHint: true,
113
+ openWorldHint: false,
114
+ },
115
+ }, async ({ action, key, value }) => {
116
+ const repos = getRepos();
117
+ if (action === "get") {
118
+ const config = repos.config.getAll();
119
+ return success({ config });
120
+ }
121
+ // action === "set"
122
+ if (!key || value === undefined) {
123
+ return error("Both 'key' and 'value' are required for action 'set'.");
124
+ }
125
+ if (!KNOWN_CONFIG_KEYS.has(key)) {
126
+ return error(`Unknown config key: "${key}". Known keys: ${[...KNOWN_CONFIG_KEYS].join(", ")}`);
127
+ }
128
+ // Parse duration shorthand for auto_update_remind_after (e.g. "7d", "2w", "1m")
129
+ let storedValue = value;
130
+ if (key === CFG_AUTO_UPDATE_REMIND_AFTER && /^\d+[dwm]$/.test(value.trim())) {
131
+ const match = value.trim().match(/^(\d+)([dwm])$/);
132
+ if (match) {
133
+ const amount = parseInt(match[1], 10);
134
+ const unit = match[2];
135
+ const ms = unit === "d" ? amount * 86_400_000
136
+ : unit === "w" ? amount * 7 * 86_400_000
137
+ : amount * 30 * 86_400_000;
138
+ storedValue = new Date(Date.now() + ms).toISOString();
139
+ }
140
+ }
141
+ repos.config.set(key, storedValue, now());
142
+ return success({
143
+ message: `Config "${key}" updated to "${storedValue}".`,
144
+ key,
145
+ value: storedValue,
146
+ });
147
+ });
148
+ // ─── HEALTH / DIAGNOSTICS ─────────────────────────────────────────
149
+ server.registerTool(`${TOOL_PREFIX}_health`, {
150
+ title: "Health Diagnostics",
151
+ description: `Run health checks on the Engram database: integrity, schema version, FTS availability, WAL mode, table sizes, and config.
152
+
153
+ Returns:
154
+ Diagnostic report with status for each check.`,
155
+ inputSchema: {},
156
+ annotations: {
157
+ readOnlyHint: true,
158
+ destructiveHint: false,
159
+ idempotentHint: true,
160
+ openWorldHint: false,
161
+ },
162
+ }, async () => {
163
+ const db = getDb();
164
+ const repos = getRepos();
165
+ // Integrity check
166
+ let integrity = "unknown";
167
+ try {
168
+ const result = db.prepare("PRAGMA quick_check").get();
169
+ integrity = result?.quick_check || "ok";
170
+ }
171
+ catch (e) {
172
+ integrity = `error: ${e}`;
173
+ }
174
+ // Schema version
175
+ let schemaVersion = 0;
176
+ try {
177
+ const vRow = db.prepare("SELECT value FROM schema_meta WHERE key = 'version'").get();
178
+ schemaVersion = vRow ? parseInt(vRow.value, 10) : 0;
179
+ }
180
+ catch { /* no schema_meta */ }
181
+ // FTS5 availability
182
+ let ftsAvailable = false;
183
+ try {
184
+ const row = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='fts_sessions'").get();
185
+ ftsAvailable = !!row;
186
+ }
187
+ catch { /* skip */ }
188
+ // Journal mode
189
+ let journalMode = "unknown";
190
+ try {
191
+ const result = db.pragma("journal_mode");
192
+ journalMode = result[0]?.journal_mode || "unknown";
193
+ }
194
+ catch { /* skip */ }
195
+ // Table row counts
196
+ const tables = ["sessions", "changes", "decisions", "file_notes", "conventions", "tasks", "milestones", "scheduled_events"];
197
+ const tableCounts = {};
198
+ for (const table of tables) {
199
+ try {
200
+ tableCounts[table] = db.prepare(`SELECT COUNT(*) as c FROM ${table}`).get().c;
201
+ }
202
+ catch {
203
+ tableCounts[table] = -1; // table doesn't exist
204
+ }
205
+ }
206
+ // Config values
207
+ const config = repos.config.getAll();
208
+ // Active session
209
+ const activeSessionId = getCurrentSessionId();
210
+ return success({
211
+ integrity,
212
+ schema_version: schemaVersion,
213
+ expected_schema_version: DB_VERSION,
214
+ needs_migration: schemaVersion < DB_VERSION,
215
+ fts5_available: ftsAvailable,
216
+ journal_mode: journalMode,
217
+ database_size_kb: getDbSizeKb(),
218
+ table_row_counts: tableCounts,
219
+ config,
220
+ active_session_id: activeSessionId,
221
+ });
61
222
  });
62
223
  }
63
224
  //# sourceMappingURL=stats.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/tools/stats.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,iCAAiC;AACjC,+EAA+E;AAG/E,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAChD,MAAM,CAAC,YAAY,CACf,GAAG,WAAW,QAAQ,EACtB;QACI,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE;;;+CAGsB;QACnC,WAAW,EAAE,EAAE;QACf,WAAW,EAAE;YACT,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACvB;KACJ,EACD,KAAK,IAAI,EAAE;QACP,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;QAEnB,MAAM,KAAK,GAAG,CAAC,KAAa,EAAU,EAAE,CACnC,EAAE,CAAC,OAAO,CAAC,6BAA6B,KAAK,EAAE,CAAC,CAAC,GAAG,EAAoB,CAAC,CAAC,CAAC;QAEhF,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,yDAAyD,CAAC,CAAC,GAAG,EAAwC,CAAC;QACjI,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,0DAA0D,CAAC,CAAC,GAAG,EAAwC,CAAC;QAElI,MAAM,WAAW,GAAG,EAAE,CAAC,OAAO,CAAC;;;OAGpC,CAAC,CAAC,GAAG,EAAwD,CAAC;QAEzD,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC;;OAElC,CAAC,CAAC,GAAG,EAA6C,CAAC;QAE9C,MAAM,aAAa,GAAG,EAAE,CAAC,OAAO,CAAC;;OAEtC,CAAC,CAAC,GAAG,EAA8C,CAAC;QAE/C,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,qDAAqD,CAAC,CAAC,GAAG,EAAmC,CAAC;YACtH,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC;QAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC;QAEhC,MAAM,KAAK,GAAG;YACV,cAAc,EAAE,KAAK,CAAC,UAAU,CAAC;YACjC,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC;YAC/B,eAAe,EAAE,KAAK,CAAC,WAAW,CAAC;YACnC,gBAAgB,EAAE,KAAK,CAAC,YAAY,CAAC;YACrC,iBAAiB,EAAE,KAAK,CAAC,aAAa,CAAC;YACvC,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC;YAC3B,gBAAgB,EAAE,KAAK,CAAC,YAAY,CAAC;YACrC,cAAc,EAAE,MAAM,EAAE,UAAU,IAAI,IAAI;YAC1C,cAAc,EAAE,MAAM,EAAE,UAAU,IAAI,IAAI;YAC1C,kBAAkB,EAAE,WAAW;YAC/B,gBAAgB,EAAE,WAAW,EAAE;YAC/B,kBAAkB,EAAE,SAAS;YAC7B,eAAe,EAAE,aAAa;YAC9B,cAAc,EAAE,aAAa;YAC7B,MAAM,EAAE,2BAA2B;SACtC,CAAC;QAEF,OAAO;YACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACpE,CAAC;IACN,CAAC,CACJ,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/tools/stats.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMpE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA4MzD"}
1
+ {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOpE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgMzD"}
@@ -4,6 +4,7 @@
4
4
  import { z } from "zod";
5
5
  import { getDb, now, getCurrentSessionId } from "../database.js";
6
6
  import { TOOL_PREFIX } from "../constants.js";
7
+ import { success, error } from "../response.js";
7
8
  export function registerTaskTools(server) {
8
9
  // ─── CREATE TASK ────────────────────────────────────────────────────
9
10
  server.registerTool(`${TOOL_PREFIX}_create_task`, {
@@ -44,15 +45,10 @@ Returns:
44
45
  INSERT INTO tasks (session_id, created_at, updated_at, title, description, status, priority, assigned_files, tags, blocked_by)
45
46
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
46
47
  `).run(sessionId, timestamp, timestamp, title, description || null, status, priority, assigned_files ? JSON.stringify(assigned_files) : null, tags ? JSON.stringify(tags) : null, blocked_by ? JSON.stringify(blocked_by) : null);
47
- return {
48
- content: [{
49
- type: "text",
50
- text: JSON.stringify({
51
- task_id: result.lastInsertRowid,
52
- message: `Task #${result.lastInsertRowid} created: "${title}" [${priority}/${status}]`,
53
- }, null, 2),
54
- }],
55
- };
48
+ return success({
49
+ task_id: Number(result.lastInsertRowid),
50
+ message: `Task #${result.lastInsertRowid} created: "${title}" [${priority}/${status}]`,
51
+ });
56
52
  });
57
53
  // ─── UPDATE TASK ────────────────────────────────────────────────────
58
54
  server.registerTool(`${TOOL_PREFIX}_update_task`, {
@@ -122,7 +118,7 @@ Returns:
122
118
  params.push(id);
123
119
  const result = db.prepare(`UPDATE tasks SET ${updates.join(", ")} WHERE id = ?`).run(...params);
124
120
  if (result.changes === 0) {
125
- return { isError: true, content: [{ type: "text", text: `Task #${id} not found.` }] };
121
+ return error(`Task #${id} not found.`);
126
122
  }
127
123
  // If task was marked done, trigger any scheduled events waiting on it
128
124
  let triggeredEventCount = 0;
@@ -135,11 +131,10 @@ Returns:
135
131
  catch { /* scheduled_events table may not exist yet */ }
136
132
  }
137
133
  const updated = db.prepare("SELECT * FROM tasks WHERE id = ?").get(id);
138
- const response = { ...updated };
139
134
  if (triggeredEventCount > 0) {
140
- response._triggered_events = `${triggeredEventCount} scheduled event(s) triggered by this task completion. Use engram_check_events to review.`;
135
+ updated._triggered_events = `${triggeredEventCount} scheduled event(s) triggered by this task completion. Use engram_check_events to review.`;
141
136
  }
142
- return { content: [{ type: "text", text: JSON.stringify(response, null, 2) }] };
137
+ return success(updated);
143
138
  });
144
139
  // ─── GET TASKS ──────────────────────────────────────────────────────
145
140
  server.registerTool(`${TOOL_PREFIX}_get_tasks`, {
@@ -187,7 +182,6 @@ Returns:
187
182
  query += " AND EXISTS (SELECT 1 FROM json_each(tags) WHERE value = ?)";
188
183
  params.push(tag);
189
184
  }
190
- // Sort: critical > high > medium > low, then by creation date
191
185
  query += ` ORDER BY
192
186
  CASE priority WHEN 'critical' THEN 0 WHEN 'high' THEN 1 WHEN 'medium' THEN 2 WHEN 'low' THEN 3 END,
193
187
  created_at ASC
@@ -195,12 +189,7 @@ Returns:
195
189
  params.push(limit);
196
190
  const tasks = db.prepare(query).all(...params);
197
191
  const openCount = db.prepare("SELECT COUNT(*) as c FROM tasks WHERE status NOT IN ('done','cancelled')").get().c;
198
- return {
199
- content: [{
200
- type: "text",
201
- text: JSON.stringify({ total_open: openCount, returned: tasks.length, tasks }, null, 2),
202
- }],
203
- };
192
+ return success({ total_open: openCount, returned: tasks.length, tasks });
204
193
  });
205
194
  }
206
195
  //# sourceMappingURL=tasks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"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"}
package/dist/utils.d.ts CHANGED
@@ -1,4 +1,13 @@
1
1
  import type { ArchLayer } from "./types.js";
2
+ /**
3
+ * Normalize a file path for consistent storage as a database key.
4
+ * 1. Replace backslashes with forward slashes
5
+ * 2. If absolute and projectRoot provided, convert to relative
6
+ * 3. Strip leading ./
7
+ * 4. Collapse consecutive /
8
+ * 5. Strip trailing /
9
+ */
10
+ export declare function normalizePath(filePath: string, projectRoot?: string): string;
2
11
  /**
3
12
  * Auto-detect the project root by walking up from cwd looking for marker files.
4
13
  */
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAkBzD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,MAA4B,EACtC,UAAU,GAAE,MAA8B,GACzC,MAAM,EAAE,CAiDV;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAUvD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAUvE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,MAAM,CAK7F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAO/E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAOhF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,GAAE,MAAM,GAAG,UAAmB,GAAG,MAAM,CAM1F;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAIzD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAG/D"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAY5E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAkBzD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,MAA4B,EACtC,UAAU,GAAE,MAA8B,GACzC,MAAM,EAAE,CAiDV;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAUvD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAUvE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,MAAM,CAK7F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAO/E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAOhF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,GAAE,MAAM,GAAG,UAAmB,GAAG,MAAM,CAM1F;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAIzD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAG/D"}
package/dist/utils.js CHANGED
@@ -5,6 +5,24 @@ import { execSync } from "child_process";
5
5
  import * as fs from "fs";
6
6
  import * as path from "path";
7
7
  import { EXCLUDED_DIRS, LAYER_PATTERNS, MAX_FILE_TREE_DEPTH, MAX_FILE_TREE_ENTRIES, PROJECT_MARKERS, } from "./constants.js";
8
+ /**
9
+ * Normalize a file path for consistent storage as a database key.
10
+ * 1. Replace backslashes with forward slashes
11
+ * 2. If absolute and projectRoot provided, convert to relative
12
+ * 3. Strip leading ./
13
+ * 4. Collapse consecutive /
14
+ * 5. Strip trailing /
15
+ */
16
+ export function normalizePath(filePath, projectRoot) {
17
+ let p = filePath.replace(/\\/g, "/");
18
+ if (projectRoot && path.isAbsolute(p)) {
19
+ p = path.relative(projectRoot, p).replace(/\\/g, "/");
20
+ }
21
+ p = p.replace(/^\.\//, "");
22
+ p = p.replace(/\/+/g, "/");
23
+ p = p.replace(/\/$/, "");
24
+ return p;
25
+ }
8
26
  /**
9
27
  * Auto-detect the project root by walking up from cwd looking for marker files.
10
28
  */
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,52 +1,60 @@
1
- {
2
- "name": "engram-mcp-server",
3
- "version": "1.2.8",
4
- "description": "Engram — Persistent Memory Cortex for AI coding agents. Gives agents session continuity, change tracking, decision logging, and project intelligence across sessions.",
5
- "type": "module",
6
- "main": "dist/index.js",
7
- "bin": {
8
- "engram": "dist/index.js",
9
- "engram-mcp-server": "dist/index.js"
10
- },
11
- "files": [
12
- "dist/",
13
- "scripts/"
14
- ],
15
- "scripts": {
16
- "build": "tsc",
17
- "prepack": "npm run build",
18
- "test": "vitest run",
19
- "test:watch": "vitest",
20
- "start": "node dist/index.js",
21
- "dev": "tsc --watch",
22
- "clean": "rm -rf dist",
23
- "install-hooks": "node dist/scripts/install-hooks.js",
24
- "install-mcp": "node scripts/install-mcp.js",
25
- "install-mcp:list": "node scripts/install-mcp.js --list",
26
- "inspect": "npx @modelcontextprotocol/inspector node dist/index.js"
27
- },
28
- "keywords": [
29
- "mcp",
30
- "model-context-protocol",
31
- "ai-memory",
32
- "coding-agent",
33
- "persistent-memory",
34
- "session-continuity"
35
- ],
36
- "author": "",
37
- "license": "MIT",
38
- "dependencies": {
39
- "@modelcontextprotocol/sdk": "^1.12.0",
40
- "better-sqlite3": "^12.6.2",
41
- "zod": "^3.24.0"
42
- },
43
- "devDependencies": {
44
- "@types/better-sqlite3": "^7.6.13",
45
- "@types/node": "^22.10.0",
46
- "typescript": "^5.7.0",
47
- "vitest": "^4.0.18"
48
- },
49
- "engines": {
50
- "node": ">=18.0.0"
51
- }
52
- }
1
+ {
2
+ "name": "engram-mcp-server",
3
+ "version": "1.4.0",
4
+ "description": "Engram — Persistent Memory Cortex for AI coding agents. Gives agents session continuity, change tracking, decision logging, and project intelligence across sessions.",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "engram": "dist/index.js",
9
+ "engram-mcp-server": "dist/index.js"
10
+ },
11
+ "files": [
12
+ "dist/",
13
+ "scripts/"
14
+ ],
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "https://github.com/keggan-std/Engram"
18
+ },
19
+ "releaseNotes": "# v1.4.0 — Versioned Installs, Auto-Update & Update CLI\r\n\r\n**Engram v1.4.0 is live.** This release brings full version awareness to the installer, a background update check service, and user-controlled update management — so agents can keep users informed about new releases without ever interrupting their work.\r\n\r\n---\r\n\r\n## Breaking Changes\r\n\r\nNone. v1.4.0 is fully backwards-compatible. Existing IDE config entries (without `_engram_version`) are automatically adopted on the next `engram install` run.\r\n\r\n---\r\n\r\n## What's New\r\n\r\n### Version-Tracked Installer Entries\r\n\r\nEvery IDE config entry written by the installer is now stamped with `_engram_version`. On re-install, the installer detects one of four states and reports it clearly:\r\n\r\n| State | Meaning |\r\n|-------|---------|\r\n| `added` | Fresh install — no prior entry existed |\r\n| `exists` | Already installed at this version — nothing written |\r\n| `upgraded` | Updated from a known older version to the current one |\r\n| `legacy-upgraded` | Entry existed without a version stamp (pre-v1.4.0) — adopted and stamped |\r\n\r\nThe old `\"updated\"` status has been replaced by the more precise `\"upgraded\"` and `\"legacy-upgraded\"` outcomes.\r\n\r\n### Background Auto-Update Check\r\n\r\nEngram now checks for new versions silently after the MCP server connects. The check is:\r\n- **Fire-and-forget:** runs via `setImmediate`, never blocks startup or any tool call\r\n- **Throttled:** runs at most once per 24 hours\r\n- **Opt-out:** disabled via `engram_config set auto_update_check false`\r\n- **Snooze-aware:** respects `auto_update_remind_after` (e.g., `7d`, `2w`, `1m`)\r\n- **Skip-aware:** respects `auto_update_skip_version` to permanently silence a specific version\r\n- **Level-aware:** `auto_update_notify_level` (`\"major\"` | `\"minor\"` | `\"patch\"`) controls which bump sizes trigger a notification\r\n\r\n### Update Notifications via `engram_start_session`\r\n\r\nWhen a newer version is available, `engram_start_session` includes an `update_available` field in its response across all three verbosity levels (`minimal`, `summary`, `full`):\r\n\r\n```json\r\n\"update_available\": {\r\n \"installed_version\": \"1.3.0\",\r\n \"available_version\": \"1.4.0\",\r\n \"changelog\": \"### v1.4.0 — ...\",\r\n \"releases_url\": \"https://github.com/keggan-std/Engram/releases\"\r\n}\r\n```\r\n\r\nThe agent presents this to the user, who can respond with any of:\r\n- **Update** → agent tells user to run `npx -y engram-mcp-server install`\r\n- **Skip this version** → `engram_config set auto_update_skip_version 1.4.0`\r\n- **Postpone** → `engram_config set auto_update_remind_after 7d`\r\n- **Disable checks** → `engram_config set auto_update_check false`\r\n\r\n### Two-Source Changelog Delivery\r\n\r\nUpdate notifications include the release changelog fetched from:\r\n1. **npm registry** (`https://registry.npmjs.org/engram-mcp-server/latest`) — includes the `releaseNotes` field injected at publish time by the new pre-publish script\r\n2. **GitHub Releases API** — fallback when the registry is unreachable or `releaseNotes` is absent\r\n\r\nBoth sources use a 5-second timeout. Network failures are silent — startup is never affected.\r\n\r\n### New `--check` CLI Flag\r\n\r\n```bash\r\nnpx -y engram-mcp-server install --check\r\n```\r\n\r\nShows the installed version for every detected IDE, fetches the npm latest, and correctly handles three scenarios:\r\n\r\n| Scenario | Label |\r\n|----------|-------|\r\n| Running == npm latest | `✅ up to date` |\r\n| Running > npm latest | `⚡ running pre-release (vX.Y.Z > npm vA.B.C)` |\r\n| Running < npm latest | `⬆ npm has vX.Y.Z — run: npx -y engram-mcp-server install` |\r\n\r\n### `engram_stats` — Version & Update Status\r\n\r\n`engram_stats` now returns:\r\n\r\n```json\r\n{\r\n \"server_version\": \"1.4.0\",\r\n \"update_status\": { \"available\": true, \"version\": \"1.5.0\", \"releases_url\": \"...\" },\r\n \"auto_update_check\": \"enabled\",\r\n \"last_update_check\": \"2026-02-23T00:00:00.000Z\"\r\n}\r\n```\r\n\r\n### `engram_config` — New Update Keys\r\n\r\nFour new keys are now accepted by `engram_config`:\r\n\r\n| Key | Type | Description |\r\n|-----|------|-------------|\r\n| `auto_update_check` | `true`/`false` | Enable/disable background update checks |\r\n| `auto_update_skip_version` | string | Version to permanently silence (e.g., `1.4.1`) |\r\n| `auto_update_remind_after` | duration or ISO date | Snooze updates (`7d`, `2w`, `1m`, or ISO string) |\r\n| `auto_update_notify_level` | `major`/`minor`/`patch` | Minimum bump size to trigger a notification |\r\n\r\n### Pre-publish Release Notes Injection\r\n\r\nA new `scripts/inject-release-notes.js` script runs automatically before every `npm publish` (as part of the `prepack` lifecycle). It reads `RELEASE_NOTES.md`, extracts the current version's section, and writes it into `package.json` as `releaseNotes`. This allows the update service to deliver changelogs in a single HTTP call to the npm registry — no CDN dependency, no GitHub rate limits.\r\n\r\n---\r\n\r\n## Fixes & Internal\r\n\r\n- Removed duplicate `getVersion()` function from `src/installer/index.ts` — now uses `getInstallerVersion()` from `config-writer.ts` as single source of truth\r\n- `UpdateService` uses only built-in Node.js 18+ `fetch` — no new runtime dependencies added\r\n- `addToConfig()` now uses version-first comparison instead of full JSON deep-equal, making the comparison logic explicit and testable\r\n\r\n---\r\n\r\n**Full Changelog**: https://github.com/keggan-std/Engram/compare/v1.3.0...v1.4.0\r\n\r\n---",
20
+ "scripts": {
21
+ "build": "tsc",
22
+ "prepack": "node scripts/inject-release-notes.js && npm run clean && npm run build",
23
+ "test": "vitest run",
24
+ "test:watch": "vitest",
25
+ "start": "node dist/index.js",
26
+ "dev": "tsc --watch",
27
+ "clean": "node -e \"const {rmSync,existsSync}=require('fs');if(existsSync('dist'))rmSync('dist',{recursive:true,force:true})\"",
28
+ "install-hooks": "node dist/scripts/install-hooks.js",
29
+ "install-mcp": "node scripts/install-mcp.js",
30
+ "install-mcp:list": "node scripts/install-mcp.js --list",
31
+ "inspect": "npx @modelcontextprotocol/inspector node dist/index.js"
32
+ },
33
+ "keywords": [
34
+ "mcp",
35
+ "model-context-protocol",
36
+ "ai-memory",
37
+ "coding-agent",
38
+ "persistent-memory",
39
+ "session-continuity"
40
+ ],
41
+ "author": "",
42
+ "license": "MIT",
43
+ "dependencies": {
44
+ "@modelcontextprotocol/sdk": "^1.12.0",
45
+ "better-sqlite3": "^12.6.2",
46
+ "zod": "^3.24.0"
47
+ },
48
+ "devDependencies": {
49
+ "@types/better-sqlite3": "^7.6.13",
50
+ "@types/node": "^22.10.0",
51
+ "typescript": "^5.7.0",
52
+ "vitest": "^4.0.18"
53
+ },
54
+ "overrides": {
55
+ "prebuild-install": "7.1.3"
56
+ },
57
+ "engines": {
58
+ "node": ">=18.0.0"
59
+ }
60
+ }
@@ -0,0 +1,66 @@
1
+ #!/usr/bin/env node
2
+ // ============================================================================
3
+ // Engram — Release Notes Injector
4
+ //
5
+ // Reads the latest version section from RELEASE_NOTES.md and injects it into
6
+ // package.json as the `releaseNotes` field before publishing.
7
+ // The npm registry then serves this field alongside the version metadata,
8
+ // allowing the update check service to fetch changelog in a single HTTP call.
9
+ //
10
+ // Usage (called automatically by the prepack script):
11
+ // node scripts/inject-release-notes.js
12
+ // ============================================================================
13
+
14
+ import fs from "fs";
15
+ import path from "path";
16
+ import { fileURLToPath } from "url";
17
+
18
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
19
+ const ROOT = path.resolve(__dirname, "..");
20
+ const RELEASE_NOTES_PATH = path.join(ROOT, "RELEASE_NOTES.md");
21
+ const PACKAGE_JSON_PATH = path.join(ROOT, "package.json");
22
+
23
+ // ─── Read files ──────────────────────────────────────────────────────
24
+
25
+ const pkg = JSON.parse(fs.readFileSync(PACKAGE_JSON_PATH, "utf-8"));
26
+ const notes = fs.readFileSync(RELEASE_NOTES_PATH, "utf-8");
27
+
28
+ // ─── Extract the latest version section ──────────────────────────────
29
+ // The file starts with the latest version heading (# vX.Y.Z — ...).
30
+ // We take everything up to the next top-level heading or the "## Fixes" block,
31
+ // so each publish only embeds the notes for that specific release.
32
+
33
+ const lines = notes.split("\n");
34
+ const sectionLines = [];
35
+ let inSection = false;
36
+
37
+ for (const line of lines) {
38
+ // First top-level heading = the latest version section
39
+ if (line.startsWith("# v") && !inSection) {
40
+ inSection = true;
41
+ sectionLines.push(line);
42
+ continue;
43
+ }
44
+
45
+ // Stop at the next top-level version heading or a "---" section separator
46
+ // that introduces historical patch notes (e.g. "## Fixes in v1.2.x")
47
+ if (inSection) {
48
+ if (line.startsWith("# v")) break; // Next version block
49
+ sectionLines.push(line);
50
+ }
51
+ }
52
+
53
+ const releaseNotes = sectionLines.join("\n").trim();
54
+
55
+ if (!releaseNotes) {
56
+ console.error("❌ inject-release-notes: could not extract release notes from RELEASE_NOTES.md");
57
+ process.exit(1);
58
+ }
59
+
60
+ // ─── Inject into package.json ─────────────────────────────────────────
61
+
62
+ pkg.releaseNotes = releaseNotes;
63
+
64
+ fs.writeFileSync(PACKAGE_JSON_PATH, JSON.stringify(pkg, null, 2) + "\n", "utf-8");
65
+
66
+ console.log(`✅ inject-release-notes: injected ${releaseNotes.length} chars into package.json (v${pkg.version})`);
@@ -1,2 +0,0 @@
1
- export declare function runInstaller(args: string[]): Promise<void>;
2
- //# sourceMappingURL=installer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"AA+KA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,iBA0FhD"}