@backendkit-labs/curator-codex-agent 0.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.
- package/AGENT.md +187 -0
- package/README.md +475 -0
- package/dist/analyzer.d.ts +44 -0
- package/dist/analyzer.d.ts.map +1 -0
- package/dist/analyzer.js +381 -0
- package/dist/analyzer.js.map +1 -0
- package/dist/api/config.d.ts +57 -0
- package/dist/api/config.d.ts.map +1 -0
- package/dist/api/config.js +183 -0
- package/dist/api/config.js.map +1 -0
- package/dist/api/http-server.d.ts +24 -0
- package/dist/api/http-server.d.ts.map +1 -0
- package/dist/api/http-server.js +108 -0
- package/dist/api/http-server.js.map +1 -0
- package/dist/api/routes.d.ts +8 -0
- package/dist/api/routes.d.ts.map +1 -0
- package/dist/api/routes.js +382 -0
- package/dist/api/routes.js.map +1 -0
- package/dist/api/security.d.ts +107 -0
- package/dist/api/security.d.ts.map +1 -0
- package/dist/api/security.js +200 -0
- package/dist/api/security.js.map +1 -0
- package/dist/checksum.d.ts +56 -0
- package/dist/checksum.d.ts.map +1 -0
- package/dist/checksum.js +186 -0
- package/dist/checksum.js.map +1 -0
- package/dist/documentation-curator.d.ts +18 -0
- package/dist/documentation-curator.d.ts.map +1 -0
- package/dist/documentation-curator.js +231 -0
- package/dist/documentation-curator.js.map +1 -0
- package/dist/http-server-main.d.ts +28 -0
- package/dist/http-server-main.d.ts.map +1 -0
- package/dist/http-server-main.js +69 -0
- package/dist/http-server-main.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/knowledge/engine.d.ts +90 -0
- package/dist/knowledge/engine.d.ts.map +1 -0
- package/dist/knowledge/engine.js +181 -0
- package/dist/knowledge/engine.js.map +1 -0
- package/dist/knowledge/rag-provider.d.ts +87 -0
- package/dist/knowledge/rag-provider.d.ts.map +1 -0
- package/dist/knowledge/rag-provider.js +189 -0
- package/dist/knowledge/rag-provider.js.map +1 -0
- package/dist/knowledge/synthesis.d.ts +27 -0
- package/dist/knowledge/synthesis.d.ts.map +1 -0
- package/dist/knowledge/synthesis.js +142 -0
- package/dist/knowledge/synthesis.js.map +1 -0
- package/dist/providers/anthropic-adapter.d.ts +14 -0
- package/dist/providers/anthropic-adapter.d.ts.map +1 -0
- package/dist/providers/anthropic-adapter.js +29 -0
- package/dist/providers/anthropic-adapter.js.map +1 -0
- package/dist/providers/index.d.ts +14 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +29 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/openai-adapter.d.ts +16 -0
- package/dist/providers/openai-adapter.d.ts.map +1 -0
- package/dist/providers/openai-adapter.js +37 -0
- package/dist/providers/openai-adapter.js.map +1 -0
- package/dist/providers/types.d.ts +4 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +3 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/server.d.ts +33 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +640 -0
- package/dist/server.js.map +1 -0
- package/dist/types.d.ts +41 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/dist/watcher.d.ts +26 -0
- package/dist/watcher.d.ts.map +1 -0
- package/dist/watcher.js +168 -0
- package/dist/watcher.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Knowledge Engine
|
|
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 {
|
|
11
|
+
rag;
|
|
12
|
+
synthesizer;
|
|
13
|
+
isInitialized = false;
|
|
14
|
+
constructor(provider, vaultPath) {
|
|
15
|
+
this.rag = new rag_provider_js_1.CuratorRagProvider(vaultPath);
|
|
16
|
+
this.synthesizer = new synthesis_js_1.KnowledgeSynthesizer(provider, vaultPath);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Initialize the knowledge engine
|
|
20
|
+
*/
|
|
21
|
+
async initialize() {
|
|
22
|
+
try {
|
|
23
|
+
await this.rag.indexVault();
|
|
24
|
+
this.isInitialized = true;
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
console.error('Knowledge engine initialization failed:', err);
|
|
28
|
+
throw err;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Search the vault
|
|
33
|
+
*/
|
|
34
|
+
async search(query, opts = {}) {
|
|
35
|
+
const start = Date.now();
|
|
36
|
+
if (!this.isInitialized) {
|
|
37
|
+
await this.initialize();
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
const results = await this.rag.search(query, { topK: opts.topK || 5 });
|
|
41
|
+
let synthesized = undefined;
|
|
42
|
+
if (opts.autoSynthesize !== false && results.length > 0) {
|
|
43
|
+
const synthesis = await this.synthesizer.synthesize(query, results);
|
|
44
|
+
if (synthesis) {
|
|
45
|
+
const saved = await this.synthesizer.saveNote(synthesis);
|
|
46
|
+
if (saved) {
|
|
47
|
+
synthesized = {
|
|
48
|
+
title: synthesis.title,
|
|
49
|
+
content: synthesis.content.slice(0, 500), // Preview
|
|
50
|
+
basedOn: synthesis.basedOn,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
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
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Reload and reindex the vault
|
|
70
|
+
*/
|
|
71
|
+
async reload() {
|
|
72
|
+
const start = Date.now();
|
|
73
|
+
try {
|
|
74
|
+
const result = await this.rag.reload();
|
|
75
|
+
this.isInitialized = true;
|
|
76
|
+
return {
|
|
77
|
+
indexed: result.indexed,
|
|
78
|
+
updated: result.updated,
|
|
79
|
+
durationMs: Date.now() - start,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
console.error('Reload failed:', err);
|
|
84
|
+
throw err;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Get engine statistics
|
|
89
|
+
*/
|
|
90
|
+
async getStats() {
|
|
91
|
+
return {
|
|
92
|
+
initialized: this.isInitialized,
|
|
93
|
+
vaultStats: await this.rag.getStats(),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
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
|
+
}
|
|
180
|
+
exports.KnowledgeEngine = KnowledgeEngine;
|
|
181
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/knowledge/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RAG Provider for Curator-Codex
|
|
3
|
+
* Wraps ObsidianRAGProvider with semantic search capabilities
|
|
4
|
+
*/
|
|
5
|
+
export interface RagSearchResult {
|
|
6
|
+
title: string;
|
|
7
|
+
content: string;
|
|
8
|
+
relevance: number;
|
|
9
|
+
sourcePath: string;
|
|
10
|
+
sourceRef?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface RagSearchOptions {
|
|
13
|
+
topK?: number;
|
|
14
|
+
minScore?: number;
|
|
15
|
+
}
|
|
16
|
+
export declare class CuratorRagProvider {
|
|
17
|
+
private rag;
|
|
18
|
+
private vaultPath;
|
|
19
|
+
private isIndexed;
|
|
20
|
+
constructor(vaultPath: string);
|
|
21
|
+
private getIndexPath;
|
|
22
|
+
/**
|
|
23
|
+
* Index the vault (loads all notes and creates embeddings)
|
|
24
|
+
*/
|
|
25
|
+
indexVault(): Promise<{
|
|
26
|
+
indexed: number;
|
|
27
|
+
updated: number;
|
|
28
|
+
}>;
|
|
29
|
+
/**
|
|
30
|
+
* Search the vault with semantic search
|
|
31
|
+
*/
|
|
32
|
+
search(query: string, opts?: RagSearchOptions): Promise<RagSearchResult[]>;
|
|
33
|
+
/**
|
|
34
|
+
* Reload/reindex the vault
|
|
35
|
+
*/
|
|
36
|
+
reload(): Promise<{
|
|
37
|
+
indexed: number;
|
|
38
|
+
updated: number;
|
|
39
|
+
}>;
|
|
40
|
+
/**
|
|
41
|
+
* Get vault statistics
|
|
42
|
+
*/
|
|
43
|
+
getStats(): Promise<{
|
|
44
|
+
indexed: boolean;
|
|
45
|
+
vaultPath: string;
|
|
46
|
+
indexPath: string;
|
|
47
|
+
}>;
|
|
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
|
+
}
|
|
87
|
+
//# sourceMappingURL=rag-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rag-provider.d.ts","sourceRoot":"","sources":["../../src/knowledge/rag-provider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,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,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAkB;gBAEvB,SAAS,EAAE,MAAM;IAW7B,OAAO,CAAC,YAAY;IAKpB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAWjE;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IA4BpF;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAK7D;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC;QACtB,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACrB,CAAC;IAQF;;OAEG;IACH,gBAAgB;;;;;;;;;;;;;;;;;wBAkBc;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE;;IAiB9D;;OAEG;IACH,gBAAgB;;;;;;;;;;CAyBnB"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* RAG Provider for Curator-Codex
|
|
4
|
+
* Wraps ObsidianRAGProvider with semantic search capabilities
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.CuratorRagProvider = void 0;
|
|
41
|
+
const agent_enterprise_1 = require("@backendkit-labs/agent-enterprise");
|
|
42
|
+
const path = __importStar(require("node:path"));
|
|
43
|
+
class CuratorRagProvider {
|
|
44
|
+
rag;
|
|
45
|
+
vaultPath;
|
|
46
|
+
isIndexed = false;
|
|
47
|
+
constructor(vaultPath) {
|
|
48
|
+
this.vaultPath = vaultPath;
|
|
49
|
+
this.rag = new agent_enterprise_1.ObsidianRAGProvider({
|
|
50
|
+
vaultPath,
|
|
51
|
+
indexPath: this.getIndexPath(),
|
|
52
|
+
embedder: new agent_enterprise_1.SimpleEmbedder(),
|
|
53
|
+
topK: 5,
|
|
54
|
+
minScore: 0.1,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
getIndexPath() {
|
|
58
|
+
const homeDir = process.env.HOME || process.env.USERPROFILE || '/tmp';
|
|
59
|
+
return path.join(homeDir, '.curator-codex', 'rag', `${path.basename(this.vaultPath)}.json`);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Index the vault (loads all notes and creates embeddings)
|
|
63
|
+
*/
|
|
64
|
+
async indexVault() {
|
|
65
|
+
try {
|
|
66
|
+
const result = await this.rag.index({ verbose: false });
|
|
67
|
+
this.isIndexed = true;
|
|
68
|
+
return result;
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
console.error('Failed to index vault:', err);
|
|
72
|
+
throw new Error(`RAG indexing failed: ${err.message}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Search the vault with semantic search
|
|
77
|
+
*/
|
|
78
|
+
async search(query, opts = {}) {
|
|
79
|
+
if (!this.isIndexed) {
|
|
80
|
+
await this.indexVault();
|
|
81
|
+
}
|
|
82
|
+
try {
|
|
83
|
+
const results = await this.rag.search(query, {
|
|
84
|
+
topK: opts.topK || 5,
|
|
85
|
+
minScore: opts.minScore || 0.1,
|
|
86
|
+
});
|
|
87
|
+
if (!Array.isArray(results)) {
|
|
88
|
+
return [];
|
|
89
|
+
}
|
|
90
|
+
return results.map((r) => ({
|
|
91
|
+
title: r.title || 'Untitled',
|
|
92
|
+
content: r.content || r.text || '',
|
|
93
|
+
relevance: r.score || r.relevance || 0,
|
|
94
|
+
sourcePath: r.path || r.source || '',
|
|
95
|
+
sourceRef: r.sourceRef || undefined,
|
|
96
|
+
}));
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
console.error('Search failed:', err);
|
|
100
|
+
throw new Error(`RAG search failed: ${err.message}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Reload/reindex the vault
|
|
105
|
+
*/
|
|
106
|
+
async reload() {
|
|
107
|
+
this.isIndexed = false;
|
|
108
|
+
return await this.indexVault();
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Get vault statistics
|
|
112
|
+
*/
|
|
113
|
+
async getStats() {
|
|
114
|
+
return {
|
|
115
|
+
indexed: this.isIndexed,
|
|
116
|
+
vaultPath: this.vaultPath,
|
|
117
|
+
indexPath: this.getIndexPath(),
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Create MCP tool for search
|
|
122
|
+
*/
|
|
123
|
+
createSearchTool() {
|
|
124
|
+
return {
|
|
125
|
+
name: 'knowledge_search',
|
|
126
|
+
description: 'Search the vault using semantic search (RAG). Returns relevant notes based on your query.',
|
|
127
|
+
inputSchema: {
|
|
128
|
+
type: 'object',
|
|
129
|
+
properties: {
|
|
130
|
+
query: {
|
|
131
|
+
type: 'string',
|
|
132
|
+
description: 'Search query (natural language)',
|
|
133
|
+
},
|
|
134
|
+
topK: {
|
|
135
|
+
type: 'number',
|
|
136
|
+
description: 'Number of results to return (default: 5)',
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
required: ['query'],
|
|
140
|
+
},
|
|
141
|
+
handler: async (args) => {
|
|
142
|
+
try {
|
|
143
|
+
const results = await this.search(args.query, { topK: args.topK });
|
|
144
|
+
return JSON.stringify({
|
|
145
|
+
query: args.query,
|
|
146
|
+
results,
|
|
147
|
+
count: results.length,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
return JSON.stringify({
|
|
152
|
+
error: err.message,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Create MCP tool for reload
|
|
160
|
+
*/
|
|
161
|
+
createReloadTool() {
|
|
162
|
+
return {
|
|
163
|
+
name: 'knowledge_reload',
|
|
164
|
+
description: 'Reload and reindex the vault. Call this after external changes to the vault.',
|
|
165
|
+
inputSchema: {
|
|
166
|
+
type: 'object',
|
|
167
|
+
properties: {},
|
|
168
|
+
required: [],
|
|
169
|
+
},
|
|
170
|
+
handler: async () => {
|
|
171
|
+
try {
|
|
172
|
+
const result = await this.reload();
|
|
173
|
+
return JSON.stringify({
|
|
174
|
+
success: true,
|
|
175
|
+
indexed: result.indexed,
|
|
176
|
+
updated: result.updated,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
catch (err) {
|
|
180
|
+
return JSON.stringify({
|
|
181
|
+
error: err.message,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
},
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
exports.CuratorRagProvider = CuratorRagProvider;
|
|
189
|
+
//# sourceMappingURL=rag-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rag-provider.js","sourceRoot":"","sources":["../../src/knowledge/rag-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Knowledge Synthesis Engine
|
|
3
|
+
* Generates synthetic notes from search results and base notes
|
|
4
|
+
*/
|
|
5
|
+
import type { CuratorLLMProvider } from '../providers/types.js';
|
|
6
|
+
import type { RagSearchResult } from './rag-provider.js';
|
|
7
|
+
export interface SynthesizedNote {
|
|
8
|
+
title: string;
|
|
9
|
+
content: string;
|
|
10
|
+
basedOn: string[];
|
|
11
|
+
synthesisVersion: number;
|
|
12
|
+
generatedAt: string;
|
|
13
|
+
}
|
|
14
|
+
export declare class KnowledgeSynthesizer {
|
|
15
|
+
private provider;
|
|
16
|
+
private vaultPath;
|
|
17
|
+
constructor(provider: CuratorLLMProvider, vaultPath: string);
|
|
18
|
+
/**
|
|
19
|
+
* Generate a synthetic note from search results
|
|
20
|
+
*/
|
|
21
|
+
synthesize(query: string, searchResults: RagSearchResult[]): Promise<SynthesizedNote | null>;
|
|
22
|
+
/**
|
|
23
|
+
* Save synthesized note to vault
|
|
24
|
+
*/
|
|
25
|
+
saveNote(note: SynthesizedNote, domainFolder?: string): Promise<string | null>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=synthesis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synthesis.d.ts","sourceRoot":"","sources":["../../src/knowledge/synthesis.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,WAAW,eAAe;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACvB;AAmBD,qBAAa,oBAAoB;IAC7B,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,SAAS,CAAS;gBAEd,QAAQ,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM;IAK3D;;OAEG;IACG,UAAU,CACZ,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,eAAe,EAAE,GACjC,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAqClC;;OAEG;IACG,QAAQ,CAAC,IAAI,EAAE,eAAe,EAAE,YAAY,GAAE,MAAoB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CA+CpG"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Knowledge Synthesis Engine
|
|
4
|
+
* Generates synthetic notes from search results and base notes
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.KnowledgeSynthesizer = void 0;
|
|
41
|
+
const fs = __importStar(require("node:fs/promises"));
|
|
42
|
+
const path = __importStar(require("node:path"));
|
|
43
|
+
const SYNTHESIS_PROMPT = `You are a knowledge synthesis expert.
|
|
44
|
+
|
|
45
|
+
Given a search query and relevant documents from a vault, generate a comprehensive synthetic note that:
|
|
46
|
+
1. Directly answers the query
|
|
47
|
+
2. Integrates insights from multiple documents
|
|
48
|
+
3. Adds clarifying context and practical examples
|
|
49
|
+
4. Is self-contained (reader doesn't need originals)
|
|
50
|
+
5. Uses markdown with ## headings
|
|
51
|
+
|
|
52
|
+
Query: {query}
|
|
53
|
+
|
|
54
|
+
Relevant Documents:
|
|
55
|
+
{documents}
|
|
56
|
+
|
|
57
|
+
Generate a markdown note that synthesizes these documents into a helpful guide.
|
|
58
|
+
Return ONLY the markdown content, no frontmatter.`;
|
|
59
|
+
class KnowledgeSynthesizer {
|
|
60
|
+
provider;
|
|
61
|
+
vaultPath;
|
|
62
|
+
constructor(provider, vaultPath) {
|
|
63
|
+
this.provider = provider;
|
|
64
|
+
this.vaultPath = vaultPath;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Generate a synthetic note from search results
|
|
68
|
+
*/
|
|
69
|
+
async synthesize(query, searchResults) {
|
|
70
|
+
if (searchResults.length === 0) {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
// Build prompt
|
|
74
|
+
const documentsText = searchResults
|
|
75
|
+
.map((r, i) => `## Document ${i + 1}: ${r.title}\n\n${r.content.slice(0, 1000)}`)
|
|
76
|
+
.join('\n\n---\n\n');
|
|
77
|
+
const prompt = SYNTHESIS_PROMPT.replace('{query}', query).replace('{documents}', documentsText);
|
|
78
|
+
try {
|
|
79
|
+
const synthesizedContent = await this.provider.complete('You are a knowledge synthesis expert. Generate high-quality markdown notes.', prompt);
|
|
80
|
+
return {
|
|
81
|
+
title: `${query} — Synthesis`,
|
|
82
|
+
content: synthesizedContent,
|
|
83
|
+
basedOn: searchResults.map(r => r.title),
|
|
84
|
+
synthesisVersion: 1,
|
|
85
|
+
generatedAt: new Date().toISOString(),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
console.error('Synthesis failed:', err);
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Save synthesized note to vault
|
|
95
|
+
*/
|
|
96
|
+
async saveNote(note, domainFolder = 'synthesis') {
|
|
97
|
+
try {
|
|
98
|
+
const dir = path.join(this.vaultPath, domainFolder);
|
|
99
|
+
await fs.mkdir(dir, { recursive: true });
|
|
100
|
+
// Create filename from title
|
|
101
|
+
const slug = note.title
|
|
102
|
+
.toLowerCase()
|
|
103
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
104
|
+
.slice(0, 60);
|
|
105
|
+
const date = new Date().toISOString().slice(0, 10);
|
|
106
|
+
const filename = `${date}-${slug}-v${note.synthesisVersion}.md`;
|
|
107
|
+
const filePath = path.join(dir, filename);
|
|
108
|
+
// Check if exists
|
|
109
|
+
try {
|
|
110
|
+
await fs.access(filePath);
|
|
111
|
+
return null; // Already exists
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
// Doesn't exist, proceed
|
|
115
|
+
}
|
|
116
|
+
// Build frontmatter
|
|
117
|
+
const frontmatter = [
|
|
118
|
+
'---',
|
|
119
|
+
`title: "${note.title.replace(/"/g, '\\"')}"`,
|
|
120
|
+
'area: synthesis',
|
|
121
|
+
'tipo: synthesis',
|
|
122
|
+
`generated_by: knowledge-agent`,
|
|
123
|
+
`synthesis_version: ${note.synthesisVersion}`,
|
|
124
|
+
`based_on: [${note.basedOn.map(b => `"${b}"`).join(', ')}]`,
|
|
125
|
+
`date: ${new Date().toISOString().slice(0, 10)}`,
|
|
126
|
+
'author: "agent/codex"',
|
|
127
|
+
`tags: ["synthesis", "generated"]`,
|
|
128
|
+
'---',
|
|
129
|
+
'',
|
|
130
|
+
note.content,
|
|
131
|
+
].join('\n');
|
|
132
|
+
await fs.writeFile(filePath, frontmatter, 'utf-8');
|
|
133
|
+
return filePath;
|
|
134
|
+
}
|
|
135
|
+
catch (err) {
|
|
136
|
+
console.error('Failed to save note:', err);
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
exports.KnowledgeSynthesizer = KnowledgeSynthesizer;
|
|
142
|
+
//# sourceMappingURL=synthesis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synthesis.js","sourceRoot":"","sources":["../../src/knowledge/synthesis.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { CuratorLLMProvider } from './types.js';
|
|
2
|
+
export interface AnthropicAdapterOptions {
|
|
3
|
+
apiKey: string;
|
|
4
|
+
model?: string;
|
|
5
|
+
maxTokens?: number;
|
|
6
|
+
}
|
|
7
|
+
export declare class AnthropicAdapter implements CuratorLLMProvider {
|
|
8
|
+
private readonly client;
|
|
9
|
+
private readonly model;
|
|
10
|
+
private readonly maxTokens;
|
|
11
|
+
constructor(opts: AnthropicAdapterOptions);
|
|
12
|
+
complete(systemPrompt: string, userMessage: string): Promise<string>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=anthropic-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic-adapter.d.ts","sourceRoot":"","sources":["../../src/providers/anthropic-adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,MAAM,WAAW,uBAAuB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,gBAAiB,YAAW,kBAAkB;IACvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,IAAI,EAAE,uBAAuB;IAMnC,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAU7E"}
|