github code-yeongyu/oh-my-opencode v3.6.0

5 hours ago

OpenCode 1.2.x ready. Agents got names. Dead code is dead.

Your SQLite backend just got full plugin support. Every read, every write, every recovery path — dual-wired for the new storage layer. Oh, and your agents finally tell you who they are.

https://github.com/code-yeongyu/oh-my-opencode/releases/tag/v3.6.0

87 commits. 186 files changed. +4,723/−2,634 lines.


Highlights

SQLite Backend — Full Support

  • isSqliteBackend() auto-detects OpenCode ≥ 1.1.53 (version + DB file dual check)
  • 37 files migrated from JSON file reads to SDK message finders
  • HTTP PATCH/DELETE for part manipulation — inject, strip, prepend, replace
  • Context window recovery fully wired: pruning, deduplication, truncation all via SDK
  • normalizeSDKResponse handles every SDK shape (array, {data}, null)
  • Retry-once for startup race conditions

Agent Display Names

  • Sisyphus (Ultraworker), Hephaestus (Deep Agent), Prometheus (Plan Builder)
  • Atlas (Plan Executor), Metis (Plan Consultant), Momus (Plan Critic)
  • Config key ↔ display name bidirectional mapping at output boundary
  • Category delegation + command routing fully display-name-aware

Background Task Visibility

  • full_session, include_thinking, include_tool_results auto-enabled for running tasks
  • See what your background agents are actually doing, not just their final output

Dead Code Purge

  • Legacy unified task tool — gone
  • 20+ files cleaned: unused imports, params, types, dead files
  • message-storage-locator.ts, task-id-validator.ts, pollSessions — all deleted

Stability

  • 8 rounds of Cubic review hardening for SDK compatibility
  • HTTP API timeout 30s → 10s
  • 13 duplicated getMessageDir copies → single shared function
  • sessionExists() now async + SQLite-aware

v1.2.x ready. Names on. Deadcode off.

