omo는 다운로드하는 디바이스 서비스를 실제 릴리즈 키 세트로 검증합니다. 디바이스 서비스의 릴리즈 키 세트가 이제 생성된 Ed25519 키에 고정되었습니다. 운영 키가 먼저, 복구 키가 두 번째로 packages/device-service-core/src/release/release-key.json에 들어갑니다(서비스 자체의 release-key.json을 바이트 단위로 복사한 파일). 두 키 중 하나로 서명된 릴리즈는 설치되고, 어느 키로도 서명되지 않았거나 서명 형식이 잘못된 릴리즈는 아무것도 기록되기 전에 거부됩니다. 지금까지는 이 고정값이 모든 릴리즈를 거부하는 임시 값이었습니다. (#12437)
스킬과 프롬프트가 존재하지 않는 스킬, 파일, 에이전트를 가리키지 않으며, CI가 새로 생기는 그런 참조를 거부합니다. Native ultrawork 지시문은 세션에 bun-1-4 스킬을 읽으라고 했지만, Senpi가 이 스킬의 이름을 bun으로 바꿨으므로 이제 bun을 지정합니다. remove-deadcode는 typescript-programmer 스킬을 요청했고, 이 때문에 OpenCode가 task 호출 전체를 거부했습니다. 이제 programming을 로드합니다. frontend와 ulw-research는 omo가 한 번도 제공하지 않은 open-design 스킬을 더 이상 로드하지 않고, 대신 nexu-io/open-design 라이브러리를 지정합니다. ulw-research 어셈블리 워커는 세션 목록에 있을 때만 imagegen과 ulw-loop을 로드하며, frontend는 OpenCode의 playwright를 요청했던 자리에서 browser 스킬을 로드합니다. OpenCode에는 이제 hyperplan 모드가 세션에 로드하라고 지시하는 hyperplan 스킬도 포함됩니다. 지금까지는 이 저장소의 체크아웃에만 있었습니다. 잘못된 디렉터리의 파일을 가리키거나 존재하지 않는 파일을 가리키던 programming 참조 7개와 frontend 상호 참조 1개는 이제 올바른 파일을 엽니다. 루트 테스트 스위트에 새 검사가 추가되어, 스킬을 제공하는 각 에디션마다 배포된 스킬과 프롬프트의 모든 스킬 이름, 스킬 상대 경로, 에이전트, 카테고리를 확인하고, 대상이 없으면 가장 가까운 실제 대상을 알려줍니다. (#12484)
omo가 엔진의 신뢰 저장소에서 OpenSSL 기본 인증서 파일(macOS의 /etc/ssl/cert.pem)을 제외할 때, 이제 그 이유를 알려줍니다. omo doctor는 파일 이름, 원인, 읽기가 중단된 인증서 블록, 그리고 이 제외로 인해 일반 Bun보다 신뢰하는 인증서가 적은지 여부를 담은 INFO 줄을 출력합니다. omo trust ensure --json은 같은 정보를 defaultFileDrop으로 보고합니다. 경고나 실패로 처리되지 않습니다. (#12499, #10762의 일부)
설계 개정 11, 4.4항 6번. readDefaultFileCandidates는 내보내진 DROP_CAUSE_NARROWING 테이블에서 좁히기 플래그를 가져옵니다. 제외가 발생하면 acquireEngineTrust는 두 개의 일반 코드 대신 file, cause, blockIndex, narrowing을 담은 openssl-default-file-malformed 항목 하나를 기록하고, 이를 defaultFileDrop으로 반환합니다. runTrustStage는 이를 trust ensure --json 줄에 출력합니다. trust-diagnostics.ts는 이 구조화된 항목을 허용하고, 읽을 수 없는 파일에 대한 일반 코드도 계속 허용합니다. 다른 파일 이름, 알 수 없는 원인, 정수가 아닌 블록 인덱스, 또는 원인과 맞지 않는 좁히기 플래그는 거부합니다. engine-trust-doctor.ts는 채택된 세대의 diagnostics.1.jsonl과 diagnostics.jsonl을 읽고, 해당 세대의 마지막 import-exec 또는 ensure 레코드를 선택하여 omo doctor에 INFO 줄 하나를 제공합니다. 제외 내용이거나 default-file: kept / unreadable입니다. 로그가 없거나 손상되었으면 줄을 출력하지 않으며, doctor가 실패하지 않습니다.
Native 스킬이 Senpi 세션을 OpenCode 전용 에이전트, 도구, 명령으로 안내하지 않습니다. 설치된 스킬에 대한 커뮤니티 감사에서 OpenCode에만 있거나 어디에도 없는 참조 16개가 추가로 발견되었습니다. refactor는 oracle 에이전트를 참조하고 team_list, team_status를 호출했습니다. debugging은 team_shutdown_request와 team_approve_shutdown으로 팀을 종료했습니다. frontend는 skill 도구로 스킬을 로드하고 Prometheus 플래너를 지정했습니다. ulw-loop은 explorer 에이전트, plan 에이전트, /cancel 명령을 지정했습니다. ulw-plan은 git 카테고리를 제시했고, ultimate-browsing은 web-search 도구와 Playwright MCP 호출을 지정했습니다. 이제 Senpi는 oracle 대신 deep-high 레인을 사용하고, 없는 팀 도구 대신 task_send 종료 핸드셰이크와 task_output을 사용하며, Native 스킬에서 explore, ulw-plan 워크플로, /goal pause 또는 /goal clear를 사용합니다. 공유 스킬은 OpenCode와 Codex에서 동일하게 읽힙니다. (#12523)
Linux 컨테이너 매트릭스(Debian, Fedora, Alpine, openSUSE Leap 및 Tumbleweed)가 이제 각 배포판에서 컴파일된 엔진의 CA 가져오기를 확인합니다. os-release에서 선택된 번들을 엔진이 읽고, update-ca-certificates 또는 update-ca-trust로 설치된 루트는 신뢰되며, openSUSE의 /var/lib/ca-certificates/openssl에만 배치된 루트는 신뢰되지 않는지 확인합니다. (#12223, #10762의 일부)
엔진 CA 가져오기의 설계 9.7 변이 검사가 이제 CI에서 packages/omo-native의 신뢰 코드에 대해 실행됩니다. script/omo-native-trust-mutations.ts는 각 변이를 패키지의 일회용 복사본에 소스 패치로 적용하고, 지정된 테스트가 실패하는지 확인하며, 패치되지 않은 복사본에서 같은 테스트가 통과하는지 확인합니다. 소스 변이 31개(신뢰 정책, 런처 신뢰 단계, 사용자 추가 항목, 세대 보존, OpenSSL 해시 디렉터리 및 기본 파일 선택기)와 오라클 자가 검사 2개를 다룹니다. 변이의 패치가 정확히 한 번만 일치하지 않으면 실패하며, 새로운 Engine trust mutations 워크플로에서 packages/omo-native 아래의 모든 변경마다 실행됩니다. senpi, 데스크톱, macOS 및 Windows 어댑터가 소유한 항목은 각자의 파이프라인에서 실행됩니다. (#12495, #10762의 일부)
Senpi 작업 및 LSP 도구 설명이 이제 도구의 동작을 명시합니다. task_cancel은 완료된 자식의 상주 세션 또는 대기 중인 메시지를 해제하고, task_send의 32KB 상한은 팀 메시지에만 적용되며 메시지는 대기열에 들어갈 수 있습니다. task_output의 tail 모드는 문자 상한을 공유하고, task_id가 name보다 우선하며, lsp_find_references, lsp_symbols, lsp_diagnostics는 200개 결과 상한과 기본값을 명시합니다. 텍스트만 변경되었으며 동작 변경은 없습니다. (#12500, #12496 수정)
omo trust ensure는 재사용하는 세대의 최신성을 갱신하지 못할 때 이제 trust-lease-failed를 보고합니다. 보존 정리 작업이 다음에 제거할 수 있는 세대를 조용히 넘겨주지 않습니다. (#12163, #10762의 일부)
Fedora, RHEL 등 인증서 사이에 ASCII가 아닌 주석 줄(예: # NetLock Arany (Class Gold) Főtanúsítvány)이 있는 CA 번들을 사용하는 시스템에서, 컴파일된 엔진은 번들 전체를 잘못된 것으로 버리고 대체 동작으로 넘어가는 대신 시스템 루트를 가져오게 되었습니다. 인증서 블록 내부의 ASCII가 아닌 텍스트는 여전히 파일 전체를 버립니다. (#12220, #10762의 일부)
메모리 동기화 로그인이 종료된 디바이스(취소됨, 로그아웃됨, omo logout, omo account forget --device, 또는 새 로그인으로 대체됨)는 더 이상 동기화 신뢰 고정값을 유지하지 않습니다. 따라서 omo account show --account가 해당 디바이스를 참여 상태로 보고하지 않으며, 초기화 후 다시 페어링하는 것도 차단되지 않습니다. 다시 참여하려면 항상 페어링 또는 복구 절차를 거쳐야 합니다. 새로 추가된 omo account retire-sync --account <id>는 데스크톱이 소유한 세션에 대해 같은 작업을 수행합니다. (#12280)
omo doctor는 이제 캐시된 런타임이 없어진 생성된 omo 래퍼를 조용히 넘기지 않고 보고합니다. WARN broken omo on PATH: <file> launches <missing path>; remove it를 출력하며, 깨진 래퍼에 대한 복구 설치 프로그램은 제안하지 않습니다. 또한 bun과 npm처럼 서로 다른 두 omo-ai 설치가 PATH에 함께 있으면 경고합니다. 이전에는 종류가 다른 설치만 표시되었습니다. 깨진 래퍼 감지는 Windows .cmd 래퍼에는 실행되지 않습니다. 이 래퍼는 rem OMO_GENERATED_RUNTIME_WRAPPER를 쓰지만, 검사는 # 마커를 찾기 때문입니다. (#12534, #12110 수정)
omo doctor는 이제 캐시된 런타임이 없어진 생성된 omo 래퍼를 보고하며, 서로 다른 두 omo-ai 설치가 PATH에 함께 있으면 경고합니다. Windows .cmd 래퍼는 깨진 상태 검사의 대상이 아닙니다. 이 래퍼는 rem OMO_GENERATED_RUNTIME_WRAPPER를 쓰지만, 검사는 # 마커를 찾기 때문입니다.
fetch, Bun.fetch, 저장된 fetch, Worker fetch, node:https, WebSocket)에 대한 테스트가 있습니다. 선택된 집합 밖의 루트나 OS가 거부한 루트는 모든 경로에서 실패하며, 저장소 중간 인증서는 용도가 서버 인증을 허용하고 거부되지 않은 경우에만 사용됩니다. limitation-pin:이라는 이름의 테스트는, 서버가 허용된 루트 아래에서 직접 제시하는 거부된 중간 인증서가 여전히 수락됨을 기록합니다. (#12219, #10762의 일부)