v3.17.10의 새로운 기능
버전 관리에 대한 참고: v3.17.7부터 v3.17.9까지는 Trusted Publishing 출시 중에 부분 배포되었습니다(일부 플랫폼 패키지는 npm 측 신뢰 구성이 정해지는 동안 배포될 수 없었습니다). v3.17.10은 모든 플랫폼 바이너리가 함께 배포된 첫 번째 완전 릴리즈입니다. 중간 버전들은 건너뛰기 바랍니다.
크레딧 부족 시 더 스마트한 폴백
프로바이더가 "잔액 부족", "크레딧 없음" 또는 "금지됨"을 반환하면, 런타임은 이를 할당량 소진과 동일하게 취급하고 자동으로 다음으로 구성된 모델로 폴백합니다. 한 계정의 크레딧이 부족한 순간 더 이상 하드 실패가 발생하지 않습니다 — 에이전트는 다른 프로바이더로 계속 작동합니다. (#3519)
이는 메인 세션과 실행 중에 생성된 모든 백그라운드 태스크에 적용됩니다.
백그라운드 태스크가 이제 재시도 히스토리를 표시합니다
일시적 오류에서 복구된 백그라운드 태스크는 이제 각 재시도 세션으로의 링크가 있는 재시도 타임라인을 렌더링합니다. 태스크가 2-3번의 시도 후에만 성공한 경우, 각 재시도가 발생한 정확한 시점과 실행된 세션을 확인할 수 있습니다 — 불안정한 모델이나 프로바이더를 진단하기가 훨씬 더 쉬워졌습니다.
동기 task() 호출도 런타임 오류 후에 세션 등록을 다시 실행하므로, 재시도된 태스크는 더 이상 고아 상태가 되지 않습니다.
GPT-5.5에 대한 Day-1 지원
새로운 claude-opus-4-7 및 gpt-5.5 모델은 이제 해당 동작에 맞춰진 네이티브 심화 카테고리 프롬프트를 갖고 있습니다. category="deep"으로 위임하면 자동으로 올바른 시스템 프롬프트를 사용합니다.
더 빠른 Compaction, 더 빠른 컨텍스트 윈도우 계산
4가지 작은 누적 성능 개선:
- Hashline edit은 파일을 다시 읽는 대신 쓰기 메타데이터 줄 수를 사용합니다(편집당 디스크 접근 감소)
- Compaction은 tail에 텍스트가 없을 때 메시지 업데이트 부분을 재사용합니다(모든 프롬프트에서 작업 감소)
- 컨텍스트 윈도우 사용량이 이제 세션별로 캐시됩니다(훅 전체에서 재계산 없음)
- 백그라운드 에이전트는 태스크를 부모 세션별로 인덱싱합니다(많은 태스크가 확산될 때 더 빠른 조회)
긴 세션에서 에이전트가 조금 더 빨라진 느낌을 받으셨다면, 이것이 원인입니다.
플러그인 자동 업데이터가 더 이상 잘못된 package.json을 읽지 않습니다
oh-my-opencode가 flat-install 디렉토리(예: 일부 Claude Code 플러그인 샌드박스)에서 실행될 때, 자동 업데이트 검사기는 형제 package.json을 읽고 잘못된 버전을 보고했습니다. 이제 로드된 모듈의 자체 package.json을 선호하므로, 버전 확인 및 업데이트 프롬프트가 정확합니다. (#3718)
무대 뒤 — npm Trusted Publishing
릴리스 파이프라인이 장기 npm 토큰에서 OIDC 신뢰 배포(OpenSSF 표준)로 마이그레이션했습니다. 모든 버전은 이제 단기 워크플로우 범위 자격증명으로 배포되며, sigstore에 의해 서명된 출처 증명이 포함됩니다. 사용자 대면 변경 사항은 없지만, 향후 릴리즈는 더 이상 토큰 만료 중단의 위험에 처하지 않습니다 — 이는 이 출시 중에 v3.17.7-v3.17.9 부분 배포를 야기한 문제입니다.
새로운 preflight-trust 작업은 버전이 범프되기 전에 모든 24개 플랫폼 패키지에 신뢰된 배포자가 구성되었는지 확인합니다. 패키지에 신뢰 구성이 없으면, 워크플로우는 수정할 npm.com URL 목록과 함께 빠르게 실패합니다 — 향후 부분 배포를 방지합니다.
마이너 호환성 및 안정성 릴리즈
이 릴리즈는 호환성 관련 동작 변경 사항과 운영 강화를 포함합니다. 업그레이드하거나 배포하기 전에 아래 요약을 읽으십시오.
- 패키지 감지, 플러그인/구성 호환성 및 설치 표면 전반에서 이름 바꾸기 전환 업데이트.
- 위임-태스크 계약 및 런타임 등록 동작을 포함한 태스크 및 도구 동작 업데이트.
- 더 안전한 릴리스 순서 지정 및 패키지/설치 수정을 포함한 설치 및 배포 워크플로우 강화.
커밋 요약
- 9a61c60 fix(ci): treat npm OIDC exchange 201 as success in preflight
- ab5216f feat(ci): add preflight-trust gate before version bump
- 017d48f @yizhifengye이 #3731에서 CLA에 서명했습니다
- fd85dad fix(ci): strip _authToken from .npmrc so OIDC takes precedence
- 48fc7bd fix(ci): switch npm publish to OIDC trusted publishing
- 216283e @aaronkyriesenbach이 #3727에서 CLA에 서명했습니다
- 002297b Merge pull request #3718 from ismetanin/fix/cached-version-per-plugin-sandbox
- 5291ee7 fix(auto-update-checker): prefer loaded module's package.json over flat-install candidates
- d65bc87 feat(agents): add gpt-5.5 native deep category prompt
- 766eedd Merge pull request #3706 from unclok/fix/retry-recovery-and-observability
- 05a15f7 Merge branch 'dev' into fix/retry-recovery-and-observability
- ea07f28 Merge pull request #3556 from MoerAI/fix/fallback-credit-exhaustion
- 6850cb6 Merge branch 'dev' into fix/fallback-credit-exhaustion
- 7adb725 Merge remote-tracking branch 'origin/dev' into fix/retry-recovery-and-observability
- b8652db @deopa0402이 #3713에서 CLA에 서명했습니다
- 483e11a @unclok이 #3706에서 CLA에 서명했습니다
- 0dd455e fix(delegate-task): ignore stale sync session errors
- 1856657 fix(model-fallback): clone session fallback chains
- 2237c1a fix(background-agent): guard stale launch errors and retry links
- 27fb2d5 test(plugin): clean up event handler test helpers
- 078e496 fix(delegate-task): replay sync retry session registration
- fbaeb03 fix(todo-continuation): avoid duplicate progress reset
- ebcd6ed perf(hashline): use write metadata line counts
- 24201ea perf(background-agent): index tasks by parent session
- eb722aa perf(compaction): reuse message update parts for no-text tails
- ece8fd4 perf(shared): cache context window usage per session
- 3fc9e6b Merge remote-tracking branch 'origin/dev' into opencode/mighty-wolf
- 79054ea feat(background-task): render retry timelines and links
- 25548f2 fix(model-fallback): retry forbidden provider errors
- 613e4a6 fix(delegate-task): retry sync tasks after runtime session errors
- a4968a3 feat(background-task): track retry attempts across sessions
- cc3cca7 fix(model-fallback): expose session fallback chains to background tasks
- 328df08 fix(test): update provider-matrix tests to expect fallback on quota exhaustion
- 5949300 fix(error-classifier): match insufficient balance/funds as quota_exceeded
- 034744c fix(model-error-classifier): retry forbidden provider errors
- fbf130e fix(test): update integration tests to expect fallback on quota exhaustion
- 7488c52 fix(runtime-fallback): trigger fallback on quota/credit exhaustion (fixes #3519)
4명의 커뮤니티 기여자에게 감사드립니다:
- @MoerAI:
- fix(runtime-fallback): trigger fallback on quota/credit exhaustion (fixes #3519)
- fix(test): update integration tests to expect fallback on quota exhaustion
- fix(error-classifier): match insufficient balance/funds as quota_exceeded
- fix(test): update provider-matrix tests to expect fallback on quota exhaustion
- @unclok:
- fix(model-error-classifier): retry forbidden provider errors
- fix(model-fallback): expose session fallback chains to background tasks
- feat(background-task): track retry attempts across sessions
- fix(delegate-task): retry sync tasks after runtime session errors
- fix(model-fallback): retry forbidden provider errors
- feat(background-task): render retry timelines and links
- Merge remote-tracking branch 'origin/dev' into opencode/mighty-wolf
- fix(delegate-task): replay sync retry session registration
- test(plugin): clean up event handler test helpers
- fix(background-agent): guard stale launch errors and retry links
- fix(model-fallback): clone session fallback chains
- fix(delegate-task): ignore stale sync session errors
- Merge remote-tracking branch 'origin/dev' into fix/retry-recovery-and-observability
- @ismetanin:
- fix(auto-update-checker): prefer loaded module's package.json over flat-install candidates
- @acamq:
- Merge pull request #3718 from ismetanin/fix/cached-version-per-plugin-sandbox