@saleem11kh/repomem 0.3.1 → 0.5.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 (57) hide show
  1. package/README.md +655 -212
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +230 -14
  4. package/dist/cli.js.map +1 -1
  5. package/dist/config/config.d.ts +20 -0
  6. package/dist/config/config.d.ts.map +1 -1
  7. package/dist/config/config.js +1 -0
  8. package/dist/config/config.js.map +1 -1
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +10 -2
  11. package/dist/index.js.map +1 -1
  12. package/dist/store/adr.d.ts +22 -0
  13. package/dist/store/adr.d.ts.map +1 -0
  14. package/dist/store/adr.js +201 -0
  15. package/dist/store/adr.js.map +1 -0
  16. package/dist/store/capture.d.ts +39 -0
  17. package/dist/store/capture.d.ts.map +1 -0
  18. package/dist/store/capture.js +148 -0
  19. package/dist/store/capture.js.map +1 -0
  20. package/dist/store/embeddings.d.ts +34 -0
  21. package/dist/store/embeddings.d.ts.map +1 -0
  22. package/dist/store/embeddings.js +250 -0
  23. package/dist/store/embeddings.js.map +1 -0
  24. package/dist/store/file-store.d.ts +26 -1
  25. package/dist/store/file-store.d.ts.map +1 -1
  26. package/dist/store/file-store.js +105 -16
  27. package/dist/store/file-store.js.map +1 -1
  28. package/dist/store/git.d.ts +46 -0
  29. package/dist/store/git.d.ts.map +1 -0
  30. package/dist/store/git.js +131 -0
  31. package/dist/store/git.js.map +1 -0
  32. package/dist/store/profile.d.ts +18 -0
  33. package/dist/store/profile.d.ts.map +1 -0
  34. package/dist/store/profile.js +345 -0
  35. package/dist/store/profile.js.map +1 -0
  36. package/dist/tools/mem-context.d.ts.map +1 -1
  37. package/dist/tools/mem-context.js +249 -33
  38. package/dist/tools/mem-context.js.map +1 -1
  39. package/dist/tools/mem-handoff.d.ts.map +1 -1
  40. package/dist/tools/mem-handoff.js +53 -5
  41. package/dist/tools/mem-handoff.js.map +1 -1
  42. package/dist/tools/mem-save.d.ts +5 -0
  43. package/dist/tools/mem-save.d.ts.map +1 -1
  44. package/dist/tools/mem-save.js +60 -2
  45. package/dist/tools/mem-save.js.map +1 -1
  46. package/dist/tools/mem-search.d.ts.map +1 -1
  47. package/dist/tools/mem-search.js +26 -14
  48. package/dist/tools/mem-search.js.map +1 -1
  49. package/dist/tools/session.d.ts +40 -0
  50. package/dist/tools/session.d.ts.map +1 -0
  51. package/dist/tools/session.js +159 -0
  52. package/dist/tools/session.js.map +1 -0
  53. package/dist/tools/util.d.ts +8 -1
  54. package/dist/tools/util.d.ts.map +1 -1
  55. package/dist/tools/util.js +7 -0
  56. package/dist/tools/util.js.map +1 -1
  57. package/package.json +1 -1
@@ -3,6 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.memContext = void 0;
4
4
  const file_store_js_1 = require("../store/file-store.js");
5
5
  const config_js_1 = require("../config/config.js");
6
+ const profile_js_1 = require("../store/profile.js");
7
+ // The profile is the cheapest thing in the packet and the most reused — stack,
8
+ // commands, layout. A typical one runs ~30 lines including churn hotspots, so
9
+ // the cap sits above that; it exists to stop a sprawling monorepo dominating.
10
+ const PROFILE_MAX_LINES = 45;
6
11
  /** Strip YAML front matter for cleaner inlining. */
