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
@@ -2,12 +2,11 @@
2
2
  // Engram MCP Server — Session Management Tools
3
3
  // ============================================================================
4
4
  import { z } from "zod";
5
- import * as fs from "fs";
6
- import * as path from "path";
7
- import { getDb, now, getCurrentSessionId, getLastCompletedSession, getProjectRoot, backupDatabase } from "../database.js";
8
- import { getGitLogSince, getGitBranch, getGitHead, isGitRepo, minutesSince, scanFileTree, detectLayer, safeJsonParse } from "../utils.js";
9
- import { TOOL_PREFIX, SNAPSHOT_TTL_MINUTES, COMPACTION_THRESHOLD_SESSIONS, DB_DIR_NAME, MAX_FILE_TREE_DEPTH } from "../constants.js";
5
+ import { now, getCurrentSessionId, getLastCompletedSession, getProjectRoot, getRepos, getServices } from "../database.js";
6
+ import { TOOL_PREFIX, COMPACTION_THRESHOLD_SESSIONS } from "../constants.js";
10
7
  import { log } from "../logger.js";
8
+ import { truncate } from "../utils.js";
9
+ import { success, error } from "../response.js";
11
10
  export function registerSessionTools(server) {
12
11
  // ─── START SESSION ──────────────────────────────────────────────────
13
12
  server.registerTool(`${TOOL_PREFIX}_start_session`, {
@@ -17,12 +16,14 @@ export function registerSessionTools(server) {
17
16
  Args:
18
17
  - agent_name (string, optional): Identifier for the agent (e.g., "copilot", "claude-code", "cursor")
19
18
  - resume_task (string, optional): If resuming a specific task, provide its title to auto-focus context
19
+ - verbosity ("full" | "summary" | "minimal", optional): Controls response size. "minimal" returns counts only (~90% fewer tokens), "summary" returns truncated recent items (~60-80% fewer tokens), "full" returns everything including file_tree. Default: "summary".
20
20
 
21
21
  Returns:
22
22
  SessionContext object with previous session info, changes, decisions, conventions, and open tasks.`,
23
23
  inputSchema: {
24
24
  agent_name: z.string().default("unknown").describe("Name of the agent starting the session"),
25
25
  resume_task: z.string().optional().describe("Title of a task to resume, for focused context"),
26
+ verbosity: z.enum(["full", "summary", "minimal"]).default("summary").describe("Response detail level: full, summary, or minimal"),
26
27
  },
27
28
  annotations: {
28
29
  readOnlyHint: false,
@@ -30,205 +31,130 @@ Returns:
30
31
  idempotentHint: false,
31
32
  openWorldHint: false,
32
33
  },
33
- }, async ({ agent_name, resume_task }) => {
34
- const db = getDb();
34
+ }, async ({ agent_name, resume_task, verbosity }) => {
35
+ const repos = getRepos();
36
+ const services = getServices();
35
37
  const projectRoot = getProjectRoot();
36
38
  const timestamp = now();
37
39
  // Check for an already-open session and close it
38
40
  const openSession = getCurrentSessionId();
39
41
  if (openSession) {
40
- db.prepare("UPDATE sessions SET ended_at = ?, summary = ? WHERE id = ?")
41
- .run(timestamp, "(auto-closed: new session started)", openSession);
42
+ repos.sessions.autoClose(openSession, timestamp);
42
43
  }
43
44
  // Get previous session context
44
45
  const lastSession = getLastCompletedSession();
45
46
  // Create new session
46
- const result = db.prepare("INSERT INTO sessions (started_at, agent_name, project_root) VALUES (?, ?, ?)").run(timestamp, agent_name, projectRoot);
47
- const sessionId = result.lastInsertRowid;
48
- // ─── Auto-compaction ────────────────────────────────────
47
+ const sessionId = repos.sessions.create(agent_name, projectRoot, timestamp);
48
+ // ─── Auto-compaction via service ────────────────────────
49
49
  let autoCompacted = false;
50
50
  try {
51
- // Check config for threshold (fallback to constant)
52
- let threshold = COMPACTION_THRESHOLD_SESSIONS;
53
- try {
54
- const configRow = db.prepare("SELECT value FROM config WHERE key = 'compact_threshold'").get();
55
- if (configRow)
56
- threshold = parseInt(configRow.value, 10);
57
- }
58
- catch { /* config table may not exist yet */ }
59
- const totalSessions = db.prepare("SELECT COUNT(*) as c FROM sessions WHERE ended_at IS NOT NULL").get().c;
60
- if (totalSessions > threshold) {
61
- // Check if auto_compact is enabled
62
- let autoCompactEnabled = true;
63
- try {
64
- const autoRow = db.prepare("SELECT value FROM config WHERE key = 'auto_compact'").get();
65
- if (autoRow)
66
- autoCompactEnabled = autoRow.value === 'true';
67
- }
68
- catch { /* default to enabled */ }
69
- if (autoCompactEnabled) {
70
- log.info(`Auto-compacting: ${totalSessions} sessions exceed threshold of ${threshold}`);
71
- try {
72
- backupDatabase();
73
- }
74
- catch { /* best effort */ }
75
- // Compact: keep recent sessions, summarize old changes
76
- const cutoff = db.prepare("SELECT id FROM sessions ORDER BY id DESC LIMIT 1 OFFSET ?").get(threshold);
77
- if (cutoff) {
78
- const doCompact = db.transaction(() => {
79
- const oldSessions = db.prepare("SELECT id FROM sessions WHERE id <= ? AND ended_at IS NOT NULL").all(cutoff.id);
80
- for (const s of oldSessions) {
81
- const changes = db.prepare("SELECT change_type, file_path, description FROM changes WHERE session_id = ? AND file_path != '(compacted)'").all(s.id);
82
- if (changes.length > 0) {
83
- const summary = changes.map(c => `[${c.change_type}] ${c.file_path}`).join("; ");
84
- db.prepare("INSERT INTO changes (session_id, timestamp, file_path, change_type, description, impact_scope) VALUES (?, ?, ?, ?, ?, ?)").run(s.id, now(), "(compacted)", "modified", `Compacted ${changes.length} changes: ${summary.slice(0, 2000)}`, "global");
85
- }
86
- db.prepare("DELETE FROM changes WHERE session_id = ? AND file_path != '(compacted)'").run(s.id);
87
- }
88
- });
89
- doCompact();
90
- autoCompacted = true;
91
- log.info("Auto-compaction complete.");
92
- }
93
- }
94
- }
51
+ autoCompacted = services.compaction.autoCompact(COMPACTION_THRESHOLD_SESSIONS);
95
52
  }
96
53
  catch (e) {
97
54
  log.warn(`Auto-compaction skipped: ${e}`);
98
55
  }
99
56
  // Gather changes since last session
100
- let recordedChanges = [];
101
- let gitLog = "";
102
- if (lastSession?.ended_at) {
103
- recordedChanges = db.prepare("SELECT * FROM changes WHERE timestamp > ? ORDER BY timestamp").all(lastSession.ended_at);
104
- if (isGitRepo(projectRoot)) {
105
- gitLog = getGitLogSince(projectRoot, lastSession.ended_at);
106
- }
107
- }
108
- // Active decisions
109
- const activeDecisions = db.prepare("SELECT * FROM decisions WHERE status = 'active' ORDER BY timestamp DESC LIMIT 20").all();
110
- // Active conventions
111
- const activeConventions = db.prepare("SELECT * FROM conventions WHERE enforced = 1 ORDER BY category, id").all();
112
- // Open tasks
113
- let openTasks;
114
- if (resume_task) {
115
- openTasks = db.prepare("SELECT * FROM tasks WHERE status NOT IN ('done', 'cancelled') AND title LIKE ? ORDER BY priority, created_at").all(`%${resume_task}%`);
116
- // If specific task not found, return all open tasks
117
- if (openTasks.length === 0) {
118
- openTasks = db.prepare("SELECT * FROM tasks WHERE status NOT IN ('done', 'cancelled') ORDER BY priority, created_at").all();
119
- }
120
- }
121
- else {
122
- openTasks = db.prepare("SELECT * FROM tasks WHERE status NOT IN ('done', 'cancelled') ORDER BY priority, created_at LIMIT 15").all();
123
- }
124
- // ─── Auto Project Scan ───────────────────────────────────
57
+ let recordedChanges = lastSession?.ended_at
58
+ ? repos.changes.getSince(lastSession.ended_at)
59
+ : [];
60
+ // Git context via service
61
+ const gitBranch = services.git.getBranch();
62
+ const gitHead = services.git.getHead();
63
+ const gitLog = lastSession?.ended_at && services.git.isRepo()
64
+ ? services.git.getLogSince(lastSession.ended_at)
65
+ : "";
66
+ // Active decisions, conventions, open tasks
67
+ const activeDecisions = repos.decisions.getActive(20);
68
+ const activeConventions = repos.conventions.getActive();
69
+ const openTasks = repos.tasks.getOpen(15, resume_task || undefined);
70
+ // ─── Project snapshot via service ───────────────────────
125
71
  let projectSnapshot = null;
126
- try {
127
- const cached = db.prepare("SELECT * FROM snapshot_cache WHERE key = 'project_structure'").get();
128
- const snapshotAge = cached ? minutesSince(cached.updated_at) : null;
129
- if (cached && snapshotAge !== null && snapshotAge < SNAPSHOT_TTL_MINUTES) {
130
- // Serve from cache
131
- projectSnapshot = safeJsonParse(cached.value, null);
132
- }
133
- else {
134
- // Stale or missing — perform a fresh scan
135
- const fileTree = scanFileTree(projectRoot, MAX_FILE_TREE_DEPTH);
136
- const layerDist = {};
137
- for (const f of fileTree) {
138
- if (f.endsWith("/"))
139
- continue;
140
- const layer = detectLayer(f);
141
- layerDist[layer] = (layerDist[layer] || 0) + 1;
142
- }
143
- const fileNotes = db.prepare("SELECT * FROM file_notes ORDER BY file_path").all();
144
- const decisions = db.prepare("SELECT * FROM decisions WHERE status = 'active' ORDER BY timestamp DESC LIMIT 20").all();
145
- const conventions = db.prepare("SELECT * FROM conventions WHERE enforced = 1 ORDER BY category").all();
146
- projectSnapshot = {
147
- project_root: projectRoot,
148
- file_tree: fileTree,
149
- total_files: fileTree.filter((f) => !f.endsWith("/")).length,
150
- file_notes: fileNotes,
151
- recent_decisions: decisions,
152
- active_conventions: conventions,
153
- layer_distribution: layerDist,
154
- generated_at: now(),
155
- };
156
- // Persist to cache
157
- db.prepare("INSERT OR REPLACE INTO snapshot_cache (key, value, updated_at, ttl_minutes) VALUES ('project_structure', ?, ?, ?)").run(JSON.stringify(projectSnapshot), now(), SNAPSHOT_TTL_MINUTES);
158
- }
159
- }
160
- catch { /* scan is best-effort — never block session start */ }
161
- // ─── Ingest git-changes.log (from post-commit hook) ─────
162
- let gitHookLog = "";
163
- try {
164
- const hookLogPath = path.join(projectRoot, DB_DIR_NAME, "git-changes.log");
165
- if (fs.existsSync(hookLogPath)) {
166
- const raw = fs.readFileSync(hookLogPath, "utf-8");
167
- // Only include entries since last session
168
- if (lastSession?.ended_at) {
169
- const lines = raw.split("\n");
170
- const cutoffDate = new Date(lastSession.ended_at);
171
- const relevantBlocks = [];
172
- let inBlock = false;
173
- let blockLines = [];
174
- let blockDate = null;
175
- for (const line of lines) {
176
- if (line.startsWith("--- COMMIT")) {
177
- if (inBlock && blockDate && blockDate > cutoffDate) {
178
- relevantBlocks.push(blockLines.join("\n"));
179
- }
180
- inBlock = true;
181
- blockLines = [line];
182
- blockDate = null;
183
- }
184
- else if (inBlock && line.startsWith("date:")) {
185
- blockLines.push(line);
186
- try {
187
- blockDate = new Date(line.replace("date:", "").trim());
188
- }
189
- catch { /* skip */ }
190
- }
191
- else if (inBlock) {
192
- blockLines.push(line);
193
- }
194
- }
195
- // Flush last block
196
- if (inBlock && blockDate && blockDate > cutoffDate) {
197
- relevantBlocks.push(blockLines.join("\n"));
198
- }
199
- gitHookLog = relevantBlocks.join("\n\n");
200
- }
201
- else {
202
- // First session — include last 20 lines as a hint
203
- gitHookLog = raw.split("\n").slice(-20).join("\n");
204
- }
72
+ if (verbosity === "full") {
73
+ try {
74
+ projectSnapshot = services.scan.getOrRefresh(projectRoot);
205
75
  }
76
+ catch { /* scan is best-effort */ }
206
77
  }
207
- catch { /* git-changes.log is optional */ }
208
- // Snapshot age (for message)
209
- const snapshotAge = projectSnapshot ? 0 : null;
210
- // Git context
211
- const gitBranch = isGitRepo(projectRoot) ? getGitBranch(projectRoot) : null;
212
- const gitHead = isGitRepo(projectRoot) ? getGitHead(projectRoot) : null;
213
- // ─── Check Scheduled Event Triggers ──────────────────────────
78
+ // ─── Git hook log via service ──────────────────────────
79
+ const gitHookLog = services.git.parseHookLog(lastSession?.ended_at);
80
+ // ─── Trigger scheduled events via service ──────────────
214
81
  let triggeredEvents = [];
215
82
  try {
216
- const timestamp = now();
217
- // Auto-trigger 'next_session' events
218
- db.prepare(`UPDATE scheduled_events SET status = 'triggered', triggered_at = ?
219
- WHERE status = 'pending' AND trigger_type = 'next_session'`).run(timestamp);
220
- // Auto-trigger 'datetime' events that have passed
221
- db.prepare(`UPDATE scheduled_events SET status = 'triggered', triggered_at = ?
222
- WHERE status = 'pending' AND trigger_type = 'datetime' AND trigger_value <= ?`).run(timestamp, timestamp);
223
- // Auto-trigger 'every_session' recurring events
224
- db.prepare(`UPDATE scheduled_events SET status = 'triggered', triggered_at = ?
225
- WHERE status = 'pending' AND recurrence = 'every_session'`).run(timestamp);
226
- // Fetch all triggered events
227
- triggeredEvents = db.prepare(`SELECT * FROM scheduled_events WHERE status = 'triggered'
228
- ORDER BY CASE priority WHEN 'critical' THEN 0 WHEN 'high' THEN 1 WHEN 'medium' THEN 2 WHEN 'low' THEN 3 END`).all();
83
+ triggeredEvents = services.events.triggerSessionEvents();
229
84
  }
230
85
  catch { /* scheduled_events table may not exist yet */ }
231
- // Build response
86
+ // ─── Update notification (once per process) ────────────
87
+ const updateNotification = services.update.getNotification();
88
+ // ─── Build response based on verbosity ─────────────────
89
+ if (verbosity === "minimal") {
90
+ return success({
91
+ session_id: sessionId,
92
+ verbosity: "minimal",
93
+ previous_session: lastSession
94
+ ? { id: lastSession.id, summary: lastSession.summary, ended_at: lastSession.ended_at, agent: lastSession.agent_name }
95
+ : null,
96
+ counts: {
97
+ changes_since_last: recordedChanges.length,
98
+ active_decisions: activeDecisions.length,
99
+ active_conventions: activeConventions.length,
100
+ open_tasks: openTasks.length,
101
+ triggered_events: triggeredEvents.length,
102
+ total_files: repos.fileNotes.countAll(),
103
+ },
104
+ git: { branch: gitBranch, head: gitHead },
105
+ auto_compacted: autoCompacted,
106
+ update_available: updateNotification ?? undefined,
107
+ message: `Session #${sessionId} started (minimal mode). Use engram_get_* tools to load details on demand.${updateNotification ? ` ⚡ Engram v${updateNotification.available_version} is available (currently v${updateNotification.installed_version}).` : ""}`,
108
+ });
109
+ }
110
+ if (verbosity === "summary") {
111
+ return success({
112
+ session_id: sessionId,
113
+ verbosity: "summary",
114
+ previous_session: lastSession
115
+ ? { id: lastSession.id, summary: lastSession.summary, ended_at: lastSession.ended_at, agent: lastSession.agent_name }
116
+ : null,
117
+ changes_since_last: {
118
+ count: recordedChanges.length,
119
+ recent: recordedChanges.slice(0, 5).map(c => ({
120
+ file_path: c.file_path,
121
+ change_type: c.change_type,
122
+ description: truncate(c.description, 120),
123
+ timestamp: c.timestamp,
124
+ })),
125
+ git_log: gitLog ? truncate(gitLog, 500) : "",
126
+ },
127
+ active_decisions: activeDecisions.slice(0, 5).map(d => ({
128
+ id: d.id,
129
+ decision: truncate(d.decision, 120),
130
+ status: d.status,
131
+ tags: d.tags,
132
+ })),
133
+ active_conventions: activeConventions.map(c => ({
134
+ id: c.id,
135
+ category: c.category,
136
+ rule: truncate(c.rule, 100),
137
+ })),
138
+ open_tasks: openTasks.slice(0, 5).map(t => ({
139
+ id: t.id,
140
+ title: t.title,
141
+ status: t.status,
142
+ priority: t.priority,
143
+ })),
144
+ triggered_events: triggeredEvents.length > 0
145
+ ? triggeredEvents.map(e => ({ id: e.id, title: e.title, priority: e.priority }))
146
+ : undefined,
147
+ git: { branch: gitBranch, head: gitHead },
148
+ git_hook_log: gitHookLog || undefined,
149
+ total_file_notes: repos.fileNotes.countAll(),
150
+ auto_compacted: autoCompacted,
151
+ update_available: updateNotification ?? undefined,
152
+ message: lastSession
153
+ ? `Session #${sessionId} started (summary mode). Resuming from session #${lastSession.id} (${lastSession.agent_name}). ${recordedChanges.length} changes since then.${autoCompacted ? " [Auto-compacted old sessions.]" : ""}${triggeredEvents.length > 0 ? ` ${triggeredEvents.length} scheduled event(s) triggered.` : ""}${updateNotification ? ` ⚡ Engram v${updateNotification.available_version} available — inform user (see update_available field).` : ""}`
154
+ : `Session #${sessionId} started (summary mode). First session — no prior memory.`,
155
+ });
156
+ }
157
+ // ─── verbosity === "full" ──────────────────────────────
232
158
  const context = {
233
159
  session_id: sessionId,
234
160
  previous_session: lastSession
@@ -246,18 +172,17 @@ Returns:
246
172
  active_decisions: activeDecisions,
247
173
  active_conventions: activeConventions,
248
174
  open_tasks: openTasks,
249
- project_snapshot_age_minutes: snapshotAge,
175
+ project_snapshot_age_minutes: projectSnapshot ? 0 : null,
250
176
  git: { branch: gitBranch, head: gitHead },
251
177
  project_snapshot: projectSnapshot,
252
178
  git_hook_log: gitHookLog || undefined,
253
179
  triggered_events: triggeredEvents.length > 0 ? triggeredEvents : undefined,
180
+ update_available: updateNotification ?? undefined,
254
181
  message: lastSession
255
- ? `Session #${sessionId} started. Resuming from session #${lastSession.id} (${lastSession.agent_name}, ended ${lastSession.ended_at}). ${recordedChanges.length} recorded changes since then.${autoCompacted ? " [Auto-compacted old sessions.]" : ""}${projectSnapshot ? ` Project snapshot included (${projectSnapshot.total_files} files).` : ""}${triggeredEvents.length > 0 ? ` ${triggeredEvents.length} scheduled event(s) triggered — review and acknowledge.` : ""}`
256
- : `Session #${sessionId} started. This is the first session — no prior memory.${projectSnapshot ? ` Project snapshot included (${projectSnapshot.total_files} files).` : ""}`,
257
- };
258
- return {
259
- content: [{ type: "text", text: JSON.stringify(context, null, 2) }],
182
+ ? `Session #${sessionId} started (full mode). Resuming from session #${lastSession.id} (${lastSession.agent_name}, ended ${lastSession.ended_at}). ${recordedChanges.length} recorded changes since then.${autoCompacted ? " [Auto-compacted old sessions.]" : ""}${projectSnapshot ? ` Project snapshot included (${projectSnapshot.total_files} files).` : ""}${triggeredEvents.length > 0 ? ` ${triggeredEvents.length} scheduled event(s) triggered — review and acknowledge.` : ""}${updateNotification ? ` ⚡ Engram v${updateNotification.available_version} available — inform user (see update_available field).` : ""}`
183
+ : `Session #${sessionId} started (full mode). This is the first session — no prior memory.${projectSnapshot ? ` Project snapshot included (${projectSnapshot.total_files} files).` : ""}`,
260
184
  };
185
+ return success(context);
261
186
  });
