@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,187 @@
1
+ import { existsSync } from "node:fs";
2
+ import { mkdir, readFile, readdir, rename, writeFile } from "node:fs/promises";
3
+ import { basename, dirname, extname, join } from "node:path";
4
+ const DEFAULT_MAX_ATTEMPTS = 5;
5
+ const DEFAULT_STALE_MS = 5 * 60_000;
6
+ function parseRecord(raw) {
7
+ try {
8
+ const obj = JSON.parse(raw);
9
+ if (typeof obj.ref !== "string" || typeof obj.state !== "string")
10
+ return null;
11
+ return obj;
12
+ }
13
+ catch {
14
+ return null;
15
+ }
16
+ }
17
+ export class ProjectionOutbox {
18
+ dir;
19
+ maxAttempts;
20
+ staleAfterMs;
21
+ cache = new Map();
22
+ constructor(options) {
23
+ this.dir = options.dir;
24
+ this.maxAttempts = options.maxAttempts ?? DEFAULT_MAX_ATTEMPTS;
25
+ this.staleAfterMs = options.staleAfterMs ?? DEFAULT_STALE_MS;
26
+ }
27
+ pathFor(sessionId) {
28
+ return join(this.dir, `${sessionId}.jsonl`);
29
+ }
30
+ deadDir() {
31
+ return join(this.dir, "dead");
32
+ }
33
+ /** 读取/构造 session 的内存索引(按 ref 唯一)。 */
34
+ async loadIndex(sessionId) {
35
+ const cached = this.cache.get(sessionId);
36
+ if (cached)
37
+ return cached;
38
+ const map = new Map();
39
+ const path = this.pathFor(sessionId);
40
+ if (existsSync(path)) {
41
+ const text = await readFile(path, "utf8");
42
+ for (const line of text.split("\n")) {
43
+ if (!line.trim())
44
+ continue;
45
+ const rec = parseRecord(line);
46
+ if (rec)
47
+ map.set(rec.ref, rec); // last-write-wins
48
+ }
49
+ }
50
+ this.cache.set(sessionId, map);
51
+ return map;
52
+ }
53
+ /** 原子重写 jsonl。 */
54
+ async flush(sessionId) {
55
+ const map = this.cache.get(sessionId);
56
+ if (!map)
57
+ return;
58
+ await mkdir(this.dir, { recursive: true });
59
+ const tmp = `${this.pathFor(sessionId)}.tmp`;
60
+ const lines = [...map.values()].map((rec) => JSON.stringify(rec)).join("\n");
61
+ await writeFile(tmp, lines.length > 0 ? `${lines}\n` : "", "utf8");
62
+ await rename(tmp, this.pathFor(sessionId));
63
+ }
64
+ /** 启动恢复:将陈旧 retrying 重置为 pending。 */
65
+ async recover(sessionId, now = Date.now()) {
66
+ const map = await this.loadIndex(sessionId);
67
+ let reset = 0;
68
+ for (const rec of map.values()) {
69
+ if (rec.state === "retrying" && now - rec.updatedAt > this.staleAfterMs) {
70
+ rec.state = "pending";
71
+ rec.updatedAt = now;
72
+ reset += 1;
73
+ }
74
+ }
75
+ if (reset > 0)
76
+ await this.flush(sessionId);
77
+ return reset;
78
+ }
79
+ async enqueue(sessionId, ref, now = Date.now()) {
80
+ const map = await this.loadIndex(sessionId);
81
+ const existing = map.get(ref);
82
+ if (existing && existing.state === "indexed")
83
+ return; // idempotent
84
+ map.set(ref, {
85
+ ref,
86
+ state: "pending",
87
+ attempts: existing?.attempts ?? 0,
88
+ createdAt: existing?.createdAt ?? now,
89
+ updatedAt: now,
90
+ });
91
+ await this.flush(sessionId);
92
+ }
93
+ async markRetrying(sessionId, ref, now = Date.now()) {
94
+ const map = await this.loadIndex(sessionId);
95
+ const rec = map.get(ref);
96
+ if (!rec)
97
+ return;
98
+ rec.state = "retrying";
99
+ rec.updatedAt = now;
100
+ await this.flush(sessionId);
101
+ }
102
+ async markIndexed(sessionId, ref, vectorId, now = Date.now()) {
103
+ const map = await this.loadIndex(sessionId);
104
+ const rec = map.get(ref) ?? {
105
+ ref,
106
+ state: "pending",
107
+ attempts: 0,
108
+ createdAt: now,
109
+ updatedAt: now,
110
+ };
111
+ rec.state = "indexed";
112
+ rec.vectorId = vectorId;
113
+ rec.updatedAt = now;
114
+ map.set(ref, rec);
115
+ await this.flush(sessionId);
116
+ }
117
+ async markFailed(sessionId, ref, error, now = Date.now()) {
118
+ const map = await this.loadIndex(sessionId);
119
+ const rec = map.get(ref) ?? {
120
+ ref,
121
+ state: "pending",
122
+ attempts: 0,
123
+ createdAt: now,
124
+ updatedAt: now,
125
+ };
126
+ rec.attempts += 1;
127
+ rec.lastError = error;
128
+ rec.updatedAt = now;
129
+ if (rec.attempts >= this.maxAttempts) {
130
+ rec.state = "dead";
131
+ map.set(ref, rec);
132
+ await this.flush(sessionId);
133
+ // DLQ
134
+ await mkdir(this.deadDir(), { recursive: true });
135
+ const dlqPath = join(this.deadDir(), `${sessionId}.${now}.${rec.ref}.json`);
136
+ await writeFile(dlqPath, JSON.stringify({ sessionId, record: rec }, null, 2), "utf8");
137
+ }
138
+ else {
139
+ rec.state = "failed";
140
+ map.set(ref, rec);
141
+ await this.flush(sessionId);
142
+ }
143
+ return rec.state;
144
+ }
145
+ async list(sessionId) {
146
+ const map = await this.loadIndex(sessionId);
147
+ return [...map.values()];
148
+ }
149
+ async listSessions() {
150
+ if (!existsSync(this.dir))
151
+ return [];
152
+ const entries = await readdir(this.dir, { withFileTypes: true });
153
+ return entries
154
+ .filter((entry) => entry.isFile() && extname(entry.name) === ".jsonl")
155
+ .map((entry) => basename(entry.name, ".jsonl"))
156
+ .sort();
157
+ }
158
+ async listPending(sessionId) {
159
+ const map = await this.loadIndex(sessionId);
160
+ return [...map.values()].filter((rec) => rec.state === "pending" || rec.state === "failed");
161
+ }
162
+ async pendingCount(sessionId) {
163
+ const map = await this.loadIndex(sessionId);
164
+ let n = 0;
165
+ for (const rec of map.values()) {
166
+ if (rec.state === "pending" || rec.state === "failed" || rec.state === "retrying")
167
+ n += 1;
168
+ }
169
+ return n;
170
+ }
171
+ /** 清空缓存(用于测试模拟进程重启)。 */
172
+ resetCache() {
173
+ this.cache.clear();
174
+ }
175
+ get directory() {
176
+ return this.dir;
177
+ }
178
+ /** 仅用于内部诊断:用户可拿到 dead 目录路径检查 DLQ。 */
179
+ get deadLetterDir() {
180
+ return this.deadDir();
181
+ }
182
+ // 兼容 lint/test:保留 dirname 引用以避免 unused import 报错。
183
+ static dirnameOf(path) {
184
+ return dirname(path);
185
+ }
186
+ }
187
+ //# sourceMappingURL=projection-outbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projection-outbox.js","sourceRoot":"","sources":["../../src/memory/projection-outbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { AdapterCallContext, EmbeddingRuntime, MemoryEntry, VectorIndexAdapter } from "@tachu/core";
2
+ import type { ProjectionWorkerProjectResult } from "./projection-worker";
3
+ export interface ProjectionProjectorDeps {
4
+ embedding: EmbeddingRuntime;
5
+ vectorIndex: VectorIndexAdapter;
6
+ loadEntry: (sessionId: string, ref: string) => Promise<{
7
+ entry: MemoryEntry;
8
+ content: string;
9
+ } | null>;
10
+ namespace?: string | undefined;
11
+ }
12
+ /**
13
+ * embed source text via EmbeddingRuntime, upsert precomputed vectors, mark outbox indexed.
14
+ */
15
+ export declare function projectMemoryRefs(deps: ProjectionProjectorDeps, sessionId: string, refs: readonly string[], ctx: AdapterCallContext, signal: AbortSignal): Promise<ProjectionWorkerProjectResult[]>;
16
+ //# sourceMappingURL=projection-projector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projection-projector.d.ts","sourceRoot":"","sources":["../../src/memory/projection-projector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EACnB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AAEzE,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,gBAAgB,CAAC;IAC5B,WAAW,EAAE,kBAAkB,CAAC;IAChC,SAAS,EAAE,CACT,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,KACR,OAAO,CAAC;QAAE,KAAK,EAAE,WAAW,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAC7D,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAMD;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,uBAAuB,EAC7B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,EAAE,kBAAkB,EACvB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,6BAA6B,EAAE,CAAC,CAyD1C"}
@@ -0,0 +1,56 @@
1
+ import { createHash } from "node:crypto";
2
+ function contentHash(content) {
3
+ return createHash("sha256").update(content).digest("hex");
4
+ }
5
+ /**
6
+ * embed source text via EmbeddingRuntime, upsert precomputed vectors, mark outbox indexed.
7
+ */
8
+ export async function projectMemoryRefs(deps, sessionId, refs, ctx, signal) {
9
+ const results = [];
10
+ const profile = deps.embedding.describe();
11
+ const namespace = deps.namespace ?? sessionId;
12
+ for (const ref of refs) {
13
+ signal.throwIfAborted();
14
+ const loaded = await deps.loadEntry(sessionId, ref);
15
+ if (!loaded) {
16
+ throw new Error(`projection source not found for ref ${ref}`);
17
+ }
18
+ const { entry, content } = loaded;
19
+ const hash = contentHash(content);
20
+ const response = await deps.embedding.embed({
21
+ model: profile.model,
22
+ inputs: [content],
23
+ taskType: "RETRIEVAL_DOCUMENT",
24
+ ...(profile.dimensions !== undefined
25
+ ? { outputDimensionality: profile.dimensions }
26
+ : {}),
27
+ }, ctx, signal);
28
+ const vector = response.embeddings[0];
29
+ if (!vector || vector.length === 0) {
30
+ throw new Error(`embedding runtime returned empty vector for ref ${ref}`);
31
+ }
32
+ const vectorId = `${sessionId}-${entry.timestamp}`;
33
+ await deps.vectorIndex.upsert([
34
+ {
35
+ id: vectorId,
36
+ vector,
37
+ payload: {
38
+ ref: entry.id,
39
+ sourceKind: "memory-entry",
40
+ contentHash: hash,
41
+ sessionId,
42
+ namespace,
43
+ role: entry.role,
44
+ timestamp: entry.timestamp,
45
+ projectionVersion: 1,
46
+ embeddingProvider: profile.providerId,
47
+ embeddingModel: profile.model,
48
+ ...(profile.dimensions !== undefined ? { embeddingDimensions: profile.dimensions } : {}),
49
+ },
50
+ },
51
+ ], ctx, signal);
52
+ results.push({ ref, vectorId });
53
+ }
54
+ return results;
55
+ }
56
+ //# sourceMappingURL=projection-projector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projection-projector.js","sourceRoot":"","sources":["../../src/memory/projection-projector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAmBzC,SAAS,WAAW,CAAC,OAAe;IAClC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAA6B,EAC7B,SAAiB,EACjB,IAAuB,EACvB,GAAuB,EACvB,MAAmB;IAEnB,MAAM,OAAO,GAAoC,EAAE,CAAC;IACrD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC;IAE9C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,CAAC,cAAc,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,uCAAuC,GAAG,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QAClC,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CACzC;YACE,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,CAAC,OAAO,CAAC;YACjB,QAAQ,EAAE,oBAAoB;YAC9B,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS;gBAClC,CAAC,CAAC,EAAE,oBAAoB,EAAE,OAAO,CAAC,UAAU,EAAE;gBAC9C,CAAC,CAAC,EAAE,CAAC;SACR,EACD,GAAG,EACH,MAAM,CACP,CAAC;QACF,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,mDAAmD,GAAG,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,MAAM,QAAQ,GAAG,GAAG,SAAS,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACnD,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAC3B;YACE;gBACE,EAAE,EAAE,QAAQ;gBACZ,MAAM;gBACN,OAAO,EAAE;oBACP,GAAG,EAAE,KAAK,CAAC,EAAE;oBACb,UAAU,EAAE,cAAc;oBAC1B,WAAW,EAAE,IAAI;oBACjB,SAAS;oBACT,SAAS;oBACT,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,iBAAiB,EAAE,CAAC;oBACpB,iBAAiB,EAAE,OAAO,CAAC,UAAU;oBACrC,cAAc,EAAE,OAAO,CAAC,KAAK;oBAC7B,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACzF;aACF;SACF,EACD,GAAG,EACH,MAAM,CACP,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { ProjectionOutbox } from "./projection-outbox";
2
+ export interface ProjectionWorkerProjectResult {
3
+ ref: string;
4
+ vectorId: string;
5
+ }
6
+ export interface ProjectionWorkerOptions {
7
+ outbox: ProjectionOutbox;
8
+ project: (sessionId: string, refs: readonly string[], signal: AbortSignal) => Promise<ProjectionWorkerProjectResult[] | void>;
9
+ intervalMs?: number | undefined;
10
+ }
11
+ export interface ProjectionWorkerFlushResult {
12
+ sessions: number;
13
+ projected: number;
14
+ failed: number;
15
+ }
16
+ export declare class ProjectionWorker {
17
+ private readonly outbox;
18
+ private readonly project;
19
+ private readonly intervalMs;
20
+ private timer;
21
+ private abortController;
22
+ private running;
23
+ constructor(options: ProjectionWorkerOptions);
24
+ start(): void;
25
+ stop(): Promise<void>;
26
+ flush(sessionId?: string): Promise<ProjectionWorkerFlushResult>;
27
+ }
28
+ //# sourceMappingURL=projection-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projection-worker.d.ts","sourceRoot":"","sources":["../../src/memory/projection-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,WAAW,6BAA6B;IAC5C,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE,CACP,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,MAAM,EAAE,WAAW,KAChB,OAAO,CAAC,6BAA6B,EAAE,GAAG,IAAI,CAAC,CAAC;IACrD,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;IAC7D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,KAAK,CAA6C;IAC1D,OAAO,CAAC,eAAe,CAA8B;IACrD,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,uBAAuB;IAM5C,KAAK,IAAI,IAAI;IAUP,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IASrB,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,CAAC;CAqDtE"}
@@ -0,0 +1,84 @@
1
+ export class ProjectionWorker {
2
+ outbox;
3
+ project;
4
+ intervalMs;
5
+ timer;
6
+ abortController;
7
+ running = false;
8
+ constructor(options) {
9
+ this.outbox = options.outbox;
10
+ this.project = options.project;
11
+ this.intervalMs = options.intervalMs ?? 1_000;
12
+ }
13
+ start() {
14
+ if (this.timer !== undefined)
15
+ return;
16
+ this.abortController = new AbortController();
17
+ this.timer = setInterval(() => {
18
+ void this.flush().catch(() => {
19
+ // Individual projection failures are recorded in the outbox.
20
+ });
21
+ }, this.intervalMs);
22
+ }
23
+ async stop() {
24
+ if (this.timer !== undefined) {
25
+ clearInterval(this.timer);
26
+ this.timer = undefined;
27
+ }
28
+ this.abortController?.abort();
29
+ this.abortController = undefined;
30
+ }
31
+ async flush(sessionId) {
32
+ if (this.running) {
33
+ return { sessions: 0, projected: 0, failed: 0 };
34
+ }
35
+ this.running = true;
36
+ try {
37
+ const signal = this.abortController?.signal ?? new AbortController().signal;
38
+ const sessions = sessionId !== undefined ? [sessionId] : await this.outbox.listSessions();
39
+ let touchedSessions = 0;
40
+ let projected = 0;
41
+ let failed = 0;
42
+ for (const sid of sessions) {
43
+ await this.outbox.recover(sid);
44
+ const pending = await this.outbox.listPending(sid);
45
+ if (pending.length === 0)
46
+ continue;
47
+ touchedSessions += 1;
48
+ const refs = pending.map((record) => record.ref);
49
+ for (const ref of refs) {
50
+ await this.outbox.markRetrying(sid, ref);
51
+ }
52
+ try {
53
+ const result = await this.project(sid, refs, signal);
54
+ const vectorIds = new Map((result ?? refs.map((ref) => ({ ref, vectorId: `${sid}-${ref}` }))).map((item) => [
55
+ item.ref,
56
+ item.vectorId,
57
+ ]));
58
+ for (const ref of refs) {
59
+ const vectorId = vectorIds.get(ref);
60
+ if (vectorId === undefined) {
61
+ failed += 1;
62
+ await this.outbox.markFailed(sid, ref, "projection worker did not return vectorId");
63
+ continue;
64
+ }
65
+ await this.outbox.markIndexed(sid, ref, vectorId);
66
+ projected += 1;
67
+ }
68
+ }
69
+ catch (error) {
70
+ const message = error instanceof Error ? error.message : String(error);
71
+ failed += refs.length;
72
+ for (const ref of refs) {
73
+ await this.outbox.markFailed(sid, ref, message);
74
+ }
75
+ }
76
+ }
77
+ return { sessions: touchedSessions, projected, failed };
78
+ }
79
+ finally {
80
+ this.running = false;
81
+ }
82
+ }
83
+ }
84
+ //# sourceMappingURL=projection-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projection-worker.js","sourceRoot":"","sources":["../../src/memory/projection-worker.ts"],"names":[],"mappings":"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"}
@@ -14,41 +14,41 @@ export declare class JsonlEmitter implements ObservabilityEmitter {
14
14
  private masker;
15
15
  private writeQueue;
16
16
  /**
17
- * 创建 JSONL 发射器。
18
- *
19
- * @param options 文件配置
20
- */
17
+ * 创建 JSONL 发射器。
18
+ *
19
+ * @param options 文件配置
20
+ */
21
21
  constructor(options: JsonlEmitterOptions);
22
22
  /**
23
- * 订阅事件。
24
- *
25
- * @param type 事件类型
26
- * @param handler 处理器
27
- * @returns 取消订阅函数
28
- */
23
+ * 订阅事件。
24
+ *
25
+ * @param type 事件类型
26
+ * @param handler 处理器
27
+ * @returns 取消订阅函数
28
+ */
29
29
  on(type: EngineEvent["type"] | "*", handler: EventHandler): () => void;
30
30
  /**
31
- * 取消订阅。
32
- *
33
- * @param type 事件类型
34
- * @param handler 处理器
35
- */
31
+ * 取消订阅。
32
+ *
33
+ * @param type 事件类型
34
+ * @param handler 处理器
35
+ */
36
36
  off(type: EngineEvent["type"] | "*", handler: EventHandler): void;
37
37
  /**
38
- * 发射并持久化事件。
39
- *
40
- * @param event 引擎事件
41
- */
38
+ * 发射并持久化事件。
39
+ *
40
+ * @param event 引擎事件
41
+ */
42
42
  emit(event: EngineEvent): void;
43
43
  /**
44
- * 设置脱敏函数。
45
- *
46
- * @param masker 脱敏函数
47
- */
44
+ * 设置脱敏函数。
45
+ *
46
+ * @param masker 脱敏函数
47
+ */
48
48
  setMasker(masker: (payload: unknown) => unknown): void;
49
49
  /**
50
- * 等待队列写入完成。
51
- */
50
+ * 等待队列写入完成。
51
+ */
52
52
  dispose(): Promise<void>;
53
53
  private emitToSubscribers;
54
54
  private append;
@@ -1 +1 @@
1
- {"version":3,"file":"jsonl-emitter.d.ts","sourceRoot":"","sources":["../../src/observability/jsonl-emitter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAErE,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;AAEjD,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,YAAa,YAAW,oBAAoB;IACvD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2D;IACpF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,MAAM,CAAuD;IACrE,OAAO,CAAC,UAAU,CAAqB;IAEvC;;;;OAIG;gBACS,OAAO,EAAE,mBAAmB;IAKxC;;;;;;OAMG;IACH,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,GAAG,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,IAAI;IAOtE;;;;;OAKG;IACH,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,GAAG,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI;IAQjE;;;;OAIG;IACH,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAS9B;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,GAAG,IAAI;IAItD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,OAAO,CAAC,iBAAiB;YASX,MAAM;YAMN,cAAc;CAQ7B"}
1
+ {"version":3,"file":"jsonl-emitter.d.ts","sourceRoot":"","sources":["../../src/observability/jsonl-emitter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAErE,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;AAEjD,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,YAAa,YAAW,oBAAoB;IACvD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2D;IACpF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,MAAM,CAAuD;IACrE,OAAO,CAAC,UAAU,CAAqB;IAExC;;;;MAIE;gBACW,OAAO,EAAE,mBAAmB;IAKzC;;;;;;MAME;IACD,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,GAAG,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,IAAI;IAOvE;;;;;MAKE;IACD,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,GAAG,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI;IAQlE;;;;MAIE;IACD,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAS/B;;;;MAIE;IACD,SAAS,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,GAAG,IAAI;IAIvD;;MAEE;IACK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,OAAO,CAAC,iBAAiB;YASX,MAAM;YAMN,cAAc;CAQ7B"}
@@ -10,21 +10,21 @@ export class JsonlEmitter {
10
10
  masker = (payload) => payload;
11
11
  writeQueue = Promise.resolve();
12
12
  /**
13
- * 创建 JSONL 发射器。
14
- *
15
- * @param options 文件配置
16
- */
13
+ * 创建 JSONL 发射器。
14
+ *
15
+ * @param options 文件配置
16
+ */
17
17
  constructor(options) {
18
18
  this.filePath = options.filePath;
19
19
  this.rotateSize = options.rotateSize ?? 10 * 1024 * 1024;
20
20
  }
21
21
  /**
22
- * 订阅事件。
23
- *
24
- * @param type 事件类型
25
- * @param handler 处理器
26
- * @returns 取消订阅函数
27
- */
22
+ * 订阅事件。
23
+ *
24
+ * @param type 事件类型
25
+ * @param handler 处理器
26
+ * @returns 取消订阅函数
27
+ */
28
28
  on(type, handler) {
29
29
  const bucket = this.handlers.get(type) ?? new Set();
30
30
  bucket.add(handler);
@@ -32,11 +32,11 @@ export class JsonlEmitter {
32
32
  return () => this.off(type, handler);
33
33
  }
34
34
  /**
35
- * 取消订阅。
36
- *
37
- * @param type 事件类型
38
- * @param handler 处理器
39
- */
35
+ * 取消订阅。
36
+ *
37
+ * @param type 事件类型
38
+ * @param handler 处理器
39
+ */
40
40
  off(type, handler) {
41
41
  const bucket = this.handlers.get(type);
42
42
  bucket?.delete(handler);
@@ -45,10 +45,10 @@ export class JsonlEmitter {
45
45
  }
46
46
  }
47
47
  /**
48
- * 发射并持久化事件。
49
- *
50
- * @param event 引擎事件
51
- */
48
+ * 发射并持久化事件。
49
+ *
50
+ * @param event 引擎事件
51
+ */
52
52
  emit(event) {
53
53
  const maskedEvent = {
54
54
  ...event,
@@ -58,16 +58,16 @@ export class JsonlEmitter {
58
58
  this.writeQueue = this.writeQueue.then(() => this.append(maskedEvent)).catch(() => undefined);
59
59
  }
60
60
  /**
61
- * 设置脱敏函数。
62
- *
63
- * @param masker 脱敏函数
64
- */
61
+ * 设置脱敏函数。
62
+ *
63
+ * @param masker 脱敏函数
64
+ */
65
65
  setMasker(masker) {
66
66
  this.masker = masker;
67
67
  }
68
68
  /**
69
- * 等待队列写入完成。
70
- */
69
+ * 等待队列写入完成。
70
+ */
71
71
  async dispose() {
72
72
  await this.writeQueue;
73
73
  }
@@ -1 +1 @@
1
- {"version":3,"file":"jsonl-emitter.js","sourceRoot":"","sources":["../../src/observability/jsonl-emitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC;;GAEG;AACH,MAAM,OAAO,YAAY;IACN,QAAQ,GAAG,IAAI,GAAG,EAAgD,CAAC;IACnE,QAAQ,CAAS;IACjB,UAAU,CAAS;IAC5B,MAAM,GAAkC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;IAC7D,UAAU,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAEvC;;;;OAIG;IACH,YAAY,OAA4B;QACtC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;IAC3D,CAAC;IAED;;;;;;OAMG;IACH,EAAE,CAAC,IAA+B,EAAE,OAAqB;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAgB,CAAC;QAClE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACpB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAChC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAED;;;;;OAKG;IACH,GAAG,CAAC,IAA+B,EAAE,OAAqB;QACxD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QACxB,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,IAAI,CAAC,KAAkB;QACrB,MAAM,WAAW,GAAgB;YAC/B,GAAG,KAAK;YACR,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAA4B;SAC/D,CAAC;QACF,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;QACpC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAChG,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,MAAqC;QAC7C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,CAAC,UAAU,CAAC;IACxB,CAAC;IAEO,iBAAiB,CAAC,KAAkB;QAC1C,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YAC1D,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;YACnD,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,MAAM,CAAC,KAAkB;QACrC,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9E,CAAC;IAEO,KAAK,CAAC,cAAc;QAC1B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACzC,OAAO;QACT,CAAC;QACD,MAAM,WAAW,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC;QAC3D,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC3C,CAAC;CACF"}
1
+ {"version":3,"file":"jsonl-emitter.js","sourceRoot":"","sources":["../../src/observability/jsonl-emitter.ts"],"names":[],"mappings":"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"}
@@ -10,39 +10,39 @@ export declare class OtelEmitter implements ObservabilityEmitter {
10
10
  private readonly phaseSpans;
11
11
  private masker;
12
12
  /**
13
- * 创建 OTel 发射器。
14
- *
15
- * @param options 构造参数
16
- */
13
+ * 创建 OTel 发射器。
14
+ *
15
+ * @param options 构造参数
16
+ */
17
17
  constructor(options: {
18
18
  tracer: Tracer;
19
19
  });
20
20
  /**
21
- * 订阅事件。
22
- *
23
- * @param type 事件类型
24
- * @param handler 处理器
25
- * @returns 取消订阅函数
26
- */
21
+ * 订阅事件。
22
+ *
23
+ * @param type 事件类型
24
+ * @param handler 处理器
25
+ * @returns 取消订阅函数
26
+ */
27
27
  on(type: EngineEvent["type"] | "*", handler: EventHandler): () => void;
28
28
  /**
29
- * 取消订阅。
30
- *
31
- * @param type 事件类型
32
- * @param handler 处理器
33
- */
29
+ * 取消订阅。
30
+ *
31
+ * @param type 事件类型
32
+ * @param handler 处理器
33
+ */
34
34
  off(type: EngineEvent["type"] | "*", handler: EventHandler): void;
35
35
  /**
36
- * 发射事件并映射到 OTel Span。
37
- *
38
- * @param event 引擎事件
39
- */
36
+ * 发射事件并映射到 OTel Span。
37
+ *
38
+ * @param event 引擎事件
39
+ */
40
40
  emit(event: EngineEvent): void;
41
41
  /**
42
- * 配置 payload 脱敏函数。
43
- *
44
- * @param masker 脱敏函数
45
- */
42
+ * 配置 payload 脱敏函数。
43
+ *
44
+ * @param masker 脱敏函数
45
+ */
46
46
  setMasker(masker: (payload: unknown) => unknown): void;
47
47
  private emitToSubscribers;
48
48
  private emitToOtel;