33 lines
2.2 KiB
TypeScript
33 lines
2.2 KiB
TypeScript
// A faux model changes three independent files in one turn through the real coding tools.
|
|
import { BACKGROUND_CONTEXT as context } from '@earendil-works/chord/context';
|
|
import { createModels } from '@earendil-works/pi-ai/models';
|
|
import { fauxProvider, fauxAssistantMessage, fauxToolCall } from '@earendil-works/pi-ai/providers/faux';
|
|
import { Harness, createRegistry } from '@earendil-works/pi-durable';
|
|
import { CodingTools, environment } from './environment';
|
|
import { openStorage } from './sqlite';
|
|
import { exec } from './extensions';
|
|
const models = createModels(), faux = fauxProvider({tokensPerSecond:100000});
|
|
models.setProvider(faux.provider);
|
|
faux.setResponses([
|
|
fauxAssistantMessage([fauxToolCall('edit',{path:'a.txt',edits:[{oldText:'old',newText:'edited'}]},{id:'first'})],{stopReason:'toolUse'}),
|
|
fauxAssistantMessage([fauxToolCall('bash',{command:'echo changed > b.txt && git add b.txt && git commit -m changed'},{id:'second'})],{stopReason:'toolUse'}),
|
|
fauxAssistantMessage([fauxToolCall('write',{path:'c.txt',content:'written\n'},{id:'third'})],{stopReason:'toolUse'}),
|
|
fauxAssistantMessage('done'),
|
|
]);
|
|
const registry = createRegistry(); registry.install(CodingTools);
|
|
const harness = await Harness.open(await openStorage(globalThis.storagePath),{models,registry,
|
|
env:(target:any)=>environment(target.cwd,target.conversationId)},context);
|
|
const root = await harness.root(context,{agent:{model:{provider:'faux',modelId:'faux-1'},cwd:'/repo',extensions:[CodingTools]}});
|
|
harness.resume();
|
|
await (await root.submit({type:'input',content:'Change three files'},context)).wait(context);
|
|
await harness.waitForIdle(context);
|
|
const entries = (await root.watch(context)).value.entries;
|
|
if(JSON.stringify(entries).includes('"isError":true'))throw new Error(JSON.stringify(entries));
|
|
await harness.close(context);
|
|
const result = await exec(['sh','-c','echo extension > /extension.txt'],
|
|
{cwd:'/',extension:'test-extension',task:'background',conversations:['extension']});
|
|
if(result.code)throw new Error(result.stderr);
|
|
const triggered = await exec(['sh','-c','echo triggered > /triggered.txt'],
|
|
{cwd:'/',extension:'test-extension',toolCall:'extension-call',conversations:['extension']});
|
|
if(triggered.code)throw new Error(triggered.stderr);
|