Harness와 터미널 UI
Harness와 터미널 UI (Harnesses with Terminal UI)
@ai-sdk/tui 는 터미널에서 harness 스트림, tool 호출, 추론 섹션, 승인 프롬프트를 렌더링할 수 있어요. HarnessAgent 는 모든 호출에 세션이 필요하므로, 터미널 UI의 수명 동안 하나의 세션을 주입하는 작은 AgentTUIAgent 어댑터로 감싸세요.
출처: 문서
본문
설치 (Installation)
예제 (Example)
import { HarnessAgent, type HarnessAgentSession } from '@ai-sdk/harness/agent';
import { codex } from '@ai-sdk/harness-codex';
import { createVercelNetworkSandboxSession } from '@ai-sdk/sandbox-vercel';
import { runAgentTUI, type AgentTUIAgent } from '@ai-sdk/tui';
const agent = new HarnessAgent({
harness: codex,
});
function createTUIAgent({
agent,
session,
}: {
agent: HarnessAgent<any, any, any>;
session: HarnessAgentSession;
}): AgentTUIAgent {
return {
version: 'agent-v1',
id: agent.id,
tools: agent.tools,
generate(request) {
return agent.generate({
...request,
session,
} as Parameters<typeof agent.generate>[0]);
},
stream(request) {
return agent.stream({
...request,
session,
} as Parameters<typeof agent.stream>[0]);
},
} as AgentTUIAgent;
}
const sandboxSession = await createVercelNetworkSandboxSession({
runtime: 'node24',
ports: [4000],
template: await agent.getSandboxTemplate(),
});
const session = await agent.createSession({ sandboxSession });
try {
await runAgentTUI({
title: 'Codex',
agent: createTUIAgent({ agent, session }),
tools: 'auto-collapsed',
reasoning: 'collapsed',
});
} finally {
await session.destroy();
await sandboxSession.destroy();
}
터미널 UI는 사용자가 Esc 또는 Ctrl+C 로 종료할 때까지 실행돼요.
터미널 실행당 하나의 세션을 사용하세요. 장기 실행 터미널 도구의 경우 나중에 재개해야 한다면 session.detach() 또는 session.stop() 의 상태를 지속하세요.