@dsh-cc/memory-consolidation 0.7.1 → 0.8.0-rc.2

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.
package/lib/index.d.ts CHANGED
@@ -17,6 +17,7 @@
17
17
  */
18
18
  import type { Context } from '@deepseek-ai/cordis';
19
19
  import z from '@deepseek-ai/schemastery';
20
+ export { applyEntrypointFallback } from './memory-job.ts';
20
21
  export { LOCK_FILE, LOCK_STALE_MS, readLastConsolidatedAt, rollbackLock, tryAcquireLock } from './lock.ts';
21
22
  export { gatesPass, timeGatePasses, sessionGatePasses } from './gates.ts';
22
23
  export type { ConsolidationGateInput } from './gates.ts';
@@ -41,8 +42,12 @@ export interface Config {
41
42
  minSessions?: number;
42
43
  /** A lock holder is stale past this window (default 1 hour). */
43
44
  lockStaleMs?: number;
45
+ /** Minimum minutes between forced (pressure) dreams (default 60). */
46
+ pressureCooldownMinutes?: number;
44
47
  /** One-shot subagent provider for forks (default `fork`). */
45
48
  subagentProviderName?: string;
49
+ /** Session store root the gates scan (default `<DSH_HOME>/sessions`). */
50
+ sessionsRoot?: string;
46
51
  }
47
52
  export declare const Config: z<Config>;
48
53
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,CAAC,MAAM,0BAA0B,CAAA;AAiBxC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,sBAAsB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1G,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AACzE,YAAY,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAG9E,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,yBAAyB,EACzB,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,gBAAgB,CAAA;AACvB,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAEpE,eAAO,MAAM,IAAI,yBAAyB,CAAA;AAC1C,uEAAuE;AACvE,eAAO,MAAM,MAAM,UAAwB,CAAA;AAE3C,0CAA0C;AAC1C,MAAM,WAAW,MAAM;IACrB,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,gDAAgD;IAChD,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,6DAA6D;IAC7D,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED,eAAO,MAAM,MAAM,EAAE,CAAC,CAAC,MAAM,CAQ3B,CAAA;AAyHF;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,MAAW,GAAG,IAAI,CAkD7D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,CAAC,MAAM,0BAA0B,CAAA;AASxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AASzD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,sBAAsB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1G,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AACzE,YAAY,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAG9E,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,yBAAyB,EACzB,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,gBAAgB,CAAA;AACvB,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAEpE,eAAO,MAAM,IAAI,yBAAyB,CAAA;AAC1C,uEAAuE;AACvE,eAAO,MAAM,MAAM,UAAwB,CAAA;AAE3C,0CAA0C;AAC1C,MAAM,WAAW,MAAM;IACrB,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,gDAAgD;IAChD,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,qEAAqE;IACrE,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,6DAA6D;IAC7D,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,yEAAyE;IACzE,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,eAAO,MAAM,MAAM,EAAE,CAAC,CAAC,MAAM,CAU3B,CAAA;AAIF;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,MAAW,GAAG,IAAI,CAkF7D"}
package/lib/index.js CHANGED
@@ -16,14 +16,17 @@
16
16
  * @module @dsh-cc/memory-consolidation
17
17
  */
18
18
  import { join } from 'node:path';
19
+ import * as zlib from 'node:zlib';
19
20
  import z from '@deepseek-ai/schemastery';
20
21
  import { delegationDepthOf } from '@deepseek-ai/dsh-subagent';
21
22
  import { defaultDshHome } from '@deepseek-ai/dsh-home-paths';
22
- import { MEMORY_TOOL_FILTER } from "./tools.js";
23
23
  import { buildConsolidationPrompt, buildExtractionPrompt } from "./prompts.js";
24
- import { gatesPass } from "./gates.js";
24
+ import { timeGatePasses, sessionGatePasses } from "./gates.js";
25
+ import { gateWindow, scanSessions } from "./session-scan.js";
25
26
  import { readLastConsolidatedAt, rollbackLock, tryAcquireLock, LOCK_STALE_MS } from "./lock.js";
26
- import { MEMORY_WRITES_SCHEMA, memoryWritePolicy, resolveWorkspaceMemoryDir, validateMemoryWrites, writeMemoryFiles, } from '@dsh-cc/memory';
27
+ import { startMemoryJob } from "./memory-job.js";
28
+ export { applyEntrypointFallback } from "./memory-job.js";
29
+ import { memoryWritePolicy, resolveWorkspaceMemoryDir, readPressure, markPressureForced, clearPressure, } from '@dsh-cc/memory';
27
30
  export { LOCK_FILE, LOCK_STALE_MS, readLastConsolidatedAt, rollbackLock, tryAcquireLock } from "./lock.js";
28
31
  export { gatesPass, timeGatePasses, sessionGatePasses } from "./gates.js";
29
32
  export { MEMORY_AGENT_TOOLS, MEMORY_TOOL_FILTER } from "./tools.js";
@@ -41,75 +44,10 @@ export const Config = z.object({
41
44
  minHours: z.number().default(24),
42
45
  minSessions: z.number().default(5),
43
46
  lockStaleMs: z.number().default(LOCK_STALE_MS),
47
+ pressureCooldownMinutes: z.number().default(60),
44
48
  subagentProviderName: z.string().default('fork'),
49
+ sessionsRoot: z.string(),
45
50
  });
