@backendkit-labs/curator-codex-agent 0.2.0 → 1.0.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 (101) hide show
  1. package/dist/analyzer.d.ts +1 -17
  2. package/dist/analyzer.d.ts.map +1 -1
  3. package/dist/analyzer.js +80 -163
  4. package/dist/analyzer.js.map +1 -1
  5. package/dist/audit.d.ts +27 -0
  6. package/dist/audit.d.ts.map +1 -0
  7. package/dist/audit.js +43 -0
  8. package/dist/audit.js.map +1 -0
  9. package/dist/checksum.d.ts +0 -22
  10. package/dist/checksum.d.ts.map +1 -1
  11. package/dist/checksum.js +14 -103
  12. package/dist/checksum.js.map +1 -1
  13. package/dist/documentation-curator.d.ts +1 -1
  14. package/dist/documentation-curator.d.ts.map +1 -1
  15. package/dist/documentation-curator.js +79 -95
  16. package/dist/documentation-curator.js.map +1 -1
  17. package/dist/index.d.ts +19 -9
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +12 -22
  20. package/dist/index.js.map +1 -1
  21. package/dist/knowledge/embedder-worker.d.ts +2 -0
  22. package/dist/knowledge/embedder-worker.d.ts.map +1 -0
  23. package/dist/knowledge/embedder-worker.js +55 -0
  24. package/dist/knowledge/embedder-worker.js.map +1 -0
  25. package/dist/knowledge/engine.d.ts +10 -56
  26. package/dist/knowledge/engine.d.ts.map +1 -1
  27. package/dist/knowledge/engine.js +42 -153
  28. package/dist/knowledge/engine.js.map +1 -1
  29. package/dist/knowledge/rag-provider.d.ts +14 -56
  30. package/dist/knowledge/rag-provider.d.ts.map +1 -1
  31. package/dist/knowledge/rag-provider.js +63 -154
  32. package/dist/knowledge/rag-provider.js.map +1 -1
  33. package/dist/knowledge/synthesis.d.ts +0 -10
  34. package/dist/knowledge/synthesis.d.ts.map +1 -1
  35. package/dist/knowledge/synthesis.js +32 -77
  36. package/dist/knowledge/synthesis.js.map +1 -1
  37. package/dist/knowledge/transformers-embedder.d.ts +61 -0
  38. package/dist/knowledge/transformers-embedder.d.ts.map +1 -0
  39. package/dist/knowledge/transformers-embedder.js +222 -0
  40. package/dist/knowledge/transformers-embedder.js.map +1 -0
  41. package/dist/pdf-reader.d.ts +11 -0
  42. package/dist/pdf-reader.d.ts.map +1 -0
  43. package/dist/pdf-reader.js +21 -0
  44. package/dist/pdf-reader.js.map +1 -0
  45. package/dist/project.d.ts +28 -0
  46. package/dist/project.d.ts.map +1 -0
  47. package/dist/project.js +88 -0
  48. package/dist/project.js.map +1 -0
  49. package/dist/providers/anthropic-adapter.d.ts +2 -2
  50. package/dist/providers/anthropic-adapter.d.ts.map +1 -1
  51. package/dist/providers/anthropic-adapter.js +7 -13
  52. package/dist/providers/anthropic-adapter.js.map +1 -1
  53. package/dist/providers/index.d.ts +1 -1
  54. package/dist/providers/index.d.ts.map +1 -1
  55. package/dist/providers/index.js +13 -20
  56. package/dist/providers/index.js.map +1 -1
  57. package/dist/providers/openai-adapter.d.ts +2 -2
  58. package/dist/providers/openai-adapter.d.ts.map +1 -1
  59. package/dist/providers/openai-adapter.js +7 -13
  60. package/dist/providers/openai-adapter.js.map +1 -1
  61. package/dist/providers/types.d.ts +8 -1
  62. package/dist/providers/types.d.ts.map +1 -1
  63. package/dist/providers/types.js +1 -2
  64. package/dist/types.d.ts.map +1 -1
  65. package/dist/types.js +1 -3
  66. package/dist/types.js.map +1 -1
  67. package/dist/vault-dedup.d.ts +35 -0
  68. package/dist/vault-dedup.d.ts.map +1 -0
  69. package/dist/vault-dedup.js +130 -0
  70. package/dist/vault-dedup.js.map +1 -0
  71. package/package.json +43 -56
  72. package/AGENT.md +0 -187
  73. package/README.md +0 -475
  74. package/dist/api/config.d.ts +0 -57
  75. package/dist/api/config.d.ts.map +0 -1
  76. package/dist/api/config.js +0 -183
  77. package/dist/api/config.js.map +0 -1
  78. package/dist/api/http-server.d.ts +0 -24
  79. package/dist/api/http-server.d.ts.map +0 -1
  80. package/dist/api/http-server.js +0 -108
  81. package/dist/api/http-server.js.map +0 -1
  82. package/dist/api/routes.d.ts +0 -8
  83. package/dist/api/routes.d.ts.map +0 -1
  84. package/dist/api/routes.js +0 -382
  85. package/dist/api/routes.js.map +0 -1
  86. package/dist/api/security.d.ts +0 -107
  87. package/dist/api/security.d.ts.map +0 -1
  88. package/dist/api/security.js +0 -200
  89. package/dist/api/security.js.map +0 -1
  90. package/dist/http-server-main.d.ts +0 -28
  91. package/dist/http-server-main.d.ts.map +0 -1
  92. package/dist/http-server-main.js +0 -69
  93. package/dist/http-server-main.js.map +0 -1
  94. package/dist/server.d.ts +0 -33
  95. package/dist/server.d.ts.map +0 -1
  96. package/dist/server.js +0 -640
  97. package/dist/server.js.map +0 -1
  98. package/dist/watcher.d.ts +0 -26
  99. package/dist/watcher.d.ts.map +0 -1
  100. package/dist/watcher.js +0 -168
  101. package/dist/watcher.js.map +0 -1
