Recipes

Harness Engine을 위한 옵트인 Deep Agents 런타임 통합: 내구성 있는 세션과 리플레이 지원

README 링크에서 발견 · yesterday

Software & DevOpsWork & Operations

Harness Engine에 플래그 뒤로 Deep Agents 런타임을 연결했고, 리플레이도 지원합니다

What they did

작성자는 기존 Deep Agents 런타임을 Harness Engine에 옵트인 확장으로 통합하여, DeepAgentsAdapter 뒤에서 네이티브 런타임을 재사용하면서 SSE 인코딩 전에 타입이 지정된 이벤트를 사용하고 completed, paused, cancelled 결과를 명시적으로 처리했습니다. 또한 내구성 있는 실행 소유권을 추가하여 첫 어시스턴트 토큰 이전에 채팅이 새로고침되면 승인된 실행을 복구하고, 어시스턴트 턴을 재구성하며, 프롬프트를 다시 제출하는 대신 재생 구독을 수행합니다. 대기 중인 인터럽트는 영속화되며 재개 시 정확히 저장된 양식 또는 도구 승인이 필요하고, 승인 재시도는 중복 제거되며 모호한 디스패치는 펜싱 처리됩니다. 런타임 캐시는 호출자 자격 증명, 캡처된 사용자 컨텍스트, 실행 버전에 범위가 지정되며, 네이티브 스레드 ID는 채택 및 롤백 과정에서 보존됩니다. MongoDB 프로듀서 펜스는 Engine과 업그레이드된 호환성 서비스 간에 공유되고, 다른 턴을 승인하기 전에 취소가 드레인되며, 에이전트의 버전 포인터를 게시하기 전에 불변 실행 버전이 준비됩니다. UI에는 기능 기반 Builder 컨트롤과 제한된 Advanced 패널이 추가되었고, 정밀한 서브프레임 커서를 사용하는 브라우저 SSE 구독 복구도 포함되었습니다. Slack 승인 페이로드는 이제 인터럽트 아이덴티티와 허용된 결정을 전달합니다. 롤아웃은 HARNESS_ENGINE_DEEP_AGENTS_ENABLED로 게이트되며, 기본값이 꺼진 별도의 채택 플래그와 선택적 Compose 오버레이가 있습니다. 검증에는 두 개의 Engine 레플리카가 있는 격리된 배포에서 SSH를 통한 라이브 E2E, Chromium SSO 테스트, 대규모 pytest 및 Jest 스위트가 포함되었으며, 구현, 테스트, 문서화에는 Codex가 사용되었습니다.

How it went

16개의 API E2E 검사와 6개의 Chromium 검사가 통과했으며, 70개의 Harness Engine 및 770개의 Dynamic Agents pytest 케이스, 9,326개의 UI Jest 테스트와 26개의 Slack HITL 테스트도 통과했습니다. 라이브 owner 실행은 두 번의 구독자 연결 끊김을 견뎌내고 정확히 한 번의 wait 호출로 302.798초 만에 완료되었으며, UI 컨테이너가 교체된 후에도 해당 트랜스크립트가 재생되었습니다. 레거시 대화가 원래 checkpoint ID를 유지한 채 채택되었습니다. 게시 시점에 전체 저장소 CI는 아직 대기 중이었습니다.

Worth knowing

이 통합은 실험적이며 옵트인 방식이고, 기존 컨텍스트 채택은 기본적으로 비활성화되어 있습니다. 메인 사이트에서 로그인 상태로 새로고침하는 것은 사용자의 Mac이 잠겨 있어 검증하지 못했습니다. FinOps/Bedrock/AWS 워크로드, 실제 외부 MCP 호출, Slack/Webex 전달, TOME 인앱 실행은 검증되지 않았습니다. 외부 샌드박스 워커, 크로스 하네스 위임, 프로듀서 크래시 후 자동 인수는 여전히 범위 밖입니다. diff는 수작업 500줄을 초과하며 2,454줄의 생성된 uv.lock을 포함합니다.

Wiring

Deep Agents는 네이티브 LangGraph 런타임을 감싸는 DeepAgentsAdapter 뒤에서 실행되며, 기존 체크포인트, 도구, 미들웨어, 스킬, 파일, 서브에이전트를 그대로 유지합니다. 이벤트는 SSE 인코딩 전에 타입이 지정되고 BFF 라우팅을 거쳐 브라우저로 전달되며, 브라우저는 서브프레임 커서를 사용해 재연결합니다. 상태 소유권은 MongoDB에 있으며, Engine과 업그레이드된 호환성 서비스가 공유하는 프로듀서 펜스가 있습니다. 마이그레이션 전에 두 프로듀서 모두 업그레이드되어야 하며, 핸드오프 전에 활성 실행이 중지되어야 합니다. 실행 버전은 불변이며 에이전트 버전 포인터가 게시되기 전에 준비되고, 저장은 권한 조정과 직렬화됩니다. 런타임 캐시는 호출자 자격 증명, 사용자 컨텍스트, 실행 버전을 키로 사용합니다. CAS/OpenFGA 검사와 위임된 호출자 신원은 유지되며, 첨부 파일 참조는 네임스페이스별로 스테이징되고 권한이 부여됩니다. 배포는 두 프로듀서를 모두 업그레이드하고 첨부 파일 스토리지를 공유하는 선택적 compose.deep-agents.yaml 오버레이를 사용하며, 표준 기본 프로필은 변경되지 않습니다.

Try it yourself

I'll start by exploring the repository structure to understand the existing Harness Engine and Deep Agents integration.

<||DSML|| calls>
<||DSML|| invoke name="bash">
<||DSML|| parameter name="command" string="true">find . -type f -name "*.ts" -o -name "*.tsx" -o -name "*.py" -o -name "*.json" | grep -v node_modules | grep -v ".git/" | head -100</||DSML|| parameter>
</||DSML|| invoke>
</||DSML|| calls>

Source

English

Tools in this stack