OpenAI Responses/Realtime SSE stream handler가 nested error details를 가진 error events를 파싱할 때 "Error Code undefined: undefined"로 크래시되는 문제를 nested error object fields로 폴백하여 수정
OpenAI-compatible providers가 thinking-required models에서 강제 tool_choice를 거부하는 문제를 지원되지 않는 강제 선택을 auto로 다운그레이드하면서 tools를 사용 가능하게 유지하여 수정 (#2546)
GitHub Copilot Anthropic transport (api.githubcopilot.com/v1/messages)가 모든 tool-bearing turn에서 400 tools.0.custom.eager_input_streaming: Extra inputs are not permitted을 반환하는 문제를 per-tool eager_input_streaming flag와 fine-grained-tool-streaming-2025-05-14 beta header의 방출을 중지하여 수정 — proxy가 둘 다 화이트리스트하지 않음 (#2558)
Bun의 native ~300s pre-response fetch timeout을 모든 streaming provider (OpenAI completions/responses, Azure responses, Anthropic, Codex SSE, Bedrock, Gemini CLI, Ollama)에서 비활성화. 설정 가능한 first-event/idle/SDK watchdogs (PI_STREAM_FIRST_EVENT_TIMEOUT_MS, PI_OPENAI_STREAM_IDLE_TIMEOUT_MS, compat.streamIdleTimeoutMs)는 Bun의 숨겨진 상한에 의해 조용히 제한되어, cold large-context streams (예: multi-hundred-K prompts를 가진 self-hosted vLLM)은 정확히 300s에서 TimeoutError: The operation timed out.로 종료됨. ./providers/{amazon-bedrock,google-gemini-cli,ollama,openai-codex-responses}의 직접 호출자들 (register-builtins의 iterator-level watchdog을 우회)은 이제 disable과 함께 pre-response AbortSignal.timeout(firstEventTimeoutMs)을 설치하므로, stalled upstream은 영원히 hanging하는 대신 설정된 budget 내에서 실패함 (#2422)
Gemini / Antigravity streams (Google Cloud Code Assist API)가 final SSE chunk에 empty text part (text: "")가 포함될 때 trailing empty text block을 생성하고 redundant text_start/text_delta/text_end events를 방출하는 문제를 수정. parser는 이제 empty text parts를 무시하여 active transcript block state를 보존하고 subsequent background jobs 또는 new turns의 적절한 nesting과 rendering을 보장함
terminal Google thoughtSignatures를 text part가 empty하거나 undefined일 때도 active block에서 signature를 추출하고 적용하여 보존
Gemini Antigravity sessions (gemini-3* / Claude under Cloud Code Assist)가 system rule reminders와 personality preambles을 final response로 유출하는 것을 중지함 — injected system parts에 명시적 'do not output rule checks' instruction을 추가하여
Gemini / Antigravity streams (Google Cloud Code Assist API)가 functionCall part의 own thoughtSignature가 preceding text 또는 thinking block의 signature를 think → tool과 text → tool turns에서 덮어쓰는 문제를 수정. signed function-call part는 text: undefined를 가지므로 prior block이 여전히 active한 동안 terminal-signature branch로 떨어짐; 그 branch는 이제 function-call parts를 skip하여 tool call의 signature를 tool call에 두고 same-model replay에서 corrupted signatures를 방지함
MiniMax-M3 OpenAI-compatible streams가 동일한 chunk가 <think>…</think> content와 structured reasoning_content 모두를 포함할 때 reasoning을 두 번 렌더링하는 문제를 수정; structured reasoning이 이제 우선되고 cumulative MiniMax reasoning snapshots은 </think>-to-text block transition을 survive하는 per-signature snapshot tracker를 사용하여 deltas로 축소됨 (post-answer cumulative snapshots는 duplicate thinking block를 reinstate하지 않음) (#2433)
omp setup stt command를 omp setup speech로 교체. 이전의 stt setup component는 제거됨 (별칭 없음); omp setup speech는 이제 전체 speech stack을 프로비저닝함 — audio recorder, speech-to-text model, text-to-speech modeltts.enabled setting을 speechgen.enabled로 이름 변경 (동일한 boolean, 기본값 off; 별칭 없음). 여전히 on-demand tts speech-generation tool을 게이트하며, 이제 settings panel에서 "Speech Generation"으로 레이블됨paste.largeMenuThreshold setting (0/100/250/500/1000, 기본값 100)을 추가하여 큰 붙여넣기 콘텐츠가 large-paste menu를 트리거하는 시점을 제어하거나 일반적인 [Paste] marker로 유지되는 시점을 제어
threshold를 초과한 붙여넣기 텍스트에 대한 large-paste editor menu를 추가하여 사용자가 붙여넣기를 fenced code block으로 래핑하거나, <pasted_text> XML tags로 래핑하거나, on-demand reading을 위해 local://attachment-N으로 저장할 수 있도록 선택 가능
snapcompact-savings.jsonl journaling을 snapcompact tool-result compaction에 추가하여 tool output이 image frames로 렌더링될 때마다 session, provider, model, tool call, 추정된 token savings를 기록
subagent:<id> loop-phase breadcrumbs를 in-process subagent event dispatch와 finalization 주변에 추가하여 TUI event-loop watchdog이 main-thread stall을 subagent execution에 속성화할 수 있도록 함 (#2485)
highlightMagicKeywords(text, resetTo?, phase?)가 이제 optional phase ∈ [0, 1)을 허용하여 gradient를 순환적으로 회전함; sent bubbles는 이를 생략함 (static palette는 변경되지 않음). hasMagicKeyword(text)는 modes/magic-keywords에서 export되며 editor가 모든 render에서 사용하는 저비용 shimmer-gate임
fastModeScope setting (both | openai | claude, 기본값 both)을 추가하여 /fast on (및 fast-mode toggle)이 대상으로 하는 providers를 제어. both는 이전의 unscoped priority behavior를 유지함; openai/claude는 fast mode를 one family로 범위 지정. /fast status는 이제 active scope를 보고함
mnemopi.embeddingVariant setting (en | multilingual)을 추가하여 더 강한 SOTA local embedding model을 선택 — en → BAAI/bge-base-en-v1.5 (768d), multilingual → intfloat/multilingual-e5-large (1024d). Resolution precedence는 mnemopi.embeddingModel setting > MNEMOPI_EMBEDDING_MODEL env > variant default이므로 documented env override는 여전히 존중됨. active model을 변경하면 다음 writable start에서 저장된 embeddings를 wipe하고 rebuild함 (#2476)
/guided-goal slash command를 추가하여 goal mode를 활성화하기 전에 objective를 정제하기 위해 인터뷰를 진행한 다음, 합의된 objective로 goal mode를 seed함. bounded interview (최대 6 turns)는 plan 또는 slow model에서 실행되며 goal이 여전히 너무 모호할 때 힌트와 함께 폴백됨 (#2502)
large-paste menu를 추가함: paste가 paste.largeMenuThreshold lines (기본값 100; 0은 비활성화)에 도달할 때, editor는 code block으로 래핑하거나, <pasted_text> XML tags로 래핑하거나 (둘 다 submit할 때 expand되는 [Paste] marker로 축소), 또는 session의 local:// store에 저장하고 agent가 on demand로 read할 수 있는 깨끗한 local://attachment-N reference를 삽입하도록 제안함. Esc는 이전의 inline-paste behavior를 유지하므로 콘텐츠가 절대 손실되지 않음
snapcompact.shape setting에 8on22-bw (leading) 및 11on16-bw (tracking) options을 추가하며, spacing-tuned cells는 이제 per-provider defaults (Anthropic → tracking, OpenAI/Google → leading)
tts tool과 providers.tts switch (auto | local | xai, 기본값 auto)에 대한 local on-device neural TTS backend를 추가. local은 Kokoro-82M — on-device TTS quality의 SoTA —를 kokoro-js를 통해 shared ONNX runtime (@huggingface/transformers + onnxruntime-node)에서 subprocess worker (tiny-model worker를 미러링)에서 합성하며, 모델을 호출 간에 따뜻하게 유지하고 network call 없이 24 kHz WAV/PCM16을 방출함; xai는 기존의 Grok Voice cloud path를 유지함; auto는 local을 선호하지만 credentials이 존재할 때 .mp3 requests를 xAI로 라우팅함 (local MP3 encoder가 bundled되지 않아 local .mp3 request는 sibling .wav로 작성됨). kokoro-js는 절대 hard dependency가 아님: 첫 사용 시 lazily version-keyed runtime dir에 bun install되며 (Bun-safe version으로 force-pinned된 onnxruntime-node 포함), 따라서 해당 transformers@3.x graph는 main tree를 오염시키지 않음. 새로운 tts.localModel (기본값 kokoro) 및 tts.localVoice (기본값 af_heart; American/British, female/male voices) settings은 on-device voice를 선택함
unified, interactive omp setup speech command를 추가하여 모든 3개의 speech dependencies를 통해 하나의 재사용 가능한 flow를 진행함: TUI list에서 speech-to-text (stt.modelName) 및 text-to-speech (tts.localModel) models을 선택하고 persist할 수 있으며, 그 다음 두 models 모두와 live progress를 가진 audio recorder를 다운로드함. recorder는 이제 cross-platform auto-provisioned됨 (SoX/FFmpeg/arecord가 없을 때 shared tools-manager를 통해 static ffmpeg binary가 fetched되며, Windows에서는 PowerShell fallback 포함) "install sox manually"로 dead-ending하는 대신. --check 및 --json은 설치 없이 recorder + STT-model + TTS-model readiness를 보고함
omp say <text>를 추가하여 local on-device TTS engine으로 텍스트를 합성하고 speakers를 통해 재생함 (cross-platform: macOS에서는 afplay, Linux에서는 paplay/aplay/bundled ffmpeg, Windows에서는 PowerShell Media.SoundPlayer). --out <file>은 재생하는 대신 WAV를 작성하고, --voice/--model은 tts.localVoice/tts.localModel settings을 override하며, uninstalled model은 actionable omp setup speech hint를 인쇄함
streaming speech vocalization을 추가함: speech.enabled이 on이면, 어시스턴트는 stream할 때 speakers를 통해 reply를 말함. 어시스턴트 text deltas는 도착할 때 직접 engine의 incremental text input으로 feed됨 (Kokoro의 TextSplitterStream을 worker를 통해) JS에서 pre-chunked되고 sentence마다 one batch call로 합성되는 대신 — engine은 sentence segmentation을 소유하고 sentence마다 one audio chunk를 방출함. A single persistent player (StreamingAudioPlayer)는 those chunks을 gaplessly drain함 (raw 32-bit-float PCM piped to one ffmpeg→PulseAudio/ALSA process on Linux; interruptible per-file afplay/PowerShell SoundPlayer on macOS/Windows), latency와 audible gaps을 추가했던 spawn-a-player-per-sentence path를 교체함. Overspeech는 end to end로 처리됨: new turn, sent message, 또는 Esc/Ctrl+C interrupt는 playback을 instantly 중지함 (player process는 현재 sentence를 완료하도록 놔두는 대신 killed됨); push-to-talk key를 잡고 있으면 당신이 speak할 때 volume을 ducks하고 중지할 때 복원함; sequential utterances은 overlapping 대신 queue하고 order로 drain함. speech.mode (all | assistant | yield, 기본값 assistant)는 speaking할 대상을 선택함 — all은 thinking을 추가하고, yield는 turn end에서만 final message를 말함 — speech.voice는 Kokoro voice를 선택함. ask tool questions은 모든 mode에서 spoken됨. Synthesis는 new streaming synthesis path (TtsClient.synthesizeStream)를 통해 local Kokoro engine (tts.localModel)을 reuse하여 text를 push in하고 worker protocol을 통해 audio chunks을 back stream함
live (streaming) speech-to-text를 추가함: stt.enabled이 on이면, transcription은 이제 stop한 후에 한 번에가 아니라 speak할 때 composer에 as you speak 나타남. recorder는 sox/ffmpeg/arecord stdout에서 raw 16 kHz mono PCM을 warm STT worker로 stream하며, energy-based endpointer (no extra model)는 natural pauses에서 speech를 segments로 분할함; 각 finalized segment는 editor에 committed되는 동안 in-progress segment는 live volatile preview를 보여주며 이는 in place로 refresh되고 undo history에서 keep out됨. 기본값 Parakeet (sherpa-onnx)과 Whisper (transformers.js) tiers 모두에서 작동함. pipe로 stream할 수 없는 recorders (Windows PowerShell mci fallback)는 transparently single-shot transcription으로 폴백함
skills.enableAgentsUser 및 skills.enableAgentsProject settings (기본값 on)을 추가하여 canonical OMP-native ~/.agent[s]/skills 및 project-walkup .agent[s]/skills을 third-party Claude/Codex/Pi toggles와 독립적으로 configurable 함
read-only ctx.models facade for extensions를 추가함: list() (authenticated models), current() (live session model), resolve(spec) (model string 또는 role alias → Model, core selection과 동일한 settings-backed aliases 및 match preferences 사용), family(model) (cross-family comparisons에 대한 opaque canonical-identity lineage token). Extension tools가 mutable registry에 reaching without core처럼 models을 select할 수 있도록 함 (#2406)
RPC prompt lifecycle hints를 추가하여 hosts가 data.agentInvoked 및 prompt_result를 통해 scheduled agent turns를 local-only slash commands에서 구분할 수 있도록 함
tool approval prompts에 대한 extension lifecycle events를 추가함: approval wait 전의 tool_approval_requested와 approve, deny, 또는 approval prompt failure 후의 tool_approval_resolved
handoff custom messages (customType: "handoff")를 main session과 Agent Hub views 모두에서 compaction-style expandable divider로 render하도록 변경하며, expanded handoff details는 이제 <handoff-context> tags 없이 handoff context body를 보여줌
double-tap-← gesture (empty editor, main session)를 subagents가 보여줄 것이 없을 때 inert로 유지되도록 변경하여 empty Agent Hub roster를 열지 않도록 함. explicit Agent Hub / observe keybindings은 여전히 empty roster를 열 수 있음. gating은 hub의 own row count (persisted-subagent scan 후)를 reuse하므로 hub이 표시할 것과 정확히 일치함
job tool의 async.pollWaitDuration setting (relabeled Max Poll Time)을 smart value를 추가하도록 변경하며, 이제 기본값임. fixed value (5s–5m)는 여전히 정확히 그만큼 block함; smart는 adapt함: blocking poll은 5s floor에서 시작하고 ladder를 올라감 (5s → 10s → 30s → 1m → 5m) 각 back-to-back poll과 함께, 따라서 tight poll loop는 back off하고 "still running" frames에 turns를 spending을 멈춤, 그 다음 ~1 minute without polling 후 5s floor로 reset됨 (즉, agent가 real work를 하러 step away할 때). Escalation은 per agent (owner-scoped on AsyncJobManager)로 추적됨
compat.supportsForcedToolChoice custom-model flag를 추가하여 tools를 허용하지만 forced tool_choice values를 거부하는 OpenAI-compatible models의 endpoints를 위함 (#2546)
분량 관계로 이후 내용은 번역에서 제외했습니다. 전체 내용은 위 원문 링크에서 확인하세요.