@tachu/extensions 1.0.0-beta.1 → 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 (243) hide show
  1. package/CHANGELOG.md +41 -66
  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,216 @@
1
+ import { existsSync } from "node:fs";
2
+ import { mkdir, open, readFile, rename, rm, writeFile } from "node:fs/promises";
3
+ import { dirname } from "node:path";
4
+ import { ProviderError, } from "@tachu/core";
5
+ function cosineSimilarity(a, b) {
6
+ const length = Math.min(a.length, b.length);
7
+ if (length === 0)
8
+ return 0;
9
+ let dot = 0;
10
+ let aNorm = 0;
11
+ let bNorm = 0;
12
+ for (let i = 0; i < length; i += 1) {
13
+ const ai = a[i] ?? 0;
14
+ const bi = b[i] ?? 0;
15
+ dot += ai * bi;
16
+ aNorm += ai * ai;
17
+ bNorm += bi * bi;
18
+ }
19
+ if (aNorm === 0 || bNorm === 0)
20
+ return 0;
21
+ return dot / (Math.sqrt(aNorm) * Math.sqrt(bNorm));
22
+ }
23
+ function payloadMatchesFilters(payload, filters) {
24
+ const must = filters.must ?? {};
25
+ for (const [key, value] of Object.entries(must)) {
26
+ if (payload[key] !== value)
27
+ return false;
28
+ }
29
+ return true;
30
+ }
31
+ /**
32
+ * Pure-vector local filesystem index ( / / ).
33
+ *
34
+ * - Accepts only precomputed numeric `VectorPoint`s. Text-only `upsert(id, string, …)`
35
+ * shortcuts from pre- hosts are rejected — production projection paths
36
+ * must embed via {@link EmbeddingRuntime} before reaching this adapter.
37
+ * - Persisted as a single JSON snapshot at `.tachu/vector-index.json` with
38
+ * debounced atomic rewrites; safe for the CLI default deployment without
39
+ * pulling in an external vector database.
40
+ * - Implements {@link VectorIndexAdapter}, the only interface the
41
+ * {@link ProjectionWorker} and {@link DefaultSemanticRetrievalFacade}
42
+ * consume in production wiring.
43
+ */
44
+ export class LocalFsVectorIndexAdapter {
45
+ filePath;
46
+ lockPath;
47
+ persistDebounceMs;
48
+ indexLimit;
49
+ entries = new Map();
50
+ initPromise;
51
+ persistTimer;
52
+ persisting = Promise.resolve();
53
+ constructor(options = {}) {
54
+ this.filePath = options.filePath ?? ".tachu/vector-index.json";
55
+ this.lockPath = `${this.filePath}.lock`;
56
+ this.persistDebounceMs = options.persistDebounceMs ?? 500;
57
+ this.indexLimit = options.indexLimit ?? 100_000;
58
+ this.initPromise = this.loadFromDisk();
59
+ }
60
+ async upsert(points, _ctx, signal) {
61
+ signal?.throwIfAborted();
62
+ await this.initPromise;
63
+ for (const point of points) {
64
+ if (typeof point.id !== "string" || point.id.length === 0) {
65
+ throw new ProviderError("PROVIDER_INVALID_REQUEST", "LocalFsVectorIndexAdapter.upsert requires a non-empty point id", { retryable: false });
66
+ }
67
+ if (!Array.isArray(point.vector) || point.vector.length === 0) {
68
+ throw new ProviderError("PROVIDER_INVALID_REQUEST", `LocalFsVectorIndexAdapter.upsert requires a numeric vector for ${point.id}; ` +
69
+ "legacy string-embed shortcuts are not supported", { retryable: false });
70
+ }
71
+ if (point.vector.some((value) => typeof value !== "number")) {
72
+ throw new ProviderError("PROVIDER_INVALID_REQUEST", `LocalFsVectorIndexAdapter.upsert vector for ${point.id} contains non-numeric values`, { retryable: false });
73
+ }
74
+ const cloned = {
75
+ id: point.id,
76
+ vector: [...point.vector],
77
+ payload: { ...(point.payload ?? {}) },
78
+ };
79
+ if (!this.entries.has(point.id) && this.entries.size >= this.indexLimit) {
80
+ // FIFO eviction: drop the oldest entry to keep the file bounded.
81
+ const oldest = this.entries.keys().next();
82
+ if (!oldest.done && oldest.value !== undefined) {
83
+ this.entries.delete(oldest.value);
84
+ }
85
+ }
86
+ this.entries.set(point.id, cloned);
87
+ }
88
+ this.schedulePersist();
89
+ }
90
+ async searchVector(query, topK, filters, _ctx, signal) {
91
+ signal?.throwIfAborted();
92
+ await this.initPromise;
93
+ if (!Array.isArray(query) || query.some((value) => typeof value !== "number")) {
94
+ throw new ProviderError("PROVIDER_INVALID_REQUEST", "LocalFsVectorIndexAdapter.searchVector requires a numeric query vector", { retryable: false });
95
+ }
96
+ const k = Math.max(0, Math.floor(topK));
97
+ if (k === 0)
98
+ return [];
99
+ const ranked = [];
100
+ for (const entry of this.entries.values()) {
101
+ if (!payloadMatchesFilters(entry.payload, filters))
102
+ continue;
103
+ const score = cosineSimilarity(query, entry.vector);
104
+ ranked.push({ id: entry.id, score, metadata: { ...entry.payload } });
105
+ }
106
+ ranked.sort((a, b) => b.score - a.score);
107
+ return ranked.slice(0, k);
108
+ }
109
+ async delete(ids, _ctx, signal) {
110
+ signal?.throwIfAborted();
111
+ await this.initPromise;
112
+ if (ids.length === 0)
113
+ return;
114
+ let changed = false;
115
+ for (const id of ids) {
116
+ if (this.entries.delete(id))
117
+ changed = true;
118
+ }
119
+ if (changed)
120
+ this.schedulePersist();
121
+ }
122
+ /** Test-only inspection helper. Not part of the {@link VectorIndexAdapter} contract. */
123
+ snapshot() {
124
+ return [...this.entries.values()].map((entry) => ({
125
+ id: entry.id,
126
+ vector: [...entry.vector],
127
+ payload: { ...entry.payload },
128
+ }));
129
+ }
130
+ /**
131
+ * Flush any pending writes synchronously. Hosts wiring this adapter into a
132
+ * graceful shutdown should `await flush()` before the process exits to avoid
133
+ * losing buffered upserts.
134
+ */
135
+ async flush() {
136
+ if (this.persistTimer !== undefined) {
137
+ clearTimeout(this.persistTimer);
138
+ this.persistTimer = undefined;
139
+ }
140
+ this.persisting = this.persisting.then(() => this.persistToDisk());
141
+ await this.persisting;
142
+ }
143
+ async loadFromDisk() {
144
+ const raw = await readFile(this.filePath, "utf8").catch(() => "");
145
+ if (!raw)
146
+ return;
147
+ let payload;
148
+ try {
149
+ payload = JSON.parse(raw);
150
+ }
151
+ catch {
152
+ return;
153
+ }
154
+ for (const entry of payload.entries ?? []) {
155
+ if (typeof entry?.id !== "string" ||
156
+ !Array.isArray(entry.vector) ||
157
+ entry.vector.some((value) => typeof value !== "number")) {
158
+ continue;
159
+ }
160
+ this.entries.set(entry.id, {
161
+ id: entry.id,
162
+ vector: [...entry.vector],
163
+ payload: { ...(entry.payload ?? {}) },
164
+ });
165
+ }
166
+ }
167
+ schedulePersist() {
168
+ if (this.persistTimer)
169
+ clearTimeout(this.persistTimer);
170
+ this.persistTimer = setTimeout(() => {
171
+ this.persisting = this.persisting.then(() => this.persistToDisk());
172
+ }, this.persistDebounceMs);
173
+ }
174
+ async acquireLock() {
175
+ for (let attempt = 0; attempt < 30; attempt += 1) {
176
+ try {
177
+ await mkdir(dirname(this.lockPath), { recursive: true });
178
+ const handle = await open(this.lockPath, "wx");
179
+ return async () => {
180
+ await handle.close().catch(() => undefined);
181
+ await rm(this.lockPath, { force: true }).catch(() => undefined);
182
+ };
183
+ }
184
+ catch {
185
+ await new Promise((resolve) => setTimeout(resolve, 50 * (attempt + 1)));
186
+ }
187
+ }
188
+ throw new Error(`无法获取文件锁: ${this.lockPath}`);
189
+ }
190
+ async persistToDisk() {
191
+ const release = await this.acquireLock();
192
+ try {
193
+ await mkdir(dirname(this.filePath), { recursive: true });
194
+ const tempPath = `${this.filePath}.tmp`;
195
+ const payload = {
196
+ version: 1,
197
+ entries: [...this.entries.values()].map((entry) => ({
198
+ id: entry.id,
199
+ vector: [...entry.vector],
200
+ payload: { ...entry.payload },
201
+ })),
202
+ };
203
+ await writeFile(tempPath, JSON.stringify(payload), "utf8");
204
+ await rename(tempPath, this.filePath);
205
+ }
206
+ finally {
207
+ await release();
208
+ }
209
+ }
210
+ // Keep `existsSync` reachable so tree-shakers don't drop the dependency
211
+ // when callers only invoke async paths.
212
+ static fileExists(path) {
213
+ return existsSync(path);
214
+ }
215
+ }
216
+ //# sourceMappingURL=local-fs-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-fs-index.js","sourceRoot":"","sources":["../../src/vector/local-fs-index.ts"],"names":[],"mappings":"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"}
@@ -1,65 +1,24 @@
1
- import { type VectorSearchResult, type VectorStore } from "@tachu/core";
2
- interface QdrantVectorStoreOptions {
1
+ import { type AdapterCallContext, type VectorHit, type VectorIndexAdapter, type VectorPayloadFilter, type VectorPoint } from "@tachu/core";
2
+ export interface QdrantVectorIndexAdapterOptions {
3
3
  url: string;
4
4
  apiKey?: string;
5
5
  collectionName: string;
6
- vectorSize?: number;
6
+ vectorSize: number;
7
7
  }
8
8
  /**
9
- * Qdrant 远程向量存储适配器。
9
+ * Qdrant pure vector index adapter (). No text embedding — vectors must be precomputed.
10
10
  */
11
- export declare class QdrantVectorStore implements VectorStore {
11
+ export declare class QdrantVectorIndexAdapter implements VectorIndexAdapter {
12
12
  private readonly client;
13
13
  private readonly collectionName;
14
14
  private readonly vectorSize;
15
15
  private ensured;
16
- private entryCount;
17
- /**
18
- * 创建 Qdrant 向量存储。
19
- *
20
- * @param options Qdrant 连接配置
21
- */
22
- constructor(options: QdrantVectorStoreOptions);
23
- /**
24
- * 文本向量化(本地哈希嵌入)。
25
- *
26
- * @param texts 文本数组
27
- * @returns 向量数组
28
- */
29
- embed(texts: string[]): Promise<number[][]>;
30
- /**
31
- * 写入或更新向量。
32
- *
33
- * @param id 条目 ID
34
- * @param vectorOrText 向量或文本
35
- * @param metadata 元数据
36
- */
37
- upsert(id: string, vectorOrText: number[] | string, metadata: Record<string, unknown>): Promise<void>;
38
- /**
39
- * 相似度搜索。
40
- *
41
- * @param query 查询向量或文本
42
- * @param topK 结果数量
43
- * @returns 搜索结果
44
- */
45
- search(query: number[] | string, topK: number): Promise<VectorSearchResult[]>;
46
- /**
47
- * 删除条目。
48
- *
49
- * @param id 条目 ID
50
- */
51
- delete(id: string): Promise<void>;
52
- /**
53
- * 清空集合。
54
- */
55
- clear(): Promise<void>;
56
- /**
57
- * 返回估算条目数量。
58
- *
59
- * @returns 条目数
60
- */
61
- size(): number;
16
+ constructor(options: QdrantVectorIndexAdapterOptions);
17
+ upsert(points: readonly VectorPoint[], _ctx: AdapterCallContext, signal?: AbortSignal): Promise<void>;
18
+ searchVector(query: number[], topK: number, filters: VectorPayloadFilter, _ctx: AdapterCallContext, signal?: AbortSignal): Promise<VectorHit[]>;
19
+ delete(ids: readonly string[], _ctx: AdapterCallContext, signal?: AbortSignal): Promise<void>;
62
20
  private ensureCollection;
63
21
  }
64
- export {};
22
+ /** @deprecated Use {@link QdrantVectorIndexAdapter} (). */
23
+ export { QdrantVectorIndexAdapter as QdrantVectorStore };
65
24
  //# sourceMappingURL=qdrant.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"qdrant.d.ts","sourceRoot":"","sources":["../../src/vector/qdrant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,kBAAkB,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAGvF,UAAU,wBAAwB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAgCD;;GAEG;AACH,qBAAa,iBAAkB,YAAW,WAAW;IACnD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAK;IAEvB;;;;OAIG;gBACS,OAAO,EAAE,wBAAwB;IAS7C;;;;;OAKG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAIjD;;;;;;OAMG;IACG,MAAM,CACV,EAAE,EAAE,MAAM,EACV,YAAY,EAAE,MAAM,EAAE,GAAG,MAAM,EAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC;IAkBhB;;;;;;OAMG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAsBnF;;;;OAIG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAavC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB5B;;;;OAIG;IACH,IAAI,IAAI,MAAM;YAIA,gBAAgB;CAe/B"}
1
+ {"version":3,"file":"qdrant.d.ts","sourceRoot":"","sources":["../../src/vector/qdrant.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,WAAW,EACjB,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,+BAA+B;IAC9C,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,wBAAyB,YAAW,kBAAkB;IACjE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,+BAA+B;IAS9C,MAAM,CACV,MAAM,EAAE,SAAS,WAAW,EAAE,EAC9B,IAAI,EAAE,kBAAkB,EACxB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC;IA6BV,YAAY,CAChB,KAAK,EAAE,MAAM,EAAE,EACf,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,mBAAmB,EAC5B,IAAI,EAAE,kBAAkB,EACxB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,SAAS,EAAE,CAAC;IAuCjB,MAAM,CACV,GAAG,EAAE,SAAS,MAAM,EAAE,EACtB,IAAI,EAAE,kBAAkB,EACxB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC;YAcF,gBAAgB;CAa/B;AAED,2DAA2D;AAC3D,OAAO,EAAE,wBAAwB,IAAI,iBAAiB,EAAE,CAAC"}
@@ -1,79 +1,38 @@
1
- import { ProviderError } from "@tachu/core";
1
+ import { ProviderError, } from "@tachu/core";
2
2
  import { QdrantClient } from "@qdrant/js-client-rest";
3
- const DEFAULT_VECTOR_SIZE = 256;
4
- const hashToken = (token, size) => {
5
- let hash = 0;
6
- for (let index = 0; index < token.length; index += 1) {
7
- hash = (hash * 31 + token.charCodeAt(index)) >>> 0;
8
- }
9
- return hash % size;
10
- };
11
- const embedText = (text, size) => {
12
- const vector = new Array(size).fill(0);
13
- const tokens = text
14
- .toLowerCase()
15
- .split(/[^a-z0-9\u4e00-\u9fa5]+/u)
16
- .filter((token) => token.length > 0);
17
- if (tokens.length === 0) {
18
- return vector;
19
- }
20
- for (const token of tokens) {
21
- const idx = hashToken(token, size);
22
- vector[idx] += 1;
23
- }
24
- const norm = Math.sqrt(vector.reduce((sum, value) => sum + value * value, 0));
25
- if (norm === 0) {
26
- return vector;
27
- }
28
- return vector.map((value) => value / norm);
29
- };
30
3
  /**
31
- * Qdrant 远程向量存储适配器。
4
+ * Qdrant pure vector index adapter (). No text embedding — vectors must be precomputed.
32
5
  */
33
- export class QdrantVectorStore {
6
+ export class QdrantVectorIndexAdapter {
34
7
  client;
35
8
  collectionName;
36
9
  vectorSize;
37
10
  ensured = false;
38
- entryCount = 0;
39
- /**
40
- * 创建 Qdrant 向量存储。
41
- *
42
- * @param options Qdrant 连接配置
43
- */
44
11
  constructor(options) {
45
12
  this.client = new QdrantClient({
46
13
  url: options.url,
47
14
  ...(options.apiKey ? { apiKey: options.apiKey } : {}),
48
15
  });
49
16
  this.collectionName = options.collectionName;
50
- this.vectorSize = options.vectorSize ?? DEFAULT_VECTOR_SIZE;
51
- }
52
- /**
53
- * 文本向量化(本地哈希嵌入)。
54
- *
55
- * @param texts 文本数组
56
- * @returns 向量数组
57
- */
58
- async embed(texts) {
59
- return texts.map((text) => embedText(text, this.vectorSize));
17
+ this.vectorSize = options.vectorSize;
60
18
  }
61
- /**
62
- * 写入或更新向量。
63
- *
64
- * @param id 条目 ID
65
- * @param vectorOrText 向量或文本
66
- * @param metadata 元数据
67
- */
68
- async upsert(id, vectorOrText, metadata) {
19
+ async upsert(points, _ctx, signal) {
20
+ signal?.throwIfAborted();
21
+ for (const point of points) {
22
+ if (!Array.isArray(point.vector) || point.vector.length !== this.vectorSize) {
23
+ throw new ProviderError("PROVIDER_INVALID_REQUEST", `QdrantVectorIndexAdapter expects vectors of size ${this.vectorSize}`, { retryable: false });
24
+ }
25
+ }
69
26
  try {
70
27
  await this.ensureCollection();
71
- const vector = typeof vectorOrText === "string" ? embedText(vectorOrText, this.vectorSize) : vectorOrText;
72
28
  await this.client.upsert(this.collectionName, {
73
29
  wait: true,
74
- points: [{ id, vector, payload: metadata }],
30
+ points: points.map((point) => ({
31
+ id: point.id,
32
+ vector: point.vector,
33
+ payload: point.payload,
34
+ })),
75
35
  });
76
- this.entryCount += 1;
77
36
  }
78
37
  catch (error) {
79
38
  throw new ProviderError("PROVIDER_UPSTREAM_ERROR", "Qdrant upsert 失败", {
@@ -82,21 +41,26 @@ export class QdrantVectorStore {
82
41
  });
83
42
  }
84
43
  }
85
- /**
86
- * 相似度搜索。
87
- *
88
- * @param query 查询向量或文本
89
- * @param topK 结果数量
90
- * @returns 搜索结果
91
- */
92
- async search(query, topK) {
44
+ async searchVector(query, topK, filters, _ctx, signal) {
45
+ signal?.throwIfAborted();
46
+ if (!Array.isArray(query) || query.some((value) => typeof value !== "number")) {
47
+ throw new ProviderError("PROVIDER_INVALID_REQUEST", "QdrantVectorIndexAdapter.searchVector requires a numeric query vector", { retryable: false });
48
+ }
93
49
  try {
94
50
  await this.ensureCollection();
95
- const vector = typeof query === "string" ? embedText(query, this.vectorSize) : query;
51
+ const filter = filters.must && Object.keys(filters.must).length > 0
52
+ ? {
53
+ must: Object.entries(filters.must).map(([key, val]) => ({
54
+ key,
55
+ match: { value: val },
56
+ })),
57
+ }
58
+ : undefined;
96
59
  const result = await this.client.search(this.collectionName, {
97
- vector,
60
+ vector: query,
98
61
  limit: topK,
99
62
  with_payload: true,
63
+ ...(filter !== undefined ? { filter } : {}),
100
64
  });
101
65
  return result.map((item) => ({
102
66
  id: String(item.id),
@@ -111,16 +75,13 @@ export class QdrantVectorStore {
111
75
  });
112
76
  }
113
77
  }
114
- /**
115
- * 删除条目。
116
- *
117
- * @param id 条目 ID
118
- */
119
- async delete(id) {
78
+ async delete(ids, _ctx, signal) {
79
+ signal?.throwIfAborted();
80
+ if (ids.length === 0)
81
+ return;
120
82
  try {
121
83
  await this.ensureCollection();
122
- await this.client.delete(this.collectionName, { wait: true, points: [id] });
123
- this.entryCount = Math.max(0, this.entryCount - 1);
84
+ await this.client.delete(this.collectionName, { wait: true, points: [...ids] });
124
85
  }
125
86
  catch (error) {
126
87
  throw new ProviderError("PROVIDER_UPSTREAM_ERROR", "Qdrant delete 失败", {
@@ -129,38 +90,9 @@ export class QdrantVectorStore {
129
90
  });
130
91
  }
131
92
  }
132
- /**
133
- * 清空集合。
134
- */
135
- async clear() {
136
- try {
137
- const exists = await this.client.collectionExists(this.collectionName);
138
- if (exists.exists) {
139
- await this.client.deleteCollection(this.collectionName);
140
- }
141
- this.ensured = false;
142
- this.entryCount = 0;
143
- await this.ensureCollection();
144
- }
145
- catch (error) {
146
- throw new ProviderError("PROVIDER_UPSTREAM_ERROR", "Qdrant clear 失败", {
147
- cause: error,
148
- retryable: true,
149
- });
150
- }
151
- }
152
- /**
153
- * 返回估算条目数量。
154
- *
155
- * @returns 条目数
156
- */
157
- size() {
158
- return this.entryCount;
159
- }
160
93
  async ensureCollection() {
161
- if (this.ensured) {
94
+ if (this.ensured)
162
95
  return;
163
- }
164
96
  const exists = await this.client.collectionExists(this.collectionName);
165
97
  if (!exists.exists) {
166
98
  await this.client.createCollection(this.collectionName, {
@@ -173,4 +105,6 @@ export class QdrantVectorStore {
173
105
  this.ensured = true;
174
106
  }
175
107
  }
108
+ /** @deprecated Use {@link QdrantVectorIndexAdapter} (). */
109
+ export { QdrantVectorIndexAdapter as QdrantVectorStore };
176
110
  //# sourceMappingURL=qdrant.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"qdrant.js","sourceRoot":"","sources":["../../src/vector/qdrant.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"qdrant.js","sourceRoot":"","sources":["../../src/vector/qdrant.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tachu/extensions",
3
- "version": "1.0.0-beta.1",
4
- "description": "Tachu extensions — OpenAI/Anthropic/Mock providers, 7 built-in tools, execution backends, MCP adapters (stdio+SSE), vector stores (local/Qdrant), observability emitters, input transformers and common rules.",
3
+ "version": "1.0.0-rc.0",
4
+ "description": "Tachu extensions (release candidate) — OpenAI/Anthropic/Mock providers, 22 built-in tools, execution backends, MCP adapters (stdio+SSE), vector stores (local/Qdrant), observability emitters, input transformers and common rules.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
@@ -10,6 +10,26 @@
10
10
  "types": "./dist/index.d.ts",
11
11
  "import": "./dist/index.js",
12
12
  "default": "./dist/index.js"
13
+ },
14
+ "./providers": {
15
+ "types": "./dist/providers/index.d.ts",
16
+ "import": "./dist/providers/index.js",
17
+ "default": "./dist/providers/index.js"
18
+ },
19
+ "./providers/gemini": {
20
+ "types": "./dist/providers/gemini.d.ts",
21
+ "import": "./dist/providers/gemini.js",
22
+ "default": "./dist/providers/gemini.js"
23
+ },
24
+ "./memory": {
25
+ "types": "./dist/memory/index.d.ts",
26
+ "import": "./dist/memory/index.js",
27
+ "default": "./dist/memory/index.js"
28
+ },
29
+ "./vector": {
30
+ "types": "./dist/vector/index.d.ts",
31
+ "import": "./dist/vector/index.js",
32
+ "default": "./dist/vector/index.js"
13
33
  }
14
34
  },
15
35
  "files": [
@@ -46,7 +66,7 @@
46
66
  "url": "https://github.com/dangaogit/tachu/issues"
47
67
  },
48
68
  "engines": {
49
- "bun": ">=1.3.12"
69
+ "bun": ">=1.3.14"
50
70
  },
51
71
  "publishConfig": {
52
72
  "access": "public",
@@ -54,12 +74,13 @@
54
74
  },
55
75
  "dependencies": {
56
76
  "@anthropic-ai/sdk": "^0.90.0",
77
+ "@google/genai": "^2.3.0",
57
78
  "@modelcontextprotocol/sdk": "^1.29.0",
58
79
  "@opentelemetry/api": "^1.9.1",
59
- "@opentelemetry/sdk-trace-base": "^2.6.1",
60
- "@opentelemetry/sdk-trace-node": "^2.6.1",
80
+ "@opentelemetry/sdk-trace-base": "^2.7.0",
81
+ "@opentelemetry/sdk-trace-node": "^2.7.0",
61
82
  "@qdrant/js-client-rest": "^1.17.0",
62
- "@tachu/core": "0.0.0",
83
+ "@tachu/core": "1.0.0-rc.0",
63
84
  "mammoth": "^1.12.0",
64
85
  "openai": "^6.34.0",
65
86
  "pdf-parse": "^2.4.5"