Skip to content

Conversation

@dpolishuk
Copy link

@dpolishuk dpolishuk commented Jan 23, 2026

Epics

Closes my-happy-cli-vjp: Fix OpenCode/ACP Messaging Schema Compatibility
Closes my-happy-cli-vgo: Pretty Print OpenCode Tool Results
Closes my-happy-cli-wi8: Improve OpenCode Tool Result Formatter

Summary

  • Reverted API changes to restore codex and agentType message formats.
  • Implemented toolFormatter to pretty-print tool results (ls, grep, read, etc.).
  • Improved formatter to handle complex nested objects (e.g. from read with locations).
  • Updated Happy UI schema (in separate commit) to support new types.

Tasks Completed

  • my-happy-cli-an8: Revert API changes and update Schema
  • my-happy-cli-kjz: Implement Tool Result Formatter
  • my-happy-cli-aga: Update Tool Formatter for Complex Objects

Test Plan

  • Schema verification script passed
  • Unit tests for formatter passed (including complex objects)

dpolishuk and others added 30 commits January 2, 2026 21:36
Design document for integrating OpenCode as the second ACP-compatible
agent, following the existing Gemini pattern with API key passthrough,
MCP server merging, and mobile permission routing.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Prepare for isolated development workspaces.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Detailed task-by-task implementation plan for adding OpenCode
as the second ACP-compatible agent in Happy CLI.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add OpenCode as the second ACP-compatible agent in Happy CLI,
enabling remote control from the Happy mobile app.

Changes:
- Add OpenCode constants and config utilities
- Create OpenCode ACP backend factory using AcpSdkBackend
- Add runOpenCode entry point with MCP server merging
- Register 'happy opencode' command in CLI
- Register OpenCode agent in daemon

Usage: happy opencode [-m model] [-c cwd] [-p prompt]

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
The `opencode acp` command doesn't support --model flag. Instead,
we write the model to ~/.config/opencode/config.json before spawning
OpenCode, then restore the original model after the session.

Changes:
- Add model field to OpenCodeConfig interface
- Add readOpenCodeModel/writeOpenCodeModel functions
- Remove --model flag from opencode acp command args
- Write model to config before spawning, restore after
- Update documentation and comments

Fixes issue where `happy opencode --model <model>` would fail
because the flag was passed to a command that doesn't support it.

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
- Implemented complete runOpenCode.ts based on runGemini.ts pattern (680 lines)
- Added OpenCodeDisplay Ink UI component for terminal interface
- Added OpenCodePermissionHandler for tool approval management
- Added OpenCode types (PermissionMode, OpenCodeMode, CodexMessagePayload)
- Fixed model handling to use config.json instead of CLI flag
- Session lifecycle: main loop, abort handling, cleanup on exit
- Message queue processing with mode hashing
- Happy MCP server integration and startup
- Mobile app integration (session events, codex messages)
- TTY detection and Ink UI rendering
- Permission mode switching (default, read-only, safe-yolo, yolo)

🤖 Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
- Unit tests for OpenCodePermissionHandler (23 tests)
  - Permission mode management
  - Tool approval in yolo/safe-yolo/read-only/default modes
  - Permission response handling
  - Reset functionality
  - Write tool detection

- Unit tests for OpenCode config utilities (18 tests)
  - Config reading (with/without file)
  - MCP server conversion
  - MCP server merging
  - Model reading/writing
  - Config preservation

- Integration tests for runOpenCode (18 tests)
  - OpenCode installation detection
  - Model handling
  - MCP server merging
  - Permission handling
  - Type definitions

Total: 59 new tests, all passing

🤖 Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
- Port optionsParser utility from Gemini to OpenCode
- Update CodexMessagePayload.options to use string[] (mobile app compatible)
- Integrate options parsing into runOpenCode message handler
- Add 19 new unit tests for options parser
- Add 3 new integration tests for options flow
- Update feature parity documentation

Mobile app now displays clickable suggestion buttons when
OpenCode agent generates responses with <options> XML.

Example:
<options>
  <option>Fix the bug</option>
  <option>Refactor code</option>
</options>

🤖 Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Implement git pre-commit hooks and session tracking for OpenCode
to achieve feature parity with Claude agent.

Git Hooks:
- Add pre-commit hook that runs yarn test before commits
- Add CLI commands: happy git-hook install|uninstall|status
- Add GitHookManager for hook installation/management

Session Tracking:
- Add SessionTracker to capture OpenCode ACP session IDs
- Integrate with runOpenCode to track session on start
- Store session ID in Happy session metadata

