dsh-prime-memory 0.11.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 (151) hide show
  1. package/CHANGELOG.en.md +28 -0
  2. package/CHANGELOG.ja.md +30 -0
  3. package/CHANGELOG.ko.md +30 -0
  4. package/CHANGELOG.md +1220 -0
  5. package/ENGINEERING-NOTES.md +452 -0
  6. package/INSTALL.en.md +92 -0
  7. package/INSTALL.ja.md +92 -0
  8. package/INSTALL.ko.md +92 -0
  9. package/INSTALL.md +92 -0
  10. package/LICENSE +21 -0
  11. package/README.en.md +458 -0
  12. package/README.ja.md +306 -0
  13. package/README.ko.md +306 -0
  14. package/README.md +425 -0
  15. package/assets/changelog/0.8.10/01-write-only-pill.png +0 -0
  16. package/assets/changelog/0.8.9/01-panel.png +0 -0
  17. package/assets/changelog/0.8.9/02-halo.png +0 -0
  18. package/assets/changelog/0.8.9/03-layer-segmented-panel.png +0 -0
  19. package/assets/changelog/0.8.9/04-layer-l1-panel.png +0 -0
  20. package/assets/img/EmbeddingSource.png +0 -0
  21. package/assets/img/Hero.png +0 -0
  22. package/assets/img/Layers.png +0 -0
  23. package/assets/img/MemoryTools.png +0 -0
  24. package/assets/img/Modes.png +0 -0
  25. package/assets/img/ToolTrajectory.png +0 -0
  26. package/assets/img/ui-dark.jpg +0 -0
  27. package/assets/img/ui-light.jpg +0 -0
  28. package/assets/readme/bench-dialog.svg +70 -0
  29. package/assets/readme/bench-workflow.svg +79 -0
  30. package/assets/readme/flow.svg +189 -0
  31. package/assets/readme/storage.svg +115 -0
  32. package/cordis.patch.yml +16 -0
  33. package/dist/bench-control.d.ts +34 -0
  34. package/dist/bench-control.js +16 -0
  35. package/dist/client.js +4293 -0
  36. package/dist/config.d.ts +683 -0
  37. package/dist/config.js +129 -0
  38. package/dist/contract.d.ts +820 -0
  39. package/dist/contract.js +1 -0
  40. package/dist/embedding-worker.cjs +176 -0
  41. package/dist/graph/apply.d.ts +37 -0
  42. package/dist/graph/apply.js +270 -0
  43. package/dist/graph/constraints.d.ts +47 -0
  44. package/dist/graph/constraints.js +38 -0
  45. package/dist/graph/search.d.ts +16 -0
  46. package/dist/graph/search.js +115 -0
  47. package/dist/graph/types.d.ts +142 -0
  48. package/dist/graph/types.js +14 -0
  49. package/dist/hooks/capture.d.ts +32 -0
  50. package/dist/hooks/capture.js +194 -0
  51. package/dist/hooks/recall.d.ts +63 -0
  52. package/dist/hooks/recall.js +429 -0
  53. package/dist/index.d.ts +534 -0
  54. package/dist/index.js +344 -0
  55. package/dist/llm-usage.d.ts +26 -0
  56. package/dist/llm-usage.js +37 -0
  57. package/dist/llm.d.ts +153 -0
  58. package/dist/llm.js +530 -0
  59. package/dist/pipeline/graph.d.ts +35 -0
  60. package/dist/pipeline/graph.js +104 -0
  61. package/dist/pipeline/l1.d.ts +19 -0
  62. package/dist/pipeline/l1.js +271 -0
  63. package/dist/pipeline/l2.d.ts +13 -0
  64. package/dist/pipeline/l2.js +83 -0
  65. package/dist/pipeline/l3.d.ts +15 -0
  66. package/dist/pipeline/l3.js +78 -0
  67. package/dist/pipeline/rebuild.d.ts +61 -0
  68. package/dist/pipeline/rebuild.js +307 -0
  69. package/dist/pipeline/ruminate.d.ts +89 -0
  70. package/dist/pipeline/ruminate.js +298 -0
  71. package/dist/pipeline/runner.d.ts +167 -0
  72. package/dist/pipeline/runner.js +638 -0
  73. package/dist/pipeline/trigger.d.ts +40 -0
  74. package/dist/pipeline/trigger.js +75 -0
  75. package/dist/prompts/graph-projection.d.ts +70 -0
  76. package/dist/prompts/graph-projection.js +167 -0
  77. package/dist/prompts/l1-dedup.d.ts +22 -0
  78. package/dist/prompts/l1-dedup.js +251 -0
  79. package/dist/prompts/l1-extraction.d.ts +22 -0
  80. package/dist/prompts/l1-extraction.js +457 -0
  81. package/dist/prompts/persona.d.ts +23 -0
  82. package/dist/prompts/persona.js +240 -0
  83. package/dist/prompts/scene.d.ts +32 -0
  84. package/dist/prompts/scene.js +414 -0
  85. package/dist/runtime-package-lock.json +982 -0
  86. package/dist/settings.d.ts +50 -0
  87. package/dist/settings.js +355 -0
  88. package/dist/stats.d.ts +109 -0
  89. package/dist/stats.js +929 -0
  90. package/dist/store/bm25.d.ts +19 -0
  91. package/dist/store/bm25.js +63 -0
  92. package/dist/store/cost-ledger.d.ts +75 -0
  93. package/dist/store/cost-ledger.js +171 -0
  94. package/dist/store/download-queue.d.ts +79 -0
  95. package/dist/store/download-queue.js +424 -0
  96. package/dist/store/embedding-source.d.ts +118 -0
  97. package/dist/store/embedding-source.js +443 -0
  98. package/dist/store/embedding.d.ts +90 -0
  99. package/dist/store/embedding.js +206 -0
  100. package/dist/store/graph-store.d.ts +94 -0
  101. package/dist/store/graph-store.js +641 -0
  102. package/dist/store/l0.d.ts +40 -0
  103. package/dist/store/l0.js +197 -0
  104. package/dist/store/l1.d.ts +93 -0
  105. package/dist/store/l1.js +297 -0
  106. package/dist/store/local-embedding.d.ts +89 -0
  107. package/dist/store/local-embedding.js +227 -0
  108. package/dist/store/model-catalog.d.ts +48 -0
  109. package/dist/store/model-catalog.js +81 -0
  110. package/dist/store/occupancy.d.ts +30 -0
  111. package/dist/store/occupancy.js +134 -0
  112. package/dist/store/pending.d.ts +36 -0
  113. package/dist/store/pending.js +103 -0
  114. package/dist/store/persona.d.ts +15 -0
  115. package/dist/store/persona.js +60 -0
  116. package/dist/store/recall-dedupe.d.ts +26 -0
  117. package/dist/store/recall-dedupe.js +138 -0
  118. package/dist/store/runtime-installer.d.ts +59 -0
  119. package/dist/store/runtime-installer.js +243 -0
  120. package/dist/store/scenes.d.ts +24 -0
  121. package/dist/store/scenes.js +160 -0
  122. package/dist/store/search-utils.d.ts +38 -0
  123. package/dist/store/search-utils.js +100 -0
  124. package/dist/store/session-modes.d.ts +35 -0
  125. package/dist/store/session-modes.js +144 -0
  126. package/dist/store/sqlite.d.ts +246 -0
  127. package/dist/store/sqlite.js +1491 -0
  128. package/dist/store/state.d.ts +41 -0
  129. package/dist/store/state.js +72 -0
  130. package/dist/token-cost.d.ts +23 -0
  131. package/dist/token-cost.js +185 -0
  132. package/dist/tools/index.d.ts +34 -0
  133. package/dist/tools/index.js +758 -0
  134. package/dist/types.d.ts +139 -0
  135. package/dist/types.js +38 -0
  136. package/dist/util/context-occupancy.d.ts +68 -0
  137. package/dist/util/context-occupancy.js +92 -0
  138. package/dist/util/filelog.d.ts +6 -0
  139. package/dist/util/filelog.js +108 -0
  140. package/dist/util/io.d.ts +18 -0
  141. package/dist/util/io.js +97 -0
  142. package/dist/util/recall-budget.d.ts +31 -0
  143. package/dist/util/recall-budget.js +84 -0
  144. package/dist/util/sanitize.d.ts +11 -0
  145. package/dist/util/sanitize.js +67 -0
  146. package/dist/util/text.d.ts +16 -0
  147. package/dist/util/text.js +61 -0
  148. package/dist/util/tokenizer.d.ts +9 -0
  149. package/dist/util/tokenizer.js +50 -0
  150. package/dsh.plugin.json +22 -0
  151. package/package.json +118 -0
