@backendkit-labs/curator-codex-agent 0.2.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/analyzer.d.ts +1 -17
- package/dist/analyzer.d.ts.map +1 -1
- package/dist/analyzer.js +80 -163
- package/dist/analyzer.js.map +1 -1
- package/dist/audit.d.ts +27 -0
- package/dist/audit.d.ts.map +1 -0
- package/dist/audit.js +43 -0
- package/dist/audit.js.map +1 -0
- package/dist/checksum.d.ts +0 -22
- package/dist/checksum.d.ts.map +1 -1
- package/dist/checksum.js +14 -103
- package/dist/checksum.js.map +1 -1
- package/dist/documentation-curator.d.ts +1 -1
- package/dist/documentation-curator.d.ts.map +1 -1
- package/dist/documentation-curator.js +79 -95
- package/dist/documentation-curator.js.map +1 -1
- package/dist/index.d.ts +19 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -22
- package/dist/index.js.map +1 -1
- package/dist/knowledge/embedder-worker.d.ts +2 -0
- package/dist/knowledge/embedder-worker.d.ts.map +1 -0
- package/dist/knowledge/embedder-worker.js +55 -0
- package/dist/knowledge/embedder-worker.js.map +1 -0
- package/dist/knowledge/engine.d.ts +10 -56
- package/dist/knowledge/engine.d.ts.map +1 -1
- package/dist/knowledge/engine.js +42 -153
- package/dist/knowledge/engine.js.map +1 -1
- package/dist/knowledge/rag-provider.d.ts +14 -56
- package/dist/knowledge/rag-provider.d.ts.map +1 -1
- package/dist/knowledge/rag-provider.js +63 -154
- package/dist/knowledge/rag-provider.js.map +1 -1
- package/dist/knowledge/synthesis.d.ts +0 -10
- package/dist/knowledge/synthesis.d.ts.map +1 -1
- package/dist/knowledge/synthesis.js +32 -77
- package/dist/knowledge/synthesis.js.map +1 -1
- package/dist/knowledge/transformers-embedder.d.ts +61 -0
- package/dist/knowledge/transformers-embedder.d.ts.map +1 -0
- package/dist/knowledge/transformers-embedder.js +222 -0
- package/dist/knowledge/transformers-embedder.js.map +1 -0
- package/dist/pdf-reader.d.ts +11 -0
- package/dist/pdf-reader.d.ts.map +1 -0
- package/dist/pdf-reader.js +21 -0
- package/dist/pdf-reader.js.map +1 -0
- package/dist/project.d.ts +28 -0
- package/dist/project.d.ts.map +1 -0
- package/dist/project.js +88 -0
- package/dist/project.js.map +1 -0
- package/dist/providers/anthropic-adapter.d.ts +2 -2
- package/dist/providers/anthropic-adapter.d.ts.map +1 -1
- package/dist/providers/anthropic-adapter.js +7 -13
- package/dist/providers/anthropic-adapter.js.map +1 -1
- package/dist/providers/index.d.ts +1 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +13 -20
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/openai-adapter.d.ts +2 -2
- package/dist/providers/openai-adapter.d.ts.map +1 -1
- package/dist/providers/openai-adapter.js +7 -13
- package/dist/providers/openai-adapter.js.map +1 -1
- package/dist/providers/types.d.ts +8 -1
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js +1 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -3
- package/dist/types.js.map +1 -1
- package/dist/vault-dedup.d.ts +35 -0
- package/dist/vault-dedup.d.ts.map +1 -0
- package/dist/vault-dedup.js +130 -0
- package/dist/vault-dedup.js.map +1 -0
- package/package.json +45 -58
- package/AGENT.md +0 -187
- package/README.md +0 -475
- package/dist/api/config.d.ts +0 -57
- package/dist/api/config.d.ts.map +0 -1
- package/dist/api/config.js +0 -183
- package/dist/api/config.js.map +0 -1
- package/dist/api/http-server.d.ts +0 -24
- package/dist/api/http-server.d.ts.map +0 -1
- package/dist/api/http-server.js +0 -108
- package/dist/api/http-server.js.map +0 -1
- package/dist/api/routes.d.ts +0 -8
- package/dist/api/routes.d.ts.map +0 -1
- package/dist/api/routes.js +0 -382
- package/dist/api/routes.js.map +0 -1
- package/dist/api/security.d.ts +0 -107
- package/dist/api/security.d.ts.map +0 -1
- package/dist/api/security.js +0 -200
- package/dist/api/security.js.map +0 -1
- package/dist/http-server-main.d.ts +0 -28
- package/dist/http-server-main.d.ts.map +0 -1
- package/dist/http-server-main.js +0 -69
- package/dist/http-server-main.js.map +0 -1
- package/dist/server.d.ts +0 -33
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -640
- package/dist/server.js.map +0 -1
- package/dist/watcher.d.ts +0 -26
- package/dist/watcher.d.ts.map +0 -1
- package/dist/watcher.js +0 -168
- package/dist/watcher.js.map +0 -1
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedder worker — runs transformers.js feature-extraction off the main thread.
|
|
3
|
+
*
|
|
4
|
+
* The embedding model (nomic-embed-text) is CPU-bound and single-threaded; running it
|
|
5
|
+
* inline blocks the event loop, so a reindex starves concurrent search_vault calls.
|
|
6
|
+
* This worker isolates that CPU work: the main thread stays responsive for searches
|
|
7
|
+
* while curation/reindex embeds in the background.
|
|
8
|
+
*
|
|
9
|
+
* Protocol (parentPort messages):
|
|
10
|
+
* → { id, type: 'init', model, quantized } ← { id, ok }
|
|
11
|
+
* → { id, type: 'embed', model, quantized, texts } ← { id, ok, embeddings }
|
|
12
|
+
* ← { type: 'progress', info } (model download progress, no id)
|
|
13
|
+
* ← { id, ok: false, error } (on failure)
|
|
14
|
+
*/
|
|
15
|
+
import { parentPort } from 'node:worker_threads';
|
|
16
|
+
import * as path from 'node:path';
|
|
17
|
+
import * as os from 'node:os';
|
|
18
|
+
let extractorPromise = null;
|
|
19
|
+
async function getExtractor(model, quantized, onProgress) {
|
|
20
|
+
if (!extractorPromise) {
|
|
21
|
+
extractorPromise = (async () => {
|
|
22
|
+
const { pipeline, env } = await import('@xenova/transformers');
|
|
23
|
+
env.cacheDir = path.join(os.homedir(), '.cache', 'codex-context', 'models');
|
|
24
|
+
env.allowRemoteModels = true;
|
|
25
|
+
return pipeline('feature-extraction', model, { quantized, progress_callback: onProgress });
|
|
26
|
+
})();
|
|
27
|
+
}
|
|
28
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
29
|
+
return extractorPromise;
|
|
30
|
+
}
|
|
31
|
+
if (!parentPort) {
|
|
32
|
+
throw new Error('embedder-worker must be run as a worker thread');
|
|
33
|
+
}
|
|
34
|
+
const port = parentPort;
|
|
35
|
+
port.on('message', async (msg) => {
|
|
36
|
+
const { id, type } = msg;
|
|
37
|
+
try {
|
|
38
|
+
if (type === 'init') {
|
|
39
|
+
await getExtractor(msg.model, msg.quantized, (info) => port.postMessage({ type: 'progress', info }));
|
|
40
|
+
port.postMessage({ id, ok: true });
|
|
41
|
+
}
|
|
42
|
+
else if (type === 'embed') {
|
|
43
|
+
const extractor = await getExtractor(msg.model, msg.quantized);
|
|
44
|
+
const output = await extractor(msg.texts ?? [], { pooling: 'mean', normalize: true });
|
|
45
|
+
port.postMessage({ id, ok: true, embeddings: output.tolist() });
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
port.postMessage({ id, ok: false, error: `Unknown message type: ${type}` });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
port.postMessage({ id, ok: false, error: err.message });
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
//# sourceMappingURL=embedder-worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedder-worker.js","sourceRoot":"","sources":["../../src/knowledge/embedder-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAI9B,IAAI,gBAAgB,GAA4B,IAAI,CAAC;AAErD,KAAK,UAAU,YAAY,CACvB,KAAa,EACb,SAAkB,EAClB,UAAyC;IAEzC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpB,gBAAgB,GAAG,CAAC,KAAK,IAAI,EAAE;YAC3B,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;YAC/D,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;YAC5E,GAAG,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAC7B,OAAO,QAAQ,CAAC,oBAAoB,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC,CAAC;QAC/F,CAAC,CAAC,EAAE,CAAC;IACT,CAAC;IACD,8DAA8D;IAC9D,OAAO,gBAAuB,CAAC;AACnC,CAAC;AAED,IAAI,CAAC,UAAU,EAAE,CAAC;IACd,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,IAAI,GAAG,UAAU,CAAC;AAExB,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,GAAuF,EAAE,EAAE;IACjH,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC;IACzB,IAAI,CAAC;QACD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YAClB,MAAM,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACrG,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,CAAC;aAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1B,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACtF,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,yBAAyB,IAAI,EAAE,EAAE,CAAC,CAAC;QAChF,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACvE,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Knowledge Engine
|
|
3
|
-
* Orchestrates RAG search, synthesis, and vault indexing
|
|
4
|
-
*/
|
|
5
1
|
import { type RagSearchResult } from './rag-provider.js';
|
|
6
2
|
import type { CuratorLLMProvider } from '../providers/types.js';
|
|
3
|
+
import type { EmbedderProgress } from './transformers-embedder.js';
|
|
7
4
|
export interface SearchResponse {
|
|
8
5
|
query: string;
|
|
9
6
|
results: RagSearchResult[];
|
|
@@ -24,67 +21,24 @@ export declare class KnowledgeEngine {
|
|
|
24
21
|
private rag;
|
|
25
22
|
private synthesizer;
|
|
26
23
|
private isInitialized;
|
|
24
|
+
private indexQueue;
|
|
27
25
|
constructor(provider: CuratorLLMProvider, vaultPath: string);
|
|
28
|
-
|
|
29
|
-
* Initialize the knowledge engine
|
|
30
|
-
*/
|
|
26
|
+
private serialized;
|
|
31
27
|
initialize(): Promise<void>;
|
|
32
|
-
/**
|
|
33
|
-
* Search the vault
|
|
34
|
-
*/
|
|
35
28
|
search(query: string, opts?: {
|
|
36
29
|
topK?: number;
|
|
37
30
|
autoSynthesize?: boolean;
|
|
38
31
|
}): Promise<SearchResponse>;
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
32
|
+
reload(onProgress?: (p: {
|
|
33
|
+
processed: number;
|
|
34
|
+
total: number;
|
|
35
|
+
}) => void): Promise<ReloadResponse>;
|
|
36
|
+
initEmbedder(onProgress?: (info: EmbedderProgress) => void): Promise<{
|
|
37
|
+
alreadyCached: boolean;
|
|
38
|
+
}>;
|
|
46
39
|
getStats(): Promise<{
|
|
47
40
|
initialized: boolean;
|
|
48
41
|
vaultStats: any;
|
|
49
42
|
}>;
|
|
50
|
-
/**
|
|
51
|
-
* Create MCP tools for knowledge operations
|
|
52
|
-
*/
|
|
53
|
-
createTools(): ({
|
|
54
|
-
name: string;
|
|
55
|
-
description: string;
|
|
56
|
-
inputSchema: {
|
|
57
|
-
type: string;
|
|
58
|
-
properties: {
|
|
59
|
-
query: {
|
|
60
|
-
type: string;
|
|
61
|
-
description: string;
|
|
62
|
-
};
|
|
63
|
-
topK: {
|
|
64
|
-
type: string;
|
|
65
|
-
description: string;
|
|
66
|
-
};
|
|
67
|
-
autoSynthesize: {
|
|
68
|
-
type: string;
|
|
69
|
-
description: string;
|
|
70
|
-
};
|
|
71
|
-
};
|
|
72
|
-
required: string[];
|
|
73
|
-
};
|
|
74
|
-
handler: (args: any) => Promise<string>;
|
|
75
|
-
} | {
|
|
76
|
-
name: string;
|
|
77
|
-
description: string;
|
|
78
|
-
inputSchema: {
|
|
79
|
-
type: string;
|
|
80
|
-
properties: {
|
|
81
|
-
query?: undefined;
|
|
82
|
-
topK?: undefined;
|
|
83
|
-
autoSynthesize?: undefined;
|
|
84
|
-
};
|
|
85
|
-
required: never[];
|
|
86
|
-
};
|
|
87
|
-
handler: () => Promise<string>;
|
|
88
|
-
})[];
|
|
89
43
|
}
|
|
90
44
|
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/knowledge/engine.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/knowledge/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,MAAM,WAAW,cAAc;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IACF,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,eAAe;IACxB,OAAO,CAAC,GAAG,CAAqB;IAChC,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,UAAU,CAAmC;gBAEzC,QAAQ,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM;IAK3D,OAAO,CAAC,UAAU;IAMZ,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,MAAM,CACR,KAAK,EAAE,MAAM,EACb,IAAI,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAO,GACvD,OAAO,CAAC,cAAc,CAAC;IAkCpB,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC;IAS/F,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,GAAG,OAAO,CAAC;QAAE,aAAa,EAAE,OAAO,CAAA;KAAE,CAAC;IAIhG,QAAQ,IAAI,OAAO,CAAC;QAAE,WAAW,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,GAAG,CAAA;KAAE,CAAC;CAMvE"}
|
package/dist/knowledge/engine.js
CHANGED
|
@@ -1,181 +1,70 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
* Orchestrates RAG search, synthesis, and vault indexing
|
|
5
|
-
*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.KnowledgeEngine = void 0;
|
|
8
|
-
const rag_provider_js_1 = require("./rag-provider.js");
|
|
9
|
-
const synthesis_js_1 = require("./synthesis.js");
|
|
10
|
-
class KnowledgeEngine {
|
|
1
|
+
import { CuratorRagProvider } from './rag-provider.js';
|
|
2
|
+
import { KnowledgeSynthesizer } from './synthesis.js';
|
|
3
|
+
export class KnowledgeEngine {
|
|
11
4
|
rag;
|
|
12
5
|
synthesizer;
|
|
13
6
|
isInitialized = false;
|
|
7
|
+
indexQueue = Promise.resolve();
|
|
14
8
|
constructor(provider, vaultPath) {
|
|
15
|
-
this.rag = new
|
|
16
|
-
this.synthesizer = new
|
|
9
|
+
this.rag = new CuratorRagProvider(vaultPath);
|
|
10
|
+
this.synthesizer = new KnowledgeSynthesizer(provider, vaultPath);
|
|
11
|
+
}
|
|
12
|
+
serialized(fn) {
|
|
13
|
+
const next = this.indexQueue.then(() => fn(), () => fn());
|
|
14
|
+
this.indexQueue = next.then(() => { }, () => { });
|
|
15
|
+
return next;
|
|
17
16
|
}
|
|
18
|
-
/**
|
|
19
|
-
* Initialize the knowledge engine
|
|
20
|
-
*/
|
|
21
17
|
async initialize() {
|
|
22
|
-
|
|
18
|
+
return this.serialized(async () => {
|
|
23
19
|
await this.rag.indexVault();
|
|
24
20
|
this.isInitialized = true;
|
|
25
|
-
}
|
|
26
|
-
catch (err) {
|
|
27
|
-
console.error('Knowledge engine initialization failed:', err);
|
|
28
|
-
throw err;
|
|
29
|
-
}
|
|
21
|
+
});
|
|
30
22
|
}
|
|
31
|
-
/**
|
|
32
|
-
* Search the vault
|
|
33
|
-
*/
|
|
34
23
|
async search(query, opts = {}) {
|
|
35
24
|
const start = Date.now();
|
|
36
25
|
if (!this.isInitialized) {
|
|
37
26
|
await this.initialize();
|
|
38
27
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}
|
|
28
|
+
const results = await this.rag.search(query, { topK: opts.topK || 5 });
|
|
29
|
+
// Synthesis is opt-in: it costs an extra LLM round-trip and writes a note to the vault.
|
|
30
|
+
let synthesized = undefined;
|
|
31
|
+
if (opts.autoSynthesize === true && results.length > 0) {
|
|
32
|
+
const synthesis = await this.synthesizer.synthesize(query, results);
|
|
33
|
+
if (synthesis) {
|
|
34
|
+
const saved = await this.synthesizer.saveNote(synthesis);
|
|
35
|
+
if (saved) {
|
|
36
|
+
synthesized = {
|
|
37
|
+
title: synthesis.title,
|
|
38
|
+
content: synthesis.content.slice(0, 500),
|
|
39
|
+
basedOn: synthesis.basedOn,
|
|
40
|
+
};
|
|
53
41
|
}
|
|
54
42
|
}
|
|
55
|
-
return {
|
|
56
|
-
query,
|
|
57
|
-
results,
|
|
58
|
-
synthesized,
|
|
59
|
-
totalResults: results.length,
|
|
60
|
-
durationMs: Date.now() - start,
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
catch (err) {
|
|
64
|
-
console.error('Search failed:', err);
|
|
65
|
-
throw err;
|
|
66
43
|
}
|
|
44
|
+
return {
|
|
45
|
+
query,
|
|
46
|
+
results,
|
|
47
|
+
synthesized,
|
|
48
|
+
totalResults: results.length,
|
|
49
|
+
durationMs: Date.now() - start,
|
|
50
|
+
};
|
|
67
51
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
const start = Date.now();
|
|
73
|
-
try {
|
|
74
|
-
const result = await this.rag.reload();
|
|
52
|
+
async reload(onProgress) {
|
|
53
|
+
return this.serialized(async () => {
|
|
54
|
+
const start = Date.now();
|
|
55
|
+
const result = await this.rag.reload(onProgress);
|
|
75
56
|
this.isInitialized = true;
|
|
76
|
-
return {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
}
|
|
82
|
-
catch (err) {
|
|
83
|
-
console.error('Reload failed:', err);
|
|
84
|
-
throw err;
|
|
85
|
-
}
|
|
57
|
+
return { indexed: result.indexed, updated: result.updated ?? 0, durationMs: Date.now() - start };
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
async initEmbedder(onProgress) {
|
|
61
|
+
return this.rag.initEmbedder(onProgress);
|
|
86
62
|
}
|
|
87
|
-
/**
|
|
88
|
-
* Get engine statistics
|
|
89
|
-
*/
|
|
90
63
|
async getStats() {
|
|
91
64
|
return {
|
|
92
65
|
initialized: this.isInitialized,
|
|
93
66
|
vaultStats: await this.rag.getStats(),
|
|
94
67
|
};
|
|
95
68
|
}
|
|
96
|
-
/**
|
|
97
|
-
* Create MCP tools for knowledge operations
|
|
98
|
-
*/
|
|
99
|
-
createTools() {
|
|
100
|
-
return [
|
|
101
|
-
{
|
|
102
|
-
name: 'knowledge_search',
|
|
103
|
-
description: 'Search the vault using semantic search (RAG). Returns relevant notes and optionally generates a synthetic summary note.',
|
|
104
|
-
inputSchema: {
|
|
105
|
-
type: 'object',
|
|
106
|
-
properties: {
|
|
107
|
-
query: {
|
|
108
|
-
type: 'string',
|
|
109
|
-
description: 'Search query (natural language, e.g., "How to handle errors?")',
|
|
110
|
-
},
|
|
111
|
-
topK: {
|
|
112
|
-
type: 'number',
|
|
113
|
-
description: 'Number of results to return (default: 5)',
|
|
114
|
-
},
|
|
115
|
-
autoSynthesize: {
|
|
116
|
-
type: 'boolean',
|
|
117
|
-
description: 'Automatically generate a synthesis note (default: true)',
|
|
118
|
-
},
|
|
119
|
-
},
|
|
120
|
-
required: ['query'],
|
|
121
|
-
},
|
|
122
|
-
handler: async (args) => {
|
|
123
|
-
try {
|
|
124
|
-
const response = await this.search(args.query, {
|
|
125
|
-
topK: args.topK,
|
|
126
|
-
autoSynthesize: args.autoSynthesize !== false,
|
|
127
|
-
});
|
|
128
|
-
return JSON.stringify(response);
|
|
129
|
-
}
|
|
130
|
-
catch (err) {
|
|
131
|
-
return JSON.stringify({
|
|
132
|
-
error: err.message,
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
},
|
|
136
|
-
},
|
|
137
|
-
{
|
|
138
|
-
name: 'knowledge_reload',
|
|
139
|
-
description: 'Reload and reindex the vault. Call this after external changes to the vault.',
|
|
140
|
-
inputSchema: {
|
|
141
|
-
type: 'object',
|
|
142
|
-
properties: {},
|
|
143
|
-
required: [],
|
|
144
|
-
},
|
|
145
|
-
handler: async () => {
|
|
146
|
-
try {
|
|
147
|
-
const response = await this.reload();
|
|
148
|
-
return JSON.stringify(response);
|
|
149
|
-
}
|
|
150
|
-
catch (err) {
|
|
151
|
-
return JSON.stringify({
|
|
152
|
-
error: err.message,
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
},
|
|
156
|
-
},
|
|
157
|
-
{
|
|
158
|
-
name: 'knowledge_stats',
|
|
159
|
-
description: 'Get knowledge engine statistics.',
|
|
160
|
-
inputSchema: {
|
|
161
|
-
type: 'object',
|
|
162
|
-
properties: {},
|
|
163
|
-
required: [],
|
|
164
|
-
},
|
|
165
|
-
handler: async () => {
|
|
166
|
-
try {
|
|
167
|
-
const stats = await this.getStats();
|
|
168
|
-
return JSON.stringify(stats);
|
|
169
|
-
}
|
|
170
|
-
catch (err) {
|
|
171
|
-
return JSON.stringify({
|
|
172
|
-
error: err.message,
|
|
173
|
-
});
|
|
174
|
-
}
|
|
175
|
-
},
|
|
176
|
-
},
|
|
177
|
-
];
|
|
178
|
-
}
|
|
179
69
|
}
|
|
180
|
-
exports.KnowledgeEngine = KnowledgeEngine;
|
|
181
70
|
//# sourceMappingURL=engine.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/knowledge/engine.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/knowledge/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAwB,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAsBtD,MAAM,OAAO,eAAe;IAChB,GAAG,CAAqB;IACxB,WAAW,CAAuB;IAClC,aAAa,GAAY,KAAK,CAAC;IAC/B,UAAU,GAAiB,OAAO,CAAC,OAAO,EAAE,CAAC;IAErD,YAAY,QAA4B,EAAE,SAAiB;QACvD,IAAI,CAAC,GAAG,GAAG,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,WAAW,GAAG,IAAI,oBAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACrE,CAAC;IAEO,UAAU,CAAI,EAAoB;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,UAAU;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE;YAC9B,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;YAC5B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC9B,CAAC,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,MAAM,CACR,KAAa,EACb,OAAoD,EAAE;QAEtD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEzB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACtB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC5B,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;QAEvE,wFAAwF;QACxF,IAAI,WAAW,GAAkC,SAAS,CAAC;QAC3D,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACpE,IAAI,SAAS,EAAE,CAAC;gBACZ,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBACzD,IAAI,KAAK,EAAE,CAAC;oBACR,WAAW,GAAG;wBACV,KAAK,EAAE,SAAS,CAAC,KAAK;wBACtB,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;wBACxC,OAAO,EAAE,SAAS,CAAC,OAAO;qBAC7B,CAAC;gBACN,CAAC;YACL,CAAC;QACL,CAAC;QAED,OAAO;YACH,KAAK;YACL,OAAO;YACP,WAAW;YACX,YAAY,EAAE,OAAO,CAAC,MAAM;YAC5B,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;SACjC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAA8D;QACvE,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE;YAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACjD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAG,MAAc,CAAC,OAAO,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;QAC9G,CAAC,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,UAA6C;QAC5D,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,QAAQ;QACV,OAAO;YACH,WAAW,EAAE,IAAI,CAAC,aAAa;YAC/B,UAAU,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;SACxC,CAAC;IACN,CAAC;CACJ"}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* RAG Provider for Curator-Codex
|
|
3
|
-
* Wraps ObsidianRAGProvider with semantic search capabilities
|
|
4
|
-
*/
|
|
1
|
+
import { type EmbedderProgress } from './transformers-embedder.js';
|
|
5
2
|
export interface RagSearchResult {
|
|
6
3
|
title: string;
|
|
7
4
|
content: string;
|
|
@@ -15,73 +12,34 @@ export interface RagSearchOptions {
|
|
|
15
12
|
}
|
|
16
13
|
export declare class CuratorRagProvider {
|
|
17
14
|
private rag;
|
|
15
|
+
private embedder;
|
|
18
16
|
private vaultPath;
|
|
19
17
|
private isIndexed;
|
|
18
|
+
private indexing;
|
|
20
19
|
constructor(vaultPath: string);
|
|
20
|
+
initEmbedder(onProgress?: (info: EmbedderProgress) => void): Promise<{
|
|
21
|
+
alreadyCached: boolean;
|
|
22
|
+
}>;
|
|
21
23
|
private getIndexPath;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
indexVault(onProgress?: (p: {
|
|
25
|
+
processed: number;
|
|
26
|
+
total: number;
|
|
27
|
+
}) => void): Promise<{
|
|
26
28
|
indexed: number;
|
|
27
29
|
updated: number;
|
|
28
30
|
}>;
|
|
29
|
-
/**
|
|
30
|
-
* Search the vault with semantic search
|
|
31
|
-
*/
|
|
32
31
|
search(query: string, opts?: RagSearchOptions): Promise<RagSearchResult[]>;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
reload(onProgress?: (p: {
|
|
33
|
+
processed: number;
|
|
34
|
+
total: number;
|
|
35
|
+
}) => void): Promise<{
|
|
37
36
|
indexed: number;
|
|
38
37
|
updated: number;
|
|
39
38
|
}>;
|
|
40
|
-
/**
|
|
41
|
-
* Get vault statistics
|
|
42
|
-
*/
|
|
43
39
|
getStats(): Promise<{
|
|
44
40
|
indexed: boolean;
|
|
45
41
|
vaultPath: string;
|
|
46
42
|
indexPath: string;
|
|
47
43
|
}>;
|
|
48
|
-
/**
|
|
49
|
-
* Create MCP tool for search
|
|
50
|
-
*/
|
|
51
|
-
createSearchTool(): {
|
|
52
|
-
name: string;
|
|
53
|
-
description: string;
|
|
54
|
-
inputSchema: {
|
|
55
|
-
type: string;
|
|
56
|
-
properties: {
|
|
57
|
-
query: {
|
|
58
|
-
type: string;
|
|
59
|
-
description: string;
|
|
60
|
-
};
|
|
61
|
-
topK: {
|
|
62
|
-
type: string;
|
|
63
|
-
description: string;
|
|
64
|
-
};
|
|
65
|
-
};
|
|
66
|
-
required: string[];
|
|
67
|
-
};
|
|
68
|
-
handler: (args: {
|
|
69
|
-
query: string;
|
|
70
|
-
topK?: number;
|
|
71
|
-
}) => Promise<string>;
|
|
72
|
-
};
|
|
73
|
-
/**
|
|
74
|
-
* Create MCP tool for reload
|
|
75
|
-
*/
|
|
76
|
-
createReloadTool(): {
|
|
77
|
-
name: string;
|
|
78
|
-
description: string;
|
|
79
|
-
inputSchema: {
|
|
80
|
-
type: string;
|
|
81
|
-
properties: {};
|
|
82
|
-
required: never[];
|
|
83
|
-
};
|
|
84
|
-
handler: () => Promise<string>;
|
|
85
|
-
};
|
|
86
44
|
}
|
|
87
45
|
//# sourceMappingURL=rag-provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rag-provider.d.ts","sourceRoot":"","sources":["../../src/knowledge/rag-provider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rag-provider.d.ts","sourceRoot":"","sources":["../../src/knowledge/rag-provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAIzF,MAAM,WAAW,eAAe;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAkB;IAGnC,OAAO,CAAC,QAAQ,CAA8D;gBAElE,SAAS,EAAE,MAAM;IAoBvB,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,GAAG,OAAO,CAAC;QAAE,aAAa,EAAE,OAAO,CAAA;KAAE,CAAC;IAItG,OAAO,CAAC,YAAY;IAId,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAoBzH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IA4B9E,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAOrH,QAAQ,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CAOxF"}
|