41 lines
1.2 KiB
JavaScript
41 lines
1.2 KiB
JavaScript
/* Generates:
|
||
* – src/assets/botTools.json
|
||
* – src/assets/pageToolMap.json
|
||
*
|
||
* It scans backend/server*.js for comment blocks like:
|
||
* /** @aiTool { "name": "...", "pages": ["CareerExplorer"], ... } *\/
|
||
*/
|
||
const fs = require('fs');
|
||
const glob = require('glob');
|
||
const { parse } = require('@babel/parser');
|
||
|
||
const files = glob.sync('backend/server*.js'); // adjust if server paths differ
|
||
|
||
const tools = [];
|
||
const pageToolMap = {};
|
||
|
||
for (const file of files) {
|
||
const code = fs.readFileSync(file, 'utf8');
|
||
const ast = parse(code, { sourceType: 'module', plugins: ['jsx'] });
|
||
|
||
(ast.comments || []).forEach(c => {
|
||
if (!c.value.includes('@aiTool')) return;
|
||
const meta = JSON.parse(c.value.replace(/^[\s\S]*@aiTool\s*/, '').trim());
|
||
|
||
tools.push({
|
||
name: meta.name,
|
||
description: meta.description,
|
||
parameters: meta.parameters,
|
||
});
|
||
|
||
(meta.pages || ['Global']).forEach(p =>
|
||
(pageToolMap[p] ||= []).push(meta.name)
|
||
);
|
||
});
|
||
}
|
||
|
||
fs.mkdirSync('src/assets', { recursive: true });
|
||
fs.writeFileSync('src/assets/botTools.json', JSON.stringify(tools, null, 2));
|
||
fs.writeFileSync('src/assets/pageToolMap.json', JSON.stringify(pageToolMap, null, 2));
|
||
console.log('✅ botTools.json & pageToolMap.json generated');
|