46
- /**
47
- * Start a memory-scoped forked subagent as a background job. The fork reports
48
- * its file set via `outputSchema`; on settlement the plugin validates the
49
- * batch and writes it host-side under a policy confined to `dir`. Resolves to
50
- * a control object with an abort hook and a settle promise (true only when
51
- * the reported writes were validated and persisted).
52
- */
53
- async function startMemoryJob(ctx, agent, dir, provider, label, prompt) {
54
- const jobs = ctx.get('jobs');
55
- const subagents = ctx.get('subagents');
56
- if (jobs === undefined || subagents === undefined) {
57
- return { abort: () => { }, settled: Promise.resolve(false) };
58
- }
59
- const fs = ctx.get('fs');
60
- const controller = new AbortController();
61
- // `subagents.start` is async upstream — awaiting it is what exposes the run's
62
- // `result` promise. Reading `run.result` on the un-awaited Promise throws
63
- // "Cannot read properties of undefined (reading 'then')" and poisons the
64
- // turn-stopping dispatch.
65
- const run = await subagents.start(provider, {
66
- label,
67
- signal: controller.signal,
68
- prompt: [{ type: 'text', text: prompt }],
69
- parent: agent,
70
- toolFilter: MEMORY_TOOL_FILTER,
71
- // Defense-in-depth recursion cap: the top-level listener already gates on
72
- // depth zero, so this fork's child never delegates. maxDepth is compared
73
- // against the CHILD's resolved depth (parent + 1); a top-level parent's
74
- // child resolves to 1 and passes, a grandchild to 2 is rejected.
75
- maxDepth: 1,
76
- outputSchema: MEMORY_WRITES_SCHEMA,
77
- });
78
- // Real job-done wiring: `done` maps the subagent outcome onto the JobHooks
79
- // contract (must never reject). Aborted → killed (rolls back the dream
80
- // lock); a non-completed stopReason, a missing/invalid payload, or a
81
- // write-back failure → failed with detail; a validated, persisted batch →
82
- // completed. All branches resolve.
83
- const done = run.result.then(async (res) => {
84
- if (controller.signal.aborted)
85
- return { status: 'killed' };
86
- if (res?.stopReason !== 'completed') {
87
- return { status: 'failed', detail: `memory fork ended with stopReason ${String(res?.stopReason)}` };
88
- }
89
- if (fs === undefined) {
90
- return { status: 'failed', detail: 'fs seam unavailable for memory write-back' };
91
- }
92
- try {
93
- const writes = validateMemoryWrites(res.structured);
94
- await writeMemoryFiles(fs, dir, writes);
95
- return { status: 'completed' };
96
- }
97
- catch (err) {
98
- return { status: 'failed', detail: String(err) };
99
- }
100
- }, (err) => controller.signal.aborted ? { status: 'killed' } : { status: 'failed', detail: String(err) });
101
- const settled = done.then(o => o.status === 'completed');
102
- jobs.start({
103
- kind: 'subagent',
104
- label,
105
- owner: agent,
106
- run: () => ({
107
- cancel: (reason) => { controller.abort(reason); },
108
- done,
109
- }),
110
- });
111
- return { abort: (reason) => { controller.abort(reason); }, settled };
112
- }
113
51
  /**
114
52
  * Register the consolidation plugin.
115
53
  * @param ctx - the host context with jobs, subagents, fs, and sessions.
@@ -123,11 +61,41 @@ export function apply(ctx, config = {}) {
123
61
  const provider = config.subagentProviderName ?? 'fork';
124
62
  const minHours = config.minHours ?? 24;
125
63
  const minSessions = config.minSessions ?? 5;
64
+ const pressureCooldownMinutes = config.pressureCooldownMinutes ?? 60;
65
+ const sessionsRoot = config.sessionsRoot ?? join(defaultDshHome(), 'sessions');
126
66
  // Per-session extraction single-flight. Keyed by session id so each top-level
127
67
  // agent's in-flight flag and last-spawned event count are isolated.
128
68
  const flight = new Map();
129
69
  // One dream in flight across the whole plugin instance (per memory dir).
130
70
  let dreamInFlight = false;
71
+ // Scan memo (plan §3.4): caches the RAW unfiltered SessionScanResult for
72
+ // SCAN_MEMO_MS; the lastAt filter/count/hints are recomputed per call. It
73
+ // bounds the failure-path scan storm (lock rolled back → time gate keeps
74
+ // passing → every turn-end would otherwise rescan the store).
75
+ let memo = null;
76
+ // Once-per-process warn state (plan §3.5).
77
+ let warnedRoot = false;
78
+ let warnedZstd = false;
79
+ const scan = async () => {
80
+ const now = Date.now();
81
+ if (memo !== null && now - memo.at < SCAN_MEMO_MS) {
82
+ ctx.logger.debug({ event: 'memory:scan-memo-hit' });
83
+ return memo.result;
84
+ }
85
+ if (typeof zlib.createZstdDecompress !== 'function' && !warnedZstd) {
86
+ warnedZstd = true;
87
+ ctx.logger.warn('memory-consolidation: node:zlib zstd capability missing; dream gates fail closed');
88
+ }
89
+ const t0 = Date.now();
90
+ const result = await scanSessions(sessionsRoot);
91
+ ctx.logger.debug({ event: 'memory:scan', scanned: result.scanned, unreadable: result.unreadable, count: result.sessions.length, ms: Date.now() - t0 });
92
+ if (result.scanned === 0 && !warnedRoot) {
93
+ warnedRoot = true;
94
+ ctx.logger.warn(`memory-consolidation: sessions root unreadable or empty at ${sessionsRoot}`);
95
+ }
96
+ memo = { at: Date.now(), result };
97
+ return result;
98
+ };
131
99
  // Reset the flight state when this plugin fiber is disposed (hygiene / test
132
100
  // isolation). cordis `ctx.on` is typed strictly to `keyof Events`, so cleanup
133
101
  // is registered as a fiber effect rather than a 'dispose' listener.
@@ -160,13 +128,19 @@ export function apply(ctx, config = {}) {
160
128
  if (config.dreamEnabled ?? true) {
161
129
  if (!dreamInFlight) {
162
130
  dreamInFlight = true;
163
- void runDream(ctx, agent, home, provider, minHours, minSessions)
164
- .catch(() => { })
131
+ void runDream(ctx, agent, home, provider, minHours, minSessions, pressureCooldownMinutes, sessionsRoot, scan)
132
+ .catch((err) => { ctx.logger.warn(`memory-consolidation: dream dispatch failed: ${String(err)}`); })
165
133
  .finally(() => { dreamInFlight = false; });
166
134
  }
167
135
  }
168
136
  });
169
137
  }
138
+ /** Memo TTL for the raw session-scan result (plan §3.4). */
139
+ const SCAN_MEMO_MS = 30 * 60_000;
140
+ /** The agent's workspace cwd: where its memory directory is resolved from. */
141
+ function agentCwd(agent) {
142
+ return agent.session.header.cwd ?? process.cwd();
143
+ }
170
144
  /**
171
145
  * Whether an agent is top-level (not a delegated subagent). This is the root
172
146
  * fix for the extraction/dream recursion: a subagent's own turn-end must never
@@ -190,7 +164,7 @@ const INDEX_TRUNCATED_MARKER = '(index truncated; rely on MEMORY.md in-dir for t
190
164
  async function runExtraction(ctx, agent, home, provider) {
191
165
  // The extraction writes into the turning agent's repository directory —
192
166
  // the shared home root holds only explicitly-global memories.
193
- const dir = resolveWorkspaceMemoryDir(home, sessionTranscriptDir(agent));
167
+ const dir = resolveWorkspaceMemoryDir(home, agentCwd(agent));
194
168
  // Only model-visible surface events count toward the batch size.
195
169
  const surfaceCount = agent.session.snapshotEvents().filter((e) => SURFACE_EVENT_TYPES.has(e.type)).length;
196
170
  // The index read happens AFTER the in-flight/content gates (runExtraction is
@@ -261,65 +235,71 @@ async function readExistingIndex(ctx, dir) {
261
235
  return '';
262
236
  }
263
237
  }
264
- async function runDream(ctx, agent, home, provider, minHours, minSessions) {
238
+ async function runDream(ctx, agent, home, provider, minHours, minSessions, pressureCooldownMinutes, sessionsRoot, scan) {
265
239
  const fs = ctx.get('fs');
266
240
  if (fs === undefined)
267
241
  return;
268
- const dir = resolveWorkspaceMemoryDir(home, sessionTranscriptDir(agent));
242
+ const dir = resolveWorkspaceMemoryDir(home, agentCwd(agent));
269
243
  const now = Date.now();
244
+ const policy = memoryWritePolicy(dir);
245
+ const pressure = await readPressure(fs, dir);
270
246
  const lastAt = await readLastConsolidatedAt(fs, dir);
271
- const sessionIds = listNewSessions(ctx, lastAt);
272
- if (!gatesPass({
273
- lastConsolidatedAt: lastAt,
274
- now,
275
- minHours,
276
- sessionCount: sessionIds.length,
277
- minSessions,
278
- }))
279
- return;
280
- const priorAt = await tryAcquireLock(fs, dir, process.pid, now, memoryWritePolicy(dir));
281
- if (priorAt === null)
247
+ let hints;
248
+ if (pressure.armedAt > 0) {
249
+ // Pressure mode: an armed marker bypasses the time/session gates. The
250
+ // cooldown is measured from `lastForcedAt` (not `armedAt`) so a tight arm
251
+ // loop of rejecting saves cannot spin dreams faster than the knob;
252
+ // backwards clock skew (negative delta) counts as within-cooldown.
253
+ if (now - pressure.lastForcedAt < pressureCooldownMinutes * 60_000) {
254
+ ctx.logger.debug({ event: 'memory:dream-gates', mode: 'pressure', lastAt, count: 0, minSessions, pass: false, reason: 'cooldown' });
255
+ return;
256
+ }
257
+ // Stamp BEFORE acquiring the lock: consumes the cooldown slot even if the
258
+ // lock is held or the spawn never happens, making the crash-window spawn
259
+ // storm structurally impossible. Failure keeps the marker with this stamp
260
+ // so the next window retries.
261
+ await markPressureForced(fs, dir, pressure.armedAt, now, policy);
262
+ // Scan AFTER the stamp (plan §3.2/§3.3): a zero scan skips the spawn with
263
+ // the marker still armed — the lock was never acquired, so there is
264
+ // nothing to roll back and the next cooldown window retries.
265
+ const scanResult = await scan();
266
+ const window = gateWindow(scanResult.sessions, lastAt);
267
+ ctx.logger.debug({ event: 'memory:dream-gates', mode: 'pressure', lastAt, count: window.count, minSessions, pass: true });
268
+ if (scanResult.scanned === 0)
269
+ return;
270
+ hints = window.hints;
271
+ }
272
+ else {
273
+ // Periodic: the pure-arithmetic time gate runs FIRST, before any scan I/O;
274
+ // the session-count gate runs only on the scanned result.
275
+ if (!timeGatePasses(lastAt, now, minHours)) {
276
+ ctx.logger.debug({ event: 'memory:dream-gates', mode: 'periodic', lastAt, count: 0, minSessions, pass: false, reason: 'time' });
277
+ return;
278
+ }
279
+ const scanResult = await scan();
280
+ const window = gateWindow(scanResult.sessions, lastAt);
281
+ const pass = sessionGatePasses(window.count, minSessions);
282
+ ctx.logger.debug({ event: 'memory:dream-gates', mode: 'periodic', lastAt, count: window.count, minSessions, pass });
283
+ if (!pass)
284
+ return;
285
+ hints = window.hints;
286
+ }
287
+ const priorAt = await tryAcquireLock(fs, dir, process.pid, now, policy);
288
+ if (priorAt === null) {
289
+ ctx.logger.warn(`memory-consolidation: consolidation lock held by a live holder in ${dir}`);
282
290
  return;
283
- const prompt = buildConsolidationPrompt(dir, sessionTranscriptDir(agent), sessionIds);
291
+ }
292
+ const prompt = buildConsolidationPrompt(dir, sessionsRoot, hints);
284
293
  const job = await startMemoryJob(ctx, agent, dir, provider, 'memory-consolidation', prompt);
285
- void job.settled.then((ok) => {
286
- if (!ok)
287
- void rollbackLock(fs, dir, priorAt, memoryWritePolicy(dir));
294
+ void job.done.then((outcome) => {
295
+ ctx.logger.debug({ event: 'memory:dream-outcome', status: outcome.status, detail: outcome.status === 'failed' ? outcome.detail : undefined });
296
+ if (outcome.status !== 'completed') {
297
+ void rollbackLock(fs, dir, priorAt, policy);
298
+ return;
299
+ }
300
+ // Success tombs the marker in BOTH modes: a successful periodic dream
301
+ // rebuilds the index, so a stale pending marker is obsolete by definition.
302
+ void clearPressure(fs, dir, now, policy);
288
303
  });
289
304
  }
290
- /** Live sessions are the transcripts available to review; absent sessions skip. */
291
- function listNewSessions(ctx, lastAt) {
292
- const sessions = ctx.get('sessions');
293
- if (sessions === undefined)
294
- return [];
295
- return sessions
296
- .list()
297
- // Subagent sessions (validated delegationDepth > 0) are excluded from both
298
- // the min-sessions count and the dream input: their content is already
299
- // covered by turn-end extraction. Absent/invalid depth is treated as 0.
300
- .filter(session => {
301
- const d = session.header?.delegationDepth;
302
- return !(Number.isSafeInteger(d) && d > 0);
303
- })
304
- .map(session => ({ id: session.id, at: sessionStartOf(session) }))
305
- .filter(session => session.at > lastAt)
306
- .sort((a, b) => a.at - b.at)
307
- .map(session => session.id);
308
- }
309
- /**
310
- * Session start epoch, defensively read from the header. The dream gate is
311
- * skip-oriented, so an unreadable or absent timestamp conservatively counts as
312
- * NEW (over-inclusion only costs a re-read). Accepted limitation: a session
313
- * created before `lastAt` but still active after it is excluded from the dream
314
- * input — turn-end extraction covers recent content; dream is a coarse
315
- * periodic pass.
316
- */
317
- function sessionStartOf(session) {
318
- const at = session.header?.createdAt;
319
- return Number.isSafeInteger(at) && at > 0 ? at : Number.MAX_SAFE_INTEGER;
320
- }
321
- /** The transcript directory is the agent's cwd. */
322
- function sessionTranscriptDir(agent) {
323
- return agent.session.header.cwd ?? process.cwd();
324
- }
325
305
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * The jobs-seam spawn helper for memory forks (extraction and dream): starts
3
+ * the one-shot subagent as a background job and maps the settled outcome onto
4
+ * the JobHooks contract.
5
+ * @module @dsh-cc/memory-consolidation/memory-job
6
+ */
7
+ import type { Context } from '@deepseek-ai/cordis';
8
+ import type { Agent } from '@deepseek-ai/dsh-agent';
9
+ /** The job-done outcome: resolves only, per the JobHooks contract. */
10
+ export type JobOutcome = {
11
+ status: 'completed';
12
+ } | {
13
+ status: 'killed';
14
+ } | {
15
+ status: 'failed';
16
+ detail: string;
17
+ };
18
+ /**
19
+ * Design §2.4 fallback: if the reported payload carries an over-limit
20
+ * `MEMORY.md`, replace its content with the deterministic truncation output
21
+ * (capped body + visible in-file warning banner) instead of failing the job.
22
+ * Plain rejection would fail the dream, roll back the lock, and retry every
23
+ * turn-end forever with zero durable output. Topic-file writes pass through
24
+ * untouched; a compliant entrypoint is returned byte-identical. Takes the raw
25
+ * structured payload (the entrypoint gate inside `validateMemoryWrites`
26
+ * throws during validation, so the replacement must happen before it) and
27
+ * returns a payload of the same shape; malformed payloads pass through and
28
+ * are rejected by validation as usual.
29
+ */
30
+ export declare function applyEntrypointFallback(payload: unknown): unknown;
31
+ /**
32
+ * Start a memory-scoped forked subagent as a background job. The fork reports
33
+ * its file set via `outputSchema`; on settlement the plugin validates the
34
+ * batch and writes it host-side under a policy confined to `dir`. Resolves to
35
+ * a control object with an abort hook and a settle promise (true only when
36
+ * the reported writes were validated and persisted).
37
+ */
38
+ export declare function startMemoryJob(ctx: Context, agent: Agent, dir: string, provider: string, label: string, prompt: string): Promise<{
39
+ abort(reason?: string): void;
40
+ settled: Promise<boolean>;
41
+ done: Promise<JobOutcome>;
42
+ }>;
43
+ //# sourceMappingURL=memory-job.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-job.d.ts","sourceRoot":"","sources":["../src/memory-job.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAgDnD,sEAAsE;AACtE,MAAM,MAAM,UAAU,GAAG;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAc9G;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAajE;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;CAAE,CAAC,CA6DjG"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * The jobs-seam spawn helper for memory forks (extraction and dream): starts
3
+ * the one-shot subagent as a background job and maps the settled outcome onto
4
+ * the JobHooks contract.
5
+ * @module @dsh-cc/memory-consolidation/memory-job
6
+ */
7
+ import { MEMORY_WRITES_SCHEMA, validateMemoryWrites, writeMemoryFiles, ENTRYPOINT_NAME, MAX_ENTRYPOINT_LINES, MAX_ENTRYPOINT_BYTES, truncateEntrypointContent, } from '@dsh-cc/memory';
8
+ import { MEMORY_TOOL_FILTER } from "./tools.js";
9
+ /**
10
+ * Over-limit measurement for the entrypoint, identical to the write-side gate
11
+ * semantics (trim → split('\n') → count; byteLength of the trimmed content).
12
+ * @param content - a reported `MEMORY.md` body.
13
+ */
14
+ function entrypointOverLimit(content) {
15
+ const trimmed = content.trim();
16
+ return trimmed.split('\n').length > MAX_ENTRYPOINT_LINES
17
+ || Buffer.byteLength(trimmed, 'utf8') > MAX_ENTRYPOINT_BYTES;
18
+ }
19
+ /**
20
+ * Design §2.4 fallback: if the reported payload carries an over-limit
21
+ * `MEMORY.md`, replace its content with the deterministic truncation output
22
+ * (capped body + visible in-file warning banner) instead of failing the job.
23
+ * Plain rejection would fail the dream, roll back the lock, and retry every
24
+ * turn-end forever with zero durable output. Topic-file writes pass through
25
+ * untouched; a compliant entrypoint is returned byte-identical. Takes the raw
26
+ * structured payload (the entrypoint gate inside `validateMemoryWrites`
27
+ * throws during validation, so the replacement must happen before it) and
28
+ * returns a payload of the same shape; malformed payloads pass through and
29
+ * are rejected by validation as usual.
30
+ */
31
+ export function applyEntrypointFallback(payload) {
32
+ if (typeof payload !== 'object' || payload === null || Array.isArray(payload))
33
+ return payload;
34
+ const raw = payload.writes;
35
+ if (!Array.isArray(raw))
36
+ return payload;
37
+ const writes = raw.map((entry) => {
38
+ if (typeof entry !== 'object' || entry === null)
39
+ return entry;
40
+ const { path, content } = entry;
41
+ if (path !== ENTRYPOINT_NAME || typeof content !== 'string' || !entrypointOverLimit(content)) {
42
+ return entry;
43
+ }
44
+ return { ...entry, content: truncateEntrypointContent(content).content };
45
+ });
46
+ return { ...payload, writes };
47
+ }
48
+ /**
49
+ * Start a memory-scoped forked subagent as a background job. The fork reports
50
+ * its file set via `outputSchema`; on settlement the plugin validates the
51
+ * batch and writes it host-side under a policy confined to `dir`. Resolves to
52
+ * a control object with an abort hook and a settle promise (true only when
53
+ * the reported writes were validated and persisted).
54
+ */
55
+ export async function startMemoryJob(ctx, agent, dir, provider, label, prompt) {
56
+ const jobs = ctx.get('jobs');
57
+ const subagents = ctx.get('subagents');
58
+ if (jobs === undefined || subagents === undefined) {
59
+ return { abort: () => { }, settled: Promise.resolve(false), done: Promise.resolve({ status: 'failed', detail: 'jobs/subagents seam unavailable' }) };
60
+ }
61
+ const fs = ctx.get('fs');
62
+ const controller = new AbortController();
63
+ // `subagents.start` is async upstream — awaiting it is what exposes the run's
64
+ // `result` promise. Reading `run.result` on the un-awaited Promise throws
65
+ // "Cannot read properties of undefined (reading 'then')" and poisons the
66
+ // turn-stopping dispatch.
67
+ const run = await subagents.start(provider, {
68
+ label,
69
+ signal: controller.signal,
70
+ prompt: [{ type: 'text', text: prompt }],
71
+ parent: agent,
72
+ toolFilter: MEMORY_TOOL_FILTER,
73
+ // Defense-in-depth recursion cap: the top-level listener already gates on
74
+ // depth zero, so this fork's child never delegates. maxDepth is compared
75
+ // against the CHILD's resolved depth (parent + 1); a top-level parent's
76
+ // child resolves to 1 and passes, a grandchild to 2 is rejected.
77
+ maxDepth: 1,
78
+ outputSchema: MEMORY_WRITES_SCHEMA,
79
+ });
80
+ // Real job-done wiring: `done` maps the subagent outcome onto the JobHooks
81
+ // contract (must never reject). Aborted → killed (rolls back the dream
82
+ // lock); a non-completed stopReason, a missing/invalid payload, or a
83
+ // write-back failure → failed with detail; a validated, persisted batch →
84
+ // completed. All branches resolve.
85
+ const done = run.result.then(async (res) => {
86
+ if (controller.signal.aborted)
87
+ return { status: 'killed' };
88
+ if (res?.stopReason !== 'completed') {
89
+ return { status: 'failed', detail: `memory fork ended with stopReason ${String(res?.stopReason)}` };
90
+ }
91
+ if (fs === undefined) {
92
+ return { status: 'failed', detail: 'fs seam unavailable for memory write-back' };
93
+ }
94
+ try {
95
+ const writes = validateMemoryWrites(applyEntrypointFallback(res.structured));
96
+ await writeMemoryFiles(fs, dir, writes);
97
+ return { status: 'completed' };
98
+ }
99
+ catch (err) {
100
+ return { status: 'failed', detail: String(err) };
101
+ }
102
+ }, (err) => controller.signal.aborted ? { status: 'killed' } : { status: 'failed', detail: String(err) });
103
+ const settled = done.then(o => o.status === 'completed');
104
+ jobs.start({
105
+ kind: 'subagent',
106
+ label,
107
+ owner: agent,
108
+ run: () => ({
109
+ cancel: (reason) => { controller.abort(reason); },
110
+ done,
111
+ }),
112
+ });
113
+ return { abort: (reason) => { controller.abort(reason); }, settled, done };
114
+ }
115
+ //# sourceMappingURL=memory-job.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-job.js","sourceRoot":"","sources":["../src/memory-job.ts"],"names":[],"mappings":"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"}
package/lib/prompts.d.ts CHANGED
@@ -22,9 +22,10 @@ export declare function buildExtractionPrompt(surfaceMessageCount: number, memor
22
22
  * Build the <system-reminder> user prompt that reviews past sessions and
23
23
  * consolidates them into the memory directory, returned as structured writes.
24
24
  * @param memoryDir - the memory directory being rewritten.
25
- * @param transcriptDir - the directory holding past session transcripts.
26
- * @param sessionHints - a list of session ids to review.
25
+ * @param sessionsRoot - the real session store root the hint ids live under.
26
+ * @param sessionHints - session ids marking the consolidation window (provenance
27
+ * hints only; transcripts are zstd-compressed and not readable by the fork).
27
28
  * @returns the prompt text.
28
29
  */
29
- export declare function buildConsolidationPrompt(memoryDir: string, transcriptDir: string, sessionHints: readonly string[]): string;
30
+ export declare function buildConsolidationPrompt(memoryDir: string, sessionsRoot: string, sessionHints: readonly string[]): string;
30
31
  //# sourceMappingURL=prompts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,mBAAmB,EAAE,MAAM,EAC3B,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,GACpB,MAAM,CAeR;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,SAAS,MAAM,EAAE,GAC9B,MAAM,CAYR"}
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,mBAAmB,EAAE,MAAM,EAC3B,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,GACpB,MAAM,CAeR;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,SAAS,MAAM,EAAE,GAC9B,MAAM,CAgBR"}
package/lib/prompts.js CHANGED
@@ -40,20 +40,25 @@ export function buildExtractionPrompt(surfaceMessageCount, memoryDir, existingIn
40
40
  * Build the <system-reminder> user prompt that reviews past sessions and
41
41
  * consolidates them into the memory directory, returned as structured writes.
42
42
  * @param memoryDir - the memory directory being rewritten.
43
- * @param transcriptDir - the directory holding past session transcripts.
44
- * @param sessionHints - a list of session ids to review.
43
+ * @param sessionsRoot - the real session store root the hint ids live under.
44
+ * @param sessionHints - session ids marking the consolidation window (provenance
45
+ * hints only; transcripts are zstd-compressed and not readable by the fork).
45
46
  * @returns the prompt text.
46
47
  */
47
- export function buildConsolidationPrompt(memoryDir, transcriptDir, sessionHints) {
48
+ export function buildConsolidationPrompt(memoryDir, sessionsRoot, sessionHints) {
48
49
  return [
49
- `You are consolidating persistent memory from past sessions. Review the sessions listed below (transcripts in \`${transcriptDir}\`), distill durable facts, and rewrite the memory directory \`${memoryDir}\`.`,
50
+ `You are consolidating persistent memory from past sessions. Distill durable facts and rewrite the memory directory \`${memoryDir}\`.`,
50
51
  'The memory directory contains MEMORY.md (an index of topic files) and topic `.md` files with YAML frontmatter (name, description, type).',
51
52
  'Return the complete rewritten file set via the `structured_output` tool as `{ "writes": [{ "path", "content" }] }` — flat `.md` filenames with complete bodies. Only the files you return are written; omitted files stay unchanged on disk.',
52
- `Rewrite \`${ENTRYPOINT_NAME}\` to be a concise index (one line per topic) and keep topic files organized by semantic topic, not chronology.`,
53
- 'Remove memories that are wrong or outdated from the index. Do not drop a fact that is still load-bearing.',
53
+ 'Work in this order:',
54
+ `1. Orient: list \`${memoryDir}\`, then read ${ENTRYPOINT_NAME} and the topic files it points at — that is your primary review material.`,
55
+ '2. Verify against reality: the fork\'s working directory IS the session\'s workspace. Before keeping any load-bearing fact, check it against the current codebase (paths, commands, behavior) with read/grep/glob. On a contradiction between two memories, fix the wrong side. Delete facts referencing things that no longer exist.',
56
+ '3. Normalize dates: convert every relative date ("yesterday", "last week") to the absolute date it referred to.',
57
+ `4. Treat the session hints below as provenance only: they mark which sessions the consolidation window covers. The fork cannot read transcripts (zstd) — never attempt to open or grep them.`,
58
+ `5. Prune and index: rewrite ${ENTRYPOINT_NAME} as one line per topic, targeting under 140 lines (an index over 200 lines / 25 KB is rejected host-side, so stay well under). Move detail into topic files, organized by semantic topic, and keep still-true load-bearing facts.`,
54
59
  `You may use only: ${MEMORY_AGENT_TOOLS.join(', ')}.`,
55
60
  '',
56
- 'Sessions since the last consolidation:',
61
+ `Session provenance hints (ids under \`${sessionsRoot}\`):`,
57
62
  ...sessionHints.map(id => `- ${id}`),
58
63
  ].join('\n');
59
64
  }
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAE/C,wEAAwE;AACxE,MAAM,eAAe,GAAG,WAAW,CAAA;AAEnC;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CACnC,mBAA2B,EAC3B,SAAiB,EACjB,aAAqB;IAErB,OAAO;QACL,0CAA0C,mBAAmB,oFAAoF;QACjJ,0GAA0G;QAC1G,sGAAsG,SAAS,iKAAiK;QAChR,mJAAmJ;QACnJ,yCAAyC,eAAe,iEAAiE;QACzH,sJAAsJ;QACtJ,qBAAqB,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,SAAS,KAAK;QACxF,+HAA+H;QAC/H,gIAAgI;QAChI,EAAE;QACF,kBAAkB;QAClB,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY;KACxD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CACtC,SAAiB,EACjB,aAAqB,EACrB,YAA+B;IAE/B,OAAO;QACL,kHAAkH,aAAa,kEAAkE,SAAS,KAAK;QAC/M,0IAA0I;QAC1I,8OAA8O;QAC9O,aAAa,eAAe,iHAAiH;QAC7I,2GAA2G;QAC3G,qBAAqB,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;QACrD,EAAE;QACF,wCAAwC;QACxC,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;KACrC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAE/C,wEAAwE;AACxE,MAAM,eAAe,GAAG,WAAW,CAAA;AAEnC;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CACnC,mBAA2B,EAC3B,SAAiB,EACjB,aAAqB;IAErB,OAAO;QACL,0CAA0C,mBAAmB,oFAAoF;QACjJ,0GAA0G;QAC1G,sGAAsG,SAAS,iKAAiK;QAChR,mJAAmJ;QACnJ,yCAAyC,eAAe,iEAAiE;QACzH,sJAAsJ;QACtJ,qBAAqB,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,SAAS,KAAK;QACxF,+HAA+H;QAC/H,gIAAgI;QAChI,EAAE;QACF,kBAAkB;QAClB,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY;KACxD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,wBAAwB,CACtC,SAAiB,EACjB,YAAoB,EACpB,YAA+B;IAE/B,OAAO;QACL,wHAAwH,SAAS,KAAK;QACtI,0IAA0I;QAC1I,8OAA8O;QAC9O,qBAAqB;QACrB,qBAAqB,SAAS,iBAAiB,eAAe,2EAA2E;QACzI,uUAAuU;QACvU,iHAAiH;QACjH,8LAA8L;QAC9L,+BAA+B,eAAe,mOAAmO;QACjR,qBAAqB,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;QACrD,EAAE;QACF,yCAAyC,YAAY,MAAM;QAC3D,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;KACrC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC"}
@@ -0,0 +1,28 @@
1
+ /** One session directory's classification, unfiltered by any gate window. */
2
+ export interface ScannedSession {
3
+ id: string;
4
+ createdAt: number;
5
+ sub: boolean;
6
+ }
7
+ export interface SessionScanResult {
8
+ /** All classifiable sessions, so the memo can be shared across repos. */
9
+ sessions: ScannedSession[];
10
+ /** Session directories seen, classifiable or not. */
11
+ scanned: number;
12
+ /** Directories skipped because no readable stream/header was found. */
13
+ unreadable: number;
14
+ }
15
+ /**
16
+ * Scan the session store: classify every depth-2 directory from its stream
17
+ * header. A missing/unreadable root yields a zeroed result, never an throw.
18
+ */
19
+ export declare function scanSessions(sessionsRoot: string): Promise<SessionScanResult>;
20
+ /**
21
+ * The gate window: qualify (`!sub && createdAt > lastAt`), count all
22
+ * qualifying, and select up to 50 hint ids, most-recent first. Pure.
23
+ */
24
+ export declare function gateWindow(sessions: readonly ScannedSession[], lastAt: number): {
25
+ count: number;
26
+ hints: string[];
27
+ };
28
+ //# sourceMappingURL=session-scan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-scan.d.ts","sourceRoot":"","sources":["../src/session-scan.ts"],"names":[],"mappings":"AAwBA,6EAA6E;AAC7E,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,yEAAyE;IACzE,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;CACpB;AAiFD;;;GAGG;AACH,wBAAsB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAqCnF;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,QAAQ,EAAE,SAAS,cAAc,EAAE,EACnC,MAAM,EAAE,MAAM,GACb;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAOpC"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Session-store scanner: walk the dsh-cc sessions store and classify each
3
+ * session directory from its header line, unfiltered by any gate window.
4
+ *
5
+ * Layout: `<sessionsRoot>/<projectKey>/<sessionId>/<stream>`; any directory at
6
+ * depth 2 is treated as a session dir. Stream resolution mirrors
7
+ * session-forensics/src/scan.ts: prefer `session.v3.jsonl.zstd`, fall back to
8
+ * the legacy `session.jsonl.zstd` (the writer emits exactly one format per
9
+ * dir). Only the header line is needed, so the read is a bounded prefix
10
+ * (256 KiB compressed → 16 KiB decompressed) via `node:fs`/`node:zlib`
11
+ * in-process zstd — no fs seam (prefix reads are impossible over it) and no
12
+ * `zstd` CLI (plan §3.1, cold-review blockers #1/#2).
13
+ *
14
+ * Every failure is classified, never thrown: unreadable dirs count toward
15
+ * `unreadable`, a missing root or absent zstd capability yields a zeroed
16
+ * result.
17
+ * @module @dsh-cc/memory-consolidation/session-scan
18
+ */
19
+ import { createReadStream } from "node:fs";
20
+ import { readdir } from "node:fs/promises";
21
+ import { join } from "node:path";
22
+ import * as zlib from "node:zlib";
23
+ import { StringDecoder } from "node:string_decoder";
24
+ /** Compressed prefix window (bytes) read from the stream file. */
25
+ const READ_WINDOW = 256 * 1024;
26
+ /** Decompressed text budget: stop reading once the header must have surfaced. */
27
+ const TEXT_BUDGET = 16 * 1024;
28
+ const V3_STREAM = "session.v3.jsonl.zstd";
29
+ const LEGACY_STREAM = "session.jsonl.zstd";
30
+ function isSafeInt(value) {
31
+ return typeof value === "number" && Number.isSafeInteger(value);
32
+ }
33
+ /**
34
+ * Decompress a bounded prefix of the stream and return the first
35
+ * `type: "session"` JSONL header, or undefined when none surfaces within the
36
+ * budget / the stream is corrupt. Never rejects.
37
+ */
38
+ function readHeader(streamPath) {
39
+ // Capability check (plan §3.1): undated/nonstandard Node without in-process
40
+ // zstd fails closed here.
41
+ if (typeof zlib.createZstdDecompress !== "function")
42
+ return Promise.resolve(undefined);
43
+ return new Promise((resolve) => {
44
+ let text = "";
45
+ let settled = false;
46
+ const finish = (header) => {
47
+ if (settled)
48
+ return;
49
+ settled = true;
50
+ source.destroy();
51
+ zstd.destroy();
52
+ resolve(header);
53
+ };
54
+ const findHeader = () => {
55
+ for (const line of text.split("\n")) {
56
+ if (!line.includes('"type":"session"'))
57
+ continue;
58
+ try {
59
+ const entry = JSON.parse(line);
60
+ if (entry?.type === "session")
61
+ return entry;
62
+ }
63
+ catch {
64
+ // torn or non-JSON line: keep scanning
65
+ }
66
+ }
67
+ return undefined;
68
+ };
69
+ // StringDecoder (not chunk.toString) so a multibyte char split across
70
+ // streams can't inject U+FFFD and silently break the header JSON.parse.
71
+ const decoder = new StringDecoder("utf8");
72
+ const onChunk = (chunk) => {
73
+ text += decoder.write(chunk);
74
+ if (text.length >= TEXT_BUDGET)
75
+ finish(findHeader());
76
+ };
77
+ const source = createReadStream(streamPath, { start: 0, end: READ_WINDOW - 1 });
78
+ const zstd = zlib.createZstdDecompress();
79
+ source.pipe(zstd);
80
+ zstd.on("data", onChunk);
81
+ source.on("error", () => finish(undefined));
82
+ zstd.on("error", () => finish(undefined));
83
+ zstd.on("end", () => { text += decoder.end(); finish(findHeader()); });
84
+ });
85
+ }
86
+ /** Classify a header line per the pinned v3 contract, defensively. */
87
+ function classify(header, dirName) {
88
+ const data = header.data;
89
+ const createdRaw = header.createdAt ?? header.time ?? header.ts ?? header.timestamp;
90
+ // Missing/garbage timestamp counts as NEW (fails open to over-inclusion).
91
+ const createdAt = isSafeInt(createdRaw) ? createdRaw : Number.MAX_SAFE_INTEGER;
92
+ const depth = isSafeInt(header.delegationDepth)
93
+ ? header.delegationDepth
94
+ : isSafeInt(data?.delegationDepth)
95
+ ? data.delegationDepth
96
+ : 0;
97
+ const origin = header.origin ?? data?.origin;
98
+ return {
99
+ id: typeof header.id === "string" && header.id.length > 0 ? header.id : dirName,
100
+ createdAt,
101
+ sub: depth > 0 || origin === "subagent",
102
+ };
103
+ }
104
+ /**
105
+ * Scan the session store: classify every depth-2 directory from its stream
106
+ * header. A missing/unreadable root yields a zeroed result, never an throw.
107
+ */
108
+ export async function scanSessions(sessionsRoot) {
109
+ const zeroed = { sessions: [], scanned: 0, unreadable: 0 };
110
+ // Capability check (plan §3.1): undated/nonstandard Node without in-process
111
+ // zstd fails closed to a zeroed result.
112
+ if (typeof zlib.createZstdDecompress !== "function")
113
+ return zeroed;
114
+ try {
115
+ const projects = await readdir(sessionsRoot, { withFileTypes: true });
116
+ const sessions = [];
117
+ let scanned = 0;
118
+ let unreadable = 0;
119
+ for (const project of projects) {
120
+ if (!project.isDirectory())
121
+ continue;
122
+ const projectDir = join(sessionsRoot, project.name);
123
+ let entries;
124
+ try {
125
+ entries = await readdir(projectDir, { withFileTypes: true });
126
+ }
127
+ catch {
128
+ continue;
129
+ }
130
+ for (const entry of entries) {
131
+ if (!entry.isDirectory())
132
+ continue;
133
+ scanned++;
134
+ const sessionDir = join(projectDir, entry.name);
135
+ // Stream resolution mirrors session-forensics/src/scan.ts.
136
+ let header;
137
+ for (const stream of [V3_STREAM, LEGACY_STREAM]) {
138
+ header = await readHeader(join(sessionDir, stream));
139
+ if (header !== undefined)
140
+ break;
141
+ }
142
+ if (header === undefined)
143
+ unreadable++;
144
+ else
145
+ sessions.push(classify(header, entry.name));
146
+ }
147
+ }
148
+ return { sessions, scanned, unreadable };
149
+ }
150
+ catch {
151
+ return zeroed;
152
+ }
153
+ }
154
+ /**
155
+ * The gate window: qualify (`!sub && createdAt > lastAt`), count all
156
+ * qualifying, and select up to 50 hint ids, most-recent first. Pure.
157
+ */
158
+ export function gateWindow(sessions, lastAt) {
159
+ const qualifying = sessions.filter((s) => !s.sub && s.createdAt > lastAt);
160
+ const hints = [...qualifying]
161
+ .sort((a, b) => b.createdAt - a.createdAt)
162
+ .slice(0, 50)
163
+ .map((s) => s.id);
164
+ return { count: qualifying.length, hints };
165
+ }
166
+ //# sourceMappingURL=session-scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-scan.js","sourceRoot":"","sources":["../src/session-scan.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@dsh-cc/memory-consolidation",
3
3
  "description": "Background memory consolidation: turn-end extraction and three-gate dream rewrite",
4
- "version": "0.7.1",
4
+ "version": "0.8.0-rc.2",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "git+https://github.com/dsh-cc/dsh-cc.git",
@@ -36,7 +36,7 @@
36
36
  "@deepseek-ai/schemastery": "^3.18.1"
37
37
  },
38
38
  "dependencies": {
39
- "@dsh-cc/memory": "^0.7.1"
39
+ "@dsh-cc/memory": "^0.8.0-rc.2"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@deepseek-ai/cordis": "link:../../../../deepseek-harness/vendor/cordis",