@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.
Files changed (45) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +39 -397
  3. package/lib/auto-memory.d.ts +21 -0
  4. package/lib/auto-memory.d.ts.map +1 -0
  5. package/lib/auto-memory.js +105 -0
  6. package/lib/auto-memory.js.map +1 -0
  7. package/lib/client.js +57 -2
  8. package/lib/health-score.d.ts +23 -0
  9. package/lib/health-score.d.ts.map +1 -0
  10. package/lib/health-score.js +28 -0
  11. package/lib/health-score.js.map +1 -0
  12. package/lib/index.d.ts +4 -0
  13. package/lib/index.d.ts.map +1 -1
  14. package/lib/index.js +123 -0
  15. package/lib/index.js.map +1 -1
  16. package/lib/memory/sanitize.d.ts +25 -0
  17. package/lib/memory/sanitize.d.ts.map +1 -0
  18. package/lib/memory/sanitize.js +44 -0
  19. package/lib/memory/sanitize.js.map +1 -0
  20. package/lib/memory/store.d.ts +4 -1
  21. package/lib/memory/store.d.ts.map +1 -1
  22. package/lib/memory/store.js +73 -11
  23. package/lib/memory/store.js.map +1 -1
  24. package/lib/prompt/snapshot.d.ts +6 -3
  25. package/lib/prompt/snapshot.d.ts.map +1 -1
  26. package/lib/prompt/snapshot.js +42 -5
  27. package/lib/prompt/snapshot.js.map +1 -1
  28. package/lib/skills-browser.d.ts.map +1 -1
  29. package/lib/skills-browser.js +4 -2
  30. package/lib/skills-browser.js.map +1 -1
  31. package/lib/storage/layout.d.ts +3 -0
  32. package/lib/storage/layout.d.ts.map +1 -1
  33. package/lib/storage/layout.js +11 -0
  34. package/lib/storage/layout.js.map +1 -1
  35. package/lib/types/client/index.d.ts.map +1 -1
  36. package/package.json +2 -1
  37. package/src/client/index.tsx +87 -3
  38. package/src/host/auto-memory.ts +97 -0
  39. package/src/host/health-score.ts +47 -0
  40. package/src/host/index.ts +111 -1
  41. package/src/host/memory/sanitize.ts +43 -0
  42. package/src/host/memory/store.ts +64 -10
  43. package/src/host/prompt/snapshot.ts +38 -5
  44. package/src/host/skills-browser.ts +5 -3
  45. package/src/host/storage/layout.ts +10 -0
@@ -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 từ README § System Prompt Snapshot:
37
+ * Bounded snapshot renderer — contract from README § System Prompt Snapshot:
38
38
  * Header (sessionId/sessionName) + USER + global MEMORY + current-project KEY
39
- * (branch-filtered) + end-of-turn discipline note.
40
- * daily project KHÔNG inject.
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":"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"}
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;AAKH,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,CAS9D"}
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"}
@@ -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
- '/home/kai/Work/htdocs/maestro-harness/maestro-skills/skills',
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":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACpF,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAiBnD;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa,EAAE,MAAc;IAC3D,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;IACpC,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACtC,IAAI,aAAa,KAAK,cAAc;QAAE,OAAO,IAAI,CAAA;IACjD,MAAM,GAAG,GAAG,QAAQ,CAAC,cAAc,EAAE,aAAa,CAAC,CAAA;IACnD,gEAAgE;IAChE,OAAO,GAAG,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;AACpE,CAAC;AAED,SAAS,gBAAgB,CAAC,UAAkB;IAC1C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;IAC5E,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;IAC7C,IAAI,MAAM,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;IAC5D,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACzD,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IAChD,MAAM,QAAQ,GAA2B,EAAE,CAAA;IAC3C,IAAI,QAA4B,CAAA;IAChC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;QAC3C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;gBACnB,QAAQ,GAAG,SAAS,CAAA;gBACpB,SAAQ;YACV,CAAC;YACD,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;gBACf,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;gBACrF,SAAQ;YACV,CAAC;YACD,QAAQ,GAAG,SAAS,CAAA;QACtB,CAAC;QACD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACrC,IAAI,QAAQ,IAAI,CAAC;YAAE,SAAQ;QAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAA;QAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAC9C,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;YAClB,QAAQ,GAAG,GAAG,CAAA;YACd,SAAQ;QACV,CAAC;QACD,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IACnF,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;AAC3B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,MAAM,GAAG,QAAQ;IACjE,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,CAAA;IACzB,IAAI,OAAO,GAAa,EAAE,CAAA;IAC1B,IAAI,CAAC;QACH,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,CAAA;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;IACD,MAAM,GAAG,GAAuB,EAAE,CAAA;IAClC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QAC1C,IAAI,EAAE,GAAQ,IAAI,CAAA;QAClB,IAAI,CAAC;YACH,EAAE,GAAG,SAAS,CAAC,WAAW,CAAC,CAAA;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,SAAQ;QACV,CAAC;QACD,0CAA0C;QAC1C,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,cAAc,EAAE,CAAA;QACrD,IAAI,CAAC,KAAK;YAAE,SAAQ;QACpB,4CAA4C;QAC5C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAA;YACpC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;gBAAE,SAAQ;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,SAAQ;QACV,CAAC;QACD,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;QACnD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA;YACtC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;gBAAE,SAAQ;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,SAAQ;QACV,CAAC;QACD,IAAI,UAAU,GAAG,EAAE,CAAA;QACnB,IAAI,CAAC;YACH,UAAU,GAAG,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,SAAQ;QACV,CAAC;QACD,MAAM,EAAE,QAAQ,EAAE,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAA;QACjD,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,IAAI,KAAK,CAAA;QACxC,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,IAAI,aAAa,SAAS,EAAE,CAAA;QACpE,GAAG,CAAC,IAAI,CAAC;YACP,IAAI,EAAE,SAAS;YACf,WAAW;YACX,MAAM;YACN,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,aAAa;YACtB,QAAQ;SACT,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAuB,EAAE;IACxD,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,MAAM,GAAG,GAAuB,EAAE,CAAA;QAClC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;YAC/C,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAA;QACtB,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,OAAO,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,CAAA;IAChE,CAAC;IACD,gFAAgF;IAChF,OAAO,EAAE,CAAA;AACX,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,8BAA8B;IAC5C,MAAM,UAAU,GAAa;QAC3B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC,IAAI;QACzG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,0BAA0B,CAAC;QAC/C,IAAI,CAAC,OAAO,EAAE,EAAE,mDAAmD,CAAC;KACrE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;IACxC,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAA;IAC7B,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -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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"}
@@ -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;AA82BlE,wBAAgB,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CA4GpC"}
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.1",
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",
@@ -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
- : React.createElement(SkillsView, { ctx }),
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
+ }