@tachu/extensions 1.0.0-beta.1 → 1.0.0-rc.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.
Files changed (243) hide show
  1. package/CHANGELOG.md +48 -65
  2. package/README.md +83 -708
  3. package/README_ZH.md +82 -696
  4. package/dist/backends/file.d.ts +6 -6
  5. package/dist/backends/file.d.ts.map +1 -1
  6. package/dist/backends/file.js +27 -11
  7. package/dist/backends/file.js.map +1 -1
  8. package/dist/backends/terminal.d.ts +6 -6
  9. package/dist/backends/terminal.d.ts.map +1 -1
  10. package/dist/backends/terminal.js +31 -7
  11. package/dist/backends/terminal.js.map +1 -1
  12. package/dist/backends/web.d.ts +6 -6
  13. package/dist/backends/web.d.ts.map +1 -1
  14. package/dist/backends/web.js +10 -8
  15. package/dist/backends/web.js.map +1 -1
  16. package/dist/common/net.d.ts +8 -0
  17. package/dist/common/net.d.ts.map +1 -1
  18. package/dist/common/net.js +39 -24
  19. package/dist/common/net.js.map +1 -1
  20. package/dist/common/path.d.ts +38 -5
  21. package/dist/common/path.d.ts.map +1 -1
  22. package/dist/common/path.js +55 -13
  23. package/dist/common/path.js.map +1 -1
  24. package/dist/common/process.js.map +1 -1
  25. package/dist/index.d.ts +7 -3
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +7 -3
  28. package/dist/index.js.map +1 -1
  29. package/dist/mcp/sse-adapter.d.ts +45 -33
  30. package/dist/mcp/sse-adapter.d.ts.map +1 -1
  31. package/dist/mcp/sse-adapter.js +59 -34
  32. package/dist/mcp/sse-adapter.js.map +1 -1
  33. package/dist/mcp/stdio-adapter.d.ts +45 -33
  34. package/dist/mcp/stdio-adapter.d.ts.map +1 -1
  35. package/dist/mcp/stdio-adapter.js +59 -34
  36. package/dist/mcp/stdio-adapter.js.map +1 -1
  37. package/dist/memory/fs-memory-system.d.ts +288 -0
  38. package/dist/memory/fs-memory-system.d.ts.map +1 -0
  39. package/dist/memory/fs-memory-system.js +482 -0
  40. package/dist/memory/fs-memory-system.js.map +1 -0
  41. package/dist/memory/index.d.ts +5 -0
  42. package/dist/memory/index.d.ts.map +1 -0
  43. package/dist/memory/index.js +5 -0
  44. package/dist/memory/index.js.map +1 -0
  45. package/dist/memory/projection-outbox.d.ts +69 -0
  46. package/dist/memory/projection-outbox.d.ts.map +1 -0
  47. package/dist/memory/projection-outbox.js +187 -0
  48. package/dist/memory/projection-outbox.js.map +1 -0
  49. package/dist/memory/projection-projector.d.ts +16 -0
  50. package/dist/memory/projection-projector.d.ts.map +1 -0
  51. package/dist/memory/projection-projector.js +56 -0
  52. package/dist/memory/projection-projector.js.map +1 -0
  53. package/dist/memory/projection-worker.d.ts +28 -0
  54. package/dist/memory/projection-worker.d.ts.map +1 -0
  55. package/dist/memory/projection-worker.js +84 -0
  56. package/dist/memory/projection-worker.js.map +1 -0
  57. package/dist/observability/jsonl-emitter.d.ts +25 -25
  58. package/dist/observability/jsonl-emitter.d.ts.map +1 -1
  59. package/dist/observability/jsonl-emitter.js +25 -25
  60. package/dist/observability/jsonl-emitter.js.map +1 -1
  61. package/dist/observability/otel-emitter.d.ts +23 -23
  62. package/dist/observability/otel-emitter.d.ts.map +1 -1
  63. package/dist/observability/otel-emitter.js +39 -30
  64. package/dist/observability/otel-emitter.js.map +1 -1
  65. package/dist/providers/anthropic.d.ts +51 -32
  66. package/dist/providers/anthropic.d.ts.map +1 -1
  67. package/dist/providers/anthropic.js +293 -58
  68. package/dist/providers/anthropic.js.map +1 -1
  69. package/dist/providers/gemini.d.ts +115 -0
  70. package/dist/providers/gemini.d.ts.map +1 -0
  71. package/dist/providers/gemini.js +901 -0
  72. package/dist/providers/gemini.js.map +1 -0
  73. package/dist/providers/index.d.ts +2 -0
  74. package/dist/providers/index.d.ts.map +1 -1
  75. package/dist/providers/index.js +2 -0
  76. package/dist/providers/index.js.map +1 -1
  77. package/dist/providers/mock.d.ts +67 -24
  78. package/dist/providers/mock.d.ts.map +1 -1
  79. package/dist/providers/mock.js +122 -41
  80. package/dist/providers/mock.js.map +1 -1
  81. package/dist/providers/openai.d.ts +70 -35
  82. package/dist/providers/openai.d.ts.map +1 -1
  83. package/dist/providers/openai.js +330 -50
  84. package/dist/providers/openai.js.map +1 -1
  85. package/dist/providers/qwen.d.ts +146 -0
  86. package/dist/providers/qwen.d.ts.map +1 -0
  87. package/dist/providers/qwen.js +672 -0
  88. package/dist/providers/qwen.js.map +1 -0
  89. package/dist/safety/default-gate.d.ts +112 -0
  90. package/dist/safety/default-gate.d.ts.map +1 -0
  91. package/dist/safety/default-gate.js +188 -0
  92. package/dist/safety/default-gate.js.map +1 -0
  93. package/dist/safety/index.d.ts +2 -0
  94. package/dist/safety/index.d.ts.map +1 -0
  95. package/dist/safety/index.js +2 -0
  96. package/dist/safety/index.js.map +1 -0
  97. package/dist/tools/_shared/web-client.d.ts +18 -0
  98. package/dist/tools/_shared/web-client.d.ts.map +1 -0
  99. package/dist/tools/_shared/web-client.js +46 -0
  100. package/dist/tools/_shared/web-client.js.map +1 -0
  101. package/dist/tools/apply-patch/executor.d.ts.map +1 -1
  102. package/dist/tools/apply-patch/executor.js +54 -4
  103. package/dist/tools/apply-patch/executor.js.map +1 -1
  104. package/dist/tools/edit-file/executor.d.ts +32 -0
  105. package/dist/tools/edit-file/executor.d.ts.map +1 -0
  106. package/dist/tools/edit-file/executor.js +84 -0
  107. package/dist/tools/edit-file/executor.js.map +1 -0
  108. package/dist/tools/fetch-url/descriptor.md +6 -0
  109. package/dist/tools/fetch-url/executor.d.ts +8 -0
  110. package/dist/tools/fetch-url/executor.d.ts.map +1 -1
  111. package/dist/tools/fetch-url/executor.js +83 -2
  112. package/dist/tools/fetch-url/executor.js.map +1 -1
  113. package/dist/tools/git-blame/executor.d.ts +24 -0
  114. package/dist/tools/git-blame/executor.d.ts.map +1 -0
  115. package/dist/tools/git-blame/executor.js +76 -0
  116. package/dist/tools/git-blame/executor.js.map +1 -0
  117. package/dist/tools/git-branch/executor.d.ts +22 -0
  118. package/dist/tools/git-branch/executor.d.ts.map +1 -0
  119. package/dist/tools/git-branch/executor.js +81 -0
  120. package/dist/tools/git-branch/executor.js.map +1 -0
  121. package/dist/tools/git-diff/executor.d.ts +37 -0
  122. package/dist/tools/git-diff/executor.d.ts.map +1 -0
  123. package/dist/tools/git-diff/executor.js +156 -0
  124. package/dist/tools/git-diff/executor.js.map +1 -0
  125. package/dist/tools/git-log/executor.d.ts +31 -0
  126. package/dist/tools/git-log/executor.d.ts.map +1 -0
  127. package/dist/tools/git-log/executor.js +65 -0
  128. package/dist/tools/git-log/executor.js.map +1 -0
  129. package/dist/tools/git-show/executor.d.ts +22 -0
  130. package/dist/tools/git-show/executor.d.ts.map +1 -0
  131. package/dist/tools/git-show/executor.js +74 -0
  132. package/dist/tools/git-show/executor.js.map +1 -0
  133. package/dist/tools/git-status/executor.d.ts +25 -0
  134. package/dist/tools/git-status/executor.d.ts.map +1 -0
  135. package/dist/tools/git-status/executor.js +120 -0
  136. package/dist/tools/git-status/executor.js.map +1 -0
  137. package/dist/tools/glob/executor.d.ts +18 -0
  138. package/dist/tools/glob/executor.d.ts.map +1 -0
  139. package/dist/tools/glob/executor.js +47 -0
  140. package/dist/tools/glob/executor.js.map +1 -0
  141. package/dist/tools/index.d.ts +1 -1
  142. package/dist/tools/index.d.ts.map +1 -1
  143. package/dist/tools/index.js +459 -4
  144. package/dist/tools/index.js.map +1 -1
  145. package/dist/tools/list-dir/executor.d.ts.map +1 -1
  146. package/dist/tools/list-dir/executor.js +5 -3
  147. package/dist/tools/list-dir/executor.js.map +1 -1
  148. package/dist/tools/multi-edit/executor.d.ts +29 -0
  149. package/dist/tools/multi-edit/executor.d.ts.map +1 -0
  150. package/dist/tools/multi-edit/executor.js +37 -0
  151. package/dist/tools/multi-edit/executor.js.map +1 -0
  152. package/dist/tools/read-file/executor.d.ts +5 -0
  153. package/dist/tools/read-file/executor.d.ts.map +1 -1
  154. package/dist/tools/read-file/executor.js +49 -5
  155. package/dist/tools/read-file/executor.js.map +1 -1
  156. package/dist/tools/run-shell/executor.d.ts +12 -1
  157. package/dist/tools/run-shell/executor.d.ts.map +1 -1
  158. package/dist/tools/run-shell/executor.js +105 -9
  159. package/dist/tools/run-shell/executor.js.map +1 -1
  160. package/dist/tools/run-tests/executor.d.ts +28 -0
  161. package/dist/tools/run-tests/executor.d.ts.map +1 -0
  162. package/dist/tools/run-tests/executor.js +161 -0
  163. package/dist/tools/run-tests/executor.js.map +1 -0
  164. package/dist/tools/run-typecheck/executor.d.ts +25 -0
  165. package/dist/tools/run-typecheck/executor.d.ts.map +1 -0
  166. package/dist/tools/run-typecheck/executor.js +83 -0
  167. package/dist/tools/run-typecheck/executor.js.map +1 -0
  168. package/dist/tools/search-code/executor.d.ts.map +1 -1
  169. package/dist/tools/search-code/executor.js +60 -30
  170. package/dist/tools/search-code/executor.js.map +1 -1
  171. package/dist/tools/shared.d.ts +26 -0
  172. package/dist/tools/shared.d.ts.map +1 -1
  173. package/dist/tools/shared.js +15 -0
  174. package/dist/tools/shared.js.map +1 -1
  175. package/dist/tools/todo-read/executor.d.ts +20 -0
  176. package/dist/tools/todo-read/executor.d.ts.map +1 -0
  177. package/dist/tools/todo-read/executor.js +26 -0
  178. package/dist/tools/todo-read/executor.js.map +1 -0
  179. package/dist/tools/todo-write/executor.d.ts +21 -0
  180. package/dist/tools/todo-write/executor.d.ts.map +1 -0
  181. package/dist/tools/todo-write/executor.js +38 -0
  182. package/dist/tools/todo-write/executor.js.map +1 -0
  183. package/dist/tools/web-fetch/descriptor.md +198 -0
  184. package/dist/tools/web-fetch/errors.d.ts +32 -0
  185. package/dist/tools/web-fetch/errors.d.ts.map +1 -0
  186. package/dist/tools/web-fetch/errors.js +91 -0
  187. package/dist/tools/web-fetch/errors.js.map +1 -0
  188. package/dist/tools/web-fetch/executor.d.ts +10 -0
  189. package/dist/tools/web-fetch/executor.d.ts.map +1 -0
  190. package/dist/tools/web-fetch/executor.js +191 -0
  191. package/dist/tools/web-fetch/executor.js.map +1 -0
  192. package/dist/tools/web-fetch/index.d.ts +4 -0
  193. package/dist/tools/web-fetch/index.d.ts.map +1 -0
  194. package/dist/tools/web-fetch/index.js +3 -0
  195. package/dist/tools/web-fetch/index.js.map +1 -0
  196. package/dist/tools/web-fetch/types.d.ts +157 -0
  197. package/dist/tools/web-fetch/types.d.ts.map +1 -0
  198. package/dist/tools/web-fetch/types.js +7 -0
  199. package/dist/tools/web-fetch/types.js.map +1 -0
  200. package/dist/tools/web-search/descriptor.md +89 -0
  201. package/dist/tools/web-search/errors.d.ts +33 -0
  202. package/dist/tools/web-search/errors.d.ts.map +1 -0
  203. package/dist/tools/web-search/errors.js +45 -0
  204. package/dist/tools/web-search/errors.js.map +1 -0
  205. package/dist/tools/web-search/executor.d.ts +10 -0
  206. package/dist/tools/web-search/executor.d.ts.map +1 -0
  207. package/dist/tools/web-search/executor.js +185 -0
  208. package/dist/tools/web-search/executor.js.map +1 -0
  209. package/dist/tools/web-search/index.d.ts +4 -0
  210. package/dist/tools/web-search/index.d.ts.map +1 -0
  211. package/dist/tools/web-search/index.js +3 -0
  212. package/dist/tools/web-search/index.js.map +1 -0
  213. package/dist/tools/web-search/types.d.ts +86 -0
  214. package/dist/tools/web-search/types.d.ts.map +1 -0
  215. package/dist/tools/web-search/types.js +7 -0
  216. package/dist/tools/web-search/types.js.map +1 -0
  217. package/dist/tools/write-file/executor.js +3 -3
  218. package/dist/tools/write-file/executor.js.map +1 -1
  219. package/dist/transformers/document-to-text.d.ts +11 -11
  220. package/dist/transformers/document-to-text.d.ts.map +1 -1
  221. package/dist/transformers/document-to-text.js +11 -11
  222. package/dist/transformers/document-to-text.js.map +1 -1
  223. package/dist/transformers/image-to-text.d.ts +15 -15
  224. package/dist/transformers/image-to-text.d.ts.map +1 -1
  225. package/dist/transformers/image-to-text.js +22 -21
  226. package/dist/transformers/image-to-text.js.map +1 -1
  227. package/dist/vector/index.d.ts +4 -2
  228. package/dist/vector/index.d.ts.map +1 -1
  229. package/dist/vector/index.js +2 -2
  230. package/dist/vector/index.js.map +1 -1
  231. package/dist/vector/local-fs-index.d.ts +59 -0
  232. package/dist/vector/local-fs-index.d.ts.map +1 -0
  233. package/dist/vector/local-fs-index.js +216 -0
  234. package/dist/vector/local-fs-index.js.map +1 -0
  235. package/dist/vector/qdrant.d.ts +11 -52
  236. package/dist/vector/qdrant.d.ts.map +1 -1
  237. package/dist/vector/qdrant.js +39 -105
  238. package/dist/vector/qdrant.js.map +1 -1
  239. package/package.json +27 -6
  240. package/dist/vector/local-fs.d.ts +0 -76
  241. package/dist/vector/local-fs.d.ts.map +0 -1
  242. package/dist/vector/local-fs.js +0 -153
  243. package/dist/vector/local-fs.js.map +0 -1