LFG ulw ulw!

  • 7e9b9ce Merge pull request #1721 from edxeth/fix/disable-mcps
  • bad63b9 fix: force include_thinking and include_tool_results for running background tasks
  • e624f98 feat: auto-enable full_session, thinking, and tool_results for running background tasks
  • 2eb4251 refactor: rewrite remove-deadcode command for parallel deep agent batching
  • a1086f2 refactor: remove dead file task-id-validator.ts and unused isModelAvailable from model-name-matcher
  • 158ca3f refactor: remove unused params/imports/types from lsp-tools, task-tools, delegate-task, skill-loader, context-window-monitor, plugin-config
  • 9dbb955 refactor: remove unused imports from auto-update-checker, claude-code-hooks, mcp
  • bfabad7 refactor: remove unused imports from interactive-bash-session, session-recovery, start-work
  • 1ba330f refactor: remove unused code from background-agent, background-task, call-omo-agent
  • 169c07e refactor: remove unused imports from injector, tool-result-storage-sdk, session-notification-utils, model-resolver
  • ec0833b refactor: remove unused constants and dead pollSessions from tmux-subagent
  • 8dd3d07 refactor: remove unused hasIgnoredParts variables from context-window-limit-recovery
  • 731a331 refactor: remove dead file message-storage-locator.ts
  • ca0ca36 remove dead code: legacy unified task tool and its action handlers
  • dd8f924 clarify task tool: emphasize category/subagent_type is required, remove inline examples
  • cb601dd fix: resolve category delegation and command routing with display name agent keys
  • 560d13d Normalize agent name comparisons to handle display name keys
  • d94a739 Remap config.agent keys to display names at output boundary
  • c71a80a Revert name fields from agent configs, add getAgentConfigKey reverse lookup
  • 71df52f Add display names to all core agents via name field
  • 91734de Update agent display names: add Hephaestus (Deep Agent), rename Atlas to (Plan Executor), rename Momus to (Plan Critic)
  • e97f8ce Revert "Add display names to core agents: Sisyphus (Ultraworker), Hephaestus (Deep Agent), Prometheus (Plan Builder), Atlas (Plan Executor)"
  • 1670b4e Revert "Add display names to Metis (Plan Consultant) and Momus (Plan Critic)"
  • 9a07227 Merge pull request #1886 from code-yeongyu/fix/oracle-review-findings
  • 3018470 Add display names to Metis (Plan Consultant) and Momus (Plan Critic)
  • 655899a Add display names to core agents: Sisyphus (Ultraworker), Hephaestus (Deep Agent), Prometheus (Plan Builder), Atlas (Plan Executor)
  • 65bca83 fix: resolve session-manager storage test mock pollution (pre-existing CI failure)
  • 8e0d134 refactor: consolidate duplicated Promise.all dual reads into resolveMessageContext utility
  • 1a68105 refactor: create normalizeSDKResponse helper and replace scattered patterns across 37 files
  • 6d732fd fix: propagate sessionExists SDK errors instead of swallowing them
  • ed84b43 fix: add retry-once logic to isSqliteBackend for startup race condition
  • 49ed323 fix: reduce HTTP API timeout from 30s to 10s
  • eb6067b fix: rename prompt_async to promptAsync for SDK compatibility
  • 4fa234e Merge pull request #1837 from code-yeongyu/fuck-v1.2
  • c1681ef fix: normalize SDK response shape in readMessagesFromSDK
  • 9889ac0 fix: handle array-shaped SDK responses in getSdkMessages & dedup getMessageDir
  • 5a6a9e9 fix: defensive SDK response handling & parts-reader normalization
  • 8edf6ed fix: address 5 SDK compatibility issues from Cubic round 8
  • cfb8164 docs: regenerate all 13 AGENTS.md files from deep codebase exploration
  • c2012c6 fix: address 8-domain Oracle review findings (C1, C2, M1-M4)
  • 106cd5c fix: re-read fresh messages before empty scan & dedup isRecord import
  • c799584 fix: address Cubic round-6 P2/P3 issues
  • 3fe9c1f fix: address Cubic round-5 P1/P2 issues
  • 885c858 fix: revert messageHasContentFromSDK unknown type handling
  • 8d82025 fix: address Cubic round-4 P2 issues
  • 557340a fix: restore readMessagesFromSDK and its test
  • d7b38d7 fix: address Cubic round-3 P2/P3 issues
  • 5f97a58 fix(test): stabilize waitForEventProcessorShutdown timeout test for CI
  • 880b53c fix: address Cubic round-2 P2 issues
  • 1a74442 fix: address all Cubic P2 review issues
  • aad0c36 fix(test): fix sync continuation test mock leaking across sessions
  • 96a67e2 fix(test): increase timeouts for CI-flaky polling tests
  • 1158644 fix: make sessionExists() async with SDK verification on SQLite
  • 3bbe0cb feat: implement SDK/HTTP pruning for deduplication and tool-output truncation on SQLite
  • a25b35c fix: make sessionExists() SQLite-aware for session_read tool
  • 52161ef fix: add SDK readParts fallback for recoverToolResultMissing on SQLite
  • 62e4e57 feat: wire context-window-recovery callers to async SDK/HTTP variants on SQLite
  • dff3a55 feat: wire session-recovery callers to async SDK/HTTP variants on SQLite
  • 0a085ad fix(test): rewrite SDK reader tests to use mock client objects instead of mock.module
  • 291a3ed feat: migrate tool callers to SDK message finders on SQLite backend
  • 553817c feat: migrate call-omo-agent tool callers to SDK message finders
  • 2bf8b15 feat: migrate hook callers to SDK message finders on SQLite backend
  • af8de2e feat: add SDK read paths for session-recovery parts/messages readers
  • 1197f91 feat: add SDK/HTTP paths for tool-result-storage truncation
  • 808de58 feat: implement SQLite backend for replaceEmptyTextParts via HTTP PATCH
  • f69820e feat: implement SQLite backend for prependThinkingPart via HTTP PATCH
  • c771eb5 feat: implement SQLite backend for injectTextPart via HTTP PATCH
  • 049a259 feat: implement SQLite backend for stripThinkingParts via HTTP DELETE
  • 3fe0e0c docs: clarify injectHookMessage degradation log on SQLite backend
  • d414f6d fix: add explicit isSqliteBackend guards to pruning modules
  • 0c6fe38 feat: add SDK path for getMessageIds in context-window recovery
  • 450a5bf feat: add opencode HTTP API helpers for part PATCH/DELETE
  • 7727e51 fix(test): eliminate mock.module pollution between shared test files
  • 2a7535b fix(test): mock isSqliteBackend in prometheus-md-only tests for SQLite environments
  • 4cf3bc4 refactor(shared): unify MESSAGE_STORAGE/PART_STORAGE constants into single source
  • 068831f refactor: cleanup shared constants and add async SDK support for isCallerOrchestrator
  • 1bb5a3a fix: prefer id matching when deleting todos (Cubic feedback)
  • 02e0534 fix: handle deleted tasks in todo-sync (Cubic feedback)
  • 4b2410d fix: address remaining Cubic review comments (P2 issues)
  • 07da116 fix: address Cubic review comments (P2/P3 issues)
  • 49dafd3 feat(storage): gate JSON write operations on OpenCode beta, document degraded features
  • e34fbd0 feat(context-window-recovery): gate JSON writes on OpenCode beta
  • b0944b7 feat(session-manager): add version-gated SDK read path for OpenCode beta
  • 5eebef9 refactor(shared): unify MESSAGE_STORAGE/PART_STORAGE constants into single source
  • c9c02e0 refactor(shared): consolidate 13+ getMessageDir copies into single shared function
  • e90734d fix(todo): make Todo id field optional for OpenCode beta compatibility
  • 3abc1d4 fix(mcp): preserve user's enabled:false and apply disabled_mcps to all MCP sources

Thank you to 1 community contributor:

  • @edxeth:
    • fix(mcp): preserve user's enabled:false and apply disabled_mcps to all MCP sources

Don't miss a new oh-my-opencode release

NewReleases is sending notifications on new releases.