25 lines
1.1 KiB
TypeScript
25 lines
1.1 KiB
TypeScript
/** Tests edit actual Markdown roster files while retaining a convenient in-memory fixture shape. */
|
|
import {parse, stringify} from 'yaml';
|
|
import {parseDefinition} from '../../extensions/core/agents';
|
|
const directory='/etc/sausage/roster', path='/etc/sausage/config.yaml';
|
|
export async function readTestConfig(fs:any) {
|
|
const config=parse(await fs.read(path));
|
|
config.roster=[];
|
|
for (const entry of await fs.list(directory)) {
|
|
if (!entry.name.endsWith('.md')) continue;
|
|
const definition=parseDefinition(await fs.read(`${directory}/${entry.name}`),`${directory}/${entry.name}`);
|
|
const {instructions,...fields}=definition;
|
|
config.roster.push({...fields,prompt:instructions});
|
|
}
|
|
return config;
|
|
}
|
|
export async function writeTestConfig(fs:any, value:any) {
|
|
const {roster,...config}=value;
|
|
for (const entry of await fs.list(directory)) if (entry.name.endsWith('.md')) await fs.remove(`${directory}/${entry.name}`);
|
|
for (const entry of roster) {
|
|
const {name,prompt,path: _path,...fields}=entry;
|
|
await fs.write(`${directory}/${name}.md`,`---\n${stringify(fields)}---\n\n${prompt}\n`);
|
|
}
|
|
await fs.write(path,stringify(config));
|
|
}
|