@@ -0,0 +1,288 @@
1
+ import { InMemoryMemorySystem, type AdapterCallContext, type ContextWindow, type MemoryEntry, type MemorySystem } from "@tachu/core";
2
+ import { ProjectionOutbox } from "./projection-outbox";
3
+ import { ProjectionWorker } from "./projection-worker";
4
+ /**
5
+ * `FsMemorySystem` 构造依赖(来自 `@tachu/core` 的 `MemorySystemFactoryDeps`)。
6
+ *
7
+ * 解耦设计:extensions 不强依赖 core 的 `MemorySystemFactoryDeps` 类型签名变动,
8
+ * 内部自描述只取真正需要的字段。
9
+ */
10
+ export interface FsMemorySystemOptions {
11
+ /**
12
+ * 持久化根目录,每个 session 对应 `<persistDir>/<sanitizedId>.jsonl`。
13
+ */
14
+ persistDir: string;
15
+ /**
16
+ * 内部组合的 `InMemoryMemorySystem` 实例。由调用方(通常为 engine-factory
17
+ * 通过 core 的 factory 回调)构造好后传入,以复用 core 的 tokenizer /
18
+ * modelRouter / providers / vectorStore 等运行时依赖。
19
+ */
20
+ inner: InMemoryMemorySystem;
21
+ /**
22
+ * 压缩触发阈值(0-1)。默认读 `config.memory.compressionThreshold`。
23
+ * 超过 `contextTokenLimit * threshold` 时在 `append` 中触发 `compress`。
24
+ */
25
+ compressionThreshold: number;
26
+ /**
27
+ * 可选的 projection outbox。若提供,`archive()` 会通过 outbox
28
+ * 跟踪每条投递的状态(pending/retrying/indexed/failed/dead),`pendingProjection`
29
+ * 返回真实状态而非常量模板;启动时自动 `recover()` 陈旧 retrying 项。
30
+ * 不提供时退化到旧的"始终 pending"行为,保持向后兼容。
31
+ */
32
+ projectionOutbox?: ProjectionOutbox | undefined;
33
+ /**
34
+ * optional embed+vector projection callback for {@link ProjectionWorker}.
35
+ * When set, {@link createProjectionWorker} uses this instead of `inner.project`.
36
+ */
37
+ projectionProject?: (sessionId: string, refs: readonly string[], signal: AbortSignal) => Promise<import("./projection-worker").ProjectionWorkerProjectResult[] | void>;
38
+ }
39
+ export interface FsArchiveOptions {
40
+ awaitProjection?: boolean | undefined;
41
+ }
42
+ /**
43
+ * 将任意 session ID 标准化为文件名安全形式。
44
+ *
45
+ * 规则:
46
+ * - 仅保留 `[A-Za-z0-9._-]`,其余一律替换为 `_`
47
+ * - 首位不允许为 `.`(防止写隐藏文件 / 触发 shell 点号展开)
48
+ * - 空串兜底为 `default`
49
+ * - 超长截断到 120 字符(绝大多数 UUID / nanoid 场景足够)
50
+ */
51
+ export declare function sanitizeSessionId(raw: string): string;
52
+ /**
53
+ * 基于文件系统的 `MemorySystem` 实现 —— `@tachu/core` `MemorySystem` 抽象的
54
+ * **跨进程持久化** 参考实现(patch-02-session-persistence)。
55
+ *
56
+ * ## 职责
57
+ *
58
+ * - 每次 `append` 先把单条 entry 以 append-only JSON line 写入
59
+ * `<persistDir>/<sid>.jsonl`(crash-safe),再同步进内部
60
+ * `InMemoryMemorySystem` 的运行时 window
61
+ * - 首次 `load(sid)` 命中时从磁盘 hydrate 上次进程遗留的历史,注入内部
62
+ * `InMemoryMemorySystem`(走 public `hydrate()`,旁路 per-entry compress 触发)
63
+ * - `compress()` 完成后 atomic rewrite 持久化文件,保证"盘 = 内存"一致
64
+ * - `recall` / `archive` / `getSize` / `trim` 全部代理内部 `InMemoryMemorySystem`
65
+ * (只要 load 阶段已 hydrate,这些读路径天然拿到跨进程数据)
66
+ *
67
+ * ## 并发
68
+ *
69
+ * 单 session 上的 `load` / `append` / `compress` / `trim` 通过 per-session promise
70
+ * chain 串行化,避免两个 runStream 并发交错写出错乱 jsonl。跨 session 完全独立。
71
+ *
72
+ * ## 与 `archivePath` 的职责分离
73
+ *
74
+ * - `config.memory.persistDir`(本类)= 热路径:每次 append 即落盘,用于跨进程 `--resume`
75
+ * - `config.memory.archivePath`(内部 `InMemoryMemorySystem` 拥有)= 冷路径:
76
+ * 仅在 `compress()` 时一次性追加到单个大 jsonl,供长期记忆向量召回
77
+ *
78
+ * 两者**不重叠**,保留现有 archivePath 语义不动。
79
+ */
80
+ export type FsProjectionStatus = {
81
+ kind: "pending";
82
+ ref: string;
83
+ reason: string;
84
+ createdAt: number;
85
+ } | {
86
+ kind: "indexed";
87
+ ref: string;
88
+ indexedAt: number;
89
+ adapter: string;
90
+ } | {
91
+ kind: "failed";
92
+ ref: string;
93
+ error: string;
94
+ retryable: boolean;
95
+ attempts: number;
96
+ } | {
97
+ kind: "stale";
98
+ ref: string;
99
+ reason: string;
100
+ };
101
+ export interface FsMemorySummary {
102
+ id: string;
103
+ sessionId: string;
104
+ sourceEntryIds: string[];
105
+ sourceRange: {
106
+ fromTs: number;
107
+ toTs: number;
108
+ };
109
+ content: string;
110
+ method: "llm" | "head-middle-tail" | "manual";
111
+ model?: string | undefined;
112
+ createdAt: number;
113
+ }
114
+ export interface FsSessionCheckpoint {
115
+ id: string;
116
+ createdAt: number;
117
+ state?: unknown | undefined;
118
+ }
119
+ export interface FsSessionMemorySnapshot {
120
+ meta: {
121
+ id: string;
122
+ updatedAt: number;
123
+ entryCount: number;
124
+ };
125
+ hotLog: MemoryEntry[];
126
+ summaries: FsMemorySummary[];
127
+ archiveRefs: Array<{
128
+ id: string;
129
+ path?: string | undefined;
130
+ entryIds: string[];
131
+ createdAt: number;
132
+ }>;
133
+ projectionStatus: FsProjectionStatus[];
134
+ budget: {
135
+ tokenLimit?: number | undefined;
136
+ tokenUsed?: number | undefined;
137
+ };
138
+ checkpoint?: FsSessionCheckpoint | undefined;
139
+ }
140
+ export interface FsMemoryViewRequest {
141
+ kind: "hot-log" | "summary" | "export" | "recall-corpus" | "sub-agent-slice";
142
+ limit?: number | undefined;
143
+ since?: number | undefined;
144
+ includeArchived?: boolean | undefined;
145
+ }
146
+ export interface FsMemoryView {
147
+ kind: FsMemoryViewRequest["kind"];
148
+ entries: MemoryEntry[];
149
+ summaries: FsMemorySummary[];
150
+ projectionStatus: FsProjectionStatus[];
151
+ }
152
+ export declare class FsMemorySystem implements MemorySystem {
153
+ private readonly persistDir;
154
+ private readonly inner;
155
+ private readonly compressionThreshold;
156
+ private readonly hydrated;
157
+ private readonly pending;
158
+ private readonly checkpoints;
159
+ private readonly outbox?;
160
+ private readonly projectionProject?;
161
+ private readonly recovered;
162
+ /**
163
+ * 构造文件持久化 MemorySystem。
164
+ *
165
+ * @param options 参见 {@link FsMemorySystemOptions}
166
+ */
167
+ constructor(options: FsMemorySystemOptions);
168
+ /**
169
+ * @inheritdoc
170
+ */
171
+ load(sessionId: string, ctx: AdapterCallContext): Promise<ContextWindow>;
172
+ /**
173
+ * @inheritdoc
174
+ *
175
+ * 流程:
176
+ * 1. 确保 session 已 hydrate(使 window 与磁盘一致)
177
+ * 2. append-only 将 entry 序列化为单行 JSON 落盘(崩溃安全;即便本次进程 crash,
178
+ * 磁盘文件仍是合法 jsonl 的前缀)
179
+ * 3. 将 entry 通过 `inner.hydrate()` 注入内存 window(旁路 per-entry compress)
180
+ * 4. 手动检查 tokenCount 是否越过阈值;若越线:
181
+ * - `inner.compress(sid)` 触发 LLM 摘要
182
+ * - atomic rewrite jsonl,保持盘与内存一致
183
+ */
184
+ append(sessionId: string, entry: MemoryEntry, ctx: AdapterCallContext): Promise<void>;
185
+ appendEntries(sessionId: string, entries: MemoryEntry[], ctx: AdapterCallContext): Promise<{
186
+ appended: number;
187
+ projectionStatus: FsProjectionStatus[];
188
+ }>;
189
+ /**
190
+ * @inheritdoc
191
+ */
192
+ compress(sessionId: string): Promise<void>;
193
+ /**
194
+ * @inheritdoc
195
+ */
196
+ recall(sessionId: string, query: string, topK?: number): Promise<MemoryEntry[]>;
197
+ /**
198
+ * @inheritdoc
199
+ */
200
+ loadFull(sessionId: string): Promise<MemoryEntry[]>;
201
+ loadSession(sessionId: string, ctx: AdapterCallContext): Promise<FsSessionMemorySnapshot>;
202
+ loadView(sessionId: string, view: FsMemoryViewRequest, ctx: AdapterCallContext): Promise<FsMemoryView>;
203
+ compact(sessionId: string, _policy: {
204
+ targetTokens?: number;
205
+ method?: "llm" | "head-middle-tail" | "manual";
206
+ }, _ctx: AdapterCallContext): Promise<{
207
+ summaries: FsMemorySummary[];
208
+ archiveRefs: FsSessionMemorySnapshot["archiveRefs"];
209
+ }>;
210
+ checkpoint(sessionId: string, checkpoint: FsSessionCheckpoint, _ctx: AdapterCallContext): Promise<void>;
211
+ /**
212
+ * @inheritdoc
213
+ *
214
+ * 当 host 注入 `projectionOutbox` 时,每条 entry 走 outbox 状态机
215
+ * (pending → retrying → indexed/failed/dead),并在首次 archive 该 session 时
216
+ * 自动 `recover()` 残留的陈旧 retrying 项。
217
+ *
218
+ * `awaitProjection=false` 时只写冷归档并入队 projection,由 `ProjectionWorker`
219
+ * 后台 flush;默认保持旧同步语义,等待本轮 projection 完成后返回。
220
+ */
221
+ archive(sessionId: string, options?: FsArchiveOptions): Promise<void>;
222
+ /**
223
+ * Construct a {@link ProjectionWorker} that drains the outbox via the
224
+ * host-injected `projectionProject` callback.
225
+ *
226
+ * **Fail-closed contract:** when `projectionOutbox` is
227
+ * enabled, `projectionProject` MUST be provided. The legacy fallback to
228
+ * `InMemoryMemorySystem.project()` (which forwarded raw `string` content
229
+ * straight to `VectorStore.upsert(id, text, { content })` and bypassed the
230
+ * `EmbeddingRuntime` / `VectorIndexAdapter` stack) has been removed — any
231
+ * production host that forgets to wire the projector now crashes loudly
232
+ * instead of silently re-introducing the deprecated text-embed path.
233
+ */
234
+ createProjectionWorker(options?: {
235
+ intervalMs?: number | undefined;
236
+ }): ProjectionWorker;
237
+ /**
238
+ * @inheritdoc
239
+ */
240
+ getSize(sessionId: string): Promise<{
241
+ entries: number;
242
+ tokens: number;
243
+ }>;
244
+ /**
245
+ * @inheritdoc
246
+ */
247
+ trim(sessionId: string, options?: {
248
+ keepHead?: number;
249
+ keepTail?: number;
250
+ }): Promise<void>;
251
+ /**
252
+ * @inheritdoc
253
+ *
254
+ * 先清内存 window,再幂等删除磁盘 jsonl。未找到文件视为 no-op。
255
+ */
256
+ clear(sessionId: string): Promise<void>;
257
+ private pendingProjection;
258
+ private snapshotOutboxByRef;
259
+ private projectionStatusFor;
260
+ /** archiveRefs 持久化路径。 */
261
+ private archiveRefsPathFor;
262
+ private readArchiveRefs;
263
+ private writeArchiveRefs;
264
+ private extractSummaries;
265
+ /**
266
+ * 获取某 session 的持久化文件绝对 / 相对路径(便于外层 CLI 做迁移、/history 展示)。
267
+ */
268
+ pathFor(sessionId: string): string;
269
+ /**
270
+ * 从磁盘读取 session 的原始 entries 快照(不经 inner hydrate)。
271
+ *
272
+ * 外层 CLI 可借此在 `/history` / `/export` 命令中直接列出原始条目顺序,
273
+ * 不必先 `load` 触发 hydrate 副作用。
274
+ */
275
+ readRaw(sessionId: string): Promise<MemoryEntry[]>;
276
+ private parseJsonl;
277
+ private hydrateIfNeeded;
278
+ private writeJsonlLine;
279
+ private rewriteJsonl;
280
+ /**
281
+ * 串行化某 session 的关键操作 —— 通过 promise chain 保证同一 sessionId 上的
282
+ * load / append / compress / trim 不交错。
283
+ *
284
+ * 失败不阻塞队列:下一个 task 无论前一个 resolve 还是 reject 都会启动。
285
+ */
286
+ private serialize;
287
+ }
288
+ //# sourceMappingURL=fs-memory-system.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-memory-system.d.ts","sourceRoot":"","sources":["../../src/memory/fs-memory-system.ts"],"names":[],"mappings":"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"}