v4.1.0 — Boulder 추적, Electron 호환성, Ralph 루프 강화
Boulder: 작업 진행 상황 파악하기
새로운 Boulder 시스템은 계획 파일 전체에서 다중 세션 작업을 추적합니다. 이제 각 계획 작업에는 작업별 타이머, 완료 감지, 경과 시간 알림이 포함되어 각 작업이 실제로 얼마나 오래 걸렸는지 항상 알 수 있습니다. 새로운 boulder CLI 서브명령어(bunx oh-my-opencode boulder)는 진행률 백분율과 시간 세분화를 포함한 모든 활성 및 완료된 작업 항목의 대시보드를 한눈에 보여줍니다.
Electron/데스크톱 호환성
Electron에서 ReferenceError: Bun is not defined로 인해 충돌하던 19개의 보호되지 않은 Bun.* 호출 사이트가 이제 런타임 shim을 통해 라우팅됩니다. MCP OAuth 콜백 서버와 포트 감지가 모두 Bun.serve에서 node:http 및 node:net로 옮겨졌습니다. OpenCode Desktop을 통해 oh-my-opencode를 실행하는 경우, 플러그인이 Node/Electron 런타임에서 오류 없이 부팅됩니다.
Ralph 루프: 더 이상 조용한 실패 없음
ralph 루프(에이전트가 반복 전체에 걸쳐 작업을 계속하도록 하는 연속 엔진)는 7가지 대상 지정 수정을 받았습니다. 프롬프트 전송 실패가 오류를 조용히 무시하는 대신 발생합니다. 합성 유휴 재생이 무시되므로 오래된 반복이 작업을 다시 시작하지 않습니다. 소유권 경합이 감지되고 거부됩니다. 이전에 연속이 불가사의하게 끊겼다면, 이 릴리스가 근본 원인을 해결합니다.
동기화된 폴더에 대한 관용적 Fsync
클라우드 동기화 디렉토리(iCloud, Dropbox, OneDrive)의 파일 쓰기는 더 이상 fsync에서 EPERM으로 인해 충돌하지 않습니다. 플러그인이 동기화된 폴더 경로를 감지하고 OS가 이를 차단할 때 gracefully하게 fsync를 건너뜁니다. 작업을 실패하는 대신 에이전트에 일회성 경고를 표시합니다.
구성 가능한 에이전트 순서
이제 agent_order 구성 키를 통해 기본 에이전트 표시 순서를 재정의할 수 있습니다. 나열되지 않은 에이전트는 기본 제공 표준 순서로 폴백됩니다.
플러그인 정리
플러그인은 이제 OpenCode가 종료될 때 manager, MCP client, 백그라운드 작업을 gracefully하게 종료하는 정리 핸들러를 등록하므로 고아 프로세스가 남지 않습니다.
88가지 버그 수정
위임 작업 중단 복구, 백그라운드 에이전트 오래된 할일 상태, 팀 모드 세션 추적, Windows의 구성 마이그레이션 fsync, hashline 안전하지 않은 어설션 등 전체 스택의 수십 가지 수정이 더 있습니다. 전체 목록은 아래의 커밋 로그를 참조하세요.
마이너 호환성 및 안정성 릴리스
이 릴리스는 호환성 관련 동작 변경 및 운영 강화를 포함합니다. 업그레이드 또는 게시하기 전에 아래 요약을 읽어주세요.
- 패키지 감지, 플러그인/구성 호환성, 설치 인터페이스 전체에서 이름 바꾸기 전환 업데이트
- 위임 작업 계약 및 런타임 등록 동작을 포함한 작업 및 도구 동작 업데이트
- 런타임 경로 전체에서 생략된 구성이 일관되게 동작하도록 작업 시스템 기본 동작 정렬
- 더 안전한 릴리스 시퀀싱 및 패키지/설치 수정을 포함한 설치 및 게시 워크플로우 강화
커밋 요약
- 2146071 .opencode to .agents
- a0b4630 remove hyperplan for .opencode (not as a feature)
- 75825eb fix(todo-description-override): add OpenCode schema contract for string priorities
- c740ed8 fix(delegate-task): route sync prompts by directory
- 6035a55 fix(background-agent): route session prompts by directory
- 7d09d2c Merge pull request #3967 from code-yeongyu/refactor/typescript-no-excuse-slops
- 2fc1786 test(hashline): remove unsafe test assertions
- fb135d0 test(tools): remove unsafe test assertions
- 8b093a1 test(shared): remove unsafe test assertions
- f05aeaa test(plugin): remove unsafe test assertions
- 0787867 test(ralph-loop): remove unsafe fixture assertions
- 2321115 test(hooks): remove unsafe test assertions
- 11b3638 test(features): remove unsafe test assertions
- 7365163 test(cli): remove unsafe test assertions
- cde14b5 fix(call-omo-agent): restrict callable agents
- 9ffef79 fix(ralph-loop): ignore synthetic idle replays
- 07797e1 fix(background-agent): preserve direct all-complete replies
- 2d20037 @jas32096 has signed the CLA in #3966
- d82f6a6 fix(background-agent): refresh stale todo state
- ec3a7bb Merge pull request #3965 from code-yeongyu/fix/ralph-loop-prompt-result
- 2c0f8e4 fix(ralph-loop): return prompt dispatch failures
- 2d656bd Merge pull request #3964 from code-yeongyu/fix/electron-bun-runtime-shims
- 8e07ef6 fix(mcp-oauth): use fixed localhost base for callback URL parsing
- 1152939 refactor(cli): use Response(stream).text() instead of Bun.readableStreamToText
- 22c7e4e refactor(mcp-oauth): replace Bun.serve with node:http in callback-server
- 2386cbd refactor(port-utils): drop Bun.serve in favor of node:net probe
- 0aafe20 refactor: route raw Bun.file/write/hash/which/spawn through runtime shims
- 4394f34 feat(shim): add bun-file/hash/which shims with Node fallbacks
- 4da4855 fix(plugin): normalize event session ids
- 4aa2a01 Merge pull request #3961 from code-yeongyu/fix/ultrawork-oracle-continuation
- 0de6bd7 fix(ralph-loop): reject promptAsync error responses
- 67f90a8 Merge pull request #3956 from code-yeongyu/fix/web-audit-dependencies
- 33f62c4 fix(web): patch audit dependency advisories
- 6a9cad1 Merge pull request #3955 from acamq/fix/supply-chain-audit-deps
- 5394b29 fix(deps): patch vulnerable mcp transitives
- 1c05c60 fix(background-agent): replace system-reminder wake with queued notifications
- 3ed4651 fix(compaction): skip autocontinue for compaction agent
- 90f0971 fix(background-agent): handle idle status events
- 71a63c2 Revert "fix(hooks): dedupe native agent instructions"
- 78d5287 fix(hooks): dedupe native agent instructions
- c849d0c fix(ralph-loop): suppress stale iteration toasts
- 2c299d2 Merge pull request #3943 from code-yeongyu/feature/boulder-evolution-and-discipline-agents
- 29c4248 fix(hooks/atlas): capture plan snapshot for .sisyphus paths
- cf5fe75 feat(hooks/atlas): parse task_key from delegation prompt for parallel batches
- e3cddb3 feat(hooks/atlas): end task timer when plan checkbox flips to checked via edit
- b8c25b3 refactor(hooks/atlas): remove unused resolveSessionOrigin helper
- 079a2cd fix(start-work): preserve existing works when starting an explicit new plan
- dd5f775 fix(boulder-state): missing plan file no longer reports isComplete=true
- ce2f3af fix(boulder-state): make completeBoulder idempotent on already-completed works
- 7035153 style(agents): replace em dashes with semicolons/periods
- 14b9a43 fix(cli/boulder): strip ANSI in formatter test so FORCE_COLOR CI passes
- de9c28a fix(hooks/atlas): align completion behavior tests with task-4 timing updates
- 1ebf89c feat(hooks/atlas): inject boulder-complete elapsed-time nudge once per work
- a1c6e6b fixup! feat(hooks/atlas): use getWorkForSession in boulder lookups and session tracking
- c345082 feat(cli/boulder): implement boulder() entry point and register subcommand
- 3098493 feat(cli/boulder): add types and formatter for boulder subcommand
- fb2f696 docs(start-work): document multi-work resume flow in agent template
- d6f4199 feat(start-work): use getWorkResumeOptions for multi-work resume selection
- 29b44ff feat(hooks/atlas): call completeBoulder when progress.isComplete
- 127112e feat(hooks/atlas): wire per-task timers via startTaskTimer/endTaskTimer
- f2a5ef0 feat(hooks/atlas): add BOULDER_COMPLETE_PROMPT template and SessionState guard
- 18af3d3 feat(hooks/atlas): use getWorkForSession in boulder lookups and session tracking
- 42db707 feat(boulder-state): add formatDurationHuman utility
- 0c6805c prompt(prometheus): add Oracle phase-gate verification between phases
- 8c238a1 prompt(atlas): replace retry cap with no-excuses policy and add boulder-complete response
- 29c29da Merge pull request #3942 from code-yeongyu/fix/3819-compaction-agent-token-cache