콘텐츠로 이동

ActiveCLI

코딩 에이전트 CLI를 실제 프로세스로 spawn해, 하나의 어댑터 인터페이스로 다룹니다.
import { AssistantEvent, Claude, Command } from 'activecli';
const command = Command.open(Claude, { workingDir: '/path/to/project' });
command
.subscribe((event) => {
if (event instanceof AssistantEvent) process.stdout.write(event.text);
})
.onPermission((request) => request.approve());
await command.setMessage('실패하는 테스트를 고쳐줘').send();
command.close();

말하기 전까지 아무것도 실행되지 않습니다

세터는 의도를 쌓기만 하고, toArgv()는 실행 없이 정확한 명령줄을 보여줍니다. ActiveRecord to_sql의 대응물입니다.

하나의 인터페이스, 여러 CLI

추상 어댑터와 백엔드별 구현 하나씩. 어떤 CLI를 다룰지 바꾸는 일은 호출부를 다시 쓰는 게 아니라 다른 하위 클래스를 고르는 일입니다.

어려운 부분이 핵심입니다

실행 파일 찾기, Windows 인용, WSL 경로, 프로세스 트리 전체 종료, 그리고 하드 킬된 호스트에서 살아남기.

세 플랫폼에서 검증됩니다

Linux, macOS, Windows CI에서 — 이 라이브러리의 절반은 작성된 기계에서는 실행조차 되지 않는 코드이기 때문입니다.