xiaomi-token-plan-sgp, xiaomi-token-plan-ams, xiaomi-token-plan-cn)을 추가하여 omp login이 선택한 지역에 따라 토큰-플랜 키를 저장할 수 있도록 했습니다. (#1846)context-1m-2025-08-07(1M 장문맥) 베타를 제거했습니다. 이를 전송하면 장문맥 크레딧이 없는 구독/OAuth 요청이 429 Usage credits are required for long context requests로 실패하여 Sonnet이 작동하지 않았습니다. 나머지 베타들은 변경되지 않았습니다.fireworks/kimi-k2.5, fireworks/kimi-k2.6, firepass/kimi-k2.6-turbo)에서 Kimi K2.x maxTokens가 공개된 Kimi-on-Fireworks 출력 예산이 아닌 Fireworks /v1/models 디스커버리(max_completion_tokens: 65536)에서 상속되던 문제를 수정했습니다. 이로 인해 호출자(및 openai-completions 기본-인젝션 안전망)가 라우터가 처리할 수 없는 예산을 전송할 수 있었고, 지속적인 추론 추적이 더 용이했습니다. Fireworks 리졸버는 이제 모든 Kimi K2.x id(공개 카탈로그 id와 표준 accounts/fireworks/{models,routers}/kimi-k2… 와이어 형식)를 32,768 출력 토큰으로 제한하며, 생성기는 동일한 캡을 후처리 안전망으로 적용하여 firepass 정적 폴백과 번들 fireworks 항목이 재생 중에 동기화된 상태로 유지됩니다. (#1849)reasoning_content 재생을 생략하던 문제를 수정했습니다. (#1846)compat.cacheControlFormat: "anthropic"을 준수하여 OpenAI 호환 Claude 프록시에 대한 Anthropic 프롬프트 캐싱을 수정했습니다. (#1845)reasoning_content를 폐기했기 때문입니다. K2.6 thinking 파라미터는 기본값(null)이 과거 추론을 무시하는 추가 keep 필드를 취하므로, K2.6은 에이전트 루프의 모든 반복에서 사용자 프롬프트로부터 전체 사고의 연쇄를 다시 도출해야 했습니다. Moonshot 직접(api.moonshot.ai) 및 Kimi Code(api.kimi.com) 와이어 본문은 추론이 활성화된 kimi-k2.6 요청에 대해 thinking: { type: "enabled", keep: "all" }을 전송하여 다단계 도구-호출 에이전트에 대한 Moonshot의 문서화된 모범 사례와 일치합니다. 플래그는 K2.6 id와 두 개의 네이티브 호스트에 제한되어 있습니다. 이전 Moonshot 모델(K2.5 이하)은 알 수 없는 필드에 400 응답을 하고 모든 Kimi 게이트웨이(OpenRouter, OpenCode, Kilo, Fireworks, …)는 자체 사고 형식을 사용합니다. (#1838)qwen3.7-max, qwen-max, qwen3-coder-*)으로 통합될 때 400 InternalError.Algo.InvalidParameter: The provided messages input is invalid. The error info is [Unexpected item type in content.] 오류가 발생하던 문제를 수정했습니다(dashscope.aliyuncs.com/compatible-mode/v1에서 호스팅). openai-completions의 convertMessages는 더 이상 잘못 구성된 사용자 정의 프로바이더가 input: ["text", "image"]를 주장하더라도 해당 텍스트 전용 id 계열에 대해 image_url 컨텐츠 부분을 전달하지 않습니다. qwen3.7-plus 및 qwen-vl-max와 같은 멀티모달 호환 모드 id는 여전히 카탈로그 input 필드에 의존합니다. 도구-결과 분기와 사용자-컨텐츠 분기 모두 텍스트 전용 id에 대해 표준 [image omitted: model does not support vision] 플레이스홀더로 폴백하여 모델이 첨부 의도를 여전히 인식합니다. (#1859)none으로 응답할 수 있습니다(정규화되어 "no title"이 됨).task 서브에이전트 팬-아웃으로 처리하도록 했습니다.TabBar를 가진 모델 및 설정 선택기와 일치합니다.selectedBg 하이라이트 바로 렌더링되고, 일치된 쿼리 토큰은 악센트 색상으로 강조되며, 각 결과는 우측 정렬된 상대 타임스탬프를 표시하고, 패널에는 아이콘이 있는 악센트 제목과 이색 키힌트 푸터가 추가되었습니다. 선택기는 또한 PageUp/PageDown(구성 가능한 tui.select.pageUp/pageDown 키바인딩을 통해)과 Home/End 네비게이션을 얻었습니다.web_search_options.search_context_size는 이제 최대 검색 그라운딩을 위해 high입니다(이전: medium), 기본 num_search_results는 20입니다(이전: 10) 따라서 두 배 많은 소스가 표시되며, return_related_questions는 활성화되어 응답의 related_questions가 이제 relatedQuestions로 파싱됩니다(이전: 제거됨). 동일한 쿼리에서 이는 결과를 10개 소스 / ~410 출력 토큰에서 20개 소스 / ~1900 출력 토큰의 구조화된 다중 섹션 답변으로 개선했습니다. 레이턴시는 컨텍스트 크기가 아닌 모델 출력 길이를 추적하므로 60초 하드 타임아웃 헤드룸은 변경되지 않습니다.ED3-위험 터미널(Ghostty/kitty/iTerm2/Alacritty)에서 스트림된 어시스턴트 메시지가 부분 접두사(예: "Natives built, now…"의 "Nat"만)에서 중지되고, 최종 텍스트가 리사이즈 후에만 나타나던 문제를 수정했습니다. TranscriptContainer는 마지막 라이브 렌더를 재생하여 각 비-라이브 블록을 동결하지만, 렌더 병합은 같은 스로틀된 프레임 내에서 블록의 컨텐츠를 완료하고 다음 블록을 추가할 수 있습니다 — 따라서 블록은 오래된 중간-스트림 스냅샷에서 밀봉되고 다음 thaw까지 다시 칠해지지 않습니다. 이전 렌더에서 라이브였던 블록은 이제 라이브→동결 전환에서 한 번 재계산되어 최종 컨텐츠에서 밀봉됩니다.
ACP/RPC stdio 시작을 수정하여 프로토콜 프레임이 JSON-RPC 전송이 시작되기 전에 일회성 파이프된 프롬프트 입력으로 더 이상 소비되지 않습니다.
omp completions을 완료 스크립트 쓰기를 기다린 후 종료하도록 수정했습니다.
AssistantMessageComponent를 수정하여 안정적인-접두사 완료 API를 다시 노출하여 스트림된 어시스턴트 메시지가 명시적으로 완료될 때까지 불안정한 상태로 유지됩니다.
세션 복구를 수정하여 임시 폴백 모델 전환(예: 자동 컨텍스트-프로모션 또는 재시도 폴백)을 무시하므로 재개되거나 재개-전환된 세션이 마지막 변경이 사용자-선택 임시 모델이 아니면 구성된 기본 모델로 되돌아갑니다.
세션 내 /resume을 수정하여 기본 모델로의 폴백 대신 마지막 사용자-선택 임시 모델과 지속된 플랜/목표 모드 상태를 모두 복구합니다.
/resume 세션 선택기가 짧은 뷰포트에서 오버플로우되는 문제를 수정했습니다: 표시 윈도우가 5개 항목으로 하드코딩되어 있었고(각각 3줄로 가정) 제목이 있는 세션은 4줄로 렌더링되므로, 일반적인 높이의 터미널에서 선택기의 헤더와 검색 상자가 상단에서 스크롤 오프되고 첫 번째 항목이 터미널을 위로 스크롤할 때까지 숨겨졌습니다. 표시-항목 수는 이제 라이브 터미널 높이로부터 도출되어(최악의 경우 4줄 제목 항목과 선택기의 크롬을 예산으로 책정) 전체 선택기가 뷰포트에 맞으므로 더 큰 터미널에서 확장됩니다.
Agent Control Center와 Extension Control Center 대시보드가 터미널을 오버플로우하던 문제를 수정했습니다: 이들은 채팅 기록 아래에 인라인으로 마운트되어 결합된 높이가 뷰포트를 초과했습니다 — 탭 바와 컨트롤이 상단에서 네이티브 스크롤백으로 스크롤 오프되고, 모든 상태 변경이 보기를 아래로 끌었습니다. 두 대시보드는 이제 라이브 터미널 높이(process.stdout.rows)로 크기 조정되는 전체-화면 오버레이로 렌더링되며, 리사이즈에서 다시 맞춰지고, 뷰포트를 채우며, 푸터 키힌트를 위한 공간을 예약하여 컨트롤이 표시된 상태로 유지됩니다.
Ctrl+R 히스토리 검색 결과가 FTS 접두사 일치와 부분문자열 폴백 일치를 병합한 후 프롬프트 최신도로 전역 정렬된 상태로 유지되도록 수정했습니다.
Exa 웹 검색이 저장된 또는 환경 자격 증명이 없을 때 공개 Exa MCP 폴백을 다시 사용하도록 수정했습니다. 인증 저장소 → EXA_API_KEY → mcp.exa.ai 해결 순서를 유지합니다. (#1860)
ACP 플랜-모드 쓰기를 local://PLAN.md로 수정하여 세션-로컬 플랜 아티팩트가 편집기 writeTextFile 브리지를 통해 라우팅되지 않고 OMP의 로컬 아티팩트 루트에 작성되므로 Zen의 Internal error를 회피하고 생성 후 플랜을 읽을 수 있습니다. (#1863)
ACP 플랜 모드가 플랜 승인에서 에이전트를 좌초시키던 문제를 수정했습니다: mode: "plan"을 입력하면 이제 상시 resolve 핸들러를 등록하므로 에이전트의 resolve { action: "apply" }가 더 이상 No pending action to resolve. Nothing to apply or discard.로 실패하지 않습니다. 핸들러가 플랜 파일을 검증하고, 클라이언트가 폼을 지원할 때 unstable_createElicitation을 통해 ACP 클라이언트에 확인을 요청하고, 승인된 플랜을 local://<title>.md로 이름을 바꾸며, 플랜 모드를 종료하여 에이전트가 실행을 위한 쓰기 도구를 다시 얻습니다. (#1869)
provider.appendOnlyContext: "auto"가 Xiaomi Token Plan/SGLang 엔드포인트에서 비활성 상태를 유지하도록 수정하여 전역적으로 추가-전용 모드를 강제하지 않으면서 접두사-캐시 히트를 보존합니다. (#1851)
models.yml 호환성 파싱을 수정하여 사용자 정의 OpenAI-호환 Claude 프록시에 대해 compat.cacheControlFormat: "anthropic"을 유지합니다. (#1845)
TUI의 Settings → Plugins 패널이 마켓플레이스 플러그인만 설치되었을 때 "No plugins installed"를 보고하던 문제를 수정했습니다. 패널은 이제 PluginManager.list()를 /plugins list 슬래시 명령 및 omp plugin list CLI가 이미 사용하는 동일한 데이터 소스인 MarketplaceManager.listInstalledPlugins()과 병합하며, 각 행을 [npm] / [marketplace] 종류 배지, 범위 태그 및 프로젝트-섀도우된 사용자 설치에 대한 섀도우 표시기로 태깅합니다. 마켓플레이스 행을 선택하면 새로운 MarketplacePluginDetailComponent가 열리는데, 여기서 단일 Enabled 토글이 MarketplaceManager.setPluginEnabled(pluginId, enabled, scope)을 호출하고, 읽기 전용 메타데이터(버전, 설치 경로, 설치 시간, 마지막 업데이트, git 커밋 SHA)가 토글 아래에 나열됩니다. 빈 상태는 이제 두 설치 명령(omp plugin install <package> 및 omp plugin install <name>@<marketplace>)을 나열합니다. (#1842)
MnemopiSessionState.collectScopedRecallResults/recallResultsScoped의 범위 지정 mnemopi 회상을 수정하여 비동기 Mnemopi.recallEnhanced를 기다리므로 새로운 자동-도출 queryEmbedding이 흐릅니다. 이 없이 임베딩 활성화 mnemopi 백엔드는 모든 회상에서 자동으로 FTS-전용을 실행했습니다. (#1832)
SSH 도구 렌더러가 멀티라인 원격 명령을 단일-라인 상태 헤더로 인라인하던 문제를 수정했습니다. 이로 인해 테두리가 있는 출력 블록이 명령 중간에 열리는 오형 셀이 생성되었습니다. 렌더러는 이제 헤더에서 명령을 제거하고(오직 [host]만 유지) Output 위의 프레임된 섹션에 전체 명령을 렌더링하며, bash 렌더러를 미러링합니다. renderStatusLine은 또한 description, meta, title의 모든 포함된 CR/LF를 평탄화하여 도구가 헤더를 실수로 여러 행으로 확장할 수 없습니다. (#1828)
packages/coding-agent/tsconfig.json에 대해 tsc --noEmit을 수정하여 TypeScript 5.x에서 56개 오류(builtin-registry.ts × 46, agent-session-openai-responses-replay.test.ts × 10)를 보고하지 않도록 했습니다. 저장소의 자체 게이트(tsgo / TypeScript 6.x)는 이미 () => void 슬래시-명령 핸들러를 수용했지만, 5.x는 void 반환 함수 값을 () => T | undefined 슬롯으로 강제하지 않기 때문에 거부합니다. SlashCommandSpec.handle / handleTui 시그니처와 테스트의 createPersistedSession populate 콜백은 이제 두 함수 타입의 합집합으로 표현되어(하나는 SlashCommandResult / 대상을 반환하고, 하나는 void를 반환) 기존 핸들러 본문은 두 컴파일러에서 타입체크됩니다. (#1821)
omp update가 bun install -g 업데이트에서 @oh-my-pi/pi-natives와 플랫폼-특정 @oh-my-pi/pi-natives-<tag> 리프를 이전 버전에서 남겨두던 문제를 수정했습니다. 다음 실행이 오래된 .node 파일을 로드하고 validateLoadedBindings에서 The .node file on disk is from a different release than this loader로 중단되었습니다. omp update는 이제 네이티브 애드온 코어와 플랫폼 리프를 @oh-my-pi/pi-coding-agent에 대해 설치하는 동일한 버전으로 고정합니다. (#1824)
Mnemopi.recall(), Mnemopi.recallEnhanced(), Mnemopi.search(), Mnemopi.query(), 모듈-수준 recall/recallEnhanced/search/query 내보내기, BeamMemory.recall/recallEnhanced 메서드, core/beam/recall의 자유 recall/recallEnhanced 함수, orchestrateRecall을 변경하여 Promise<RecallResult[]>을 반환하므로 회상 파이프라인은 embedQuery를 통해 쿼리 텍스트로부터 queryEmbedding을 자동-도출할 수 있습니다. 호출자는 회상 호출을 기다려야 합니다(await). FTS-전용 상태로 유지하려면 queryEmbedding: null을 전달합니다.mcp-server/mcp-tools의 MCP 엔트리포인트 handleToolCall, callToolJson, handleJsonRpc를 비동기로 변경하여 회상/공유-회상 핸들러가 새로운 Promise<ToolResult[]> 형태를 기다릴 수 있습니다. 외부 MCP 전송은 이들을 기다려야 합니다(await).memory_embeddings가 프로덕션 remember/rememberBatch/updateWorking/consolidateToEpisodic 경로에서 채워지지 않던 문제를 수정했습니다.