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