262
187
  // ─── END SESSION ────────────────────────────────────────────────────
263
188
  server.registerTool(`${TOOL_PREFIX}_end_session`, {
@@ -281,36 +206,27 @@ Returns:
281
206
  openWorldHint: false,
282
207
  },
283
208
  }, async ({ summary, tags }) => {
284
- const db = getDb();
209
+ const repos = getRepos();
285
210
  const timestamp = now();
286
211
  const sessionId = getCurrentSessionId();
287
212
  if (!sessionId) {
288
- return {
289
- isError: true,
290
- content: [{ type: "text", text: "No active session to end. Start one with engram_start_session first." }],
291
- };
213
+ return error("No active session to end. Start one with engram_start_session first.");
292
214
  }
293
215
  // Get session stats before closing
294
- const changeCount = db.prepare("SELECT COUNT(*) as c FROM changes WHERE session_id = ?").get(sessionId).c;
295
- const decisionCount = db.prepare("SELECT COUNT(*) as c FROM decisions WHERE session_id = ?").get(sessionId).c;
296
- const tasksDone = db.prepare("SELECT COUNT(*) as c FROM tasks WHERE session_id = ? AND status = 'done'").get(sessionId).c;
216
+ const changeCount = repos.changes.countBySession(sessionId);
217
+ const decisionCount = repos.sessions.countBySession(sessionId, "decisions");
218
+ const tasksDone = repos.tasks.countDoneInSession(sessionId);
297
219
  // Close the session
298
- db.prepare("UPDATE sessions SET ended_at = ?, summary = ?, tags = ? WHERE id = ?")
299
- .run(timestamp, summary, tags ? JSON.stringify(tags) : null, sessionId);
300
- return {
301
- content: [{
302
- type: "text",
303
- text: JSON.stringify({
304
- message: `Session #${sessionId} ended successfully.`,
305
- stats: {
306
- changes_recorded: changeCount,
307
- decisions_made: decisionCount,
308
- tasks_completed: tasksDone,
309
- },
310
- summary,
311
- }, null, 2),
312
- }],
313
- };
220
+ repos.sessions.close(sessionId, timestamp, summary, tags);
221
+ return success({
222
+ message: `Session #${sessionId} ended successfully.`,
223
+ stats: {
224
+ changes_recorded: changeCount,
225
+ decisions_made: decisionCount,
226
+ tasks_completed: tasksDone,
227
+ },
228
+ summary,
229
+ });
314
230
  });