package/dist/config.js ADDED
@@ -0,0 +1,129 @@
1
+ /**
2
+ * 插件配置:Schemastery schema + 类型。
3
+ *
4
+ * 默认数据目录:$DSH_HOME/memory(用官方 dshHomePath 解析,DSH_HOME 缺省 ~/.dsh)。
5
+ * 键名/默认值/取值范围是部署面契约(patch.yml 按"整行替换,不深合并"覆盖),不可更名。
6
+ */
7
+ import Schema from '@deepseek-ai/schemastery';
8
+ import { dshHomePath } from '@deepseek-ai/dsh-home-paths';
9
+ import { HALL_DEFAULT_ENABLED } from './types.js';
10
+ /**
11
+ * 蒸馏思考档位全词汇表(唯一事实源):'' = 自动(模型默认档 → high),
12
+ * 其余为各适配器通用档位词汇(deepseek 认 'off',OpenAI 系是 'none')。
13
+ * schema(config/settings)、运行时解析与 RPC 写入门共用,勿在别处再抄字面量表。
14
+ */
15
+ export const EFFORT_CHOICES = ['', 'off', 'none', 'minimal', 'low', 'medium', 'high', 'xhigh', 'max'];
16
+ export const memorySchema = Schema.object({
17
+ dataDir: Schema.string().default(''),
18
+ family: Schema.union(['auto', 'chat', 'work']).default('auto'),
19
+ capture: Schema.object({
20
+ enabled: Schema.boolean().default(true),
21
+ stripCodeBlocks: Schema.boolean().default(true),
22
+ maxMessageChars: Schema.number().min(200).max(200_000).default(4000),
23
+ }),
24
+ extract: Schema.object({
25
+ enabled: Schema.boolean().default(true),
26
+ minMessages: Schema.number().min(1).max(100).default(6),
27
+ idleSeconds: Schema.number().min(0).max(86_400).default(300),
28
+ backgroundMessages: Schema.number().min(0).max(50).default(10),
29
+ candidatePool: Schema.number().min(1).max(20).default(5),
30
+ }),
31
+ l2: Schema.object({
32
+ enabled: Schema.boolean().default(true),
33
+ minNewMemories: Schema.number().min(1).max(100).default(5),
34
+ maxScenes: Schema.number().min(1).max(100).default(12),
35
+ sceneContextLimit: Schema.number().min(0).max(20).default(3),
36
+ }),
37
+ l3: Schema.object({
38
+ enabled: Schema.boolean().default(true),
39
+ interval: Schema.number().min(1).max(200).default(20),
40
+ }),
41
+ // 知识图谱投影:默认关(新功能默认关,用户显式开启;开启后受运行时蒸馏门约束)
42
+ graph: Schema.object({
43
+ enabled: Schema.boolean().default(false),
44
+ }),
45
+ recall: Schema.object({
46
+ enabled: Schema.boolean().default(true),
47
+ maxResults: Schema.number().min(1).max(20).default(5),
48
+ // 截断是引流——工具路径返回全文(注入形态契约见 ADR-0001)
49
+ maxCharsPerMemory: Schema.number().min(0).max(100_000).default(500),
50
+ maxTotalRecallChars: Schema.number().min(0).max(100_000).default(2000),
51
+ timeoutMs: Schema.number().min(0).max(60_000).default(5000),
52
+ includePersona: Schema.boolean().default(true),
53
+ includeSceneNav: Schema.boolean().default(true),
54
+ strategy: Schema.union(['keyword', 'embedding', 'hybrid']).default('hybrid'),
55
+ scoreThreshold: Schema.number().min(0).max(1).default(0.3),
56
+ // 时效衰减:乘法软加权 + 地板 0.5;0=关(bench 基线可比性可 pin 0)
57
+ decayHalfLifeDays: Schema.number().min(0).max(3650).default(30),
58
+ }),
59
+ embedding: Schema.object({
60
+ enabled: Schema.boolean().default(false),
61
+ baseUrl: Schema.string().default(''),
62
+ apiKey: Schema.string().default(''),
63
+ model: Schema.string().default(''),
64
+ // 0 = 纯 FTS 模式(合法值,勿设 min>0)
65
+ dimensions: Schema.number().min(0).max(8192).default(0),
66
+ maxInputChars: Schema.number().min(100).max(100_000).default(5000),
67
+ timeoutMs: Schema.number().min(1000).max(300_000).default(10_000),
68
+ allowLocalModels: Schema.boolean().default(true),
69
+ mirror: Schema.string().default('https://hf-mirror.com'),
70
+ proxy: Schema.string().default(''),
71
+ }),
72
+ llm: Schema.object({
73
+ provider: Schema.string().default(''),
74
+ model: Schema.string().default(''),
75
+ // 压缩通道:'host' 复用宿主(默认);'direct' 插件原生直连,失败回退宿主路由
76
+ mode: Schema.union(['host', 'direct']).default('host'),
77
+ baseURL: Schema.string().default(''),
78
+ apiKey: Schema.string().default(''),
79
+ // 回退链:每条路由各享全额 timeoutMs(慢 TTFT 模型的回退位要留足首包时间);
80
+ // 条目档位经能力钳制后发送
81
+ fallbacks: Schema.array(Schema.object({
82
+ provider: Schema.string().default(''),
83
+ model: Schema.string().default(''),
84
+ reasoningEffort: Schema.union([...EFFORT_CHOICES]).default(''),
85
+ })).default([]),
86
+ // 按层静态路由链:每层一条完整链(头行须双显式——启动侧只做形状默认,
87
+ // 语义校验在解析侧防御 + 设置页写入门;空数组 = 该层跟随全局)
88
+ layerRoutes: Schema.object({
89
+ l1: Schema.array(Schema.object({
90
+ provider: Schema.string().default(''),
91
+ model: Schema.string().default(''),
92
+ reasoningEffort: Schema.union([...EFFORT_CHOICES]).default(''),
93
+ })).default([]),
94
+ l2: Schema.array(Schema.object({
95
+ provider: Schema.string().default(''),
96
+ model: Schema.string().default(''),
97
+ reasoningEffort: Schema.union([...EFFORT_CHOICES]).default(''),
98
+ })).default([]),
99
+ l3: Schema.array(Schema.object({
100
+ provider: Schema.string().default(''),
101
+ model: Schema.string().default(''),
102
+ reasoningEffort: Schema.union([...EFFORT_CHOICES]).default(''),
103
+ })).default([]),
104
+ }).default({ l1: [], l2: [], l3: [] }),
105
+ // 推理模型的 reasoning 计入输出预算:各蒸馏层显式传分层预算,本值为未分层调用的兜底总闸
106
+ maxTokens: Schema.number().min(1024).max(1_000_000).default(65_536),
107
+ // 蒸馏思考档位:'' = 自动(按模型能力解析);显式值仅在该模型声明支持时发送。
108
+ // 旧默认 'off' 在非 deepseek 模型上必炸(400/本地拒绝)
109
+ reasoningEffort: Schema.union([...EFFORT_CHOICES]).default(''),
110
+ temperature: Schema.number().min(0).max(2).default(0.3),
111
+ // 模型上下文 1M token,日常压到 ~700k 使用(中文按 1 字≈1 token 保守折算)
112
+ maxInputChars: Schema.number().min(1000).max(1_000_000).default(700_000),
113
+ timeoutMs: Schema.number().min(1000).max(600_000).default(120_000),
114
+ }),
115
+ hall: Schema.object({
116
+ enabled: Schema.array(Schema.string()).default([...HALL_DEFAULT_ENABLED]),
117
+ }),
118
+ // token_cost 明细保留期(写入时滚动清理;0 = 永久保留)。成本看板「近 N 天」窗口上限同源
119
+ tokenCost: Schema.object({
120
+ retentionDays: Schema.number().min(0).max(3650).default(365),
121
+ }),
122
+ tools: Schema.boolean().default(true),
123
+ benchControl: Schema.boolean().default(false),
124
+ });
125
+ export function resolveDataDir(cfg) {
126
+ if (cfg.dataDir)
127
+ return cfg.dataDir;
128
+ return dshHomePath('memory');
129
+ }