7
12
  function body(raw) {
8
13
  if (raw.startsWith("---")) {
@@ -18,16 +23,127 @@ function firstHeading(raw, fallback) {
18
23
  const m = raw.match(/^#\s+(.+)$/m);
19
24
  return m ? m[1].trim() : fallback;
20
25
  }
26
+ // A session file accumulates every handoff appended during one day, so inlining
27
+ // it whole makes session-start context grow without bound. Above this many lines
28
+ // we keep only the forward-looking part.
29
+ const SESSION_INLINE_MAX_LINES = 24;
30
+ const SESSION_SECTION_RE = /^\*\*(Done|Next|Blockers):\*\*\s*$/;
31
+ /**
32
+ * The part of the newest session worth inlining: its most recent handoff block,
33
+ * and — once that runs long — the summary plus `Next`/`Blockers` only. `Done` is
34
+ * history the next session can pull with mem_get; `Next` is why we inline at all.
35
+ */
36
+ function latestSessionEntry(raw) {
37
+ const text = body(raw);
38
+ const cut = text.lastIndexOf("\n## ");
39
+ const block = (cut === -1 ? text : text.slice(cut + 1)).trim();
40
+ const lines = block.split("\n");
41
+ if (lines.length <= SESSION_INLINE_MAX_LINES)
42
+ return block;
43
+ const kept = [];
44
+ let section = null;
45
+ for (const line of lines) {
46
+ const m = line.match(SESSION_SECTION_RE);
47
+ if (m)
48
+ section = m[1];
49
+ if (section === "Done")
50
+ continue;
51
+ kept.push(line);
52
+ }
53
+ return (kept.join("\n").replace(/\n{3,}/g, "\n\n").trim() +
54
+ "\n\n_Trimmed — full session via mem_get._");
55
+ }
56
+ /** "0917 auth-refactor" from 2026-07-26-0917-auth-refactor.md; filename otherwise. */
57
+ function sessionLabel(filename) {
58
+ const m = filename.match(/^\d{4}-\d{2}-\d{2}-(\d{4})-(.+)\.md$/);
59
+ return m ? `${m[1]} ${m[2]}` : filename.replace(/\.md$/, "");
60
+ }
61
+ /** A scalar front-matter field, or "". */
62
+ function fmField(raw, key) {
63
+ const m = raw.match(new RegExp(`^${key}:\\s*(.+)$`, "m"));
64
+ return m ? m[1].trim() : "";
65
+ }
21
66
  function readNewest(type, projectRoot, limit) {
22
67
  return (0, file_store_js_1.listFiles)(type, projectRoot)
23
68
  .slice(0, limit)
24
69
  .map((filename) => ({ filename, raw: (0, file_store_js_1.readFile)(type, filename, projectRoot) ?? "" }));
25
70
  }
71
+ // Rough enough to budget with: ~4 characters per token for English prose.
72
+ const CHARS_PER_TOKEN = 4;
73
+ // Ceiling per type even with no budget set. Patterns and issues were previously
74
+ // capped at 100, which is no cap at all — a long-lived repo turned the packet
75
+ // into a wall of text, defeating the point of loading it every session.
76
+ const MAX_ENTRIES_PER_TYPE = 20;
77
+ function estimateTokens(text) {
78
+ return Math.ceil(text.length / CHARS_PER_TOKEN);
79
+ }
80
+ /**
81
+ * How a budget is split before entries get what's left.
82
+ *
83
+ * Without these, the profile and session — which are emitted first — consume the
84
+ * whole budget on a tight setting and the packet arrives with no memory in it at
85
+ * all. That is the least useful trade available: the caller asked for context and
86
+ * got a directory listing.
87
+ */
88
+ const PROFILE_SHARE = 0.25;
89
+ const SESSION_SHARE = 0.35;
90
+ /** Drop whole lines from the end until the text fits, then say that it was cut. */
91
+ function trimToTokens(text, maxTokens, note) {
92
+ if (maxTokens <= 0 || estimateTokens(text) <= maxTokens)
93
+ return text;
94
+ const lines = text.split("\n");
95
+ while (lines.length > 1 && estimateTokens(lines.join("\n") + note) > maxTokens) {
96
+ lines.pop();
97
+ }
98
+ return lines.join("\n").trimEnd() + "\n\n" + note;
99
+ }
100
+ /**
101
+ * Types that appear as summary lists, in display order. Headings differ by mode
102
+ * because "Recent decisions" is a lie once the list is ordered by relevance.
103
+ */
104
+ const LISTED = [
105
+ { type: "decisions", heading: "Recent decisions", taskHeading: "Relevant decisions" },
106
+ { type: "patterns", heading: "Patterns", taskHeading: "Relevant patterns" },
107
+ { type: "issues", heading: "Known issues", taskHeading: "Relevant issues" },
108
+ ];
109
+ /**
110
+ * Every listed entry as a one-line candidate, ranked.
111
+ *
112
+ * With a `task`, ranking is BM25 relevance to that task — the same scoring
113
+ * mem_search uses — so a packet carries what bears on the work at hand rather
114
+ * than whatever happens to be newest. Entries that do not match the task keep a
115
+ * zero score and fall back to recency order, so nothing is hidden outright;
116
+ * it is only pushed down.
117
+ */
118
+ function rankCandidates(task, projectRoot) {
119
+ const scores = new Map();
120
+ if (task) {
121
+ for (const entry of (0, file_store_js_1.scoreEntries)(task, projectRoot)) {
122
+ scores.set(entry.file, entry.score);
123
+ }
124
+ }
125
+ const candidates = [];
126
+ for (const { type } of LISTED) {
127
+ for (const filename of (0, file_store_js_1.listFiles)(type, projectRoot)) {
128
+ const raw = (0, file_store_js_1.readFile)(type, filename, projectRoot) ?? "";
129
+ candidates.push({
130
+ type,
131
+ filename,
132
+ line: `- ${firstHeading(raw, filename)} — ${(0, file_store_js_1.summaryOf)(raw, filename)} (${type}/${filename})`,
133
+ score: scores.get(`${type}/${filename}`) ?? 0,
134
+ order: filename,
135
+ });
136
+ }
137
+ }
138
+ return candidates.sort((a, b) => b.score === a.score ? b.order.localeCompare(a.order) : b.score - a.score);
139
+ }
26
140
  exports.memContext = {
27
141
  name: "mem_context",
28
- description: "Assemble a full project context packet at the start of a session: the latest " +
29
- "session notes, all patterns, open issues, the 5 most recent decisions, and " +
30
- "workspace context. Call this first so you don't have to re-explain the project. " +
142
+ description: "Assemble a project context packet at the start of a session: the project " +
143
+ "profile (stack, commands, layout), the latest session's handoff, and one-line " +
144
+ "summaries of decisions, patterns, and issues. Call this first so you don't have " +
145
+ "to re-explain the project. Pass task='what you are about to do' to rank memory " +
146
+ "by relevance instead of recency, and budget=<tokens> to cap the packet. " +
31
147
  "Set brief=true for a one-paragraph summary.",
32
148
  inputSchema: {
33
149
  type: "object",
@@ -36,6 +152,17 @@ exports.memContext = {
36
152
  type: "boolean",
37
153
  description: "Return a compact one-paragraph summary instead of the full packet.",
38
154
  },
155
+ task: {
156
+ type: "string",
157
+ description: "What this session is about, e.g. 'add rate limiting to the payments API'. " +
158
+ "Ranks memory by relevance to it instead of by recency — worth setting on " +
159
+ "any repo with more than a handful of entries.",
160
+ },
161
+ budget: {
162
+ type: "number",
163
+ description: "Approximate token ceiling for the packet. Entries past the ceiling are " +
164
+ "dropped lowest-relevance first, and the count dropped is always reported.",
165
+ },
39
166
  },
40
167
  },
41
168
  handler(args, projectRoot) {
@@ -44,50 +171,139 @@ exports.memContext = {
44
171
  }
45
172
  const config = (0, config_js_1.loadConfig)(projectRoot);
46
173
  const c = (0, file_store_js_1.counts)(projectRoot);
47
- if (args.brief === true) {
174
+ const brief = () => {
48
175
  const latestSession = readNewest("sessions", projectRoot, 1)[0];
49
176
  const last = latestSession
50
177
  ? firstHeading(latestSession.raw, latestSession.filename)
51
178
  : "no sessions yet";
52
179
  return (`${config.project}: ${c.decisions} decisions, ${c.patterns} patterns, ` +
53
180
  `${c.issues} issues, ${c.sessions} sessions. Last session: ${last}.`);
54
- }
55
- // Full packet, but token-lean: the latest session is inlined (it holds the
56
- // "what's next"); everything else is a one-line summary the agent can expand
57
- // on demand with mem_get. This keeps session-start context small.
181
+ };
182
+ if (args.brief === true)
183
+ return brief();
184
+ // Full packet, but token-lean: the latest session's most recent handoff is
185
+ // inlined (it holds the "what's next"); everything else is a one-line summary
186
+ // the agent can expand on demand with mem_get. Keeps session-start small.
187
+ const task = typeof args.task === "string" ? args.task.trim() : "";
188
+ const budget = typeof args.budget === "number" && args.budget > 0 ? args.budget : 0;
58
189
  const out = [];
59
190
  out.push(`# Context for ${config.project}`, "");
60
- // Latest session inlined in full.
61
- const session = readNewest("sessions", projectRoot, 1)[0];
191
+ // Project profile first: stack, commands, layout. Without it an agent
192
+ // re-derives the same facts by globbing the tree every single session.
193
+ const profile = (0, profile_js_1.readProfile)(projectRoot);
194
+ if (profile) {
195
+ const lines = profile
196
+ .split("\n")
197
+ .filter((l) => !l.startsWith("# ") && !l.startsWith("_Auto-generated"))
198
+ .join("\n")
199
+ .replace(/\n{3,}/g, "\n\n")
200
+ .trim()
201
+ .split("\n");
202
+ const note = "_Profile trimmed — full text in .repomem/project.md._";
203
+ let text = lines.slice(0, PROFILE_MAX_LINES).join("\n");
204
+ if (lines.length > PROFILE_MAX_LINES)
205
+ text += `\n\n${note}`;
206
+ if (budget)
207
+ text = trimToTokens(text, budget * PROFILE_SHARE, note);
208
+ out.push(text, "");
209
+ }
210
+ // Latest session — most recent handoff block, trimmed when it runs long.
211
+ const sessions = readNewest("sessions", projectRoot, 6);
212
+ const session = sessions[0];
62
213
  out.push("## Last session");
63
- out.push(session ? `### ${session.filename}\n\n${body(session.raw)}` : "_none yet_");
214
+ if (session) {
215
+ const agent = fmField(session.raw, "agent");
216
+ out.push(`### ${sessionLabel(session.filename)}${agent ? ` (${agent})` : ""} · sessions/${session.filename}`);
217
+ out.push("");
218
+ const entry = latestSessionEntry(session.raw);
219
+ out.push(budget
220
+ ? trimToTokens(entry, budget * SESSION_SHARE, "_Trimmed — full session via mem_get._")
221
+ : entry);
222
+ }
223
+ else {
224
+ out.push("_none yet_");
225
+ }
64
226
  out.push("");
65
- const summaryList = (type, heading, limit) => {
66
- out.push(`## ${heading}`);
67
- const entries = readNewest(type, projectRoot, limit);
68
- if (entries.length === 0)
69
- out.push("_none yet_");
70
- for (const e of entries) {
71
- out.push(`- ${firstHeading(e.raw, e.filename)} ${(0, file_store_js_1.summaryOf)(e.raw, e.filename)} (${type}/${e.filename})`);
227
+ // Other sessions from the same day — parallel agents or teammates. Named,
228
+ // not inlined: knowing they happened matters, reading them all does not.
229
+ const day = session ? session.filename.slice(0, 10) : "";
230
+ const alsoToday = sessions.slice(1).filter((s) => s.filename.startsWith(day));
231
+ if (alsoToday.length) {
232
+ out.push("## Also today");
233
+ for (const s of alsoToday) {
234
+ const agent = fmField(s.raw, "agent");
235
+ out.push(`- ${sessionLabel(s.filename)}${agent ? ` (${agent})` : ""} — ${(0, file_store_js_1.summaryOf)(s.raw, s.filename)}`);
72
236
  }
73
237
  out.push("");
74
- };
75
- summaryList("decisions", "Recent decisions", 5);
76
- summaryList("patterns", "Patterns", 100);
77
- summaryList("issues", "Known issues", 100);
78
- out.push("_Expand any entry with mem_get(\"type/filename\"). Search with mem_search._");
79
- // Workspace pointer.
80
- if (config.workspace || config.linked.length) {
81
- out.push("");
82
- out.push("## Linked context");
83
- if (config.workspace)
84
- out.push(`- workspace: ${config.workspace}`);
85
- for (const l of config.linked) {
86
- out.push(`- ${l.repo}${l.relation ? ` (${l.relation})` : ""}`);
238
+ }
239
+ // The prelude is capped by its shares above, so what's left here is real —
240
+ // provided the structural text still to come is also paid for. Headings and
241
+ // closing notes are emitted after the entries are chosen, so reserve them
242
+ // now or the packet overshoots by however much they cost.
243
+ const ranked = rankCandidates(task, projectRoot);
244
+ // The per-type cap binds during selection, not at render time: capping while
245
+ // printing would drop entries that were never counted as dropped.
246
+ const eligible = [];
247
+ const perType = new Map();
248
+ for (const candidate of ranked) {
249
+ if ((perType.get(candidate.type) ?? 0) >= MAX_ENTRIES_PER_TYPE)
250
+ continue;
251
+ perType.set(candidate.type, (perType.get(candidate.type) ?? 0) + 1);
252
+ eligible.push(candidate);
253
+ }
254
+ const prelude = out.slice();
255
+ const render = (kept) => {
256
+ const lines = prelude.slice();
257
+ const dropped = ranked.length - kept.length;
258
+ if (task)
259
+ lines.push(`_Ranked by relevance to: ${task}_`, "");
260
+ for (const { type, heading, taskHeading } of LISTED) {
261
+ const forType = kept.filter((k) => k.type === type);
262
+ lines.push(`## ${task ? taskHeading : heading}`);
263
+ if (forType.length === 0) {
264
+ lines.push(c[type] === 0 ? "_none yet_" : "_none fit the budget — see below_");
265
+ }
266
+ for (const entry of forType)
267
+ lines.push(entry.line);
268
+ lines.push("");
269
+ }
270
+ // Never truncate silently: a packet that omits things without saying so
271
+ // reads as "this is everything", which is worse than being verbose.
272
+ if (dropped > 0) {
273
+ lines.push(`_${dropped} further ${dropped === 1 ? "entry" : "entries"} not shown` +
274
+ `${budget ? ` (token budget ${budget})` : ""} — find them with mem_search._`);
87
275
  }
88
- out.push("_Use mem_search with linked=true to search these._");
276
+ lines.push('_Expand any entry with mem_get("type/filename"). Search with mem_search._');
277
+ if (config.workspace || config.linked.length) {
278
+ lines.push("", "## Linked context");
279
+ if (config.workspace)
280
+ lines.push(`- workspace: ${config.workspace}`);
281
+ for (const l of config.linked) {
282
+ lines.push(`- ${l.repo}${l.relation ? ` (${l.relation})` : ""}`);
283
+ }
284
+ lines.push("_Use mem_search with linked=true to search these._");
285
+ }
286
+ return lines.join("\n").trim();
287
+ };
288
+ // Measure the real packet and shed the lowest-ranked entry until it fits.
289
+ // Estimating the cost of headings, placeholders, and separators up front got
290
+ // this wrong by ~13 tokens and silently degraded whole packets to the brief
291
+ // form; rendering and measuring cannot drift the same way.
292
+ let kept = eligible;
293
+ let packet = render(kept);
294
+ while (budget && kept.length > 0 && estimateTokens(packet) > budget) {
295
+ kept = kept.slice(0, kept.length - 1);
296
+ packet = render(kept);
297
+ }
298
+ // A packet has a floor — header, a slice of profile and session, headings,
299
+ // notes. Below it, honour the budget by degrading to the brief form rather
300
+ // than quietly handing back more than was asked for.
301
+ if (budget && estimateTokens(packet) > budget) {
302
+ return (brief() +
303
+ `\n\n_A full packet needs ~${estimateTokens(packet)} tokens but the budget was ` +
304
+ `${budget}. Raise it, or use mem_search for specifics._`);
89
305
  }
90
- return out.join("\n").trim();
306
+ return packet;
91
307
  },
92
308
  };
93
309
  //# sourceMappingURL=mem-context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mem-context.js","sourceRoot":"","sources":["../../src/tools/mem-context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mem-context.js","sourceRoot":"","sources":["../../src/tools/mem-context.ts"],"names":[],"mappings":";;;AAAA,0DAQgC;AAChC,mDAAiD;AACjD,oDAAkD;AAGlD,+EAA+E;AAC/E,8EAA8E;AAC9E,8EAA8E;AAC9E,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAE7B,oDAAoD;AACpD,SAAS,IAAI,CAAC,GAAW;IACvB,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACpC,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;YACzC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC;AAED,SAAS,YAAY,CAAC,GAAW,EAAE,QAAgB;IACjD,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACnC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;AACpC,CAAC;AAED,gFAAgF;AAChF,iFAAiF;AACjF,yCAAyC;AACzC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AACpC,MAAM,kBAAkB,GAAG,oCAAoC,CAAC;AAEhE;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,GAAW;IACrC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACvB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAE/D,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,KAAK,CAAC,MAAM,IAAI,wBAAwB;QAAE,OAAO,KAAK,CAAC;IAE3D,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACzC,IAAI,CAAC;YAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,OAAO,KAAK,MAAM;YAAE,SAAS;QACjC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CACL,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE;QACjD,2CAA2C,CAC5C,CAAC;AACJ,CAAC;AAED,sFAAsF;AACtF,SAAS,YAAY,CAAC,QAAgB;IACpC,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACjE,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,0CAA0C;AAC1C,SAAS,OAAO,CAAC,GAAW,EAAE,GAAW;IACvC,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1D,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9B,CAAC;AAED,SAAS,UAAU,CACjB,IAAgB,EAChB,WAAmB,EACnB,KAAa;IAEb,OAAO,IAAA,yBAAS,EAAC,IAAI,EAAE,WAAW,CAAC;SAChC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;SACf,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAA,wBAAQ,EAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AACzF,CAAC;AAED,0EAA0E;AAC1E,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B,gFAAgF;AAChF,8EAA8E;AAC9E,wEAAwE;AACxE,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEhC,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,aAAa,GAAG,IAAI,CAAC;AAC3B,MAAM,aAAa,GAAG,IAAI,CAAC;AAE3B,mFAAmF;AACnF,SAAS,YAAY,CAAC,IAAY,EAAE,SAAiB,EAAE,IAAY;IACjE,IAAI,SAAS,IAAI,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,SAAS;QAAE,OAAO,IAAI,CAAC;IACrE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC;QAC/E,KAAK,CAAC,GAAG,EAAE,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC;AACpD,CAAC;AAED;;;GAGG;AACH,MAAM,MAAM,GAAiE;IAC3E,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,oBAAoB,EAAE;IACrF,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,mBAAmB,EAAE;IAC3E,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,EAAE;CAC5E,CAAC;AAWF;;;;;;;;GAQG;AACH,SAAS,cAAc,CAAC,IAAY,EAAE,WAAmB;IACvD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,IAAI,IAAI,EAAE,CAAC;QACT,KAAK,MAAM,KAAK,IAAI,IAAA,4BAAY,EAAC,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC;YACpD,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAgB,EAAE,CAAC;IACnC,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,MAAM,EAAE,CAAC;QAC9B,KAAK,MAAM,QAAQ,IAAI,IAAA,yBAAS,EAAC,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC;YACpD,MAAM,GAAG,GAAG,IAAA,wBAAQ,EAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC;YACxD,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI;gBACJ,QAAQ;gBACR,IAAI,EAAE,KAAK,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,IAAA,yBAAS,EAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,IAAI,IAAI,QAAQ,GAAG;gBAC7F,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,QAAQ,EAAE,CAAC,IAAI,CAAC;gBAC7C,KAAK,EAAE,QAAQ;aAChB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC9B,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CACzE,CAAC;AACJ,CAAC;AAEY,QAAA,UAAU,GAAY;IACjC,IAAI,EAAE,aAAa;IACnB,WAAW,EACT,2EAA2E;QAC3E,gFAAgF;QAChF,kFAAkF;QAClF,iFAAiF;QACjF,0EAA0E;QAC1E,6CAA6C;IAC/C,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,oEAAoE;aAClF;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,4EAA4E;oBAC5E,2EAA2E;oBAC3E,+CAA+C;aAClD;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,yEAAyE;oBACzE,2EAA2E;aAC9E;SACF;KACF;IACD,OAAO,CAAC,IAAI,EAAE,WAAW;QACvB,IAAI,CAAC,IAAA,6BAAa,EAAC,WAAW,CAAC,EAAE,CAAC;YAChC,OAAO,kEAAkE,CAAC;QAC5E,CAAC;QACD,MAAM,MAAM,GAAG,IAAA,sBAAU,EAAC,WAAW,CAAC,CAAC;QACvC,MAAM,CAAC,GAAG,IAAA,sBAAM,EAAC,WAAW,CAAC,CAAC;QAE9B,MAAM,KAAK,GAAG,GAAG,EAAE;YACjB,MAAM,aAAa,GAAG,UAAU,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAChE,MAAM,IAAI,GAAG,aAAa;gBACxB,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,GAAG,EAAE,aAAa,CAAC,QAAQ,CAAC;gBACzD,CAAC,CAAC,iBAAiB,CAAC;YACtB,OAAO,CACL,GAAG,MAAM,CAAC,OAAO,KAAK,CAAC,CAAC,SAAS,eAAe,CAAC,CAAC,QAAQ,aAAa;gBACvE,GAAG,CAAC,CAAC,MAAM,YAAY,CAAC,CAAC,QAAQ,4BAA4B,IAAI,GAAG,CACrE,CAAC;QACJ,CAAC,CAAC;QAEF,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI;YAAE,OAAO,KAAK,EAAE,CAAC;QAExC,2EAA2E;QAC3E,8EAA8E;QAC9E,0EAA0E;QAC1E,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpF,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,GAAG,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAEhD,sEAAsE;QACtE,uEAAuE;QACvE,MAAM,OAAO,GAAG,IAAA,wBAAW,EAAC,WAAW,CAAC,CAAC;QACzC,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,KAAK,GAAG,OAAO;iBAClB,KAAK,CAAC,IAAI,CAAC;iBACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;iBACtE,IAAI,CAAC,IAAI,CAAC;iBACV,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;iBAC1B,IAAI,EAAE;iBACN,KAAK,CAAC,IAAI,CAAC,CAAC;YACf,MAAM,IAAI,GAAG,uDAAuD,CAAC;YACrE,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxD,IAAI,KAAK,CAAC,MAAM,GAAG,iBAAiB;gBAAE,IAAI,IAAI,OAAO,IAAI,EAAE,CAAC;YAC5D,IAAI,MAAM;gBAAE,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,IAAI,CAAC,CAAC;YACpE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrB,CAAC;QAED,yEAAyE;QACzE,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC5B,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC5B,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC5C,GAAG,CAAC,IAAI,CACN,OAAO,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,iBAAiB,OAAO,CAAC,QAAQ,EAAE,CACtG,CAAC;YACF,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACb,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC9C,GAAG,CAAC,IAAI,CACN,MAAM;gBACJ,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE,uCAAuC,CAAC;gBACtF,CAAC,CAAC,KAAK,CACV,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzB,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEb,0EAA0E;QAC1E,yEAAyE;QACzE,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9E,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;YACrB,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC1B,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBACtC,GAAG,CAAC,IAAI,CACN,KAAK,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,IAAA,yBAAS,EAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAC/F,CAAC;YACJ,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,CAAC;QAED,2EAA2E;QAC3E,4EAA4E;QAC5E,0EAA0E;QAC1E,0DAA0D;QAC1D,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAEjD,6EAA6E;QAC7E,kEAAkE;QAClE,MAAM,QAAQ,GAAgB,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAsB,CAAC;QAC9C,KAAK,MAAM,SAAS,IAAI,MAAM,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,oBAAoB;gBAAE,SAAS;YACzE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACpE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,CAAC,IAAiB,EAAU,EAAE;YAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC5C,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,4BAA4B,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;YAE9D,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,MAAM,EAAE,CAAC;gBACpD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;gBACpD,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBACjD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC;gBACjF,CAAC;gBACD,KAAK,MAAM,KAAK,IAAI,OAAO;oBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACpD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;YAED,wEAAwE;YACxE,oEAAoE;YACpE,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBAChB,KAAK,CAAC,IAAI,CACR,IAAI,OAAO,YAAY,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,YAAY;oBACpE,GAAG,MAAM,CAAC,CAAC,CAAC,kBAAkB,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,gCAAgC,CAC/E,CAAC;YACJ,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;YAExF,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,mBAAmB,CAAC,CAAC;gBACpC,IAAI,MAAM,CAAC,SAAS;oBAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;gBACrE,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAC9B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACnE,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;YACnE,CAAC;YACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACjC,CAAC,CAAC;QAEF,0EAA0E;QAC1E,6EAA6E;QAC7E,4EAA4E;QAC5E,2DAA2D;QAC3D,IAAI,IAAI,GAAG,QAAQ,CAAC;QACpB,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1B,OAAO,MAAM,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,cAAc,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;YACpE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACtC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QAED,2EAA2E;QAC3E,2EAA2E;QAC3E,qDAAqD;QACrD,IAAI,MAAM,IAAI,cAAc,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;YAC9C,OAAO,CACL,KAAK,EAAE;gBACP,6BAA6B,cAAc,CAAC,MAAM,CAAC,6BAA6B;gBAChF,GAAG,MAAM,+CAA+C,CACzD,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mem-handoff.d.ts","sourceRoot":"","sources":["../../src/tools/mem-handoff.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAmC,MAAM,WAAW,CAAC;AAErE,eAAO,MAAM,UAAU,EAAE,OAoExB,CAAC"}
1
+ {"version":3,"file":"mem-handoff.d.ts","sourceRoot":"","sources":["../../src/tools/mem-handoff.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAA4B,MAAM,WAAW,CAAC;AAI9D,eAAO,MAAM,UAAU,EAAE,OAkHxB,CAAC"}
@@ -2,12 +2,18 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.memHandoff = void 0;
4
4
  const file_store_js_1 = require("../store/file-store.js");
5
+ const git_js_1 = require("../store/git.js");
5
6
  const util_js_1 = require("./util.js");
7
+ const mem_save_js_1 = require("./mem-save.js");
8
+ const session_js_1 = require("./session.js");
6
9
  exports.memHandoff = {
7
10
  name: "mem_handoff",
8
- description: "Close out a session: write a structured handoff to sessions/YYYY-MM-DD.md so " +
9
- "the next session (you, a teammate, or a different agent) picks up exactly where " +
10
- "this one left off. Records what was done, what's next, and any blockers.",
11
+ description: "Close out a session: write a structured handoff to sessions/ so the next " +
12
+ "session (you, a teammate, or a different agent) picks up exactly where this one " +
13
+ "left off. Records what was done, what's next, and any blockers. Commits made and " +
14
+ "files still uncommitted since the session began are filled in from git " +
15
+ "automatically — you only need to supply the parts git cannot know: why, and " +
16
+ "what's next.",
11
17
  inputSchema: {
12
18
  type: "object",
13
19
  properties: {
@@ -27,6 +33,22 @@ exports.memHandoff = {
27
33
  items: { type: "string" },
28
34
  description: "Open blockers or gotchas.",
29
35
  },
36
+ session: {
37
+ type: "string",
38
+ description: "Optional name for this session, e.g. 'auth-refactor'. Names the session " +
39
+ "file so parallel sessions stay separate and findable in mem_context.",
40
+ },
41
+ git: {
42
+ type: "boolean",
43
+ description: "Include commits and uncommitted changes since the session began. " +
44
+ "Default true; set false to write a handoff with no git detail.",
45
+ },
46
+ since: {
47
+ type: "string",
48
+ description: "Override the git window, as 'YYYY-MM-DD HH:MM'. Defaults to when this " +
49
+ "session started. Used by `repomem capture`, which runs in its own process " +
50
+ "and so has no session to measure from.",
51
+ },
30
52
  },
31
53
  required: ["summary"],
32
54
  },
@@ -40,15 +62,37 @@ exports.memHandoff = {
40
62
  const done = (0, util_js_1.strArray)(args.done);
41
63
  const next = (0, util_js_1.strArray)(args.next);
42
64
  const blockers = (0, util_js_1.strArray)(args.blockers);
65
+ // The factual half comes from git; the agent supplies the judgement half.
66
+ const since = (0, util_js_1.str)(args.since) || (0, session_js_1.sessionState)().startedAt;
67
+ const activity = args.git === false ? null : (0, git_js_1.activitySince)(since, projectRoot);
43
68
  const lines = [];
44
69
  lines.push(`\n## ${(0, util_js_1.timestamp)()} — Handoff`, "");
45
70
  lines.push(summary, "");
71
+ if (activity?.branch) {
72
+ lines.push(`_branch: ${activity.branch}_`, "");
73
+ }
46
74
  if (done.length) {
47
75
  lines.push("**Done:**");
48
76
  for (const d of done)
49
77
  lines.push(`- ${d}`);
50
78
  lines.push("");
51
79
  }
80
+ if (activity?.commits.length) {
81
+ lines.push("**Committed this session:**");
82
+ for (const c of activity.commits)
83
+ lines.push(`- ${c}`);
84
+ if (activity.moreCommits)
85
+ lines.push(`- _…and ${activity.moreCommits} more_`);
86
+ lines.push("");
87
+ }
88
+ if (activity?.changed.length) {
89
+ lines.push("**Still uncommitted:**");
90
+ for (const c of activity.changed)
91
+ lines.push(`- ${c}`);
92
+ if (activity.moreChanged)
93
+ lines.push(`- _…and ${activity.moreChanged} more_`);
94
+ lines.push("");
95
+ }
52
96
  if (next.length) {
53
97
  lines.push("**Next:**");
54
98
  for (const n of next)
@@ -61,12 +105,16 @@ exports.memHandoff = {
61
105
  lines.push(`- ${b}`);
62
106
  lines.push("");
63
107
  }
64
- const filename = `${(0, util_js_1.today)()}.md`;
108
+ const sessionName = (0, util_js_1.str)(args.session);
109
+ const filename = sessionName
110
+ ? (0, session_js_1.nameSession)(sessionName, projectRoot)
111
+ : (0, session_js_1.reserveSessionFile)(projectRoot);
112
+ (0, mem_save_js_1.ensureSessionHeader)(filename, summary, projectRoot);
65
113
  (0, file_store_js_1.writeFile)("sessions", filename, lines.join("\n"), { append: true }, projectRoot);
66
114
  (0, file_store_js_1.generateIndex)(projectRoot);
67
115
  return (`✔ Handoff written to sessions/${filename}\n\n` +
68
116
  "Commit it so your team and next session inherit it:\n" +
69
- ` git add .repomem/ && git commit -m "memory: session handoff ${(0, util_js_1.today)()}"`);
117
+ ` git add .repomem/ && git commit -m "memory: session handoff ${filename.replace(/\.md$/, "")}"`);
70
118
  },
71
119
  };
72
120
  //# sourceMappingURL=mem-handoff.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mem-handoff.js","sourceRoot":"","sources":["../../src/tools/mem-handoff.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mem-handoff.js","sourceRoot":"","sources":["../../src/tools/mem-handoff.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,10 @@
1
1
  import { MEMORY_TYPES } from "../store/file-store.js";
2
2
  import { ToolDef } from "./util.js";
3
+ /**
4
+ * Write the session file's front matter the first time it is touched. Later
5
+ * writes just append blocks, so the header reflects when the session opened.
6
+ */
7
+ export declare function ensureSessionHeader(filename: string, summary: string, projectRoot: string): void;
3
8
  export declare const memSave: ToolDef;
4
9
  export { MEMORY_TYPES };
5
10
  //# sourceMappingURL=mem-save.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mem-save.d.ts","sourceRoot":"","sources":["../../src/tools/mem-save.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,YAAY,EAIb,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,OAAO,EAA4C,MAAM,WAAW,CAAC;AAa9E,eAAO,MAAM,OAAO,EAAE,OA4FrB,CAAC;AAGF,OAAO,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"mem-save.d.ts","sourceRoot":"","sources":["../../src/tools/mem-save.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,YAAY,EAKb,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,OAAO,EAA4C,MAAM,WAAW,CAAC;AAc9E;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,IAAI,CAIN;AAED,eAAO,MAAM,OAAO,EAAE,OAyGrB,CAAC;AAGF,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -1,9 +1,46 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.MEMORY_TYPES = exports.memSave = void 0;
37
+ exports.ensureSessionHeader = ensureSessionHeader;
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
4
40
  const file_store_js_1 = require("../store/file-store.js");
5
41
  Object.defineProperty(exports, "MEMORY_TYPES", { enumerable: true, get: function () { return file_store_js_1.MEMORY_TYPES; } });
6
42
  const util_js_1 = require("./util.js");
43
+ const session_js_1 = require("./session.js");
7
44
  const TYPE_ALIASES = {
8
45
  decision: "decisions",
9
46
  decisions: "decisions",
@@ -14,6 +51,16 @@ const TYPE_ALIASES = {
14
51
  issue: "issues",
15
52
  issues: "issues",
16
53
  };
54
+ /**
55
+ * Write the session file's front matter the first time it is touched. Later
56
+ * writes just append blocks, so the header reflects when the session opened.
57
+ */
58
+ function ensureSessionHeader(filename, summary, projectRoot) {
59
+ const filePath = path.join((0, file_store_js_1.getRepomemRoot)(projectRoot), "sessions", filename);
60
+ if (fs.existsSync(filePath))
61
+ return;
62
+ (0, file_store_js_1.writeFile)("sessions", filename, (0, session_js_1.sessionFrontMatter)(summary), {}, projectRoot);
63
+ }
17
64
  exports.memSave = {
18
65
  name: "mem_save",
19
66
  description: "Save a memory to .repomem/. type is one of decision|session|pattern|issue. " +
@@ -49,6 +96,12 @@ exports.memSave = {
49
96
  type: "string",
50
97
  description: "Optional filename of a prior decision this one replaces (decisions only).",
51
98
  },
99
+ session: {
100
+ type: "string",
101
+ description: "Optional name for the running session (sessions only), e.g. 'auth-refactor'. " +
102
+ "Names the session file so parallel sessions stay separate and findable. " +
103
+ "Set it once; later saves reuse it.",
104
+ },
52
105
  },
53
106
  required: ["type", "title", "content"],
54
107
  },
@@ -74,9 +127,14 @@ exports.memSave = {
74
127
  const linkLine = links.length
75
128
  ? `\nRelated: ${links.map((l) => `[[${(0, util_js_1.slugify)(l)}]]`).join(" ")}\n`
76
129
  : "";
77
- // Sessions are date-keyed and appended to across a single day.
130
+ // One file per session, appended to as the session goes. Named so that
131
+ // parallel sessions never share a file — see ./session.ts.
78
132
  if (type === "sessions") {
79
- const filename = `${(0, util_js_1.today)()}.md`;
133
+ const sessionName = (0, util_js_1.str)(args.session);
134
+ const filename = sessionName
135
+ ? (0, session_js_1.nameSession)(sessionName, projectRoot)
136
+ : (0, session_js_1.reserveSessionFile)(projectRoot);
137
+ ensureSessionHeader(filename, summary || title, projectRoot);
80
138
  const block = `\n## ${(0, util_js_1.timestamp)()} — ${title}\n\n` +
81
139
  (tags.length ? `_tags: ${tags.join(", ")}_\n\n` : "") +
82
140
  `${content}\n${linkLine}`;
@@ -1 +1 @@
1
- {"version":3,"file":"mem-save.js","sourceRoot":"","sources":["../../src/tools/mem-save.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mem-save.js","sourceRoot":"","sources":["../../src/tools/mem-save.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"mem-search.d.ts","sourceRoot":"","sources":["../../src/tools/mem-search.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAO,MAAM,WAAW,CAAC;AAEzC,eAAO,MAAM,SAAS,EAAE,OA6CvB,CAAC"}
1
+ {"version":3,"file":"mem-search.d.ts","sourceRoot":"","sources":["../../src/tools/mem-search.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAO,MAAM,WAAW,CAAC;AAEzC,eAAO,MAAM,SAAS,EAAE,OAyCvB,CAAC"}