@sylphx/flow 1.1.0 → 1.2.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 (45) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/package.json +12 -2
  3. package/src/commands/hook-command.ts +10 -230
  4. package/src/composables/index.ts +0 -1
  5. package/src/config/servers.ts +35 -78
  6. package/src/core/interfaces.ts +0 -33
  7. package/src/domains/index.ts +0 -2
  8. package/src/index.ts +0 -4
  9. package/src/services/mcp-service.ts +0 -16
  10. package/src/targets/claude-code.ts +3 -9
  11. package/src/targets/functional/claude-code-logic.ts +4 -22
  12. package/src/targets/opencode.ts +0 -6
  13. package/src/types/mcp.types.ts +29 -38
  14. package/src/types/target.types.ts +0 -2
  15. package/src/types.ts +0 -1
  16. package/src/commands/codebase-command.ts +0 -168
  17. package/src/commands/knowledge-command.ts +0 -161
  18. package/src/composables/useTargetConfig.ts +0 -45
  19. package/src/core/formatting/bytes.test.ts +0 -115
  20. package/src/core/validation/limit.test.ts +0 -155
  21. package/src/core/validation/query.test.ts +0 -44
  22. package/src/domains/codebase/index.ts +0 -5
  23. package/src/domains/codebase/tools.ts +0 -139
  24. package/src/domains/knowledge/index.ts +0 -10
  25. package/src/domains/knowledge/resources.ts +0 -537
  26. package/src/domains/knowledge/tools.ts +0 -174
  27. package/src/services/search/base-indexer.ts +0 -156
  28. package/src/services/search/codebase-indexer-types.ts +0 -38
  29. package/src/services/search/codebase-indexer.ts +0 -647
  30. package/src/services/search/embeddings-provider.ts +0 -455
  31. package/src/services/search/embeddings.ts +0 -316
  32. package/src/services/search/functional-indexer.ts +0 -323
  33. package/src/services/search/index.ts +0 -27
  34. package/src/services/search/indexer.ts +0 -380
  35. package/src/services/search/knowledge-indexer.ts +0 -422
  36. package/src/services/search/semantic-search.ts +0 -244
  37. package/src/services/search/tfidf.ts +0 -559
  38. package/src/services/search/unified-search-service.ts +0 -888
  39. package/src/services/storage/cache-storage.ts +0 -487
  40. package/src/services/storage/drizzle-storage.ts +0 -581
  41. package/src/services/storage/index.ts +0 -15
  42. package/src/services/storage/lancedb-vector-storage.ts +0 -494
  43. package/src/services/storage/memory-storage.ts +0 -268
  44. package/src/services/storage/separated-storage.ts +0 -467
  45. package/src/services/storage/vector-storage.ts +0 -13
