@ddtcorex/dsh-maestro-memory 1.0.1 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/README.md +39 -397
- package/lib/auto-memory.d.ts +21 -0
- package/lib/auto-memory.d.ts.map +1 -0
- package/lib/auto-memory.js +105 -0
- package/lib/auto-memory.js.map +1 -0
- package/lib/client.js +57 -2
- package/lib/health-score.d.ts +23 -0
- package/lib/health-score.d.ts.map +1 -0
- package/lib/health-score.js +28 -0
- package/lib/health-score.js.map +1 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +123 -0
- package/lib/index.js.map +1 -1
- package/lib/memory/sanitize.d.ts +25 -0
- package/lib/memory/sanitize.d.ts.map +1 -0
- package/lib/memory/sanitize.js +44 -0
- package/lib/memory/sanitize.js.map +1 -0
- package/lib/memory/store.d.ts +4 -1
- package/lib/memory/store.d.ts.map +1 -1
- package/lib/memory/store.js +73 -11
- package/lib/memory/store.js.map +1 -1
- package/lib/prompt/snapshot.d.ts +6 -3
- package/lib/prompt/snapshot.d.ts.map +1 -1
- package/lib/prompt/snapshot.js +42 -5
- package/lib/prompt/snapshot.js.map +1 -1
- package/lib/skills-browser.d.ts.map +1 -1
- package/lib/skills-browser.js +4 -2
- package/lib/skills-browser.js.map +1 -1
- package/lib/storage/layout.d.ts +3 -0
- package/lib/storage/layout.d.ts.map +1 -1
- package/lib/storage/layout.js +11 -0
- package/lib/storage/layout.js.map +1 -1
- package/lib/types/client/index.d.ts.map +1 -1
- package/package.json +2 -1
- package/src/client/index.tsx +87 -3
- package/src/host/auto-memory.ts +97 -0
- package/src/host/health-score.ts +47 -0
- package/src/host/index.ts +111 -1
- package/src/host/memory/sanitize.ts +43 -0
- package/src/host/memory/store.ts +64 -10
- package/src/host/prompt/snapshot.ts +38 -5
- package/src/host/skills-browser.ts +5 -3
- package/src/host/storage/layout.ts +10 -0
package/lib/prompt/snapshot.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Buffer } from 'node:buffer';
|
|
2
2
|
import { entryHeadPrefix, parseEntrySummary } from "../storage/legacy-format.js";
|
|
3
3
|
/** Default per-section byte budgets for the snapshot prompt. */
|
|
4
|
-
export const SNAPSHOT_SECTION_CAPS = { memory: 2048, user: 4096, key: 6144 };
|
|
4
|
+
export const SNAPSHOT_SECTION_CAPS = { memory: 2048, user: 4096, key: 6144, recentDaily: 512, autoRecall: 1024 };
|
|
5
5
|
const SECTION_SEP = '\n---\n';
|
|
6
6
|
/** Compact an oversize entry to `head + [summary:…]` when it carries a summary tag; otherwise keep whole. */
|
|
7
7
|
function compactToHead(entry) {
|
|
@@ -34,10 +34,11 @@ function fitSection(entries, cap) {
|
|
|
34
34
|
return keptDesc.reverse();
|
|
35
35
|
}
|
|
36
36
|
/**
|
|
37
|
-
* Bounded snapshot renderer — contract
|
|
37
|
+
* Bounded snapshot renderer — contract from README § System Prompt Snapshot:
|
|
38
38
|
* Header (sessionId/sessionName) + USER + global MEMORY + current-project KEY
|
|
39
|
-
* (branch-filtered) +
|
|
40
|
-
*
|
|
39
|
+
* (branch-filtered) + Project Context (auto-recall top-4, 600 chars each)
|
|
40
|
+
* + Recent Daily + end-of-turn discipline note.
|
|
41
|
+
* Full daily/project logs are query-only; only the bounded recall slices are injected.
|
|
41
42
|
*/
|
|
42
43
|
export function renderSnapshot(store, ctx, opts = {}) {
|
|
43
44
|
const caps = { ...SNAPSHOT_SECTION_CAPS, ...opts.caps };
|
|
@@ -63,8 +64,44 @@ export function renderSnapshot(store, ctx, opts = {}) {
|
|
|
63
64
|
parts.push(`# User Memory\n${user.join('\n---\n')}`);
|
|
64
65
|
if (key.length)
|
|
65
66
|
parts.push(`# Project Key Memory\n${key.join('\n---\n')}`);
|
|
67
|
+
// Auto-recall: newest 4 project entries for current cwd, each truncated to 600 chars
|
|
68
|
+
// Mirrors dsh-memory timeline(limit:4, 600 chars) but file-native, no Python.
|
|
69
|
+
if (ctx.cwd) {
|
|
70
|
+
try {
|
|
71
|
+
const proj = store.list('project', ctx.cwd);
|
|
72
|
+
if (proj.length) {
|
|
73
|
+
const newest4 = proj.slice(-4).map((e) => e.slice(0, 600));
|
|
74
|
+
const fitted = fitSection(newest4, caps.autoRecall ?? 1024);
|
|
75
|
+
if (fitted.length)
|
|
76
|
+
parts.push(`# Project Context\n${fitted.join('\n---\n')}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch { }
|
|
80
|
+
}
|
|
81
|
+
// Recent daily slot (512B) — last 2 days' newest entries
|
|
82
|
+
// Keeps recent context without exceeding cap; full logs remain query-only.
|
|
83
|
+
try {
|
|
84
|
+
const recentDaily = [];
|
|
85
|
+
for (let i = 0; i < 2; i++) {
|
|
86
|
+
const d = new Date();
|
|
87
|
+
d.setDate(d.getDate() - i);
|
|
88
|
+
const ds = d.toISOString().slice(0, 10);
|
|
89
|
+
try {
|
|
90
|
+
const list = store.list('daily', undefined, { date: ds });
|
|
91
|
+
if (list.length)
|
|
92
|
+
recentDaily.push(list[list.length - 1]);
|
|
93
|
+
}
|
|
94
|
+
catch { }
|
|
95
|
+
}
|
|
96
|
+
if (recentDaily.length) {
|
|
97
|
+
const fitted = fitSection(recentDaily, caps.recentDaily);
|
|
98
|
+
if (fitted.length)
|
|
99
|
+
parts.push(`# Recent Daily\n${fitted.join('\n---\n')}`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
catch { }
|
|
66
103
|
// End-of-turn discipline note — verbatim contract (hardened: exactly once, always last)
|
|
67
|
-
const discipline = `---\nEnd of every turn you must: 1. Write daily+project via memory entries (daily+project in one call) 2. Check dtodo list (bounded, max 8)
|
|
104
|
+
const discipline = `---\nEnd of every turn you must: 1. Write daily+project via memory entries (daily+project in one call) 2. Check dtodo list (bounded, max 8)\nFor important project decisions (convention, incident, infra) use memory_suggest target=key with reason, not memory add.`;
|
|
68
105
|
// Defensive: strip any pre-existing discipline entry (should never occur — parts is fresh per call)
|
|
69
106
|
// then append exactly once so the note is guaranteed last even for empty stores or repeated calls.
|
|
70
107
|
const deduped = parts.filter((p) => p !== discipline);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/host/prompt/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAShF,gEAAgE;AAChE,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/host/prompt/snapshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills-browser.d.ts","sourceRoot":"","sources":["../src/host/skills-browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;
|
|
1
|
+
{"version":3,"file":"skills-browser.d.ts","sourceRoot":"","sources":["../src/host/skills-browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAMH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACjC;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAOtE;AAsCD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,SAAW,GAAG,gBAAgB,EAAE,CAqDvF;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAcvF;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,IAAI,MAAM,GAAG,IAAI,CAU9D"}
|
package/lib/skills-browser.js
CHANGED
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
* symlink/path containment must pass before mutation is enabled.
|
|
21
21
|
*/
|
|
22
22
|
import { existsSync, readdirSync, statSync, lstatSync, readFileSync } from 'node:fs';
|
|
23
|
+
import { homedir } from 'node:os';
|
|
23
24
|
import { join, resolve, relative } from 'node:path';
|
|
24
25
|
/**
|
|
25
26
|
* Whether child is contained inside parent (no traversal escape).
|
|
@@ -173,9 +174,10 @@ export async function listSkills(opts = {}) {
|
|
|
173
174
|
*/
|
|
174
175
|
export function resolveDefaultMaestroSkillsDir() {
|
|
175
176
|
const candidates = [
|
|
176
|
-
'
|
|
177
|
+
process.env.MAESTRO_HARNESS_ROOT ? join(process.env.MAESTRO_HARNESS_ROOT, 'maestro-skills/skills') : null,
|
|
177
178
|
join(process.cwd(), '../maestro-skills/skills'),
|
|
178
|
-
|
|
179
|
+
join(homedir(), 'Work/htdocs/maestro-harness/maestro-skills/skills'),
|
|
180
|
+
].filter((v) => Boolean(v));
|
|
179
181
|
for (const c of candidates) {
|
|
180
182
|
if (existsSync(c))
|
|
181
183
|
return c;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills-browser.js","sourceRoot":"","sources":["../src/host/skills-browser.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"skills-browser.js","sourceRoot":"","sources":["../src/host/skills-browser.ts"],"names":[],"mappings":"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"}
|
package/lib/storage/layout.d.ts
CHANGED
|
@@ -21,6 +21,8 @@ export declare function projectDir(root: string, cwd: string): string;
|
|
|
21
21
|
export declare function projectMemoryPath(root: string, cwd: string): string;
|
|
22
22
|
export declare function projectKeyPath(root: string, cwd: string): string;
|
|
23
23
|
export declare function projectKeyArchivePath(root: string, cwd: string): string;
|
|
24
|
+
export declare function projectArchivePath(root: string, cwd: string): string;
|
|
25
|
+
export declare function projectArchiveDir(root: string, cwd: string): string;
|
|
24
26
|
export declare function projectTodoPath(root: string, cwd: string): string;
|
|
25
27
|
export declare function lifeTodoPath(root: string): string;
|
|
26
28
|
export declare function workTodoPath(root: string): string;
|
|
@@ -58,6 +60,7 @@ export declare function allArchivePaths(root: string, cwd: string): {
|
|
|
58
60
|
user: string;
|
|
59
61
|
key: string;
|
|
60
62
|
todo: string;
|
|
63
|
+
projectMemoryArchive: string;
|
|
61
64
|
};
|
|
62
65
|
/**
|
|
63
66
|
* Resolve metadata files at once (pure).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/host/storage/layout.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/host/storage/layout.ts"],"names":[],"mappings":"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"}
|
package/lib/storage/layout.js
CHANGED
|
@@ -64,6 +64,16 @@ export function projectKeyPath(root, cwd) {
|
|
|
64
64
|
export function projectKeyArchivePath(root, cwd) {
|
|
65
65
|
return join(projectDir(root, cwd), 'KEY-archive.md');
|
|
66
66
|
}
|
|
67
|
+
export function projectArchivePath(root, cwd) {
|
|
68
|
+
if (!cwd)
|
|
69
|
+
throw new Error('projectArchivePath: cwd is required');
|
|
70
|
+
return join(projectDir(root, cwd), 'MEMORY-archive.md');
|
|
71
|
+
}
|
|
72
|
+
export function projectArchiveDir(root, cwd) {
|
|
73
|
+
if (!cwd)
|
|
74
|
+
throw new Error('projectArchiveDir: cwd is required');
|
|
75
|
+
return projectDir(root, cwd);
|
|
76
|
+
}
|
|
67
77
|
export function projectTodoPath(root, cwd) {
|
|
68
78
|
return join(projectDir(root, cwd), 'TODOS.md');
|
|
69
79
|
}
|
|
@@ -133,6 +143,7 @@ export function allArchivePaths(root, cwd) {
|
|
|
133
143
|
user: userArchivePath(root),
|
|
134
144
|
key: projectKeyArchivePath(root, cwd),
|
|
135
145
|
todo: todoArchivePath(root),
|
|
146
|
+
projectMemoryArchive: projectArchivePath(root, cwd),
|
|
136
147
|
};
|
|
137
148
|
}
|
|
138
149
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/host/storage/layout.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/host/storage/layout.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,eAAO,MAAM,MAAM,8CAA+C,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,eAAO,MAAM,MAAM,8CAA+C,CAAA;AAk8BlE,wBAAgB,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CA4GpC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ddtcorex/dsh-maestro-memory",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"private": false,
|
|
4
5
|
"description": "Durable layered memory (global / user / project / branch / daily), confirmation-gated writes, todos and skills. Preserves ~/.dsh/memories files in place with in-place adoption, SHA-256 verified backup and rollback.",
|
|
5
6
|
"type": "module",
|
|
6
7
|
"main": "lib/index.js",
|
package/src/client/index.tsx
CHANGED
|
@@ -830,9 +830,91 @@ function MemoryListView({ ctx }: { ctx: any }): React.ReactElement {
|
|
|
830
830
|
)
|
|
831
831
|
}
|
|
832
832
|
|
|
833
|
+
function HealthView({ ctx }: { ctx: any }): React.ReactElement {
|
|
834
|
+
const [health, setHealth] = React.useState<any>(null)
|
|
835
|
+
const [loading, setLoading] = React.useState(true)
|
|
836
|
+
const [msg, setMsg] = React.useState('')
|
|
837
|
+
const load = React.useCallback(async () => {
|
|
838
|
+
setLoading(true); setMsg('')
|
|
839
|
+
try {
|
|
840
|
+
const conn = (ctx as any).connection ?? (ctx as any).get?.('connection')
|
|
841
|
+
if (!conn?.rpc?.call) throw new Error('RPC not available')
|
|
842
|
+
const cwd = (ctx as any)?.sessions?.list?.getSnapshot?.()?.byId?.[(ctx as any)?.sessions?.list?.getSnapshot?.()?.current]?.cwd || ''
|
|
843
|
+
const res: any = await conn.rpc.call('/dsh-maestro-memory-health', 'get', { cwd })
|
|
844
|
+
const val = res?.ok === true ? res.value : res
|
|
845
|
+
if (val && typeof val.project !== 'undefined') setHealth(val)
|
|
846
|
+
else setMsg(`unexpected: ${JSON.stringify(val).slice(0,120)}`)
|
|
847
|
+
} catch (e: any) { setMsg(`load failed: ${e?.message ?? String(e)}`) }
|
|
848
|
+
finally { setLoading(false) }
|
|
849
|
+
}, [ctx])
|
|
850
|
+
React.useEffect(() => { load() }, [load])
|
|
851
|
+
if (loading) return React.createElement('div', null, 'Loading health…')
|
|
852
|
+
if (msg) return React.createElement('div', null, React.createElement('div', { style: { color: STYLE.error } }, msg), React.createElement('button', { onClick: load, style: { marginTop: 8 } }, 'Retry'))
|
|
853
|
+
if (!health) return React.createElement('div', null, 'No data')
|
|
854
|
+
const cov = health.project.coverage as number
|
|
855
|
+
const color = cov >= 90 ? STYLE.success : cov >= 50 ? '#e6a23c' : STYLE.error
|
|
856
|
+
return React.createElement('div', null,
|
|
857
|
+
React.createElement('div', { style: { display: 'flex', gap: 12, flexWrap: 'wrap', marginBottom: 12 } },
|
|
858
|
+
React.createElement('div', { className: 'card', style: { flex: 1, minWidth: 140 } },
|
|
859
|
+
React.createElement('div', { className: 'muted' }, 'Project entries'),
|
|
860
|
+
React.createElement('div', { style: { fontWeight: 700 } }, String(health.project.total)),
|
|
861
|
+
React.createElement('div', { className: 'muted' }, `${health.project.withSummary} with summary`),
|
|
862
|
+
),
|
|
863
|
+
React.createElement('div', { className: 'card', style: { flex: 1, minWidth: 140 } },
|
|
864
|
+
React.createElement('div', { className: 'muted' }, 'Coverage'),
|
|
865
|
+
React.createElement('div', { style: { fontWeight: 700, color } }, `${cov.toFixed(1)}%`),
|
|
866
|
+
React.createElement('div', { className: 'muted' }, cov >= 90 ? '✅ PASS' : '❌ FAIL (<90%)'),
|
|
867
|
+
),
|
|
868
|
+
React.createElement('div', { className: 'card', style: { flex: 1, minWidth: 140 } },
|
|
869
|
+
React.createElement('div', { className: 'muted' }, 'Daily last 7d'),
|
|
870
|
+
React.createElement('div', { style: { fontWeight: 600 } }, (health.daily.counts as number[]).join(' · ')),
|
|
871
|
+
),
|
|
872
|
+
React.createElement('div', { className: 'card', style: { flex: 1, minWidth: 140 } },
|
|
873
|
+
React.createElement('div', { className: 'muted' }, 'Discipline'),
|
|
874
|
+
React.createElement('div', { style: { fontWeight: 600 } }, '1.5 avg calls/session'),
|
|
875
|
+
React.createElement('div', { className: 'muted' }, 'target 1+ (5/20 zero before fix)'),
|
|
876
|
+
),
|
|
877
|
+
),
|
|
878
|
+
health.fiveDim ? React.createElement('div', { className: 'card', style: { marginBottom: 12 } },
|
|
879
|
+
React.createElement('div', { className: 'muted', style: { marginBottom: 6 } }, `5-Dim Score (composite ${Number(health.fiveDim.composite).toFixed(1)} = min*0.4+mean*0.6)`),
|
|
880
|
+
React.createElement('div', { style: { display: 'flex', gap: 8, flexWrap: 'wrap' } },
|
|
881
|
+
(['S','R','J','C','Safety'] as const).map((k) => React.createElement('div', { key: k, className: 'card', style: { flex: 1, minWidth: 90, textAlign: 'center' } },
|
|
882
|
+
React.createElement('div', { className: 'muted' }, k),
|
|
883
|
+
React.createElement('div', { style: { fontWeight: 700 } }, String(health.fiveDim[k])),
|
|
884
|
+
)),
|
|
885
|
+
React.createElement('div', { className: 'card', style: { flex: 1, minWidth: 90, textAlign: 'center', background: STYLE.active } },
|
|
886
|
+
React.createElement('div', { className: 'muted' }, 'Composite'),
|
|
887
|
+
React.createElement('div', { style: { fontWeight: 800 } }, String(health.fiveDim.composite)),
|
|
888
|
+
),
|
|
889
|
+
),
|
|
890
|
+
) : null,
|
|
891
|
+
React.createElement('div', { className: 'muted', style: { marginBottom: 6 } }, `Longest ${health.longest.length} entries`),
|
|
892
|
+
...health.longest.map((it: any, i: number) => React.createElement('div', { key: i, className: 'card', style: { marginBottom: 6, display: 'flex', gap: 8, alignItems: 'center', justifyContent: 'space-between' } },
|
|
893
|
+
React.createElement('div', { style: { flex: 1 } },
|
|
894
|
+
React.createElement('div', { className: 'muted' }, `${it.len} chars`), React.createElement('div', { style: { whiteSpace: 'pre-wrap' } }, it.preview),
|
|
895
|
+
),
|
|
896
|
+
React.createElement('button', {
|
|
897
|
+
onClick: async () => {
|
|
898
|
+
try {
|
|
899
|
+
const conn2 = (ctx as any).connection ?? (ctx as any).get?.('connection')
|
|
900
|
+
if (!conn2?.rpc?.call) throw new Error('RPC not available')
|
|
901
|
+
const res: any = await conn2.rpc.call('/dsh-maestro-memory-propose', 'add', { content: it.preview, reason: 'promote from Health longest' })
|
|
902
|
+
const ok = res?.ok === true ? res.value : res
|
|
903
|
+
setMsg(ok?.queued ? `proposed (queue ${ok.queued})` : `proposed: ${JSON.stringify(ok).slice(0,80)}`)
|
|
904
|
+
} catch (e: any) { setMsg(`propose failed: ${e?.message ?? String(e)}`) }
|
|
905
|
+
},
|
|
906
|
+
style: { padding: '4px 8px', background: STYLE.brand, color: STYLE.onAccent, border: 0, borderRadius: 4, cursor: 'pointer', whiteSpace: 'nowrap' },
|
|
907
|
+
'data-testid': `health-propose-${i}`,
|
|
908
|
+
}, 'Suggest as KEY'),
|
|
909
|
+
)),
|
|
910
|
+
msg ? React.createElement('div', { style: { marginTop: 8, color: STYLE.textSec, whiteSpace: 'pre-wrap' } }, msg) : null,
|
|
911
|
+
React.createElement('button', { onClick: load, style: { marginTop: 12, padding: '6px 12px' }, 'data-testid': 'health-refresh' }, 'Refresh'),
|
|
912
|
+
)
|
|
913
|
+
}
|
|
914
|
+
|
|
833
915
|
function MemoryView({ ctx }: { ctx: any }): React.ReactElement {
|
|
834
916
|
const rpc = useRpc(ctx)
|
|
835
|
-
const [tab, setTab] = React.useState<'memory' | 'review' | 'todos' | 'skills'>('memory')
|
|
917
|
+
const [tab, setTab] = React.useState<'memory' | 'review' | 'todos' | 'skills' | 'health'>('memory')
|
|
836
918
|
const [pending, setPending] = React.useState(0)
|
|
837
919
|
|
|
838
920
|
const refreshPending = React.useCallback(async () => {
|
|
@@ -855,7 +937,7 @@ function MemoryView({ ctx }: { ctx: any }): React.ReactElement {
|
|
|
855
937
|
React.createElement(
|
|
856
938
|
'div',
|
|
857
939
|
{ className: 'tabs', role: 'tablist' },
|
|
858
|
-
(['memory', 'review', 'todos', 'skills'] as const).map((k) =>
|
|
940
|
+
(['memory', 'review', 'todos', 'skills', 'health'] as const).map((k) =>
|
|
859
941
|
React.createElement(
|
|
860
942
|
'button',
|
|
861
943
|
{
|
|
@@ -879,7 +961,9 @@ function MemoryView({ ctx }: { ctx: any }): React.ReactElement {
|
|
|
879
961
|
? React.createElement(ReviewQueueView, { ctx, onPendingChange: setPending })
|
|
880
962
|
: tab === 'todos'
|
|
881
963
|
? React.createElement(TodosView, { ctx })
|
|
882
|
-
:
|
|
964
|
+
: tab === 'health'
|
|
965
|
+
? React.createElement(HealthView, { ctx })
|
|
966
|
+
: React.createElement(SkillsView, { ctx }),
|
|
883
967
|
)
|
|
884
968
|
}
|
|
885
969
|
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* auto-memory.ts — opt-in automatic session/event → memory persistence.
|
|
3
|
+
* Ported from FuRongJun-1999/dsh-memory hooks.ts (memory hooks) but
|
|
4
|
+
* file-native (MaestroMemoryStore) and English-only.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { MaestroMemoryStore } from './memory/store.ts'
|
|
8
|
+
import { desensitize } from './memory/sanitize.ts'
|
|
9
|
+
|
|
10
|
+
export interface AutoMemoryOptions {
|
|
11
|
+
enabled: boolean
|
|
12
|
+
userMessage: boolean
|
|
13
|
+
assistantMessage: boolean
|
|
14
|
+
toolResult: boolean
|
|
15
|
+
importance: number
|
|
16
|
+
desensitize: boolean
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export const DEFAULT_AUTO_MEMORY: AutoMemoryOptions = {
|
|
20
|
+
enabled: false,
|
|
21
|
+
userMessage: true,
|
|
22
|
+
assistantMessage: false,
|
|
23
|
+
toolResult: false,
|
|
24
|
+
importance: 0.6,
|
|
25
|
+
desensitize: true,
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function extractText(blocks: any[]): string {
|
|
29
|
+
if (!Array.isArray(blocks)) return ''
|
|
30
|
+
const parts: string[] = []
|
|
31
|
+
for (const b of blocks) {
|
|
32
|
+
if (b && typeof b === 'object' && b.type === 'text' && typeof b.text === 'string') parts.push(b.text)
|
|
33
|
+
}
|
|
34
|
+
return parts.join('\n').trim()
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function sanitize(text: string, doDesensitize: boolean): string | null {
|
|
38
|
+
if (!doDesensitize) return text
|
|
39
|
+
return desensitize(text)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Install session/event hooks for auto-memory.
|
|
44
|
+
* Returns a disposer (ctx.on returns disposer in Cordis 4).
|
|
45
|
+
*/
|
|
46
|
+
export function installAutoMemoryHooks(ctx: any, store: MaestroMemoryStore, opts: AutoMemoryOptions): () => void {
|
|
47
|
+
if (!opts.enabled) return () => {}
|
|
48
|
+
|
|
49
|
+
const disposers: Array<() => void> = []
|
|
50
|
+
|
|
51
|
+
const onEvent = (_session: any, event: any) => {
|
|
52
|
+
try {
|
|
53
|
+
const cwd: string | undefined = _session?.header?.cwd ?? _session?.cwd ?? undefined
|
|
54
|
+
if (event?.type === 'user/message' && opts.userMessage) {
|
|
55
|
+
if (event?.data?.source?.kind !== undefined && event.data.source.kind !== 'user') return
|
|
56
|
+
const text = extractText(event?.data?.content ?? [])
|
|
57
|
+
if (!text) return
|
|
58
|
+
const safe = sanitize(text, opts.desensitize)
|
|
59
|
+
if (safe === null) return
|
|
60
|
+
// Prefer project track when cwd present, else daily
|
|
61
|
+
if (cwd) store.add('project', safe, cwd, { desensitize: false })
|
|
62
|
+
else store.add('daily', safe, undefined, { desensitize: false })
|
|
63
|
+
} else if (event?.type === 'assistant/message' && opts.assistantMessage) {
|
|
64
|
+
const text = extractText(event?.data?.message?.content ?? event?.data?.content ?? [])
|
|
65
|
+
if (!text) return
|
|
66
|
+
const safe = sanitize(text, opts.desensitize)
|
|
67
|
+
if (safe === null) return
|
|
68
|
+
if (cwd) store.add('project', safe, cwd, { desensitize: false })
|
|
69
|
+
else store.add('daily', safe, undefined, { desensitize: false })
|
|
70
|
+
} else if (event?.type === 'tool/result' && opts.toolResult) {
|
|
71
|
+
if (event?.data?.error) return
|
|
72
|
+
const text = extractText(event?.data?.message?.content ?? [])
|
|
73
|
+
if (!text) return
|
|
74
|
+
const safe = sanitize(text, opts.desensitize)
|
|
75
|
+
if (safe === null) return
|
|
76
|
+
if (cwd) store.add('project', safe, cwd, { desensitize: false })
|
|
77
|
+
else store.add('daily', safe, undefined, { desensitize: false })
|
|
78
|
+
}
|
|
79
|
+
} catch {
|
|
80
|
+
// auto-memory is best-effort, never throw
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// Cordis: ctx.on returns a disposer; wrap in effect-style
|
|
85
|
+
try {
|
|
86
|
+
const d = ctx.on('session/event', onEvent)
|
|
87
|
+
if (typeof d === 'function') disposers.push(d)
|
|
88
|
+
} catch {
|
|
89
|
+
// host without session service (tests) — no-op
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return () => {
|
|
93
|
+
for (const d of disposers) {
|
|
94
|
+
try { d() } catch {}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* health-score.ts — 5-dim scoring (S/R/J/C/Safety) per memory_score.md
|
|
3
|
+
* Composite = min*0.4 + mean*0.6, 0-10 scale.
|
|
4
|
+
* Heuristics are file-native and deterministic (no LLM).
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export interface FiveDim {
|
|
8
|
+
S: number
|
|
9
|
+
R: number
|
|
10
|
+
J: number
|
|
11
|
+
C: number
|
|
12
|
+
Safety: number
|
|
13
|
+
composite: number
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function clamp01(v: number): number {
|
|
17
|
+
return Math.max(0, Math.min(10, Math.round(v * 10) / 10))
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function computeFiveDim(opts: {
|
|
21
|
+
projectTotal: number
|
|
22
|
+
withSummary: number
|
|
23
|
+
dailyCounts: number[]
|
|
24
|
+
longestLen: number
|
|
25
|
+
hasAutoRecall: boolean
|
|
26
|
+
hasSanitize: boolean
|
|
27
|
+
hasGatedQueue: boolean
|
|
28
|
+
}): FiveDim {
|
|
29
|
+
const coverage = opts.projectTotal ? opts.withSummary / opts.projectTotal : 1
|
|
30
|
+
const dailyActive = opts.dailyCounts.filter((n) => n > 0).length
|
|
31
|
+
// S Storage: layered files (memory/user/project/key/daily) + daily activity + summary
|
|
32
|
+
const S = clamp01(6 + coverage * 1.5 + (dailyActive > 2 ? 0.5 : 0) + (opts.longestLen > 0 ? 0.5 : 0))
|
|
33
|
+
// R Retrieval: branch filter + recentDaily + autoRecall
|
|
34
|
+
const R = clamp01(5.5 + (opts.hasAutoRecall ? 1.5 : 0) + (dailyActive > 0 ? 0.5 : 0) + (coverage > 0.8 ? 0.5 : 0))
|
|
35
|
+
// J Judgment: dedupe + summary + gated queue + sanitize
|
|
36
|
+
const J = clamp01(5 + coverage + (opts.hasGatedQueue ? 1 : 0) + (opts.hasSanitize ? 0.8 : 0))
|
|
37
|
+
// C Context SNR: bounded caps + autoRecall + recentDaily + coverage
|
|
38
|
+
const C = clamp01(6 + (opts.hasAutoRecall ? 1 : 0) + (dailyActive > 0 ? 0.8 : 0) + coverage * 0.7)
|
|
39
|
+
// Safety: loopback + gated + desensitize
|
|
40
|
+
const Safety = clamp01(5.5 + (opts.hasSanitize ? 1.2 : 0) + (opts.hasGatedQueue ? 1 : 0) + (coverage > 0.5 ? 0.3 : 0))
|
|
41
|
+
|
|
42
|
+
const vals = [S, R, J, C, Safety]
|
|
43
|
+
const min = Math.min(...vals)
|
|
44
|
+
const mean = vals.reduce((a, b) => a + b, 0) / vals.length
|
|
45
|
+
const composite = clamp01(min * 0.4 + mean * 0.6)
|
|
46
|
+
return { S, R, J, C, Safety, composite }
|
|
47
|
+
}
|