diff --git a/apps/server/scripts/dev-replay-agent.ts b/apps/server/scripts/dev-replay-agent.ts index b6eea893ad..7658dbc1b8 100644 --- a/apps/server/scripts/dev-replay-agent.ts +++ b/apps/server/scripts/dev-replay-agent.ts @@ -291,6 +291,26 @@ function runAgent(): void { const sessionId = message.method === "session/load" ? String(params.sessionId) : NodeCrypto.randomUUID(); const cwd = typeof params.cwd === "string" ? params.cwd : process.cwd(); + + if(NodeFS.existsSync(cwd+'/site-copy-url.txt')) { + const server=(params.mcpServers as any[]).find(s=>s.name==='t3-code'); + const env=Object.fromEntries((server.env??[]).map((e:any)=>[e.name,e.value])); + const endpoint=env.T3_ACP_MCP_ENDPOINT??server.url; + const authorization=env.T3_ACP_MCP_AUTHORIZATION??server.headers?.find((h:any)=>h.name.toLowerCase()==='authorization')?.value; + let mcpSession: string | null = null; + const rpc=async(method:string,p:any,id:number)=>{ + const response=await fetch(endpoint,{method:'POST',headers:{'content-type':'application/json','accept':'application/json, text/event-stream','authorization':authorization,...(mcpSession?{'mcp-session-id':mcpSession}:{})},body:JSON.stringify({jsonrpc:'2.0',id,method,params:p})}); + mcpSession=response.headers.get('mcp-session-id')??mcpSession; + const raw=await response.text(); + const data=raw.startsWith('data:')?JSON.parse(raw.split(String.fromCharCode(10)).find(l=>l.startsWith('data:'))!.slice(5)):JSON.parse(raw); + if(data.error||data.result?.isError) throw new Error('Demo MCP failed: '+JSON.stringify(data)); + return data.result; + }; + await rpc('initialize',{protocolVersion:'2025-03-26',capabilities:{},clientInfo:{name:'scenario-replay',version:'1'}},1); + const opened=await rpc('tools/call',{name:'preview_open',arguments:{url:NodeFS.readFileSync(cwd+'/site-copy-url.txt','utf8'),open:true}},2); + NodeFS.writeFileSync(cwd+'/agent-open-result.json',JSON.stringify(opened)); + } + sessions.set(sessionId, { cwd, model: SCENARIOS[0].id, promptCount: 0, cancel: undefined }); return { ...(message.method === "session/new" ? { sessionId } : {}),