diff --git a/.github/workflows/shared/opencode.md b/.github/workflows/shared/opencode.md index 28ca6a123c..29bb874514 100644 --- a/.github/workflows/shared/opencode.md +++ b/.github/workflows/shared/opencode.md @@ -74,7 +74,7 @@ engine: - name: Run OpenCode id: opencode run: | - opencode run "$(cat "$GH_AW_PROMPT")" --model "${GH_AW_AGENT_MODEL}" --print-logs + opencode run "$(cat "$GH_AW_PROMPT")" --model "${GH_AW_AGENT_MODEL}" --print-logs --log-level DEBUG --format json env: GH_AW_AGENT_MODEL: ${{ env.GH_AW_AGENT_MODEL }} GH_AW_PROMPT: ${{ env.GH_AW_PROMPT }} @@ -126,7 +126,10 @@ OpenCode automatically integrates with MCP servers configured in your workflow: - The workflow will install opencode-ai npm package using version from `GH_AW_AGENT_VERSION` env var - `jq` is installed for JSON transformation between MCP config formats - The prompt file is read directly in the Run OpenCode step using command substitution -- OpenCode is executed in non-interactive mode with logs printed to stderr +- OpenCode is executed with enhanced logging: + - `--print-logs`: All logs printed to stderr for real-time visibility + - `--log-level DEBUG`: Maximum log verbosity for troubleshooting + - `--format json`: Structured JSON output for programmatic parsing - Output is captured in the agent log file **Environment Variables:** diff --git a/.github/workflows/smoke-opencode.lock.yml b/.github/workflows/smoke-opencode.lock.yml index f972d4ad41..4a6dc9fd1f 100644 --- a/.github/workflows/smoke-opencode.lock.yml +++ b/.github/workflows/smoke-opencode.lock.yml @@ -880,7 +880,7 @@ jobs: run: | set -o pipefail # Execute OpenCode CLI with prompt from file - opencode run "$(cat /tmp/gh-aw/aw-prompts/prompt.txt)" --print-logs${GH_AW_MODEL_AGENT_OPENCODE:+ --model "$GH_AW_MODEL_AGENT_OPENCODE"} 2>&1 | tee /tmp/gh-aw/agent-stdio.log + opencode run "$(cat /tmp/gh-aw/aw-prompts/prompt.txt)" --print-logs --log-level DEBUG --format json${GH_AW_MODEL_AGENT_OPENCODE:+ --model "$GH_AW_MODEL_AGENT_OPENCODE"} 2>&1 | tee /tmp/gh-aw/agent-stdio.log env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} GH_AW_MCP_CONFIG: /tmp/gh-aw/mcp-config/mcp-servers.json @@ -1209,7 +1209,7 @@ jobs: run: | set -o pipefail # Execute OpenCode CLI with prompt from file - opencode run "$(cat /tmp/gh-aw/aw-prompts/prompt.txt)" --print-logs${GH_AW_MODEL_DETECTION_OPENCODE:+ --model "$GH_AW_MODEL_DETECTION_OPENCODE"} 2>&1 | tee /tmp/gh-aw/threat-detection/detection.log + opencode run "$(cat /tmp/gh-aw/aw-prompts/prompt.txt)" --print-logs --log-level DEBUG --format json${GH_AW_MODEL_DETECTION_OPENCODE:+ --model "$GH_AW_MODEL_DETECTION_OPENCODE"} 2>&1 | tee /tmp/gh-aw/threat-detection/detection.log env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} GH_AW_MODEL_DETECTION_OPENCODE: ${{ vars.GH_AW_MODEL_DETECTION_OPENCODE || '' }} diff --git a/pkg/cli/completions_test.go b/pkg/cli/completions_test.go index ddb4e0b4ee..d364f01daf 100644 --- a/pkg/cli/completions_test.go +++ b/pkg/cli/completions_test.go @@ -243,7 +243,7 @@ func TestCompleteEngineNames(t *testing.T) { { name: "empty prefix returns all engines", toComplete: "", - wantLen: 4, // copilot, claude, codex, custom + wantLen: 5, // copilot, claude, codex, custom, opencode }, { name: "c prefix returns claude, codex, copilot, custom", diff --git a/pkg/constants/constants_test.go b/pkg/constants/constants_test.go index 7ae4d9f3b7..4c5e4b260c 100644 --- a/pkg/constants/constants_test.go +++ b/pkg/constants/constants_test.go @@ -283,7 +283,7 @@ func TestVersionConstants(t *testing.T) { {"DefaultClaudeCodeVersion", DefaultClaudeCodeVersion, "2.1.6"}, {"DefaultCopilotVersion", DefaultCopilotVersion, "0.0.381"}, {"DefaultCodexVersion", DefaultCodexVersion, "0.80.0"}, - {"DefaultOpenCodeVersion", DefaultOpenCodeVersion, "0.15.12"}, + {"DefaultOpenCodeVersion", DefaultOpenCodeVersion, "0.15.13"}, {"DefaultGitHubMCPServerVersion", DefaultGitHubMCPServerVersion, "v0.28.1"}, {"DefaultMCPGatewayVersion", DefaultMCPGatewayVersion, "v0.0.56"}, {"DefaultSandboxRuntimeVersion", DefaultSandboxRuntimeVersion, "0.0.26"}, diff --git a/pkg/workflow/opencode_engine.go b/pkg/workflow/opencode_engine.go index 9956622415..bdca6041c0 100644 --- a/pkg/workflow/opencode_engine.go +++ b/pkg/workflow/opencode_engine.go @@ -148,6 +148,12 @@ func (e *OpenCodeEngine) GetExecutionSteps(workflowData *WorkflowData, logFile s // Add print-logs flag for enhanced debugging output opencodeArgs = append(opencodeArgs, "--print-logs") + // Add log-level DEBUG for maximum log verbosity + opencodeArgs = append(opencodeArgs, "--log-level", "DEBUG") + + // Add format json for structured JSON output + opencodeArgs = append(opencodeArgs, "--format", "json") + // Add custom args from engine configuration before the prompt if workflowData.EngineConfig != nil && len(workflowData.EngineConfig.Args) > 0 { opencodeArgs = append(opencodeArgs, workflowData.EngineConfig.Args...)