package/dist/server.js DELETED
@@ -1,640 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- /**
4
- * curator-codex-agent — Unified MCP Server (Stdio + HTTP)
5
- *
6
- * Dual-transport MCP server for maximum flexibility:
7
- * - Stdio Transport (always active) — for Claude Desktop, local agents
8
- * - HTTP Transport (optional) — for remote clients
9
- *
10
- * Both transports can run simultaneously, allowing:
11
- * ✓ Claude Desktop (stdio) + remote clients (HTTP)
12
- * ✓ bk-agent embedding (stdio) + external tools (HTTP)
13
- *
14
- * Required env vars:
15
- * CURATOR_API_KEY — LLM API key
16
- * CURATOR_OUTPUT_PATH — vault path
17
- *
18
- * Optional:
19
- * CURATOR_HTTP_PORT — Enable HTTP transport on this port (e.g., 3101)
20
- * CURATOR_MODEL — LLM model (default: deepseek-reasoner)
21
- * CURATOR_BASE_URL — Custom LLM base URL
22
- *
23
- * Usage:
24
- * # Stdio only (default, for Claude Desktop)
25
- * npm start
26
- *
27
- * # Stdio + HTTP (for maximum flexibility)
28
- * CURATOR_HTTP_PORT=3101 npm start
29
- *
30
- * # Stdio + HTTP + verbose logging
31
- * DEBUG=* CURATOR_HTTP_PORT=3101 npm start
32
- */
33
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
34
- if (k2 === undefined) k2 = k;
35
- var desc = Object.getOwnPropertyDescriptor(m, k);
36
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
37
- desc = { enumerable: true, get: function() { return m[k]; } };
38
- }
39
- Object.defineProperty(o, k2, desc);
40
- }) : (function(o, m, k, k2) {
41
- if (k2 === undefined) k2 = k;
42
- o[k2] = m[k];
43
- }));
44
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
45
- Object.defineProperty(o, "default", { enumerable: true, value: v });
46
- }) : function(o, v) {
47
- o["default"] = v;
48
- });
49
- var __importStar = (this && this.__importStar) || (function () {
50
- var ownKeys = function(o) {
51
- ownKeys = Object.getOwnPropertyNames || function (o) {
52
- var ar = [];
53
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
54
- return ar;
55
- };
56
- return ownKeys(o);
57
- };
58
- return function (mod) {
59
- if (mod && mod.__esModule) return mod;
60
- var result = {};
61
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
62
- __setModuleDefault(result, mod);
63
- return result;
64
- };
65
- })();
66
- Object.defineProperty(exports, "__esModule", { value: true });
67
- require("dotenv/config");
68
- const http = __importStar(require("node:http"));
69
- const path = __importStar(require("node:path"));
70
- const fs = __importStar(require("node:fs/promises"));
71
- const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
72
- const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
73
- const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/server/streamableHttp.js");
74
- const zod_1 = require("zod");
75
- const analyzer_js_1 = require("./analyzer.js");
76
- const engine_js_1 = require("./knowledge/engine.js");
77
- const index_js_1 = require("./providers/index.js");
78
- const checksum_js_1 = require("./checksum.js");
79
- const config_js_1 = require("./api/config.js");
80
- // ── Configuration ────────────────────────────────────────────────────────────
81
- const API_KEY = process.env.CURATOR_API_KEY ?? '';
82
- const HTTP_PORT = process.env.CURATOR_HTTP_PORT ? parseInt(process.env.CURATOR_HTTP_PORT) : null;
83
- const ENABLE_HTTP = HTTP_PORT !== null;
84
- let knowledgeEngine;
85
- let configManager;
86
- if (!API_KEY) {
87
- console.error('[codex] ✗ CURATOR_API_KEY is required');
88
- process.exit(1);
89
- }
90
- function log(msg) {
91
- console.error(`[codex] ${msg}`);
92
- }
93
- function makeAnalyzer() {
94
- const vaultPath = configManager.getOutputPath();
95
- if (!vaultPath) {
96
- throw new Error('No vault path configured. Set outputPath in workspace configuration.');
97
- }
98
- return new analyzer_js_1.CodeAnalyzer({ provider: (0, index_js_1.createProvider)(), vaultPath });
99
- }
100
- // ── MCP Server Factory ───────────────────────────────────────────────────────
101
- //
102
- // Creates a fresh MCP server with all tools registered.
103
- // Called once for stdio, once per HTTP request (stateless).
104
- function createMcpServer(knowledgeEngine, configManager) {
105
- const srv = new mcp_js_1.McpServer({ name: 'curator-codex-agent', version: '0.2.0' });
106
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
107
- const t = srv.tool.bind(srv);
108
- // curator_process_file
109
- t('curator_process_file', 'Analyze a single code or documentation file and extract knowledge into the vault. ' +
110
- 'Supports: TypeScript, JavaScript, Python, Go, Rust, Java, Markdown, Text. ' +
111
- 'Auto-detects file type and processes accordingly.', {
112
- file_path: zod_1.z.string().describe('Absolute path to the file (.ts, .js, .py, .md, .txt, etc)'),
113
- relative_path: zod_1.z.string().optional().describe('Relative path for vault tracking'),
114
- }, async ({ file_path, relative_path }) => {
115
- try {
116
- const analyzer = makeAnalyzer();
117
- const rel = relative_path || path.basename(file_path);
118
- const result = await analyzer.analyzeFile(file_path, rel);
119
- return {
120
- content: [{
121
- type: 'text',
122
- text: JSON.stringify(result),
123
- }]
124
- };
125
- }
126
- catch (err) {
127
- return {
128
- content: [{
129
- type: 'text',
130
- text: JSON.stringify({
131
- notesWritten: [],
132
- notesSkipped: [],
133
- errors: [err.message],
134
- durationMs: 0,
135
- }),
136
- }]
137
- };
138
- }
139
- });
140
- // curator_process_directory
141
- t('curator_process_directory', 'Recursively analyze all code and documentation files in a directory. ' +
142
- 'Intelligently discovers associated documentation (.md files) and combines them with code analysis. ' +
143
- 'Uses manifest tracking to skip unchanged files on subsequent runs. ' +
144
- 'If directory_path is omitted, uses the inputPath from the active workspace. ' +
145
- 'Processing happens asynchronously in background to avoid timeout.', {
146
- directory_path: zod_1.z.string().optional().describe('Absolute path to the directory. If omitted, uses active workspace inputPath.'),
147
- }, async ({ directory_path }) => {
148
- try {
149
- // Use provided path or fall back to workspace inputPath
150
- const targetPath = directory_path || configManager.getInputPath();
151
- if (!targetPath) {
152
- return {
153
- content: [{
154
- type: 'text',
155
- text: JSON.stringify({
156
- status: 'error',
157
- error: 'No directory path provided and workspace inputPath not configured',
158
- }),
159
- }]
160
- };
161
- }
162
- const files = await (0, checksum_js_1.findAllFiles)(targetPath);
163
- if (files.length === 0) {
164
- return {
165
- content: [{
166
- type: 'text',
167
- text: JSON.stringify({
168
- status: 'completed',
169
- notesWritten: [],
170
- notesSkipped: [],
171
- errors: ['No code or documentation files found'],
172
- filesAnalyzed: [],
173
- totalFiles: 0,
174
- }),
175
- }]
176
- };
177
- }
178
- // Return immediately with status
179
- const immediateResponse = {
180
- status: 'processing',
181
- message: `Started processing ${files.length} files in background`,
182
- totalFiles: files.length,
183
- codeFiles: files.filter(f => f.relativePath.match(/\.(ts|tsx|js|jsx|py|go|rs|java|c|cpp|kt|swift)$/)).length,
184
- docFiles: files.filter(f => f.relativePath.match(/\.(md|txt)$/)).length,
185
- };
186
- // Process in background without awaiting
187
- (async () => {
188
- const start = Date.now();
189
- try {
190
- const analyzer = makeAnalyzer();
191
- const batchSize = 10;
192
- for (let i = 0; i < files.length; i += batchSize) {
193
- const batch = files.slice(i, i + batchSize);
194
- const promises = batch.map(file => analyzer.analyzeFile(file.fullPath, file.relativePath, files).catch(err => ({
195
- notesWritten: [],
196
- notesSkipped: [],
197
- errors: [`${file.relativePath}: ${err.message}`],
198
- filesAnalyzed: [],
199
- })));
200
- await Promise.all(promises);
201
- }
202
- const duration = Date.now() - start;
203
- log(`✓ Processed ${files.length} files in ${duration}ms`);
204
- }
205
- catch (err) {
206
- log(`✗ Background processing error: ${err.message}`);
207
- }
208
- })();
209
- return {
210
- content: [{
211
- type: 'text',
212
- text: JSON.stringify(immediateResponse),
213
- }]
214
- };
215
- }
216
- catch (err) {
217
- return {
218
- content: [{
219
- type: 'text',
220
- text: JSON.stringify({
221
- status: 'error',
222
- error: err.message,
223
- }),
224
- }]
225
- };
226
- }
227
- });
228
- // curator_vault_status
229
- t('curator_vault_status', 'Get information about the vault and indexing status.', {}, async () => {
230
- try {
231
- const entries = await fs.readdir(VAULT_PATH, { withFileTypes: true });
232
- const dirs = entries.filter(e => e.isDirectory()).length;
233
- const files = entries.filter(e => e.isFile()).length;
234
- return {
235
- content: [{
236
- type: 'text',
237
- text: JSON.stringify({
238
- vaultPath: VAULT_PATH,
239
- subdirectories: dirs,
240
- rootFiles: files,
241
- status: 'ready',
242
- }),
243
- }]
244
- };
245
- }
246
- catch (err) {
247
- return {
248
- content: [{
249
- type: 'text',
250
- text: JSON.stringify({ error: err.message }),
251
- }]
252
- };
253
- }
254
- });
255
- // ── Knowledge Engine Tools ─────────────────────────────────────────────
256
- // knowledge_search
257
- t('knowledge_search', 'Search the vault using semantic search (RAG). Returns relevant notes and optionally generates a synthetic summary.', {
258
- query: zod_1.z.string().describe('Search query (natural language, e.g., "How to handle errors?")'),
259
- topK: zod_1.z.number().optional().describe('Number of results to return (default: 5)'),
260
- autoSynthesize: zod_1.z.boolean().optional().describe('Generate synthesis note (default: true)'),
261
- }, async ({ query, topK, autoSynthesize }) => {
262
- try {
263
- const response = await knowledgeEngine.search(query, {
264
- topK,
265
- autoSynthesize: autoSynthesize !== false,
266
- });
267
- return {
268
- content: [{
269
- type: 'text',
270
- text: JSON.stringify(response),
271
- }]
272
- };
273
- }
274
- catch (err) {
275
- return {
276
- content: [{
277
- type: 'text',
278
- text: JSON.stringify({ error: err.message }),
279
- }]
280
- };
281
- }
282
- });
283
- // knowledge_reload
284
- t('knowledge_reload', 'Reload and reindex the vault. Call this after external changes to the vault files.', {}, async () => {
285
- try {
286
- const response = await knowledgeEngine.reload();
287
- return {
288
- content: [{
289
- type: 'text',
290
- text: JSON.stringify(response),
291
- }]
292
- };
293
- }
294
- catch (err) {
295
- return {
296
- content: [{
297
- type: 'text',
298
- text: JSON.stringify({ error: err.message }),
299
- }]
300
- };
301
- }
302
- });
303
- // knowledge_stats
304
- t('knowledge_stats', 'Get knowledge engine statistics and status.', {}, async () => {
305
- try {
306
- const stats = await knowledgeEngine.getStats();
307
- return {
308
- content: [{
309
- type: 'text',
310
- text: JSON.stringify(stats),
311
- }]
312
- };
313
- }
314
- catch (err) {
315
- return {
316
- content: [{
317
- type: 'text',
318
- text: JSON.stringify({ error: err.message }),
319
- }]
320
- };
321
- }
322
- });
323
- // ── Workspace Management ───────────────────────────────────────────────────
324
- // curator_workspace_list
325
- t('curator_workspace_list', 'List all available workspaces and show which one is currently active.', {}, async () => {
326
- try {
327
- const bkAgentDir = process.env.BK_AGENT_DIR ||
328
- path.join(process.env.HOME || process.env.USERPROFILE || '', '.bk-agent');
329
- const wsPath = path.join(bkAgentDir, 'curator-workspace.json');
330
- const content = await fs.readFile(wsPath, 'utf-8');
331
- const wsConfig = JSON.parse(content);
332
- return {
333
- content: [{
334
- type: 'text',
335
- text: JSON.stringify({
336
- current: wsConfig.lastUsed,
337
- workspaces: wsConfig.workspaces.map((w) => ({
338
- name: w.name,
339
- inputPath: w.inputPath,
340
- outputPath: w.outputPath,
341
- description: w.description,
342
- active: w.name === wsConfig.lastUsed,
343
- })),
344
- }),
345
- }]
346
- };
347
- }
348
- catch (err) {
349
- return {
350
- content: [{
351
- type: 'text',
352
- text: JSON.stringify({ error: `Failed to read workspaces: ${err.message}` }),
353
- }]
354
- };
355
- }
356
- });
357
- // curator_workspace_current
358
- t('curator_workspace_current', 'Get details of the currently active workspace.', {}, async () => {
359
- try {
360
- const bkAgentDir = process.env.BK_AGENT_DIR ||
361
- path.join(process.env.HOME || process.env.USERPROFILE || '', '.bk-agent');
362
- const wsPath = path.join(bkAgentDir, 'curator-workspace.json');
363
- const content = await fs.readFile(wsPath, 'utf-8');
364
- const wsConfig = JSON.parse(content);
365
- const current = wsConfig.workspaces.find((w) => w.name === wsConfig.lastUsed);
366
- if (!current) {
367
- return {
368
- content: [{
369
- type: 'text',
370
- text: JSON.stringify({ error: 'No workspace selected' }),
371
- }]
372
- };
373
- }
374
- return {
375
- content: [{
376
- type: 'text',
377
- text: JSON.stringify({
378
- name: current.name,
379
- workspace: current,
380
- }),
381
- }]
382
- };
383
- }
384
- catch (err) {
385
- return {
386
- content: [{
387
- type: 'text',
388
- text: JSON.stringify({ error: err.message }),
389
- }]
390
- };
391
- }
392
- });
393
- // curator_workspace_switch
394
- t('curator_workspace_switch', 'Switch to a different workspace. Updates the active workspace globally.', {
395
- name: zod_1.z.string().describe('Workspace name to switch to'),
396
- }, async ({ name }) => {
397
- try {
398
- const bkAgentDir = process.env.BK_AGENT_DIR ||
399
- path.join(process.env.HOME || process.env.USERPROFILE || '', '.bk-agent');
400
- const wsPath = path.join(bkAgentDir, 'curator-workspace.json');
401
- const content = await fs.readFile(wsPath, 'utf-8');
402
- const wsConfig = JSON.parse(content);
403
- const workspace = wsConfig.workspaces.find((w) => w.name === name);
404
- if (!workspace) {
405
- return {
406
- content: [{
407
- type: 'text',
408
- text: JSON.stringify({
409
- success: false,
410
- error: `Workspace "${name}" not found`,
411
- available: wsConfig.workspaces.map((w) => w.name),
412
- }),
413
- }]
414
- };
415
- }
416
- wsConfig.lastUsed = name;
417
- await fs.writeFile(wsPath, JSON.stringify(wsConfig, null, 2), 'utf-8');
418
- return {
419
- content: [{
420
- type: 'text',
421
- text: JSON.stringify({
422
- success: true,
423
- workspace: name,
424
- config: {
425
- inputPath: workspace.inputPath,
426
- outputPath: workspace.outputPath,
427
- description: workspace.description,
428
- },
429
- message: `Switched to workspace: ${name}`,
430
- }),
431
- }]
432
- };
433
- }
434
- catch (err) {
435
- return {
436
- content: [{
437
- type: 'text',
438
- text: JSON.stringify({ error: err.message }),
439
- }]
440
- };
441
- }
442
- });
443
- // curator_workspace_add
444
- t('curator_workspace_add', 'Add a new workspace or update an existing one.', {
445
- name: zod_1.z.string().describe('Workspace name (unique identifier)'),
446
- inputPath: zod_1.z.string().describe('Input directory path for curation'),
447
- outputPath: zod_1.z.string().describe('Output vault path'),
448
- description: zod_1.z.string().optional().describe('Human-readable description'),
449
- }, async ({ name, inputPath, outputPath, description }) => {
450
- try {
451
- const bkAgentDir = process.env.BK_AGENT_DIR ||
452
- path.join(process.env.HOME || process.env.USERPROFILE || '', '.bk-agent');
453
- const wsPath = path.join(bkAgentDir, 'curator-workspace.json');
454
- const content = await fs.readFile(wsPath, 'utf-8');
455
- const wsConfig = JSON.parse(content);
456
- const idx = wsConfig.workspaces.findIndex((w) => w.name === name);
457
- if (idx >= 0) {
458
- wsConfig.workspaces[idx] = { name, inputPath, outputPath, description };
459
- }
460
- else {
461
- wsConfig.workspaces.push({ name, inputPath, outputPath, description });
462
- }
463
- await fs.writeFile(wsPath, JSON.stringify(wsConfig, null, 2), 'utf-8');
464
- return {
465
- content: [{
466
- type: 'text',
467
- text: JSON.stringify({
468
- success: true,
469
- action: idx >= 0 ? 'updated' : 'created',
470
- workspace: { name, inputPath, outputPath, description },
471
- }),
472
- }]
473
- };
474
- }
475
- catch (err) {
476
- return {
477
- content: [{
478
- type: 'text',
479
- text: JSON.stringify({ error: err.message }),
480
- }]
481
- };
482
- }
483
- });
484
- // curator_workspace_remove
485
- t('curator_workspace_remove', 'Remove a workspace from the configuration.', {
486
- name: zod_1.z.string().describe('Workspace name to remove'),
487
- }, async ({ name }) => {
488
- try {
489
- const bkAgentDir = process.env.BK_AGENT_DIR ||
490
- path.join(process.env.HOME || process.env.USERPROFILE || '', '.bk-agent');
491
- const wsPath = path.join(bkAgentDir, 'curator-workspace.json');
492
- const content = await fs.readFile(wsPath, 'utf-8');
493
- const wsConfig = JSON.parse(content);
494
- const idx = wsConfig.workspaces.findIndex((w) => w.name === name);
495
- if (idx < 0) {
496
- return {
497
- content: [{
498
- type: 'text',
499
- text: JSON.stringify({
500
- success: false,
501
- error: `Workspace "${name}" not found`,
502
- }),
503
- }]
504
- };
505
- }
506
- wsConfig.workspaces.splice(idx, 1);
507
- if (wsConfig.lastUsed === name) {
508
- wsConfig.lastUsed = wsConfig.workspaces[0]?.name || '';
509
- }
510
- await fs.writeFile(wsPath, JSON.stringify(wsConfig, null, 2), 'utf-8');
511
- return {
512
- content: [{
513
- type: 'text',
514
- text: JSON.stringify({
515
- success: true,
516
- removed: name,
517
- remaining: wsConfig.workspaces.map((w) => w.name),
518
- }),
519
- }]
520
- };
521
- }
522
- catch (err) {
523
- return {
524
- content: [{
525
- type: 'text',
526
- text: JSON.stringify({ error: err.message }),
527
- }]
528
- };
529
- }
530
- });
531
- return srv;
532
- }
533
- // ── Stdio Transport ──────────────────────────────────────────────────────────
534
- async function startStdio(cfg) {
535
- const srv = createMcpServer(knowledgeEngine, cfg);
536
- const transport = new stdio_js_1.StdioServerTransport();
537
- await srv.connect(transport);
538
- log('✓ Stdio MCP transport ready');
539
- }
540
- // ── HTTP Transport ──────────────────────────────────────────────────────────
541
- async function startHttp(port, cfg) {
542
- const server = http.createServer(async (req, res) => {
543
- if (req.method !== 'POST' || req.url !== '/mcp') {
544
- res.writeHead(404, { 'Content-Type': 'application/json' });
545
- res.end(JSON.stringify({
546
- error: 'Use POST /mcp',
547
- message: 'This is an MCP server. POST JSON-RPC requests to /mcp',
548
- }));
549
- return;
550
- }
551
- const chunks = [];
552
- for await (const chunk of req)
553
- chunks.push(chunk);
554
- let body;
555
- try {
556
- body = JSON.parse(Buffer.concat(chunks).toString());
557
- }
558
- catch {
559
- res.writeHead(400).end(JSON.stringify({ error: 'Invalid JSON' }));
560
- return;
561
- }
562
- try {
563
- const srv = createMcpServer(knowledgeEngine, cfg);
564
- const transport = new streamableHttp_js_1.StreamableHTTPServerTransport({ sessionIdGenerator: undefined });
565
- await srv.connect(transport);
566
- await transport.handleRequest(req, res, body);
567
- }
568
- catch (err) {
569
- res.writeHead(500).end(JSON.stringify({
570
- error: err.message,
571
- }));
572
- }
573
- });
574
- await new Promise(resolve => {
575
- server.listen(port, () => {
576
- log(`✓ HTTP MCP transport on http://localhost:${port}/mcp`);
577
- resolve();
578
- });
579
- });
580
- }
581
- // ── Main ─────────────────────────────────────────────────────────────────────
582
- async function main() {
583
- console.error('');
584
- log('╔════════════════════════════════════════╗');
585
- log('║ Curator-Codex Agent — MCP Server ║');
586
- log('╚════════════════════════════════════════╝');
587
- // Initialize Configuration Manager (reads workspace.json)
588
- configManager = new config_js_1.ConfigManager();
589
- const vaultPath = configManager.getOutputPath();
590
- if (!vaultPath) {
591
- log('✗ No vault path configured.');
592
- log(' Set outputPath in curator-workspace.json for active workspace');
593
- process.exit(1);
594
- }
595
- log(`Vault: ${vaultPath}`);
596
- log(`Workspace: ${configManager.getCurrentWorkspace()}`);
597
- log(`Model: ${process.env.CURATOR_MODEL || 'deepseek-reasoner'}`);
598
- // Initialize Knowledge Engine
599
- try {
600
- log('Initializing knowledge engine...');
601
- knowledgeEngine = new engine_js_1.KnowledgeEngine((0, index_js_1.createProvider)(), vaultPath);
602
- await knowledgeEngine.initialize();
603
- log('✓ Knowledge engine ready');
604
- }
605
- catch (err) {
606
- log(`⚠ Knowledge engine initialization failed: ${err.message}`);
607
- log(' (Curation will work, RAG search will be unavailable)');
608
- // Don't exit, allow curation-only mode
609
- knowledgeEngine = new engine_js_1.KnowledgeEngine((0, index_js_1.createProvider)(), vaultPath);
610
- }
611
- // Start Stdio (always)
612
- try {
613
- await startStdio(configManager);
614
- }
615
- catch (err) {
616
- log(`✗ Stdio transport failed: ${err.message}`);
617
- process.exit(1);
618
- }
619
- // Start HTTP (optional)
620
- if (ENABLE_HTTP) {
621
- try {
622
- await startHttp(HTTP_PORT, configManager);
623
- }
624
- catch (err) {
625
- log(`✗ HTTP transport failed: ${err.message}`);
626
- process.exit(1);
627
- }
628
- }
629
- else {
630
- log('(HTTP transport disabled. Set CURATOR_HTTP_PORT to enable)');
631
- }
632
- console.error('');
633
- log('Ready for connections');
634
- console.error('');
635
- }
636
- main().catch(err => {
637
- log(`✗ Fatal: ${err.message}`);
638
- process.exit(1);
639
- });
640
- //# sourceMappingURL=server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}