@elizaos/plugin-knowledge 1.2.1 → 1.2.3
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/.vite/manifest.json +1 -1
- package/dist/assets/{index-YT4-1nM5.js → index-C_sAxTPC.js} +38 -38
- package/dist/index.html +1 -1
- package/dist/index.js +63 -57
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.html
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
7
|
<title>Agent Plugin View</title>
|
|
8
|
-
<script type="module" crossorigin src="./assets/index-
|
|
8
|
+
<script type="module" crossorigin src="./assets/index-C_sAxTPC.js"></script>
|
|
9
9
|
<link rel="stylesheet" crossorigin href="./assets/index-B5VEkqpw.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
package/dist/index.js
CHANGED
|
@@ -792,7 +792,7 @@ async function generateText(runtime, prompt, system, overrideConfig) {
|
|
|
792
792
|
throw new Error(`Unsupported text provider: ${provider}`);
|
|
793
793
|
}
|
|
794
794
|
} catch (error) {
|
|
795
|
-
logger2.error(`[Document Processor] ${provider} ${modelName} error
|
|
795
|
+
logger2.error({ error }, `[Document Processor] ${provider} ${modelName} error`);
|
|
796
796
|
throw error;
|
|
797
797
|
}
|
|
798
798
|
}
|
|
@@ -2115,7 +2115,7 @@ async function loadDocsFromPath(service, agentId, worldId, knowledgePath) {
|
|
|
2115
2115
|
logger5.info(`\u2705 "${fileName}": ${result.fragmentCount} fragments created`);
|
|
2116
2116
|
successful++;
|
|
2117
2117
|
} catch (error) {
|
|
2118
|
-
logger5.error(`Failed to process file ${filePath}
|
|
2118
|
+
logger5.error({ error }, `Failed to process file ${filePath}`);
|
|
2119
2119
|
failed++;
|
|
2120
2120
|
}
|
|
2121
2121
|
}
|
|
@@ -2142,7 +2142,7 @@ function getAllFiles(dirPath, files = []) {
|
|
|
2142
2142
|
}
|
|
2143
2143
|
}
|
|
2144
2144
|
} catch (error) {
|
|
2145
|
-
logger5.error(`Error reading directory ${dirPath}
|
|
2145
|
+
logger5.error({ error }, `Error reading directory ${dirPath}`);
|
|
2146
2146
|
}
|
|
2147
2147
|
return files;
|
|
2148
2148
|
}
|
|
@@ -2299,8 +2299,8 @@ var KnowledgeService = class _KnowledgeService extends Service {
|
|
|
2299
2299
|
}
|
|
2300
2300
|
} catch (error) {
|
|
2301
2301
|
logger6.error(
|
|
2302
|
-
|
|
2303
|
-
|
|
2302
|
+
{ error },
|
|
2303
|
+
`KnowledgeService: Error loading documents on startup for agent ${this.runtime.agentId}`
|
|
2304
2304
|
);
|
|
2305
2305
|
}
|
|
2306
2306
|
}
|
|
@@ -2360,13 +2360,13 @@ var KnowledgeService = class _KnowledgeService extends Service {
|
|
|
2360
2360
|
);
|
|
2361
2361
|
}
|
|
2362
2362
|
}
|
|
2363
|
-
logger6.
|
|
2364
|
-
logger6.
|
|
2363
|
+
logger6.info("Model configuration validated successfully.");
|
|
2364
|
+
logger6.info(`Knowledge Plugin initialized for agent: ${runtime.character.name}`);
|
|
2365
2365
|
logger6.info(
|
|
2366
2366
|
"Knowledge Plugin initialized. Frontend panel should be discoverable via its public route."
|
|
2367
2367
|
);
|
|
2368
2368
|
} catch (error) {
|
|
2369
|
-
logger6.error("Failed to initialize Knowledge plugin
|
|
2369
|
+
logger6.error({ error }, "Failed to initialize Knowledge plugin");
|
|
2370
2370
|
throw error;
|
|
2371
2371
|
}
|
|
2372
2372
|
const service = new _KnowledgeService(runtime);
|
|
@@ -2374,7 +2374,7 @@ var KnowledgeService = class _KnowledgeService extends Service {
|
|
|
2374
2374
|
if (service.config.LOAD_DOCS_ON_STARTUP) {
|
|
2375
2375
|
logger6.info("LOAD_DOCS_ON_STARTUP is enabled. Loading documents from docs folder...");
|
|
2376
2376
|
service.loadInitialDocuments().catch((error) => {
|
|
2377
|
-
logger6.error("Error during initial document loading in KnowledgeService
|
|
2377
|
+
logger6.error({ error }, "Error during initial document loading in KnowledgeService");
|
|
2378
2378
|
});
|
|
2379
2379
|
} else {
|
|
2380
2380
|
logger6.info("LOAD_DOCS_ON_STARTUP is disabled. Skipping automatic document loading.");
|
|
@@ -2388,8 +2388,8 @@ var KnowledgeService = class _KnowledgeService extends Service {
|
|
|
2388
2388
|
);
|
|
2389
2389
|
await service.processCharacterKnowledge(stringKnowledge).catch((err) => {
|
|
2390
2390
|
logger6.error(
|
|
2391
|
-
|
|
2392
|
-
|
|
2391
|
+
{ error: err },
|
|
2392
|
+
"KnowledgeService: Error processing character knowledge during startup"
|
|
2393
2393
|
);
|
|
2394
2394
|
});
|
|
2395
2395
|
} else {
|
|
@@ -2489,7 +2489,8 @@ var KnowledgeService = class _KnowledgeService extends Service {
|
|
|
2489
2489
|
fileBuffer = Buffer.from(content, "base64");
|
|
2490
2490
|
} catch (e) {
|
|
2491
2491
|
logger6.error(
|
|
2492
|
-
|
|
2492
|
+
{ error: e },
|
|
2493
|
+
`KnowledgeService: Failed to convert base64 to buffer for ${originalFilename}`
|
|
2493
2494
|
);
|
|
2494
2495
|
throw new Error(`Invalid base64 content for PDF file ${originalFilename}`);
|
|
2495
2496
|
}
|
|
@@ -2500,7 +2501,8 @@ var KnowledgeService = class _KnowledgeService extends Service {
|
|
|
2500
2501
|
fileBuffer = Buffer.from(content, "base64");
|
|
2501
2502
|
} catch (e) {
|
|
2502
2503
|
logger6.error(
|
|
2503
|
-
|
|
2504
|
+
{ error: e },
|
|
2505
|
+
`KnowledgeService: Failed to convert base64 to buffer for ${originalFilename}`
|
|
2504
2506
|
);
|
|
2505
2507
|
throw new Error(`Invalid base64 content for binary file ${originalFilename}`);
|
|
2506
2508
|
}
|
|
@@ -2520,9 +2522,7 @@ var KnowledgeService = class _KnowledgeService extends Service {
|
|
|
2520
2522
|
extractedText = decodedText;
|
|
2521
2523
|
documentContentToStore = decodedText;
|
|
2522
2524
|
} catch (e) {
|
|
2523
|
-
logger6.error(
|
|
2524
|
-
`Failed to decode base64 for ${originalFilename}: ${e instanceof Error ? e.message : String(e)}`
|
|
2525
|
-
);
|
|
2525
|
+
logger6.error({ error: e }, `Failed to decode base64 for ${originalFilename}`);
|
|
2526
2526
|
throw new Error(
|
|
2527
2527
|
`File ${originalFilename} appears to be corrupted or incorrectly encoded`
|
|
2528
2528
|
);
|
|
@@ -2593,15 +2593,15 @@ var KnowledgeService = class _KnowledgeService extends Service {
|
|
|
2593
2593
|
};
|
|
2594
2594
|
} catch (error) {
|
|
2595
2595
|
logger6.error(
|
|
2596
|
-
|
|
2597
|
-
|
|
2596
|
+
{ error, stack: error.stack },
|
|
2597
|
+
`KnowledgeService: Error processing document ${originalFilename}`
|
|
2598
2598
|
);
|
|
2599
2599
|
throw error;
|
|
2600
2600
|
}
|
|
2601
2601
|
}
|
|
2602
2602
|
// --- Knowledge methods moved from AgentRuntime ---
|
|
2603
2603
|
async handleProcessingError(error, context) {
|
|
2604
|
-
logger6.error(`KnowledgeService: Error ${context}
|
|
2604
|
+
logger6.error({ error }, `KnowledgeService: Error ${context}`);
|
|
2605
2605
|
throw error;
|
|
2606
2606
|
}
|
|
2607
2607
|
async checkExistingKnowledge(knowledgeId) {
|
|
@@ -2873,8 +2873,8 @@ var KnowledgeService = class _KnowledgeService extends Service {
|
|
|
2873
2873
|
fragmentsProcessed++;
|
|
2874
2874
|
} catch (error) {
|
|
2875
2875
|
logger6.error(
|
|
2876
|
-
|
|
2877
|
-
|
|
2876
|
+
{ error },
|
|
2877
|
+
`KnowledgeService: Error processing fragment ${fragment.id} for document ${item.id}`
|
|
2878
2878
|
);
|
|
2879
2879
|
}
|
|
2880
2880
|
}
|
|
@@ -2887,10 +2887,7 @@ var KnowledgeService = class _KnowledgeService extends Service {
|
|
|
2887
2887
|
await this.runtime.addEmbeddingToMemory(fragment);
|
|
2888
2888
|
await this.runtime.createMemory(fragment, "knowledge");
|
|
2889
2889
|
} catch (error) {
|
|
2890
|
-
logger6.error(
|
|
2891
|
-
`KnowledgeService: Error processing fragment ${fragment.id}:`,
|
|
2892
|
-
error instanceof Error ? error.message : String(error)
|
|
2893
|
-
);
|
|
2890
|
+
logger6.error({ error }, `KnowledgeService: Error processing fragment ${fragment.id}`);
|
|
2894
2891
|
throw error;
|
|
2895
2892
|
}
|
|
2896
2893
|
}
|
|
@@ -3491,7 +3488,7 @@ var KnowledgeTestSuite = class {
|
|
|
3491
3488
|
if (service.capabilityDescription !== "Provides Retrieval Augmented Generation capabilities, including knowledge upload and querying.") {
|
|
3492
3489
|
throw new Error("Incorrect service capability description");
|
|
3493
3490
|
}
|
|
3494
|
-
runtime.services.set(KnowledgeService.serviceType, service);
|
|
3491
|
+
runtime.services.set(KnowledgeService.serviceType, [service]);
|
|
3495
3492
|
const retrievedService = runtime.getService(KnowledgeService.serviceType);
|
|
3496
3493
|
if (retrievedService !== service) {
|
|
3497
3494
|
throw new Error("Service not properly registered with runtime");
|
|
@@ -3557,7 +3554,7 @@ var KnowledgeTestSuite = class {
|
|
|
3557
3554
|
name: "Should add knowledge successfully",
|
|
3558
3555
|
fn: async (runtime) => {
|
|
3559
3556
|
const service = await KnowledgeService.start(runtime);
|
|
3560
|
-
runtime.services.set(KnowledgeService.serviceType, service);
|
|
3557
|
+
runtime.services.set(KnowledgeService.serviceType, [service]);
|
|
3561
3558
|
const testDocument = {
|
|
3562
3559
|
clientDocumentId: v4_default(),
|
|
3563
3560
|
contentType: "text/plain",
|
|
@@ -3588,7 +3585,7 @@ var KnowledgeTestSuite = class {
|
|
|
3588
3585
|
name: "Should handle duplicate document uploads",
|
|
3589
3586
|
fn: async (runtime) => {
|
|
3590
3587
|
const service = await KnowledgeService.start(runtime);
|
|
3591
|
-
runtime.services.set(KnowledgeService.serviceType, service);
|
|
3588
|
+
runtime.services.set(KnowledgeService.serviceType, [service]);
|
|
3592
3589
|
const testDocument = {
|
|
3593
3590
|
clientDocumentId: v4_default(),
|
|
3594
3591
|
contentType: "text/plain",
|
|
@@ -3614,7 +3611,7 @@ var KnowledgeTestSuite = class {
|
|
|
3614
3611
|
name: "Should retrieve knowledge based on query",
|
|
3615
3612
|
fn: async (runtime) => {
|
|
3616
3613
|
const service = await KnowledgeService.start(runtime);
|
|
3617
|
-
runtime.services.set(KnowledgeService.serviceType, service);
|
|
3614
|
+
runtime.services.set(KnowledgeService.serviceType, [service]);
|
|
3618
3615
|
const testDocument = {
|
|
3619
3616
|
clientDocumentId: v4_default(),
|
|
3620
3617
|
contentType: "text/plain",
|
|
@@ -3652,7 +3649,7 @@ var KnowledgeTestSuite = class {
|
|
|
3652
3649
|
name: "Should format knowledge in provider output",
|
|
3653
3650
|
fn: async (runtime) => {
|
|
3654
3651
|
const service = await KnowledgeService.start(runtime);
|
|
3655
|
-
runtime.services.set("knowledge", service);
|
|
3652
|
+
runtime.services.set("knowledge", [service]);
|
|
3656
3653
|
const testDocument = {
|
|
3657
3654
|
clientDocumentId: v4_default(),
|
|
3658
3655
|
contentType: "text/plain",
|
|
@@ -3746,7 +3743,7 @@ var KnowledgeTestSuite = class {
|
|
|
3746
3743
|
name: "Should handle and log errors appropriately",
|
|
3747
3744
|
fn: async (runtime) => {
|
|
3748
3745
|
const service = await KnowledgeService.start(runtime);
|
|
3749
|
-
runtime.services.set(KnowledgeService.serviceType, service);
|
|
3746
|
+
runtime.services.set(KnowledgeService.serviceType, [service]);
|
|
3750
3747
|
mockLogger.clearCalls();
|
|
3751
3748
|
try {
|
|
3752
3749
|
await service.addKnowledge({
|
|
@@ -3793,8 +3790,8 @@ var KnowledgeTestSuite = class {
|
|
|
3793
3790
|
runtime
|
|
3794
3791
|
);
|
|
3795
3792
|
const service = await KnowledgeService.start(runtime);
|
|
3796
|
-
runtime.services.set(KnowledgeService.serviceType, service);
|
|
3797
|
-
runtime.services.set("knowledge", service);
|
|
3793
|
+
runtime.services.set(KnowledgeService.serviceType, [service]);
|
|
3794
|
+
runtime.services.set("knowledge", [service]);
|
|
3798
3795
|
runtime.registerProvider(knowledgeProvider);
|
|
3799
3796
|
const document = {
|
|
3800
3797
|
clientDocumentId: v4_default(),
|
|
@@ -3847,7 +3844,7 @@ var KnowledgeTestSuite = class {
|
|
|
3847
3844
|
name: "Should handle large documents with chunking",
|
|
3848
3845
|
fn: async (runtime) => {
|
|
3849
3846
|
const service = await KnowledgeService.start(runtime);
|
|
3850
|
-
runtime.services.set(KnowledgeService.serviceType, service);
|
|
3847
|
+
runtime.services.set(KnowledgeService.serviceType, [service]);
|
|
3851
3848
|
const largeContent = Array(100).fill(
|
|
3852
3849
|
"This is a paragraph of text that will be repeated many times to create a large document for testing chunking functionality. "
|
|
3853
3850
|
).join("\n\n");
|
|
@@ -4050,7 +4047,7 @@ var processKnowledgeAction = {
|
|
|
4050
4047
|
await callback(response);
|
|
4051
4048
|
}
|
|
4052
4049
|
} catch (error) {
|
|
4053
|
-
logger8.error("Error in PROCESS_KNOWLEDGE action
|
|
4050
|
+
logger8.error({ error }, "Error in PROCESS_KNOWLEDGE action");
|
|
4054
4051
|
const errorResponse = {
|
|
4055
4052
|
text: `I encountered an error while processing the knowledge: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
4056
4053
|
};
|
|
@@ -4141,7 +4138,7 @@ ${formattedResults}`
|
|
|
4141
4138
|
await callback(response);
|
|
4142
4139
|
}
|
|
4143
4140
|
} catch (error) {
|
|
4144
|
-
logger8.error("Error in SEARCH_KNOWLEDGE action
|
|
4141
|
+
logger8.error({ error }, "Error in SEARCH_KNOWLEDGE action");
|
|
4145
4142
|
const errorResponse = {
|
|
4146
4143
|
text: `I encountered an error while searching the knowledge base: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
4147
4144
|
};
|
|
@@ -4205,7 +4202,7 @@ var cleanupFile = (filePath) => {
|
|
|
4205
4202
|
try {
|
|
4206
4203
|
fs4.unlinkSync(filePath);
|
|
4207
4204
|
} catch (error) {
|
|
4208
|
-
logger9.error(`Error cleaning up file ${filePath}
|
|
4205
|
+
logger9.error({ error }, `Error cleaning up file ${filePath}`);
|
|
4209
4206
|
}
|
|
4210
4207
|
}
|
|
4211
4208
|
};
|
|
@@ -4411,7 +4408,7 @@ async function uploadKnowledgeHandler(req, res, runtime) {
|
|
|
4411
4408
|
sendSuccess(res, results);
|
|
4412
4409
|
}
|
|
4413
4410
|
} catch (error) {
|
|
4414
|
-
logger9.error("[Document Processor] \u274C Error processing knowledge
|
|
4411
|
+
logger9.error({ error }, "[Document Processor] \u274C Error processing knowledge");
|
|
4415
4412
|
if (hasUploadedFiles) {
|
|
4416
4413
|
cleanupFiles(req.files);
|
|
4417
4414
|
}
|
|
@@ -4465,7 +4462,7 @@ async function getKnowledgeDocumentsHandler(req, res, runtime) {
|
|
|
4465
4462
|
totalRequested: fileUrls ? fileUrls.length : 0
|
|
4466
4463
|
});
|
|
4467
4464
|
} catch (error) {
|
|
4468
|
-
logger9.error("[Document Processor] \u274C Error retrieving documents
|
|
4465
|
+
logger9.error({ error }, "[Document Processor] \u274C Error retrieving documents");
|
|
4469
4466
|
sendError(res, 500, "RETRIEVAL_ERROR", "Failed to retrieve documents", error.message);
|
|
4470
4467
|
}
|
|
4471
4468
|
}
|
|
@@ -4492,7 +4489,7 @@ async function deleteKnowledgeDocumentHandler(req, res, runtime) {
|
|
|
4492
4489
|
logger9.info(`[Document Processor] \u2705 Successfully deleted document: ${typedKnowledgeId}`);
|
|
4493
4490
|
sendSuccess(res, null, 204);
|
|
4494
4491
|
} catch (error) {
|
|
4495
|
-
logger9.error(`[Document Processor] \u274C Error deleting document ${knowledgeId}
|
|
4492
|
+
logger9.error({ error }, `[Document Processor] \u274C Error deleting document ${knowledgeId}`);
|
|
4496
4493
|
sendError(res, 500, "DELETE_ERROR", "Failed to delete document", error.message);
|
|
4497
4494
|
}
|
|
4498
4495
|
}
|
|
@@ -4530,29 +4527,34 @@ async function getKnowledgeByIdHandler(req, res, runtime) {
|
|
|
4530
4527
|
};
|
|
4531
4528
|
sendSuccess(res, { document: cleanDocument });
|
|
4532
4529
|
} catch (error) {
|
|
4533
|
-
logger9.error(`[Document Processor] \u274C Error retrieving document ${knowledgeId}
|
|
4530
|
+
logger9.error({ error }, `[Document Processor] \u274C Error retrieving document ${knowledgeId}`);
|
|
4534
4531
|
sendError(res, 500, "RETRIEVAL_ERROR", "Failed to retrieve document", error.message);
|
|
4535
4532
|
}
|
|
4536
4533
|
}
|
|
4537
4534
|
async function knowledgePanelHandler(req, res, runtime) {
|
|
4538
4535
|
const agentId = runtime.agentId;
|
|
4539
4536
|
logger9.debug(`[Document Processor] \u{1F310} Serving knowledge panel for agent ${agentId}`);
|
|
4537
|
+
const requestPath = req.originalUrl || req.url || req.path;
|
|
4538
|
+
const pluginBasePath = requestPath.replace(/\/display.*$/, "");
|
|
4539
|
+
logger9.debug(`[Document Processor] \u{1F310} Plugin base path: ${pluginBasePath}`);
|
|
4540
4540
|
try {
|
|
4541
4541
|
const currentDir = path4.dirname(new URL(import.meta.url).pathname);
|
|
4542
4542
|
const frontendPath = path4.join(currentDir, "../dist/index.html");
|
|
4543
4543
|
logger9.debug(`[Document Processor] \u{1F310} Looking for frontend at: ${frontendPath}`);
|
|
4544
4544
|
if (fs4.existsSync(frontendPath)) {
|
|
4545
4545
|
const html = await fs4.promises.readFile(frontendPath, "utf8");
|
|
4546
|
-
|
|
4546
|
+
let injectedHtml = html.replace(
|
|
4547
4547
|
"<head>",
|
|
4548
4548
|
`<head>
|
|
4549
4549
|
<script>
|
|
4550
4550
|
window.ELIZA_CONFIG = {
|
|
4551
4551
|
agentId: '${agentId}',
|
|
4552
|
-
apiBase: '
|
|
4552
|
+
apiBase: '${pluginBasePath}'
|
|
4553
4553
|
};
|
|
4554
4554
|
</script>`
|
|
4555
4555
|
);
|
|
4556
|
+
injectedHtml = injectedHtml.replace(/src="\.\/assets\//g, `src="${pluginBasePath}/assets/`);
|
|
4557
|
+
injectedHtml = injectedHtml.replace(/href="\.\/assets\//g, `href="${pluginBasePath}/assets/`);
|
|
4556
4558
|
res.writeHead(200, { "Content-Type": "text/html" });
|
|
4557
4559
|
res.end(injectedHtml);
|
|
4558
4560
|
} else {
|
|
@@ -4574,7 +4576,7 @@ async function knowledgePanelHandler(req, res, runtime) {
|
|
|
4574
4576
|
}
|
|
4575
4577
|
}
|
|
4576
4578
|
} catch (manifestError) {
|
|
4577
|
-
logger9.error("[Document Processor] \u274C Error reading manifest
|
|
4579
|
+
logger9.error({ error: manifestError }, "[Document Processor] \u274C Error reading manifest");
|
|
4578
4580
|
}
|
|
4579
4581
|
}
|
|
4580
4582
|
logger9.debug(`[Document Processor] \u{1F310} Using fallback with CSS: ${cssFile}, JS: ${jsFile}`);
|
|
@@ -4588,10 +4590,10 @@ async function knowledgePanelHandler(req, res, runtime) {
|
|
|
4588
4590
|
<script>
|
|
4589
4591
|
window.ELIZA_CONFIG = {
|
|
4590
4592
|
agentId: '${agentId}',
|
|
4591
|
-
apiBase: '
|
|
4593
|
+
apiBase: '${pluginBasePath}'
|
|
4592
4594
|
};
|
|
4593
4595
|
</script>
|
|
4594
|
-
<link rel="stylesheet" href="
|
|
4596
|
+
<link rel="stylesheet" href="${pluginBasePath}/assets/${cssFile}">
|
|
4595
4597
|
<style>
|
|
4596
4598
|
body { font-family: system-ui, -apple-system, sans-serif; margin: 0; padding: 20px; }
|
|
4597
4599
|
.container { max-width: 1200px; margin: 0 auto; }
|
|
@@ -4604,34 +4606,38 @@ async function knowledgePanelHandler(req, res, runtime) {
|
|
|
4604
4606
|
<div class="loading">Loading Knowledge Library...</div>
|
|
4605
4607
|
</div>
|
|
4606
4608
|
</div>
|
|
4607
|
-
<script type="module" src="
|
|
4609
|
+
<script type="module" src="${pluginBasePath}/assets/${jsFile}"></script>
|
|
4608
4610
|
</body>
|
|
4609
4611
|
</html>`;
|
|
4610
4612
|
res.writeHead(200, { "Content-Type": "text/html" });
|
|
4611
4613
|
res.end(html);
|
|
4612
4614
|
}
|
|
4613
4615
|
} catch (error) {
|
|
4614
|
-
logger9.error("[Document Processor] \u274C Error serving frontend
|
|
4616
|
+
logger9.error({ error }, "[Document Processor] \u274C Error serving frontend");
|
|
4615
4617
|
sendError(res, 500, "FRONTEND_ERROR", "Failed to load knowledge panel", error.message);
|
|
4616
4618
|
}
|
|
4617
4619
|
}
|
|
4618
4620
|
async function frontendAssetHandler(req, res, runtime) {
|
|
4619
4621
|
try {
|
|
4620
|
-
|
|
4622
|
+
const fullPath = req.originalUrl || req.url || req.path;
|
|
4623
|
+
logger9.debug(`[Document Processor] \u{1F310} Asset request: ${fullPath}`);
|
|
4621
4624
|
const currentDir = path4.dirname(new URL(import.meta.url).pathname);
|
|
4622
|
-
const assetRequestPath = req.path;
|
|
4623
4625
|
const assetsMarker = "/assets/";
|
|
4624
|
-
const assetsStartIndex =
|
|
4626
|
+
const assetsStartIndex = fullPath.lastIndexOf(assetsMarker);
|
|
4625
4627
|
let assetName = null;
|
|
4626
4628
|
if (assetsStartIndex !== -1) {
|
|
4627
|
-
assetName =
|
|
4629
|
+
assetName = fullPath.substring(assetsStartIndex + assetsMarker.length);
|
|
4630
|
+
const queryIndex = assetName.indexOf("?");
|
|
4631
|
+
if (queryIndex !== -1) {
|
|
4632
|
+
assetName = assetName.substring(0, queryIndex);
|
|
4633
|
+
}
|
|
4628
4634
|
}
|
|
4629
4635
|
if (!assetName || assetName.includes("..")) {
|
|
4630
4636
|
return sendError(
|
|
4631
4637
|
res,
|
|
4632
4638
|
400,
|
|
4633
4639
|
"BAD_REQUEST",
|
|
4634
|
-
`Invalid asset name: '${assetName}' from path ${
|
|
4640
|
+
`Invalid asset name: '${assetName}' from path ${fullPath}`
|
|
4635
4641
|
);
|
|
4636
4642
|
}
|
|
4637
4643
|
const assetPath = path4.join(currentDir, "../dist/assets", assetName);
|
|
@@ -4650,7 +4656,7 @@ async function frontendAssetHandler(req, res, runtime) {
|
|
|
4650
4656
|
sendError(res, 404, "NOT_FOUND", `Asset not found: ${req.url}`);
|
|
4651
4657
|
}
|
|
4652
4658
|
} catch (error) {
|
|
4653
|
-
logger9.error(`[Document Processor] \u274C Error serving asset ${req.url}
|
|
4659
|
+
logger9.error({ error }, `[Document Processor] \u274C Error serving asset ${req.url}`);
|
|
4654
4660
|
sendError(res, 500, "ASSET_ERROR", `Failed to load asset ${req.url}`, error.message);
|
|
4655
4661
|
}
|
|
4656
4662
|
}
|
|
@@ -4711,7 +4717,7 @@ async function getKnowledgeChunksHandler(req, res, runtime) {
|
|
|
4711
4717
|
}
|
|
4712
4718
|
});
|
|
4713
4719
|
} catch (error) {
|
|
4714
|
-
logger9.error("[Document Processor] \u274C Error retrieving chunks
|
|
4720
|
+
logger9.error({ error }, "[Document Processor] \u274C Error retrieving chunks");
|
|
4715
4721
|
sendError(res, 500, "RETRIEVAL_ERROR", "Failed to retrieve knowledge chunks", error.message);
|
|
4716
4722
|
}
|
|
4717
4723
|
}
|
|
@@ -4792,7 +4798,7 @@ async function searchKnowledgeHandler(req, res, runtime) {
|
|
|
4792
4798
|
count: enhancedResults.length
|
|
4793
4799
|
});
|
|
4794
4800
|
} catch (error) {
|
|
4795
|
-
logger9.error("[Document Processor] \u274C Error searching knowledge
|
|
4801
|
+
logger9.error({ error }, "[Document Processor] \u274C Error searching knowledge");
|
|
4796
4802
|
sendError(res, 500, "SEARCH_ERROR", "Failed to search knowledge", error.message);
|
|
4797
4803
|
}
|
|
4798
4804
|
}
|
|
@@ -4804,7 +4810,7 @@ async function uploadKnowledgeWithMulter(req, res, runtime) {
|
|
|
4804
4810
|
);
|
|
4805
4811
|
uploadArray(req, res, (err) => {
|
|
4806
4812
|
if (err) {
|
|
4807
|
-
logger9.error("[Document Processor] \u274C File upload error
|
|
4813
|
+
logger9.error({ error: err }, "[Document Processor] \u274C File upload error");
|
|
4808
4814
|
return sendError(res, 400, "UPLOAD_ERROR", err.message);
|
|
4809
4815
|
}
|
|
4810
4816
|
uploadKnowledgeHandler(req, res, runtime);
|