Files
slopus--happy/docs/competition/opencode
wehub-resource-sync 98e40dac97
CLI Smoke Test / smoke-test-linux (20) (push) Has been cancelled
CLI Smoke Test / smoke-test-linux (24) (push) Has been cancelled
CLI Smoke Test / smoke-test-windows (20) (push) Has been cancelled
CLI Smoke Test / smoke-test-windows (24) (push) Has been cancelled
Expo App TypeScript typecheck / typecheck (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:40:49 +08:00
..

OpenCode

Reviewed on 2026-03-21 from ../happy-adjacent/research/opencode at commit 2e0d5d230893dbddcefb35a02f53ff2e7a58e5d0.

Why it matters

OpenCode is currently the strongest overall product reference for Happy.

  • the desktop UI is excellent
  • the feature set feels coherent and ambitious
  • clicking the context field opens a genuinely useful debug/context inspector
  • the transcript and sync model look much closer to what Happy should want than a flat custom message stream

Current take

  • Use OpenCode as the leading reference for transcript design.
  • Strongly consider adopting its message-and-parts direction instead of inventing another bespoke message protocol.
  • Keep digging into how it syncs state between client and server; there is a lot to learn there.
  • Read runtime-tracing.md first if you want the real story. That file now has concrete permission, media, subtask, and routing flows with actual payload snippets from a source-run OpenCode server.

Key findings

  • transcript model: stable message envelopes with ordered typed parts
  • live updates: incremental SSE-style event stream plus paged fetch hydration
  • subagents: child sessions created through the task tool, resumable by task_id
  • task tracking: first-class todo store, not buried in message text
  • permissions: first-class request objects plus pattern rules and decision history
  • sandbox: workspace/worktree isolation, not a strict OS sandbox

Important repo files

  • ../happy-adjacent/research/opencode/packages/opencode/src/session/message-v2.ts
  • ../happy-adjacent/research/opencode/packages/opencode/src/session/index.ts
  • ../happy-adjacent/research/opencode/packages/opencode/src/tool/task.ts
  • ../happy-adjacent/research/opencode/packages/opencode/src/tool/todo.ts
  • ../happy-adjacent/research/opencode/packages/opencode/src/permission/index.ts
  • ../happy-adjacent/research/opencode/packages/opencode/src/control-plane/workspace-server/routes.ts
  • ../happy-adjacent/research/opencode/packages/app/src/components/session/session-context-tab.tsx

See docs/competition/opencode/message-protocol.md, docs/competition/opencode/runtime-tracing.md, and docs/competition/opencode/sources.md.