@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
@@ -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":"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"}
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;IAExC;;;;MAIE;IACD,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;IAEF;;;;;;MAME;IACD,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;IAEF;;;;;MAKE;IACD,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;IAEF;;;;MAIE;IACD,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;IAEF;;;;MAIE;IACD,SAAS,CAAC,MAAqC;QAC7C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEF;;MAEE;IACD,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"}
@@ -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;