@easbot/note 0.1.11
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.en.md +211 -0
- package/README.md +211 -0
- package/dist/assets/txt/assets/jieba_dict.txt +349046 -0
- package/dist/index.cjs +125 -0
- package/dist/index.d.cts +279 -0
- package/dist/index.d.ts +279 -0
- package/dist/index.mjs +125 -0
- package/package.json +95 -0
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import { NoteKnowledgeSource, KnowledgeSearchOptions, BaseSearchResult, KnowledgeSearchSource, NoteKnowledgeConfigWithModels } from '@easbot/types';
|
|
2
|
+
export { BaseSearchResult, DatabaseConfig, GRAPH_ENTITY_TYPE_DEFINITIONS, GRAPH_RELATION_TYPE_DEFINITIONS, IndexerConfig, KnowledgeSearchOptions, KnowledgeSearchSource, NoteKnowledgeConfigWithModels, NoteKnowledgeSource, SearchConfig } from '@easbot/types';
|
|
3
|
+
import { LanguageModelV3Message } from '@ai-sdk/provider';
|
|
4
|
+
import { EmbeddingModel, LanguageModel, RerankingModel } from 'ai';
|
|
5
|
+
export { EmbeddingModel, LanguageModel, RerankingModel } from 'ai';
|
|
6
|
+
|
|
7
|
+
interface ScannedFile {
|
|
8
|
+
absolutePath: string;
|
|
9
|
+
relativePath: string;
|
|
10
|
+
source: NoteKnowledgeSource;
|
|
11
|
+
contentHash: string;
|
|
12
|
+
lastModified: number;
|
|
13
|
+
size: number;
|
|
14
|
+
}
|
|
15
|
+
interface ScannerOptions {
|
|
16
|
+
workspaceDir: string;
|
|
17
|
+
extraPaths?: string[];
|
|
18
|
+
sources?: NoteKnowledgeSource[];
|
|
19
|
+
ignorePatterns?: string[];
|
|
20
|
+
}
|
|
21
|
+
declare class FileScanner {
|
|
22
|
+
private readonly workspaceDir;
|
|
23
|
+
private readonly extraPaths;
|
|
24
|
+
private readonly sources;
|
|
25
|
+
private readonly ignorePatterns;
|
|
26
|
+
constructor(options: ScannerOptions);
|
|
27
|
+
scanAll(progress?: (current: number, total: number, file: ScannedFile) => void): Promise<ScannedFile[]>;
|
|
28
|
+
scanDirectory(dir: string, source: NoteKnowledgeSource): Promise<ScannedFile[]>;
|
|
29
|
+
scanFile(filePath: string, source?: NoteKnowledgeSource): Promise<ScannedFile | null>;
|
|
30
|
+
private getFileInfo;
|
|
31
|
+
private shouldIgnore;
|
|
32
|
+
private isMarkdownFile;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
type NoteKnowledgeConfig = NoteKnowledgeConfigWithModels;
|
|
36
|
+
interface DocumentMetadata {
|
|
37
|
+
title?: string;
|
|
38
|
+
author?: string;
|
|
39
|
+
date?: string;
|
|
40
|
+
[key: string]: unknown;
|
|
41
|
+
}
|
|
42
|
+
interface Document {
|
|
43
|
+
id: number;
|
|
44
|
+
path: string;
|
|
45
|
+
title?: string;
|
|
46
|
+
contentHash: string;
|
|
47
|
+
summary?: string;
|
|
48
|
+
metadata?: DocumentMetadata;
|
|
49
|
+
lastModified?: number;
|
|
50
|
+
createdAt: number;
|
|
51
|
+
updatedAt: number;
|
|
52
|
+
}
|
|
53
|
+
interface Node {
|
|
54
|
+
id: number;
|
|
55
|
+
name: string;
|
|
56
|
+
type: string;
|
|
57
|
+
properties?: Record<string, unknown>;
|
|
58
|
+
createdAt: number;
|
|
59
|
+
updatedAt: number;
|
|
60
|
+
}
|
|
61
|
+
interface Edge {
|
|
62
|
+
id: number;
|
|
63
|
+
source: number;
|
|
64
|
+
target: number;
|
|
65
|
+
relation: string;
|
|
66
|
+
properties?: Record<string, unknown>;
|
|
67
|
+
createdAt: number;
|
|
68
|
+
}
|
|
69
|
+
interface NodeWithEdges extends Node {
|
|
70
|
+
edges?: Edge[];
|
|
71
|
+
}
|
|
72
|
+
interface NodeQueryFilter {
|
|
73
|
+
ids?: number[];
|
|
74
|
+
name?: string;
|
|
75
|
+
type?: string;
|
|
76
|
+
limit?: number;
|
|
77
|
+
}
|
|
78
|
+
interface EdgeQueryFilter {
|
|
79
|
+
ids?: number[];
|
|
80
|
+
source?: number;
|
|
81
|
+
target?: number;
|
|
82
|
+
sourceOrTarget?: number[];
|
|
83
|
+
relation?: string;
|
|
84
|
+
limit?: number;
|
|
85
|
+
}
|
|
86
|
+
interface RelationQueryOptions {
|
|
87
|
+
maxDepth?: number;
|
|
88
|
+
relationTypes?: string[];
|
|
89
|
+
direction?: 'incoming' | 'outgoing' | 'both';
|
|
90
|
+
limit?: number;
|
|
91
|
+
}
|
|
92
|
+
interface CallGraphNode {
|
|
93
|
+
callers: number[];
|
|
94
|
+
callees: number[];
|
|
95
|
+
}
|
|
96
|
+
interface InheritanceQueryResult {
|
|
97
|
+
ancestors: Node[];
|
|
98
|
+
descendants: Node[];
|
|
99
|
+
}
|
|
100
|
+
interface Chunk {
|
|
101
|
+
id: number;
|
|
102
|
+
documentId: number;
|
|
103
|
+
startLine: number;
|
|
104
|
+
endLine: number;
|
|
105
|
+
content: string;
|
|
106
|
+
contentHash: string;
|
|
107
|
+
nodeIds?: number[];
|
|
108
|
+
createdAt: number;
|
|
109
|
+
}
|
|
110
|
+
interface VectorRecord {
|
|
111
|
+
chunkId: number;
|
|
112
|
+
embedding: Float32Array;
|
|
113
|
+
}
|
|
114
|
+
type SearchResultSource = KnowledgeSearchSource;
|
|
115
|
+
interface SearchResult extends BaseSearchResult {
|
|
116
|
+
chunk: Chunk & {
|
|
117
|
+
path: string;
|
|
118
|
+
};
|
|
119
|
+
document: Document;
|
|
120
|
+
nodes?: NodeWithEdges[];
|
|
121
|
+
source: SearchResultSource;
|
|
122
|
+
}
|
|
123
|
+
type SearchOptions = KnowledgeSearchOptions;
|
|
124
|
+
interface IngestResult {
|
|
125
|
+
documentId: number;
|
|
126
|
+
chunksCreated: number;
|
|
127
|
+
vectorsCreated: number;
|
|
128
|
+
entitiesExtracted?: number;
|
|
129
|
+
relationsExtracted?: number;
|
|
130
|
+
summary?: string;
|
|
131
|
+
}
|
|
132
|
+
interface KnowledgeBaseStatus {
|
|
133
|
+
dbPath: string;
|
|
134
|
+
documentsCount: number;
|
|
135
|
+
chunksCount: number;
|
|
136
|
+
nodesCount: number;
|
|
137
|
+
edgesCount: number;
|
|
138
|
+
vectorDims: number;
|
|
139
|
+
vectorSearchAvailable: boolean;
|
|
140
|
+
llmAvailable: boolean;
|
|
141
|
+
healthy: boolean;
|
|
142
|
+
}
|
|
143
|
+
declare enum KnowledgeBaseErrorCode {
|
|
144
|
+
DATABASE_INIT_FAILED = "DATABASE_INIT_FAILED",
|
|
145
|
+
DATABASE_NOT_INITIALIZED = "DATABASE_NOT_INITIALIZED",
|
|
146
|
+
DATABASE_QUERY_FAILED = "DATABASE_QUERY_FAILED",
|
|
147
|
+
DOCUMENT_PARSE_FAILED = "DOCUMENT_PARSE_FAILED",
|
|
148
|
+
EMBEDDING_FAILED = "EMBEDDING_FAILED",
|
|
149
|
+
ENTITY_EXTRACTION_FAILED = "ENTITY_EXTRACTION_FAILED",
|
|
150
|
+
SEARCH_FAILED = "SEARCH_FAILED",
|
|
151
|
+
NODE_NOT_FOUND = "NODE_NOT_FOUND",
|
|
152
|
+
EDGE_NOT_FOUND = "EDGE_NOT_FOUND",
|
|
153
|
+
INVALID_CONFIG = "INVALID_CONFIG",
|
|
154
|
+
MODEL_INJECTION_FAILED = "MODEL_INJECTION_FAILED"
|
|
155
|
+
}
|
|
156
|
+
declare class KnowledgeBaseError extends Error {
|
|
157
|
+
code: KnowledgeBaseErrorCode;
|
|
158
|
+
cause?: Error | undefined;
|
|
159
|
+
constructor(message: string, code: KnowledgeBaseErrorCode, cause?: Error | undefined);
|
|
160
|
+
toString(): string;
|
|
161
|
+
}
|
|
162
|
+
type LanguageModelPrompt = LanguageModelV3Message[];
|
|
163
|
+
interface INoteKnowledge {
|
|
164
|
+
initialize(): Promise<void>;
|
|
165
|
+
ingestDocument(filePath: string): Promise<IngestResult>;
|
|
166
|
+
scanAndIngest(progress?: (current: number, total: number, file: ScannedFile) => void): Promise<IngestResult[]>;
|
|
167
|
+
sync(progress?: (current: number, total: number, file: ScannedFile) => void): Promise<void>;
|
|
168
|
+
search(query: string, options?: SearchOptions): Promise<SearchResult[]>;
|
|
169
|
+
queryNodes(filter: NodeQueryFilter): Promise<Node[]>;
|
|
170
|
+
queryEdges(filter: EdgeQueryFilter): Promise<Edge[]>;
|
|
171
|
+
findPath(startNode: string, endNode: string, maxDepth?: number): Promise<Node[][]>;
|
|
172
|
+
queryNeighbors(nodeId: number, options?: RelationQueryOptions): Promise<{
|
|
173
|
+
nodes: Node[];
|
|
174
|
+
edges: Edge[];
|
|
175
|
+
}>;
|
|
176
|
+
queryCallGraph(nodeId: number, depth?: number): Promise<Map<number, CallGraphNode>>;
|
|
177
|
+
queryInheritance(nodeId: number): Promise<InheritanceQueryResult>;
|
|
178
|
+
getStatus(): KnowledgeBaseStatus;
|
|
179
|
+
healthCheck(): Promise<boolean>;
|
|
180
|
+
clear(): Promise<void>;
|
|
181
|
+
close(): Promise<void>;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
declare class NoteKnowledge implements INoteKnowledge {
|
|
185
|
+
private config;
|
|
186
|
+
private db;
|
|
187
|
+
private pipeline;
|
|
188
|
+
private searchEngine;
|
|
189
|
+
private graphInterface;
|
|
190
|
+
private fileScanner;
|
|
191
|
+
private initialized;
|
|
192
|
+
private dirty;
|
|
193
|
+
private syncTimer?;
|
|
194
|
+
private syncConfig;
|
|
195
|
+
constructor(config: NoteKnowledgeConfig);
|
|
196
|
+
initialize(): Promise<void>;
|
|
197
|
+
private startSyncTimer;
|
|
198
|
+
private stopSyncTimer;
|
|
199
|
+
private syncAll;
|
|
200
|
+
ingestDocument(filePath: string): Promise<IngestResult>;
|
|
201
|
+
ingestDocuments(filePaths: string[], progress?: (p: number) => void): Promise<IngestResult[]>;
|
|
202
|
+
scanAndIngest(progress?: (current: number, total: number, file: ScannedFile) => void): Promise<IngestResult[]>;
|
|
203
|
+
ingestUploadedFile(filePath: string): Promise<IngestResult>;
|
|
204
|
+
removeDocument(filePath: string): Promise<void>;
|
|
205
|
+
sync(progress?: (current: number, total: number, file: ScannedFile) => void): Promise<void>;
|
|
206
|
+
search(query: string, options?: SearchOptions): Promise<SearchResult[]>;
|
|
207
|
+
queryNodes(sql: string, params?: unknown[]): Promise<Node[]>;
|
|
208
|
+
queryNodes(filter: NodeQueryFilter): Promise<Node[]>;
|
|
209
|
+
queryEdges(sql: string, params?: unknown[]): Promise<Edge[]>;
|
|
210
|
+
queryEdges(filter: EdgeQueryFilter): Promise<Edge[]>;
|
|
211
|
+
findPath(startNode: string, endNode: string, maxDepth?: number): Promise<Node[][]>;
|
|
212
|
+
queryNeighbors(nodeId: number, options?: RelationQueryOptions): Promise<{
|
|
213
|
+
nodes: Node[];
|
|
214
|
+
edges: Edge[];
|
|
215
|
+
}>;
|
|
216
|
+
queryCallGraph(nodeId: number, depth?: number): Promise<Map<number, CallGraphNode>>;
|
|
217
|
+
queryInheritance(nodeId: number): Promise<InheritanceQueryResult>;
|
|
218
|
+
createNode(name: string, type: string, properties?: Record<string, unknown>): Promise<Node>;
|
|
219
|
+
updateNode(id: number, properties: Record<string, unknown>): Promise<Node>;
|
|
220
|
+
deleteNode(id: number): Promise<void>;
|
|
221
|
+
createEdge(source: number, target: number, relation: string, properties?: Record<string, unknown>): Promise<Edge>;
|
|
222
|
+
deleteEdge(id: number): Promise<void>;
|
|
223
|
+
getStatus(): KnowledgeBaseStatus;
|
|
224
|
+
healthCheck(): Promise<boolean>;
|
|
225
|
+
clear(): Promise<void>;
|
|
226
|
+
private ensureInitialized;
|
|
227
|
+
close(): Promise<void>;
|
|
228
|
+
}
|
|
229
|
+
declare function createNoteKnowledge(config: NoteKnowledgeConfig): Promise<INoteKnowledge>;
|
|
230
|
+
|
|
231
|
+
interface LlmModels {
|
|
232
|
+
embeddingLlm?: EmbeddingModel;
|
|
233
|
+
graphLlm?: LanguageModel;
|
|
234
|
+
rerankLlm?: RerankingModel;
|
|
235
|
+
}
|
|
236
|
+
interface LlmOptions {
|
|
237
|
+
maxOutputTokens?: number;
|
|
238
|
+
temperature?: number;
|
|
239
|
+
}
|
|
240
|
+
interface LlmInitConfig {
|
|
241
|
+
models: LlmModels;
|
|
242
|
+
options?: {
|
|
243
|
+
graph?: LlmOptions;
|
|
244
|
+
rerankTopN?: number;
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
declare namespace Llm {
|
|
248
|
+
function init(config: LlmInitConfig): void;
|
|
249
|
+
function isInitialized(): boolean;
|
|
250
|
+
function capabilities(): {
|
|
251
|
+
embedding: boolean;
|
|
252
|
+
graphLlm: boolean;
|
|
253
|
+
rerankLlm: boolean;
|
|
254
|
+
};
|
|
255
|
+
function embedText(value: string): Promise<Float32Array>;
|
|
256
|
+
function embedTexts(values: string[]): Promise<Float32Array[]>;
|
|
257
|
+
function generateGraph(chunks: string[], options?: LlmOptions): Promise<string>;
|
|
258
|
+
function rerank(query: string, documents: string[], topN?: number): Promise<Array<{
|
|
259
|
+
index: number;
|
|
260
|
+
score: number;
|
|
261
|
+
}>>;
|
|
262
|
+
const embed: typeof embedText;
|
|
263
|
+
const embedMany: typeof embedTexts;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
declare function initTokenizer(params?: {
|
|
267
|
+
dictPath?: string[];
|
|
268
|
+
hmm?: boolean;
|
|
269
|
+
}): Promise<void>;
|
|
270
|
+
declare function loadCustomDict(dictPath: string): Promise<void>;
|
|
271
|
+
declare function tokenize(text: string): string[];
|
|
272
|
+
declare function tokenizeForSearch(text: string): string[];
|
|
273
|
+
declare function addWord(word: string, freq?: number, tag?: string): void;
|
|
274
|
+
declare function isInitialized(): boolean;
|
|
275
|
+
declare function closeTokenizer(): Promise<void>;
|
|
276
|
+
declare function toFtsTokens(text: string): string;
|
|
277
|
+
declare function toFtsTokensForSearch(text: string): string;
|
|
278
|
+
|
|
279
|
+
export { type CallGraphNode, type Chunk, type Document, type DocumentMetadata, type Edge, type EdgeQueryFilter, FileScanner, type INoteKnowledge, type IngestResult, type InheritanceQueryResult, KnowledgeBaseError, KnowledgeBaseErrorCode, type KnowledgeBaseStatus, type LanguageModelPrompt, Llm, type Node, type NodeQueryFilter, type NodeWithEdges, NoteKnowledge, type NoteKnowledgeConfig, type RelationQueryOptions, type ScannedFile, type ScannerOptions, type SearchOptions, type SearchResult, type SearchResultSource, type VectorRecord, addWord, closeTokenizer, createNoteKnowledge, initTokenizer, isInitialized, loadCustomDict, toFtsTokens, toFtsTokensForSearch, tokenize, tokenizeForSearch };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import { NoteKnowledgeSource, KnowledgeSearchOptions, BaseSearchResult, KnowledgeSearchSource, NoteKnowledgeConfigWithModels } from '@easbot/types';
|
|
2
|
+
export { BaseSearchResult, DatabaseConfig, GRAPH_ENTITY_TYPE_DEFINITIONS, GRAPH_RELATION_TYPE_DEFINITIONS, IndexerConfig, KnowledgeSearchOptions, KnowledgeSearchSource, NoteKnowledgeConfigWithModels, NoteKnowledgeSource, SearchConfig } from '@easbot/types';
|
|
3
|
+
import { LanguageModelV3Message } from '@ai-sdk/provider';
|
|
4
|
+
import { EmbeddingModel, LanguageModel, RerankingModel } from 'ai';
|
|
5
|
+
export { EmbeddingModel, LanguageModel, RerankingModel } from 'ai';
|
|
6
|
+
|
|
7
|
+
interface ScannedFile {
|
|
8
|
+
absolutePath: string;
|
|
9
|
+
relativePath: string;
|
|
10
|
+
source: NoteKnowledgeSource;
|
|
11
|
+
contentHash: string;
|
|
12
|
+
lastModified: number;
|
|
13
|
+
size: number;
|
|
14
|
+
}
|
|
15
|
+
interface ScannerOptions {
|
|
16
|
+
workspaceDir: string;
|
|
17
|
+
extraPaths?: string[];
|
|
18
|
+
sources?: NoteKnowledgeSource[];
|
|
19
|
+
ignorePatterns?: string[];
|
|
20
|
+
}
|
|
21
|
+
declare class FileScanner {
|
|
22
|
+
private readonly workspaceDir;
|
|
23
|
+
private readonly extraPaths;
|
|
24
|
+
private readonly sources;
|
|
25
|
+
private readonly ignorePatterns;
|
|
26
|
+
constructor(options: ScannerOptions);
|
|
27
|
+
scanAll(progress?: (current: number, total: number, file: ScannedFile) => void): Promise<ScannedFile[]>;
|
|
28
|
+
scanDirectory(dir: string, source: NoteKnowledgeSource): Promise<ScannedFile[]>;
|
|
29
|
+
scanFile(filePath: string, source?: NoteKnowledgeSource): Promise<ScannedFile | null>;
|
|
30
|
+
private getFileInfo;
|
|
31
|
+
private shouldIgnore;
|
|
32
|
+
private isMarkdownFile;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
type NoteKnowledgeConfig = NoteKnowledgeConfigWithModels;
|
|
36
|
+
interface DocumentMetadata {
|
|
37
|
+
title?: string;
|
|
38
|
+
author?: string;
|
|
39
|
+
date?: string;
|
|
40
|
+
[key: string]: unknown;
|
|
41
|
+
}
|
|
42
|
+
interface Document {
|
|
43
|
+
id: number;
|
|
44
|
+
path: string;
|
|
45
|
+
title?: string;
|
|
46
|
+
contentHash: string;
|
|
47
|
+
summary?: string;
|
|
48
|
+
metadata?: DocumentMetadata;
|
|
49
|
+
lastModified?: number;
|
|
50
|
+
createdAt: number;
|
|
51
|
+
updatedAt: number;
|
|
52
|
+
}
|
|
53
|
+
interface Node {
|
|
54
|
+
id: number;
|
|
55
|
+
name: string;
|
|
56
|
+
type: string;
|
|
57
|
+
properties?: Record<string, unknown>;
|
|
58
|
+
createdAt: number;
|
|
59
|
+
updatedAt: number;
|
|
60
|
+
}
|
|
61
|
+
interface Edge {
|
|
62
|
+
id: number;
|
|
63
|
+
source: number;
|
|
64
|
+
target: number;
|
|
65
|
+
relation: string;
|
|
66
|
+
properties?: Record<string, unknown>;
|
|
67
|
+
createdAt: number;
|
|
68
|
+
}
|
|
69
|
+
interface NodeWithEdges extends Node {
|
|
70
|
+
edges?: Edge[];
|
|
71
|
+
}
|
|
72
|
+
interface NodeQueryFilter {
|
|
73
|
+
ids?: number[];
|
|
74
|
+
name?: string;
|
|
75
|
+
type?: string;
|
|
76
|
+
limit?: number;
|
|
77
|
+
}
|
|
78
|
+
interface EdgeQueryFilter {
|
|
79
|
+
ids?: number[];
|
|
80
|
+
source?: number;
|
|
81
|
+
target?: number;
|
|
82
|
+
sourceOrTarget?: number[];
|
|
83
|
+
relation?: string;
|
|
84
|
+
limit?: number;
|
|
85
|
+
}
|
|
86
|
+
interface RelationQueryOptions {
|
|
87
|
+
maxDepth?: number;
|
|
88
|
+
relationTypes?: string[];
|
|
89
|
+
direction?: 'incoming' | 'outgoing' | 'both';
|
|
90
|
+
limit?: number;
|
|
91
|
+
}
|
|
92
|
+
interface CallGraphNode {
|
|
93
|
+
callers: number[];
|
|
94
|
+
callees: number[];
|
|
95
|
+
}
|
|
96
|
+
interface InheritanceQueryResult {
|
|
97
|
+
ancestors: Node[];
|
|
98
|
+
descendants: Node[];
|
|
99
|
+
}
|
|
100
|
+
interface Chunk {
|
|
101
|
+
id: number;
|
|
102
|
+
documentId: number;
|
|
103
|
+
startLine: number;
|
|
104
|
+
endLine: number;
|
|
105
|
+
content: string;
|
|
106
|
+
contentHash: string;
|
|
107
|
+
nodeIds?: number[];
|
|
108
|
+
createdAt: number;
|
|
109
|
+
}
|
|
110
|
+
interface VectorRecord {
|
|
111
|
+
chunkId: number;
|
|
112
|
+
embedding: Float32Array;
|
|
113
|
+
}
|
|
114
|
+
type SearchResultSource = KnowledgeSearchSource;
|
|
115
|
+
interface SearchResult extends BaseSearchResult {
|
|
116
|
+
chunk: Chunk & {
|
|
117
|
+
path: string;
|
|
118
|
+
};
|
|
119
|
+
document: Document;
|
|
120
|
+
nodes?: NodeWithEdges[];
|
|
121
|
+
source: SearchResultSource;
|
|
122
|
+
}
|
|
123
|
+
type SearchOptions = KnowledgeSearchOptions;
|
|
124
|
+
interface IngestResult {
|
|
125
|
+
documentId: number;
|
|
126
|
+
chunksCreated: number;
|
|
127
|
+
vectorsCreated: number;
|
|
128
|
+
entitiesExtracted?: number;
|
|
129
|
+
relationsExtracted?: number;
|
|
130
|
+
summary?: string;
|
|
131
|
+
}
|
|
132
|
+
interface KnowledgeBaseStatus {
|
|
133
|
+
dbPath: string;
|
|
134
|
+
documentsCount: number;
|
|
135
|
+
chunksCount: number;
|
|
136
|
+
nodesCount: number;
|
|
137
|
+
edgesCount: number;
|
|
138
|
+
vectorDims: number;
|
|
139
|
+
vectorSearchAvailable: boolean;
|
|
140
|
+
llmAvailable: boolean;
|
|
141
|
+
healthy: boolean;
|
|
142
|
+
}
|
|
143
|
+
declare enum KnowledgeBaseErrorCode {
|
|
144
|
+
DATABASE_INIT_FAILED = "DATABASE_INIT_FAILED",
|
|
145
|
+
DATABASE_NOT_INITIALIZED = "DATABASE_NOT_INITIALIZED",
|
|
146
|
+
DATABASE_QUERY_FAILED = "DATABASE_QUERY_FAILED",
|
|
147
|
+
DOCUMENT_PARSE_FAILED = "DOCUMENT_PARSE_FAILED",
|
|
148
|
+
EMBEDDING_FAILED = "EMBEDDING_FAILED",
|
|
149
|
+
ENTITY_EXTRACTION_FAILED = "ENTITY_EXTRACTION_FAILED",
|
|
150
|
+
SEARCH_FAILED = "SEARCH_FAILED",
|
|
151
|
+
NODE_NOT_FOUND = "NODE_NOT_FOUND",
|
|
152
|
+
EDGE_NOT_FOUND = "EDGE_NOT_FOUND",
|
|
153
|
+
INVALID_CONFIG = "INVALID_CONFIG",
|
|
154
|
+
MODEL_INJECTION_FAILED = "MODEL_INJECTION_FAILED"
|
|
155
|
+
}
|
|
156
|
+
declare class KnowledgeBaseError extends Error {
|
|
157
|
+
code: KnowledgeBaseErrorCode;
|
|
158
|
+
cause?: Error | undefined;
|
|
159
|
+
constructor(message: string, code: KnowledgeBaseErrorCode, cause?: Error | undefined);
|
|
160
|
+
toString(): string;
|
|
161
|
+
}
|
|
162
|
+
type LanguageModelPrompt = LanguageModelV3Message[];
|
|
163
|
+
interface INoteKnowledge {
|
|
164
|
+
initialize(): Promise<void>;
|
|
165
|
+
ingestDocument(filePath: string): Promise<IngestResult>;
|
|
166
|
+
scanAndIngest(progress?: (current: number, total: number, file: ScannedFile) => void): Promise<IngestResult[]>;
|
|
167
|
+
sync(progress?: (current: number, total: number, file: ScannedFile) => void): Promise<void>;
|
|
168
|
+
search(query: string, options?: SearchOptions): Promise<SearchResult[]>;
|
|
169
|
+
queryNodes(filter: NodeQueryFilter): Promise<Node[]>;
|
|
170
|
+
queryEdges(filter: EdgeQueryFilter): Promise<Edge[]>;
|
|
171
|
+
findPath(startNode: string, endNode: string, maxDepth?: number): Promise<Node[][]>;
|
|
172
|
+
queryNeighbors(nodeId: number, options?: RelationQueryOptions): Promise<{
|
|
173
|
+
nodes: Node[];
|
|
174
|
+
edges: Edge[];
|
|
175
|
+
}>;
|
|
176
|
+
queryCallGraph(nodeId: number, depth?: number): Promise<Map<number, CallGraphNode>>;
|
|
177
|
+
queryInheritance(nodeId: number): Promise<InheritanceQueryResult>;
|
|
178
|
+
getStatus(): KnowledgeBaseStatus;
|
|
179
|
+
healthCheck(): Promise<boolean>;
|
|
180
|
+
clear(): Promise<void>;
|
|
181
|
+
close(): Promise<void>;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
declare class NoteKnowledge implements INoteKnowledge {
|
|
185
|
+
private config;
|
|
186
|
+
private db;
|
|
187
|
+
private pipeline;
|
|
188
|
+
private searchEngine;
|
|
189
|
+
private graphInterface;
|
|
190
|
+
private fileScanner;
|
|
191
|
+
private initialized;
|
|
192
|
+
private dirty;
|
|
193
|
+
private syncTimer?;
|
|
194
|
+
private syncConfig;
|
|
195
|
+
constructor(config: NoteKnowledgeConfig);
|
|
196
|
+
initialize(): Promise<void>;
|
|
197
|
+
private startSyncTimer;
|
|
198
|
+
private stopSyncTimer;
|
|
199
|
+
private syncAll;
|
|
200
|
+
ingestDocument(filePath: string): Promise<IngestResult>;
|
|
201
|
+
ingestDocuments(filePaths: string[], progress?: (p: number) => void): Promise<IngestResult[]>;
|
|
202
|
+
scanAndIngest(progress?: (current: number, total: number, file: ScannedFile) => void): Promise<IngestResult[]>;
|
|
203
|
+
ingestUploadedFile(filePath: string): Promise<IngestResult>;
|
|
204
|
+
removeDocument(filePath: string): Promise<void>;
|
|
205
|
+
sync(progress?: (current: number, total: number, file: ScannedFile) => void): Promise<void>;
|
|
206
|
+
search(query: string, options?: SearchOptions): Promise<SearchResult[]>;
|
|
207
|
+
queryNodes(sql: string, params?: unknown[]): Promise<Node[]>;
|
|
208
|
+
queryNodes(filter: NodeQueryFilter): Promise<Node[]>;
|
|
209
|
+
queryEdges(sql: string, params?: unknown[]): Promise<Edge[]>;
|
|
210
|
+
queryEdges(filter: EdgeQueryFilter): Promise<Edge[]>;
|
|
211
|
+
findPath(startNode: string, endNode: string, maxDepth?: number): Promise<Node[][]>;
|
|
212
|
+
queryNeighbors(nodeId: number, options?: RelationQueryOptions): Promise<{
|
|
213
|
+
nodes: Node[];
|
|
214
|
+
edges: Edge[];
|
|
215
|
+
}>;
|
|
216
|
+
queryCallGraph(nodeId: number, depth?: number): Promise<Map<number, CallGraphNode>>;
|
|
217
|
+
queryInheritance(nodeId: number): Promise<InheritanceQueryResult>;
|
|
218
|
+
createNode(name: string, type: string, properties?: Record<string, unknown>): Promise<Node>;
|
|
219
|
+
updateNode(id: number, properties: Record<string, unknown>): Promise<Node>;
|
|
220
|
+
deleteNode(id: number): Promise<void>;
|
|
221
|
+
createEdge(source: number, target: number, relation: string, properties?: Record<string, unknown>): Promise<Edge>;
|
|
222
|
+
deleteEdge(id: number): Promise<void>;
|
|
223
|
+
getStatus(): KnowledgeBaseStatus;
|
|
224
|
+
healthCheck(): Promise<boolean>;
|
|
225
|
+
clear(): Promise<void>;
|
|
226
|
+
private ensureInitialized;
|
|
227
|
+
close(): Promise<void>;
|
|
228
|
+
}
|
|
229
|
+
declare function createNoteKnowledge(config: NoteKnowledgeConfig): Promise<INoteKnowledge>;
|
|
230
|
+
|
|
231
|
+
interface LlmModels {
|
|
232
|
+
embeddingLlm?: EmbeddingModel;
|
|
233
|
+
graphLlm?: LanguageModel;
|
|
234
|
+
rerankLlm?: RerankingModel;
|
|
235
|
+
}
|
|
236
|
+
interface LlmOptions {
|
|
237
|
+
maxOutputTokens?: number;
|
|
238
|
+
temperature?: number;
|
|
239
|
+
}
|
|
240
|
+
interface LlmInitConfig {
|
|
241
|
+
models: LlmModels;
|
|
242
|
+
options?: {
|
|
243
|
+
graph?: LlmOptions;
|
|
244
|
+
rerankTopN?: number;
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
declare namespace Llm {
|
|
248
|
+
function init(config: LlmInitConfig): void;
|
|
249
|
+
function isInitialized(): boolean;
|
|
250
|
+
function capabilities(): {
|
|
251
|
+
embedding: boolean;
|
|
252
|
+
graphLlm: boolean;
|
|
253
|
+
rerankLlm: boolean;
|
|
254
|
+
};
|
|
255
|
+
function embedText(value: string): Promise<Float32Array>;
|
|
256
|
+
function embedTexts(values: string[]): Promise<Float32Array[]>;
|
|
257
|
+
function generateGraph(chunks: string[], options?: LlmOptions): Promise<string>;
|
|
258
|
+
function rerank(query: string, documents: string[], topN?: number): Promise<Array<{
|
|
259
|
+
index: number;
|
|
260
|
+
score: number;
|
|
261
|
+
}>>;
|
|
262
|
+
const embed: typeof embedText;
|
|
263
|
+
const embedMany: typeof embedTexts;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
declare function initTokenizer(params?: {
|
|
267
|
+
dictPath?: string[];
|
|
268
|
+
hmm?: boolean;
|
|
269
|
+
}): Promise<void>;
|
|
270
|
+
declare function loadCustomDict(dictPath: string): Promise<void>;
|
|
271
|
+
declare function tokenize(text: string): string[];
|
|
272
|
+
declare function tokenizeForSearch(text: string): string[];
|
|
273
|
+
declare function addWord(word: string, freq?: number, tag?: string): void;
|
|
274
|
+
declare function isInitialized(): boolean;
|
|
275
|
+
declare function closeTokenizer(): Promise<void>;
|
|
276
|
+
declare function toFtsTokens(text: string): string;
|
|
277
|
+
declare function toFtsTokensForSearch(text: string): string;
|
|
278
|
+
|
|
279
|
+
export { type CallGraphNode, type Chunk, type Document, type DocumentMetadata, type Edge, type EdgeQueryFilter, FileScanner, type INoteKnowledge, type IngestResult, type InheritanceQueryResult, KnowledgeBaseError, KnowledgeBaseErrorCode, type KnowledgeBaseStatus, type LanguageModelPrompt, Llm, type Node, type NodeQueryFilter, type NodeWithEdges, NoteKnowledge, type NoteKnowledgeConfig, type RelationQueryOptions, type ScannedFile, type ScannerOptions, type SearchOptions, type SearchResult, type SearchResultSource, type VectorRecord, addWord, closeTokenizer, createNoteKnowledge, initTokenizer, isInitialized, loadCustomDict, toFtsTokens, toFtsTokensForSearch, tokenize, tokenizeForSearch };
|