@tachu/extensions 1.0.0-alpha.6 → 1.0.0-rc.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 (144) hide show
  1. package/CHANGELOG.md +25 -236
  2. package/README.md +53 -998
  3. package/README_ZH.md +52 -973
  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 +12 -12
  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 +9 -9
  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 +8 -8
  15. package/dist/backends/web.js.map +1 -1
  16. package/dist/common/path.d.ts +14 -14
  17. package/dist/common/path.d.ts.map +1 -1
  18. package/dist/common/path.js +3 -3
  19. package/dist/common/process.js.map +1 -1
  20. package/dist/index.d.ts +2 -2
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +2 -2
  23. package/dist/index.js.map +1 -1
  24. package/dist/mcp/sse-adapter.d.ts +38 -38
  25. package/dist/mcp/sse-adapter.d.ts.map +1 -1
  26. package/dist/mcp/sse-adapter.js +34 -34
  27. package/dist/mcp/sse-adapter.js.map +1 -1
  28. package/dist/mcp/stdio-adapter.d.ts +38 -38
  29. package/dist/mcp/stdio-adapter.d.ts.map +1 -1
  30. package/dist/mcp/stdio-adapter.js +34 -34
  31. package/dist/mcp/stdio-adapter.js.map +1 -1
  32. package/dist/memory/fs-memory-system.d.ts +199 -58
  33. package/dist/memory/fs-memory-system.d.ts.map +1 -1
  34. package/dist/memory/fs-memory-system.js +290 -74
  35. package/dist/memory/fs-memory-system.js.map +1 -1
  36. package/dist/memory/index.d.ts +3 -0
  37. package/dist/memory/index.d.ts.map +1 -1
  38. package/dist/memory/index.js +3 -0
  39. package/dist/memory/index.js.map +1 -1
  40. package/dist/memory/projection-outbox.d.ts +69 -0
  41. package/dist/memory/projection-outbox.d.ts.map +1 -0
  42. package/dist/memory/projection-outbox.js +187 -0
  43. package/dist/memory/projection-outbox.js.map +1 -0
  44. package/dist/memory/projection-projector.d.ts +16 -0
  45. package/dist/memory/projection-projector.d.ts.map +1 -0
  46. package/dist/memory/projection-projector.js +56 -0
  47. package/dist/memory/projection-projector.js.map +1 -0
  48. package/dist/memory/projection-worker.d.ts +28 -0
  49. package/dist/memory/projection-worker.d.ts.map +1 -0
  50. package/dist/memory/projection-worker.js +84 -0
  51. package/dist/memory/projection-worker.js.map +1 -0
  52. package/dist/observability/jsonl-emitter.d.ts +25 -25
  53. package/dist/observability/jsonl-emitter.d.ts.map +1 -1
  54. package/dist/observability/jsonl-emitter.js +25 -25
  55. package/dist/observability/jsonl-emitter.js.map +1 -1
  56. package/dist/observability/otel-emitter.d.ts +23 -23
  57. package/dist/observability/otel-emitter.d.ts.map +1 -1
  58. package/dist/observability/otel-emitter.js +37 -28
  59. package/dist/observability/otel-emitter.js.map +1 -1
  60. package/dist/providers/anthropic.d.ts +39 -39
  61. package/dist/providers/anthropic.d.ts.map +1 -1
  62. package/dist/providers/anthropic.js +35 -35
  63. package/dist/providers/anthropic.js.map +1 -1
  64. package/dist/providers/mock.d.ts +33 -33
  65. package/dist/providers/mock.d.ts.map +1 -1
  66. package/dist/providers/mock.js +24 -24
  67. package/dist/providers/mock.js.map +1 -1
  68. package/dist/providers/openai.d.ts +51 -50
  69. package/dist/providers/openai.d.ts.map +1 -1
  70. package/dist/providers/openai.js +81 -46
  71. package/dist/providers/openai.js.map +1 -1
  72. package/dist/providers/qwen.d.ts +39 -38
  73. package/dist/providers/qwen.d.ts.map +1 -1
  74. package/dist/providers/qwen.js +27 -24
  75. package/dist/providers/qwen.js.map +1 -1
  76. package/dist/safety/default-gate.d.ts +35 -35
  77. package/dist/safety/default-gate.d.ts.map +1 -1
  78. package/dist/safety/default-gate.js +3 -3
  79. package/dist/safety/default-gate.js.map +1 -1
  80. package/dist/tools/_shared/web-client.d.ts +1 -1
  81. package/dist/tools/_shared/web-client.js +1 -1
  82. package/dist/tools/apply-patch/executor.js.map +1 -1
  83. package/dist/tools/fetch-url/executor.d.ts +2 -2
  84. package/dist/tools/fetch-url/executor.js +7 -7
  85. package/dist/tools/git-blame/executor.js.map +1 -1
  86. package/dist/tools/git-branch/executor.js +2 -2
  87. package/dist/tools/git-branch/executor.js.map +1 -1
  88. package/dist/tools/git-diff/executor.js.map +1 -1
  89. package/dist/tools/git-show/executor.js.map +1 -1
  90. package/dist/tools/git-status/executor.js.map +1 -1
  91. package/dist/tools/glob/executor.js.map +1 -1
  92. package/dist/tools/index.d.ts.map +1 -1
  93. package/dist/tools/index.js +3 -0
  94. package/dist/tools/index.js.map +1 -1
  95. package/dist/tools/list-dir/executor.js +1 -1
  96. package/dist/tools/list-dir/executor.js.map +1 -1
  97. package/dist/tools/read-file/executor.js +1 -1
  98. package/dist/tools/read-file/executor.js.map +1 -1
  99. package/dist/tools/run-shell/executor.js.map +1 -1
  100. package/dist/tools/run-tests/executor.js.map +1 -1
  101. package/dist/tools/run-typecheck/executor.js.map +1 -1
  102. package/dist/tools/search-code/executor.js +1 -1
  103. package/dist/tools/search-code/executor.js.map +1 -1
  104. package/dist/tools/shared.d.ts +9 -9
  105. package/dist/tools/web-fetch/errors.d.ts +2 -2
  106. package/dist/tools/web-fetch/errors.js +3 -3
  107. package/dist/tools/web-fetch/errors.js.map +1 -1
  108. package/dist/tools/web-fetch/executor.d.ts +2 -2
  109. package/dist/tools/web-fetch/executor.js +2 -2
  110. package/dist/tools/web-fetch/types.d.ts +7 -7
  111. package/dist/tools/web-fetch/types.d.ts.map +1 -1
  112. package/dist/tools/web-fetch/types.js +1 -1
  113. package/dist/tools/web-search/errors.d.ts +3 -3
  114. package/dist/tools/web-search/errors.js +3 -3
  115. package/dist/tools/web-search/executor.d.ts +2 -2
  116. package/dist/tools/web-search/executor.js +2 -2
  117. package/dist/tools/web-search/types.d.ts +4 -4
  118. package/dist/tools/web-search/types.d.ts.map +1 -1
  119. package/dist/tools/web-search/types.js +1 -1
  120. package/dist/transformers/document-to-text.d.ts +11 -11
  121. package/dist/transformers/document-to-text.d.ts.map +1 -1
  122. package/dist/transformers/document-to-text.js +11 -11
  123. package/dist/transformers/document-to-text.js.map +1 -1
  124. package/dist/transformers/image-to-text.d.ts +15 -15
  125. package/dist/transformers/image-to-text.d.ts.map +1 -1
  126. package/dist/transformers/image-to-text.js +15 -15
  127. package/dist/transformers/image-to-text.js.map +1 -1
  128. package/dist/vector/index.d.ts +4 -2
  129. package/dist/vector/index.d.ts.map +1 -1
  130. package/dist/vector/index.js +2 -2
  131. package/dist/vector/index.js.map +1 -1
  132. package/dist/vector/local-fs-index.d.ts +59 -0
  133. package/dist/vector/local-fs-index.d.ts.map +1 -0
  134. package/dist/vector/local-fs-index.js +216 -0
  135. package/dist/vector/local-fs-index.js.map +1 -0
  136. package/dist/vector/qdrant.d.ts +11 -73
  137. package/dist/vector/qdrant.d.ts.map +1 -1
  138. package/dist/vector/qdrant.js +29 -164
  139. package/dist/vector/qdrant.js.map +1 -1
  140. package/package.json +19 -4
  141. package/dist/vector/local-fs.d.ts +0 -81
  142. package/dist/vector/local-fs.d.ts.map +0 -1
  143. package/dist/vector/local-fs.js +0 -161
  144. package/dist/vector/local-fs.js.map +0 -1
