@tachu/extensions 1.0.0-alpha.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 (210) hide show
  1. package/CHANGELOG.md +119 -0
  2. package/LICENSE +201 -0
  3. package/README.md +1104 -0
  4. package/README_ZH.md +1082 -0
  5. package/dist/backends/file.d.ts +18 -0
  6. package/dist/backends/file.d.ts.map +1 -0
  7. package/dist/backends/file.js +85 -0
  8. package/dist/backends/file.js.map +1 -0
  9. package/dist/backends/index.d.ts +4 -0
  10. package/dist/backends/index.d.ts.map +1 -0
  11. package/dist/backends/index.js +4 -0
  12. package/dist/backends/index.js.map +1 -0
  13. package/dist/backends/terminal.d.ts +18 -0
  14. package/dist/backends/terminal.d.ts.map +1 -0
  15. package/dist/backends/terminal.js +81 -0
  16. package/dist/backends/terminal.js.map +1 -0
  17. package/dist/backends/web.d.ts +18 -0
  18. package/dist/backends/web.d.ts.map +1 -0
  19. package/dist/backends/web.js +55 -0
  20. package/dist/backends/web.js.map +1 -0
  21. package/dist/common/net.d.ts +39 -0
  22. package/dist/common/net.d.ts.map +1 -0
  23. package/dist/common/net.js +177 -0
  24. package/dist/common/net.js.map +1 -0
  25. package/dist/common/path.d.ts +51 -0
  26. package/dist/common/path.d.ts.map +1 -0
  27. package/dist/common/path.js +76 -0
  28. package/dist/common/path.js.map +1 -0
  29. package/dist/common/process.d.ts +19 -0
  30. package/dist/common/process.d.ts.map +1 -0
  31. package/dist/common/process.js +67 -0
  32. package/dist/common/process.js.map +1 -0
  33. package/dist/index.d.ts +13 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +13 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/mcp/index.d.ts +3 -0
  38. package/dist/mcp/index.d.ts.map +1 -0
  39. package/dist/mcp/index.js +3 -0
  40. package/dist/mcp/index.js.map +1 -0
  41. package/dist/mcp/sse-adapter.d.ts +82 -0
  42. package/dist/mcp/sse-adapter.d.ts.map +1 -0
  43. package/dist/mcp/sse-adapter.js +201 -0
  44. package/dist/mcp/sse-adapter.js.map +1 -0
  45. package/dist/mcp/stdio-adapter.d.ts +85 -0
  46. package/dist/mcp/stdio-adapter.d.ts.map +1 -0
  47. package/dist/mcp/stdio-adapter.js +203 -0
  48. package/dist/mcp/stdio-adapter.js.map +1 -0
  49. package/dist/memory/fs-memory-system.d.ts +147 -0
  50. package/dist/memory/fs-memory-system.d.ts.map +1 -0
  51. package/dist/memory/fs-memory-system.js +266 -0
  52. package/dist/memory/fs-memory-system.js.map +1 -0
  53. package/dist/memory/index.d.ts +2 -0
  54. package/dist/memory/index.d.ts.map +1 -0
  55. package/dist/memory/index.js +2 -0
  56. package/dist/memory/index.js.map +1 -0
  57. package/dist/observability/index.d.ts +3 -0
  58. package/dist/observability/index.d.ts.map +1 -0
  59. package/dist/observability/index.js +3 -0
  60. package/dist/observability/index.js.map +1 -0
  61. package/dist/observability/jsonl-emitter.d.ts +58 -0
  62. package/dist/observability/jsonl-emitter.d.ts.map +1 -0
  63. package/dist/observability/jsonl-emitter.js +96 -0
  64. package/dist/observability/jsonl-emitter.js.map +1 -0
  65. package/dist/observability/otel-emitter.d.ts +52 -0
  66. package/dist/observability/otel-emitter.d.ts.map +1 -0
  67. package/dist/observability/otel-emitter.js +143 -0
  68. package/dist/observability/otel-emitter.js.map +1 -0
  69. package/dist/providers/anthropic.d.ts +73 -0
  70. package/dist/providers/anthropic.d.ts.map +1 -0
  71. package/dist/providers/anthropic.js +521 -0
  72. package/dist/providers/anthropic.js.map +1 -0
  73. package/dist/providers/index.d.ts +5 -0
  74. package/dist/providers/index.d.ts.map +1 -0
  75. package/dist/providers/index.js +5 -0
  76. package/dist/providers/index.js.map +1 -0
  77. package/dist/providers/mock.d.ts +81 -0
  78. package/dist/providers/mock.d.ts.map +1 -0
  79. package/dist/providers/mock.js +160 -0
  80. package/dist/providers/mock.js.map +1 -0
  81. package/dist/providers/openai.d.ts +95 -0
  82. package/dist/providers/openai.d.ts.map +1 -0
  83. package/dist/providers/openai.js +529 -0
  84. package/dist/providers/openai.js.map +1 -0
  85. package/dist/providers/qwen.d.ts +145 -0
  86. package/dist/providers/qwen.d.ts.map +1 -0
  87. package/dist/providers/qwen.js +669 -0
  88. package/dist/providers/qwen.js.map +1 -0
  89. package/dist/rules/index.d.ts +9 -0
  90. package/dist/rules/index.d.ts.map +1 -0
  91. package/dist/rules/index.js +15 -0
  92. package/dist/rules/index.js.map +1 -0
  93. package/dist/rules/no-hallucination.md +11 -0
  94. package/dist/rules/no-sensitive-output.md +11 -0
  95. package/dist/rules/prefer-concise-response.md +11 -0
  96. package/dist/rules/require-tool-verification.md +11 -0
  97. package/dist/safety/default-gate.d.ts +112 -0
  98. package/dist/safety/default-gate.d.ts.map +1 -0
  99. package/dist/safety/default-gate.js +188 -0
  100. package/dist/safety/default-gate.js.map +1 -0
  101. package/dist/safety/index.d.ts +2 -0
  102. package/dist/safety/index.d.ts.map +1 -0
  103. package/dist/safety/index.js +2 -0
  104. package/dist/safety/index.js.map +1 -0
  105. package/dist/tools/_shared/web-client.d.ts +18 -0
  106. package/dist/tools/_shared/web-client.d.ts.map +1 -0
  107. package/dist/tools/_shared/web-client.js +46 -0
  108. package/dist/tools/_shared/web-client.js.map +1 -0
  109. package/dist/tools/apply-patch/descriptor.md +27 -0
  110. package/dist/tools/apply-patch/executor.d.ts +19 -0
  111. package/dist/tools/apply-patch/executor.d.ts.map +1 -0
  112. package/dist/tools/apply-patch/executor.js +193 -0
  113. package/dist/tools/apply-patch/executor.js.map +1 -0
  114. package/dist/tools/fetch-url/descriptor.md +44 -0
  115. package/dist/tools/fetch-url/executor.d.ts +28 -0
  116. package/dist/tools/fetch-url/executor.d.ts.map +1 -0
  117. package/dist/tools/fetch-url/executor.js +115 -0
  118. package/dist/tools/fetch-url/executor.js.map +1 -0
  119. package/dist/tools/index.d.ts +12 -0
  120. package/dist/tools/index.d.ts.map +1 -0
  121. package/dist/tools/index.js +286 -0
  122. package/dist/tools/index.js.map +1 -0
  123. package/dist/tools/list-dir/descriptor.md +29 -0
  124. package/dist/tools/list-dir/executor.d.ts +22 -0
  125. package/dist/tools/list-dir/executor.d.ts.map +1 -0
  126. package/dist/tools/list-dir/executor.js +48 -0
  127. package/dist/tools/list-dir/executor.js.map +1 -0
  128. package/dist/tools/read-file/descriptor.md +28 -0
  129. package/dist/tools/read-file/executor.d.ts +15 -0
  130. package/dist/tools/read-file/executor.d.ts.map +1 -0
  131. package/dist/tools/read-file/executor.js +22 -0
  132. package/dist/tools/read-file/executor.js.map +1 -0
  133. package/dist/tools/run-shell/descriptor.md +39 -0
  134. package/dist/tools/run-shell/executor.d.ts +20 -0
  135. package/dist/tools/run-shell/executor.d.ts.map +1 -0
  136. package/dist/tools/run-shell/executor.js +76 -0
  137. package/dist/tools/run-shell/executor.js.map +1 -0
  138. package/dist/tools/search-code/descriptor.md +31 -0
  139. package/dist/tools/search-code/executor.d.ts +23 -0
  140. package/dist/tools/search-code/executor.d.ts.map +1 -0
  141. package/dist/tools/search-code/executor.js +122 -0
  142. package/dist/tools/search-code/executor.js.map +1 -0
  143. package/dist/tools/shared.d.ts +47 -0
  144. package/dist/tools/shared.d.ts.map +1 -0
  145. package/dist/tools/shared.js +27 -0
  146. package/dist/tools/shared.js.map +1 -0
  147. package/dist/tools/web-fetch/descriptor.md +198 -0
  148. package/dist/tools/web-fetch/errors.d.ts +32 -0
  149. package/dist/tools/web-fetch/errors.d.ts.map +1 -0
  150. package/dist/tools/web-fetch/errors.js +91 -0
  151. package/dist/tools/web-fetch/errors.js.map +1 -0
  152. package/dist/tools/web-fetch/executor.d.ts +10 -0
  153. package/dist/tools/web-fetch/executor.d.ts.map +1 -0
  154. package/dist/tools/web-fetch/executor.js +191 -0
  155. package/dist/tools/web-fetch/executor.js.map +1 -0
  156. package/dist/tools/web-fetch/index.d.ts +4 -0
  157. package/dist/tools/web-fetch/index.d.ts.map +1 -0
  158. package/dist/tools/web-fetch/index.js +3 -0
  159. package/dist/tools/web-fetch/index.js.map +1 -0
  160. package/dist/tools/web-fetch/types.d.ts +157 -0
  161. package/dist/tools/web-fetch/types.d.ts.map +1 -0
  162. package/dist/tools/web-fetch/types.js +7 -0
  163. package/dist/tools/web-fetch/types.js.map +1 -0
  164. package/dist/tools/web-search/descriptor.md +89 -0
  165. package/dist/tools/web-search/errors.d.ts +33 -0
  166. package/dist/tools/web-search/errors.d.ts.map +1 -0
  167. package/dist/tools/web-search/errors.js +45 -0
  168. package/dist/tools/web-search/errors.js.map +1 -0
  169. package/dist/tools/web-search/executor.d.ts +10 -0
  170. package/dist/tools/web-search/executor.d.ts.map +1 -0
  171. package/dist/tools/web-search/executor.js +185 -0
  172. package/dist/tools/web-search/executor.js.map +1 -0
  173. package/dist/tools/web-search/index.d.ts +4 -0
  174. package/dist/tools/web-search/index.d.ts.map +1 -0
  175. package/dist/tools/web-search/index.js +3 -0
  176. package/dist/tools/web-search/index.js.map +1 -0
  177. package/dist/tools/web-search/types.d.ts +86 -0
  178. package/dist/tools/web-search/types.d.ts.map +1 -0
  179. package/dist/tools/web-search/types.js +7 -0
  180. package/dist/tools/web-search/types.js.map +1 -0
  181. package/dist/tools/write-file/descriptor.md +30 -0
  182. package/dist/tools/write-file/executor.d.ts +16 -0
  183. package/dist/tools/write-file/executor.d.ts.map +1 -0
  184. package/dist/tools/write-file/executor.js +18 -0
  185. package/dist/tools/write-file/executor.js.map +1 -0
  186. package/dist/transformers/document-to-text.d.ts +23 -0
  187. package/dist/transformers/document-to-text.d.ts.map +1 -0
  188. package/dist/transformers/document-to-text.js +69 -0
  189. package/dist/transformers/document-to-text.js.map +1 -0
  190. package/dist/transformers/image-to-text.d.ts +38 -0
  191. package/dist/transformers/image-to-text.d.ts.map +1 -0
  192. package/dist/transformers/image-to-text.js +82 -0
  193. package/dist/transformers/image-to-text.js.map +1 -0
  194. package/dist/transformers/index.d.ts +3 -0
  195. package/dist/transformers/index.d.ts.map +1 -0
  196. package/dist/transformers/index.js +3 -0
  197. package/dist/transformers/index.js.map +1 -0
  198. package/dist/vector/index.d.ts +3 -0
  199. package/dist/vector/index.d.ts.map +1 -0
  200. package/dist/vector/index.js +3 -0
  201. package/dist/vector/index.js.map +1 -0
  202. package/dist/vector/local-fs.d.ts +76 -0
  203. package/dist/vector/local-fs.d.ts.map +1 -0
  204. package/dist/vector/local-fs.js +153 -0
  205. package/dist/vector/local-fs.js.map +1 -0
  206. package/dist/vector/qdrant.d.ts +85 -0
  207. package/dist/vector/qdrant.d.ts.map +1 -0
  208. package/dist/vector/qdrant.js +208 -0
  209. package/dist/vector/qdrant.js.map +1 -0
  210. package/package.json +74 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,58 @@
