44 lines
1.5 KiB
JavaScript
44 lines
1.5 KiB
JavaScript
import { mkdir, readFile, writeFile } from 'node:fs/promises'
|
|
import path from 'node:path'
|
|
|
|
const sourceRoot = process.argv[2]
|
|
const assetPath = process.argv[3]
|
|
|
|
if (!sourceRoot || !assetPath) {
|
|
throw new Error('usage: node backend/scripts/sync-ai-experts.mjs <agency-agents-zh-dir> <experts-asset.js>')
|
|
}
|
|
|
|
const asset = await readFile(assetPath, 'utf8')
|
|
const catalogMatch = asset.match(/^const e=JSON\.parse\(('(?:\\.|[^'])*')\)/s)
|
|
if (!catalogMatch) throw new Error('Chinese expert catalog was not found in the supplied asset')
|
|
|
|
const encodedCatalog = Function(`"use strict"; return ${catalogMatch[1]}`)()
|
|
const summaries = JSON.parse(encodedCatalog)
|
|
const experts = []
|
|
|
|
for (const summary of summaries) {
|
|
const promptPath = path.join(sourceRoot, summary.category, `${summary.id}.md`)
|
|
const systemPrompt = await readFile(promptPath, 'utf8')
|
|
experts.push({
|
|
slug: summary.id,
|
|
category: summary.category,
|
|
categoryName: summary.categoryName,
|
|
name: summary.name,
|
|
description: summary.description,
|
|
emoji: summary.emoji,
|
|
color: summary.color,
|
|
systemPrompt,
|
|
})
|
|
}
|
|
|
|
const outputPath = path.resolve('backend/internal/models/experts_catalog.json')
|
|
await mkdir(path.dirname(outputPath), { recursive: true })
|
|
await writeFile(outputPath, `${JSON.stringify({
|
|
source: 'https://github.com/jnMetaCode/agency-agents-zh',
|
|
reference: 'https://ao.aiolaola.com/experts',
|
|
license: 'MIT',
|
|
experts,
|
|
}, null, 2)}\n`, 'utf8')
|
|
|
|
console.log(`wrote ${experts.length} experts to ${outputPath}`)
|