@dsh-cc/memory 0.8.0-rc.3 → 0.8.1
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 +1 -1
- package/README.zh.md +1 -1
- package/lib/index.d.ts +4 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -1
- package/lib/recall.d.ts.map +1 -1
- package/lib/recall.js +13 -2
- package/lib/recall.js.map +1 -1
- package/lib/restrict-resilience.d.ts +40 -0
- package/lib/restrict-resilience.d.ts.map +1 -0
- package/lib/restrict-resilience.js +75 -0
- package/lib/restrict-resilience.js.map +1 -0
- package/lib/title-sidecar.d.ts +51 -0
- package/lib/title-sidecar.d.ts.map +1 -0
- package/lib/title-sidecar.js +108 -0
- package/lib/title-sidecar.js.map +1 -0
- package/package.json +5 -5
package/README.i18n.yaml
CHANGED
package/README.zh.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
面向 DeepSeek Harness 的 Claude Code 风格文件记忆:可持久化的 memdir 格式、
|
|
6
6
|
`memory` 系统提示词 section、`memory_save` 写入通道,以及通过 fork 的
|
|
7
|
-
side-query
|
|
7
|
+
side-query 动态召回。所有文件访问都走可选的 `ctx.fs` 缝,因此远程或沙箱
|
|
8
8
|
后端可无改动使用(无 provider 的宿主将记忆挂载为只读)。
|
|
9
9
|
|
|
10
10
|
## 本包提供的能力
|
package/lib/index.d.ts
CHANGED
|
@@ -21,6 +21,8 @@ export { scanMemoryDirectory } from './scan.ts';
|
|
|
21
21
|
export type { MemoryDirectoryState } from './scan.ts';
|
|
22
22
|
export { resolveMemoryHome, resolveProjectMemoryRoot, resolveWorkspaceMemoryDir, canonicalMemoryRoot, projectSlug, cwdOf, gitExecSync, PROJECT_MEMORY_DIR, PROJECTS_DIR, GIT_PROBE_TIMEOUT_MS, } from './paths.ts';
|
|
23
23
|
export type { MemoryGitExec, MemoryGitExecResult } from './paths.ts';
|
|
24
|
+
export { titleSidecarPath, writeTitleSidecar, readTitleSidecar, TITLE_SIDECAR_MAX_CODE_POINTS, } from './title-sidecar.ts';
|
|
25
|
+
export type { TitleSidecarOptions } from './title-sidecar.ts';
|
|
24
26
|
export { MemorySection, renderMemorySection, renderTeamMemorySection, renderLayers, saveGuidance, MEMORY_SECTION_NAME, MEMORY_SECTION_ORDER } from './section.ts';
|
|
25
27
|
export type { MemoryLayer } from './section.ts';
|
|
26
28
|
export { MemoryRecall, SubagentMemorySelector, MAX_RECALL_MEMORIES, RECALL_FILES_SCHEMA } from './recall.ts';
|
|
@@ -32,6 +34,8 @@ export { MEMORY_WRITES_SCHEMA, WRITEBACK_MAX_FILE_BYTES, WRITEBACK_MAX_FILES, WR
|
|
|
32
34
|
export type { MemoryWrite, MemoryWritePolicy } from './writeback.ts';
|
|
33
35
|
export { PRESSURE_FILE, readPressure, armPressure, markPressureForced, clearPressure } from './pressure.ts';
|
|
34
36
|
export type { PressureState } from './pressure.ts';
|
|
37
|
+
export { startWithFilterResilience, resetRestrictWarnState } from './restrict-resilience.ts';
|
|
38
|
+
export type { ResilienceLogger } from './restrict-resilience.ts';
|
|
35
39
|
export declare const name = "memory";
|
|
36
40
|
/** Core services required for section registration and event listeners. */
|
|
37
41
|
export declare const inject: string[];
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,CAAC,MAAM,0BAA0B,CAAA;AAQxC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AACtH,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC1D,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAC/C,YAAY,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AACrD,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,yBAAyB,EACzB,mBAAmB,EACnB,WAAW,EACX,KAAK,EACL,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,oBAAoB,GACrB,MAAM,YAAY,CAAA;AACnB,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AACpE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACjK,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAC5G,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAClE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,eAAe,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAC/J,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,sBAAsB,EACtB,eAAe,EACf,aAAa,GACd,MAAM,WAAW,CAAA;AAClB,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC/C,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;AACpE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC3G,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/index.js
CHANGED
|
@@ -20,12 +20,14 @@ export { truncateEntrypointContent, ENTRYPOINT_NAME, MAX_ENTRYPOINT_LINES, MAX_E
|
|
|
20
20
|
export { MEMORY_TYPES, parseMemoryType } from "./types.js";
|
|
21
21
|
export { scanMemoryDirectory } from "./scan.js";
|
|
22
22
|
export { resolveMemoryHome, resolveProjectMemoryRoot, resolveWorkspaceMemoryDir, canonicalMemoryRoot, projectSlug, cwdOf, gitExecSync, PROJECT_MEMORY_DIR, PROJECTS_DIR, GIT_PROBE_TIMEOUT_MS, } from "./paths.js";
|
|
23
|
+
export { titleSidecarPath, writeTitleSidecar, readTitleSidecar, TITLE_SIDECAR_MAX_CODE_POINTS, } from "./title-sidecar.js";
|
|
23
24
|
export { MemorySection, renderMemorySection, renderTeamMemorySection, renderLayers, saveGuidance, MEMORY_SECTION_NAME, MEMORY_SECTION_ORDER } from "./section.js";
|
|
24
25
|
export { MemoryRecall, SubagentMemorySelector, MAX_RECALL_MEMORIES, RECALL_FILES_SCHEMA } from "./recall.js";
|
|
25
26
|
export { TeamMemoryError, sanitizePathKey, resolveTeamMemoryRoot, validateTeamMemKey, readTeamMemFile, TEAM_MEMORY_DIR, TEAM_ENTRYPOINT_NAME } from "./team.js";
|
|
26
27
|
export { MEMORY_SAVE_TOOL, MEMORY_SAVE_SCOPES, MemorySaveError, pointerLine, registerMemorySaveTool, renderTopicFile, upsertPointer, } from "./save.js";
|
|
27
28
|
export { MEMORY_WRITES_SCHEMA, WRITEBACK_MAX_FILE_BYTES, WRITEBACK_MAX_FILES, WRITEBACK_MAX_TOTAL_BYTES, memoryWritePolicy, validateMemoryWrites, writeMemoryFiles, } from "./writeback.js";
|
|
28
29
|
export { PRESSURE_FILE, readPressure, armPressure, markPressureForced, clearPressure } from "./pressure.js";
|
|
30
|
+
export { startWithFilterResilience, resetRestrictWarnState } from "./restrict-resilience.js";
|
|
29
31
|
export const name = 'memory';
|
|
30
32
|
/** Core services required for section registration and event listeners. */
|
|
31
33
|
export const inject = ['systemPrompt'];
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,CAAC,MAAM,0BAA0B,CAAA;AAExC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAElD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE7C,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAEtH,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAE1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAE/C,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,yBAAyB,EACzB,mBAAmB,EACnB,WAAW,EACX,KAAK,EACL,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,oBAAoB,GACrB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAEjK,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAE5G,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,eAAe,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAC/J,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,sBAAsB,EACtB,eAAe,EACf,aAAa,GACd,MAAM,WAAW,CAAA;AAElB,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,yBAAyB,EACzB,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/recall.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recall.d.ts","sourceRoot":"","sources":["../src/recall.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,KAAK,EAAmB,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"recall.d.ts","sourceRoot":"","sources":["../src/recall.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,KAAK,EAAmB,MAAM,wBAAwB,CAAA;AAOpE,OAAO,QAAQ,sBAAsB,CAAC;IACpC,UAAU,gBAAgB;QACxB,MAAM,EAAE;YAAE,IAAI,EAAE,QAAQ,CAAA;SAAE,CAAA;KAC3B;CACF;AAMD,+DAA+D;AAC/D,eAAO,MAAM,mBAAmB,IAAI,CAAA;AAEpC,iFAAiF;AACjF,eAAO,MAAM,kBAAkB,EAAE;IAAE,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CAAwB,CAAA;AAEnF;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAOvD,CAAA;AAeD,8CAA8C;AAC9C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,mEAAmE;AACnE,MAAM,WAAW,cAAc;IAC7B;;;;;;;;OAQG;IACH,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,SAAS,eAAe,EAAE,EACtC,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,SAAS,MAAM,EAAE,GAC7B,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;CACrB;AAED;;;;GAIG;AACH,qBAAa,sBAAuB,YAAW,cAAc;IASzD,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IAXhC;;;;;;OAMG;gBAEgB,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,KAAK,EACb,YAAY,SAAS,EACrB,YAAY,CAAC,EAAE,OAAO,YAAA;IAGnC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,eAAe,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CA8E5I;AAiCD,4EAA4E;AAC5E,qBAAa,YAAY;IAiBrB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAjBvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqF;IAC3G,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IACrC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgD;IAC/E,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwB;IAElD;;;;;;;;OAQG;gBAEgB,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,MAAM,EAC7B,OAAO,GAAE;QACP,YAAY,CAAC,EAAE,MAAM,CAAA;QACrB,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,KAAK,cAAc,CAAA;KAC3D;IAsBR,2DAA2D;IAC3D,OAAO,IAAI,IAAI;YAKD,SAAS;YA4BT,WAAW;CAoF1B"}
|
package/lib/recall.js
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
* @module @dsh-cc/memory/recall
|
|
10
10
|
*/
|
|
11
11
|
import { createUserMessage } from '@deepseek-ai/dsh-llm';
|
|
12
|
+
import { startWithFilterResilience } from "./restrict-resilience.js";
|
|
12
13
|
import { scanMemoryDirectory } from "./scan.js";
|
|
13
14
|
import { cwdOf, resolveWorkspaceMemoryDir } from "./paths.js";
|
|
14
15
|
// The canonical `tools/post-execute` waterfall signature comes from
|
|
@@ -92,7 +93,7 @@ export class SubagentMemorySelector {
|
|
|
92
93
|
: '';
|
|
93
94
|
let run;
|
|
94
95
|
try {
|
|
95
|
-
run = await subagents
|
|
96
|
+
run = await startWithFilterResilience(subagents, this.providerName, {
|
|
96
97
|
label: 'memory-recall',
|
|
97
98
|
signal,
|
|
98
99
|
prompt: [{ type: 'text', text: `${system}\n\n<user_query>\n${query}\n</user_query>\n\nAvailable memories:\n${manifest}${toolsSection}` }],
|
|
@@ -103,6 +104,16 @@ export class SubagentMemorySelector {
|
|
|
103
104
|
// recall to depth-zero agents, so this child never needs to delegate.
|
|
104
105
|
maxDepth: 1,
|
|
105
106
|
...(this.agentOptions !== undefined ? { agentOptions: this.agentOptions } : {}),
|
|
107
|
+
},
|
|
108
|
+
// Same logger fallback shape as warnOnce above.
|
|
109
|
+
{
|
|
110
|
+
warn: (message) => {
|
|
111
|
+
const logger = this.ctx.logger;
|
|
112
|
+
if (typeof logger?.warn === 'function')
|
|
113
|
+
logger.warn(message);
|
|
114
|
+
else
|
|
115
|
+
console.warn(message);
|
|
116
|
+
},
|
|
106
117
|
});
|
|
107
118
|
}
|
|
108
119
|
catch {
|
|
@@ -155,7 +166,7 @@ function isFilesPayload(value) {
|
|
|
155
166
|
* self-feeding phantom loop. KNOW YOUR INJECTOR: any new injected message
|
|
156
167
|
* source kind must be added here.
|
|
157
168
|
*/
|
|
158
|
-
const INJECTED_SOURCE_DENYLIST = ['memory', 'cc-subagent-children', 'cc-workflow-completion'];
|
|
169
|
+
const INJECTED_SOURCE_DENYLIST = ['memory', 'cc-subagent-children', 'cc-workflow-completion', 'advisor'];
|
|
159
170
|
/** The per-agent recall coordinator. Holds the shown-path set per agent. */
|
|
160
171
|
export class MemoryRecall {
|
|
161
172
|
ctx;
|
package/lib/recall.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recall.js","sourceRoot":"","sources":["../src/recall.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,EAAE,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAQ7D,oEAAoE;AACpE,wEAAwE;AACxE,yEAAyE;AAEzE,+DAA+D;AAC/D,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAA;AAEpC,iFAAiF;AACjF,MAAM,CAAC,MAAM,kBAAkB,GAAiC,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,CAAA;AAEnF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAA4B;IAC1D,IAAI,EAAE,QAAQ;IACd,oBAAoB,EAAE,KAAK;IAC3B,UAAU,EAAE;QACV,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;KACpD;IACD,QAAQ,EAAE,CAAC,OAAO,CAAC;CACpB,CAAA;AAED,qEAAqE;AACrE,MAAM,sBAAsB,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;AAC9C,MAAM,kBAAkB,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;AAE1C,kFAAkF;AAClF,SAAS,QAAQ,CAAC,IAAuB,EAAE,GAAY,EAAE,OAAe;IACtE,IAAI,IAAI,CAAC,IAAI;QAAE,OAAM;IACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAChB,MAAM,MAAM,GAAI,GAAwD,CAAC,MAAM,CAAA;IAC/E,IAAI,OAAO,MAAM,EAAE,IAAI,KAAK,UAAU;QAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;;QACvD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAC5B,CAAC;AA4BD;;;;GAIG;AACH,MAAM,OAAO,sBAAsB;IASd;IACA;IACA;IACA;IAXnB;;;;;;OAMG;IACH,YACmB,GAAY,EACZ,MAAa,EACb,eAAe,MAAM,EACrB,YAAsB;QAHtB,QAAG,GAAH,GAAG,CAAS;QACZ,WAAM,GAAN,MAAM,CAAO;QACb,iBAAY,GAAZ,YAAY,CAAS;QACrB,iBAAY,GAAZ,YAAY,CAAU;IACtC,CAAC;IAEJ,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,UAAsC,EAAE,MAAmB,EAAE,WAA8B;QACrH,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAA6B,CAAA;QACvE,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO,EAAE,CAAA;QACtC,MAAM,QAAQ,GAAG,UAAU;aACxB,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,QAAQ,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC;aACrE,IAAI,CAAC,IAAI,CAAC,CAAA;QACb,MAAM,MAAM,GAAG;YACb,yDAAyD;YACzD,gIAAgI,mBAAmB,IAAI;YACvJ,uGAAuG;YACvG,gTAAgT;YAChT,6IAA6I;SAC9I,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACZ,0EAA0E;QAC1E,wEAAwE;QACxE,8EAA8E;QAC9E,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC;YACzC,CAAC,CAAC,4BAA4B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACtD,CAAC,CAAC,EAAE,CAAA;QACN,IAAI,GAAG,CAAA;QACP,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"recall.js","sourceRoot":"","sources":["../src/recall.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fail-soft resilience for `subagents.start` toolFilter drift: the host's
|
|
3
|
+
* `tools.restrict()` throws on any allow-listed name that is not a global
|
|
4
|
+
* (inherited) tool. Some names — notably the driver-injected child-scoped
|
|
5
|
+
* `structured_output` — are visible to the child but NOT restrictable, so a
|
|
6
|
+
* stale filter naming them dies at dispatch. This helper degrades such a
|
|
7
|
+
* throw to a warn-once plus a single retry with the rejected names removed
|
|
8
|
+
* (§4.2 of docs/plans/2026-09-23-auto-dream-dispatch-fix.md). Any other
|
|
9
|
+
* error, or a failing retry, propagates unchanged.
|
|
10
|
+
* @module @dsh-cc/memory/restrict-resilience
|
|
11
|
+
*/
|
|
12
|
+
/** Minimal logger shape both lanes already rely on. */
|
|
13
|
+
export interface ResilienceLogger {
|
|
14
|
+
warn(message: string): void;
|
|
15
|
+
}
|
|
16
|
+
/** Clear the warn-once state (test hook). */
|
|
17
|
+
export declare function resetRestrictWarnState(): void;
|
|
18
|
+
/**
|
|
19
|
+
* Harvest every quoted name between the throw's prefix and the following `;`.
|
|
20
|
+
*/
|
|
21
|
+
export declare function harvestUnknownToolNames(message: string): string[];
|
|
22
|
+
/** The filter shape the helper reads/reduces; extra request fields pass through untouched. */
|
|
23
|
+
interface FilterShape {
|
|
24
|
+
allow?: readonly string[];
|
|
25
|
+
deny?: readonly string[];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* `subagents.start(provider, request)` with one-shot filter-drop resilience:
|
|
29
|
+
* on a restrict unknown-tool throw, warn once per dropped name (per process)
|
|
30
|
+
* and retry exactly once with those names removed from `toolFilter.allow`.
|
|
31
|
+
* The request type stays structural/generic so both the dream lane
|
|
32
|
+
* (memory-job.ts) and the recall selector (recall.ts) can pass their shapes.
|
|
33
|
+
*/
|
|
34
|
+
export declare function startWithFilterResilience<R extends {
|
|
35
|
+
toolFilter?: FilterShape;
|
|
36
|
+
}>(subagents: {
|
|
37
|
+
start(name: string, request: R): Promise<unknown>;
|
|
38
|
+
}, provider: string, request: R, logger: ResilienceLogger): Promise<unknown>;
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=restrict-resilience.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restrict-resilience.d.ts","sourceRoot":"","sources":["../src/restrict-resilience.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,uDAAuD;AACvD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAQD,6CAA6C;AAC7C,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CASjE;AAED,8FAA8F;AAC9F,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACzB,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACzB;AAcD;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAAC,CAAC,SAAS;IAAE,UAAU,CAAC,EAAE,WAAW,CAAA;CAAE,EACpF,SAAS,EAAE;IAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,EAChE,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,CAAC,EACV,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,OAAO,CAAC,CAkBlB"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fail-soft resilience for `subagents.start` toolFilter drift: the host's
|
|
3
|
+
* `tools.restrict()` throws on any allow-listed name that is not a global
|
|
4
|
+
* (inherited) tool. Some names — notably the driver-injected child-scoped
|
|
5
|
+
* `structured_output` — are visible to the child but NOT restrictable, so a
|
|
6
|
+
* stale filter naming them dies at dispatch. This helper degrades such a
|
|
7
|
+
* throw to a warn-once plus a single retry with the rejected names removed
|
|
8
|
+
* (§4.2 of docs/plans/2026-09-23-auto-dream-dispatch-fix.md). Any other
|
|
9
|
+
* error, or a failing retry, propagates unchanged.
|
|
10
|
+
* @module @dsh-cc/memory/restrict-resilience
|
|
11
|
+
*/
|
|
12
|
+
/** The host throw's unknown-name prefix; names are comma-separated, quoted, up to `;`. */
|
|
13
|
+
const UNKNOWN_TOOL_PREFIX = /restrict\(\) names unknown global tools? /;
|
|
14
|
+
/** Names already warned about this process (keyed by tool name). */
|
|
15
|
+
const warnedNames = new Set();
|
|
16
|
+
/** Clear the warn-once state (test hook). */
|
|
17
|
+
export function resetRestrictWarnState() {
|
|
18
|
+
warnedNames.clear();
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Harvest every quoted name between the throw's prefix and the following `;`.
|
|
22
|
+
*/
|
|
23
|
+
export function harvestUnknownToolNames(message) {
|
|
24
|
+
const match = UNKNOWN_TOOL_PREFIX.exec(message);
|
|
25
|
+
if (match === null)
|
|
26
|
+
return [];
|
|
27
|
+
const rest = message.slice(match.index + match[0].length);
|
|
28
|
+
const end = rest.indexOf(';');
|
|
29
|
+
if (end === -1)
|
|
30
|
+
return [];
|
|
31
|
+
return [...rest.slice(0, end).matchAll(/"([^"]+)"/g)]
|
|
32
|
+
.map(m => m[1])
|
|
33
|
+
.filter((name) => name !== undefined);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Drop `dropped` from the filter's allow list (preserving deny and any other
|
|
37
|
+
* fields); an absent filter stays absent.
|
|
38
|
+
*/
|
|
39
|
+
function reduceFilter(filter, dropped) {
|
|
40
|
+
if (filter === undefined)
|
|
41
|
+
return undefined;
|
|
42
|
+
return {
|
|
43
|
+
...filter,
|
|
44
|
+
allow: (filter.allow ?? []).filter(name => !dropped.includes(name)),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* `subagents.start(provider, request)` with one-shot filter-drop resilience:
|
|
49
|
+
* on a restrict unknown-tool throw, warn once per dropped name (per process)
|
|
50
|
+
* and retry exactly once with those names removed from `toolFilter.allow`.
|
|
51
|
+
* The request type stays structural/generic so both the dream lane
|
|
52
|
+
* (memory-job.ts) and the recall selector (recall.ts) can pass their shapes.
|
|
53
|
+
*/
|
|
54
|
+
export async function startWithFilterResilience(subagents, provider, request, logger) {
|
|
55
|
+
try {
|
|
56
|
+
return await subagents.start(provider, request);
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
const dropped = harvestUnknownToolNames(String(err instanceof Error ? err.message : err));
|
|
60
|
+
if (dropped.length === 0)
|
|
61
|
+
throw err;
|
|
62
|
+
for (const name of dropped) {
|
|
63
|
+
if (!warnedNames.has(name)) {
|
|
64
|
+
warnedNames.add(name);
|
|
65
|
+
logger.warn(`toolFilter dropped "${name}": tools.restrict() cannot allow-list it (not a global tool); it stays child-visible when injected by the driver`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// exactOptionalPropertyTypes: omit toolFilter entirely when it was absent.
|
|
69
|
+
const retryRequest = request.toolFilter === undefined
|
|
70
|
+
? request
|
|
71
|
+
: { ...request, toolFilter: reduceFilter(request.toolFilter, dropped) };
|
|
72
|
+
return await subagents.start(provider, retryRequest);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=restrict-resilience.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restrict-resilience.js","sourceRoot":"","sources":["../src/restrict-resilience.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,0FAA0F;AAC1F,MAAM,mBAAmB,GAAG,2CAA2C,CAAA;AAEvE,oEAAoE;AACpE,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAA;AAErC,6CAA6C;AAC7C,MAAM,UAAU,sBAAsB;IACpC,WAAW,CAAC,KAAK,EAAE,CAAA;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAe;IACrD,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC/C,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,CAAA;IAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IACzD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC7B,IAAI,GAAG,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,CAAA;IACzB,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;SAClD,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACd,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAA;AACzD,CAAC;AAQD;;;GAGG;AACH,SAAS,YAAY,CAAC,MAA+B,EAAE,OAA0B;IAC/E,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IAC1C,OAAO;QACL,GAAG,MAAM;QACT,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;KACpE,CAAA;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,SAAgE,EAChE,QAAgB,EAChB,OAAU,EACV,MAAwB;IAExB,IAAI,CAAC;QACH,OAAO,MAAM,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IACjD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,uBAAuB,CAAC,MAAM,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QACzF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,GAAG,CAAA;QACnC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3B,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;gBACrB,MAAM,CAAC,IAAI,CAAC,uBAAuB,IAAI,kHAAkH,CAAC,CAAA;YAC5J,CAAC;QACH,CAAC;QACD,2EAA2E;QAC3E,MAAM,YAAY,GAAM,OAAO,CAAC,UAAU,KAAK,SAAS;YACtD,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAoB,EAAE,CAAA;QAC5F,OAAO,MAAM,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;IACtD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session-title sidecar: a one-line UTF-8 `title.txt` colocated with each
|
|
3
|
+
* persisted session at `<dsh home>/sessions/--<project slug>--/<sessionId>/`.
|
|
4
|
+
* The TUI /resume listing reads it instead of paying a full zstd decode + JSONL
|
|
5
|
+
* scan per session through the host title snapshot path.
|
|
6
|
+
*
|
|
7
|
+
* All functions are best-effort: every I/O error is swallowed, so a sidecar
|
|
8
|
+
* failure never throws across a title generation, a rename, or the picker.
|
|
9
|
+
* @module @dsh-cc/memory
|
|
10
|
+
*/
|
|
11
|
+
/** Maximum sidecar title length in Unicode code points. */
|
|
12
|
+
export declare const TITLE_SIDECAR_MAX_CODE_POINTS = 200;
|
|
13
|
+
/** Injectable filesystem root for tests; defaults to the harness sessions dir. */
|
|
14
|
+
export interface TitleSidecarOptions {
|
|
15
|
+
/** Override for `<dsh home>/sessions` (test seam only). */
|
|
16
|
+
sessionsRoot?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Derive the sidecar path for one session. The harness groups persisted
|
|
20
|
+
* sessions under `--<slug>--` (session-persistence-jsonl `projectKey` wraps
|
|
21
|
+
* the same slug encoder in `--` on both sides); the match must be byte-exact
|
|
22
|
+
* or the sidecar is silently never found.
|
|
23
|
+
* @param sessionCwd - the session's working directory.
|
|
24
|
+
* @param sessionId - the session id.
|
|
25
|
+
* @param options - optional sessions-root override (tests).
|
|
26
|
+
* @returns the absolute `title.txt` path.
|
|
27
|
+
*/
|
|
28
|
+
export declare function titleSidecarPath(sessionCwd: string, sessionId: string, options?: TitleSidecarOptions): string;
|
|
29
|
+
/**
|
|
30
|
+
* Write the sidecar (truncated to ≤200 code points, never splitting a
|
|
31
|
+
* surrogate pair), via temp-file+rename in the same directory. Best-effort:
|
|
32
|
+
* all errors, including temp cleanup, are swallowed.
|
|
33
|
+
* @param sessionCwd - the session's working directory.
|
|
34
|
+
* @param sessionId - the session id.
|
|
35
|
+
* @param title - the title to persist.
|
|
36
|
+
* @param options - optional sessions-root override (tests).
|
|
37
|
+
*/
|
|
38
|
+
export declare function writeTitleSidecar(sessionCwd: string, sessionId: string, title: string, options?: TitleSidecarOptions): void;
|
|
39
|
+
/**
|
|
40
|
+
* Read the sidecar when it exists and is fresh: its mtime must not be older
|
|
41
|
+
* than the session log's (`session.v3.jsonl.zstd`, falling back to
|
|
42
|
+
* `session.jsonl.zstd`); a missing session log counts as fresh. Missing,
|
|
43
|
+
* empty, unreadable, or stale sidecars return `undefined` so the caller
|
|
44
|
+
* falls back to the host title snapshot path.
|
|
45
|
+
* @param sessionCwd - the session's working directory.
|
|
46
|
+
* @param sessionId - the session id.
|
|
47
|
+
* @param options - optional sessions-root override (tests).
|
|
48
|
+
* @returns the trimmed title, or `undefined`.
|
|
49
|
+
*/
|
|
50
|
+
export declare function readTitleSidecar(sessionCwd: string, sessionId: string, options?: TitleSidecarOptions): string | undefined;
|
|
51
|
+
//# sourceMappingURL=title-sidecar.d.ts.map
|
|
@@ -0,0 +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;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,MAAM,GAAG,SAAS,CA0BzH"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session-title sidecar: a one-line UTF-8 `title.txt` colocated with each
|
|
3
|
+
* persisted session at `<dsh home>/sessions/--<project slug>--/<sessionId>/`.
|
|
4
|
+
* The TUI /resume listing reads it instead of paying a full zstd decode + JSONL
|
|
5
|
+
* scan per session through the host title snapshot path.
|
|
6
|
+
*
|
|
7
|
+
* All functions are best-effort: every I/O error is swallowed, so a sidecar
|
|
8
|
+
* failure never throws across a title generation, a rename, or the picker.
|
|
9
|
+
* @module @dsh-cc/memory
|
|
10
|
+
*/
|
|
11
|
+
import { mkdirSync, readFileSync, renameSync, statSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
12
|
+
import { dirname, join } from 'node:path';
|
|
13
|
+
import { defaultDshHome } from '@deepseek-ai/dsh-home-paths';
|
|
14
|
+
import { projectSlug } from "./paths.js";
|
|
15
|
+
/** Maximum sidecar title length in Unicode code points. */
|
|
16
|
+
export const TITLE_SIDECAR_MAX_CODE_POINTS = 200;
|
|
17
|
+
function sessionsDir(sessionCwd, options) {
|
|
18
|
+
const sessionsRoot = options?.sessionsRoot ?? join(defaultDshHome(), 'sessions');
|
|
19
|
+
return join(sessionsRoot, `--${projectSlug(sessionCwd)}--`);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Derive the sidecar path for one session. The harness groups persisted
|
|
23
|
+
* sessions under `--<slug>--` (session-persistence-jsonl `projectKey` wraps
|
|
24
|
+
* the same slug encoder in `--` on both sides); the match must be byte-exact
|
|
25
|
+
* or the sidecar is silently never found.
|
|
26
|
+
* @param sessionCwd - the session's working directory.
|
|
27
|
+
* @param sessionId - the session id.
|
|
28
|
+
* @param options - optional sessions-root override (tests).
|
|
29
|
+
* @returns the absolute `title.txt` path.
|
|
30
|
+
*/
|
|
31
|
+
export function titleSidecarPath(sessionCwd, sessionId, options) {
|
|
32
|
+
return join(sessionsDir(sessionCwd, options), sessionId, 'title.txt');
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Write the sidecar (truncated to ≤200 code points, never splitting a
|
|
36
|
+
* surrogate pair), via temp-file+rename in the same directory. Best-effort:
|
|
37
|
+
* all errors, including temp cleanup, are swallowed.
|
|
38
|
+
* @param sessionCwd - the session's working directory.
|
|
39
|
+
* @param sessionId - the session id.
|
|
40
|
+
* @param title - the title to persist.
|
|
41
|
+
* @param options - optional sessions-root override (tests).
|
|
42
|
+
*/
|
|
43
|
+
export function writeTitleSidecar(sessionCwd, sessionId, title, options) {
|
|
44
|
+
const target = titleSidecarPath(sessionCwd, sessionId, options);
|
|
45
|
+
const temp = target + `.${process.pid}.${Date.now()}.tmp`;
|
|
46
|
+
try {
|
|
47
|
+
// ponytail: Array.from walks code points (surrogate-safe); a grapheme-aware
|
|
48
|
+
// split would be overkill for a picker label.
|
|
49
|
+
const truncated = Array.from(title).slice(0, TITLE_SIDECAR_MAX_CODE_POINTS).join('');
|
|
50
|
+
mkdirSync(dirname(target), { recursive: true });
|
|
51
|
+
writeFileSync(temp, truncated, 'utf8');
|
|
52
|
+
renameSync(temp, target);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
try {
|
|
56
|
+
unlinkSync(temp);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
// temp never landed or was already renamed — nothing to clean.
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Read the sidecar when it exists and is fresh: its mtime must not be older
|
|
65
|
+
* than the session log's (`session.v3.jsonl.zstd`, falling back to
|
|
66
|
+
* `session.jsonl.zstd`); a missing session log counts as fresh. Missing,
|
|
67
|
+
* empty, unreadable, or stale sidecars return `undefined` so the caller
|
|
68
|
+
* falls back to the host title snapshot path.
|
|
69
|
+
* @param sessionCwd - the session's working directory.
|
|
70
|
+
* @param sessionId - the session id.
|
|
71
|
+
* @param options - optional sessions-root override (tests).
|
|
72
|
+
* @returns the trimmed title, or `undefined`.
|
|
73
|
+
*/
|
|
74
|
+
export function readTitleSidecar(sessionCwd, sessionId, options) {
|
|
75
|
+
try {
|
|
76
|
+
const target = titleSidecarPath(sessionCwd, sessionId, options);
|
|
77
|
+
const stat = statSync(target);
|
|
78
|
+
if (stat.size === 0)
|
|
79
|
+
return undefined;
|
|
80
|
+
const dir = dirname(target);
|
|
81
|
+
try {
|
|
82
|
+
// Missing session log ⇒ the sidecar counts as fresh.
|
|
83
|
+
const v3 = statSync(join(dir, 'session.v3.jsonl.zstd')).mtimeMs;
|
|
84
|
+
if (stat.mtimeMs < v3)
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
try {
|
|
89
|
+
const v1 = statSync(join(dir, 'session.jsonl.zstd')).mtimeMs;
|
|
90
|
+
if (stat.mtimeMs < v1)
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// No session log at all — fresh.
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const title = readFileSync(target, 'utf8').trim();
|
|
98
|
+
// Invalid UTF-8 decodes to U+FFFD; treat that as corruption so the caller
|
|
99
|
+
// falls back to the host snapshot path.
|
|
100
|
+
if (title.length === 0 || title.includes('\uFFFD'))
|
|
101
|
+
return undefined;
|
|
102
|
+
return title;
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=title-sidecar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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.1",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "git+https://github.com/dsh-cc/dsh-cc.git",
|
|
@@ -41,8 +41,8 @@
|
|
|
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.1",
|
|
45
|
+
"@dsh-cc/tools": "^0.8.1"
|
|
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.1",
|
|
67
|
+
"@dsh-cc/model-aliases": "^0.8.1"
|
|
68
68
|
},
|
|
69
69
|
"publishConfig": {
|
|
70
70
|
"access": "public"
|