@@ -1,4 +1,6 @@
1
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";
2
4
  /**
3
5
  * `FsMemorySystem` 构造依赖(来自 `@tachu/core` 的 `MemorySystemFactoryDeps`)。
4
6
  *
@@ -7,20 +9,35 @@ import { InMemoryMemorySystem, type AdapterCallContext, type ContextWindow, type
7
9
  */
8
10
  export interface FsMemorySystemOptions {
9
11
  /**
10
- * 持久化根目录,每个 session 对应 `<persistDir>/<sanitizedId>.jsonl`。
11
- */
12
+ * 持久化根目录,每个 session 对应 `<persistDir>/<sanitizedId>.jsonl`。
13
+ */
12
14
  persistDir: string;
13
15
  /**
14
- * 内部组合的 `InMemoryMemorySystem` 实例。由调用方(通常为 engine-factory
15
- * 通过 core 的 factory 回调)构造好后传入,以复用 core 的 tokenizer /
16
- * modelRouter / providers / vectorStore 等运行时依赖。
17
- */
16
+ * 内部组合的 `InMemoryMemorySystem` 实例。由调用方(通常为 engine-factory
17
+ * 通过 core 的 factory 回调)构造好后传入,以复用 core 的 tokenizer /
18
+ * modelRouter / providers / vectorStore 等运行时依赖。
19
+ */
18
20
  inner: InMemoryMemorySystem;
19
21
  /**
20
- * 压缩触发阈值(0-1)。默认读 `config.memory.compressionThreshold`。
21
- * 超过 `contextTokenLimit * threshold` 时在 `append` 中触发 `compress`。
22
- */
22
+ * 压缩触发阈值(0-1)。默认读 `config.memory.compressionThreshold`。
23
+ * 超过 `contextTokenLimit * threshold` 时在 `append` 中触发 `compress`。
24
+ */
23
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;
24
41
  }
