Skip to content

fix(installer): use opencode config dir on Windows#192

Open
NgoQuocViet2001 wants to merge 3 commits into
colbymchenry:mainfrom
NgoQuocViet2001:ai/opencode-windows-config-dir
Open

fix(installer): use opencode config dir on Windows#192
NgoQuocViet2001 wants to merge 3 commits into
colbymchenry:mainfrom
NgoQuocViet2001:ai/opencode-windows-config-dir

Conversation

@NgoQuocViet2001
Copy link
Copy Markdown

Summary

  • Route global opencode installs to ~/.config/opencode on Windows instead of %APPDATA%/opencode.
  • Keep the existing XDG_CONFIG_HOME override behavior for global installs.
  • Add a Windows regression test that sets APPDATA and verifies CodeGraph writes both opencode.jsonc and AGENTS.md under ~/.config/opencode.
  • Make one existing local opencode path assertion separator-agnostic so the installer target test runs cleanly on Windows.

Closes #186.

Why

OpenCode documents the global config path as ~/.config/opencode/opencode.json, and #186 reports that the installer-created %APPDATA%/opencode config is not the file OpenCode reads on Windows. That makes codegraph install --target=opencode appear successful while the MCP server and instructions do not load.

Duplicate check

Checked recent/open PRs for opencode. #162 and #163 already merged the multi-target installer and .jsonc/AGENTS.md support, but they do not address the Windows %APPDATA% path. I did not find an open PR covering #186.

Test plan

  • node node_modules/vitest/vitest.mjs run __tests__/installer-targets.test.ts — 57 passed
  • node node_modules/typescript/bin/tsc --noEmit

ymstar and others added 3 commits May 19, 2026 17:17
…tion (colbymchenry#191)

* feat(mcp): steer agents to explore-first; fix Kotlin/Swift test detection

Two changes from diagnosing why Claude Code's Explore agent wasn't using
codegraph_explore on a benchmark run (37 calls / ~90k tokens via
search+Read+grep, vs a general-purpose agent that led with explore: 13
calls / ~55k tokens for the same question).

1. Tool guidance reframed across server-instructions.ts,
   instructions-template.ts, and .cursor/rules/codegraph.mdc (+ the
   explore/search tool descriptions): codegraph_explore is the workhorse
   for understanding/architecture/"how does X work" questions. Seed it with
   the key symbol names (a quick search/context first if the question names
   nothing concrete), read its output, and fill gaps with node/Read —
   instead of searching then Reading each file. The old "search first to
   find names, then explore" wording was short-circuiting: agents searched,
   got file:line locations, and Read them, never reaching explore.

2. isTestFile now recognizes Kotlin (*Test.kt, jvmTest/commonTest/
   androidTest source sets), Swift (*Tests.swift), and other camelCase test
   conventions, so test code is deprioritized in explore/context ranking.
   Previously only Java/JS/Python were known, letting tests dominate
   Kotlin/Swift exploration (OkHttp "trace a request" went from 8/9 test
   files to surfacing Call.kt/OkHttpClient.kt/Request.kt/Response.kt).
   Capital-led matching keeps latest.kt/manifest.kt unflagged.

An IDF common-term down-weighting was prototyped for the cold-query case
but dropped — it was a measured no-op (the "common" terms weren't actually
common in the test indexes); the test-detection gap was the real cause.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore(agent-eval): add agent-behavior eval harness for codegraph MCP usage

Tooling to measure how a Claude Code agent actually uses the codegraph
MCP tools on a real repo — does it lead with codegraph_explore, how many
Read/Grep follow-ups, token cost — for validating tool-guidance changes
(server-instructions, tool descriptions) against real agent behavior.

- itrun.sh drives the real interactive TUI via tmux (the faithful
  Explore path). Hardened for unattended runs: type-and-verify prompt
  delivery (the ❯ glyph is drawn ~6s before the input accepts keys),
  auto-accepts the "trust this folder" dialog, busy-detection keys on
  the universal "(Ns · …)" spinner so the pre-stream thinking phase
  counts as busy, and fails loudly instead of capturing an empty pane.
- parse-session.mjs reports the tool breakdown + token accounting
  (gen / fresh-in / cached-in / billable) from the session and subagent
  logs, consistent across main-thread and subagent runs; counts
  main-thread Bash in the grep verdict.
- run-agent.sh / parse-run.mjs are the headless stream-json complement
  (exact per-tool tokens/cost via claude -p).
- run-interactive-test.md documents how to run it and how completion is
  detected.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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.

Wrong OpenCode init

3 participants