@dsh-cc/memory-consolidation 0.8.0-rc.1 → 0.8.0-rc.3
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/diagnostics.d.ts +44 -0
- package/lib/diagnostics.d.ts.map +1 -0
- package/lib/diagnostics.js +41 -0
- package/lib/diagnostics.js.map +1 -0
- package/lib/index.d.ts +5 -13
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +110 -171
- package/lib/index.js.map +1 -1
- package/lib/memory-job.d.ts +43 -0
- package/lib/memory-job.d.ts.map +1 -0
- package/lib/memory-job.js +115 -0
- package/lib/memory-job.js.map +1 -0
- package/lib/prompts.d.ts +4 -3
- package/lib/prompts.d.ts.map +1 -1
- package/lib/prompts.js +7 -6
- package/lib/prompts.js.map +1 -1
- package/lib/session-scan.d.ts +28 -0
- package/lib/session-scan.d.ts.map +1 -0
- package/lib/session-scan.js +166 -0
- package/lib/session-scan.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dream dispatch diagnostics: a durable "why did the dream die" breadcrumb
|
|
3
|
+
* inside the memory directory. The file `.dream-last-error.json` carries the
|
|
4
|
+
* LATEST failure (overwrite, never append — failure is a cold path and one
|
|
5
|
+
* fresh record beats an unbounded log):
|
|
6
|
+
* `{ at, pid, sessionId, phase, detail }` where phase distinguishes the death
|
|
7
|
+
* modes: `dispatch-started` (spawn dispatched, outcome unknown = hang when the
|
|
8
|
+
* file is never overwritten), `dispatch-throw` (the dispatch threw; detail
|
|
9
|
+
* carries the error + stack), `outcome-failed` (the job settled as failed or
|
|
10
|
+
* killed; detail carries the job outcome).
|
|
11
|
+
*
|
|
12
|
+
* The write mirrors lock.ts/pressure.ts byte-for-byte (`fs.writeText(target,
|
|
13
|
+
* content, policy)` direct write) — it MUST NOT go through `writeMemoryFiles`,
|
|
14
|
+
* whose FILE_NAME whitelist rejects dotfiles/`.json`. Never throws: a
|
|
15
|
+
* diagnostic failure must not kill the dream path it is reporting on.
|
|
16
|
+
* @module @dsh-cc/memory-consolidation/diagnostics
|
|
17
|
+
*/
|
|
18
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
19
|
+
import type { FileSystem } from '@deepseek-ai/dsh-fs';
|
|
20
|
+
import type { MemoryWritePolicy } from '@dsh-cc/memory';
|
|
21
|
+
/** Diagnostic filename inside the workspace memory directory. */
|
|
22
|
+
export declare const DREAM_DIAGNOSTIC_FILE = ".dream-last-error.json";
|
|
23
|
+
/** The death mode the entry records. */
|
|
24
|
+
export type DreamDiagnosticPhase = 'dispatch-started' | 'dispatch-throw' | 'outcome-failed';
|
|
25
|
+
/** One diagnostic record; written as `{ at, pid, ...entry }` JSON. */
|
|
26
|
+
export interface DreamDiagnosticEntry {
|
|
27
|
+
/** The owning session id (`agent.session.header.id`). */
|
|
28
|
+
sessionId: string;
|
|
29
|
+
phase: DreamDiagnosticPhase;
|
|
30
|
+
/** Human-readable error text (error + stack, or the job outcome detail). */
|
|
31
|
+
detail: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Overwrite `<dir>/.dream-last-error.json` with the entry. Best-effort: any
|
|
35
|
+
* failure is swallowed after a single `ctx.logger.warn` so diagnostics can
|
|
36
|
+
* never break a dream (plan §2.1, review Minor-3).
|
|
37
|
+
* @param ctx - the host context (logger only).
|
|
38
|
+
* @param fs - the filesystem seam.
|
|
39
|
+
* @param dir - the workspace memory directory holding the diagnostic file.
|
|
40
|
+
* @param policy - per-call sandbox policy for the write (same as the lock).
|
|
41
|
+
* @param entry - the phase/session/detail payload.
|
|
42
|
+
*/
|
|
43
|
+
export declare function recordDreamDiagnostic(ctx: Context, fs: FileSystem, dir: string, policy: MemoryWritePolicy | undefined, entry: DreamDiagnosticEntry): Promise<void>;
|
|
44
|
+
//# sourceMappingURL=diagnostics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAY,MAAM,qBAAqB,CAAA;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAEvD,iEAAiE;AACjE,eAAO,MAAM,qBAAqB,2BAA2B,CAAA;AAE7D,wCAAwC;AACxC,MAAM,MAAM,oBAAoB,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,gBAAgB,CAAA;AAE3F,sEAAsE;AACtE,MAAM,WAAW,oBAAoB;IACnC,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,oBAAoB,CAAA;IAC3B,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,OAAO,EACZ,EAAE,EAAE,UAAU,EACd,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,iBAAiB,GAAG,SAAS,EACrC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAQf"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dream dispatch diagnostics: a durable "why did the dream die" breadcrumb
|
|
3
|
+
* inside the memory directory. The file `.dream-last-error.json` carries the
|
|
4
|
+
* LATEST failure (overwrite, never append — failure is a cold path and one
|
|
5
|
+
* fresh record beats an unbounded log):
|
|
6
|
+
* `{ at, pid, sessionId, phase, detail }` where phase distinguishes the death
|
|
7
|
+
* modes: `dispatch-started` (spawn dispatched, outcome unknown = hang when the
|
|
8
|
+
* file is never overwritten), `dispatch-throw` (the dispatch threw; detail
|
|
9
|
+
* carries the error + stack), `outcome-failed` (the job settled as failed or
|
|
10
|
+
* killed; detail carries the job outcome).
|
|
11
|
+
*
|
|
12
|
+
* The write mirrors lock.ts/pressure.ts byte-for-byte (`fs.writeText(target,
|
|
13
|
+
* content, policy)` direct write) — it MUST NOT go through `writeMemoryFiles`,
|
|
14
|
+
* whose FILE_NAME whitelist rejects dotfiles/`.json`. Never throws: a
|
|
15
|
+
* diagnostic failure must not kill the dream path it is reporting on.
|
|
16
|
+
* @module @dsh-cc/memory-consolidation/diagnostics
|
|
17
|
+
*/
|
|
18
|
+
import { join } from 'node:path';
|
|
19
|
+
/** Diagnostic filename inside the workspace memory directory. */
|
|
20
|
+
export const DREAM_DIAGNOSTIC_FILE = '.dream-last-error.json';
|
|
21
|
+
/**
|
|
22
|
+
* Overwrite `<dir>/.dream-last-error.json` with the entry. Best-effort: any
|
|
23
|
+
* failure is swallowed after a single `ctx.logger.warn` so diagnostics can
|
|
24
|
+
* never break a dream (plan §2.1, review Minor-3).
|
|
25
|
+
* @param ctx - the host context (logger only).
|
|
26
|
+
* @param fs - the filesystem seam.
|
|
27
|
+
* @param dir - the workspace memory directory holding the diagnostic file.
|
|
28
|
+
* @param policy - per-call sandbox policy for the write (same as the lock).
|
|
29
|
+
* @param entry - the phase/session/detail payload.
|
|
30
|
+
*/
|
|
31
|
+
export async function recordDreamDiagnostic(ctx, fs, dir, policy, entry) {
|
|
32
|
+
try {
|
|
33
|
+
const target = await fs.resolve(join(dir, DREAM_DIAGNOSTIC_FILE));
|
|
34
|
+
const content = `${JSON.stringify({ at: Date.now(), pid: process.pid, ...entry })}\n`;
|
|
35
|
+
await fs.writeText(target, content, undefined, undefined, policy);
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
ctx.logger.warn(`memory-consolidation: failed to write dream diagnostic: ${String(err)}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAKhC,iEAAiE;AACjE,MAAM,CAAC,MAAM,qBAAqB,GAAG,wBAAwB,CAAA;AAc7D;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,GAAY,EACZ,EAAc,EACd,GAAW,EACX,MAAqC,EACrC,KAA2B;IAE3B,IAAI,CAAC;QACH,MAAM,MAAM,GAAa,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC,CAAA;QAC3E,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,IAAI,CAAA;QACrF,MAAM,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;IACnE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,2DAA2D,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC3F,CAAC;AACH,CAAC"}
|
package/lib/index.d.ts
CHANGED
|
@@ -17,10 +17,13 @@
|
|
|
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';
|
|
23
24
|
export { MEMORY_AGENT_TOOLS, MEMORY_TOOL_FILTER } from './tools.ts';
|
|
25
|
+
export { DREAM_DIAGNOSTIC_FILE, recordDreamDiagnostic } from './diagnostics.ts';
|
|
26
|
+
export type { DreamDiagnosticEntry, DreamDiagnosticPhase } from './diagnostics.ts';
|
|
24
27
|
export { buildConsolidationPrompt, buildExtractionPrompt } from './prompts.ts';
|
|
25
28
|
export { MEMORY_WRITES_SCHEMA, WRITEBACK_MAX_FILE_BYTES, WRITEBACK_MAX_FILES, WRITEBACK_MAX_TOTAL_BYTES, memoryWritePolicy, validateMemoryWrites, writeMemoryFiles, } from '@dsh-cc/memory';
|
|
26
29
|
export type { MemoryWrite, MemoryWritePolicy } from '@dsh-cc/memory';
|
|
@@ -45,21 +48,10 @@ export interface Config {
|
|
|
45
48
|
pressureCooldownMinutes?: number;
|
|
46
49
|
/** One-shot subagent provider for forks (default `fork`). */
|
|
47
50
|
subagentProviderName?: string;
|
|
51
|
+
/** Session store root the gates scan (default `<DSH_HOME>/sessions`). */
|
|
52
|
+
sessionsRoot?: string;
|
|
48
53
|
}
|
|
49
54
|
export declare const Config: z<Config>;
|
|
50
|
-
/**
|
|
51
|
-
* Design §2.4 fallback: if the reported payload carries an over-limit
|
|
52
|
-
* `MEMORY.md`, replace its content with the deterministic truncation output
|
|
53
|
-
* (capped body + visible in-file warning banner) instead of failing the job.
|
|
54
|
-
* Plain rejection would fail the dream, roll back the lock, and retry every
|
|
55
|
-
* turn-end forever with zero durable output. Topic-file writes pass through
|
|
56
|
-
* untouched; a compliant entrypoint is returned byte-identical. Takes the raw
|
|
57
|
-
* structured payload (the entrypoint gate inside `validateMemoryWrites`
|
|
58
|
-
* throws during validation, so the replacement must happen before it) and
|
|
59
|
-
* returns a payload of the same shape; malformed payloads pass through and
|
|
60
|
-
* are rejected by validation as usual.
|
|
61
|
-
*/
|
|
62
|
-
export declare function applyEntrypointFallback(payload: unknown): unknown;
|
|
63
55
|
/**
|
|
64
56
|
* Register the consolidation plugin.
|
|
65
57
|
* @param ctx - the host context with jobs, subagents, fs, and sessions.
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
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;AAUxC,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,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAC/E,YAAY,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAClF,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,17 +16,22 @@
|
|
|
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 {
|
|
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 {
|
|
27
|
+
import { startMemoryJob } from "./memory-job.js";
|
|
28
|
+
import { recordDreamDiagnostic } from "./diagnostics.js";
|
|
29
|
+
export { applyEntrypointFallback } from "./memory-job.js";
|
|
30
|
+
import { memoryWritePolicy, resolveWorkspaceMemoryDir, readPressure, markPressureForced, clearPressure, } from '@dsh-cc/memory';
|
|
27
31
|
export { LOCK_FILE, LOCK_STALE_MS, readLastConsolidatedAt, rollbackLock, tryAcquireLock } from "./lock.js";
|
|
28
32
|
export { gatesPass, timeGatePasses, sessionGatePasses } from "./gates.js";
|
|
29
33
|
export { MEMORY_AGENT_TOOLS, MEMORY_TOOL_FILTER } from "./tools.js";
|
|
34
|
+
export { DREAM_DIAGNOSTIC_FILE, recordDreamDiagnostic } from "./diagnostics.js";
|
|
30
35
|
export { buildConsolidationPrompt, buildExtractionPrompt } from "./prompts.js";
|
|
31
36
|
// The write-back lives in @dsh-cc/memory (the memory directory owner);
|
|
32
37
|
// re-exported here for consumers of the pre-move surface.
|
|
@@ -43,113 +48,8 @@ export const Config = z.object({
|
|
|
43
48
|
lockStaleMs: z.number().default(LOCK_STALE_MS),
|
|
44
49
|
pressureCooldownMinutes: z.number().default(60),
|
|
45
50
|
subagentProviderName: z.string().default('fork'),
|
|
51
|
+
sessionsRoot: z.string(),
|
|
46
52
|
});
|
|
47
|
-
/**
|
|
48
|
-
* Over-limit measurement for the entrypoint, identical to the write-side gate
|
|
49
|
-
* semantics (trim → split('\n') → count; byteLength of the trimmed content).
|
|
50
|
-
* @param content - a reported `MEMORY.md` body.
|
|
51
|
-
*/
|
|
52
|
-
function entrypointOverLimit(content) {
|
|
53
|
-
const trimmed = content.trim();
|
|
54
|
-
return trimmed.split('\n').length > MAX_ENTRYPOINT_LINES
|
|
55
|
-
|| Buffer.byteLength(trimmed, 'utf8') > MAX_ENTRYPOINT_BYTES;
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Design §2.4 fallback: if the reported payload carries an over-limit
|
|
59
|
-
* `MEMORY.md`, replace its content with the deterministic truncation output
|
|
60
|
-
* (capped body + visible in-file warning banner) instead of failing the job.
|
|
61
|
-
* Plain rejection would fail the dream, roll back the lock, and retry every
|
|
62
|
-
* turn-end forever with zero durable output. Topic-file writes pass through
|
|
63
|
-
* untouched; a compliant entrypoint is returned byte-identical. Takes the raw
|
|
64
|
-
* structured payload (the entrypoint gate inside `validateMemoryWrites`
|
|
65
|
-
* throws during validation, so the replacement must happen before it) and
|
|
66
|
-
* returns a payload of the same shape; malformed payloads pass through and
|
|
67
|
-
* are rejected by validation as usual.
|
|
68
|
-
*/
|
|
69
|
-
export function applyEntrypointFallback(payload) {
|
|
70
|
-
if (typeof payload !== 'object' || payload === null || Array.isArray(payload))
|
|
71
|
-
return payload;
|
|
72
|
-
const raw = payload.writes;
|
|
73
|
-
if (!Array.isArray(raw))
|
|
74
|
-
return payload;
|
|
75
|
-
const writes = raw.map((entry) => {
|
|
76
|
-
if (typeof entry !== 'object' || entry === null)
|
|
77
|
-
return entry;
|
|
78
|
-
const { path, content } = entry;
|
|
79
|
-
if (path !== ENTRYPOINT_NAME || typeof content !== 'string' || !entrypointOverLimit(content)) {
|
|
80
|
-
return entry;
|
|
81
|
-
}
|
|
82
|
-
return { ...entry, content: truncateEntrypointContent(content).content };
|
|
83
|
-
});
|
|
84
|
-
return { ...payload, writes };
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Start a memory-scoped forked subagent as a background job. The fork reports
|
|
88
|
-
* its file set via `outputSchema`; on settlement the plugin validates the
|
|
89
|
-
* batch and writes it host-side under a policy confined to `dir`. Resolves to
|
|
90
|
-
* a control object with an abort hook and a settle promise (true only when
|
|
91
|
-
* the reported writes were validated and persisted).
|
|
92
|
-
*/
|
|
93
|
-
async function startMemoryJob(ctx, agent, dir, provider, label, prompt) {
|
|
94
|
-
const jobs = ctx.get('jobs');
|
|
95
|
-
const subagents = ctx.get('subagents');
|
|
96
|
-
if (jobs === undefined || subagents === undefined) {
|
|
97
|
-
return { abort: () => { }, settled: Promise.resolve(false) };
|
|
98
|
-
}
|
|
99
|
-
const fs = ctx.get('fs');
|
|
100
|
-
const controller = new AbortController();
|
|
101
|
-
// `subagents.start` is async upstream — awaiting it is what exposes the run's
|
|
102
|
-
// `result` promise. Reading `run.result` on the un-awaited Promise throws
|
|
103
|
-
// "Cannot read properties of undefined (reading 'then')" and poisons the
|
|
104
|
-
// turn-stopping dispatch.
|
|
105
|
-
const run = await subagents.start(provider, {
|
|
106
|
-
label,
|
|
107
|
-
signal: controller.signal,
|
|
108
|
-
prompt: [{ type: 'text', text: prompt }],
|
|
109
|
-
parent: agent,
|
|
110
|
-
toolFilter: MEMORY_TOOL_FILTER,
|
|
111
|
-
// Defense-in-depth recursion cap: the top-level listener already gates on
|
|
112
|
-
// depth zero, so this fork's child never delegates. maxDepth is compared
|
|
113
|
-
// against the CHILD's resolved depth (parent + 1); a top-level parent's
|
|
114
|
-
// child resolves to 1 and passes, a grandchild to 2 is rejected.
|
|
115
|
-
maxDepth: 1,
|
|
116
|
-
outputSchema: MEMORY_WRITES_SCHEMA,
|
|
117
|
-
});
|
|
118
|
-
// Real job-done wiring: `done` maps the subagent outcome onto the JobHooks
|
|
119
|
-
// contract (must never reject). Aborted → killed (rolls back the dream
|
|
120
|
-
// lock); a non-completed stopReason, a missing/invalid payload, or a
|
|
121
|
-
// write-back failure → failed with detail; a validated, persisted batch →
|
|
122
|
-
// completed. All branches resolve.
|
|
123
|
-
const done = run.result.then(async (res) => {
|
|
124
|
-
if (controller.signal.aborted)
|
|
125
|
-
return { status: 'killed' };
|
|
126
|
-
if (res?.stopReason !== 'completed') {
|
|
127
|
-
return { status: 'failed', detail: `memory fork ended with stopReason ${String(res?.stopReason)}` };
|
|
128
|
-
}
|
|
129
|
-
if (fs === undefined) {
|
|
130
|
-
return { status: 'failed', detail: 'fs seam unavailable for memory write-back' };
|
|
131
|
-
}
|
|
132
|
-
try {
|
|
133
|
-
const writes = validateMemoryWrites(applyEntrypointFallback(res.structured));
|
|
134
|
-
await writeMemoryFiles(fs, dir, writes);
|
|
135
|
-
return { status: 'completed' };
|
|
136
|
-
}
|
|
137
|
-
catch (err) {
|
|
138
|
-
return { status: 'failed', detail: String(err) };
|
|
139
|
-
}
|
|
140
|
-
}, (err) => controller.signal.aborted ? { status: 'killed' } : { status: 'failed', detail: String(err) });
|
|
141
|
-
const settled = done.then(o => o.status === 'completed');
|
|
142
|
-
jobs.start({
|
|
143
|
-
kind: 'subagent',
|
|
144
|
-
label,
|
|
145
|
-
owner: agent,
|
|
146
|
-
run: () => ({
|
|
147
|
-
cancel: (reason) => { controller.abort(reason); },
|
|
148
|
-
done,
|
|
149
|
-
}),
|
|
150
|
-
});
|
|
151
|
-
return { abort: (reason) => { controller.abort(reason); }, settled };
|
|
152
|
-
}
|
|
153
53
|
/**
|
|
154
54
|
* Register the consolidation plugin.
|
|
155
55
|
* @param ctx - the host context with jobs, subagents, fs, and sessions.
|
|
@@ -164,11 +64,40 @@ export function apply(ctx, config = {}) {
|
|
|
164
64
|
const minHours = config.minHours ?? 24;
|
|
165
65
|
const minSessions = config.minSessions ?? 5;
|
|
166
66
|
const pressureCooldownMinutes = config.pressureCooldownMinutes ?? 60;
|
|
67
|
+
const sessionsRoot = config.sessionsRoot ?? join(defaultDshHome(), 'sessions');
|
|
167
68
|
// Per-session extraction single-flight. Keyed by session id so each top-level
|
|
168
69
|
// agent's in-flight flag and last-spawned event count are isolated.
|
|
169
70
|
const flight = new Map();
|
|
170
71
|
// One dream in flight across the whole plugin instance (per memory dir).
|
|
171
72
|
let dreamInFlight = false;
|
|
73
|
+
// Scan memo (plan §3.4): caches the RAW unfiltered SessionScanResult for
|
|
74
|
+
// SCAN_MEMO_MS; the lastAt filter/count/hints are recomputed per call. It
|
|
75
|
+
// bounds the failure-path scan storm (lock rolled back → time gate keeps
|
|
76
|
+
// passing → every turn-end would otherwise rescan the store).
|
|
77
|
+
let memo = null;
|
|
78
|
+
// Once-per-process warn state (plan §3.5).
|
|
79
|
+
let warnedRoot = false;
|
|
80
|
+
let warnedZstd = false;
|
|
81
|
+
const scan = async () => {
|
|
82
|
+
const now = Date.now();
|
|
83
|
+
if (memo !== null && now - memo.at < SCAN_MEMO_MS) {
|
|
84
|
+
ctx.logger.debug({ event: 'memory:scan-memo-hit' });
|
|
85
|
+
return memo.result;
|
|
86
|
+
}
|
|
87
|
+
if (typeof zlib.createZstdDecompress !== 'function' && !warnedZstd) {
|
|
88
|
+
warnedZstd = true;
|
|
89
|
+
ctx.logger.warn('memory-consolidation: node:zlib zstd capability missing; dream gates fail closed');
|
|
90
|
+
}
|
|
91
|
+
const t0 = Date.now();
|
|
92
|
+
const result = await scanSessions(sessionsRoot);
|
|
93
|
+
ctx.logger.debug({ event: 'memory:scan', scanned: result.scanned, unreadable: result.unreadable, count: result.sessions.length, ms: Date.now() - t0 });
|
|
94
|
+
if (result.scanned === 0 && !warnedRoot) {
|
|
95
|
+
warnedRoot = true;
|
|
96
|
+
ctx.logger.warn(`memory-consolidation: sessions root unreadable or empty at ${sessionsRoot}`);
|
|
97
|
+
}
|
|
98
|
+
memo = { at: Date.now(), result };
|
|
99
|
+
return result;
|
|
100
|
+
};
|
|
172
101
|
// Reset the flight state when this plugin fiber is disposed (hygiene / test
|
|
173
102
|
// isolation). cordis `ctx.on` is typed strictly to `keyof Events`, so cleanup
|
|
174
103
|
// is registered as a fiber effect rather than a 'dispose' listener.
|
|
@@ -201,13 +130,19 @@ export function apply(ctx, config = {}) {
|
|
|
201
130
|
if (config.dreamEnabled ?? true) {
|
|
202
131
|
if (!dreamInFlight) {
|
|
203
132
|
dreamInFlight = true;
|
|
204
|
-
void runDream(ctx, agent, home, provider, minHours, minSessions, pressureCooldownMinutes)
|
|
205
|
-
.catch(() => { })
|
|
133
|
+
void runDream(ctx, agent, home, provider, minHours, minSessions, pressureCooldownMinutes, sessionsRoot, scan)
|
|
134
|
+
.catch((err) => { ctx.logger.warn(`memory-consolidation: dream dispatch failed: ${String(err)}`); })
|
|
206
135
|
.finally(() => { dreamInFlight = false; });
|
|
207
136
|
}
|
|
208
137
|
}
|
|
209
138
|
});
|
|
210
139
|
}
|
|
140
|
+
/** Memo TTL for the raw session-scan result (plan §3.4). */
|
|
141
|
+
const SCAN_MEMO_MS = 30 * 60_000;
|
|
142
|
+
/** The agent's workspace cwd: where its memory directory is resolved from. */
|
|
143
|
+
function agentCwd(agent) {
|
|
144
|
+
return agent.session.header.cwd ?? process.cwd();
|
|
145
|
+
}
|
|
211
146
|
/**
|
|
212
147
|
* Whether an agent is top-level (not a delegated subagent). This is the root
|
|
213
148
|
* fix for the extraction/dream recursion: a subagent's own turn-end must never
|
|
@@ -231,7 +166,7 @@ const INDEX_TRUNCATED_MARKER = '(index truncated; rely on MEMORY.md in-dir for t
|
|
|
231
166
|
async function runExtraction(ctx, agent, home, provider) {
|
|
232
167
|
// The extraction writes into the turning agent's repository directory —
|
|
233
168
|
// the shared home root holds only explicitly-global memories.
|
|
234
|
-
const dir = resolveWorkspaceMemoryDir(home,
|
|
169
|
+
const dir = resolveWorkspaceMemoryDir(home, agentCwd(agent));
|
|
235
170
|
// Only model-visible surface events count toward the batch size.
|
|
236
171
|
const surfaceCount = agent.session.snapshotEvents().filter((e) => SURFACE_EVENT_TYPES.has(e.type)).length;
|
|
237
172
|
// The index read happens AFTER the in-flight/content gates (runExtraction is
|
|
@@ -302,86 +237,90 @@ async function readExistingIndex(ctx, dir) {
|
|
|
302
237
|
return '';
|
|
303
238
|
}
|
|
304
239
|
}
|
|
305
|
-
async function runDream(ctx, agent, home, provider, minHours, minSessions, pressureCooldownMinutes) {
|
|
240
|
+
async function runDream(ctx, agent, home, provider, minHours, minSessions, pressureCooldownMinutes, sessionsRoot, scan) {
|
|
306
241
|
const fs = ctx.get('fs');
|
|
307
242
|
if (fs === undefined)
|
|
308
243
|
return;
|
|
309
|
-
const dir = resolveWorkspaceMemoryDir(home,
|
|
244
|
+
const dir = resolveWorkspaceMemoryDir(home, agentCwd(agent));
|
|
310
245
|
const now = Date.now();
|
|
311
246
|
const policy = memoryWritePolicy(dir);
|
|
312
247
|
const pressure = await readPressure(fs, dir);
|
|
313
248
|
const lastAt = await readLastConsolidatedAt(fs, dir);
|
|
314
|
-
|
|
249
|
+
let hints;
|
|
315
250
|
if (pressure.armedAt > 0) {
|
|
316
251
|
// Pressure mode: an armed marker bypasses the time/session gates. The
|
|
317
252
|
// cooldown is measured from `lastForcedAt` (not `armedAt`) so a tight arm
|
|
318
253
|
// loop of rejecting saves cannot spin dreams faster than the knob;
|
|
319
254
|
// backwards clock skew (negative delta) counts as within-cooldown.
|
|
320
|
-
if (now - pressure.lastForcedAt < pressureCooldownMinutes * 60_000)
|
|
255
|
+
if (now - pressure.lastForcedAt < pressureCooldownMinutes * 60_000) {
|
|
256
|
+
ctx.logger.debug({ event: 'memory:dream-gates', mode: 'pressure', lastAt, count: 0, minSessions, pass: false, reason: 'cooldown' });
|
|
321
257
|
return;
|
|
258
|
+
}
|
|
322
259
|
// Stamp BEFORE acquiring the lock: consumes the cooldown slot even if the
|
|
323
260
|
// lock is held or the spawn never happens, making the crash-window spawn
|
|
324
261
|
// storm structurally impossible. Failure keeps the marker with this stamp
|
|
325
262
|
// so the next window retries.
|
|
326
263
|
await markPressureForced(fs, dir, pressure.armedAt, now, policy);
|
|
264
|
+
// Scan AFTER the stamp (plan §3.2/§3.3): a zero scan skips the spawn with
|
|
265
|
+
// the marker still armed — the lock was never acquired, so there is
|
|
266
|
+
// nothing to roll back and the next cooldown window retries.
|
|
267
|
+
const scanResult = await scan();
|
|
268
|
+
const window = gateWindow(scanResult.sessions, lastAt);
|
|
269
|
+
ctx.logger.debug({ event: 'memory:dream-gates', mode: 'pressure', lastAt, count: window.count, minSessions, pass: true });
|
|
270
|
+
if (scanResult.scanned === 0)
|
|
271
|
+
return;
|
|
272
|
+
hints = window.hints;
|
|
327
273
|
}
|
|
328
|
-
else
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
minHours
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
274
|
+
else {
|
|
275
|
+
// Periodic: the pure-arithmetic time gate runs FIRST, before any scan I/O;
|
|
276
|
+
// the session-count gate runs only on the scanned result.
|
|
277
|
+
if (!timeGatePasses(lastAt, now, minHours)) {
|
|
278
|
+
ctx.logger.debug({ event: 'memory:dream-gates', mode: 'periodic', lastAt, count: 0, minSessions, pass: false, reason: 'time' });
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
const scanResult = await scan();
|
|
282
|
+
const window = gateWindow(scanResult.sessions, lastAt);
|
|
283
|
+
const pass = sessionGatePasses(window.count, minSessions);
|
|
284
|
+
ctx.logger.debug({ event: 'memory:dream-gates', mode: 'periodic', lastAt, count: window.count, minSessions, pass });
|
|
285
|
+
if (!pass)
|
|
286
|
+
return;
|
|
287
|
+
hints = window.hints;
|
|
336
288
|
}
|
|
337
289
|
const priorAt = await tryAcquireLock(fs, dir, process.pid, now, policy);
|
|
338
|
-
if (priorAt === null)
|
|
290
|
+
if (priorAt === null) {
|
|
291
|
+
ctx.logger.warn(`memory-consolidation: consolidation lock held by a live holder in ${dir}`);
|
|
339
292
|
return;
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
.
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
* Session start epoch, defensively read from the header. The dream gate is
|
|
373
|
-
* skip-oriented, so an unreadable or absent timestamp conservatively counts as
|
|
374
|
-
* NEW (over-inclusion only costs a re-read). Accepted limitation: a session
|
|
375
|
-
* created before `lastAt` but still active after it is excluded from the dream
|
|
376
|
-
* input — turn-end extraction covers recent content; dream is a coarse
|
|
377
|
-
* periodic pass.
|
|
378
|
-
*/
|
|
379
|
-
function sessionStartOf(session) {
|
|
380
|
-
const at = session.header?.createdAt;
|
|
381
|
-
return Number.isSafeInteger(at) && at > 0 ? at : Number.MAX_SAFE_INTEGER;
|
|
382
|
-
}
|
|
383
|
-
/** The transcript directory is the agent's cwd. */
|
|
384
|
-
function sessionTranscriptDir(agent) {
|
|
385
|
-
return agent.session.header.cwd ?? process.cwd();
|
|
293
|
+
}
|
|
294
|
+
// Diagnostics + lock hygiene from here on: everything after the acquire can
|
|
295
|
+
// strand the lock (a startMemoryJob throw, an earlier silent death), so the
|
|
296
|
+
// whole spawn is wrapped and every failure leaves a durable breadcrumb
|
|
297
|
+
// before the rollback (plan §2.2, review Major-1/Major-2).
|
|
298
|
+
const sessionId = agent.session.header.id;
|
|
299
|
+
try {
|
|
300
|
+
await recordDreamDiagnostic(ctx, fs, dir, policy, { sessionId, phase: 'dispatch-started', detail: '' });
|
|
301
|
+
const prompt = buildConsolidationPrompt(dir, sessionsRoot, hints);
|
|
302
|
+
const job = await startMemoryJob(ctx, agent, dir, provider, 'memory-consolidation', prompt);
|
|
303
|
+
void job.done.then(async (outcome) => {
|
|
304
|
+
ctx.logger.debug({ event: 'memory:dream-outcome', status: outcome.status, detail: outcome.status === 'failed' ? outcome.detail : undefined });
|
|
305
|
+
if (outcome.status !== 'completed') {
|
|
306
|
+
await recordDreamDiagnostic(ctx, fs, dir, policy, {
|
|
307
|
+
sessionId,
|
|
308
|
+
phase: 'outcome-failed',
|
|
309
|
+
detail: outcome.status === 'failed' ? outcome.detail : outcome.status,
|
|
310
|
+
});
|
|
311
|
+
void rollbackLock(fs, dir, priorAt, policy);
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
// Success tombs the marker in BOTH modes: a successful periodic dream
|
|
315
|
+
// rebuilds the index, so a stale pending marker is obsolete by definition.
|
|
316
|
+
void clearPressure(fs, dir, now, policy);
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
catch (err) {
|
|
320
|
+
const detail = err instanceof Error && err.stack ? `${String(err)}\n${err.stack}` : String(err);
|
|
321
|
+
await recordDreamDiagnostic(ctx, fs, dir, policy, { sessionId, phase: 'dispatch-throw', detail });
|
|
322
|
+
await rollbackLock(fs, dir, priorAt, policy);
|
|
323
|
+
ctx.logger.warn(`memory-consolidation: dream dispatch failed: ${detail}`);
|
|
324
|
+
}
|
|
386
325
|
}
|
|
387
326
|
//# 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
|
|
26
|
-
* @param sessionHints -
|
|
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,
|
|
30
|
+
export declare function buildConsolidationPrompt(memoryDir: string, sessionsRoot: string, sessionHints: readonly string[]): string;
|
|
30
31
|
//# sourceMappingURL=prompts.d.ts.map
|
package/lib/prompts.d.ts.map
CHANGED
|
@@ -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
|
|
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,24 +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
|
|
44
|
-
* @param sessionHints -
|
|
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,
|
|
48
|
+
export function buildConsolidationPrompt(memoryDir, sessionsRoot, sessionHints) {
|
|
48
49
|
return [
|
|
49
|
-
`You are consolidating persistent memory from past sessions.
|
|
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
53
|
'Work in this order:',
|
|
53
54
|
`1. Orient: list \`${memoryDir}\`, then read ${ENTRYPOINT_NAME} and the topic files it points at — that is your primary review material.`,
|
|
54
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.',
|
|
55
56
|
'3. Normalize dates: convert every relative date ("yesterday", "last week") to the absolute date it referred to.',
|
|
56
|
-
`4.
|
|
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.`,
|
|
57
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.`,
|
|
58
59
|
`You may use only: ${MEMORY_AGENT_TOOLS.join(', ')}.`,
|
|
59
60
|
'',
|
|
60
|
-
|
|
61
|
+
`Session provenance hints (ids under \`${sessionsRoot}\`):`,
|
|
61
62
|
...sessionHints.map(id => `- ${id}`),
|
|
62
63
|
].join('\n');
|
|
63
64
|
}
|
package/lib/prompts.js.map
CHANGED
|
@@ -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
|
|
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":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAkBpD,kEAAkE;AAClE,MAAM,WAAW,GAAG,GAAG,GAAG,IAAI,CAAC;AAC/B,iFAAiF;AACjF,MAAM,WAAW,GAAG,EAAE,GAAG,IAAI,CAAC;AAE9B,MAAM,SAAS,GAAG,uBAAuB,CAAC;AAC1C,MAAM,aAAa,GAAG,oBAAoB,CAAC;AAE3C,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAClE,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CAAC,UAAkB;IACpC,4EAA4E;IAC5E,0BAA0B;IAC1B,IAAI,OAAO,IAAI,CAAC,oBAAoB,KAAK,UAAU;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACvF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,MAAuC,EAAE,EAAE;YACzD,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC;QACF,MAAM,UAAU,GAAG,GAAoC,EAAE;YACvD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;oBAAE,SAAS;gBACjD,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC/B,IAAI,KAAK,EAAE,IAAI,KAAK,SAAS;wBAAE,OAAO,KAAK,CAAC;gBAC9C,CAAC;gBAAC,MAAM,CAAC;oBACP,uCAAuC;gBACzC,CAAC;YACH,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC;QACF,sEAAsE;QACtE,wEAAwE;QACxE,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,EAAE;YAChC,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC7B,IAAI,IAAI,CAAC,MAAM,IAAI,WAAW;gBAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QACvD,CAAC,CAAC;QACF,MAAM,MAAM,GAAG,gBAAgB,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,GAAG,CAAC,EAAE,CAAC,CAAC;QAChF,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACzB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAC5C,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,sEAAsE;AACtE,SAAS,QAAQ,CAAC,MAA2B,EAAE,OAAe;IAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IACzB,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC;IACpF,0EAA0E;IAC1E,MAAM,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC;IAC/E,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC;QAC7C,CAAC,CAAC,MAAM,CAAC,eAAe;QACxB,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,eAAe,CAAC;YAChC,CAAC,CAAC,IAAI,CAAC,eAAe;YACtB,CAAC,CAAC,CAAC,CAAC;IACR,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI,EAAE,MAAM,CAAC;IAC7C,OAAO;QACL,EAAE,EAAE,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ,IAAI,MAAM,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO;QAC/E,SAAS;QACT,GAAG,EAAE,KAAK,GAAG,CAAC,IAAI,MAAM,KAAK,UAAU;KACxC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,YAAoB;IACrD,MAAM,MAAM,GAAsB,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;IAC9E,4EAA4E;IAC5E,wCAAwC;IACxC,IAAI,OAAO,IAAI,CAAC,oBAAoB,KAAK,UAAU;QAAE,OAAO,MAAM,CAAC;IACnE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,YAAY,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,MAAM,QAAQ,GAAqB,EAAE,CAAC;QACtC,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;gBAAE,SAAS;YACrC,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YACpD,IAAI,OAAO,CAAC;YACZ,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/D,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;oBAAE,SAAS;gBACnC,OAAO,EAAE,CAAC;gBACV,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAChD,2DAA2D;gBAC3D,IAAI,MAAuC,CAAC;gBAC5C,KAAK,MAAM,MAAM,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,CAAC;oBAChD,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;oBACpD,IAAI,MAAM,KAAK,SAAS;wBAAE,MAAM;gBAClC,CAAC;gBACD,IAAI,MAAM,KAAK,SAAS;oBAAE,UAAU,EAAE,CAAC;;oBAClC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CACxB,QAAmC,EACnC,MAAc;IAEd,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;IAC1E,MAAM,KAAK,GAAG,CAAC,GAAG,UAAU,CAAC;SAC1B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;SACzC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACpB,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;AAC7C,CAAC"}
|
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.8.0-rc.
|
|
4
|
+
"version": "0.8.0-rc.3",
|
|
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.8.0-rc.
|
|
39
|
+
"@dsh-cc/memory": "^0.8.0-rc.3"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@deepseek-ai/cordis": "link:../../../../deepseek-harness/vendor/cordis",
|