dsh-prime-memory 0.20.0-beta.2 → 0.20.0-beta.21

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 (40) hide show
  1. package/CHANGELOG.md +192 -3
  2. package/ENGINEERING-NOTES.md +17 -0
  3. package/dist/client.js +1158 -405
  4. package/dist/config.d.ts +0 -120
  5. package/dist/config.js +1 -21
  6. package/dist/contract.d.ts +111 -56
  7. package/dist/hooks/recall.d.ts +4 -1
  8. package/dist/hooks/recall.js +7 -1
  9. package/dist/index.d.ts +0 -78
  10. package/dist/index.js +14 -21
  11. package/dist/metadata-validators.d.ts +5 -0
  12. package/dist/metadata-validators.js +11 -1
  13. package/dist/pipeline/recluster.js +1 -1
  14. package/dist/pipeline/ruminate.d.ts +11 -1
  15. package/dist/pipeline/ruminate.js +18 -1
  16. package/dist/room-review.d.ts +196 -0
  17. package/dist/room-review.js +281 -0
  18. package/dist/stats.d.ts +23 -34
  19. package/dist/stats.js +268 -201
  20. package/dist/store/l1.d.ts +34 -0
  21. package/dist/store/l1.js +68 -1
  22. package/dist/store/recall-usage.d.ts +43 -0
  23. package/dist/store/recall-usage.js +149 -0
  24. package/dist/store/rooms-registry.d.ts +66 -0
  25. package/dist/store/rooms-registry.js +250 -0
  26. package/dist/store/session-modes.d.ts +0 -8
  27. package/dist/store/session-modes.js +0 -52
  28. package/dist/store/sqlite.d.ts +4 -0
  29. package/dist/store/sqlite.js +20 -0
  30. package/dist/tools/index.d.ts +4 -1
  31. package/dist/tools/index.js +232 -1
  32. package/dist/types.d.ts +4 -0
  33. package/dsh.plugin.json +1 -1
  34. package/package.json +1 -1
  35. package/dist/hooks/long-task.d.ts +0 -31
  36. package/dist/hooks/long-task.js +0 -93
  37. package/dist/store/context-usage.d.ts +0 -28
  38. package/dist/store/context-usage.js +0 -47
  39. package/dist/store/todo-ref.d.ts +0 -41
  40. package/dist/store/todo-ref.js +0 -65
@@ -1,41 +0,0 @@
1
- /**
2
- * 会话 todo 参考快照(长任务模式 §todo 参考)。
3
- *
4
- * 数据源:宿主结构化事件 `todo/write`(全量快照 `{todos:[{content,status}]}`)。
5
- * 记录最近两次快照,词面 Jaccard 相似度给出"大幅漂移"信号(jieba 切词,回退
6
- * CJK 二元组 + ASCII 词)。漂移本身只是信号——是否注入参考由长任务开关决定。
7
- *
8
- * 纯内存 per-session Map:todo 快照是易变运行态,压缩/重启后由下一条
9
- * todo/write 自然重建;持久化只会让过期任务清单在重启后诈尸。
10
- */
11
- export interface TodoItemSnapshot {
12
- content: string;
13
- status: string;
14
- }
15
- export interface TodoRefEntry {
16
- /** 最近一次快照(渲染用)。 */
17
- items: TodoItemSnapshot[];
18
- /** 快照文本(注入与相似度用)。 */
19
- text: string;
20
- /** 上一次快照文本(漂移对照;首次记录为 undefined)。 */
21
- prevText: string | undefined;
22
- /** 与上次快照的漂移度 = 1 - Jaccard(首次 = 0;范围 [0,1])。 */
23
- drift: number;
24
- updatedAt: number;
25
- }
26
- /** 词面 token 集:jieba 优先,回退 CJK 二元组 + ASCII 词。 */
27
- export declare function todoTokens(text: string): Set<string>;
28
- /** 词面 Jaccard 相似度([0,1];两个空集视为完全相似 1)。 */
29
- export declare function jaccard(a: Set<string>, b: Set<string>): number;
30
- export declare function renderTodoText(items: TodoItemSnapshot[]): string;
31
- export declare class TodoRefStore {
32
- private readonly entries;
33
- /**
34
- * 记录一次全量快照,返回本次漂移度。与上一快照完全相同(哈希相等)时
35
- * 不视为新快照:drift 归 0、updatedAt 刷新、prev 链不动——连续多次
36
- * todo/write(勾选进度除外)不应自我稀释漂移信号。
37
- */
38
- record(sessionId: string, items: TodoItemSnapshot[]): TodoRefEntry;
39
- latest(sessionId: string): TodoRefEntry | undefined;
40
- clear(sessionId: string): void;
41
- }
@@ -1,65 +0,0 @@
1
- /** 词面 token 集:jieba 优先,回退 CJK 二元组 + ASCII 词。 */
2
- export function todoTokens(text) {
3
- const out = new Set();
4
- const ascii = text.match(/[A-Za-z0-9_./-]+/g);
5
- for (const w of ascii ?? [])
6
- out.add(w.toLowerCase());
7
- const cjk = text.match(/[\u4e00-\u9fff\u3040-\u30ff\uac00-\ud7af]+/g) ?? [];
8
- for (const run of cjk) {
9
- if (run.length === 1) {
10
- out.add(run);
11
- continue;
12
- }
13
- for (let i = 0; i < run.length - 1; i++)
14
- out.add(run.slice(i, i + 2));
15
- }
16
- return out;
17
- }
18
- /** 词面 Jaccard 相似度([0,1];两个空集视为完全相似 1)。 */
19
- export function jaccard(a, b) {
20
- if (a.size === 0 && b.size === 0)
21
- return 1;
22
- if (a.size === 0 || b.size === 0)
23
- return 0;
24
- let inter = 0;
25
- for (const t of a)
26
- if (b.has(t))
27
- inter++;
28
- return inter / (a.size + b.size - inter);
29
- }
30
- export function renderTodoText(items) {
31
- return items.map((t) => `- [${t.status === 'completed' ? 'x' : t.status === 'in_progress' ? '~' : ' '}] ${t.content}`).join('\n');
32
- }
33
- export class TodoRefStore {
34
- entries = new Map();
35
- /**
36
- * 记录一次全量快照,返回本次漂移度。与上一快照完全相同(哈希相等)时
37
- * 不视为新快照:drift 归 0、updatedAt 刷新、prev 链不动——连续多次
38
- * todo/write(勾选进度除外)不应自我稀释漂移信号。
39
- */
40
- record(sessionId, items) {
41
- const text = renderTodoText(items);
42
- const prev = this.entries.get(sessionId);
43
- if (prev && prev.text === text) {
44
- prev.updatedAt = Date.now();
45
- prev.drift = 0;
46
- return prev;
47
- }
48
- const sim = prev ? jaccard(todoTokens(prev.text), todoTokens(text)) : 1;
49
- const entry = {
50
- items,
51
- text,
52
- prevText: prev?.text,
53
- drift: prev ? Math.round((1 - sim) * 1000) / 1000 : 0,
54
- updatedAt: Date.now(),
55
- };
56
- this.entries.set(sessionId, entry);
57
- return entry;
58
- }
59
- latest(sessionId) {
60
- return this.entries.get(sessionId);
61
- }
62
- clear(sessionId) {
63
- this.entries.delete(sessionId);
64
- }
65
- }