25
42
  /**
26
43
  * 将任意 session ID 标准化为文件名安全形式。
@@ -39,13 +56,13 @@ export declare function sanitizeSessionId(raw: string): string;
39
56
  * ## 职责
40
57
  *
41
58
  * - 每次 `append` 先把单条 entry 以 append-only JSON line 写入
42
- * `<persistDir>/<sid>.jsonl`(crash-safe),再同步进内部
43
- * `InMemoryMemorySystem` 的运行时 window
59
+ * `<persistDir>/<sid>.jsonl`(crash-safe),再同步进内部
60
+ * `InMemoryMemorySystem` 的运行时 window
44
61
  * - 首次 `load(sid)` 命中时从磁盘 hydrate 上次进程遗留的历史,注入内部
45
- * `InMemoryMemorySystem`(走 public `hydrate()`,旁路 per-entry compress 触发)
62
+ * `InMemoryMemorySystem`(走 public `hydrate()`,旁路 per-entry compress 触发)
46
63
  * - `compress()` 完成后 atomic rewrite 持久化文件,保证"盘 = 内存"一致
47
64
  * - `recall` / `archive` / `getSize` / `trim` 全部代理内部 `InMemoryMemorySystem`
48
- * (只要 load 阶段已 hydrate,这些读路径天然拿到跨进程数据)
65
+ * (只要 load 阶段已 hydrate,这些读路径天然拿到跨进程数据)
49
66
  *
50
67
  * ## 并发
51
68
  *
@@ -56,92 +73,216 @@ export declare function sanitizeSessionId(raw: string): string;
56
73
  *
57
74
  * - `config.memory.persistDir`(本类)= 热路径:每次 append 即落盘,用于跨进程 `--resume`
58
75
  * - `config.memory.archivePath`(内部 `InMemoryMemorySystem` 拥有)= 冷路径:
59
- * 仅在 `compress()` 时一次性追加到单个大 jsonl,供长期记忆向量召回
76
+ * 仅在 `compress()` 时一次性追加到单个大 jsonl,供长期记忆向量召回
60
77
  *
61
78
  * 两者**不重叠**,保留现有 archivePath 语义不动。
62
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
+ }
63
152
  export declare class FsMemorySystem implements MemorySystem {
64
153
  private readonly persistDir;
65
154
  private readonly inner;
66
155
  private readonly compressionThreshold;
67
156
  private readonly hydrated;
68
157
  private readonly pending;
158
+ private readonly checkpoints;
159
+ private readonly outbox?;
160
+ private readonly projectionProject?;
161
+ private readonly recovered;
69
162
  /**
70
- * 构造文件持久化 MemorySystem。
71
- *
72
- * @param options 参见 {@link FsMemorySystemOptions}
73
- */
163
+ * 构造文件持久化 MemorySystem。
164
+ *
165
+ * @param options 参见 {@link FsMemorySystemOptions}
166
+ */
74
167
  constructor(options: FsMemorySystemOptions);
75
168
  /**
76
- * @inheritdoc
77
- */
169
+ * @inheritdoc
170
+ */
78
171
  load(sessionId: string, ctx: AdapterCallContext): Promise<ContextWindow>;
79
172
  /**
80
- * @inheritdoc
81
- *
82
- * 流程:
83
- * 1. 确保 session 已 hydrate(使 window 与磁盘一致)
84
- * 2. append-only 将 entry 序列化为单行 JSON 落盘(崩溃安全;即便本次进程 crash,
85
- * 磁盘文件仍是合法 jsonl 的前缀)
86
- * 3. 将 entry 通过 `inner.hydrate()` 注入内存 window(旁路 per-entry compress)
87
- * 4. 手动检查 tokenCount 是否越过阈值;若越线:
88
- * - `inner.compress(sid)` 触发 LLM 摘要
89
- * - atomic rewrite jsonl,保持盘与内存一致
90
- */
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
+ */
91
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
+ }>;
92
189
  /**
93
- * @inheritdoc
94
- */
190
+ * @inheritdoc
191
+ */
95
192
  compress(sessionId: string): Promise<void>;
