@dsh-cc/memory 0.8.1 → 0.8.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/README.i18n.yaml +2 -2
- package/README.md +2 -2
- package/README.zh.md +2 -2
- package/lib/title-sidecar.d.ts +3 -2
- package/lib/title-sidecar.d.ts.map +1 -1
- package/lib/title-sidecar.js +11 -12
- package/lib/title-sidecar.js.map +1 -1
- package/package.json +14 -14
package/README.i18n.yaml
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
# side as of the last confirmed-consistent state. Both languages carry equal authority;
|
|
3
3
|
# after editing either side, bring the other along and re-record with:
|
|
4
4
|
# pnpm check:readme --write
|
|
5
|
-
README.md:
|
|
6
|
-
README.zh.md:
|
|
5
|
+
README.md: 76fec709fd73426c01eaea9be23933d5f7f92ef6
|
|
6
|
+
README.zh.md: bb944d63de2139b35a6f2d4f652db712e2af021f
|
package/README.md
CHANGED
|
@@ -51,7 +51,7 @@ providerless host mounts memory read-only).
|
|
|
51
51
|
`{ mode: 'workspace-write', workspaceRoot: <memory dir> }` — confinement is
|
|
52
52
|
kept, the writable root IS the memory directory. Validation (kebab-case
|
|
53
53
|
slugs, the four types, size caps) shares the `writeback` boundary with
|
|
54
|
-
|
|
54
|
+
`@dsh-cc/memory-consolidation`'s fork write-back. Registration is opportunistic:
|
|
55
55
|
hosts without a tools service skip it and stay read-only.
|
|
56
56
|
- **Dynamic recall** — an `agent/pre-step` listener asks a small-model side
|
|
57
57
|
query (a forked subagent via `ctx.subagents`) which topic files are relevant
|
|
@@ -128,7 +128,7 @@ entrypoint truncation caps and the five-file recall ceiling.
|
|
|
128
128
|
`MEMORY_SAVE_SCOPES` — the model-facing save channel.
|
|
129
129
|
- `validateMemoryWrites(input)` / `writeMemoryFiles(fs, dir, writes)` /
|
|
130
130
|
`memoryWritePolicy(dir)` / `MEMORY_WRITES_SCHEMA` — the host-side write-back
|
|
131
|
-
shared with
|
|
131
|
+
shared with `@dsh-cc/memory-consolidation`.
|
|
132
132
|
- `readPressure(fs, dir)` / `armPressure(fs, dir, now, policy?)` /
|
|
133
133
|
`markPressureForced(...)` / `clearPressure(...)` / `PRESSURE_FILE` — the
|
|
134
134
|
consolidation-pressure marker (`.consolidation-needed`) that queues a forced
|
package/README.zh.md
CHANGED
|
@@ -36,7 +36,7 @@ side-query 动态召回。所有文件访问都走可选的 `ctx.fs` 缝,因
|
|
|
36
36
|
目录,由 host 侧生成 frontmatter、upsert `MEMORY.md` 指针行,并经 `ctx.fs` 缝以
|
|
37
37
|
`{ mode: 'workspace-write', workspaceRoot: <记忆目录> }` 的 per-call 策略
|
|
38
38
|
落盘——围栏保留,可写根恰好是记忆目录。校验(kebab-case slug、四种类型、大小
|
|
39
|
-
上限)与
|
|
39
|
+
上限)与 `@dsh-cc/memory-consolidation` 的 fork 写回共用同一 `writeback` 边界。
|
|
40
40
|
注册是机会式的:宿主无 tools 服务时跳过并保持只读。
|
|
41
41
|
- **动态召回** —— `agent/pre-step` 监听器用小型模型 side-query(通过
|
|
42
42
|
`ctx.subagents` fork)判断哪些主题文件与当前轮相关,再通过 `agent.inject()`
|
|
@@ -101,7 +101,7 @@ await ctx.plugin(memory, { memoryHome: '/tmp/mem' })
|
|
|
101
101
|
`MEMORY_SAVE_SCOPES` —— 面向模型的保存通道。
|
|
102
102
|
- `validateMemoryWrites(input)` / `writeMemoryFiles(fs, dir, writes)` /
|
|
103
103
|
`memoryWritePolicy(dir)` / `MEMORY_WRITES_SCHEMA` —— 与
|
|
104
|
-
|
|
104
|
+
`@dsh-cc/memory-consolidation` 共用的 host 侧写回。
|
|
105
105
|
- `readPressure(fs, dir)` / `armPressure(fs, dir, now, policy?)` /
|
|
106
106
|
`markPressureForced(...)` / `clearPressure(...)` / `PRESSURE_FILE` ——
|
|
107
107
|
整合压力标记(`.consolidation-needed`):索引门产生压力时排队一次强制 dream。
|
package/lib/title-sidecar.d.ts
CHANGED
|
@@ -38,8 +38,9 @@ export declare function titleSidecarPath(sessionCwd: string, sessionId: string,
|
|
|
38
38
|
export declare function writeTitleSidecar(sessionCwd: string, sessionId: string, title: string, options?: TitleSidecarOptions): void;
|
|
39
39
|
/**
|
|
40
40
|
* Read the sidecar when it exists and is fresh: its mtime must not be older
|
|
41
|
-
* than the session log's (`session.
|
|
42
|
-
* `session.jsonl.zstd`); a missing session log
|
|
41
|
+
* than the session log's (v4-first resolver: `session.v4.jsonl.zstd`,
|
|
42
|
+
* falling back to v3, then `session.jsonl.zstd`); a missing session log
|
|
43
|
+
* counts as fresh. Missing,
|
|
43
44
|
* empty, unreadable, or stale sidecars return `undefined` so the caller
|
|
44
45
|
* falls back to the host title snapshot path.
|
|
45
46
|
* @param sessionCwd - the session's working directory.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"title-sidecar.d.ts","sourceRoot":"","sources":["../src/title-sidecar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,2DAA2D;AAC3D,eAAO,MAAM,6BAA6B,MAAM,CAAA;AAEhD,kFAAkF;AAClF,MAAM,WAAW,mBAAmB;IAClC,2DAA2D;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAOD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAE7G;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAiB3H;AAED
|
|
1
|
+
{"version":3,"file":"title-sidecar.d.ts","sourceRoot":"","sources":["../src/title-sidecar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,2DAA2D;AAC3D,eAAO,MAAM,6BAA6B,MAAM,CAAA;AAEhD,kFAAkF;AAClF,MAAM,WAAW,mBAAmB;IAClC,2DAA2D;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAOD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAE7G;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAiB3H;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,MAAM,GAAG,SAAS,CA0BzH"}
|
package/lib/title-sidecar.js
CHANGED
|
@@ -62,8 +62,9 @@ export function writeTitleSidecar(sessionCwd, sessionId, title, options) {
|
|
|
62
62
|
}
|
|
63
63
|
/**
|
|
64
64
|
* Read the sidecar when it exists and is fresh: its mtime must not be older
|
|
65
|
-
* than the session log's (`session.
|
|
66
|
-
* `session.jsonl.zstd`); a missing session log
|
|
65
|
+
* than the session log's (v4-first resolver: `session.v4.jsonl.zstd`,
|
|
66
|
+
* falling back to v3, then `session.jsonl.zstd`); a missing session log
|
|
67
|
+
* counts as fresh. Missing,
|
|
67
68
|
* empty, unreadable, or stale sidecars return `undefined` so the caller
|
|
68
69
|
* falls back to the host title snapshot path.
|
|
69
70
|
* @param sessionCwd - the session's working directory.
|
|
@@ -78,20 +79,18 @@ export function readTitleSidecar(sessionCwd, sessionId, options) {
|
|
|
78
79
|
if (stat.size === 0)
|
|
79
80
|
return undefined;
|
|
80
81
|
const dir = dirname(target);
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
return undefined;
|
|
86
|
-
}
|
|
87
|
-
catch {
|
|
82
|
+
// v4-first resolver: compare against the newest stream spelling present
|
|
83
|
+
// (v4, then v3, then legacy); none present ⇒ the sidecar counts as fresh.
|
|
84
|
+
const streamNames = ['session.v4.jsonl.zstd', 'session.v3.jsonl.zstd', 'session.jsonl.zstd'];
|
|
85
|
+
for (const streamName of streamNames) {
|
|
88
86
|
try {
|
|
89
|
-
const
|
|
90
|
-
if (stat.mtimeMs <
|
|
87
|
+
const stream = statSync(join(dir, streamName)).mtimeMs;
|
|
88
|
+
if (stat.mtimeMs < stream)
|
|
91
89
|
return undefined;
|
|
90
|
+
break;
|
|
92
91
|
}
|
|
93
92
|
catch {
|
|
94
|
-
//
|
|
93
|
+
// Try the next-older spelling.
|
|
95
94
|
}
|
|
96
95
|
}
|
|
97
96
|
const title = readFileSync(target, 'utf8').trim();
|
package/lib/title-sidecar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"title-sidecar.js","sourceRoot":"","sources":["../src/title-sidecar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAClG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExC,2DAA2D;AAC3D,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAG,CAAA;AAQhD,SAAS,WAAW,CAAC,UAAkB,EAAE,OAA6B;IACpE,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,UAAU,CAAC,CAAA;IAChF,OAAO,IAAI,CAAC,YAAY,EAAE,KAAK,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;AAC7D,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAkB,EAAE,SAAiB,EAAE,OAA6B;IACnG,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,CAAA;AACvE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAkB,EAAE,SAAiB,EAAE,KAAa,EAAE,OAA6B;IACnH,MAAM,MAAM,GAAG,gBAAgB,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;IAC/D,MAAM,IAAI,GAAG,MAAM,GAAG,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,CAAA;IACzD,IAAI,CAAC;QACH,4EAA4E;QAC5E,8CAA8C;QAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,6BAA6B,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACpF,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC/C,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QACtC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC;YACH,UAAU,CAAC,IAAI,CAAC,CAAA;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,+DAA+D;QACjE,CAAC;IACH,CAAC;AACH,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"title-sidecar.js","sourceRoot":"","sources":["../src/title-sidecar.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dsh-cc/memory",
|
|
3
3
|
"description": "Claude Code-style file-based memory: memdir format, system-prompt section, and dynamic recall",
|
|
4
|
-
"version": "0.8.
|
|
4
|
+
"version": "0.8.2",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "git+https://github.com/dsh-cc/dsh-cc.git",
|
|
@@ -29,20 +29,20 @@
|
|
|
29
29
|
],
|
|
30
30
|
"license": "Apache-2.0",
|
|
31
31
|
"peerDependencies": {
|
|
32
|
-
"@deepseek-ai/dsh-agent": ">=0.1.
|
|
33
|
-
"@deepseek-ai/dsh-fs": ">=0.1.
|
|
34
|
-
"@deepseek-ai/dsh-home-paths": ">=0.1.
|
|
35
|
-
"@deepseek-ai/dsh-invariants": ">=0.1.
|
|
36
|
-
"@deepseek-ai/dsh-llm": ">=0.1.
|
|
37
|
-
"@deepseek-ai/dsh-session": ">=0.1.
|
|
38
|
-
"@deepseek-ai/dsh-subagent": ">=0.1.
|
|
39
|
-
"@deepseek-ai/dsh-system-prompt": ">=0.1.
|
|
40
|
-
"@deepseek-ai/cordis": ">=0.1.
|
|
32
|
+
"@deepseek-ai/dsh-agent": ">=0.1.7-rc.2",
|
|
33
|
+
"@deepseek-ai/dsh-fs": ">=0.1.7-rc.2",
|
|
34
|
+
"@deepseek-ai/dsh-home-paths": ">=0.1.7-rc.2",
|
|
35
|
+
"@deepseek-ai/dsh-invariants": ">=0.1.7-rc.2",
|
|
36
|
+
"@deepseek-ai/dsh-llm": ">=0.1.7-rc.2",
|
|
37
|
+
"@deepseek-ai/dsh-session": ">=0.1.7-rc.2",
|
|
38
|
+
"@deepseek-ai/dsh-subagent": ">=0.1.7-rc.2",
|
|
39
|
+
"@deepseek-ai/dsh-system-prompt": ">=0.1.7-rc.2",
|
|
40
|
+
"@deepseek-ai/cordis": ">=0.1.7-rc.2",
|
|
41
41
|
"@deepseek-ai/schemastery": "^3.18.1"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@dsh-cc/model-aliases": "^0.8.
|
|
45
|
-
"@dsh-cc/tools": "^0.8.
|
|
44
|
+
"@dsh-cc/model-aliases": "^0.8.2",
|
|
45
|
+
"@dsh-cc/tools": "^0.8.2"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"@deepseek-ai/cordis": "link:../../../../deepseek-harness/vendor/cordis",
|
|
@@ -63,8 +63,8 @@
|
|
|
63
63
|
"@deepseek-ai/dsh-subagent-spawn-in-process": "link:../../../../deepseek-harness/packages/subagent/subagent-spawn-in-process",
|
|
64
64
|
"@deepseek-ai/dsh-subagent-fork-in-process": "link:../../../../deepseek-harness/packages/subagent/subagent-fork-in-process",
|
|
65
65
|
"@dsh-cc/agent-loop-mock": "^0.1.0",
|
|
66
|
-
"@dsh-cc/tools": "^0.8.
|
|
67
|
-
"@dsh-cc/model-aliases": "^0.8.
|
|
66
|
+
"@dsh-cc/tools": "^0.8.2",
|
|
67
|
+
"@dsh-cc/model-aliases": "^0.8.2"
|
|
68
68
|
},
|
|
69
69
|
"publishConfig": {
|
|
70
70
|
"access": "public"
|