한 줄 요약: 에이전트가 다른 기기의 세션으로 보낸 메시지에 발신자 정보가 표시되며, 수신 측에서 /로 시작하는 메시지가 명령이나 프롬프트 템플릿으로 실행되지 않습니다. omo remote send를 터미널에서 실행하는 동작은 바뀌지 않았습니다. (#12858, #12852의 일부)
메모리 보존 기능이 레코드마다 완료 기록 가드를 두 번 평가하지 않습니다. 완료 스윕이 가드를 한 번만 읽고 그 한 번의 결과로 레코드를 유지하거나 삭제하며, 보존 테스트도 전제 조건을 단정하는 대신 직접 확인합니다. 보존되거나 삭제되는 대상은 바뀌지 않았습니다. (#12783, #12532의 후속 작업)
독립 실행형 omo 바이너리의 omo doctor가 npm 설치와 같이 메모리 런타임 크기를 다시 보고합니다. 각 메모리 식별자의 런타임 크기와 상한, 식별자 전체 합계가 두 배포판 모두에서 출력되어 바이너리와 npm의 doctor 결과가 일치합니다. (#12785) (#12783)
omo 두 개가 동시에 실행될 때 오래된 바이너리 런타임을 안전하게 정리합니다. 한 실행이 다른 실행이 정리 중인 런타임을 삭제하지 않으며, 이미 제거된 런타임은 실패로 보고되지 않습니다. omo --version, --help, omo update는 런타임을 정리하지 않습니다. (#12770, #12627의 후속 작업)
엔진이 지정된 모델 체인을 유지할 수 없는 작업 자식 프로세스는 더 이상 시작되지 않습니다. 이전에는 프로세스 자식의 엔진이 체인을 적용하지 못하거나(구버전 엔진, set_retry_fallback 거부, 제때 응답 없음), 작업 호스트가 retry_fallback_profile을 지원한다고 알리지 않아도 자식에게 프롬프트가 전달되었고, 엔진 자체의 폴백 설정으로 실행되어 체인 밖의 모델에 도달할 수 있었습니다. 이제 첫 프롬프트 전에 시작이 실패하며, 지정된 모든 모델과 그 이유를 표시합니다. 이런 호스트는 호환되지 않는 것으로 거부되며, 같은 모델 목록이 표시됩니다. (#12759) (#12761)
다른 기기에서 닫힌 세션에 명령을 보내면 이 기기와 같은 오류가 보고됩니다. 원격에서는 session_not_found, 로컬에서는 unknown_session으로 응답했으나, 이제 둘 다 unknown_session으로 응답합니다. (#12755) (#12756)
omo가 릴레이를 위해 자격 증명 저장소를 읽지 않고 메모리에서 기기 키를 기기 서비스에 전달합니다. 새로 로그인하면(omo login, omo account adopt) 로그아웃 표시가 삭제되고, 메모리에 있는 키와 계정이 실행 중인 기기 서비스에 전달됩니다. 메모리 동기화 세션은 서비스가 채택된 기기가 없다고 보고하면 이미 보유한 자격 증명으로 다시 채택합니다. 모든 로그아웃 경로(logout, forget, 서비스가 종료한 세션)는 서비스에 기기를 잊도록 알립니다. 시작 시 부트스트랩은 저장된 자격 증명을 더 이상 읽지 않습니다. device.adopt는 0.1.3 이상의 기기 서비스에만 account를 전달하며, 고정된 기기 서비스 버전이 0.1.3으로 올라갔습니다(설계 D PR 4). (#12735)
omo remote로 다른 기기의 세션을 열고, 메시지를 보내고, 모델을 전환하고, 중단하고, 닫을 수 있습니다. omo remote open <device> [--project P] [--model M]은 해당 기기에 세션을 시작하고 <device>/<session>을 출력합니다. omo remote send <device>/<session> <text>은 응답을 스트리밍하며 출력하고, 턴이 끝나면 반환합니다(--steer는 실행 중인 턴을 조정하고, --follow-up은 뒤에 대기시키며, --no-wait는 세션이 메시지를 받으면 바로 반환합니다). model, interrupt, close는 이름대로 동작합니다. 각 동사는 에이전트의 스레드 도구가 사용하는 것과 같은 원격 작업이며, --json은 타입이 지정된 결과를 출력합니다. 다른 기기의 세션에 대한 steer는, 이제 해당 기기의 엔진이 실행 중인 턴을 보고하면 항상 거부되지 않고 전달됩니다. (#12709, #12320의 일부)
다른 기기에서 스레드를 만들거나 포크할 때 별도의 session.locate 왕복을 기다리지 않습니다. 생성 요청이 open_session 응답에서 릴레이에 새 세션 ID를 묻고 그 값을 사용합니다. 그 응답이 없는 릴레이 데몬(구버전 호스트 또는 이 기기의 구버전 서비스)은 이전처럼 session.locate로 처리됩니다. (#12686)
독립 실행형 바이너리에서 omo update가 설치된 omo를 교체합니다. 이전에는 ~/.omo/binary-runtime/<version>/ 아래 복사본을 교체하라는 명령을 출력했고, 다음 실행 시 그 복사본이 다시 복원되어 업데이트가 적용되지 않았습니다. 실행 시 이 경로의 오래된 런타임 버전도 제거하며, 롤백을 위해 이전 버전과 실행 중인 버전은 유지합니다. (#12627, #12626 수정)
각 메모리 식별자의 런타임 디렉터리 상한은 2 GiB이며, omo doctor와 /doctor가 사용량을 표시합니다. 보존 정책 이후 12시간마다 실행되는 메모리 유지보수 작업이 식별자가 memory.runtime.max_bytes(기본 2 GiB, 무제한은 0, 에이전트별로 memory.agents.<id>.runtime에서 재정의 가능)에 맞을 때까지 가장 오래된 항목부터 제거합니다. 먼저 병합된 반영 실행을 제거하고, 다음으로 완전히 반영된 세션의 트랜스크립트, 유휴 사이드카, 최신 10개를 넘는 오래된 실패 실행 순으로 제거합니다. 한 번도 반영되지 않았거나 일부만 반영된 저널은 기본적으로 유지됩니다. memory.runtime.discard_unreflected_journals: true로 설정하면 상한이 이런 저널도 제거할 수 있으며, 이는 해당 식별자에서 반영이 성공하고 있을 때만 적용됩니다. 활성 세션, 진행 중인 실행, 실행 ID의 최고 기록은 절대 건드리지 않습니다. omo doctor는 각 식별자의 런타임 크기와 전체 합계를 출력하고, 식별자가 상한의 80%에 도달하면 경고합니다. /doctor에는 runtime-size 검사가 추가되어 가장 큰 저장소와 보존 정책으로 추가 확보 가능한 용량을 보여 줍니다. (#12538)
메모리가 디스크에서 무한정 커지지 않습니다. 백그라운드 메모리 유지보수 작업이 설정 가능한 기간을 넘긴 완료된 반영 실행, 완전히 반영된 트랜스크립트, 회상 사이드카, 레거시 저장소를 제거합니다(memory.runtime.retention_days 기본 7일, completions_days 기본 30일). 작업은 시간이 제한된 단위로 나눠 실행되며 멈춘 지점부터 이어서 진행합니다. 메모리에 한 번도 병합되지 않은 입력 트랜스크립트는 discard_unreflected_journals를 켜지 않는 한 유지되며, 켜면 abandoned_journal_days(기본 14일) 후 제거되고, 이것도 해당 에이전트의 반영이 작동할 때만 적용됩니다. 활성 세션이 소유한 항목, 잠기거나 완료되지 않은 작업, 반영에 여전히 필요한 실행 ID는 건드리지 않습니다. (#12532)
프로세스가 죽은 실행이 남긴 반영 잠금(실행 전에 런처가 종료됨, 감독자와 자식이 결과 없이 사라짐, 읽을 수 없는 실행 원장, 잘린 active.lock)은 이제 세션 시작 시, 다음 턴에, 그리고 새로 추가된 omo doctor --fix(미리보기는 --dry-run, 세션 안에서는 /doctor --fix)에 의해 해제됩니다. 이전에는 이 잠금 때문에 이후 모든 반영이 대기열에 머물렀습니다. omo doctor --fix는 소유자가 없어진 런타임 잠금도 회수합니다. (#12517)
remote_wake_unavailable로 실패합니다. 계약 테스트가 고정된 senpi 버전에 대해 이런 기능 모두를 확인합니다. (#12862, #12861 수정)omowright 패키지(^0.3.0, Node와 Bun 모두에서 로드되는 빌드된 dist/를 처음 제공한 릴리스)에 의존합니다. 런타임 스테이저와 로더는 omowright의 TypeScript 소스, 이전 JavaScript 소스, 또는 컴파일된 dist/를 이 순서대로 받아들이므로, 앞으로 레이아웃이 바뀌어도 스테이징된 브라우저 런타임이 조용히 깨지지 않습니다 (#12842, #12851, #12847). (#12847)descriptor 요청을 하나만 받습니다. 실패한 open은 다음 resolve에서 재시도됩니다(#12717에서 이어받았으며, 이 PR이 해당 PR을 대체합니다). (#12839)omo thread read는 에이전트의 thread_read와 같은 방식으로 별칭과 다른 기기의 스레드를 해석합니다. (#12837, #12833 수정)~/.omo/binary-runtime/<version>/omo.exe)을 직접 실행할 때, 홈 경로가 8.3 짧은 이름이나 다른 대소문자로 표기되면 자기 자신에게 넘기고 자신을 설치된 런처로 보고하는 문제가 없어졌습니다. (#12772, #12769 수정)omo 바이너리는 명령 자체와 같은 옵션 파싱으로 기기 코드 방식의 omo login을 인식합니다. 따라서 omo login -- --device 등의 인자는 명령으로 넘겨지지 않고 즉시 거부됩니다. (#12723, #12646 수정)outdated-extension을 보고하고, 확장을 업데이트하고 저장된 그룹을 삭제하라고 안내합니다. (#12663)omo가 대화형 시작마다 "Could not download the OmO device service. Check the connection and try again."를 경고하지 않습니다. 해당 릴리스에 대한 404는 이제 별도의 not_published 상태가 되어, 시작 시에는 조용히 넘어가고 omo remote bootstrap이 이 빌드에서는 원격 기기를 아직 사용할 수 없다고 알립니다. 연결 실패, 서버 오류, 절반만 배포된 릴리스는 여전히 경고합니다. (#12659)[[path]]와 상대 마크다운 링크가 같은 실행에서 함께 업데이트됩니다. 완료 검사가 실행의 변경 사항 중 무엇을 반영할지 결정한 뒤에 이루어집니다. 이동된 노트의 링크는 그 노트를 따라가며, 이동된 노트의 상대 링크는 원래 대상을 계속 가리킵니다. 실행이 보관한 노트, 즉 ARCHIVE.md 항목이 파일을 가리키는 노트(경로, 또는 다른 노트와 경로를 공유하지 않는 경우 파일 이름)는 [[ARCHIVE.md|<old path> (archived)]]로 링크됩니다. 사용자가 잊도록 요청한 노트처럼 제거된 다른 노트에 대한 링크는 일반 텍스트가 됩니다. 완료 검사가 거부한 노트, 재작성이 거부되는 노트(예: 비밀 값처럼 보이는 텍스트를 이미 담은 노트), UTF-8이 유효하지 않은 노트는 링크를 그대로 유지하므로 /doctor가 여전히 보고할 수 있습니다. 대상 자체를 제거하는 /dream --to <doc>은 이런 링크 업데이트 때문에 더 이상 거부되지 않습니다. 사실 추출도 보관되었거나 삭제된 월별 원장 경로에 더 이상 쓰지 않습니다. 그 달의 새 사실은 notes/facts/<month>-2.md(그다음 -3, ...)로 저장되므로, 오래된 링크가 관련 없는 새 내용을 가리키게 되지 않습니다. (#12642) (#12645)max_fallback_attempts에서 멈추며, 호출자에게 보이는 중단으로 끝납니다. 타이머를 영원히 다시 설정하지 않습니다. (#11898, #6637 수정)작업 자식은 거부되는 대신 부모 세션을 통해 질문합니다. 자식의 권한 요청(및 선택, 확인, 입력, 편집기 대화상자)이 부모의 UI에 표시되므로, 허용하면 자식의 호출이 실행되고 거부하면 실행되지 않습니다. 부모 턴이 기다리고 있는 자식은 그 턴을 시작한 연결을 통해 묻고, 백그라운드 자식은 응답할 수 있는 연결된 모든 클라이언트에게 묻습니다. 비밀 입력과 영구 권한 선택은 절대 전달되지 않습니다. 자체 프로세스나 작업 호스트에서 실행되는 자식은 부모의 승인 모드로 열리며, 이후의 모든 변경을 한 번에 하나씩 따라가고 항상 최신 상태로 끝납니다. 따라갈 수 없었던 자식은 부모 세션에 보고됩니다. (#12839)
omo remote open과 스레드 도구의 생성 및 포크가 다른 기기에서 새 세션이 실행될 승인 모드를 지정합니다. 생성하는 세션 자체의 모드를 쓰거나, omo remote open의 경우 새 --permission-preset 플래그를 쓰고, 그 외에는 이 기기의 설정을 씁니다. 설정을 읽을 수 없으면 가장 느슨한 모드로 넘어가지 않고 사용 오류가 됩니다. (#12839)
컴파일된 엔진에서 사용되지 않던 installEngineCaTrust 시작 루틴을 제거했습니다. 이 루틴은 NODE_USE_SYSTEM_CA=1을 설정했지만 호출하는 곳이 없었고, 엔진 실행 시 인증서 신뢰는 런처의 신뢰 단계에서 설정됩니다. 새 테스트는 NODE_USE_SYSTEM_CA가 환경에 없는 상태로 시작된 엔진이 런처에서 이를 받지 않는지 확인합니다. OMO_EXTRA_CA_CERTIFICATES 검증은 변경되지 않았습니다. (#12628, #10762의 일부)
eac1bb5 docs(changelog): 5.1.65는 dev 병합 후 #12862를 포함합니다. 해당 fragment를 소비하세요
0de8bb7 Merge commit '790a6f227d0fe924548e7d25fa5e1e653ef056ac' into release/v5.1.65-source-state
e95a9d3 Merge pull request #12839 from code-yeongyu/feat/6189-runner-permission-forwarding
e9dc0a6 test(thread): 원격 표면 팩토리가 세션의 권한 프리셋을 전달하도록 함 (#6189 리뷰 요청)
412f956 Merge dev 9ac8bc9 into feat/6189-runner-permission-forwarding; 번들과 service-auth 재생성
9ac8bc9 Merge pull request #12858 from code-yeongyu/fix/12852-remote-peer-provenance
1e3bbb1 Merge pull request #12847 from code-yeongyu/fix/omowright-ts-entry-staging
cce5edb test(memory): 사실 자식의 자체 승인 모드와 허용 목록을 실행 지점에서 고정 (#6189)
f781a96 Merge origin/dev (ca74736) into feat/6189-runner-permission-forwarding
10db218 Merge remote-tracking branch 'origin/dev' into fix/omowright-ts-entry-staging
3ed5d6b Merge origin/dev (ca74736) into fix/12852-remote-peer-provenance
ca74736 Merge pull request #12837 from code-yeongyu/fix/12833-cross-device-name-addressing
0961e21 Merge origin/dev (adddd17) into fix/12852-remote-peer-provenance
9a40a4d Merge remote-tracking branch 'origin/dev' into feat/6189-runner-permission-forwarding
afa8683 Merge origin/dev (adddd17) into fix/12833-cross-device-name-addressing
adddd17 Merge pull request #12761 from code-yeongyu/fix/child-designated-chain-fail-closed
7a2f988 fix(browser): npm에서 omowright ^0.3.0에 의존하도록 변경
e582ace Merge remote-tracking branch 'origin/dev' into fix/12852-remote-peer-provenance
984876e Merge origin/dev (c0ef8c2) into fix/12833-cross-device-name-addressing
b0b0de4 Merge remote-tracking branch 'origin/dev' into fix/child-designated-chain-fail-closed
c0ef8c2 Merge pull request #12686 from code-yeongyu/perf/create-locate-in-open
580ad18 fix(browser): omowright을 ab7d268으로 고정 (lazy bun:ffi)
388b168 Merge origin/dev (f2e637a) into fix/12833-cross-device-name-addressing
8b3d696 chore(knip): DEFAULT_SERVICE_API의 기존 항목 제거; cliServiceAccess가 이제 이를 사용 (#12833)
af68c67 fix(shared-skills): 스테이저와 로더에서 omowright 레이아웃을 TS 소스, JS 소스, dist 순으로 해석
1cc6513 docs(changelog): 원격 send 출처 정보 기록 (#12858, #12852의 일부)
4128cab fix(thread): 다른 기기로 보내는 메시지에 발신자의 gateway 출처를 찍고 아무것도 확장하지 않음 (#12852)
356dcf9 test(thread): 다른 기기로 보내는 메시지가 발신자의 gateway 출처를 담음 (RED, #12852)
bac0bb0 Merge remote-tracking branch 'origin/dev' into perf/create-locate-in-open
f2e637a Merge pull request #12841 from code-yeongyu/fix/12835-eq-e24
4bfcf0f Merge remote-tracking branch 'origin/dev' into fix/child-designated-chain-fail-closed
0b3bd99 fix(shared-skills): omowright 다이제스트 항목 이름을 OS와 무관하게 유지
1f36f59 docs(changes): fragment의 이름을 PR에 맞춤
fe01b5f ci(eq): EQ 전에 Codex 플러그인 워크스페이스를 설치해 E24가 고정된 comment-checker를 찾도록 함 (리뷰 HIGH)
f7ea2d6 fix(shared-skills): omowright 런타임을 TypeScript 소스에서도 스테이징
996d41a Merge origin/dev (42c486c) into fix/12833-cross-device-name-addressing
91e3790 fix(omo-native): loadThreadSdk의 스레드 클라이언트 임포터가 플러그인 사이드카를 기본값으로 사용하도록 하여 타입이 함수가 됨 (#12833)
42c486c Merge pull request #12764 from code-yeongyu/test/o8-chain-hop-count
cc19f39 fix(qa): 라이브 다운로드 대신 EQ E24에 고정된 comment-checker를 제공
8b167da Merge origin/dev (6d3ff3a) into fix/12833-cross-device-name-addressing
6d3ff3a Merge pull request #12756 from code-yeongyu/fix/remote-closed-session-code
5ca0b15 chore(omo-native): omo remote 누락 세션 수정에 맞춰 service-auth 번들 재생성
03136fc fix(remote): omo remote가 엔진의 unknown_session 응답에서도 누락된 세션을 식별하도록 함
분량 관계로 이후 내용은 번역에서 제외했습니다. 전체 내용은 위 원문 링크에서 확인하세요.