Files:
- scripts/git_pre_commit_hook.cjs - Executable hook script
- src/opencode/hooks/gitHookManager.ts - Hook manager
- src/opencode/hooks/sessionTracker.ts - Session ID tracker
- src/commands/gitHook.ts - CLI command handler
- src/opencode/runOpenCode.ts - Integrate session tracking
- Unit tests for both components

🤖 Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Implement git hooks and session tracking for OpenCode agent.

🤖 Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Implement test infrastructure for OpenCode including:
- Test helpers (testSession, mockACP, memoryMonitor)
- Test fixtures (prompts, responses)
- Performance benchmarks (metrics)
- Initial unit tests for ACP backend and message queue

This is Phase 1 of comprehensive test suite implementation
aiming for 226 total tests (from current 101).

Files:
- src/opencode/__tests__/setup.ts - Global test configuration
- src/opencode/__tests__/helpers/ - Test utilities
- src/opencode/__tests__/fixtures/ - Test data fixtures
- src/opencode/__tests__/benchmarks/ - Performance measurement
- src/opencode/__tests__/unit/acp/ - ACP backend unit tests

🤖 Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Add comprehensive test infrastructure for OpenCode.

Phase 1 complete: Test helpers, fixtures, and initial unit tests.

🤖 Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Added 49 integration tests covering:
- Session lifecycle (16 tests): initialization, tracking, keepalive, termination, restart
- Message flow (18 tests): queue management, permission/model changes, response streaming
- Permission flow (15 tests): permission modes, approvals, denials, transitions

All tests compile and pass successfully. This completes Phase 2 of the comprehensive test suite implementation.

Test files:
- src/opencode/__tests__/integration/session/lifecycle.test.ts
- src/opencode/__tests__/integration/session/messageFlow.test.ts
- src/opencode/__tests__/integration/permissions/permissionFlow.test.ts

Total integration tests: 49 passing
Test execution time: ~4s

🤖 Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Merging integration tests for session lifecycle, message flow, and permission handling.

Summary:
- 49 integration tests passing
- Tests cover session initialization, tracking, keepalive, termination
- Message queue management and streaming
- Permission mode handling and transitions

This completes Phase 2 of the comprehensive test suite implementation.

🤖 Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Added 67 E2E tests covering:
- Basic workflows (20 tests): session start, prompt sending, response handling, permissions, termination, error recovery
- Options buttons (19 tests): XML parsing, display, selection, different modes, edge cases
- Git hooks (28 tests): installation, execution, CLI commands, error handling, performance, security

All tests compile and pass successfully. This completes Phase 3 of the comprehensive test suite implementation.

Test files:
- src/opencode/__tests__/e2e/workflows/basicWorkflow.test.ts
- src/opencode/__tests__/e2e/options/optionsButtons.test.ts
- src/opencode/__tests__/e2e/gitHooks/preCommit.test.ts

Total E2E tests: 67 passing
Test execution time: ~4s

🤖 Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Merging end-to-end tests for workflows, options buttons, and git hooks.

Summary:
- 67 E2E tests passing
- Tests cover complete workflows from session start to termination
- Options buttons XML parsing and user interaction
- Git pre-commit hook installation, execution, and management

This completes Phase 3 of the comprehensive test suite implementation.

🤖 Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Added 68 performance tests covering:
- Large prompts (18 tests): size handling, serialization, memory efficiency, chunking, compression, truncation, validation, throughput
- Streaming (18 tests): chunk accumulation, latency, memory efficiency, backpressure, interruption, Unicode, metrics, completion
- Memory (16 tests): baseline, sessions, message queues, strings, objects, buffers, caches, memory pressure
- Concurrency (16 tests): prompt processing, session handling, permissions, streaming, resource contention, parallel processing, load balancing, throughput

All tests compile and pass successfully. This completes Phase 4 of the comprehensive test suite implementation.

Test files:
- src/opencode/__tests__/performance/prompts/largePrompts.test.ts
- src/opencode/__tests__/performance/streaming/streaming.test.ts
- src/opencode/__tests__/performance/memory/memory.test.ts
- src/opencode/__tests__/performance/concurrency/concurrency.test.ts

Total performance tests: 68 passing
Test execution time: ~4s

🤖 Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Merging performance tests for large prompts, streaming, memory, and concurrency.

Summary:
- 68 performance tests passing
- Tests cover prompt processing at scale (1MB+ prompts)
- Streaming performance and chunk handling
- Memory efficiency and leak detection
- Concurrent operations and throughput

This completes Phase 4 of the comprehensive test suite implementation.