315
231
  // ─── GET SESSION HISTORY ────────────────────────────────────────────
316
232
  server.registerTool(`${TOOL_PREFIX}_get_session_history`, {
@@ -336,21 +252,10 @@ Returns:
336
252
  openWorldHint: false,
337
253
  },
338
254
  }, async ({ limit, agent_name, offset }) => {
339
- const db = getDb();
340
- let sessions;
341
- if (agent_name) {
342
- sessions = db.prepare("SELECT * FROM sessions WHERE agent_name = ? ORDER BY id DESC LIMIT ? OFFSET ?").all(agent_name, limit, offset);
343
- }
344
- else {
345
- sessions = db.prepare("SELECT * FROM sessions ORDER BY id DESC LIMIT ? OFFSET ?").all(limit, offset);
346
- }
347
- const total = db.prepare("SELECT COUNT(*) as c FROM sessions").get().c;
348
- return {
349
- content: [{
350
- type: "text",
351
- text: JSON.stringify({ sessions, total, has_more: offset + limit < total }, null, 2),
352
- }],
353
- };
255
+ const repos = getRepos();
256
+ const sessions = repos.sessions.getHistory(limit, offset, agent_name);
257
+ const total = repos.sessions.countAll();
258
+ return success({ sessions, total, has_more: offset + limit < total });
354
259
  });
355
260
  }
356
261
  //# sourceMappingURL=sessions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/tools/sessions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/tools/sessions.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/tools/stats.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoE1D"}
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/tools/stats.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA4BpE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0O1D"}