@yuihub/server 1.0.0-beta.10
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.
- package/LICENSE +21 -0
- package/README.md +62 -0
- package/dist/api/text-process.d.ts +2 -0
- package/dist/api/text-process.d.ts.map +1 -0
- package/dist/api/text-process.js +48 -0
- package/dist/api/text-process.js.map +1 -0
- package/dist/auth.d.ts +30 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +71 -0
- package/dist/auth.js.map +1 -0
- package/dist/cli/setup.d.ts +2 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +120 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/config/schema.d.ts +334 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +45 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/service.d.ts +12 -0
- package/dist/config/service.d.ts.map +1 -0
- package/dist/config/service.js +81 -0
- package/dist/config/service.js.map +1 -0
- package/dist/engine/agent/context.d.ts +35 -0
- package/dist/engine/agent/context.d.ts.map +1 -0
- package/dist/engine/agent/context.js +72 -0
- package/dist/engine/agent/context.js.map +1 -0
- package/dist/engine/agent/core.d.ts +19 -0
- package/dist/engine/agent/core.d.ts.map +1 -0
- package/dist/engine/agent/core.js +67 -0
- package/dist/engine/agent/core.js.map +1 -0
- package/dist/engine/agent/live-context.d.ts +8 -0
- package/dist/engine/agent/live-context.d.ts.map +1 -0
- package/dist/engine/agent/live-context.js +19 -0
- package/dist/engine/agent/live-context.js.map +1 -0
- package/dist/engine/agent/tools/fs.d.ts +16 -0
- package/dist/engine/agent/tools/fs.d.ts.map +1 -0
- package/dist/engine/agent/tools/fs.js +78 -0
- package/dist/engine/agent/tools/fs.js.map +1 -0
- package/dist/engine/agent/tools/memory.d.ts +18 -0
- package/dist/engine/agent/tools/memory.d.ts.map +1 -0
- package/dist/engine/agent/tools/memory.js +51 -0
- package/dist/engine/agent/tools/memory.js.map +1 -0
- package/dist/engine/ai/local-genai-service.d.ts +22 -0
- package/dist/engine/ai/local-genai-service.d.ts.map +1 -0
- package/dist/engine/ai/local-genai-service.js +158 -0
- package/dist/engine/ai/local-genai-service.js.map +1 -0
- package/dist/engine/ai/registry.d.ts +16 -0
- package/dist/engine/ai/registry.d.ts.map +1 -0
- package/dist/engine/ai/registry.js +78 -0
- package/dist/engine/ai/registry.js.map +1 -0
- package/dist/engine/ai/tools.d.ts +7 -0
- package/dist/engine/ai/tools.d.ts.map +1 -0
- package/dist/engine/ai/tools.js +2 -0
- package/dist/engine/ai/tools.js.map +1 -0
- package/dist/engine/ai/types.d.ts +21 -0
- package/dist/engine/ai/types.d.ts.map +1 -0
- package/dist/engine/ai/types.js +2 -0
- package/dist/engine/ai/types.js.map +1 -0
- package/dist/engine/ai/vertex-genai-service.d.ts +13 -0
- package/dist/engine/ai/vertex-genai-service.d.ts.map +1 -0
- package/dist/engine/ai/vertex-genai-service.js +93 -0
- package/dist/engine/ai/vertex-genai-service.js.map +1 -0
- package/dist/engine/chunker.d.ts +19 -0
- package/dist/engine/chunker.d.ts.map +1 -0
- package/dist/engine/chunker.js +79 -0
- package/dist/engine/chunker.js.map +1 -0
- package/dist/engine/composite-vector-store.d.ts +21 -0
- package/dist/engine/composite-vector-store.d.ts.map +1 -0
- package/dist/engine/composite-vector-store.js +69 -0
- package/dist/engine/composite-vector-store.js.map +1 -0
- package/dist/engine/embeddings/local-service.d.ts +10 -0
- package/dist/engine/embeddings/local-service.d.ts.map +1 -0
- package/dist/engine/embeddings/local-service.js +37 -0
- package/dist/engine/embeddings/local-service.js.map +1 -0
- package/dist/engine/embeddings/types.d.ts +10 -0
- package/dist/engine/embeddings/types.d.ts.map +1 -0
- package/dist/engine/embeddings/types.js +2 -0
- package/dist/engine/embeddings/types.js.map +1 -0
- package/dist/engine/embeddings/vertex-service.d.ts +11 -0
- package/dist/engine/embeddings/vertex-service.d.ts.map +1 -0
- package/dist/engine/embeddings/vertex-service.js +45 -0
- package/dist/engine/embeddings/vertex-service.js.map +1 -0
- package/dist/engine/indexer.d.ts +12 -0
- package/dist/engine/indexer.d.ts.map +1 -0
- package/dist/engine/indexer.js +74 -0
- package/dist/engine/indexer.js.map +1 -0
- package/dist/engine/lock.d.ts +24 -0
- package/dist/engine/lock.d.ts.map +1 -0
- package/dist/engine/lock.js +58 -0
- package/dist/engine/lock.js.map +1 -0
- package/dist/engine/schema.d.ts +19 -0
- package/dist/engine/schema.d.ts.map +1 -0
- package/dist/engine/schema.js +18 -0
- package/dist/engine/schema.js.map +1 -0
- package/dist/engine/vector-store-types.d.ts +24 -0
- package/dist/engine/vector-store-types.d.ts.map +1 -0
- package/dist/engine/vector-store-types.js +2 -0
- package/dist/engine/vector-store-types.js.map +1 -0
- package/dist/engine/vector-store.d.ts +21 -0
- package/dist/engine/vector-store.d.ts.map +1 -0
- package/dist/engine/vector-store.js +105 -0
- package/dist/engine/vector-store.js.map +1 -0
- package/dist/engine/watcher.d.ts +16 -0
- package/dist/engine/watcher.d.ts.map +1 -0
- package/dist/engine/watcher.js +94 -0
- package/dist/engine/watcher.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +361 -0
- package/dist/server.js.map +1 -0
- package/dist/sync/github-provider.d.ts +20 -0
- package/dist/sync/github-provider.d.ts.map +1 -0
- package/dist/sync/github-provider.js +80 -0
- package/dist/sync/github-provider.js.map +1 -0
- package/dist/sync/scheduler.d.ts +18 -0
- package/dist/sync/scheduler.d.ts.map +1 -0
- package/dist/sync/scheduler.js +67 -0
- package/dist/sync/scheduler.js.map +1 -0
- package/package.json +78 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* YuiHub V1 Backend - Lock Utilities
|
|
3
|
+
* ReadWriteLock for LanceDB concurrency control
|
|
4
|
+
*/
|
|
5
|
+
import { RWLock } from 'async-rwlock';
|
|
6
|
+
// ReadWriteLock: Multiple readers OR single writer
|
|
7
|
+
export const rwLock = new RWLock();
|
|
8
|
+
/**
|
|
9
|
+
* Execute function with write lock (exclusive)
|
|
10
|
+
* Use for: /save, /checkpoints, indexing
|
|
11
|
+
*/
|
|
12
|
+
export async function withWriteLock(fn) {
|
|
13
|
+
await rwLock.writeLock();
|
|
14
|
+
try {
|
|
15
|
+
return await fn();
|
|
16
|
+
}
|
|
17
|
+
finally {
|
|
18
|
+
rwLock.unlock();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Execute function with read lock (shared)
|
|
23
|
+
* Use for: /search, /export/context
|
|
24
|
+
*/
|
|
25
|
+
export async function withReadLock(fn) {
|
|
26
|
+
await rwLock.readLock();
|
|
27
|
+
try {
|
|
28
|
+
return await fn();
|
|
29
|
+
}
|
|
30
|
+
finally {
|
|
31
|
+
rwLock.unlock();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Execute function with exponential backoff retry
|
|
36
|
+
*/
|
|
37
|
+
export async function withRetry(fn, maxRetries = 3, baseDelayMs = 100) {
|
|
38
|
+
let lastError;
|
|
39
|
+
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
40
|
+
try {
|
|
41
|
+
return await fn();
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
lastError = error;
|
|
45
|
+
if (attempt < maxRetries - 1) {
|
|
46
|
+
const delay = baseDelayMs * Math.pow(2, attempt);
|
|
47
|
+
console.warn(`[Lock] Retry ${attempt + 1}/${maxRetries} after ${delay}ms: ${lastError.message}`);
|
|
48
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
throw lastError;
|
|
53
|
+
}
|
|
54
|
+
// Legacy export for backward compatibility (deprecated)
|
|
55
|
+
import { Mutex } from 'async-mutex';
|
|
56
|
+
/** @deprecated Use withWriteLock instead */
|
|
57
|
+
export const globalMutex = new Mutex();
|
|
58
|
+
//# sourceMappingURL=lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/engine/lock.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,mDAAmD;AACnD,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;AAEnC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAI,EAAoB;IACzD,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,MAAM,EAAE,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAI,EAAoB;IACxD,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;IACxB,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,MAAM,EAAE,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,EAAoB,EACpB,UAAU,GAAG,CAAC,EACd,WAAW,GAAG,GAAG;IAEjB,IAAI,SAA4B,CAAC;IAEjC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;QACtD,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAc,CAAC;YAC3B,IAAI,OAAO,GAAG,UAAU,GAAG,CAAC,EAAE,CAAC;gBAC7B,MAAM,KAAK,GAAG,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBACjD,OAAO,CAAC,IAAI,CAAC,gBAAgB,OAAO,GAAG,CAAC,IAAI,UAAU,UAAU,KAAK,OAAO,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;gBACjG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,SAAS,CAAC;AAClB,CAAC;AAED,wDAAwD;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,4CAA4C;AAC5C,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Entry } from '@yuihub/core';
|
|
2
|
+
export interface LanceEntry {
|
|
3
|
+
id: string;
|
|
4
|
+
vector: number[];
|
|
5
|
+
text: string;
|
|
6
|
+
mode: string;
|
|
7
|
+
tags: string;
|
|
8
|
+
session_id: string;
|
|
9
|
+
source: string;
|
|
10
|
+
date: string;
|
|
11
|
+
metadata: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Convert Core Entry to LanceDB Entry (without vector)
|
|
15
|
+
* Vector must be added separately.
|
|
16
|
+
* Tags are serialized to JSON string.
|
|
17
|
+
*/
|
|
18
|
+
export declare function toLanceEntryBase(entry: Entry): Omit<LanceEntry, 'vector'>;
|
|
19
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/engine/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAIrC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAWzE"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert Core Entry to LanceDB Entry (without vector)
|
|
3
|
+
* Vector must be added separately.
|
|
4
|
+
* Tags are serialized to JSON string.
|
|
5
|
+
*/
|
|
6
|
+
export function toLanceEntryBase(entry) {
|
|
7
|
+
return {
|
|
8
|
+
id: entry.id,
|
|
9
|
+
text: entry.text,
|
|
10
|
+
mode: entry.mode,
|
|
11
|
+
tags: JSON.stringify(entry.tags || []), // Serialize to avoid Arrow type inference issues
|
|
12
|
+
session_id: entry.session_id || '',
|
|
13
|
+
source: entry.source || '',
|
|
14
|
+
date: entry.date,
|
|
15
|
+
metadata: JSON.stringify(entry.metadata || {})
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/engine/schema.ts"],"names":[],"mappings":"AAgBA;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAY;IAC3C,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,iDAAiD;QACzF,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE;QAClC,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE;QAC1B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;KAC/C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Entry } from '@yuihub/core';
|
|
2
|
+
export interface SearchResult {
|
|
3
|
+
id: string;
|
|
4
|
+
text: string;
|
|
5
|
+
score: number;
|
|
6
|
+
mode: string;
|
|
7
|
+
tags: string;
|
|
8
|
+
session_id: string;
|
|
9
|
+
source: string;
|
|
10
|
+
date: string;
|
|
11
|
+
metadata: string;
|
|
12
|
+
_source_store?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface IVectorStore {
|
|
15
|
+
init(): Promise<void>;
|
|
16
|
+
add(entries: Entry[]): Promise<void>;
|
|
17
|
+
search(query: string, limit?: number, filter?: {
|
|
18
|
+
tag?: string;
|
|
19
|
+
session?: string;
|
|
20
|
+
}): Promise<SearchResult[]>;
|
|
21
|
+
isEmpty(): Promise<boolean>;
|
|
22
|
+
deleteBySource(source: string): Promise<number>;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=vector-store-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-store-types.d.ts","sourceRoot":"","sources":["../../src/engine/vector-store-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAErC,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5G,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5B,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACjD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-store-types.js","sourceRoot":"","sources":["../../src/engine/vector-store-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Entry } from '@yuihub/core';
|
|
2
|
+
import { IEmbeddingService } from './embeddings/types.js';
|
|
3
|
+
import { IVectorStore, SearchResult } from './vector-store-types.js';
|
|
4
|
+
export declare class LanceVectorStore implements IVectorStore {
|
|
5
|
+
private db;
|
|
6
|
+
private table;
|
|
7
|
+
private embedder;
|
|
8
|
+
private dbPath;
|
|
9
|
+
private tableName;
|
|
10
|
+
readonly name: string;
|
|
11
|
+
constructor(basePath: string, embedder: IEmbeddingService, name?: string, tableName?: string);
|
|
12
|
+
init(): Promise<void>;
|
|
13
|
+
add(entries: Entry[]): Promise<void>;
|
|
14
|
+
search(query: string, limit?: number, filter?: {
|
|
15
|
+
tag?: string;
|
|
16
|
+
session?: string;
|
|
17
|
+
}): Promise<SearchResult[]>;
|
|
18
|
+
isEmpty(): Promise<boolean>;
|
|
19
|
+
deleteBySource(source: string): Promise<number>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=vector-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-store.d.ts","sourceRoot":"","sources":["../../src/engine/vector-store.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAErC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAErE,qBAAa,gBAAiB,YAAW,YAAY;IACnD,OAAO,CAAC,EAAE,CAAmC;IAC7C,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAS;IAC1B,SAAgB,IAAI,EAAE,MAAM,CAAC;gBAEjB,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,IAAI,GAAE,MAAyB,EAAE,SAAS,CAAC,EAAE,MAAM;IAOxG,IAAI;IAcJ,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE;IA0BpB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,EAAE,MAAM,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA6B/G,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAU3B,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAetD"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import * as lancedb from '@lancedb/lancedb';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import fs from 'fs-extra';
|
|
4
|
+
import { toLanceEntryBase } from './schema.js';
|
|
5
|
+
export class LanceVectorStore {
|
|
6
|
+
db = null;
|
|
7
|
+
table = null;
|
|
8
|
+
embedder;
|
|
9
|
+
dbPath;
|
|
10
|
+
tableName;
|
|
11
|
+
name; // Identifier for RRF (e.g. 'local', 'vertex')
|
|
12
|
+
constructor(basePath, embedder, name = 'yuihub_entries', tableName) {
|
|
13
|
+
this.dbPath = path.join(basePath, 'data/lancedb');
|
|
14
|
+
this.embedder = embedder;
|
|
15
|
+
this.name = name;
|
|
16
|
+
this.tableName = tableName || `entries_${name}`; // e.g. entries_local, entries_vertex
|
|
17
|
+
}
|
|
18
|
+
async init() {
|
|
19
|
+
await fs.ensureDir(this.dbPath);
|
|
20
|
+
this.db = await lancedb.connect(this.dbPath);
|
|
21
|
+
// Initialize Embedder
|
|
22
|
+
await this.embedder.init();
|
|
23
|
+
// Check if table exists
|
|
24
|
+
const tableNames = await this.db.tableNames();
|
|
25
|
+
if (tableNames.includes(this.tableName)) {
|
|
26
|
+
this.table = await this.db.openTable(this.tableName);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
async add(entries) {
|
|
30
|
+
if (!this.db)
|
|
31
|
+
throw new Error('VectorStore not initialized');
|
|
32
|
+
const data = [];
|
|
33
|
+
for (const entry of entries) {
|
|
34
|
+
const output = await this.embedder.embed(entry.text);
|
|
35
|
+
// Serialize tags array to JSON string to avoid Arrow type inference issues
|
|
36
|
+
const baseEntry = toLanceEntryBase(entry);
|
|
37
|
+
data.push({
|
|
38
|
+
...baseEntry,
|
|
39
|
+
vector: output.data
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
if (data.length === 0)
|
|
43
|
+
return;
|
|
44
|
+
if (!this.table) {
|
|
45
|
+
// @ts-ignore: LanceDB Type mismatch with strict mode
|
|
46
|
+
this.table = await this.db.createTable(this.tableName, data);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
// @ts-ignore: LanceDB Type mismatch with strict mode
|
|
50
|
+
await this.table.add(data);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
async search(query, limit = 10, filter) {
|
|
54
|
+
if (!this.table)
|
|
55
|
+
return [];
|
|
56
|
+
const output = await this.embedder.embed(query);
|
|
57
|
+
const vector = output.data;
|
|
58
|
+
let builder = this.table.search(vector).limit(limit);
|
|
59
|
+
const whereClauses = [];
|
|
60
|
+
if (filter?.session) {
|
|
61
|
+
whereClauses.push(`session_id = '${filter.session}'`);
|
|
62
|
+
}
|
|
63
|
+
if (whereClauses.length > 0) {
|
|
64
|
+
builder = builder.where(whereClauses.join(' AND '));
|
|
65
|
+
}
|
|
66
|
+
const rows = await builder.toArray();
|
|
67
|
+
return rows.map((r) => ({
|
|
68
|
+
...r,
|
|
69
|
+
score: r._distance, // LanceDB uses distance (lower is better usually for L2, cosine dist?)
|
|
70
|
+
// Note: OpenAI/MiniLM usually use Cosine Similarity or Distance.
|
|
71
|
+
// LanceDB 'cosine' distance = 1 - similarity.
|
|
72
|
+
// RRF needs consistent ranking. Distance is fine for ascending rank.
|
|
73
|
+
_source_store: this.name
|
|
74
|
+
}));
|
|
75
|
+
}
|
|
76
|
+
async isEmpty() {
|
|
77
|
+
if (!this.table)
|
|
78
|
+
return true;
|
|
79
|
+
try {
|
|
80
|
+
const count = await this.table.countRows();
|
|
81
|
+
return count === 0;
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
async deleteBySource(source) {
|
|
88
|
+
if (!this.table)
|
|
89
|
+
return 0;
|
|
90
|
+
try {
|
|
91
|
+
// LanceDB delete API - returns void, we count before/after
|
|
92
|
+
const countBefore = await this.table.countRows();
|
|
93
|
+
// Escape single quotes in source path
|
|
94
|
+
const escapedSource = source.replace(/'/g, "''");
|
|
95
|
+
await this.table.delete(`source = '${escapedSource}'`);
|
|
96
|
+
const countAfter = await this.table.countRows();
|
|
97
|
+
return countBefore - countAfter;
|
|
98
|
+
}
|
|
99
|
+
catch (e) {
|
|
100
|
+
console.error(`[LanceVectorStore] deleteBySource failed for ${source}:`, e);
|
|
101
|
+
return 0;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=vector-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-store.js","sourceRoot":"","sources":["../../src/engine/vector-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,UAAU,CAAC;AAE1B,OAAO,EAAc,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAI3D,MAAM,OAAO,gBAAgB;IACnB,EAAE,GAA8B,IAAI,CAAC;IACrC,KAAK,GAAyB,IAAI,CAAC;IACnC,QAAQ,CAAoB;IAC5B,MAAM,CAAS;IACf,SAAS,CAAS;IACV,IAAI,CAAS,CAAC,8CAA8C;IAE5E,YAAY,QAAgB,EAAE,QAA2B,EAAE,OAAe,gBAAgB,EAAE,SAAkB;QAC5G,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,WAAW,IAAI,EAAE,CAAC,CAAC,qCAAqC;IACxF,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChC,IAAI,CAAC,EAAE,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE7C,sBAAsB;QACtB,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAE3B,wBAAwB;QACxB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC;QAC9C,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,OAAgB;QACxB,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAE7D,MAAM,IAAI,GAAiB,EAAE,CAAC;QAC9B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAErD,2EAA2E;YAC3E,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC;gBACR,GAAG,SAAS;gBACZ,MAAM,EAAE,MAAM,CAAC,IAAI;aACb,CAAC,CAAC;QACZ,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAE9B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,qDAAqD;YACrD,IAAI,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,IAAW,CAAC,CAAC;QACtE,CAAC;aAAM,CAAC;YACN,qDAAqD;YACrD,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAW,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,QAAgB,EAAE,EAAE,MAA2C;QACzF,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,CAAC;QAE3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;QAE3B,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAErD,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,YAAY,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAErC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;YAC3B,GAAG,CAAC;YACJ,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,uEAAuE;YAC3F,kEAAkE;YAClE,+CAA+C;YAC/C,qEAAqE;YACrE,aAAa,EAAE,IAAI,CAAC,IAAI;SACzB,CAAC,CAAC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YAC3C,OAAO,KAAK,KAAK,CAAC,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,MAAc;QACjC,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,CAAC;QAC1B,IAAI,CAAC;YACH,2DAA2D;YAC3D,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YACjD,sCAAsC;YACtC,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACjD,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,aAAa,GAAG,CAAC,CAAC;YACvD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YAChD,OAAO,WAAW,GAAG,UAAU,CAAC;QAClC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,gDAAgD,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;YAC5E,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Indexer } from './indexer.js';
|
|
2
|
+
export declare class SafeWatcher {
|
|
3
|
+
private watcher;
|
|
4
|
+
private indexer;
|
|
5
|
+
private debouncedHandlers;
|
|
6
|
+
constructor(indexer: Indexer);
|
|
7
|
+
start(paths: string | string[]): void;
|
|
8
|
+
private callbacks;
|
|
9
|
+
onActivity(cb: (path: string, type: 'change' | 'add' | 'unlink') => void): void;
|
|
10
|
+
private handleFileDelete;
|
|
11
|
+
private handleFileChange;
|
|
12
|
+
scan(dir: string): Promise<void>;
|
|
13
|
+
private getFiles;
|
|
14
|
+
close(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=watcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/engine/watcher.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,iBAAiB,CAA4D;gBAEzE,OAAO,EAAE,OAAO;IAK5B,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAgB9B,OAAO,CAAC,SAAS,CAAqE;IAEtF,UAAU,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,KAAK,GAAG,QAAQ,KAAK,IAAI;IAIxE,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,gBAAgB;IAqBlB,IAAI,CAAC,GAAG,EAAE,MAAM;YAqBR,QAAQ;IAShB,KAAK;CAKZ"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { watch } from 'chokidar';
|
|
2
|
+
import lodash from 'lodash';
|
|
3
|
+
export class SafeWatcher {
|
|
4
|
+
watcher = null;
|
|
5
|
+
indexer;
|
|
6
|
+
debouncedHandlers;
|
|
7
|
+
constructor(indexer) {
|
|
8
|
+
this.indexer = indexer;
|
|
9
|
+
this.debouncedHandlers = new Map();
|
|
10
|
+
}
|
|
11
|
+
start(paths) {
|
|
12
|
+
this.watcher = watch(paths, {
|
|
13
|
+
ignored: /(^|[\/\\])\../, // ignore dotfiles
|
|
14
|
+
persistent: true,
|
|
15
|
+
ignoreInitial: true // Don't queue initial scan to avoid storm? Or maybe allow it?
|
|
16
|
+
// For V1, maybe allow initial scan to build index. But let's keep it safe.
|
|
17
|
+
});
|
|
18
|
+
this.watcher
|
|
19
|
+
.on('add', this.handleFileChange.bind(this))
|
|
20
|
+
.on('change', this.handleFileChange.bind(this))
|
|
21
|
+
.on('unlink', this.handleFileDelete.bind(this));
|
|
22
|
+
console.log(`[Watcher] Started watching: ${paths}`);
|
|
23
|
+
}
|
|
24
|
+
callbacks = [];
|
|
25
|
+
onActivity(cb) {
|
|
26
|
+
this.callbacks.push(cb);
|
|
27
|
+
}
|
|
28
|
+
handleFileDelete(filePath) {
|
|
29
|
+
console.log(`[Watcher] File deleted: ${filePath}`);
|
|
30
|
+
this.callbacks.forEach(cb => cb(filePath, 'unlink'));
|
|
31
|
+
// Cancel any pending debounced handler for this file
|
|
32
|
+
const handler = this.debouncedHandlers.get(filePath);
|
|
33
|
+
if (handler) {
|
|
34
|
+
handler.cancel();
|
|
35
|
+
this.debouncedHandlers.delete(filePath);
|
|
36
|
+
}
|
|
37
|
+
// Enqueue delete job
|
|
38
|
+
this.indexer.enqueueDelete(filePath);
|
|
39
|
+
}
|
|
40
|
+
handleFileChange(filePath) {
|
|
41
|
+
// Notify listeners immediately (or debounced?)
|
|
42
|
+
// Live Context prefers immediate or distinct?
|
|
43
|
+
// Let's use debounced for indexing, but maybe immediate for "activity log"?
|
|
44
|
+
// The current logic debounces indexing.
|
|
45
|
+
// Let's notify listeners here (immediate activity).
|
|
46
|
+
this.callbacks.forEach(cb => cb(filePath, 'change'));
|
|
47
|
+
if (!this.debouncedHandlers.has(filePath)) {
|
|
48
|
+
// Create debounced handler per file
|
|
49
|
+
const handler = lodash.debounce((path) => {
|
|
50
|
+
console.log(`[Watcher] Change detected (stable): ${path}`);
|
|
51
|
+
this.indexer.enqueue(path);
|
|
52
|
+
}, 2000); // 2000ms debounce
|
|
53
|
+
this.debouncedHandlers.set(filePath, handler);
|
|
54
|
+
}
|
|
55
|
+
const handler = this.debouncedHandlers.get(filePath);
|
|
56
|
+
if (handler)
|
|
57
|
+
handler(filePath);
|
|
58
|
+
}
|
|
59
|
+
async scan(dir) {
|
|
60
|
+
console.log(`[Watcher] Scanning directory: ${dir}`);
|
|
61
|
+
try {
|
|
62
|
+
// Node 20+ supports recursive readdir. Assume Node 18+ or use manual walk?
|
|
63
|
+
// Let's use fs-extra readdir or custom walk if needed.
|
|
64
|
+
// fs.readdir(dir, { recursive: true }) is Node 20.
|
|
65
|
+
// Safe fallback: use chokidar instance if ready? No.
|
|
66
|
+
// Simple recursive walk:
|
|
67
|
+
const files = await this.getFiles(dir);
|
|
68
|
+
console.log(`[Watcher] Found ${files.length} files. Enqueuing...`);
|
|
69
|
+
for (const file of files) {
|
|
70
|
+
if (file.endsWith('.md')) {
|
|
71
|
+
this.indexer.enqueue(file);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (e) {
|
|
76
|
+
console.error('[Watcher] Scan failed:', e);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
async getFiles(dir) {
|
|
80
|
+
const dirents = await import('fs').then(r => r.promises.readdir(dir, { withFileTypes: true }));
|
|
81
|
+
const files = await Promise.all(dirents.map((dirent) => {
|
|
82
|
+
const res = import('path').then(p => p.join(dir, dirent.name));
|
|
83
|
+
return dirent.isDirectory() ? res.then(p => this.getFiles(p)) : res;
|
|
84
|
+
}));
|
|
85
|
+
return Array.prototype.concat(...files);
|
|
86
|
+
}
|
|
87
|
+
async close() {
|
|
88
|
+
if (this.watcher)
|
|
89
|
+
await this.watcher.close();
|
|
90
|
+
this.debouncedHandlers.forEach(h => h.cancel());
|
|
91
|
+
this.debouncedHandlers.clear();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=watcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/engine/watcher.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":""}
|