96
193
  /**
97
- * @inheritdoc
98
- */
194
+ * @inheritdoc
195
+ */
99
196
  recall(sessionId: string, query: string, topK?: number): Promise<MemoryEntry[]>;
100
197
  /**
101
- * @inheritdoc
102
- */
103
- archive(sessionId: string): Promise<void>;
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;
104
237
  /**
105
- * @inheritdoc
106
- */
238
+ * @inheritdoc
239
+ */
107
240
  getSize(sessionId: string): Promise<{
108
241
  entries: number;
109
242
  tokens: number;
110
243
  }>;
111
244
  /**
112
- * @inheritdoc
113
- */
245
+ * @inheritdoc
246
+ */
114
247
  trim(sessionId: string, options?: {
115
248
  keepHead?: number;
116
249
  keepTail?: number;
117
250
  }): Promise<void>;
118
251
  /**
119
- * @inheritdoc
120
- *
121
- * 先清内存 window,再幂等删除磁盘 jsonl。未找到文件视为 no-op。
122
- */
252
+ * @inheritdoc
253
+ *
254
+ * 先清内存 window,再幂等删除磁盘 jsonl。未找到文件视为 no-op。
255
+ */
123
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;
124
265
  /**
125
- * 获取某 session 的持久化文件绝对 / 相对路径(便于外层 CLI 做迁移、/history 展示)。
126
- */
266
+ * 获取某 session 的持久化文件绝对 / 相对路径(便于外层 CLI 做迁移、/history 展示)。
267
+ */
127
268
  pathFor(sessionId: string): string;
128
269
  /**
129
- * 从磁盘读取 session 的原始 entries 快照(不经 inner hydrate)。
130
- *
131
- * 外层 CLI 可借此在 `/history` / `/export` 命令中直接列出原始条目顺序,
132
- * 不必先 `load` 触发 hydrate 副作用。
133
- */
270
+ * 从磁盘读取 session 的原始 entries 快照(不经 inner hydrate)。
271
+ *
272
+ * 外层 CLI 可借此在 `/history` / `/export` 命令中直接列出原始条目顺序,
273
+ * 不必先 `load` 触发 hydrate 副作用。
274
+ */
134
275
  readRaw(sessionId: string): Promise<MemoryEntry[]>;
135
276
  private parseJsonl;
136
277
  private hydrateIfNeeded;
137
278
  private writeJsonlLine;
138
279
  private rewriteJsonl;
139
280
  /**
140
- * 串行化某 session 的关键操作 —— 通过 promise chain 保证同一 sessionId 上的
141
- * load / append / compress / trim 不交错。
142
- *
143
- * 失败不阻塞队列:下一个 task 无论前一个 resolve 还是 reject 都会启动。
144
- */
281
+ * 串行化某 session 的关键操作 —— 通过 promise chain 保证同一 sessionId 上的
282
+ * load / append / compress / trim 不交错。
283
+ *
284
+ * 失败不阻塞队列:下一个 task 无论前一个 resolve 还是 reject 都会启动。
285
+ */
145
286
  private serialize;
146
287
  }
147
288
  //# sourceMappingURL=fs-memory-system.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fs-memory-system.d.ts","sourceRoot":"","sources":["../../src/memory/fs-memory-system.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,oBAAoB,EACpB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AAErB;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,KAAK,EAAE,oBAAoB,CAAC;IAC5B;;;OAGG;IACH,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AA0BD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKrD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,cAAe,YAAW,YAAY;IACjD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;IAE/D;;;;OAIG;gBACS,OAAO,EAAE,qBAAqB;IAM1C;;OAEG;IACG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC;IAO9E;;;;;;;;;;;OAWG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAa3F;;OAEG;IACG,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhD;;OAEG;IACG,MAAM,CACV,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,WAAW,EAAE,CAAC;IAOzB;;OAEG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/C;;OAEG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAK9E;;OAEG;IACG,IAAI,CACR,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GACjD,OAAO,CAAC,IAAI,CAAC;IAQhB;;;;OAIG;IACG,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa7C;;OAEG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAIlC;;;;;OAKG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAcxD,OAAO,CAAC,UAAU;YAgBJ,eAAe;YASf,cAAc;YAMd,YAAY;IAY1B;;;;;OAKG;YACW,SAAS;CAYxB"}
1
+ {"version":3,"file":"fs-memory-system.d.ts","sourceRoot":"","sources":["../../src/memory/fs-memory-system.ts"],"names":[],"mappings":"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"}