🤖 Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Added 147 resilience tests covering:
- Crash recovery (33 tests): ACP process crashes, daemon crashes, session state persistence, message recovery, permission state, resource cleanup, crash reporting, automatic recovery limits, user notification
- Network failures (33 tests): connection failures, request timeouts, intermittent connectivity, slow networks, malformed responses, network state transitions, DNS failures, proxy issues, bandwidth limitations, concurrent request limits
- Edge cases (45 tests): empty inputs, boundary values, special characters, extreme values, invalid data types, concurrent edge cases, encoding issues, resource exhaustion, time-related issues, identifier collisions, data consistency, unusual sequences, platform-specific issues
- Graceful degradation (36 tests): feature degradation, progressive enhancement, fallback behavior, error recovery, resource-based degradation, quality degradation, user experience, automatic recovery, degradation triggers, degradation levels, monitoring, user preferences, degraded mode limits

All tests compile and pass successfully. This completes Phase 5 of the comprehensive test suite implementation.

Test files:
- src/opencode/__tests__/resilience/crashRecovery/crashRecovery.test.ts
- src/opencode/__tests__/resilience/networkFailures/networkFailures.test.ts
- src/opencode/__tests__/resilience/edgeCases/edgeCases.test.ts
- src/opencode/__tests__/resilience/gracefulDegradation/gracefulDegradation.test.ts

Total resilience tests: 147 passing
Test execution time: ~4s

🤖 Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Merging resilience tests for crash recovery, network failures, edge cases, and graceful degradation.

Summary:
- 147 resilience tests passing (exceeding 40 target)
- Tests cover process crashes, network failures, and error recovery
- Edge cases include boundary values, special characters, encoding issues
- Graceful degradation ensures core functionality under stress

This completes Phase 5 of the comprehensive test suite implementation.

All 5 phases complete: 448 tests total
- Unit tests: 25 tests
- Integration tests: 49 tests
- E2E tests: 67 tests
- Performance tests: 68 tests
- Resilience tests: 147 tests
- Plus existing tests: 92 tests

Comprehensive test suite achieved with robust durability, performance, and reliability coverage.

🤖 Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
- Add Model schema and extend Metadata with availableModels and selectedModel fields
- Implement setModel RPC handler to update selected model in session metadata
- Validate modelId against available models before updating
- Update registerCommonHandlers to accept optional ApiSessionClient parameter

