Date.now를 mocking하는 fake-timer 테스트)로 인해 yieldIfDue()가 영구적으로 게이트되어 이벤트 루프로 yield를 중단할 수 있었습니다. 이제 게이트는 역방향 시계 델타를 due로 처리하고 재-앵커합니다. 게이트는 주입 가능한 YieldGate로 노출됩니다(yieldIfDue()는 공유 싱글톤으로 유지). 따라서 프로세스 전역 타이머를 mocking하지 않아도 테스트할 수 있습니다.UsageReport에 provider 레벨 notes?: string[] 필드를 추가했습니다. 모든 한도에 적용되는 면책조항용입니다(예: "OMP-observed spend only"). 이 필드는 usage.ts 스키마와 auth-broker wire 스키마 사본 모두에 선언되어 "+": "reject" 역직렬화 게이트를 통과합니다. (#3268)notes에서 provider 레벨 notes로 이동했습니다. provider당 한 번 렌더링되므로 모든 계정 × 윈도우에서 중복되지 않습니다. (#3268)mode: "anthropic-budget-effort"를 선언할 때 output_config.effort가 thinking.budget_tokens과 함께 발행됩니다.anthropic-messages가 model.headers 및 ANTHROPIC_CUSTOM_HEADERS에서 호출자가 제공한 Authorization / X-Api-Key를 조용히 제거하여 커스텀 프록시 인증 스킴을 차단하는 문제를 수정했습니다. 이제 non-OAuth 요청은 호출자의 값을 준수합니다(openai-responses와 일치). 하위 레벨 클라이언트는 non-official endpoint에 대해 커스텀 Authorization이 제공될 때 X-Api-Key 추가를 억제하여 프록시가 단일 credential을 받습니다. OAuth bearer + Cloudflare AI Gateway는 기존의 강제 인증 헤더를 유지합니다. (#3391)num_predict가 provider의 65536 output-token 상한을 무시하는 문제를 수정했습니다. stale models.db 행(또는 output 상한을 다시 활성화하는 커스텀 modelOverrides)이 pre-omitMaxOutputTokens 카탈로그에서 maxTokens: 1048576을 포함했으므로 max_tokens (1048576) exceeds model's maximum output tokens (65536) for model deepseek-v4-pro 오류로 모든 요청이 400'd 되었습니다. 이제 Ollama provider는 전송 전에 모든 ollama-cloud 요청에 대해 num_predict를 문서화된 65536 상한에서 clamping합니다. 캐시된 스펙의 maxTokens 및 기존 omitMaxOutputTokens 정책과 무관하게 적용되므로 로드 타임 정책이 스펙을 정규화하지 않았을 때도 요청이 유효하게 유지됩니다. Self-hosted ollama 트래픽은 영향을 받지 않습니다. (#3392)cache_control을 생략하는 문제를 수정했습니다. 이제 Chat Completions를 강제하지 않고 프롬프트 캐싱이 활성화됩니다. (#3397)Invalid signature in thinking block 오류가 발생했습니다. (#3399)cache_control을 생략하는 문제를 수정했습니다. 이제 Chat Completions를 강제하지 않고 프롬프트 캐싱이 활성화됩니다. cacheRetention: "long"은 이제 breakpoint를 ttl: "1h"로 업그레이드합니다. (#3397)high tier로 축소되는 문제를 수정했습니다. max upstream level이 이제 내부 xhigh effort로 확인되고, picker는 high와 xhigh 모두를 표시하며, 메타데이터는 xhigh를 Umans의 native max wire tier로 다시 매핑합니다. (#3192)400 vision is not supported로 거부하는 이미지 입력을 받아들이는 문제를 수정했습니다. Copilot /models 응답은 모든 호스트의 Claude/GPT 채팅 모델에 대해 capabilities.supports.vision = true를 광고하지만, canonical personal endpoint(https://api.githubcopilot.com)만 실제로 제공합니다. 이제 githubCopilotModelManagerOptions는 discovery가 non-personal base URL로 확인될 때마다 input: ["text"]를 강제하고, mergeDynamicModel은 병합된 endpoint가 번들 참조와 다를 때 동적 값을 준수합니다(OR-업그레이드 대신). (#3387)MnemopiSessionState.retainMessages는 여전히 episodic recall을 위해 전체 multi-role 윈도우를 저장하지만, extractText로 user-authored 턴만 전달합니다. 이제 assistant 산문의 always/never가 더 이상 durable user Instruction: 메모리가 되지 않습니다. (#3372)Bun.write(dest, response)에서 스트리밍 fetch() Response를 받을 때 hang하는 문제를 수정했습니다. 이제 tool 자산은 응답 바디를 기존 다운로드 abort signal과 함께 디스크로 스트리밍하고 abort 시 부분 파일을 제거합니다. (#3369)path.join이 조건 없이 사용되어 POSIX 셸이 확인할 수 없는 Windows 스타일 경로를 생성했습니다. 이제 installer는 non-Windows 플랫폼에서 path.posix.join을 사용하고 POSIX 셸 alias 블록에 대해 스크립트 경로를 forward slash로 정규화하므로 Git Bash 및 WSL에서 omp --alias가 올바르게 작동합니다.local://attachment-N.<ext> 참조로 attach되고 이미지 경로는 image attachment flow를 유지합니다. (#3360)/plan, /goal, /mcp, /ssh)만 텍스트를 저장했고, 다른 모든 built-in slash 명령은 executeBuiltinSlashCommand가 addToHistory가 호출되기 전에 true를 반환했으므로 조용히 건너뛰어졌습니다. 이제 히스토리는 성공적인 명령 dispatch 후 input controller에 중앙화됩니다. secrets를 포함할 수 있는 명령(/login <url>에 OAuth callback params, /mcp add --token <token>)은 credential 유출을 방지하기 위해 히스토리에서 제외됩니다. (#3148)ask 도구의 "Other (type your own)" free-text 에디터(prompt-style HookEditorComponent)가 Ctrl+Q 및 Ctrl+Enter를 무시하는 문제를 수정했습니다. Windows Terminal 사용자는 main 에디터에서 app.message.followUp chord를 배웠지만(#1903 / #1905로 수정) submit에 대한 피드백을 받지 못했습니다. hook-style 및 main-editor 서피스는 matchesAppFollowUp을 준수했지만 prompt-style 핸들러는 그렇지 않았으므로 plain Enter만 submit 경로로 남고 Ctrl+Enter는 Editor로 fall through하여 newline이 되었습니다(WT에서 조용히 삼켜짐). 이제 #handlePromptStyleInput은 먼저 matchesAppFollowUp을 확인합니다(#handleHookStyleInput을 반영) 그리고 힌트는 enter or ctrl+q submit을 읽어 chord를 발견할 수 있습니다. (#3353)/settings(또는 Extensions/Agents 대시보드)가 열려 있는 동안 tool approval 프롬프트가 발생할 때 TUI가 freeze되는 문제를 수정했습니다. fullscreen overlay의 close 핸들러는 open 시점에 캡처한 에디터로 focus를 복원했지만, ExtensionUiController는 그 사이에 승인 프롬프트를 위해 에디터 슬롯에서 에디터를 교체했습니다. 따라서 exit 시 보이는 프롬프트는 도달할 수 없었고 keystroke는 이제 unmount된 에디터로 라우팅되었습니다(Enter/Up/Down/Esc 응답 없음, Ctrl+C만 escape). 이제 SelectorController는 focusActiveEditorArea() helper를 통해 에디터 슬롯을 현재 소유하는 어느 것으로든 focus를 복원하고, settings, extensions dashboard, agents dashboard close 경로에 적용됩니다. (#3349)/settings가 enum/text 값을 TUI list로 전달하기 전에 display 문자열로 강제 변환하여 YAML numeric enum 값이 native truncation에 도달하지 못하는 문제를 수정했습니다. (#3338)omp-darwin-arm64 release 바이너리(직접 다운로드 또는 Homebrew tap wrapper를 통해)에서 모든 extension 로딩이 조용히 실패하는 문제를 수정했습니다. __computeBunfsPackageRoot가 import.meta.dir = "//root/omp-darwin-arm64"를 잘못 처리했기 때문입니다. Bun 1.3.14는 compiled entry의 import.meta.dir에 대해 <bunfs-root>/<binary-name>을 보고하지만, fix 전 함수는 metaDir + "packages"를 join했고 /root/omp-darwin-arm64/packages를 생성했습니다. binary basename이 모든 bunfs 경로에 baked되어 TypeBox/legacy-pi shim과 모든 @oh-my-pi/pi-* package-root override가 existsSync 검증을 실패했고 resolveCanonicalPiSpecifier가 모듈을 찾을 수 없는 bunfs Bun.resolveSync로 fall through했습니다. 이제 함수는 bunfs-root + binary-basename shape(path.basename(path.dirname(metaDir)) === "root")을 감지하고 원래 metaDir을 slicing하여 trailing binary segment를 제거합니다. production bunfs shim join 경로는 또한 path.join이 별도로 collapse할 수 있는 Bun의 bunfs-native //root / B:\~BUN\root 접두사를 보존합니다. (#3329)/v1/models meta.n_ctx/meta.n_ctx_train 값을 선호하고, lazy load 후 선택된 모델을 새로고침하며, fresh-cache 재사용을 bypass하여 서버 재시작이 context window를 업데이트하도록 했습니다. (#3310)task.maxConcurrency: 0이 subagent spawn을 unbounded로 실행하지 않고 직렬화하는 문제를 수정했습니다. settings UI는 0을 "Unlimited"로 표시하지만, session-scoped spawn Semaphore는 Math.max(1, max)를 통해 max를 clamped하므로 batch의 두 번째 subagent 바디는 항상 첫 번째가 seat를 해제할 때까지 대기했습니다. 이제 constructor는 max <= 0(및 모든 non-finite 입력)을 Number.POSITIVE_INFINITY를 통해 unbounded로 처리하여 eval parallel()/pipeline() worker-pool semantics와 일치합니다. (#3305)""와 {})를 tools/call로 전달하는 문제를 수정했습니다. 이제 optional placeholder는 생략되고 required 필드와 의미 있는 falsy 값은 보존됩니다. (#3302)Tip: 라인이 hardcoded #b48cff / #9ccfff pastel과 manual \x1b[2m dim으로 렌더링되는 문제를 수정했습니다. light theme은 바디를 ~1.5:1 contrast로 떨어뜨렸습니다(WCAG AA 이하). packages/coding-agent/src/modes/components/welcome.ts의 renderWelcomeTip은 이제 theme.fg("customMessageLabel", …)를 통해 label을 페인트하고 theme.fg("muted", …)를 통해 body를 페인트합니다(manual dim 없음). 따라서 라인은 active theme을 추적하고 light background에서 legible하게 유지됩니다. (#3337)omp usage 및 /usage 명령이 provider-wide disclaimer 노트(예: OpenCode Go의 "OMP-observed spend only")를 계정당 × limit 윈도우마다 중복하는 문제를 수정했습니다. 이제 provider-level 노트는 TUI, CLI, ACP render 경로에서 per-account 섹션 위에 한 번 렌더링되고, 동일한 per-limit 노트는 TUI aggregate renderer에서 중복 제거됩니다. (#3268)? shortcut이 의도적으로 제거된 이후(? 키보드 단축키에 대해 광고하는 문제를 수정했습니다(dcf482c commit). 이제 tips 섹션은 사용자를 /hotkeys로 안내합니다. (#1614)defaultThinkingLevel: auto에서 조용히 empty 응답을 생성하는 문제를 수정했습니다. Devin 모델은 reasoning: true를 광고하지만 thinking.efforts가 없습니다(Cascade는 wire param이 아닌 sibling model id로 라우팅하여 effort를 선택). getSupportedEfforts(model)이 empty였고 clampAutoThinkingEffort는 classifier가 선택한 effort를 그대로 반환했으므로 pi-ai/stream.ts의 requireSupportedEffort에서 Thinking effort low is not supported by devin/<id>. Supported efforts:로 trip했습니다(TUI에서 조용히 삼켜짐). 이제 clampAutoThinkingEffort는 모델이 제어 가능한 effort 서피스를 갖지 않을 때 undefined를 반환합니다(clampThinkingLevelForModel과 일치). auto-thinking turn hook은 또한 이러한 모델에 대해 classifier 호출을 short-circuit합니다. (#3356)omp tiny-models download가 unref'd worker subprocess가 runtime을 설치하거나 모델 가중치를 다운로드하기 전에 exit하는 문제를 수정했습니다. 이제 tiny-model 클라이언트는 요청이 pending되는 동안 worker를 reference하여 standalone CLI 다운로드가 Downloaded ... / Failed ... completion을 대기합니다. (#3291)installed_plugins.json에만 등록되고 runtime plugin tree에 절대 등록되지 않는 문제를 수정했습니다. omp plugin install name@marketplace 후 slash 명령과 extension을 사용할 수 없었습니다. 이제 runtime loader는 project-scope plugins root(<projectAnchor>/.omp/plugins)도 enumerate하므로 --scope project install이 user-scope install과 함께 surface되고, project entry가 동일 이름의 user entry를 shadow합니다. (#3244)umans 요청이 10개 이상의 live context image를 가질 때 provider budget에도 불구하고 모든 이미지를 전송하는 문제를 수정했습니다. 이제 outgoing provider context는 active provider cap 위의 oldest image를 drop하면서 텍스트와 newest image를 보존합니다. (#3230)분량 관계로 이후 내용은 번역에서 제외했습니다. 전체 내용은 위 원문 링크에서 확인하세요.