@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.
Files changed (79) hide show
  1. package/AGENT.md +187 -0
  2. package/README.md +475 -0
  3. package/dist/analyzer.d.ts +44 -0
  4. package/dist/analyzer.d.ts.map +1 -0
  5. package/dist/analyzer.js +381 -0
  6. package/dist/analyzer.js.map +1 -0
  7. package/dist/api/config.d.ts +57 -0
  8. package/dist/api/config.d.ts.map +1 -0
  9. package/dist/api/config.js +183 -0
  10. package/dist/api/config.js.map +1 -0
  11. package/dist/api/http-server.d.ts +24 -0
  12. package/dist/api/http-server.d.ts.map +1 -0
  13. package/dist/api/http-server.js +108 -0
  14. package/dist/api/http-server.js.map +1 -0
  15. package/dist/api/routes.d.ts +8 -0
  16. package/dist/api/routes.d.ts.map +1 -0
  17. package/dist/api/routes.js +382 -0
  18. package/dist/api/routes.js.map +1 -0
  19. package/dist/api/security.d.ts +107 -0
  20. package/dist/api/security.d.ts.map +1 -0
  21. package/dist/api/security.js +200 -0
  22. package/dist/api/security.js.map +1 -0
  23. package/dist/checksum.d.ts +56 -0
  24. package/dist/checksum.d.ts.map +1 -0
  25. package/dist/checksum.js +186 -0
  26. package/dist/checksum.js.map +1 -0
  27. package/dist/documentation-curator.d.ts +18 -0
  28. package/dist/documentation-curator.d.ts.map +1 -0
  29. package/dist/documentation-curator.js +231 -0
  30. package/dist/documentation-curator.js.map +1 -0
  31. package/dist/http-server-main.d.ts +28 -0
  32. package/dist/http-server-main.d.ts.map +1 -0
  33. package/dist/http-server-main.js +69 -0
  34. package/dist/http-server-main.js.map +1 -0
  35. package/dist/index.d.ts +16 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +23 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/knowledge/engine.d.ts +90 -0
  40. package/dist/knowledge/engine.d.ts.map +1 -0
  41. package/dist/knowledge/engine.js +181 -0
  42. package/dist/knowledge/engine.js.map +1 -0
  43. package/dist/knowledge/rag-provider.d.ts +87 -0
  44. package/dist/knowledge/rag-provider.d.ts.map +1 -0
  45. package/dist/knowledge/rag-provider.js +189 -0
  46. package/dist/knowledge/rag-provider.js.map +1 -0
  47. package/dist/knowledge/synthesis.d.ts +27 -0
  48. package/dist/knowledge/synthesis.d.ts.map +1 -0
  49. package/dist/knowledge/synthesis.js +142 -0
  50. package/dist/knowledge/synthesis.js.map +1 -0
  51. package/dist/providers/anthropic-adapter.d.ts +14 -0
  52. package/dist/providers/anthropic-adapter.d.ts.map +1 -0
  53. package/dist/providers/anthropic-adapter.js +29 -0
  54. package/dist/providers/anthropic-adapter.js.map +1 -0
  55. package/dist/providers/index.d.ts +14 -0
  56. package/dist/providers/index.d.ts.map +1 -0
  57. package/dist/providers/index.js +29 -0
  58. package/dist/providers/index.js.map +1 -0
  59. package/dist/providers/openai-adapter.d.ts +16 -0
  60. package/dist/providers/openai-adapter.d.ts.map +1 -0
  61. package/dist/providers/openai-adapter.js +37 -0
  62. package/dist/providers/openai-adapter.js.map +1 -0
  63. package/dist/providers/types.d.ts +4 -0
  64. package/dist/providers/types.d.ts.map +1 -0
  65. package/dist/providers/types.js +3 -0
  66. package/dist/providers/types.js.map +1 -0
  67. package/dist/server.d.ts +33 -0
  68. package/dist/server.d.ts.map +1 -0
  69. package/dist/server.js +640 -0
  70. package/dist/server.js.map +1 -0
  71. package/dist/types.d.ts +41 -0
  72. package/dist/types.d.ts.map +1 -0
  73. package/dist/types.js +4 -0
  74. package/dist/types.js.map +1 -0
  75. package/dist/watcher.d.ts +26 -0
  76. package/dist/watcher.d.ts.map +1 -0
  77. package/dist/watcher.js +168 -0
  78. package/dist/watcher.js.map +1 -0
  79. package/package.json +58 -0