Generated with [Claude Code](https://claude.com/claude-code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Hybrid approach supporting:
- Automatic resume: when spawning in directory with previous session
- Explicit resume: mobile app passes resumeSessionId
- Force new session: skip auto-resume when needed

Based on research:
- OpenCode advertises loadSession: true ACP capability
- Session IDs format: ses_<base62id>
- ACP LoadSessionRequest supports cwd, mcpServers, sessionId

Implementation phases:
1. Extend AcpSdkBackend with loadSession method
2. Add resumeSessionId/forceNewSession to runOpenCode
3. Add session persistence per directory
4. Extend daemon spawn RPC
5. Add CLI arguments
ReasoningProcessor for mobile UX parity:
- Process thinking events from ACP backend
- Detect **Title** patterns and emit CodexReasoning tool calls
- Forward thinking events to mobile app
- Show thinking preview in terminal UI
- 16 unit tests + 6 integration tests

startCaffeinate fix:
- Add startCaffeinate() call at startup to prevent system sleep
- Matches Claude/Codex behavior

Files:
- src/opencode/utils/reasoningProcessor.ts (~280 lines)
- src/opencode/utils/reasoningProcessor.test.ts (16 tests)
- src/opencode/runOpenCode.ts (wired processor + caffeinate)
- src/opencode/__tests__/integration/session/messageFlow.test.ts (6 tests)
- docs/opencode-feature-parity.md (updated status)
- docs/plans/2026-01-04-opencode-mobile-parity-design.md (design doc)
12 bite-sized tasks with TDD approach:
1. Add resumeSessionId to AcpSdkBackendOptions
2. Import LoadSessionRequest type
3. Extract buildMcpServersArray helper
4. Implement loadExistingSession method
5. Refactor startSession into smaller methods
6. Write unit test for loadSession
7. Add resumeSessionId to OpenCodeBackendOptions
8. Create sessionPersistence utility + tests
9. Wire session resumption in runOpenCode
10. Add CLI arguments
11. Manual testing
12. Update documentation
- Add resumeSessionId option to AcpSdkBackendOptions
- Import LoadSessionRequest from ACP SDK
- Add buildMcpServersArray helper method
- Modify startSession to use loadSession when resumeSessionId provided
- Fall back to newSession if loadSession fails
- Store last OpenCode session ID per directory
- 7-day expiry for auto-resume
- Stored in ~/.happy-dev/opencode-sessions.json
- Add resumeSessionId and forceNewSession options
- Auto-detect previous session from persistence
- Save session ID after successful start
Comprehensive design for implementing all missing ACP server features
from OpenCode into Happy CLI:

Features to implement:
1. Session Modes (default, yolo, safe) - Fewer permission prompts
2. Permission Modes (once, always, reject) - Granular control per tool
3. Terminal Commands (/compact, /summarize, /list, /help) - Desktop CLI control
4. Edit/Diff Support - Track file changes for mobile app
5. Todo Integration - Task management with plan entries
6. Update Handlers - user_message_chunk, available_commands/modes/models updates

Implementation approach:
- Extend AcpSdkBackend with ~500+ new lines
- 5 phased rollout over 5 weeks
- New: ~510 lines, Modified: ~60 lines
- New tests: ~400 lines

Design decisions:
- Keep thin wrapper pattern (client-server architecture)
- Phased implementation to manage complexity
- Coordinate with OpenCode team for protocol validation

Reference files:
- OpenCode ACP: opencode/packages/opencode/src/acp/agent.ts (1050 lines)
- Current AcpSdkBackend: src/agent/acp/AcpSdkBackend.ts (750 lines)
- Architecture analysis: docs/plans/2026-01-04-acp-architecture-analysis.md
Accepts sessionMode parameter to control ACP permission modes:
- default: Prompt for all tools
- yolo: Auto-approve all tools
- safe: Auto-approve safe tools only

Updates OpenCodeMode interface and messageMode initialization.
Adds private sessionMode field to store current mode.
Adds getSessionMode() method to retrieve current mode.
Initializes sessionMode from options.sessionMode.
Adds support for:
- parseCommand() - Detects commands starting with /
- executeCommand() - Executes compact, summarize, list, help via ACP
- showHelp() - Lists available commands
- availableCommands cache - Stores commands from OpenCode

Commands supported: /compact, /summarize, /list, /help
Detects edit tool calls from OpenCode:
- Extracts oldText, newText from tool content
- Formats as unified diff
- Emits fs-edit events for mobile app
- Tracks active edits for cleanup
Adds tracking of in-progress tool calls.
Cleans up completed tools by removing from activeToolCalls.
Works with existing edit/diff extraction to identify completed tools.
The sendCodexMessage and sendAgentMessage functions were using custom
content types that don't match the AgentMessageSchema. Changed them to
use type 'output' which is the schema-compliant format.
Add debug logging to trace when model-output events are received
and when sendCodexMessage is called, to debug message flow issues.
Revert previous commit that changed message types to 'output'.
This restores compatibility with Happy UI schema (which expects 'codex' or agent types).
Copilot AI review requested due to automatic review settings January 23, 2026 10:38
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR restores OpenCode/ACP messaging schema compatibility by reverting API changes and updating the Happy UI schema to support additional event types and agent classifications.

Changes:

  • Reverted codex message format and agentType classifications to restore compatibility
  • Updated Happy UI schema to handle task_started, turn_aborted, and ACP agent types
  • Validated schema compatibility across OpenCode, Claude, and Gemini integrations

Reviewed changes

Copilot reviewed 66 out of 74 changed files in this pull request and generated no comments.

Show a summary per file
File Description
src/opencode/utils/optionsParser.ts XML options parser for extracting suggestion buttons
src/opencode/utils/optionsParser.test.ts Comprehensive test coverage for options parsing
src/opencode/utils/config.ts OpenCode configuration utilities for model and MCP server management
src/opencode/utils/config.test.ts Configuration utilities test coverage
src/opencode/types.ts OpenCode type definitions including permission modes and message payloads
src/opencode/index.ts Main export module for OpenCode integration
src/opencode/hooks/sessionTracker.ts Session ID tracking for ACP integration
src/opencode/hooks/sessionTracker.test.ts Session tracker test coverage
src/opencode/hooks/gitHookManager.ts Git pre-commit hook management
src/opencode/hooks/gitHookManager.test.ts Git hook manager test coverage
src/opencode/constants.ts OpenCode environment variables and configuration constants
src/opencode/tests/unit/acp/messageQueue.test.ts Message queue unit tests
src/opencode/tests/setup.ts Global test configuration and mock setup
src/opencode/tests/resilience/networkFailures/networkFailures.test.ts Network failure resilience tests
src/opencode/tests/resilience/crashRecovery/crashRecovery.test.ts Crash recovery resilience tests
src/opencode/tests/performance/streaming/streaming.test.ts Streaming performance benchmarks
src/opencode/tests/performance/prompts/largePrompts.test.ts Large prompt handling performance tests
src/opencode/tests/performance/memory/memory.test.ts Memory usage and leak detection tests
src/opencode/tests/performance/concurrency/concurrency.test.ts Concurrent operations performance tests
src/opencode/tests/integration/session/messageFlow.test.ts Message flow integration tests
src/opencode/tests/integration/session/lifecycle.test.ts Session lifecycle integration tests
src/opencode/tests/integration/permissions/permissionFlow.test.ts Permission flow integration tests
src/opencode/tests/integration/acp/acpFeatures.test.ts ACP backend integration tests
src/opencode/tests/index.ts Test utilities and helpers export module
src/opencode/tests/helpers/types.ts Test helper type definitions
src/opencode/tests/helpers/testSession.ts Test session creation and management helpers
src/opencode/tests/helpers/mockACP.ts Mock ACP server for testing
src/opencode/tests/helpers/memoryMonitor.ts Memory monitoring utilities for leak detection
src/opencode/tests/fixtures/responses.ts Test response fixtures
src/opencode/tests/fixtures/prompts.ts Test prompt fixtures
src/opencode/tests/e2e/workflows/basicWorkflow.test.ts Basic workflow end-to-end tests
src/opencode/tests/e2e/options/optionsButtons.test.ts Options buttons feature end-to-end tests
src/opencode/tests/e2e/gitHooks/preCommit.test.ts Git pre-commit hook end-to-end tests
src/opencode/tests/benchmarks/metrics.ts Performance measurement utilities
src/modules/common/registerCommonHandlers.ts Added setModel RPC handler for model selection
src/index.ts Added opencode and git-hook commands to CLI
src/commands/gitHook.ts Git hook command implementation
src/api/types.ts Added Model schema for mobile app model selector
src/api/apiSession.ts Updated to pass apiSession to registerCommonHandlers
src/agent/index.ts Register OpenCode agent on initialization
src/agent/acp/opencode.ts OpenCode ACP backend factory implementation
src/agent/acp/index.ts Export OpenCode backend
scripts/git_pre_commit_hook.cjs Git pre-commit hook script for running tests
docs/plans/2026-01-05-opencode-tool-result-summary-design.md Design for compact tool result summaries
docs/plans/2026-01-05-acp-integration-tests.md ACP integration tests implementation plan
docs/plans/2026-01-04-opencode-mobile-parity-design.md Mobile experience parity design
docs/plans/2026-01-04-acp-architecture-analysis.md ACP architecture comparison and analysis
docs/plans/2026-01-02-opencode-acp-support-design.md OpenCode ACP support design specification
docs/plans/2025-01-06-opencode-claude-message-format-design.md OpenCode message format migration design
docs/plans/2025-01-03-opencode-options-parity-design.md Options/suggestion buttons feature parity design
docs/opencode-tests.md OpenCode test suite documentation
docs/opencode-feature-parity.md Feature parity analysis with Claude and Codex
.github/workflows/opencode-tests.yml GitHub Actions workflow for OpenCode tests

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Formats raw JSON tool results into Markdown for better readability in Happy UI.
Supports ls, grep, read, write.
Handle nested content and locations in tool results to prevent raw JSON display.
Fixes issue where 'read'/'grep' output showed raw JSON with 'locations: []'.
Updated formatDefault to auto-detect list and content structures for unknown tools.
Updated formatRead to handle MCP content array.
@tangyu
Copy link

tangyu commented Jan 24, 2026

Hi @dpolishuk,

Thanks for this comprehensive OpenCode integration! The implementation looks thorough with great test coverage.

However, I encountered some compatibility issues when trying to merge this PR into the current main branch:

🔴 Issues Found

1. Module path mismatches

src/agent/acp/AcpSdkBackend.ts: Cannot find module '../AgentBackend'
src/agent/acp/AcpSdkBackend.ts: Cannot find module './utils'
src/agent/acp/opencode.ts: Cannot find module '../AgentBackend'
src/agent/acp/opencode.ts: Cannot find module '../AgentRegistry'

2. Duplicate exports conflict

src/agent/index.ts: Module './acp' has already exported 'GeminiBackendOptions'
src/agent/index.ts: Module './acp' has already exported 'createGeminiBackend'
src/agent/index.ts: Module './acp' has already exported 'registerGeminiAgent'

3. Type definition mismatches

'cwd' does not exist on type 'OpenCodeBackendOptions'
'env' does not exist on type 'OpenCodeBackendOptions'

📋 Summary

It appears this PR was developed against an older version of main. The current main branch has undergone some refactoring (e.g., AcpBackend structure, agent factories pattern), causing these incompatibilities.

Could you please rebase this PR against the latest main branch?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants