Files
sausage/host/js/roster-fixture.ts
T

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));
}