@@ -0,0 +1,231 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.DocumentationCurator = void 0;
37
+ const fs = __importStar(require("node:fs/promises"));
38
+ const path = __importStar(require("node:path"));
39
+ const zod_1 = require("zod");
40
+ const DocumentationNoteSchema = zod_1.z.object({
41
+ type: zod_1.z.enum(['politica', 'decision', 'procedimiento', 'leccion', 'norma_externa']),
42
+ area: zod_1.z.enum(['rrhh', 'finanzas', 'operaciones', 'ventas', 'soporte', 'legal', 'calidad', 'general']),
43
+ title: zod_1.z.string().max(120),
44
+ resumen: zod_1.z.string().max(500),
45
+ content: zod_1.z.string(),
46
+ tags: zod_1.z.array(zod_1.z.string()),
47
+ vigente_desde: zod_1.z.string().optional(),
48
+ version: zod_1.z.number().optional(),
49
+ expires_at: zod_1.z.string().optional(),
50
+ decidido_por: zod_1.z.array(zod_1.z.string()).optional(),
51
+ aplica_a: zod_1.z.array(zod_1.z.string()).optional(),
52
+ });
53
+ const DocumentationResponseSchema = zod_1.z.object({
54
+ notes: zod_1.z.array(DocumentationNoteSchema),
55
+ });
56
+ const SYSTEM_PROMPT = `\
57
+ You are a Knowledge Curator for an enterprise vault.
58
+ Your task: analyze a document and extract structured knowledge notes.
59
+
60
+ IMPORTANT: Return ONLY a valid JSON object — no markdown, no prose, no code fences.
61
+
62
+ Schema (return exactly this shape):
63
+ {
64
+ "notes": [
65
+ {
66
+ "type": "politica" | "decision" | "procedimiento" | "leccion" | "norma_externa",
67
+ "area": "rrhh" | "finanzas" | "operaciones" | "ventas" | "soporte" | "legal" | "calidad" | "general",
68
+ "title": string, // Specific and searchable. Max 120 chars.
69
+ "resumen": string, // 1-2 sentences DENSE with key terms, numbers, rules, names.
70
+ "content": string, // Markdown with ## sections. Extract facts, rules, actions.
71
+ "tags": string[], // e.g. ["área/rrhh", "tipo/politica", "estado/vigente"]
72
+ "vigente_desde": "YYYY-MM-DD" | undefined,
73
+ "version": number | undefined,
74
+ "expires_at": "YYYY-MM-DD" | undefined,
75
+ "decidido_por": string[] | undefined,
76
+ "aplica_a": string[] | undefined
77
+ }
78
+ ]
79
+ }
80
+
81
+ Rules:
82
+ - If the document covers multiple areas, create one note per area (max 5 total).
83
+ - Each note must be self-contained.
84
+ - "resumen" must contain all key searchable terms: amounts, dates, percentages, proper nouns.
85
+ - "content" must use ## headings.
86
+ - Documents in any language are valid. Output in the same language as the document.
87
+ - If the document has no enterprise relevance, return { "notes": [] }.`;
88
+ function slugify(title) {
89
+ return title
90
+ .toLowerCase()
91
+ .normalize('NFD')
92
+ .replace(/[̀-ͯ]/g, '')
93
+ .replace(/[^a-z0-9\s-]/g, '')
94
+ .trim()
95
+ .replace(/\s+/g, '-')
96
+ .slice(0, 60);
97
+ }
98
+ function buildFrontmatter(note, source, date) {
99
+ const tagsLine = `[${note.tags.map(t => `"${t}"`).join(', ')}]`;
100
+ const lines = [
101
+ '---',
102
+ `title: "${note.title.replace(/"/g, '\\"')}"`,
103
+ `area: ${note.area}`,
104
+ `tipo: ${note.type}`,
105
+ `resumen: "${note.resumen.replace(/"/g, '\\"')}"`,
106
+ `author: "agent/codex"`,
107
+ `date: ${date}`,
108
+ `source_ref: "${source}"`,
109
+ `tags: ${tagsLine}`,
110
+ ];
111
+ if (note.vigente_desde)
112
+ lines.push(`vigente_desde: ${note.vigente_desde}`);
113
+ if (note.version)
114
+ lines.push(`version: ${note.version}`);
115
+ if (note.expires_at)
116
+ lines.push(`expires_at: ${note.expires_at}`);
117
+ if (note.decidido_por?.length) {
118
+ lines.push(`decidido_por: [${note.decidido_por.map(d => `"${d}"`).join(', ')}]`);
119
+ }
120
+ if (note.aplica_a?.length) {
121
+ lines.push(`aplica_a: [${note.aplica_a.map(a => `"${a}"`).join(', ')}]`);
122
+ }
123
+ lines.push('---', '', note.content);
124
+ return lines.join('\n');
125
+ }
126
+ class DocumentationCurator {
127
+ provider;
128
+ vaultPath;
129
+ maxInputChars;
130
+ constructor(opts) {
131
+ this.provider = opts.provider;
132
+ this.vaultPath = opts.vaultPath;
133
+ this.maxInputChars = opts.maxInputChars ?? 12_000;
134
+ }
135
+ async curateText(text, source, areaHint) {
136
+ const start = Date.now();
137
+ const result = {
138
+ notesWritten: [],
139
+ notesSkipped: [],
140
+ errors: [],
141
+ durationMs: 0,
142
+ };
143
+ let parsed;
144
+ try {
145
+ parsed = await this.callLLM(text, source, areaHint);
146
+ }
147
+ catch (err) {
148
+ result.errors.push(`LLM call failed: ${err.message}`);
149
+ result.durationMs = Date.now() - start;
150
+ return result;
151
+ }
152
+ if (!parsed.notes.length) {
153
+ result.errors.push('LLM returned no notes — document may not have enterprise relevance.');
154
+ result.durationMs = Date.now() - start;
155
+ return result;
156
+ }
157
+ const date = new Date().toISOString().slice(0, 10);
158
+ for (const note of parsed.notes) {
159
+ try {
160
+ const written = await this.writeNote(note, source, date);
161
+ if (written === null) {
162
+ result.notesSkipped.push(note.title);
163
+ }
164
+ else {
165
+ result.notesWritten.push(written);
166
+ }
167
+ }
168
+ catch (err) {
169
+ result.errors.push(`Failed to write "${note.title}": ${err.message}`);
170
+ }
171
+ }
172
+ result.durationMs = Date.now() - start;
173
+ return result;
174
+ }
175
+ async curateFile(filePath, areaHint) {
176
+ let text;
177
+ try {
178
+ text = await fs.readFile(filePath, 'utf-8');
179
+ }
180
+ catch (err) {
181
+ return {
182
+ notesWritten: [],
183
+ notesSkipped: [],
184
+ errors: [`Cannot read file: ${err.message}`],
185
+ durationMs: 0,
186
+ };
187
+ }
188
+ const source = path.basename(filePath);
189
+ return await this.curateText(text, source, areaHint);
190
+ }
191
+ // ── Private ────────────────────────────────────────────────────────────────
192
+ async callLLM(text, source, areaHint) {
193
+ const truncated = text.slice(0, this.maxInputChars);
194
+ const hintLine = areaHint ? `\nArea hint: this document is primarily about "${areaHint}".` : '';
195
+ const userMsg = `Source: ${source}${hintLine}\n\nDocument:\n${truncated}`;
196
+ const raw = await this.provider.complete(SYSTEM_PROMPT, userMsg);
197
+ const jsonStr = raw.replace(/^```(?:json)?\s*/i, '').replace(/\s*```\s*$/, '').trim();
198
+ const sanitized = jsonStr.replace(/:\s*undefined/g, ': null');
199
+ const parsed = JSON.parse(sanitized);
200
+ if (Array.isArray(parsed?.notes)) {
201
+ for (const note of parsed.notes) {
202
+ if (typeof note.resumen === 'string' && note.resumen.length > 500) {
203
+ note.resumen = note.resumen.slice(0, 497) + '…';
204
+ }
205
+ for (const key of ['vigente_desde', 'version', 'expires_at', 'decidido_por', 'aplica_a']) {
206
+ if (note[key] === null)
207
+ delete note[key];
208
+ }
209
+ }
210
+ }
211
+ return DocumentationResponseSchema.parse(parsed);
212
+ }
213
+ async writeNote(note, source, date) {
214
+ const dir = path.join(this.vaultPath, note.area);
215
+ const slug = slugify(note.title);
216
+ const filename = `${date}-${slug}.md`;
217
+ const filePath = path.join(dir, filename);
218
+ try {
219
+ await fs.access(filePath);
220
+ return null;
221
+ }
222
+ catch {
223
+ // doesn't exist — proceed
224
+ }
225
+ await fs.mkdir(dir, { recursive: true });
226
+ await fs.writeFile(filePath, buildFrontmatter(note, source, date), 'utf-8');
227
+ return filePath;
228
+ }
229
+ }
230
+ exports.DocumentationCurator = DocumentationCurator;
231
+ //# sourceMappingURL=documentation-curator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documentation-curator.js","sourceRoot":"","sources":["../src/documentation-curator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * curator-codex-http — HTTP server for unified curation + knowledge
4
+ *
5
+ * Required env vars:
6
+ * CURATOR_API_KEY — LLM API key
7
+ * CURATOR_OUTPUT_PATH — Vault path
8
+ *
9
+ * Optional:
10
+ * CURATOR_INPUT_PATH — Code/doc directory to curate
11
+ * CURATOR_HTTP_PORT — Server port (default: 3100)
12
+ * CURATOR_PROVIDER — LLM provider (default: deepseek)
13
+ * CURATOR_MODEL — LLM model (default: deepseek-reasoner)
14
+ * CURATOR_BASE_URL — Custom LLM base URL
15
+ *
16
+ * Usage:
17
+ * npm run http-server
18
+ * CURATOR_OUTPUT_PATH=/vault CURATOR_API_KEY=sk-... npm run http-server
19
+ *
20
+ * API Examples:
21
+ * GET http://localhost:3100/ # Info
22
+ * GET http://localhost:3100/status # Status
23
+ * GET http://localhost:3100/curator/config
24
+ * POST http://localhost:3100/curator/config
25
+ * POST http://localhost:3100/curator/process
26
+ */
27
+ import 'dotenv/config';
28
+ //# sourceMappingURL=http-server-main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-server-main.d.ts","sourceRoot":"","sources":["../src/http-server-main.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,eAAe,CAAC"}
@@ -0,0 +1,69 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * curator-codex-http — HTTP server for unified curation + knowledge
5
+ *
6
+ * Required env vars:
7
+ * CURATOR_API_KEY — LLM API key
8
+ * CURATOR_OUTPUT_PATH — Vault path
9
+ *
10
+ * Optional:
11
+ * CURATOR_INPUT_PATH — Code/doc directory to curate
12
+ * CURATOR_HTTP_PORT — Server port (default: 3100)
13
+ * CURATOR_PROVIDER — LLM provider (default: deepseek)
14
+ * CURATOR_MODEL — LLM model (default: deepseek-reasoner)
15
+ * CURATOR_BASE_URL — Custom LLM base URL
16
+ *
17
+ * Usage:
18
+ * npm run http-server
19
+ * CURATOR_OUTPUT_PATH=/vault CURATOR_API_KEY=sk-... npm run http-server
20
+ *
21
+ * API Examples:
22
+ * GET http://localhost:3100/ # Info
23
+ * GET http://localhost:3100/status # Status
24
+ * GET http://localhost:3100/curator/config
25
+ * POST http://localhost:3100/curator/config
26
+ * POST http://localhost:3100/curator/process
27
+ */
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ require("dotenv/config");
30
+ const http_server_js_1 = require("./api/http-server.js");
31
+ async function main() {
32
+ const outputPath = process.env.CURATOR_OUTPUT_PATH;
33
+ const port = process.env.CURATOR_HTTP_PORT ? parseInt(process.env.CURATOR_HTTP_PORT) : 3100;
34
+ if (!outputPath) {
35
+ console.error('✗ CURATOR_OUTPUT_PATH is required');
36
+ process.exit(1);
37
+ }
38
+ if (!process.env.CURATOR_API_KEY) {
39
+ console.error('✗ CURATOR_API_KEY is required');
40
+ process.exit(1);
41
+ }
42
+ const server = new http_server_js_1.CuratorHttpServer({
43
+ port,
44
+ apiConfig: {
45
+ inputPath: process.env.CURATOR_INPUT_PATH,
46
+ outputPath,
47
+ provider: process.env.CURATOR_PROVIDER,
48
+ model: process.env.CURATOR_MODEL,
49
+ baseUrl: process.env.CURATOR_BASE_URL,
50
+ },
51
+ });
52
+ await server.start();
53
+ // Graceful shutdown
54
+ process.on('SIGINT', async () => {
55
+ console.log('\n\n Shutting down...');
56
+ await server.stop();
57
+ process.exit(0);
58
+ });
59
+ process.on('SIGTERM', async () => {
60
+ console.log('\n\n Shutting down...');
61
+ await server.stop();
62
+ process.exit(0);
63
+ });
64
+ }
65
+ main().catch((err) => {
66
+ console.error('Fatal error:', err);
67
+ process.exit(1);
68
+ });
69
+ //# sourceMappingURL=http-server-main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-server-main.js","sourceRoot":"","sources":["../src/http-server-main.ts"],"names":[],"mappings":";;AACA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;;AAEH,yBAAuB;AACvB,yDAAyD;AAEzD,KAAK,UAAU,IAAI;IACf,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IACnD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE5F,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,kCAAiB,CAAC;QACjC,IAAI;QACJ,SAAS,EAAE;YACP,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;YACzC,UAAU;YACV,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB;YACtC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;YAChC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB;SACxC;KACJ,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IAErB,oBAAoB;IACpB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAC5B,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QAC7B,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;AACP,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACjB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ export { CodeAnalyzer } from './analyzer.js';
2
+ export { DocumentationCurator } from './documentation-curator.js';
3
+ export type { CodeAnalysisNote, CodeAnalysisResult, FileAnalysisContext, AssociatedDocs } from './types.js';
4
+ export { createProvider } from './providers/index.js';
5
+ export type { CuratorLLMProvider } from './providers/types.js';
6
+ export { OpenAIAdapter, AnthropicAdapter } from './providers/index.js';
7
+ export { CuratorHttpServer } from './api/http-server.js';
8
+ export { ConfigManager } from './api/config.js';
9
+ export type { ApiConfig } from './api/config.js';
10
+ export { CuratorRagProvider } from './knowledge/rag-provider.js';
11
+ export type { RagSearchResult, RagSearchOptions } from './knowledge/rag-provider.js';
12
+ export { KnowledgeSynthesizer } from './knowledge/synthesis.js';
13
+ export type { SynthesizedNote } from './knowledge/synthesis.js';
14
+ export { KnowledgeEngine } from './knowledge/engine.js';
15
+ export type { SearchResponse, ReloadResponse } from './knowledge/engine.js';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5G,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,YAAY,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.KnowledgeEngine = exports.KnowledgeSynthesizer = exports.CuratorRagProvider = exports.ConfigManager = exports.CuratorHttpServer = exports.AnthropicAdapter = exports.OpenAIAdapter = exports.createProvider = exports.DocumentationCurator = exports.CodeAnalyzer = void 0;
4
+ var analyzer_js_1 = require("./analyzer.js");
5
+ Object.defineProperty(exports, "CodeAnalyzer", { enumerable: true, get: function () { return analyzer_js_1.CodeAnalyzer; } });
6
+ var documentation_curator_js_1 = require("./documentation-curator.js");
7
+ Object.defineProperty(exports, "DocumentationCurator", { enumerable: true, get: function () { return documentation_curator_js_1.DocumentationCurator; } });
8
+ var index_js_1 = require("./providers/index.js");
9
+ Object.defineProperty(exports, "createProvider", { enumerable: true, get: function () { return index_js_1.createProvider; } });
10
+ var index_js_2 = require("./providers/index.js");
11
+ Object.defineProperty(exports, "OpenAIAdapter", { enumerable: true, get: function () { return index_js_2.OpenAIAdapter; } });
12
+ Object.defineProperty(exports, "AnthropicAdapter", { enumerable: true, get: function () { return index_js_2.AnthropicAdapter; } });
13
+ var http_server_js_1 = require("./api/http-server.js");
14
+ Object.defineProperty(exports, "CuratorHttpServer", { enumerable: true, get: function () { return http_server_js_1.CuratorHttpServer; } });
15
+ var config_js_1 = require("./api/config.js");
16
+ Object.defineProperty(exports, "ConfigManager", { enumerable: true, get: function () { return config_js_1.ConfigManager; } });
17
+ var rag_provider_js_1 = require("./knowledge/rag-provider.js");
18
+ Object.defineProperty(exports, "CuratorRagProvider", { enumerable: true, get: function () { return rag_provider_js_1.CuratorRagProvider; } });
19
+ var synthesis_js_1 = require("./knowledge/synthesis.js");
20
+ Object.defineProperty(exports, "KnowledgeSynthesizer", { enumerable: true, get: function () { return synthesis_js_1.KnowledgeSynthesizer; } });
21
+ var engine_js_1 = require("./knowledge/engine.js");
22
+ Object.defineProperty(exports, "KnowledgeEngine", { enumerable: true, get: function () { return engine_js_1.KnowledgeEngine; } });
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,6CAA6C;AAApC,2GAAA,YAAY,OAAA;AACrB,uEAAkE;AAAzD,gIAAA,oBAAoB,OAAA;AAE7B,iDAAsD;AAA7C,0GAAA,cAAc,OAAA;AAEvB,iDAAuE;AAA9D,yGAAA,aAAa,OAAA;AAAE,4GAAA,gBAAgB,OAAA;AACxC,uDAAyD;AAAhD,mHAAA,iBAAiB,OAAA;AAC1B,6CAAgD;AAAvC,0GAAA,aAAa,OAAA;AAEtB,+DAAiE;AAAxD,qHAAA,kBAAkB,OAAA;AAE3B,yDAAgE;AAAvD,oHAAA,oBAAoB,OAAA;AAE7B,mDAAwD;AAA/C,4GAAA,eAAe,OAAA"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Knowledge Engine
3
+ * Orchestrates RAG search, synthesis, and vault indexing
4
+ */
5
+ import { type RagSearchResult } from './rag-provider.js';
6
+ import type { CuratorLLMProvider } from '../providers/types.js';
7
+ export interface SearchResponse {
8
+ query: string;
9
+ results: RagSearchResult[];
10
+ synthesized?: {
11
+ title: string;
12
+ content: string;
13
+ basedOn: string[];
14
+ };
15
+ totalResults: number;
16
+ durationMs: number;
17
+ }
18
+ export interface ReloadResponse {
19
+ indexed: number;
20
+ updated: number;
21
+ durationMs: number;
22
+ }
23
+ export declare class KnowledgeEngine {
24
+ private rag;
25
+ private synthesizer;
26
+ private isInitialized;
27
+ constructor(provider: CuratorLLMProvider, vaultPath: string);
28
+ /**
29
+ * Initialize the knowledge engine
30
+ */
31
+ initialize(): Promise<void>;
32
+ /**
33
+ * Search the vault
34
+ */
35
+ search(query: string, opts?: {
36
+ topK?: number;
37
+ autoSynthesize?: boolean;
38
+ }): Promise<SearchResponse>;
39
+ /**
40
+ * Reload and reindex the vault
41
+ */
42
+ reload(): Promise<ReloadResponse>;
43
+ /**
44
+ * Get engine statistics
45
+ */
46
+ getStats(): Promise<{
47
+ initialized: boolean;
48
+ vaultStats: any;
49
+ }>;
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
+ }
90
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/knowledge/engine.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,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;gBAE3B,QAAQ,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM;IAK3D;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAUjC;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IAsC5G;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,cAAc,CAAC;IAkBvC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC;QACtB,WAAW,EAAE,OAAO,CAAC;QACrB,UAAU,EAAE,GAAG,CAAC;KACnB,CAAC;IAOF;;OAEG;IACH,WAAW;;;;;;;;;;;;;;;;;;;;;wBAwBuB,GAAG;;;;;;;;;;;;;;;CAsDxC"}