1
+ import type { EngineEvent, ObservabilityEmitter } from "@tachu/core";
2
+ type EventHandler = (event: EngineEvent) => void;
3
+ interface JsonlEmitterOptions {
4
+ filePath: string;
5
+ rotateSize?: number;
6
+ }
7
+ /**
8
+ * JSON Lines 文件事件发射器。
9
+ */
10
+ export declare class JsonlEmitter implements ObservabilityEmitter {
11
+ private readonly handlers;
12
+ private readonly filePath;
13
+ private readonly rotateSize;
14
+ private masker;
15
+ private writeQueue;
16
+ /**
17
+ * 创建 JSONL 发射器。
18
+ *
19
+ * @param options 文件配置
20
+ */
21
+ constructor(options: JsonlEmitterOptions);
22
+ /**
23
+ * 订阅事件。
24
+ *
25
+ * @param type 事件类型
26
+ * @param handler 处理器
27
+ * @returns 取消订阅函数
28
+ */
29
+ on(type: EngineEvent["type"] | "*", handler: EventHandler): () => void;
30
+ /**
31
+ * 取消订阅。
32
+ *
33
+ * @param type 事件类型
34
+ * @param handler 处理器
35
+ */
36
+ off(type: EngineEvent["type"] | "*", handler: EventHandler): void;
37
+ /**
38
+ * 发射并持久化事件。
39
+ *
40
+ * @param event 引擎事件
41
+ */
42
+ emit(event: EngineEvent): void;
43
+ /**
44
+ * 设置脱敏函数。
45
+ *
46
+ * @param masker 脱敏函数
47
+ */
48
+ setMasker(masker: (payload: unknown) => unknown): void;
49
+ /**
50
+ * 等待队列写入完成。
51
+ */
52
+ dispose(): Promise<void>;
53
+ private emitToSubscribers;
54
+ private append;
55
+ private rotateIfNeeded;
56
+ }
57
+ export {};
58
+ //# sourceMappingURL=jsonl-emitter.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,96 @@
1
+ import { mkdir, rename, stat, writeFile } from "node:fs/promises";
2
+ import { dirname } from "node:path";
3
+ /**
4
+ * JSON Lines 文件事件发射器。
5
+ */
6
+ export class JsonlEmitter {
7
+ handlers = new Map();
8
+ filePath;
9
+ rotateSize;
10
+ masker = (payload) => payload;
11
+ writeQueue = Promise.resolve();
12
+ /**
13
+ * 创建 JSONL 发射器。
14
+ *
15
+ * @param options 文件配置
16
+ */
17
+ constructor(options) {
18
+ this.filePath = options.filePath;
19
+ this.rotateSize = options.rotateSize ?? 10 * 1024 * 1024;
20
+ }
21
+ /**
22
+ * 订阅事件。
23
+ *
24
+ * @param type 事件类型
25
+ * @param handler 处理器
26
+ * @returns 取消订阅函数
27
+ */
28
+ on(type, handler) {
29
+ const bucket = this.handlers.get(type) ?? new Set();
30
+ bucket.add(handler);
31
+ this.handlers.set(type, bucket);
32
+ return () => this.off(type, handler);
33
+ }
34
+ /**
35
+ * 取消订阅。
36
+ *
37
+ * @param type 事件类型
38
+ * @param handler 处理器
39
+ */
40
+ off(type, handler) {
41
+ const bucket = this.handlers.get(type);
42
+ bucket?.delete(handler);
43
+ if (bucket && bucket.size === 0) {
44
+ this.handlers.delete(type);
45
+ }
46
+ }
47
+ /**
48
+ * 发射并持久化事件。
49
+ *
50
+ * @param event 引擎事件
51
+ */
52
+ emit(event) {
53
+ const maskedEvent = {
54
+ ...event,
55
+ payload: this.masker(event.payload),
56
+ };
57
+ this.emitToSubscribers(maskedEvent);
58
+ this.writeQueue = this.writeQueue.then(() => this.append(maskedEvent)).catch(() => undefined);
59
+ }
60
+ /**
61
+ * 设置脱敏函数。
62
+ *
63
+ * @param masker 脱敏函数
64
+ */
65
+ setMasker(masker) {
66
+ this.masker = masker;
67
+ }
68
+ /**
69
+ * 等待队列写入完成。
70
+ */
71
+ async dispose() {
72
+ await this.writeQueue;
73
+ }
74
+ emitToSubscribers(event) {
75
+ for (const handler of this.handlers.get(event.type) ?? []) {
76
+ handler(event);
77
+ }
78
+ for (const handler of this.handlers.get("*") ?? []) {
79
+ handler(event);
80
+ }
81
+ }
82
+ async append(event) {
83
+ await mkdir(dirname(this.filePath), { recursive: true });
84
+ await this.rotateIfNeeded();
85
+ await writeFile(this.filePath, `${JSON.stringify(event)}\n`, { flag: "a" });
86
+ }
87
+ async rotateIfNeeded() {
88
+ const info = await stat(this.filePath).catch(() => null);
89
+ if (!info || info.size < this.rotateSize) {
90
+ return;
91
+ }
92
+ const rotatedPath = `${this.filePath}.${Date.now()}.jsonl`;
93
+ await rename(this.filePath, rotatedPath);
94
+ }
95
+ }
96
+ //# sourceMappingURL=jsonl-emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonl-emitter.js","sourceRoot":"","sources":["../../src/observability/jsonl-emitter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { EngineEvent, ObservabilityEmitter } from "@tachu/core";
2
+ import type { Tracer } from "@opentelemetry/api";
3
+ type EventHandler = (event: EngineEvent) => void;
4
+ /**
5
+ * 基于 OpenTelemetry 的 ObservabilityEmitter 实现。
6
+ */
7
+ export declare class OtelEmitter implements ObservabilityEmitter {
8
+ private readonly options;
9
+ private readonly handlers;
10
+ private readonly phaseSpans;
11
+ private masker;
12
+ /**
13
+ * 创建 OTel 发射器。
14
+ *
15
+ * @param options 构造参数
16
+ */
17
+ constructor(options: {
18
+ tracer: Tracer;
19
+ });
20
+ /**
21
+ * 订阅事件。
22
+ *
23
+ * @param type 事件类型
24
+ * @param handler 处理器
25
+ * @returns 取消订阅函数
26
+ */
27
+ on(type: EngineEvent["type"] | "*", handler: EventHandler): () => void;
28
+ /**
29
+ * 取消订阅。
30
+ *
31
+ * @param type 事件类型
32
+ * @param handler 处理器
33
+ */
34
+ off(type: EngineEvent["type"] | "*", handler: EventHandler): void;
35
+ /**
36
+ * 发射事件并映射到 OTel Span。
37
+ *
38
+ * @param event 引擎事件
39
+ */
40
+ emit(event: EngineEvent): void;
41
+ /**
42
+ * 配置 payload 脱敏函数。
43
+ *
44
+ * @param masker 脱敏函数
45
+ */
46
+ setMasker(masker: (payload: unknown) => unknown): void;
47
+ private emitToSubscribers;
48
+ private emitToOtel;
49
+ private setIfPresent;
50
+ }
51
+ export {};
52
+ //# sourceMappingURL=otel-emitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otel-emitter.d.ts","sourceRoot":"","sources":["../../src/observability/otel-emitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAGjD,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;AAEjD;;GAEG;AACH,qBAAa,WAAY,YAAW,oBAAoB;IAU1C,OAAO,CAAC,QAAQ,CAAC,OAAO;IATpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2D;IACpF,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsD;IACjF,OAAO,CAAC,MAAM,CAAuD;IAErE;;;;OAIG;gBAC0B,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE;IAExD;;;;;;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,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,UAAU;IAiElB,OAAO,CAAC,YAAY;CASrB"}
@@ -0,0 +1,143 @@
1
+ import { context, trace, SpanStatusCode } from "@opentelemetry/api";
2
+ /**
3
+ * 基于 OpenTelemetry 的 ObservabilityEmitter 实现。
4
+ */
5
+ export class OtelEmitter {
6
+ options;
7
+ handlers = new Map();
8
+ phaseSpans = new Map();
9
+ masker = (payload) => payload;
10
+ /**
11
+ * 创建 OTel 发射器。
12
+ *
13
+ * @param options 构造参数
14
+ */
15
+ constructor(options) {
16
+ this.options = options;
17
+ }
18
+ /**
19
+ * 订阅事件。
20
+ *
21
+ * @param type 事件类型
22
+ * @param handler 处理器
23
+ * @returns 取消订阅函数
24
+ */
25
+ on(type, handler) {
26
+ const bucket = this.handlers.get(type) ?? new Set();
27
+ bucket.add(handler);
28
+ this.handlers.set(type, bucket);
29
+ return () => this.off(type, handler);
30
+ }
31
+ /**
32
+ * 取消订阅。
33
+ *
34
+ * @param type 事件类型
35
+ * @param handler 处理器
36
+ */
37
+ off(type, handler) {
38
+ const bucket = this.handlers.get(type);
39
+ bucket?.delete(handler);
40
+ if (bucket && bucket.size === 0) {
41
+ this.handlers.delete(type);
42
+ }
43
+ }
44
+ /**
45
+ * 发射事件并映射到 OTel Span。
46
+ *
47
+ * @param event 引擎事件
48
+ */
49
+ emit(event) {
50
+ const maskedEvent = {
51
+ ...event,
52
+ payload: this.masker(event.payload),
53
+ };
54
+ this.emitToSubscribers(maskedEvent);
55
+ this.emitToOtel(maskedEvent);
56
+ }
57
+ /**
58
+ * 配置 payload 脱敏函数。
59
+ *
60
+ * @param masker 脱敏函数
61
+ */
62
+ setMasker(masker) {
63
+ this.masker = masker;
64
+ }
65
+ emitToSubscribers(event) {
66
+ for (const handler of this.handlers.get(event.type) ?? []) {
67
+ handler(event);
68
+ }
69
+ for (const handler of this.handlers.get("*") ?? []) {
70
+ handler(event);
71
+ }
72
+ }
73
+ emitToOtel(event) {
74
+ const phaseKey = `${event.traceId}:${event.sessionId}:${event.phase}`;
75
+ if (event.type === "phase_enter") {
76
+ const span = this.options.tracer.startSpan(`phase:${event.phase}`, {
77
+ attributes: {
78
+ "engine.trace_id": event.traceId,
79
+ "engine.session_id": event.sessionId,
80
+ "engine.phase": event.phase,
81
+ },
82
+ startTime: event.timestamp,
83
+ });
84
+ this.phaseSpans.set(phaseKey, span);
85
+ return;
86
+ }
87
+ if (event.type === "phase_exit") {
88
+ const span = this.phaseSpans.get(phaseKey);
89
+ if (span) {
90
+ if (event.payload.error) {
91
+ span.recordException(event.payload.error);
92
+ span.setStatus({ code: SpanStatusCode.ERROR, message: "phase failed" });
93
+ }
94
+ else {
95
+ span.setStatus({ code: SpanStatusCode.OK });
96
+ }
97
+ span.end(event.timestamp);
98
+ this.phaseSpans.delete(phaseKey);
99
+ }
100
+ return;
101
+ }
102
+ const parent = this.phaseSpans.get(phaseKey);
103
+ const parentContext = parent ? trace.setSpan(context.active(), parent) : context.active();
104
+ const span = this.options.tracer.startSpan(`event:${event.type}`, {
105
+ attributes: {
106
+ "engine.trace_id": event.traceId,
107
+ "engine.session_id": event.sessionId,
108
+ "engine.phase": event.phase,
109
+ "engine.event_type": event.type,
110
+ },
111
+ startTime: event.timestamp,
112
+ }, parentContext);
113
+ if (event.type.startsWith("llm")) {
114
+ this.setIfPresent(span, "llm.provider", event.payload.provider);
115
+ this.setIfPresent(span, "llm.model", event.payload.model);
116
+ this.setIfPresent(span, "llm.tokens.prompt", event.payload.promptTokens);
117
+ this.setIfPresent(span, "llm.tokens.completion", event.payload.completionTokens);
118
+ }
119
+ if (event.type.startsWith("tool")) {
120
+ this.setIfPresent(span, "tool.name", event.payload.name);
121
+ this.setIfPresent(span, "tool.side_effect", event.payload.sideEffect);
122
+ }
123
+ if (event.type === "error" || event.payload.error) {
124
+ span.setStatus({ code: SpanStatusCode.ERROR, message: "engine error" });
125
+ if (event.payload.error instanceof Error) {
126
+ span.recordException(event.payload.error);
127
+ }
128
+ else if (event.payload.error) {
129
+ span.recordException(new Error(String(event.payload.error)));
130
+ }
131
+ }
132
+ else {
133
+ span.setStatus({ code: SpanStatusCode.OK });
134
+ }
135
+ span.end(event.timestamp);
136
+ }
137
+ setIfPresent(span, key, value) {
138
+ if (value !== undefined) {
139
+ span.setAttribute(key, value);
140
+ }
141
+ }
142
+ }
143
+ //# sourceMappingURL=otel-emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otel-emitter.js","sourceRoot":"","sources":["../../src/observability/otel-emitter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIpE;;GAEG;AACH,MAAM,OAAO,WAAW;IAUO;IATZ,QAAQ,GAAG,IAAI,GAAG,EAAgD,CAAC;IACnE,UAAU,GAAG,IAAI,GAAG,EAA2C,CAAC;IACzE,MAAM,GAAkC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;IAErE;;;;OAIG;IACH,YAA6B,OAA2B;QAA3B,YAAO,GAAP,OAAO,CAAoB;IAAG,CAAC;IAE5D;;;;;;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,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,MAAqC;QAC7C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,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,UAAU,CAAC,KAAkB;QACnC,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QACtE,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,KAAK,CAAC,KAAK,EAAE,EAAE;gBACjE,UAAU,EAAE;oBACV,iBAAiB,EAAE,KAAK,CAAC,OAAO;oBAChC,mBAAmB,EAAE,KAAK,CAAC,SAAS;oBACpC,cAAc,EAAE,KAAK,CAAC,KAAK;iBAC5B;gBACD,SAAS,EAAE,KAAK,CAAC,SAAS;aAC3B,CAAC,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC3C,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;oBACxB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,KAAc,CAAC,CAAC;oBACnD,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;gBAC1E,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC9C,CAAC;gBACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC1B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACnC,CAAC;YACD,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1F,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,KAAK,CAAC,IAAI,EAAE,EAAE;YAChE,UAAU,EAAE;gBACV,iBAAiB,EAAE,KAAK,CAAC,OAAO;gBAChC,mBAAmB,EAAE,KAAK,CAAC,SAAS;gBACpC,cAAc,EAAE,KAAK,CAAC,KAAK;gBAC3B,mBAAmB,EAAE,KAAK,CAAC,IAAI;aAChC;YACD,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B,EAAE,aAAa,CAAC,CAAC;QAElB,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAChE,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC1D,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,mBAAmB,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACzE,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,uBAAuB,EAAE,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACnF,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACzD,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,kBAAkB,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAClD,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;YACxE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,YAAY,KAAK,EAAE,CAAC;gBACzC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC5C,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBAC/B,IAAI,CAAC,eAAe,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC5B,CAAC;IAEO,YAAY,CAClB,IAAqC,EACrC,GAAW,EACX,KAAc;QAEd,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAc,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,73 @@
1
+ import { type ChatRequest, type ChatResponse, type ChatStreamChunk, type Message, type ModelInfo, type ProviderAdapter } from "@tachu/core";
2
+ interface AnthropicProviderOptions {
3
+ apiKey?: string;
4
+ baseURL?: string;
5
+ timeoutMs?: number;
6
+ /**
7
+ * 透传给 Anthropic SDK 构造器的附加选项(对应 `ProviderConnectionConfig.extra`)。
8
+ *
9
+ * 典型用途:`defaultHeaders` / `defaultQuery` / `httpAgent` 等 SDK 支持但未在
10
+ * {@link AnthropicProviderOptions} 显式暴露的字段。仅当值非空时与显式字段浅合并。
11
+ */
12
+ extra?: Record<string, unknown>;
13
+ /**
14
+ * `listAvailableModels` TTL 缓存窗口(ms)。默认 60_000;<=0 关闭缓存。
15
+ */
16
+ modelListCacheTtlMs?: number;
17
+ }
18
+ /**
19
+ * Anthropic 官方 Provider Adapter。
20
+ */
21
+ export declare class AnthropicProviderAdapter implements ProviderAdapter {
22
+ readonly id = "anthropic";
23
+ readonly name = "Anthropic";
24
+ private readonly client;
25
+ private readonly timeoutMs;
26
+ /**
27
+ * `listAvailableModels` TTL 缓存(D1-LOW-22),默认 60s,避免反复命中远端 `/v1/models`。
28
+ */
29
+ private modelListCache;
30
+ private readonly modelListCacheTtlMs;
31
+ /**
32
+ * 创建 Anthropic Provider。
33
+ *
34
+ * @param options Provider 配置
35
+ * @throws ProviderError 缺失凭据时抛出
36
+ */
37
+ constructor(options?: AnthropicProviderOptions);
38
+ /**
39
+ * 调用 Anthropic `/v1/models` 返回**动态**模型清单(SDK 0.30+)。
40
+ *
41
+ * 若 SDK 调用异常(鉴权失败、网络异常、SDK 旧版本无此接口等),退化为
42
+ * {@link FALLBACK_MODELS} 静态清单以保证上层 ModelRouter 不会因单次列表失败
43
+ * 而整体不可用;真实错误已通过 `mapProviderError` 转成结构化错误抛给
44
+ * 诊断链路(此处吞错并落 fallback 是出于鲁棒性考虑)。
45
+ */
46
+ listAvailableModels(): Promise<ModelInfo[]>;
47
+ /**
48
+ * 发起非流式对话请求。
49
+ *
50
+ * @param request 对话请求
51
+ * @param signal 可选取消信号
52
+ * @returns 对话响应
53
+ */
54
+ chat(request: ChatRequest, signal?: AbortSignal): Promise<ChatResponse>;
55
+ /**
56
+ * 发起流式对话请求。
57
+ *
58
+ * @param request 对话请求
59
+ * @param signal 可选取消信号
60
+ * @returns 流式分片
61
+ */
62
+ chatStream(request: ChatRequest, signal?: AbortSignal): AsyncIterable<ChatStreamChunk>;
63
+ /**
64
+ * 调用官方 countTokens 接口做精确计数。
65
+ *
66
+ * @param messages 消息列表
67
+ * @param model 模型名
68
+ * @returns token 数
69
+ */
70
+ countTokens(messages: Message[], model: string): Promise<number>;
71
+ }
72
+ export {};
73
+ //# sourceMappingURL=anthropic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,eAAe,EAGrB,MAAM,aAAa,CAAC;AAIrB,UAAU,wBAAwB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAiRD;;GAEG;AACH,qBAAa,wBAAyB,YAAW,eAAe;IAC9D,QAAQ,CAAC,EAAE,eAAe;IAC1B,QAAQ,CAAC,IAAI,eAAe;IAE5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC;;OAEG;IACH,OAAO,CAAC,cAAc,CAAmD;IACzE,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAE7C;;;;;OAKG;gBACS,OAAO,GAAE,wBAA6B;IAiBlD;;;;;;;OAOG;IACG,mBAAmB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAkCjD;;;;;;OAMG;IACG,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAkE7E;;;;;;OAMG;IACI,UAAU,CACf,OAAO,EAAE,WAAW,EACpB,MAAM,CAAC,EAAE,WAAW,GACnB,aAAa,CAAC,eAAe,CAAC;IAkJjC;;;;;;OAMG;IACG,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAYvE"}