v0.6.0
v0.6.0은 Agent checkpoint와 Orchestrator state·durable execution의 PostgreSQL 저장 경로를 trusted scope 기반 persistence v2로 전환합니다. AES-256-GCM 암호화, 환경별 keyring, PgBouncer transaction pooling, RLS, 짧은 lease/fencing과 tombstone cascade delete가 한 계약으로 묶입니다.
핵심 변경
섹션 제목: “핵심 변경”llamon_checkpoint_v2와llamon_runtime_v2고정 schema, direct PostgreSQL migration과 runtime schema-version fail-closed gate- LangGraph 공식
EncryptedSerializerprimitive를 쓰되 checkpoint·metadata·primitive blob·pending write를 모두 BYTEA 암호문으로 저장하는 SDK saver - tenant·principal·agent·conversation trusted scope, HKDF 파생 key와 record AAD, mixed-key read·re-encryption primitive
- event loop·DSN·role·pool profile별 공유 asyncpg pool. transaction profile은 statement cache
0, 기본min_size=0·max_size=5 - Orchestrator long transaction을 short lease/fencing → connection 반환 → heartbeat → revision CAS로 교체
- tombstone 우선 checkpoint/KV/session/workflow/execution/artifact cascade delete와 삭제 ID 재생성 차단
- 별도 opt-in
AgentWorkMemoryConfig와Agent.with_work_memory(). 정상·가드레일 통과 응답만 bounded checkpoint memory로 commit - 평가 전 runtime에 연결되지 않는
LongTermMemoryPort와 disabled no-op - browser-facing memory config API에서 raw PostgreSQL DSN 제거
- CLI의 모든 memory-capable scaffold를
MEMORY_BACKEND기반 코드로 통일.in-memory로 시작해도.env변경과 생성된scripts/migrate_memory.py만으로 PostgreSQL로 전환하며, owner-only 로컬 keyring과 Postgres Compose migration/keyring init을 함께 생성 - Orchestrator scaffold에
ORCHESTRATOR_STATE_BACKENDenv override와 정렬된 secure persistence env를 추가해 Python/TOML 수정 없이 backend 전환 - 방향별 input/output guardrail 설정과 opt-in
mode="stream"verified streaming. 승인 segment sequence, 원자적 DataPart, 부분 차단 replacement snapshot과 task 조회 복구 계약 - AgenticProgram의 opt-in
public_emissions: controller 선언progress/answer만 output guardrail 뒤에 공개하고 child raw chunk는 internal로 유지
Drop-in 경계
섹션 제목: “Drop-in 경계”memory-disabled, 명시적 backend="in_memory", Orchestrator state_backend="in_memory", Agent WorkMemory default-off 경로는 기존 graph·LLM·state·wire를 유지합니다. 명시적 PostgreSQL은 keyring과 v2 schema가 없으면 in-memory로 폴백하지 않습니다. backend를 생략한 기존 dependency-ImportError 한정 fallback은 유지합니다.
guardrail은 mode를 지정하지 않으면 기존 strict 경로와 동일하고, 직렬화에도 새 키가 나타나지 않습니다. 단 정책 track 합성이 바뀌어 기존 설정에서도 다음 세 가지가 달라집니다.
- block-only input 정책은 endpoint가 돌려준
modified_content로 요청을 재작성하지 않고 원본을 보존합니다. 입력 재작성이 필요하면pii_action·regex_action으로 mask를 명시하세요. - mask 판정과 자유 형식 재작성이 함께 나오면 안전한 합성 순서가 없어 차단합니다. 이전에는 앞선 regex mask가 endpoint track을 평가하지 않고 통과시켰습니다.
- mask 판정은 뒤 track의 차단을 가리지 않도록 남은 track을 모두 평가하고, 차단이 확정되면 남은 track을 평가하지 않습니다.
- 내장
PIIFilter·contains_pii·prompt_action="mask"의 주민등록번호 패턴이 13자리 숫자 전체가 아니라 유효 날짜(YYMMDD) + 성별·국적 코드(내국인1-4, 외국인등록번호5-8) 구조를 요구합니다. 13자리 계좌번호 과마스킹이 사라지고, 날짜가 성립하지 않는 가짜 번호는 더 이상 마스킹되지 않습니다.sensitive_info의kr_rrn검출기와 판정이 일치합니다.
mode="stream" 전환 시 소비자 계약도 바뀝니다. text는 str, DataPart와 progress emission은 RuntimeOutput으로 섞여 전달되므로 청크를 문자열로 가정한 코드는 타입 분기가 필요합니다.
Breaking changes
섹션 제목: “Breaking changes”- 기존 plaintext PostgreSQL 데이터는 v2에서 읽지 않습니다.
- 명시적 PostgreSQL backend에는 keyring이 필수입니다.
- memory 관리 API는 raw DSN을 반환하지 않습니다.
- persistence v2 암호화 schema는 구버전 SDK가 읽을 수 없습니다.
- secure agent ID는 scope와 파생 키의 일부입니다. runtime 이름 변경 API 대신 승인된 offline re-encryption/reset 절차를 사용해야 합니다.
운영 절차와 환경 변수는 메모리 영속화와 암호화를 참고하세요.