@@ -1,268 +0,0 @@
1
- /**
2
- * Memory Storage Implementation - 記憶存儲實現
3
- * 專門處理需要持久化嘅 memory 數據(應該上 Git)
4
- */
5
-
6
- import { and, count, desc, eq, like, or } from 'drizzle-orm';
7
- import { type MemoryDatabase, MemoryDatabaseClient } from '../../db/memory-db.js';
8
- import { memory } from '../../db/memory-schema.js';
9
-
10
- // Memory entry interface
11
- export interface MemoryEntry {
12
- key: string;
13
- namespace: string;
14
- value: unknown;
15
- timestamp: number;
16
- created_at: string;
17
- updated_at: string;
18
- }
19
-
20
- /**
21
- * Memory storage implementation
22
- */
23
- export class MemoryStorage {
24
- private memoryDb: MemoryDatabaseClient;
25
- private memory: MemoryDatabase;
26
-
27
- constructor() {
28
- this.memoryDb = new MemoryDatabaseClient();
29
- this.memory = this.memoryDb.db;
30
- }
31
-
32
- async initialize(): Promise<void> {
33
- await this.memoryDb.initialize();
34
- }
35
-
36
- /**
37
- * Safely serialize a value to JSON string
38
- */
39
- private safeSerialize(value: any): string {
40
- try {
41
- return JSON.stringify(value);
42
- } catch (error) {
43
- throw new Error(`Failed to serialize value: ${(error as Error).message}`);
44
- }
45
- }
46
-
47
- /**
48
- * Safely deserialize a JSON string to value
49
- */
50
- private safeDeserialize(jsonString: string): any {
51
- try {
52
- return JSON.parse(jsonString);
53
- } catch (error) {
54
- throw new Error(`Failed to deserialize value: ${(error as Error).message}`);
55
- }
56
- }
57
-
58
- /**
59
- * Set a memory entry
60
- */
61
- async set(key: string, value: any, namespace = 'default'): Promise<void> {
62
- const errorMessage = `Failed to set memory entry: ${namespace}:${key}`;
63
-
64
- try {
65
- const now = new Date().toISOString();
66
- const timestamp = Date.now();
67
- const serializedValue = this.safeSerialize(value);
68
-
69
- // Check if entry exists
70
- const existing = await this.memory
71
- .select()
72
- .from(memory)
73
- .where(and(eq(memory.key, key), eq(memory.namespace, namespace)))
74
- .limit(1);
75
-
76
- if (existing.length > 0) {
77
- // Update existing entry
78
- await this.memory
79
- .update(memory)
80
- .set({
81
- value: serializedValue,
82
- timestamp,
83
- updated_at: now,
84
- })
85
- .where(and(eq(memory.key, key), eq(memory.namespace, namespace)));
86
- } else {
87
- // Insert new entry
88
- await this.memory.insert(memory).values({
89
- key,
90
- namespace,
91
- value: serializedValue,
92
- timestamp,
93
- created_at: now,
94
- updated_at: now,
95
- });
96
- }
97
- } catch (error) {
98
- throw new Error(`${errorMessage}: ${(error as Error).message}`);
99
- }
100
- }
101
-
102
- /**
103
- * Get a memory entry
104
- */
105
- async get(key: string, namespace = 'default'): Promise<MemoryEntry | null> {
106
- const errorMessage = `Failed to get memory entry: ${namespace}:${key}`;
107
-
108
- try {
109
- const result = await this.memory
110
- .select()
111
- .from(memory)
112
- .where(and(eq(memory.key, key), eq(memory.namespace, namespace)))
113
- .limit(1);
114
-
115
- if (result.length === 0) {
116
- return null;
117
- }
118
-
119
- const entry = result[0];
120
- return {
121
- key: entry.key,
122
- namespace: entry.namespace,
123
- value: this.safeDeserialize(entry.value),
124
- timestamp: entry.timestamp,
125
- created_at: entry.created_at,
126
- updated_at: entry.updated_at,
127
- };
128
- } catch (error) {
129
- throw new Error(`${errorMessage}: ${(error as Error).message}`);
130
- }
131
- }
132
-
133
- /**
134
- * Get all memory entries
135
- */
136
- async getAll(namespace?: string): Promise<MemoryEntry[]> {
137
- const errorMessage = 'Failed to get all memory entries';
138
-
139
- try {
140
- let query = this.memory.select().from(memory);
141
-
142
- if (namespace && namespace !== 'all') {
143
- query = query.where(eq(memory.namespace, namespace));
144
- }
145
-
146
- const results = await query.orderBy(desc(memory.timestamp));
147
-
148
- return results.map((entry) => ({
149
- key: entry.key,
150
- namespace: entry.namespace,
151
- value: this.safeDeserialize(entry.value),
152
- timestamp: entry.timestamp,
153
- created_at: entry.created_at,
154
- updated_at: entry.updated_at,
155
- }));
156
- } catch (error) {
157
- throw new Error(`${errorMessage}: ${(error as Error).message}`);
158
- }
159
- }
160
-
161
- /**
162
- * Search memory entries
163
- */
164
- async search(pattern: string, namespace?: string): Promise<MemoryEntry[]> {
165
- const errorMessage = `Failed to search memory entries: ${pattern}`;
166
-
167
- try {
168
- let query = this.memory
169
- .select()
170
- .from(memory)
171
- .where(or(like(memory.key, `%${pattern}%`), like(memory.value, `%${pattern}%`)));
172
-
173
- if (namespace && namespace !== 'all') {
174
- query = query.where(
175
- and(
176
- eq(memory.namespace, namespace),
177
- or(like(memory.key, `%${pattern}%`), like(memory.value, `%${pattern}%`))
178
- )
179
- );
180
- }
181
-
182
- const results = await query.orderBy(desc(memory.timestamp));
183
-
184
- return results.map((entry) => ({
185
- key: entry.key,
186
- namespace: entry.namespace,
187
- value: this.safeDeserialize(entry.value),
188
- timestamp: entry.timestamp,
189
- created_at: entry.created_at,
190
- updated_at: entry.updated_at,
191
- }));
192
- } catch (error) {
193
- throw new Error(`${errorMessage}: ${(error as Error).message}`);
194
- }
195
- }
196
-
197
- /**
198
- * Delete a memory entry
199
- */
200
- async delete(key: string, namespace = 'default'): Promise<boolean> {
201
- const errorMessage = `Failed to delete memory entry: ${namespace}:${key}`;
202
-
203
- try {
204
- const _result = await this.memory
205
- .delete(memory)
206
- .where(and(eq(memory.key, key), eq(memory.namespace, namespace)));
207
-
208
- // For libSQL, check if deletion was successful by trying to select the record
209
- const exists = await this.memory
210
- .select()
211
- .from(memory)
212
- .where(and(eq(memory.key, key), eq(memory.namespace, namespace)))
213
- .limit(1);
214
-
215
- return exists.length === 0;
216
- } catch (error) {
217
- throw new Error(`${errorMessage}: ${(error as Error).message}`);
218
- }
219
- }
220
-
221
- /**
222
- * Clear all memory entries in a namespace
223
- */
224
- async clear(namespace = 'default'): Promise<void> {
225
- const errorMessage = `Failed to clear memory namespace: ${namespace}`;
226
-
227
- try {
228
- await this.memory.delete(memory).where(eq(memory.namespace, namespace));
229
- } catch (error) {
230
- throw new Error(`${errorMessage}: ${(error as Error).message}`);
231
- }
232
- }
233
-
234
- /**
235
- * Get memory statistics
236
- */
237
- async getStats(namespace?: string): Promise<{
238
- totalEntries: number;
239
- namespaces: string[];
240
- }> {
241
- const errorMessage = 'Failed to get memory statistics';
242
-
243
- try {
244
- let baseQuery = this.memory.select({ count: count() }).from(memory);
245
-
246
- if (namespace && namespace !== 'all') {
247
- baseQuery = baseQuery.where(eq(memory.namespace, namespace));
248
- }
249
-
250
- const totalResult = await baseQuery;
251
- const totalEntries = totalResult[0]?.count || 0;
252
-
253
- // Get unique namespaces
254
- const namespaceResults = await this.memory
255
- .selectDistinct({ namespace: memory.namespace })
256
- .from(memory);
257
-
258
- const namespaces = namespaceResults.map((row) => row.namespace);
259
-
260
- return {
261
- totalEntries,
262
- namespaces,
263
- };
264
- } catch (error) {
265
- throw new Error(`${errorMessage}: ${(error as Error).message}`);
266
- }
267
- }
268
- }