[{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23912”,“repository_url”:“https://api.github.com/repos/anomalyco/opencode”,“labels_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23912/labels{/name}”,“comments_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23912/comments”,“events_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23912/events”,“html_url”:“https://github.com/anomalyco/opencode/pull/23912”,“id”:4312725081,“node_id”:“PR_kwDOOiiGL87Uz1f0”,“number”:23912,“title”:“feat: make opencode web embeddable in iframes at a subpath”,“user”:{“login”:“csillag”,“id”:2093792,“node_id”:“MDQ6VXNlcjIwOTM3OTI=”,“avatar_url”:“https://avatars.githubusercontent.com/u/2093792?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/csillag”,“html_url”:“https://github.com/csillag”,“followers_url”:“https://api.github.com/users/csillag/followers”,“following_url”:“https://api.github.com/users/csillag/following{/other_user}”,“gists_url”:“https://api.github.com/users/csillag/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/csillag/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/csillag/subscriptions”,“organizations_url”:“https://api.github.com/users/csillag/orgs”,“repos_url”:“https://api.github.com/users/csillag/repos”,“events_url”:“https://api.github.com/users/csillag/events{/privacy}”,“received_events_url”:“https://api.github.com/users/csillag/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“labels”:[],“state”:“open”,“locked”:false,“assignees”:[],“milestone”:null,“comments”:0,“created_at”:“2026-04-23T01:10:41Z”,“updated_at”:“2026-04-23T01:14:26Z”,“closed_at”:null,“assignee”:null,“author_association”:“NONE”,“issue_field_values”:[],“type”:null,“active_lock_reason”:null,“draft”:false,“pull_request”:{“url”:“https://api.github.com/repos/anomalyco/opencode/pulls/23912”,“html_url”:“https://github.com/anomalyco/opencode/pull/23912”,“diff_url”:“https://github.com/anomalyco/opencode/pull/23912.diff”,“patch_url”:“https://github.com/anomalyco/opencode/pull/23912.patch”,“merged_at”:null},“body”:”### Issue for this PR\n\nCloses #\n\nNo existing issue — self-motivated fix to enable embedding opencode web\ninside an iframe under a reverse-proxy subpath. Happy to file one\nretroactively if that’s the workflow you prefer.\n\n### Type of change\n\n- [ ] Bug fix\n- [x] New feature\n- [ ] Refactor / code improvement\n- [ ] Documentation\n\n### What does this PR do?\n\nLets opencode web work inside an <iframe> served from a URL subpath\n(e.g. /some/deep/path/<session-id>/) under a reverse proxy. Three\nsmall orthogonal changes, none of which affect a direct-at-root\ndeployment:\n\n1. packages/app/vite.config.ts — base: './'. The built index.html\n and chunk imports now use relative asset paths so a document loaded\n under a subpath resolves assets against the current URL instead of\n the origin root. Fixes “asset requests return the SPA fallback HTML\n with the wrong MIME type” for subpath embeds.\n\n2. packages/opencode/src/server/routes/ui.ts — add 'unsafe-eval' to\n the embedded-UI CSP’s script-src. Something in the production\n bundle triggers eval() / new Function() at runtime; the existing\n policy allows 'wasm-unsafe-eval' but not 'unsafe-eval', so\n Firefox (stricter than Chromium here) blocks the bundle once it\n runs in an iframe. I didn’t bisect the specific caller — if one of\n the maintainers has a guess I’m happy to chase and tighten the CSP\n back; this is the short-term unblocker.\n\n3. packages/app/src/entry.tsx — getCurrentUrl() now honors the\n localStorage.defaultServerUrl override the same way\n getDefaultUrl() already does. Before, servers[0].url was\n hard-wired to location.origin while defaultServer’s key came\n from the override; the server-context resolver\n (allServers().find(key === state.active) ?? allServers()[0]) fell\n back to allServers()[0] when the two keys didn’t align, and\n control-plane calls like /global/config and /global/event\n bypassed the override entirely. Aligning both entries fixes that.\n\nThe commit message on 88acdbc27 has the per-change rationale in more\ndepth.\n\n### How did you verify your code works?\n\nBuilt from source (bun run --cwd packages/opencode build) and\ninstalled opencode-linux-x64/bin/opencode on a Linux test box. Ran\nthe binary in two configurations:\n\n- Direct at its own port (no proxy). Dashboard loads, project picker\n works, session/prompt round-trip works, provider auth works. No\n behavior change vs. unmodified opencode.\n- Embedded in an iframe served by a reverse proxy under a deep URL\n path. Before these changes: asset requests resolved to the proxy’s\n origin root (wrong MIME type, SPA-fallback HTML), CSP blocked eval\n when the SPA bundled code ran, and /global/* SDK calls went\n directly to location.origin ignoring the configured server URL.\n After these changes: iframe mounts, the SPA bundle executes, all\n SDK calls (including control-plane) route through the configured\n server URL via the proxy.\n\n### Screenshots / recordings\n\n_Not attached — happy to record if it’d help.\n\n### Checklist\n\n- [x] I have tested my changes locally\n- [x] I have not included unrelated changes in this PR”,“closed_by”:null,“reactions”:{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23912/reactions”,“total_count”:0,“+1”:0,“-1”:0,“laugh”:0,“hooray”:0,“confused”:0,“heart”:0,“rocket”:0,“eyes”:0},“timeline_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23912/timeline”,“performed_via_github_app”:null,“state_reason”:null},{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23911”,“repository_url”:“https://api.github.com/repos/anomalyco/opencode”,“labels_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23911/labels{/name}”,“comments_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23911/comments”,“events_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23911/events”,“html_url”:“https://github.com/anomalyco/opencode/issues/23911”,“id”:4312568852,“node_id”:“I_kwDOOiiGL88AAAABAQyUFA”,“number”:23911,“title”:“ESLint LSP fails to load”,“user”:{“login”:“Duncan3142”,“id”:787815,“node_id”:“MDQ6VXNlcjc4NzgxNQ==”,“avatar_url”:“https://avatars.githubusercontent.com/u/787815?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/Duncan3142”,“html_url”:“https://github.com/Duncan3142”,“followers_url”:“https://api.github.com/users/Duncan3142/followers”,“following_url”:“https://api.github.com/users/Duncan3142/following{/other_user}”,“gists_url”:“https://api.github.com/users/Duncan3142/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/Duncan3142/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/Duncan3142/subscriptions”,“organizations_url”:“https://api.github.com/users/Duncan3142/orgs”,“repos_url”:“https://api.github.com/users/Duncan3142/repos”,“events_url”:“https://api.github.com/users/Duncan3142/events{/privacy}”,“received_events_url”:“https://api.github.com/users/Duncan3142/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“labels”:[{“id”:8542148739,“node_id”:“LA_kwDOOiiGL88AAAAB_SbYgw”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/bug”,“name”:“bug”,“color”:“d73a4a”,“default”:true,“description”:“Something isn’t working”},{“id”:9835881465,“node_id”:“LA_kwDOOiiGL88AAAACSkOj-Q”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/core”,“name”:“core”,“color”:“1b6ea3”,“default”:false,“description”:“Anything pertaining to core functionality of the application (opencode server stuff)”}],“state”:“open”,“locked”:false,“assignees”:[{“login”:“rekram1-node”,“id”:63023139,“node_id”:“MDQ6VXNlcjYzMDIzMTM5”,“avatar_url”:“https://avatars.githubusercontent.com/u/63023139?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/rekram1-node”,“html_url”:“https://github.com/rekram1-node”,“followers_url”:“https://api.github.com/users/rekram1-node/followers”,“following_url”:“https://api.github.com/users/rekram1-node/following{/other_user}”,“gists_url”:“https://api.github.com/users/rekram1-node/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/rekram1-node/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/rekram1-node/subscriptions”,“organizations_url”:“https://api.github.com/users/rekram1-node/orgs”,“repos_url”:“https://api.github.com/users/rekram1-node/repos”,“events_url”:“https://api.github.com/users/rekram1-node/events{/privacy}”,“received_events_url”:“https://api.github.com/users/rekram1-node/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false}],“milestone”:null,“comments”:1,“created_at”:“2026-04-23T00:26:25Z”,“updated_at”:“2026-04-23T00:44:45Z”,“closed_at”:null,“assignee”:{“login”:“rekram1-node”,“id”:63023139,“node_id”:“MDQ6VXNlcjYzMDIzMTM5”,“avatar_url”:“https://avatars.githubusercontent.com/u/63023139?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/rekram1-node”,“html_url”:“https://github.com/rekram1-node”,“followers_url”:“https://api.github.com/users/rekram1-node/followers”,“following_url”:“https://api.github.com/users/rekram1-node/following{/other_user}”,“gists_url”:“https://api.github.com/users/rekram1-node/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/rekram1-node/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/rekram1-node/subscriptions”,“organizations_url”:“https://api.github.com/users/rekram1-node/orgs”,“repos_url”:“https://api.github.com/users/rekram1-node/repos”,“events_url”:“https://api.github.com/users/rekram1-node/events{/privacy}”,“received_events_url”:“https://api.github.com/users/rekram1-node/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“author_association”:“NONE”,“issue_field_values”:[],“type”:null,“active_lock_reason”:null,“sub_issues_summary”:{“total”:0,“completed”:0,“percent_completed”:0},“issue_dependencies_summary”:{“blocked_by”:0,“total_blocked_by”:0,“blocking”:0,“total_blocking”:0},“body”:”# ESLint LSP diagnostics never surface in opencode\n\n## Summary\n\nWith an eslint dependency in the project, opencode’s TUI reports the ESLint LSP as loaded but the agent never sees any ESLint diagnostics — even ones that mise run lint and the VS Code dbaeumer.vscode-eslint extension both report on the same file. Investigation revealed two distinct bugs. The second is the blocker: opencode’s LSP client does not implement LSP 3.17 pull-model diagnostics, which is the only mode the current vscode-eslint server (v3.x) uses.\n\n## Environment\n\n- opencode: 1.14.20 (from /devvol/data/mise/installs/github-anomalyco-opencode/1.14.20/opencode)\n- Node: 24.15.0\n- OS: Linux (devcontainer)\n- Project has eslint as a peer dependency and uses ESLint flat config with @typescript-eslint/prefer-readonly-parameter-types enabled.\n- Visible in VS Code and mise run lint: src/bin/cli.ts:19:18 warning Parameter should be a read only type (@typescript-eslint/prefer-readonly-parameter-types).\n\n## Expected behaviour\n\nopencode spawns the ESLint language server, it initialises successfully, and ESLint diagnostics (matching what VS Code’s dbaeumer.vscode-eslint extension and eslint CLI report) are exposed to the LLM.\n\n## Actual behaviour\n\nNo ESLint diagnostics are ever surfaced to the agent. The LSP client lifecycle completes without error, but every publishDiagnostics has count=0.\n\n## Bug 1 — auto-installed vscode-eslint is missing its server runtime dependencies\n\n### Observation\n\nWhen opencode first detects eslint it downloads the dbaeumer/vscode-eslint repo to /devvol/cache/opencode/bin/vscode-eslint/ and spawns server/out/eslintServer.js. That script’s first line requires vscode-languageserver/node, which is declared in server/package.json but never installed by opencode. The parent node_modules/ only contains the extension’s dev/build deps (webpack, chalk, acorn, …). server/node_modules/ does not exist.\n\n### Evidence\n\ntext\n$ node /devvol/cache/opencode/bin/vscode-eslint/server/out/eslintServer.js --stdio </dev/null\nError: Cannot find module 'vscode-languageserver/node'\n at Object.<anonymous> (.../server/out/eslintServer.js:45:16)\nNode.js v24.15.0\n\n\nOpencode’s log then shows:\n\ntext\nservice=lsp.server spawning eslint server\nservice=lsp.client serverID=eslint sending initialize\nERROR service=lsp.client serverID=eslint error=Operation timed out after 45000ms initialize error\nERROR service=lsp error=LSPInitializeError Caused by: Operation timed out after 45000ms Failed to initialize LSP client eslint\nservice=lsp.client serverID=eslint path=/workspace/src/bin/cli.ts count=0 textDocument/publishDiagnostics\n\n\nThe server process dies immediately on require; opencode hangs for the full 45 s initialize timeout, then the TUI reports the LSP as inactive.\n\n### Workaround (for Bug 1 only)\n\nRedirect opencode at a server with its deps bundled — e.g. the dbaeumer.vscode-eslint VS Code extension’s webpacked build — via opencode.jsonc:\n\njsonc\n\"lsp\": {\n \"eslint\": {\n \"command\": [\n \"node\",\n \"/root/.vscode-server/extensions/dbaeumer.vscode-eslint-3.0.24/server/out/eslintServer.js\",\n \"--stdio\"\n ]\n }\n}\n\n\nThis unblocks initialisation (observed: 26 ms init instead of 45 s timeout) but does not solve Bug 2.\n\n## Bug 2 — opencode’s LSP client does not implement pull-model diagnostics\n\n### Observation\n\nEven with the VS Code server booting cleanly, every publishDiagnostics still reports count=0. Tracing the LSP traffic via a stdin/stdout-teeing wrapper reveals why.\n\n### Evidence\n\nServer’s initialize response advertises pull-model diagnostics:\n\njson\n{\n \"capabilities\": {\n \"textDocumentSync\": { \"openClose\": true, \"change\": 2, \"willSaveWaitUntil\": false, \"save\": { \"includeText\": false } },\n \"workspace\": { \"workspaceFolders\": { \"supported\": true } },\n \"executeCommandProvider\": { \"commands\": [/* ... */] },\n \"diagnosticProvider\": {\n \"identifier\": \"eslint\",\n \"interFileDependencies\": false,\n \"workspaceDiagnostics\": false\n }\n }\n}\n\n\nAfter textDocument/didOpen, the server sends workspace/diagnostic/refresh (the client’s cue to pull). opencode answers method-not-found:\n\n\nserver → opencode : workspace/diagnostic/refresh\nopencode → server : {\"jsonrpc\":\"2.0\",\"id\":0,\"error\":{\"code\":-32601,\"message\":\"Unhandled method workspace/diagnostic/refresh\"}}\nserver → opencode : logMessage \"Failed to refresh diagnostics\"\n\n\nopencode never issues textDocument/diagnostic requests, and its initialize client capabilities object omits the textDocument.diagnostic feature. The server therefore never produces diagnostics via push or pull, so opencode receives none.\n\n### Root cause\n\nThe vscode-eslint 3.x server exclusively uses the LSP 3.17 pull-diagnostic protocol. opencode’s LSP client supports only the legacy push-model textDocument/publishDiagnostics. The two never meet. Neither initializationOptions nor workspace/didChangeConfiguration can bridge the gap — those settings are only consulted when the server handles a pull request that never comes.\n\n## Reproduction\n\n1. Open any TypeScript file in this project under opencode.\n2. Tail the latest /devvol/data/opencode/log/*.log and observe count=0 textDocument/publishDiagnostics for the eslint serverID while mise run lint reports a warning on the same file.\n3. For Bug 2 evidence specifically, wrap the eslint.command with a stdin/stdout-teeing script and inspect the captured messages — you will see the server advertise diagnosticProvider and send workspace/diagnostic/refresh, which opencode answers with -32601.\n\n## Related upstream issues\n\n- anomalyco/opencode#6365 — ESLint LSP server fails to auto-install (same npm install code path).\n- anomalyco/opencode#13272 — ESLint LSP initializes but diagnostics timeout with empty result. Matches Bug 2 exactly.\n- anomalyco/opencode#20824 — LSP server spawn hangs indefinitely on failed install. Matches Bug 1’s 45 s hang.\n\n## Suggested fixes upstream\n\n### Bug 1\n- Run npm install --omit=dev inside any subpackage that declares its own dependencies (the vscode-eslint repo has separate client/, server/, and root packages).\n- Alternatively, install the published VSIX’s webpacked server, which has its dependencies inlined and needs no post-install step.\n- Make the LSP initialize timeout (currently hardcoded at 45 s) configurable, and log server stderr so failure modes like MODULE_NOT_FOUND are not silently swallowed.\n\n### Bug 2\n- Implement LSP 3.17 pull-model diagnostics in the LSP client:\n - Declare textDocument.diagnostic client capability in initialize.\n - When a server’s initialize result advertises diagnosticProvider, call textDocument/diagnostic on didOpen/didChange and route the returned items through the same channel as push-model publishDiagnostics.\n - Handle workspace/diagnostic/refresh by invalidating the cache and re-pulling for all open documents that were served by that LSP.\n\n## Status in this repo\n\nLeft opencode.jsonc at \"lsp\": true. No workaround is applied. mise run lint + the VS Code ESLint extension remain the channels by which ESLint findings are produced; the opencode agent does not see them. This note will be revisited once the upstream fixes for #13272 (and/or #6365, #20824) land.\n”,“closed_by”:null,“reactions”:{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23911/reactions”,“total_count”:0,“+1”:0,“-1”:0,“laugh”:0,“hooray”:0,“confused”:0,“heart”:0,“rocket”:0,“eyes”:0},“timeline_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23911/timeline”,“performed_via_github_app”:null,“state_reason”:null,“pinned_comment”:null},{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23910”,“repository_url”:“https://api.github.com/repos/anomalyco/opencode”,“labels_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23910/labels{/name}”,“comments_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23910/comments”,“events_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23910/events”,“html_url”:“https://github.com/anomalyco/opencode/pull/23910”,“id”:4312542093,“node_id”:“PR_kwDOOiiGL87UzP5s”,“number”:23910,“title”:“docs: clarify agent variants and built-in presets”,“user”:{“login”:“jjangga0214”,“id”:28584151,“node_id”:“MDQ6VXNlcjI4NTg0MTUx”,“avatar_url”:“https://avatars.githubusercontent.com/u/28584151?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/jjangga0214”,“html_url”:“https://github.com/jjangga0214”,“followers_url”:“https://api.github.com/users/jjangga0214/followers”,“following_url”:“https://api.github.com/users/jjangga0214/following{/other_user}”,“gists_url”:“https://api.github.com/users/jjangga0214/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/jjangga0214/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/jjangga0214/subscriptions”,“organizations_url”:“https://api.github.com/users/jjangga0214/orgs”,“repos_url”:“https://api.github.com/users/jjangga0214/repos”,“events_url”:“https://api.github.com/users/jjangga0214/events{/privacy}”,“received_events_url”:“https://api.github.com/users/jjangga0214/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“labels”:[],“state”:“open”,“locked”:false,“assignees”:[],“milestone”:null,“comments”:0,“created_at”:“2026-04-23T00:17:40Z”,“updated_at”:“2026-04-23T00:25:38Z”,“closed_at”:null,“assignee”:null,“author_association”:“NONE”,“issue_field_values”:[],“type”:null,“active_lock_reason”:null,“draft”:false,“pull_request”:{“url”:“https://api.github.com/repos/anomalyco/opencode/pulls/23910”,“html_url”:“https://github.com/anomalyco/opencode/pull/23910”,“diff_url”:“https://github.com/anomalyco/opencode/pull/23910.diff”,“patch_url”:“https://github.com/anomalyco/opencode/pull/23910.patch”,“merged_at”:null},“body”:”### Issue for this PR\n\nN/A\n\n### Type of change\n\n- [ ] Bug fix\n- [ ] New feature\n- [ ] Refactor / code improvement\n- [x] Documentation\n\n### What does this PR do?\n\nDocuments that agents can pin a default model variant with agent.<name>.variant (JSON and Markdown examples on the Agents page). The Models variants section explains built-in presets, per-agent pinning, and how variant_cycle / variant_list relate to defaults (variant_list is unbound in the default tui.json). Keybinds docs include a short section for the model/variant-related actions.\n\n### How did you verify your code works?\n\nDocumentation-only change: reviewed the updated MDX against the existing agent config schema and default tui.json keybind entries.\n\n### Screenshots / recordings\n\nNot applicable.\n\n### Checklist\n\n- [x] I have tested my changes locally\n- [x] I have not included unrelated changes in this PR”,“closed_by”:null,“reactions”:{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23910/reactions”,“total_count”:0,“+1”:0,“-1”:0,“laugh”:0,“hooray”:0,“confused”:0,“heart”:0,“rocket”:0,“eyes”:0},“timeline_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23910/timeline”,“performed_via_github_app”:null,“state_reason”:null},{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23908”,“repository_url”:“https://api.github.com/repos/anomalyco/opencode”,“labels_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23908/labels{/name}”,“comments_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23908/comments”,“events_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23908/events”,“html_url”:“https://github.com/anomalyco/opencode/issues/23908”,“id”:4312425639,“node_id”:“I_kwDOOiiGL88AAAABAQpkpw”,“number”:23908,“title”:“[BUG] Sub-session agents fail to resolve OpenRouter model IDs — no model/provider override in createAgentProvider()”,“user”:{“login”:“Paatricious”,“id”:205290930,“node_id”:“U_kgDODDx9sg”,“avatar_url”:“https://avatars.githubusercontent.com/u/205290930?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/Paatricious”,“html_url”:“https://github.com/Paatricious”,“followers_url”:“https://api.github.com/users/Paatricious/followers”,“following_url”:“https://api.github.com/users/Paatricious/following{/other_user}”,“gists_url”:“https://api.github.com/users/Paatricious/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/Paatricious/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/Paatricious/subscriptions”,“organizations_url”:“https://api.github.com/users/Paatricious/orgs”,“repos_url”:“https://api.github.com/users/Paatricious/repos”,“events_url”:“https://api.github.com/users/Paatricious/events{/privacy}”,“received_events_url”:“https://api.github.com/users/Paatricious/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“labels”:[{“id”:9835881465,“node_id”:“LA_kwDOOiiGL88AAAACSkOj-Q”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/core”,“name”:“core”,“color”:“1b6ea3”,“default”:false,“description”:“Anything pertaining to core functionality of the application (opencode server stuff)”}],“state”:“open”,“locked”:false,“assignees”:[{“login”:“rekram1-node”,“id”:63023139,“node_id”:“MDQ6VXNlcjYzMDIzMTM5”,“avatar_url”:“https://avatars.githubusercontent.com/u/63023139?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/rekram1-node”,“html_url”:“https://github.com/rekram1-node”,“followers_url”:“https://api.github.com/users/rekram1-node/followers”,“following_url”:“https://api.github.com/users/rekram1-node/following{/other_user}”,“gists_url”:“https://api.github.com/users/rekram1-node/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/rekram1-node/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/rekram1-node/subscriptions”,“organizations_url”:“https://api.github.com/users/rekram1-node/orgs”,“repos_url”:“https://api.github.com/users/rekram1-node/repos”,“events_url”:“https://api.github.com/users/rekram1-node/events{/privacy}”,“received_events_url”:“https://api.github.com/users/rekram1-node/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false}],“milestone”:null,“comments”:2,“created_at”:“2026-04-22T23:43:58Z”,“updated_at”:“2026-04-22T23:47:15Z”,“closed_at”:null,“assignee”:{“login”:“rekram1-node”,“id”:63023139,“node_id”:“MDQ6VXNlcjYzMDIzMTM5”,“avatar_url”:“https://avatars.githubusercontent.com/u/63023139?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/rekram1-node”,“html_url”:“https://github.com/rekram1-node”,“followers_url”:“https://api.github.com/users/rekram1-node/followers”,“following_url”:“https://api.github.com/users/rekram1-node/following{/other_user}”,“gists_url”:“https://api.github.com/users/rekram1-node/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/rekram1-node/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/rekram1-node/subscriptions”,“organizations_url”:“https://api.github.com/users/rekram1-node/orgs”,“repos_url”:“https://api.github.com/users/rekram1-node/repos”,“events_url”:“https://api.github.com/users/rekram1-node/events{/privacy}”,“received_events_url”:“https://api.github.com/users/rekram1-node/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“author_association”:“NONE”,“issue_field_values”:[],“type”:null,“active_lock_reason”:null,“sub_issues_summary”:{“total”:0,“completed”:0,“percent_completed”:0},“issue_dependencies_summary”:{“blocked_by”:0,“total_blocked_by”:0,“blocking”:0,“total_blocking”:0},“body”:”### Description\n\nWhen sub-agents (explore, librarian, oracle, hephaestus, etc.) are spawned via the oh-my-openagent plugin, they fail to resolve OpenRouter model IDs (e.g. anthropic/claude-sonnet-4.6, google/gemini-3-flash) because createAgentProvider() performs a hardcoded lookup in models.SupportedModels using the agent’s configured model ID. Sub-session agents are created with config.AgentTask (see agent-tool.go:57), which reads from config.Agents[AgentTask].Model — a static global config key, not the model/provider specified by the parent session or plugin.\n\nThe oh-my-openagent plugin calls promptAsync with model: { providerID: \"openrouter\", modelID: \"anthropic/claude-sonnet-4.6\" } in the request body. However, OpenCode’s server-side agent creation completely ignores this field and instead uses the hardcoded AgentTask model from global config. This means:\n\n1. OpenRouter model IDs (e.g. anthropic/claude-sonnet-4.6) do not exist in models.SupportedModels — OpenCode uses its own prefixed IDs (e.g. openrouter.claude-3.5-sonnet, openrouter.gpt-4o)\n2. Even if the ID existed, createAgentProvider() at agent.go:712 does models.SupportedModels[agentConfig.Model] with no fallback or override mechanism\n3. The error manifests as “Provider returned error” (when model resolution partially succeeds but provider lookup fails) or “Missing Authentication header” (when the model can’t be resolved at all and falls back to a broken provider)\n\n### Plugins\n\noh-my-openagent v3.17.4\n\n### OpenCode version\n\n1.3.5 (may affect later versions too — root cause is in the model resolution code path)\n\n### Steps to reproduce\n\n1. Configure openrouter provider with a valid API key in opencode.json\n2. Set an agent’s model to an OpenRouter model ID like anthropic/claude-sonnet-4.6 or google/gemini-3-flash\n3. Have the main agent (Sisyphus) spawn a sub-agent via oh-my-openagent’s call_omo_agent tool\n4. Observe the sub-agent fails with “Provider returned error” or “Missing Authentication header”\n\n### Root Cause Analysis\n\nFile: internal/llm/agent/agent.go:706-757 — createAgentProvider()\n\ngo\nfunc createAgentProvider(agentName config.AgentName) (provider.Provider, error) {\n\tcfg := config.Get()\n\tagentConfig, ok := cfg.Agents[agentName]\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"agent %s not found\", agentName)\n\t}\n\tmodel, ok := models.SupportedModels[agentConfig.Model] // ← LINE 712: HARD LOOKUP\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"model %s not supported\", agentConfig.Model)\n\t}\n\tproviderCfg, ok := cfg.Providers[model.Provider]\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"provider %s not supported\", model.Provider)\n\t}\n\t// ...\n}\n\n\nFile: internal/llm/agent/agent-tool.go:57 — Sub-session creation\n\ngo\nagent, err := NewAgent(config.AgentTask, b.sessions, b.messages, TaskAgentTools(b.lspClients))\n// ↑ Uses AgentTask's hardcoded model from global config\n// Does NOT accept or use any model/provider override from the caller\n\n\nFile: internal/llm/models/models.go:50-98 — SupportedModels\n\ngo\nfunc init() {\n\tmaps.Copy(SupportedModels, AnthropicModels)\n\tmaps.Copy(SupportedModels, OpenAIModels)\n\tmaps.Copy(SupportedModels, GeminiModels)\n\tmaps.Copy(SupportedModels, OpenRouterModels) // Uses prefixed IDs like \"openrouter.gpt-4o\"\n\t// ...\n}\n\n\nThe OpenRouter models use prefixed IDs (e.g. \"openrouter.gpt-4.1\", \"openrouter.claude-3.5-sonnet\"), while oh-my-openagent sends raw OpenRouter IDs (e.g. \"anthropic/claude-sonnet-4.6\"). These don’t match, so the lookup fails.\n\nKey finding: No per-request model/provider override mechanism exists.\n\n- UpdateAgentModel() exists but is a one-time config mutation, not per-request\n- Agent struct has only Model, MaxTokens, ReasoningEffort — no override fields\n- The prompt body’s model field is silently ignored by the server-side agent creation\n\n### Suggested Fix\n\nTwo possible approaches:\n\nA) Add model/provider override to agent creation:\ngo\n// In agent-tool.go, pass model override from the session context\nagent, err := NewAgent(config.AgentTask, b.sessions, b.messages,\n TaskAgentTools(b.lspClients),\n TaskAgentModelOverride(overrideModelID)) // NEW: optional override\n\n\nB) Add a model ID alias/translation layer:\n- When a model ID is not found in SupportedModels, attempt to match it against OpenRouter model definitions by comparing APIModel fields\n- E.g. \"anthropic/claude-sonnet-4.6\" → find OpenRouter model with matching APIModel\n\n### Operating System\n\nWindows 11 24H2\n\n### Terminal\n\nWindows Terminal\n”,“closed_by”:null,“reactions”:{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23908/reactions”,“total_count”:0,“+1”:0,“-1”:0,“laugh”:0,“hooray”:0,“confused”:0,“heart”:0,“rocket”:0,“eyes”:0},“timeline_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23908/timeline”,“performed_via_github_app”:null,“state_reason”:null,“pinned_comment”:null},{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23907”,“repository_url”:“https://api.github.com/repos/anomalyco/opencode”,“labels_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23907/labels{/name}”,“comments_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23907/comments”,“events_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23907/events”,“html_url”:“https://github.com/anomalyco/opencode/issues/23907”,“id”:4312157096,“node_id”:“I_kwDOOiiGL88AAAABAQZLqA”,“number”:23907,“title”:“model executed .cmd script despite shell permission being set to Ask”,“user”:{“login”:“BoringBoredom”,“id”:16615327,“node_id”:“MDQ6VXNlcjE2NjE1MzI3”,“avatar_url”:“https://avatars.githubusercontent.com/u/16615327?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/BoringBoredom”,“html_url”:“https://github.com/BoringBoredom”,“followers_url”:“https://api.github.com/users/BoringBoredom/followers”,“following_url”:“https://api.github.com/users/BoringBoredom/following{/other_user}”,“gists_url”:“https://api.github.com/users/BoringBoredom/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/BoringBoredom/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/BoringBoredom/subscriptions”,“organizations_url”:“https://api.github.com/users/BoringBoredom/orgs”,“repos_url”:“https://api.github.com/users/BoringBoredom/repos”,“events_url”:“https://api.github.com/users/BoringBoredom/events{/privacy}”,“received_events_url”:“https://api.github.com/users/BoringBoredom/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“labels”:[{“id”:8542148739,“node_id”:“LA_kwDOOiiGL88AAAAB_SbYgw”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/bug”,“name”:“bug”,“color”:“d73a4a”,“default”:true,“description”:“Something isn’t working”},{“id”:9502448928,“node_id”:“LA_kwDOOiiGL88AAAACNmPdIA”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/windows”,“name”:“windows”,“color”:“fca1db”,“default”:false,“description”:""},{“id”:9835881465,“node_id”:“LA_kwDOOiiGL88AAAACSkOj-Q”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/core”,“name”:“core”,“color”:“1b6ea3”,“default”:false,“description”:“Anything pertaining to core functionality of the application (opencode server stuff)”}],“state”:“open”,“locked”:false,“assignees”:[{“login”:“rekram1-node”,“id”:63023139,“node_id”:“MDQ6VXNlcjYzMDIzMTM5”,“avatar_url”:“https://avatars.githubusercontent.com/u/63023139?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/rekram1-node”,“html_url”:“https://github.com/rekram1-node”,“followers_url”:“https://api.github.com/users/rekram1-node/followers”,“following_url”:“https://api.github.com/users/rekram1-node/following{/other_user}”,“gists_url”:“https://api.github.com/users/rekram1-node/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/rekram1-node/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/rekram1-node/subscriptions”,“organizations_url”:“https://api.github.com/users/rekram1-node/orgs”,“repos_url”:“https://api.github.com/users/rekram1-node/repos”,“events_url”:“https://api.github.com/users/rekram1-node/events{/privacy}”,“received_events_url”:“https://api.github.com/users/rekram1-node/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false}],“milestone”:null,“comments”:1,“created_at”:“2026-04-22T22:21:01Z”,“updated_at”:“2026-04-22T22:22:08Z”,“closed_at”:null,“assignee”:{“login”:“rekram1-node”,“id”:63023139,“node_id”:“MDQ6VXNlcjYzMDIzMTM5”,“avatar_url”:“https://avatars.githubusercontent.com/u/63023139?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/rekram1-node”,“html_url”:“https://github.com/rekram1-node”,“followers_url”:“https://api.github.com/users/rekram1-node/followers”,“following_url”:“https://api.github.com/users/rekram1-node/following{/other_user}”,“gists_url”:“https://api.github.com/users/rekram1-node/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/rekram1-node/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/rekram1-node/subscriptions”,“organizations_url”:“https://api.github.com/users/rekram1-node/orgs”,“repos_url”:“https://api.github.com/users/rekram1-node/repos”,“events_url”:“https://api.github.com/users/rekram1-node/events{/privacy}”,“received_events_url”:“https://api.github.com/users/rekram1-node/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“author_association”:“NONE”,“issue_field_values”:[],“type”:null,“active_lock_reason”:null,“sub_issues_summary”:{“total”:0,“completed”:0,“percent_completed”:0},“issue_dependencies_summary”:{“blocked_by”:0,“total_blocked_by”:0,“blocking”:0,“total_blocking”:0},“body”:”### Description\n\nMy settings are configured to ask for permission for shell execution by default, and so far it has worked as expected. Earlier, it ran a build script, specifically $ ./build.cmd, without me having to approve its execution.\n\n### Plugins\n\n_No response\n\n### OpenCode version\n\nDesktop 1.14.20\n\n### Steps to reproduce\n\nNot sure if this helps, but the project is a .NET 10 C# app, and the build.cmd file contains dotnet publish .\\test\\test.csproj -c Release -r win-x64 -p:PublishSingleFile=true -p:PublishSelfContained=false.\nThe model I used is GPT 5.4 xhigh.\n\n\nVerification\n 1. Build and launch the app.\n\nThis was part of the plan I told it to implement, but the expected behavior is prompting for permission first.\n\n### Screenshot and/or share link\n\n_No response_\n\n### Operating System\n\nWindows 11 24H2\n\n### Terminal\n\n_No response_”,“closed_by”:null,“reactions”:{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23907/reactions”,“total_count”:0,“+1”:0,“-1”:0,“laugh”:0,“hooray”:0,“confused”:0,“heart”:0,“rocket”:0,“eyes”:0},“timeline_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23907/timeline”,“performed_via_github_app”:null,“state_reason”:null,“pinned_comment”:null},{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23906”,“repository_url”:“https://api.github.com/repos/anomalyco/opencode”,“labels_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23906/labels{/name}”,“comments_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23906/comments”,“events_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23906/events”,“html_url”:“https://github.com/anomalyco/opencode/issues/23906”,“id”:4312066376,“node_id”:“I_kwDOOiiGL88AAAABAQTpSA”,“number”:23906,“title”:“[BUG] OpenCode logo not displayed correctly in web based TUI”,“user”:{“login”:“hakan-77”,“id”:34558050,“node_id”:“MDQ6VXNlcjM0NTU4MDUw”,“avatar_url”:“https://avatars.githubusercontent.com/u/34558050?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/hakan-77”,“html_url”:“https://github.com/hakan-77”,“followers_url”:“https://api.github.com/users/hakan-77/followers”,“following_url”:“https://api.github.com/users/hakan-77/following{/other_user}”,“gists_url”:“https://api.github.com/users/hakan-77/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/hakan-77/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/hakan-77/subscriptions”,“organizations_url”:“https://api.github.com/users/hakan-77/orgs”,“repos_url”:“https://api.github.com/users/hakan-77/repos”,“events_url”:“https://api.github.com/users/hakan-77/events{/privacy}”,“received_events_url”:“https://api.github.com/users/hakan-77/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“labels”:[{“id”:8542148739,“node_id”:“LA_kwDOOiiGL88AAAAB_SbYgw”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/bug”,“name”:“bug”,“color”:“d73a4a”,“default”:true,“description”:“Something isn’t working”},{“id”:9489636945,“node_id”:“LA_kwDOOiiGL88AAAACNaBeUQ”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/opentui”,“name”:“opentui”,“color”:“81bdfa”,“default”:false,“description”:“This relates to changes in v1.0, now that opencode uses opentui”}],“state”:“open”,“locked”:false,“assignees”:[{“login”:“kommander”,“id”:335157,“node_id”:“MDQ6VXNlcjMzNTE1Nw==”,“avatar_url”:“https://avatars.githubusercontent.com/u/335157?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/kommander”,“html_url”:“https://github.com/kommander”,“followers_url”:“https://api.github.com/users/kommander/followers”,“following_url”:“https://api.github.com/users/kommander/following{/other_user}”,“gists_url”:“https://api.github.com/users/kommander/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/kommander/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/kommander/subscriptions”,“organizations_url”:“https://api.github.com/users/kommander/orgs”,“repos_url”:“https://api.github.com/users/kommander/repos”,“events_url”:“https://api.github.com/users/kommander/events{/privacy}”,“received_events_url”:“https://api.github.com/users/kommander/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false}],“milestone”:null,“comments”:1,“created_at”:“2026-04-22T21:55:46Z”,“updated_at”:“2026-04-22T21:56:55Z”,“closed_at”:null,“assignee”:{“login”:“kommander”,“id”:335157,“node_id”:“MDQ6VXNlcjMzNTE1Nw==”,“avatar_url”:“https://avatars.githubusercontent.com/u/335157?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/kommander”,“html_url”:“https://github.com/kommander”,“followers_url”:“https://api.github.com/users/kommander/followers”,“following_url”:“https://api.github.com/users/kommander/following{/other_user}”,“gists_url”:“https://api.github.com/users/kommander/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/kommander/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/kommander/subscriptions”,“organizations_url”:“https://api.github.com/users/kommander/orgs”,“repos_url”:“https://api.github.com/users/kommander/repos”,“events_url”:“https://api.github.com/users/kommander/events{/privacy}”,“received_events_url”:“https://api.github.com/users/kommander/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“author_association”:“NONE”,“issue_field_values”:[],“type”:null,“active_lock_reason”:null,“sub_issues_summary”:{“total”:0,“completed”:0,“percent_completed”:0},“issue_dependencies_summary”:{“blocked_by”:0,“total_blocked_by”:0,“blocking”:0,“total_blocking”:0},“body”:”### Description\n\nCode Server (Web based Vs Code) + TUI displays the OpenCode logo wrong. There’s also a \na small empty line right below Build label. See screenshot. The issue has been around for a while.\n\n### Plugins\n\n_No response_\n\n### OpenCode version\n\n1.4.20\n\n### Steps to reproduce\n\nInstall Code Server on Ubuntu, OpenCode, then view in Chrome \n\n### Screenshot and/or share link\n\n<img width=“620” height=“228” alt=“Image” src=“https://github.com/user-attachments/assets/8b3c4e2a-f33b-47a9-b157-403133ec0d50” />\n\n### Operating System\n\nUbuntu 24.04\n\n### Terminal\n\nxterm.js”,“closed_by”:null,“reactions”:{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23906/reactions”,“total_count”:1,“+1”:1,“-1”:0,“laugh”:0,“hooray”:0,“confused”:0,“heart”:0,“rocket”:0,“eyes”:0},“timeline_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23906/timeline”,“performed_via_github_app”:null,“state_reason”:null,“pinned_comment”:null},{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23904”,“repository_url”:“https://api.github.com/repos/anomalyco/opencode”,“labels_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23904/labels{/name}”,“comments_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23904/comments”,“events_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23904/events”,“html_url”:“https://github.com/anomalyco/opencode/issues/23904”,“id”:4311674776,“node_id”:“I_kwDOOiiGL88AAAABAP7vmA”,“number”:23904,“title”:“[BUG] mismatch between homebrew version and TUI version; failures upon Code-Reviewer still”,“user”:{“login”:“davidbernat”,“id”:5396131,“node_id”:“MDQ6VXNlcjUzOTYxMzE=”,“avatar_url”:“https://avatars.githubusercontent.com/u/5396131?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/davidbernat”,“html_url”:“https://github.com/davidbernat”,“followers_url”:“https://api.github.com/users/davidbernat/followers”,“following_url”:“https://api.github.com/users/davidbernat/following{/other_user}”,“gists_url”:“https://api.github.com/users/davidbernat/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/davidbernat/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/davidbernat/subscriptions”,“organizations_url”:“https://api.github.com/users/davidbernat/orgs”,“repos_url”:“https://api.github.com/users/davidbernat/repos”,“events_url”:“https://api.github.com/users/davidbernat/events{/privacy}”,“received_events_url”:“https://api.github.com/users/davidbernat/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“labels”:[{“id”:8542148739,“node_id”:“LA_kwDOOiiGL88AAAAB_SbYgw”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/bug”,“name”:“bug”,“color”:“d73a4a”,“default”:true,“description”:“Something isn’t working”},{“id”:9835881465,“node_id”:“LA_kwDOOiiGL88AAAACSkOj-Q”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/core”,“name”:“core”,“color”:“1b6ea3”,“default”:false,“description”:“Anything pertaining to core functionality of the application (opencode server stuff)”}],“state”:“open”,“locked”:false,“assignees”:[{“login”:“rekram1-node”,“id”:63023139,“node_id”:“MDQ6VXNlcjYzMDIzMTM5”,“avatar_url”:“https://avatars.githubusercontent.com/u/63023139?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/rekram1-node”,“html_url”:“https://github.com/rekram1-node”,“followers_url”:“https://api.github.com/users/rekram1-node/followers”,“following_url”:“https://api.github.com/users/rekram1-node/following{/other_user}”,“gists_url”:“https://api.github.com/users/rekram1-node/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/rekram1-node/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/rekram1-node/subscriptions”,“organizations_url”:“https://api.github.com/users/rekram1-node/orgs”,“repos_url”:“https://api.github.com/users/rekram1-node/repos”,“events_url”:“https://api.github.com/users/rekram1-node/events{/privacy}”,“received_events_url”:“https://api.github.com/users/rekram1-node/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false}],“milestone”:null,“comments”:3,“created_at”:“2026-04-22T20:25:47Z”,“updated_at”:“2026-04-22T22:06:54Z”,“closed_at”:null,“assignee”:{“login”:“rekram1-node”,“id”:63023139,“node_id”:“MDQ6VXNlcjYzMDIzMTM5”,“avatar_url”:“https://avatars.githubusercontent.com/u/63023139?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/rekram1-node”,“html_url”:“https://github.com/rekram1-node”,“followers_url”:“https://api.github.com/users/rekram1-node/followers”,“following_url”:“https://api.github.com/users/rekram1-node/following{/other_user}”,“gists_url”:“https://api.github.com/users/rekram1-node/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/rekram1-node/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/rekram1-node/subscriptions”,“organizations_url”:“https://api.github.com/users/rekram1-node/orgs”,“repos_url”:“https://api.github.com/users/rekram1-node/repos”,“events_url”:“https://api.github.com/users/rekram1-node/events{/privacy}”,“received_events_url”:“https://api.github.com/users/rekram1-node/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“author_association”:“NONE”,“issue_field_values”:[],“type”:null,“active_lock_reason”:null,“sub_issues_summary”:{“total”:0,“completed”:0,“percent_completed”:0},“issue_dependencies_summary”:{“blocked_by”:0,“total_blocked_by”:0,“blocking”:0,“total_blocking”:0},“body”:”### Description\n\nJust fresh installed opencode via homebrew to identity whether the atrocity log problems can be resolved.\nHomebrew installed v1.4.20 and the TUI is showing v1.4.10. My expertise is not homebrew; both are usually managed by different publishing teams and each version can be individually managed, but should match.\n\nThe Code-Reviewer bot still presents the same “Agent code-reviewer agents’ inherit/ is not valid” error. This has been reported in previous tickets, and still has not worked on this MacBook. Basic transparency failures by Dax.\n\nNot interested in tracking down this problem myself as I do not care about tracking version numbers. Where logs.\n<img width=“1076” height=“463” alt=“Image” src=“https://github.com/user-attachments/assets/cb81f364-52ab-4ffd-824f-71a5065fe3df” />\n\n### Plugins\n\nNone\n\n### OpenCode version\n\n”v1.4.10”\n\n### Steps to reproduce\n\n\nbrew install opencode\nopencode\n\n\nThe Code-Reviewer has persistently failed since its introduction. There are other tickets (hard to search for) that directly asked about this months ago. To this date Starlight has not once used the OpenCode Code-Reviewer. We put this in the same “where is this answer?” as opencode serve problems. Fundamentally the system does not work “with this Starlight MacBooks” and we have registered the issue on dozens of public forums, including initiated formalized requests against spoliation. We feel quite confident in our responsibilities to this issue having been authorized long in advance of our request.\n\nOur reasonable requests. 📺🎥🤔💭🤖📺\n\nFeel free to reach out privately to discuss this issue.\n\n### Screenshot and/or share link\n\nNone required.\n\n### Operating System\n\n”Mac”\n\n### Terminal\n\nTerminal & IntelliJ terminal\n\n\nThe ticket has been updated to fully meet the OpenCode contributing guidelines. \nPlease address this issue as though the world is reading your actions to this reply.”,“closed_by”:null,“reactions”:{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23904/reactions”,“total_count”:0,“+1”:0,“-1”:0,“laugh”:0,“hooray”:0,“confused”:0,“heart”:0,“rocket”:0,“eyes”:0},“timeline_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23904/timeline”,“performed_via_github_app”:null,“state_reason”:null,“pinned_comment”:null},{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23903”,“repository_url”:“https://api.github.com/repos/anomalyco/opencode”,“labels_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23903/labels{/name}”,“comments_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23903/comments”,“events_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23903/events”,“html_url”:“https://github.com/anomalyco/opencode/issues/23903”,“id”:4311624932,“node_id”:“I_kwDOOiiGL88AAAABAP4s5A”,“number”:23903,“title”:“Web UI: Failed to send prompt. Unable to retrieve session.”,“user”:{“login”:“jeremyakers”,“id”:13689422,“node_id”:“MDQ6VXNlcjEzNjg5NDIy”,“avatar_url”:“https://avatars.githubusercontent.com/u/13689422?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/jeremyakers”,“html_url”:“https://github.com/jeremyakers”,“followers_url”:“https://api.github.com/users/jeremyakers/followers”,“following_url”:“https://api.github.com/users/jeremyakers/following{/other_user}”,“gists_url”:“https://api.github.com/users/jeremyakers/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/jeremyakers/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/jeremyakers/subscriptions”,“organizations_url”:“https://api.github.com/users/jeremyakers/orgs”,“repos_url”:“https://api.github.com/users/jeremyakers/repos”,“events_url”:“https://api.github.com/users/jeremyakers/events{/privacy}”,“received_events_url”:“https://api.github.com/users/jeremyakers/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“labels”:[{“id”:8542148739,“node_id”:“LA_kwDOOiiGL88AAAAB_SbYgw”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/bug”,“name”:“bug”,“color”:“d73a4a”,“default”:true,“description”:“Something isn’t working”},{“id”:9578754464,“node_id”:“LA_kwDOOiiGL88AAAACOvAxoA”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/web”,“name”:“web”,“color”:“5fd4dc”,“default”:false,“description”:“Relates to opencode on web / desktop”}],“state”:“open”,“locked”:false,“assignees”:[{“login”:“adamdotdevin”,“id”:2363879,“node_id”:“MDQ6VXNlcjIzNjM4Nzk=”,“avatar_url”:“https://avatars.githubusercontent.com/u/2363879?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/adamdotdevin”,“html_url”:“https://github.com/adamdotdevin”,“followers_url”:“https://api.github.com/users/adamdotdevin/followers”,“following_url”:“https://api.github.com/users/adamdotdevin/following{/other_user}”,“gists_url”:“https://api.github.com/users/adamdotdevin/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/adamdotdevin/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/adamdotdevin/subscriptions”,“organizations_url”:“https://api.github.com/users/adamdotdevin/orgs”,“repos_url”:“https://api.github.com/users/adamdotdevin/repos”,“events_url”:“https://api.github.com/users/adamdotdevin/events{/privacy}”,“received_events_url”:“https://api.github.com/users/adamdotdevin/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false}],“milestone”:null,“comments”:0,“created_at”:“2026-04-22T20:16:19Z”,“updated_at”:“2026-04-22T20:44:52Z”,“closed_at”:null,“assignee”:{“login”:“adamdotdevin”,“id”:2363879,“node_id”:“MDQ6VXNlcjIzNjM4Nzk=”,“avatar_url”:“https://avatars.githubusercontent.com/u/2363879?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/adamdotdevin”,“html_url”:“https://github.com/adamdotdevin”,“followers_url”:“https://api.github.com/users/adamdotdevin/followers”,“following_url”:“https://api.github.com/users/adamdotdevin/following{/other_user}”,“gists_url”:“https://api.github.com/users/adamdotdevin/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/adamdotdevin/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/adamdotdevin/subscriptions”,“organizations_url”:“https://api.github.com/users/adamdotdevin/orgs”,“repos_url”:“https://api.github.com/users/adamdotdevin/repos”,“events_url”:“https://api.github.com/users/adamdotdevin/events{/privacy}”,“received_events_url”:“https://api.github.com/users/adamdotdevin/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“author_association”:“NONE”,“issue_field_values”:[],“type”:null,“active_lock_reason”:null,“sub_issues_summary”:{“total”:0,“completed”:0,“percent_completed”:0},“issue_dependencies_summary”:{“blocked_by”:0,“total_blocked_by”:0,“blocking”:0,“total_blocking”:0},“body”:”### Description\n\nOpenCode crashes. A lot.\n\nSince 1.14.18 or so, after I restart it, I can’t send prompts on previous sessions in the Web UI anymore:\n\n<img width=“424” height=“314” alt=“Image” src=“https://github.com/user-attachments/assets/a9582b0e-9167-4f74-84e7-a8b65f652f84” />\n\nI have to go back to the TUI, and send a prompt there, and then only after I send a prompt on the TUI does the same session in the WebUI start working again\n\n### Plugins\n\nOmO\n\n### OpenCode version\n\n1.14.20\n\n### Steps to reproduce\n\n1. Wait for OpenCode to crash\n2. Restart\n3. Send prompt on previous session\n4. See error\n\n### Screenshot and/or share link\n\nSee above\n\n### Operating System\n\nUbuntu 22.04\n\n### Terminal\n\nGnome Terminal”,“closed_by”:null,“reactions”:{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23903/reactions”,“total_count”:0,“+1”:0,“-1”:0,“laugh”:0,“hooray”:0,“confused”:0,“heart”:0,“rocket”:0,“eyes”:0},“timeline_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23903/timeline”,“performed_via_github_app”:null,“state_reason”:null,“pinned_comment”:null},{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23902”,“repository_url”:“https://api.github.com/repos/anomalyco/opencode”,“labels_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23902/labels{/name}”,“comments_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23902/comments”,“events_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23902/events”,“html_url”:“https://github.com/anomalyco/opencode/pull/23902”,“id”:4311573005,“node_id”:“PR_kwDOOiiGL87UwJ8q”,“number”:23902,“title”:“feat(tui): add opencode -c to session exit message for convenience”,“user”:{“login”:“WattsInABox”,“id”:846684,“node_id”:“MDQ6VXNlcjg0NjY4NA==”,“avatar_url”:“https://avatars.githubusercontent.com/u/846684?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/WattsInABox”,“html_url”:“https://github.com/WattsInABox”,“followers_url”:“https://api.github.com/users/WattsInABox/followers”,“following_url”:“https://api.github.com/users/WattsInABox/following{/other_user}”,“gists_url”:“https://api.github.com/users/WattsInABox/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/WattsInABox/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/WattsInABox/subscriptions”,“organizations_url”:“https://api.github.com/users/WattsInABox/orgs”,“repos_url”:“https://api.github.com/users/WattsInABox/repos”,“events_url”:“https://api.github.com/users/WattsInABox/events{/privacy}”,“received_events_url”:“https://api.github.com/users/WattsInABox/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“labels”:[],“state”:“open”,“locked”:false,“assignees”:[],“milestone”:null,“comments”:0,“created_at”:“2026-04-22T20:07:03Z”,“updated_at”:“2026-04-22T20:07:34Z”,“closed_at”:null,“assignee”:null,“author_association”:“NONE”,“issue_field_values”:[],“type”:null,“active_lock_reason”:null,“draft”:false,“pull_request”:{“url”:“https://api.github.com/repos/anomalyco/opencode/pulls/23902”,“html_url”:“https://github.com/anomalyco/opencode/pull/23902”,“diff_url”:“https://github.com/anomalyco/opencode/pull/23902.diff”,“patch_url”:“https://github.com/anomalyco/opencode/pull/23902.patch”,“merged_at”:null},“body”:”### Issue for this PR\r\n\r\nNone — new feature request, but I think a helpful one ;) \r\n\r\n### Type of change\r\n\r\n- [ ] Bug fix\r\n- [X] New feature\r\n- [ ] Refactor / code improvement\r\n- [ ] Documentation\r\n\r\n### What does this PR do?\r\n\r\nWhen exiting the CLI version of opencode, the help text mentions opencode -s [long session ID] which is very nice. But the very, very convenient opencode -c exists and there’s no mention of it. This updates the text so that opencode -c is mentioned for dummies like me who missed it in the help previously.\r\n\r\n### How did you verify your code works?\r\n\r\nI ran opencode and then quit opencode without my change. Then I ran it again with my change (bun run --cwd packages/opencode --conditions=browser src/index.ts after bun install) so I could see the new text.\r\n\r\n### Screenshots / recordings\r\n\r\nBefore the change:\r\n\r\n<img width=“380” height=“157” alt=“opencode-exit-text-with-just-s” src=“https://github.com/user-attachments/assets/632b1afe-a8fa-4729-9cc6-b605bf07c4cf” />\r\n\r\nAfter the change:\r\n\r\n<img width=“380” height=“158” alt=“opencode-exit-text-with-c-and-s” src=“https://github.com/user-attachments/assets/40f95290-f628-4fee-b3c8-c7fe314f0294” />\r\n\r\n\r\n### Checklist\r\n\r\n- [X] I have tested my changes locally\r\n- [X] I have not included unrelated changes in this PR\r\n\r\n_If you do not follow this template your PR will be automatically rejected.”,“closed_by”:null,“reactions”:{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23902/reactions”,“total_count”:0,“+1”:0,“-1”:0,“laugh”:0,“hooray”:0,“confused”:0,“heart”:0,“rocket”:0,“eyes”:0},“timeline_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23902/timeline”,“performed_via_github_app”:null,“state_reason”:null},{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23901”,“repository_url”:“https://api.github.com/repos/anomalyco/opencode”,“labels_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23901/labels{/name}”,“comments_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23901/comments”,“events_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23901/events”,“html_url”:“https://github.com/anomalyco/opencode/issues/23901”,“id”:4311499139,“node_id”:“I_kwDOOiiGL88AAAABAPxBgw”,“number”:23901,“title”:“[COMPLETED] Starlight LLC Codeo v0.0.1 delivers summaries for persistent memory of OpenCode”,“user”:{“login”:“davidbernat”,“id”:5396131,“node_id”:“MDQ6VXNlcjUzOTYxMzE=”,“avatar_url”:“https://avatars.githubusercontent.com/u/5396131?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/davidbernat”,“html_url”:“https://github.com/davidbernat”,“followers_url”:“https://api.github.com/users/davidbernat/followers”,“following_url”:“https://api.github.com/users/davidbernat/following{/other_user}”,“gists_url”:“https://api.github.com/users/davidbernat/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/davidbernat/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/davidbernat/subscriptions”,“organizations_url”:“https://api.github.com/users/davidbernat/orgs”,“repos_url”:“https://api.github.com/users/davidbernat/repos”,“events_url”:“https://api.github.com/users/davidbernat/events{/privacy}”,“received_events_url”:“https://api.github.com/users/davidbernat/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“labels”:[{“id”:9843009782,“node_id”:“LA_kwDOOiiGL88AAAACSrBo9g”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/docs”,“name”:“docs”,“color”:“ededed”,“default”:false,“description”:null}],“state”:“open”,“locked”:false,“assignees”:[{“login”:“R44VC0RP”,“id”:89211796,“node_id”:“MDQ6VXNlcjg5MjExNzk2”,“avatar_url”:“https://avatars.githubusercontent.com/u/89211796?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/R44VC0RP”,“html_url”:“https://github.com/R44VC0RP”,“followers_url”:“https://api.github.com/users/R44VC0RP/followers”,“following_url”:“https://api.github.com/users/R44VC0RP/following{/other_user}”,“gists_url”:“https://api.github.com/users/R44VC0RP/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/R44VC0RP/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/R44VC0RP/subscriptions”,“organizations_url”:“https://api.github.com/users/R44VC0RP/orgs”,“repos_url”:“https://api.github.com/users/R44VC0RP/repos”,“events_url”:“https://api.github.com/users/R44VC0RP/events{/privacy}”,“received_events_url”:“https://api.github.com/users/R44VC0RP/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false}],“milestone”:null,“comments”:1,“created_at”:“2026-04-22T19:53:05Z”,“updated_at”:“2026-04-22T22:00:15Z”,“closed_at”:null,“assignee”:{“login”:“R44VC0RP”,“id”:89211796,“node_id”:“MDQ6VXNlcjg5MjExNzk2”,“avatar_url”:“https://avatars.githubusercontent.com/u/89211796?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/R44VC0RP”,“html_url”:“https://github.com/R44VC0RP”,“followers_url”:“https://api.github.com/users/R44VC0RP/followers”,“following_url”:“https://api.github.com/users/R44VC0RP/following{/other_user}”,“gists_url”:“https://api.github.com/users/R44VC0RP/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/R44VC0RP/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/R44VC0RP/subscriptions”,“organizations_url”:“https://api.github.com/users/R44VC0RP/orgs”,“repos_url”:“https://api.github.com/users/R44VC0RP/repos”,“events_url”:“https://api.github.com/users/R44VC0RP/events{/privacy}”,“received_events_url”:“https://api.github.com/users/R44VC0RP/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“author_association”:“NONE”,“issue_field_values”:[],“type”:null,“active_lock_reason”:null,“sub_issues_summary”:{“total”:0,“completed”:0,“percent_completed”:0},“issue_dependencies_summary”:{“blocked_by”:0,“total_blocked_by”:0,“blocking”:0,“total_blocking”:0},“body”:”### Question\n\nTo those who find us through search engines: Hello, World is starting anew. \nGrateful to the teams that supported this project as the problems of OpenCode continued to fester.\nThere are obvious reasons this component is remedial. Please post any bugs to our repository issues section.\n\nMigration of OpenCode storage/ for persistent random access memory and first-shot skills creation\nrepository: https://github.com/davidbernat/StarlightCodeo/blob/main/AGENTS.codeo.LogBuilder.md\nintroduction below.\n\n\n#### author: starlight.ai #### maintainer: starlight.ai #### date: February 18, 2026 #### version: v0.1.15 #### purpose: Utilities for loading and backing up OpenCode session logs into Python dataclasses for analysis #### point of contact: please visit our website contact form or GitHub profile email address\n\n## AGENTS.codeo.LogBuilder\n\n### package entrypoints \n\n- LogBuilder.retrieve_projects() → list[Project] — Discover all OpenCode projects in default storage\n- LogBuilder.project_retrieve_sessions(projects, hydrate=True) → list[Session] — Hydrate sessions with messages, todos, file_diffs\n- LogBuilder.load_project(directory, project_id) → Project — Load a specific project by ID\n- LogBuilder.load_session(session_id, directory, hydrate=False) → Session — Load a specific session, optionally hydrated\n- LogMigrator.migrate_one_session_log_to_new_directory(session, original_log_dir, new_base_dir) → str — Archive session to backup directory\n- Session.as_summary_lines() → list[str] — Generate human-readable session summary (1K-5K lines for 85% of sessions)\n- message.as_summary_lines() → list[str] — Generate per-message summaries\n- part.as_summary_lines() → list[str] — Generate per-part summaries (text, tool_use, reasoning, turn_start, turn_end, patch, file, subagent)\n\n## Overview\n\n”Why do code agents make great company? They do not, unless they have persistent memory about your relationship.” - David Bernat\n\nLogBuilder enables persistent memory for code agents—storing, searching, and resuming prior sessions. It provides random access to specific messages, tool calls, or file modifications without loading entire sessions—ideal for memory systems that query session history by keywords, timestamps, or metadata. The package also powers skills-manufacturing: extracting patterns from first-shot human-agent interactions to dynamically create new skills or automated workflows. Together, these capabilities form the foundation for session persistence, context-aware resumption, and autonomous skill generation.\n\nOpenCode LogBuilder provides utilities to load, parse, and back up OpenCode agentic session logs into Python dataclasses for analysis, persistence, and machine-readable processing. Sessions are loaded from the standard OpenCode storage directory (~/.local/share/opencode/) and hydrated into structured objects containing messages, workflow todos, and file modifications. The as_summary_lines() method on Session, Message, and Part dataclasses produces grep-friendly text summaries that enable downstream applications—such as memory persistence layers, on-demand session retrieval by third-party tools, or lightweight dashboards—to parse session data without incurring the cost of full hydration. This is critical for users who need lightweight session metadata for debugging, logging, or integration with external systems.\n\nThe package includes extensible data models for all OpenCode message part types (OpenCodeText, OpenCodeTool, OpenCodeToolTask, OpenCodeReasoning, OpenCodeTurnStart, OpenCodeTurnEnd, OpenCodePatch, OpenCodeFile, OpenCodeSubAgent). The OpenCodeTool class can be extended via inheritance to handle specialized tool types—for example, OpenCodeToolTask inherits from OpenCodeTool to capture subagent session metadata (spawned_session_id, model, provider, spawned_tools). Additional tool-specific subclasses can be added by mapping the tool name in the _oc_name class attribute and extending the _keys mapping. The ._hooks_for_additional_summary_lines attribute provides a mechanism to extend summary output per-instance with custom information, enabling third-party integrations to inject derived information into the summary generation pipeline.\n\n## Session Logs Summary Example\n\n\nIronically, a very serious longstanding violation of OpenCode managing its session logging \nhas led to several critical bugs deleting, and not forming, all Starlight LLC logs since \nFebruary 14, 2026, in an effect we are affectionately calling the Valentine's Day ELI.\nUntil we get those back up and running the enjoyment of the jokes we put in here are\nlost to you the reader. So did you lose, or did they lose? I like to saw a little bit of both.\n\n\none of several bug reports sent to opencode\n\n## How Agentic LLMs Use This Package\n\n### Import\n\npython\nfrom opencodeo.core.opencode.LogBuilder import LogBuilder, LogMigrator\nfrom opencodeo.core.opencode.OpenCodeDataModels import Session, Project, AssistantMessage, UserMessage\n\n\n### Access Sessions\n\npython\n# Discover all projects in default storage\nprojects = LogBuilder.retrieve_projects()\n\n# Load all sessions, optionally hydrated with messages and todos\nsessions = LogBuilder.project_retrieve_sessions(projects, hydrate=True)\n\n# Or load a specific session by ID\nsession = LogBuilder.load_session(\"ses_abc123\", \"~/.local/share/opencode/\", hydrate=True)\n\n\n### Generate Summaries\n\npython\n# Get machine-readable session summary\nsummary_lines = session.as_summary_lines()\nprint(\"\\n\".join(summary_lines))\n\n# Iterate messages and parts\nfor message in session.messages:\n for part in message.parts:\n print(\"\\n\".join(part.as_summary_lines()))\n\n\n### Archive Sessions\n\npython\n# Migrate session to backup directory\nto_dir = LogMigrator.migrate_one_session_log_to_new_directory(\n session,\n original_log_dir=\"~/.local/share/opencode/\",\n new_base_dir=\"/path/to/backups/\"\n)\n\n# Then load from the archived location\narchived_session = LogBuilder.load_session(session.session_id, to_dir, hydrate=True)\n\n\n### Query Patterns\n\npython\n# Find sessions by project\nfor session in sessions:\n if session.project.project_id == target_project_id:\n # process session\n\n# Find messages containing specific tool calls\nfor message in session.messages:\n if isinstance(message, AssistantMessage):\n for part in message.parts:\n if hasattr(part, 'name') and part.name == 'bash':\n # log or process tool call\n\n# Access file modifications\nfor diff in session.file_diffs:\n print(f\"{diff.filename}: {diff.content_before[:100]} -> {diff.content_after[:100]}\")\n\n\n## File Locations\n\n- Default storage: ~/.local/share/opencode/\n- Project JSON: storage/project/{project_id}.json\n- Session JSON: storage/session/{project_id}/{session_id}.json\n- Messages: storage/message/{session_id}/msg_*.json\n- Parts: storage/part/{message_id}/prt_*.json\n- Todos: storage/todo/{session_id}.json\n- File diffs: storage/session_diff/{session_id}.json\n- Tool outputs: tool-output/tool_*.txt (if truncated)”,“closed_by”:null,“reactions”:{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23901/reactions”,“total_count”:0,“+1”:0,“-1”:0,“laugh”:0,“hooray”:0,“confused”:0,“heart”:0,“rocket”:0,“eyes”:0},“timeline_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23901/timeline”,“performed_via_github_app”:null,“state_reason”:null,“pinned_comment”:null},{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23900”,“repository_url”:“https://api.github.com/repos/anomalyco/opencode”,“labels_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23900/labels{/name}”,“comments_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23900/comments”,“events_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23900/events”,“html_url”:“https://github.com/anomalyco/opencode/issues/23900”,“id”:4311456851,“node_id”:“I_kwDOOiiGL88AAAABAPucUw”,“number”:23900,“title”:“Cannot connect to API when LM Host is a remote host”,“user”:{“login”:“drcursor”,“id”:1838337,“node_id”:“MDQ6VXNlcjE4MzgzMzc=”,“avatar_url”:“https://avatars.githubusercontent.com/u/1838337?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/drcursor”,“html_url”:“https://github.com/drcursor”,“followers_url”:“https://api.github.com/users/drcursor/followers”,“following_url”:“https://api.github.com/users/drcursor/following{/other_user}”,“gists_url”:“https://api.github.com/users/drcursor/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/drcursor/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/drcursor/subscriptions”,“organizations_url”:“https://api.github.com/users/drcursor/orgs”,“repos_url”:“https://api.github.com/users/drcursor/repos”,“events_url”:“https://api.github.com/users/drcursor/events{/privacy}”,“received_events_url”:“https://api.github.com/users/drcursor/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“labels”:[{“id”:8542148739,“node_id”:“LA_kwDOOiiGL88AAAAB_SbYgw”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/bug”,“name”:“bug”,“color”:“d73a4a”,“default”:true,“description”:“Something isn’t working”}],“state”:“open”,“locked”:false,“assignees”:[],“milestone”:null,“comments”:0,“created_at”:“2026-04-22T19:45:08Z”,“updated_at”:“2026-04-22T19:45:08Z”,“closed_at”:null,“assignee”:null,“author_association”:“NONE”,“issue_field_values”:[],“type”:null,“active_lock_reason”:null,“sub_issues_summary”:{“total”:0,“completed”:0,“percent_completed”:0},“issue_dependencies_summary”:{“blocked_by”:0,“total_blocked_by”:0,“blocking”:0,“total_blocking”:0},“body”:”### Description\n\nCan’t use LM Studio from other host. \nIf I forward the port to localhost it works without any issue.\n\n### Plugins\n\n_No response\n\n### OpenCode version\n\n1.14.20\n\n### Steps to reproduce\n\n1. Configure LM Studio to accept network connections\n2. Configure LM Studio provider with any of the following URLs “baseURL”: “http://192.168.0.100:1234/v1”, “http://192.168.0.100:1234/api/v1”, “http://hostname:1234/v1”, “http://hostname:1234/api/v1”\n3. When using any model from that provider, you receive the following error “Cannot connect to API: Was there a typo in the url or port? [retrying in 3s “\n4. Check that curl can access any of the URLs above (it can)\n5. Port forward the port localhost:1234, change config, everything works.\n\n\n### Screenshot and/or share link\n\n_No response_\n\n### Operating System\n\nOpenCode on MacOS LM Studio on Windows 11\n\n### Terminal\n\n_No response_”,“closed_by”:null,“reactions”:{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23900/reactions”,“total_count”:0,“+1”:0,“-1”:0,“laugh”:0,“hooray”:0,“confused”:0,“heart”:0,“rocket”:0,“eyes”:0},“timeline_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23900/timeline”,“performed_via_github_app”:null,“state_reason”:null,“pinned_comment”:null},{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23899”,“repository_url”:“https://api.github.com/repos/anomalyco/opencode”,“labels_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23899/labels{/name}”,“comments_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23899/comments”,“events_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23899/events”,“html_url”:“https://github.com/anomalyco/opencode/issues/23899”,“id”:4311374700,“node_id”:“I_kwDOOiiGL88AAAABAPpbbA”,“number”:23899,“title”:“[BUG] OpenCode not storing logs as properly configured.”,“user”:{“login”:“davidbernat”,“id”:5396131,“node_id”:“MDQ6VXNlcjUzOTYxMzE=”,“avatar_url”:“https://avatars.githubusercontent.com/u/5396131?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/davidbernat”,“html_url”:“https://github.com/davidbernat”,“followers_url”:“https://api.github.com/users/davidbernat/followers”,“following_url”:“https://api.github.com/users/davidbernat/following{/other_user}”,“gists_url”:“https://api.github.com/users/davidbernat/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/davidbernat/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/davidbernat/subscriptions”,“organizations_url”:“https://api.github.com/users/davidbernat/orgs”,“repos_url”:“https://api.github.com/users/davidbernat/repos”,“events_url”:“https://api.github.com/users/davidbernat/events{/privacy}”,“received_events_url”:“https://api.github.com/users/davidbernat/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“labels”:[{“id”:8542148739,“node_id”:“LA_kwDOOiiGL88AAAAB_SbYgw”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/bug”,“name”:“bug”,“color”:“d73a4a”,“default”:true,“description”:“Something isn’t working”},{“id”:9835881465,“node_id”:“LA_kwDOOiiGL88AAAACSkOj-Q”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/core”,“name”:“core”,“color”:“1b6ea3”,“default”:false,“description”:“Anything pertaining to core functionality of the application (opencode server stuff)”}],“state”:“open”,“locked”:false,“assignees”:[{“login”:“rekram1-node”,“id”:63023139,“node_id”:“MDQ6VXNlcjYzMDIzMTM5”,“avatar_url”:“https://avatars.githubusercontent.com/u/63023139?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/rekram1-node”,“html_url”:“https://github.com/rekram1-node”,“followers_url”:“https://api.github.com/users/rekram1-node/followers”,“following_url”:“https://api.github.com/users/rekram1-node/following{/other_user}”,“gists_url”:“https://api.github.com/users/rekram1-node/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/rekram1-node/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/rekram1-node/subscriptions”,“organizations_url”:“https://api.github.com/users/rekram1-node/orgs”,“repos_url”:“https://api.github.com/users/rekram1-node/repos”,“events_url”:“https://api.github.com/users/rekram1-node/events{/privacy}”,“received_events_url”:“https://api.github.com/users/rekram1-node/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false}],“milestone”:null,“comments”:2,“created_at”:“2026-04-22T19:27:18Z”,“updated_at”:“2026-04-22T20:54:22Z”,“closed_at”:null,“assignee”:{“login”:“rekram1-node”,“id”:63023139,“node_id”:“MDQ6VXNlcjYzMDIzMTM5”,“avatar_url”:“https://avatars.githubusercontent.com/u/63023139?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/rekram1-node”,“html_url”:“https://github.com/rekram1-node”,“followers_url”:“https://api.github.com/users/rekram1-node/followers”,“following_url”:“https://api.github.com/users/rekram1-node/following{/other_user}”,“gists_url”:“https://api.github.com/users/rekram1-node/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/rekram1-node/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/rekram1-node/subscriptions”,“organizations_url”:“https://api.github.com/users/rekram1-node/orgs”,“repos_url”:“https://api.github.com/users/rekram1-node/repos”,“events_url”:“https://api.github.com/users/rekram1-node/events{/privacy}”,“received_events_url”:“https://api.github.com/users/rekram1-node/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“author_association”:“NONE”,“issue_field_values”:[],“type”:null,“active_lock_reason”:null,“sub_issues_summary”:{“total”:0,“completed”:0,“percent_completed”:0},“issue_dependencies_summary”:{“blocked_by”:0,“total_blocked_by”:0,“blocking”:0,“total_blocking”:0},“body”:”### Description\n\nWe declared this spoliation in previous requests, and now we see this action by OpenCode is far graver. \n\nWe look forward to your swift addressing of this problem I ran into yet again with your investors’ & companies.\nThis is a direct message to Dax Raad. Looking forward to one-on-one chat with you, even if this error is ours. xo.\n<img width=“779” height=“290” alt=“Image” src=“https://github.com/user-attachments/assets/0df20e14-759d-4efb-97ba-f5aeb7dbe699” />\n\n### Plugins\n\nNone\n\n### OpenCode version\n\nv1.4.10\n\n### Steps to reproduce\n\nOpen OpenCode.\nUse OpenCode.\nGet session_id.\nSearch filesystems via find . -- name \"*{session_id}*\".\nReinstall OpenCode.\nFresh directories. \nProbably has persisted for 2 months. \n\n### Screenshot and/or share link\n\n### Operating System\n\nMacOS Neo\n\n### Terminal\n\nTerminal & IntelliJ\n\nPlease address the situation as though the world is watching Why.”,“closed_by”:null,“reactions”:{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23899/reactions”,“total_count”:0,“+1”:0,“-1”:0,“laugh”:0,“hooray”:0,“confused”:0,“heart”:0,“rocket”:0,“eyes”:0},“timeline_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23899/timeline”,“performed_via_github_app”:null,“state_reason”:null,“pinned_comment”:null},{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23897”,“repository_url”:“https://api.github.com/repos/anomalyco/opencode”,“labels_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23897/labels{/name}”,“comments_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23897/comments”,“events_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23897/events”,“html_url”:“https://github.com/anomalyco/opencode/issues/23897”,“id”:4311150927,“node_id”:“I_kwDOOiiGL88AAAABAPbxTw”,“number”:23897,“title”:“[Bug] Ctrl+D keybind ignored during question tool — treated as cancel instead of mapped action”,“user”:{“login”:“oribarilan”,“id”:8760762,“node_id”:“MDQ6VXNlcjg3NjA3NjI=”,“avatar_url”:“https://avatars.githubusercontent.com/u/8760762?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/oribarilan”,“html_url”:“https://github.com/oribarilan”,“followers_url”:“https://api.github.com/users/oribarilan/followers”,“following_url”:“https://api.github.com/users/oribarilan/following{/other_user}”,“gists_url”:“https://api.github.com/users/oribarilan/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/oribarilan/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/oribarilan/subscriptions”,“organizations_url”:“https://api.github.com/users/oribarilan/orgs”,“repos_url”:“https://api.github.com/users/oribarilan/repos”,“events_url”:“https://api.github.com/users/oribarilan/events{/privacy}”,“received_events_url”:“https://api.github.com/users/oribarilan/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“labels”:[],“state”:“open”,“locked”:false,“assignees”:[],“milestone”:null,“comments”:2,“created_at”:“2026-04-22T18:45:07Z”,“updated_at”:“2026-04-22T18:50:38Z”,“closed_at”:null,“assignee”:null,“author_association”:“CONTRIBUTOR”,“issue_field_values”:[],“type”:null,“active_lock_reason”:null,“sub_issues_summary”:{“total”:0,“completed”:0,“percent_completed”:0},“issue_dependencies_summary”:{“blocked_by”:0,“total_blocked_by”:0,“blocking”:0,“total_blocking”:0},“body”:“I remapped messages_half_page_down to ctrl+d in tui.json:\n\njson\n{\n \"keybinds\": {\n \"messages_half_page_up\": \"ctrl+u\",\n \"messages_half_page_down\": \"ctrl+d\"\n }\n}\n\n\nctrl+u works fine everywhere, including while a question tool prompt is active — I can scroll up through the conversation while picking an answer. ctrl+d cancels the question prompt instead of scrolling down. The remap is ignored.\n\nI think the question widget has a hardcoded handler for 0x04 (ctrl+d) that fires before the keybind config is checked. The TUI runs in raw mode so terminal EOF semantics aren’t the issue — it’s the app interpreting the byte directly.\n\nNeovim gets this right — it reads raw bytes, checks the keymap first, and only falls back to defaults when there’s no user mapping. So if you remap <C-d>, it means what you told it to mean regardless of which mode or widget has focus. Same idea would work here: check the keybind config before the question component decides ctrl+d means “cancel”.\n\nEnvironment:\n- opencode 1.14.20\n- macOS”,“closed_by”:null,“reactions”:{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23897/reactions”,“total_count”:0,“+1”:0,“-1”:0,“laugh”:0,“hooray”:0,“confused”:0,“heart”:0,“rocket”:0,“eyes”:0},“timeline_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23897/timeline”,“performed_via_github_app”:null,“state_reason”:null,“pinned_comment”:null},{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23896”,“repository_url”:“https://api.github.com/repos/anomalyco/opencode”,“labels_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23896/labels{/name}”,“comments_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23896/comments”,“events_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23896/events”,“html_url”:“https://github.com/anomalyco/opencode/issues/23896”,“id”:4310916356,“node_id”:“I_kwDOOiiGL88AAAABAPNdBA”,“number”:23896,“title”:“[FEATURE]: Prevent sidebar disappearing when resizing the window”,“user”:{“login”:“Wdits”,“id”:123775432,“node_id”:“U_kgDOB2CpyA”,“avatar_url”:“https://avatars.githubusercontent.com/u/123775432?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/Wdits”,“html_url”:“https://github.com/Wdits”,“followers_url”:“https://api.github.com/users/Wdits/followers”,“following_url”:“https://api.github.com/users/Wdits/following{/other_user}”,“gists_url”:“https://api.github.com/users/Wdits/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/Wdits/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/Wdits/subscriptions”,“organizations_url”:“https://api.github.com/users/Wdits/orgs”,“repos_url”:“https://api.github.com/users/Wdits/repos”,“events_url”:“https://api.github.com/users/Wdits/events{/privacy}”,“received_events_url”:“https://api.github.com/users/Wdits/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“labels”:[{“id”:9496536813,“node_id”:“LA_kwDOOiiGL88AAAACNgmm7Q”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/discussion”,“name”:“discussion”,“color”:“0e8a16”,“default”:false,“description”:“Used for feature requests, proposals, ideas, etc. Open discussion”},{“id”:9578754464,“node_id”:“LA_kwDOOiiGL88AAAACOvAxoA”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/web”,“name”:“web”,“color”:“5fd4dc”,“default”:false,“description”:“Relates to opencode on web / desktop”}],“state”:“open”,“locked”:false,“assignees”:[{“login”:“iamdavidhill”,“id”:1879069,“node_id”:“MDQ6VXNlcjE4NzkwNjk=”,“avatar_url”:“https://avatars.githubusercontent.com/u/1879069?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/iamdavidhill”,“html_url”:“https://github.com/iamdavidhill”,“followers_url”:“https://api.github.com/users/iamdavidhill/followers”,“following_url”:“https://api.github.com/users/iamdavidhill/following{/other_user}”,“gists_url”:“https://api.github.com/users/iamdavidhill/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/iamdavidhill/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/iamdavidhill/subscriptions”,“organizations_url”:“https://api.github.com/users/iamdavidhill/orgs”,“repos_url”:“https://api.github.com/users/iamdavidhill/repos”,“events_url”:“https://api.github.com/users/iamdavidhill/events{/privacy}”,“received_events_url”:“https://api.github.com/users/iamdavidhill/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false}],“milestone”:null,“comments”:1,“created_at”:“2026-04-22T18:01:52Z”,“updated_at”:“2026-04-22T18:03:38Z”,“closed_at”:null,“assignee”:{“login”:“iamdavidhill”,“id”:1879069,“node_id”:“MDQ6VXNlcjE4NzkwNjk=”,“avatar_url”:“https://avatars.githubusercontent.com/u/1879069?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/iamdavidhill”,“html_url”:“https://github.com/iamdavidhill”,“followers_url”:“https://api.github.com/users/iamdavidhill/followers”,“following_url”:“https://api.github.com/users/iamdavidhill/following{/other_user}”,“gists_url”:“https://api.github.com/users/iamdavidhill/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/iamdavidhill/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/iamdavidhill/subscriptions”,“organizations_url”:“https://api.github.com/users/iamdavidhill/orgs”,“repos_url”:“https://api.github.com/users/iamdavidhill/repos”,“events_url”:“https://api.github.com/users/iamdavidhill/events{/privacy}”,“received_events_url”:“https://api.github.com/users/iamdavidhill/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“author_association”:“NONE”,“issue_field_values”:[],“type”:null,“active_lock_reason”:null,“sub_issues_summary”:{“total”:0,“completed”:0,“percent_completed”:0},“issue_dependencies_summary”:{“blocked_by”:0,“total_blocked_by”:0,“blocking”:0,“total_blocking”:0},“body”:”### Feature hasn’t been suggested before.\n\n- [x] I have verified this feature I’m about to request hasn’t been suggested before.\n\n### Describe the enhancement you want to request\n\nCurrently, when you resize the Desktop App window, the left sidebar disappears and shows this ugly sandwich mode for no apparent reason when there’s still plenty space left.\n<img width=“67” height=“62” alt=“Image” src=“https://github.com/user-attachments/assets/9753eaeb-1548-49e8-b877-1a1e6afe4d11” />\n\n<img width=“287” height=“686” alt=“Image” src=“https://github.com/user-attachments/assets/26752949-a265-454a-a286-3c2971ada3b7” />”,“closed_by”:null,“reactions”:{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23896/reactions”,“total_count”:0,“+1”:0,“-1”:0,“laugh”:0,“hooray”:0,“confused”:0,“heart”:0,“rocket”:0,“eyes”:0},“timeline_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23896/timeline”,“performed_via_github_app”:null,“state_reason”:null,“pinned_comment”:null},{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23895”,“repository_url”:“https://api.github.com/repos/anomalyco/opencode”,“labels_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23895/labels{/name}”,“comments_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23895/comments”,“events_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23895/events”,“html_url”:“https://github.com/anomalyco/opencode/issues/23895”,“id”:4310900079,“node_id”:“I_kwDOOiiGL88AAAABAPMdbw”,“number”:23895,“title”:“Invalid string: must match pattern /^#[0-9a-fA-F]{6}$/ color”,“user”:{“login”:“im10furry”,“id”:135334060,“node_id”:“U_kgDOCBEIrA”,“avatar_url”:“https://avatars.githubusercontent.com/u/135334060?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/im10furry”,“html_url”:“https://github.com/im10furry”,“followers_url”:“https://api.github.com/users/im10furry/followers”,“following_url”:“https://api.github.com/users/im10furry/following{/other_user}”,“gists_url”:“https://api.github.com/users/im10furry/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/im10furry/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/im10furry/subscriptions”,“organizations_url”:“https://api.github.com/users/im10furry/orgs”,“repos_url”:“https://api.github.com/users/im10furry/repos”,“events_url”:“https://api.github.com/users/im10furry/events{/privacy}”,“received_events_url”:“https://api.github.com/users/im10furry/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“labels”:[{“id”:8542148739,“node_id”:“LA_kwDOOiiGL88AAAAB_SbYgw”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/bug”,“name”:“bug”,“color”:“d73a4a”,“default”:true,“description”:“Something isn’t working”},{“id”:9502448928,“node_id”:“LA_kwDOOiiGL88AAAACNmPdIA”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/windows”,“name”:“windows”,“color”:“fca1db”,“default”:false,“description”:""},{“id”:9835881465,“node_id”:“LA_kwDOOiiGL88AAAACSkOj-Q”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/core”,“name”:“core”,“color”:“1b6ea3”,“default”:false,“description”:“Anything pertaining to core functionality of the application (opencode server stuff)”}],“state”:“open”,“locked”:false,“assignees”:[{“login”:“thdxr”,“id”:826656,“node_id”:“MDQ6VXNlcjgyNjY1Ng==”,“avatar_url”:“https://avatars.githubusercontent.com/u/826656?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/thdxr”,“html_url”:“https://github.com/thdxr”,“followers_url”:“https://api.github.com/users/thdxr/followers”,“following_url”:“https://api.github.com/users/thdxr/following{/other_user}”,“gists_url”:“https://api.github.com/users/thdxr/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/thdxr/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/thdxr/subscriptions”,“organizations_url”:“https://api.github.com/users/thdxr/orgs”,“repos_url”:“https://api.github.com/users/thdxr/repos”,“events_url”:“https://api.github.com/users/thdxr/events{/privacy}”,“received_events_url”:“https://api.github.com/users/thdxr/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false}],“milestone”:null,“comments”:3,“created_at”:“2026-04-22T17:58:50Z”,“updated_at”:“2026-04-22T18:21:25Z”,“closed_at”:null,“assignee”:{“login”:“thdxr”,“id”:826656,“node_id”:“MDQ6VXNlcjgyNjY1Ng==”,“avatar_url”:“https://avatars.githubusercontent.com/u/826656?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/thdxr”,“html_url”:“https://github.com/thdxr”,“followers_url”:“https://api.github.com/users/thdxr/followers”,“following_url”:“https://api.github.com/users/thdxr/following{/other_user}”,“gists_url”:“https://api.github.com/users/thdxr/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/thdxr/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/thdxr/subscriptions”,“organizations_url”:“https://api.github.com/users/thdxr/orgs”,“repos_url”:“https://api.github.com/users/thdxr/repos”,“events_url”:“https://api.github.com/users/thdxr/events{/privacy}”,“received_events_url”:“https://api.github.com/users/thdxr/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“author_association”:“NONE”,“issue_field_values”:[],“type”:null,“active_lock_reason”:null,“sub_issues_summary”:{“total”:0,“completed”:0,“percent_completed”:0},“issue_dependencies_summary”:{“blocked_by”:0,“total_blocked_by”:0,“blocking”:0,“total_blocking”:0},“body”:”### Description\n\nConfiguration is invalid at C:\.opencode\agents\testing\testing-tool-evaluator.md\n↳ Invalid string: must match pattern /^#[0-9a-fA-F]{6}$/ color\n\n### Plugins\n\nWindows and npm \n\n### OpenCode version\n\n1.14.20\n\n### Steps to reproduce\n\n_No response_\n\n### Screenshot and/or share link\n\n_No response_\n\n### Operating System\n\n_No response_\n\n### Terminal\n\n_No response_”,“closed_by”:null,“reactions”:{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23895/reactions”,“total_count”:0,“+1”:0,“-1”:0,“laugh”:0,“hooray”:0,“confused”:0,“heart”:0,“rocket”:0,“eyes”:0},“timeline_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23895/timeline”,“performed_via_github_app”:null,“state_reason”:null,“pinned_comment”:null},{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23894”,“repository_url”:“https://api.github.com/repos/anomalyco/opencode”,“labels_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23894/labels{/name}”,“comments_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23894/comments”,“events_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23894/events”,“html_url”:“https://github.com/anomalyco/opencode/issues/23894”,“id”:4310896470,“node_id”:“I_kwDOOiiGL88AAAABAPMPVg”,“number”:23894,“title”:“UI freezes with infinite POST /tui/show-toast loop after type any prompt”,“user”:{“login”:“kevinxinzhao”,“id”:5415304,“node_id”:“MDQ6VXNlcjU0MTUzMDQ=”,“avatar_url”:“https://avatars.githubusercontent.com/u/5415304?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/kevinxinzhao”,“html_url”:“https://github.com/kevinxinzhao”,“followers_url”:“https://api.github.com/users/kevinxinzhao/followers”,“following_url”:“https://api.github.com/users/kevinxinzhao/following{/other_user}”,“gists_url”:“https://api.github.com/users/kevinxinzhao/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/kevinxinzhao/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/kevinxinzhao/subscriptions”,“organizations_url”:“https://api.github.com/users/kevinxinzhao/orgs”,“repos_url”:“https://api.github.com/users/kevinxinzhao/repos”,“events_url”:“https://api.github.com/users/kevinxinzhao/events{/privacy}”,“received_events_url”:“https://api.github.com/users/kevinxinzhao/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“labels”:[{“id”:8542148739,“node_id”:“LA_kwDOOiiGL88AAAAB_SbYgw”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/bug”,“name”:“bug”,“color”:“d73a4a”,“default”:true,“description”:“Something isn’t working”},{“id”:9549130930,“node_id”:“LA_kwDOOiiGL88AAAACOSwssg”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/perf”,“name”:“perf”,“color”:“5575ee”,“default”:false,“description”:“Indicates a performance issue or need for optimization”},{“id”:9835881465,“node_id”:“LA_kwDOOiiGL88AAAACSkOj-Q”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/core”,“name”:“core”,“color”:“1b6ea3”,“default”:false,“description”:“Anything pertaining to core functionality of the application (opencode server stuff)”}],“state”:“open”,“locked”:false,“assignees”:[{“login”:“rekram1-node”,“id”:63023139,“node_id”:“MDQ6VXNlcjYzMDIzMTM5”,“avatar_url”:“https://avatars.githubusercontent.com/u/63023139?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/rekram1-node”,“html_url”:“https://github.com/rekram1-node”,“followers_url”:“https://api.github.com/users/rekram1-node/followers”,“following_url”:“https://api.github.com/users/rekram1-node/following{/other_user}”,“gists_url”:“https://api.github.com/users/rekram1-node/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/rekram1-node/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/rekram1-node/subscriptions”,“organizations_url”:“https://api.github.com/users/rekram1-node/orgs”,“repos_url”:“https://api.github.com/users/rekram1-node/repos”,“events_url”:“https://api.github.com/users/rekram1-node/events{/privacy}”,“received_events_url”:“https://api.github.com/users/rekram1-node/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false}],“milestone”:null,“comments”:0,“created_at”:“2026-04-22T17:58:12Z”,“updated_at”:“2026-04-22T17:59:17Z”,“closed_at”:null,“assignee”:{“login”:“rekram1-node”,“id”:63023139,“node_id”:“MDQ6VXNlcjYzMDIzMTM5”,“avatar_url”:“https://avatars.githubusercontent.com/u/63023139?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/rekram1-node”,“html_url”:“https://github.com/rekram1-node”,“followers_url”:“https://api.github.com/users/rekram1-node/followers”,“following_url”:“https://api.github.com/users/rekram1-node/following{/other_user}”,“gists_url”:“https://api.github.com/users/rekram1-node/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/rekram1-node/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/rekram1-node/subscriptions”,“organizations_url”:“https://api.github.com/users/rekram1-node/orgs”,“repos_url”:“https://api.github.com/users/rekram1-node/repos”,“events_url”:“https://api.github.com/users/rekram1-node/events{/privacy}”,“received_events_url”:“https://api.github.com/users/rekram1-node/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“author_association”:“NONE”,“issue_field_values”:[],“type”:null,“active_lock_reason”:null,“sub_issues_summary”:{“total”:0,“completed”:0,“percent_completed”:0},“issue_dependencies_summary”:{“blocked_by”:0,“total_blocked_by”:0,“blocking”:0,“total_blocking”:0},“body”:”### Description\n\nDescription\n\n After running the /mcp command (list MCP servers) in a session, the UI becomes completely\n unresponsive. No further input is processed. The only workaround is to restart opencode.\n\n\n Expected Behavior\n\n The MCP list is displayed and the UI remains responsive.\n\n Actual Behavior\n\n The UI freezes. Inspecting the log shows POST /tui/show-toast being called in an infinite\n loop every ~100ms, locking up the entire interface.\n\n Environment\n\n - opencode version: 1.14.20\n - OS: macOS Darwin 25.3.0\n - Number of MCP servers configured: 20+\n\n Log Excerpt\n\n The toast loop begins immediately after MCP initialization completes (line 255 onward):\n\n INFO 2026-04-22T17:47:58 +18ms service=mcp key=airbnb-core toolCount=7 create()\n successfully created client\n INFO 2026-04-22T17:47:58 +43ms service=mcp key=ship toolCount=50 create() successfully\n created client\n INFO 2026-04-22T17:47:59 +13ms service=mcp key=diagnose toolCount=41 create() successfully\n created client\n INFO 2026-04-22T17:47:59 +37ms service=mcp key=oneflow toolCount=17 create() successfully\n created client\n INFO 2026-04-22T17:48:01 +2ms service=server status=completed duration=4141 method=GET\n path=/mcp request\n ERROR 2026-04-22T17:48:01 +1ms service=mcp clientName=re-mcp error=MCP error -32601:\n resources not supported failed to get resources\n ERROR 2026-04-22T17:48:01 +0ms service=mcp clientName=re-mcp error=MCP error -32601:\n prompts not supported failed to get prompts\n ERROR 2026-04-22T17:48:01 +0ms service=mcp clientName=chrome-devtools error=MCP error\n -32601: Method not found failed to get resources\n ERROR 2026-04-22T17:48:01 +0ms service=mcp clientName=chrome-devtools error=MCP error\n -32601: Method not found failed to get prompts\n ERROR 2026-04-22T17:48:01 +0ms service=mcp clientName=playwright error=MCP error -32601:\n Method not found failed to get resources\n …\n INFO 2026-04-22T17:48:00 +147ms service=server method=POST path=/tui/show-toast request\n INFO 2026-04-22T17:48:00 +0ms service=server status=started method=POST\n path=/tui/show-toast request\n INFO 2026-04-22T17:48:00 +1ms service=bus type=tui.toast.show publishing\n INFO 2026-04-22T17:48:00 +0ms service=server status=completed duration=1 method=POST\n path=/tui/show-toast request\n INFO 2026-04-22T17:48:00 +83ms service=server method=POST path=/tui/show-toast request\n INFO 2026-04-22T17:48:00 +0ms service=server status=started method=POST\n path=/tui/show-toast request\n INFO 2026-04-22T17:48:00 +1ms service=bus type=tui.toast.show publishing\n INFO 2026-04-22T17:48:00 +0ms service=server status=completed duration=2 method=POST\n path=/tui/show-toast request\n INFO 2026-04-22T17:48:00 +100ms service=server method=POST path=/tui/show-toast request\n … [repeats indefinitely every ~100ms]\n\n Hypothesis\n\n Each MCP error (-32601: Method not found for resources/list and prompts/list) may be\n triggering a toast notification, and the toast display loop itself is not rate-limited or\n deduplicated, causing it to spin indefinitely.\n\n### Plugins\n\noh-my-openagent + superpowers\n\n### OpenCode version\n\n1.14.20\n\n### Steps to reproduce\n\n Steps to Reproduce\n\n 1. Open opencode in a project directory with many MCP servers configured\n 2. Type /mcp (list MCP) in the prompt\n 3. Wait for MCP servers to initialize\n 4. UI becomes unresponsive — no further prompts are processed\n\n### Screenshot and/or share link\n\n<img width=“752” height=“1040” alt=“Image” src=“https://github.com/user-attachments/assets/df7f56af-e07b-4deb-9df6-02a88a0a173e” />\n\n### Operating System\n\nmac os\n\n### Terminal\n\nghostty”,“closed_by”:null,“reactions”:{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23894/reactions”,“total_count”:0,“+1”:0,“-1”:0,“laugh”:0,“hooray”:0,“confused”:0,“heart”:0,“rocket”:0,“eyes”:0},“timeline_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23894/timeline”,“performed_via_github_app”:null,“state_reason”:null,“pinned_comment”:null},{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23893”,“repository_url”:“https://api.github.com/repos/anomalyco/opencode”,“labels_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23893/labels{/name}”,“comments_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23893/comments”,“events_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23893/events”,“html_url”:“https://github.com/anomalyco/opencode/issues/23893”,“id”:4310800083,“node_id”:“I_kwDOOiiGL88AAAABAPGW0w”,“number”:23893,“title”:“[FEATURE]: Sort model providers alphabetically”,“user”:{“login”:“kunningKing11”,“id”:150028328,“node_id”:“U_kgDOCPFAKA”,“avatar_url”:“https://avatars.githubusercontent.com/u/150028328?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/kunningKing11”,“html_url”:“https://github.com/kunningKing11”,“followers_url”:“https://api.github.com/users/kunningKing11/followers”,“following_url”:“https://api.github.com/users/kunningKing11/following{/other_user}”,“gists_url”:“https://api.github.com/users/kunningKing11/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/kunningKing11/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/kunningKing11/subscriptions”,“organizations_url”:“https://api.github.com/users/kunningKing11/orgs”,“repos_url”:“https://api.github.com/users/kunningKing11/repos”,“events_url”:“https://api.github.com/users/kunningKing11/events{/privacy}”,“received_events_url”:“https://api.github.com/users/kunningKing11/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“labels”:[{“id”:9496536813,“node_id”:“LA_kwDOOiiGL88AAAACNgmm7Q”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/discussion”,“name”:“discussion”,“color”:“0e8a16”,“default”:false,“description”:“Used for feature requests, proposals, ideas, etc. Open discussion”},{“id”:9835881465,“node_id”:“LA_kwDOOiiGL88AAAACSkOj-Q”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/core”,“name”:“core”,“color”:“1b6ea3”,“default”:false,“description”:“Anything pertaining to core functionality of the application (opencode server stuff)”}],“state”:“open”,“locked”:false,“assignees”:[{“login”:“rekram1-node”,“id”:63023139,“node_id”:“MDQ6VXNlcjYzMDIzMTM5”,“avatar_url”:“https://avatars.githubusercontent.com/u/63023139?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/rekram1-node”,“html_url”:“https://github.com/rekram1-node”,“followers_url”:“https://api.github.com/users/rekram1-node/followers”,“following_url”:“https://api.github.com/users/rekram1-node/following{/other_user}”,“gists_url”:“https://api.github.com/users/rekram1-node/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/rekram1-node/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/rekram1-node/subscriptions”,“organizations_url”:“https://api.github.com/users/rekram1-node/orgs”,“repos_url”:“https://api.github.com/users/rekram1-node/repos”,“events_url”:“https://api.github.com/users/rekram1-node/events{/privacy}”,“received_events_url”:“https://api.github.com/users/rekram1-node/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false}],“milestone”:null,“comments”:1,“created_at”:“2026-04-22T17:41:00Z”,“updated_at”:“2026-04-22T17:42:23Z”,“closed_at”:null,“assignee”:{“login”:“rekram1-node”,“id”:63023139,“node_id”:“MDQ6VXNlcjYzMDIzMTM5”,“avatar_url”:“https://avatars.githubusercontent.com/u/63023139?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/rekram1-node”,“html_url”:“https://github.com/rekram1-node”,“followers_url”:“https://api.github.com/users/rekram1-node/followers”,“following_url”:“https://api.github.com/users/rekram1-node/following{/other_user}”,“gists_url”:“https://api.github.com/users/rekram1-node/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/rekram1-node/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/rekram1-node/subscriptions”,“organizations_url”:“https://api.github.com/users/rekram1-node/orgs”,“repos_url”:“https://api.github.com/users/rekram1-node/repos”,“events_url”:“https://api.github.com/users/rekram1-node/events{/privacy}”,“received_events_url”:“https://api.github.com/users/rekram1-node/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“author_association”:“NONE”,“issue_field_values”:[],“type”:null,“active_lock_reason”:null,“sub_issues_summary”:{“total”:0,“completed”:0,“percent_completed”:0},“issue_dependencies_summary”:{“blocked_by”:0,“total_blocked_by”:0,“blocking”:0,“total_blocking”:0},“body”:”### Feature hasn’t been suggested before.\n\n- [x] I have verified this feature I’m about to request hasn’t been suggested before.\n\n### Describe the enhancement you want to request\n\nIt would be great to have the model providers sorted alphabetically so they are easier to find without searching. Maybe not the “Popular” model providers but at least the other ones. I know there is a search feature but it just looks a lot nicer to have this.”,“closed_by”:null,“reactions”:{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23893/reactions”,“total_count”:0,“+1”:0,“-1”:0,“laugh”:0,“hooray”:0,“confused”:0,“heart”:0,“rocket”:0,“eyes”:0},“timeline_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23893/timeline”,“performed_via_github_app”:null,“state_reason”:null,“pinned_comment”:null},{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23892”,“repository_url”:“https://api.github.com/repos/anomalyco/opencode”,“labels_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23892/labels{/name}”,“comments_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23892/comments”,“events_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23892/events”,“html_url”:“https://github.com/anomalyco/opencode/issues/23892”,“id”:4310756344,“node_id”:“I_kwDOOiiGL88AAAABAPDr-A”,“number”:23892,“title”:“[Bug] New chat does not preserve worktree/role context - breaks agent session continuity”,“user”:{“login”:“danilagoleen”,“id”:204621525,“node_id”:“U_kgDODDJG1Q”,“avatar_url”:“https://avatars.githubusercontent.com/u/204621525?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/danilagoleen”,“html_url”:“https://github.com/danilagoleen”,“followers_url”:“https://api.github.com/users/danilagoleen/followers”,“following_url”:“https://api.github.com/users/danilagoleen/following{/other_user}”,“gists_url”:“https://api.github.com/users/danilagoleen/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/danilagoleen/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/danilagoleen/subscriptions”,“organizations_url”:“https://api.github.com/users/danilagoleen/orgs”,“repos_url”:“https://api.github.com/users/danilagoleen/repos”,“events_url”:“https://api.github.com/users/danilagoleen/events{/privacy}”,“received_events_url”:“https://api.github.com/users/danilagoleen/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“labels”:[{“id”:9835881465,“node_id”:“LA_kwDOOiiGL88AAAACSkOj-Q”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/core”,“name”:“core”,“color”:“1b6ea3”,“default”:false,“description”:“Anything pertaining to core functionality of the application (opencode server stuff)”}],“state”:“open”,“locked”:false,“assignees”:[{“login”:“rekram1-node”,“id”:63023139,“node_id”:“MDQ6VXNlcjYzMDIzMTM5”,“avatar_url”:“https://avatars.githubusercontent.com/u/63023139?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/rekram1-node”,“html_url”:“https://github.com/rekram1-node”,“followers_url”:“https://api.github.com/users/rekram1-node/followers”,“following_url”:“https://api.github.com/users/rekram1-node/following{/other_user}”,“gists_url”:“https://api.github.com/users/rekram1-node/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/rekram1-node/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/rekram1-node/subscriptions”,“organizations_url”:“https://api.github.com/users/rekram1-node/orgs”,“repos_url”:“https://api.github.com/users/rekram1-node/repos”,“events_url”:“https://api.github.com/users/rekram1-node/events{/privacy}”,“received_events_url”:“https://api.github.com/users/rekram1-node/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false}],“milestone”:null,“comments”:1,“created_at”:“2026-04-22T17:32:14Z”,“updated_at”:“2026-04-22T17:33:30Z”,“closed_at”:null,“assignee”:{“login”:“rekram1-node”,“id”:63023139,“node_id”:“MDQ6VXNlcjYzMDIzMTM5”,“avatar_url”:“https://avatars.githubusercontent.com/u/63023139?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/rekram1-node”,“html_url”:“https://github.com/rekram1-node”,“followers_url”:“https://api.github.com/users/rekram1-node/followers”,“following_url”:“https://api.github.com/users/rekram1-node/following{/other_user}”,“gists_url”:“https://api.github.com/users/rekram1-node/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/rekram1-node/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/rekram1-node/subscriptions”,“organizations_url”:“https://api.github.com/users/rekram1-node/orgs”,“repos_url”:“https://api.github.com/users/rekram1-node/repos”,“events_url”:“https://api.github.com/users/rekram1-node/events{/privacy}”,“received_events_url”:“https://api.github.com/users/rekram1-node/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“author_association”:“NONE”,“issue_field_values”:[],“type”:null,“active_lock_reason”:null,“sub_issues_summary”:{“total”:0,“completed”:0,“percent_completed”:0},“issue_dependencies_summary”:{“blocked_by”:0,“total_blocked_by”:0,“blocking”:0,“total_blocking”:0},“body”:”## Bug Description\n\nWhen starting a new chat in Opencode (different terminal window or after compaction), the worktree is NOT preserved - creating a completely new session without any context of the previous worktree/role.\n\n## Expected Behavior\n\n1. Worktree preservation: When starting a new chat, Opencode should either:\n - Reuse the SAME worktree as the previous session in this project, OR\n - Allow passing worktree via initialization (e.g., session_init worktree=captain)\n\n2. Role context: For agent-based workflows (like our VETKA project), each role maps to a specific worktree. New chats should:\n - Inherit the worktree from the previous session, OR\n - Support explicit role initialization like vetka_session_init role=Polaris\n\n## Current Issue\n\n1. I start session with role=Polaris → worktree = captain\n2. Close chat, start new chat → I’m in a DIFFERENT worktree (clever-comet or similar)\n3. Must manually cd to correct worktree AND re-run session_init role=Polaris\n\nThis breaks:\n- Agent action tracking (actions from session A end up attributed to different session)\n- Context continuity between chats\n- Reliability for fleet coordination (multiple agents)\n\n## Additional Context\n\n- System prompt mentions the project context including role info\n- Session init DOES return role info when called with role=Polaris\n- But new chat has NO way to pass this context\n\n## Suggested Fix (Priority Order)\n\n1. Auto-detect worktree from git branch: Use current git branch to infer worktree/role\n2. Persist last worktree in opencode.json: Store worktree name, read on new session\n3. Support role= flag in session init: session_init role=Polaris → worktree=captain\n4. Session compaction instead of new chat: Copy context from old session to new, preserving worktree\n\n## Environment\n\n- macOS, Opencode CLI\n- Multiple git worktrees for multi-agent setup (VETKA project)\n- Using MCP tools for role/session management\n\n---\n\nReported by: VETKA Project - Polaris fleet coordinator”,“closed_by”:null,“reactions”:{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23892/reactions”,“total_count”:0,“+1”:0,“-1”:0,“laugh”:0,“hooray”:0,“confused”:0,“heart”:0,“rocket”:0,“eyes”:0},“timeline_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23892/timeline”,“performed_via_github_app”:null,“state_reason”:null,“pinned_comment”:null},{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23891”,“repository_url”:“https://api.github.com/repos/anomalyco/opencode”,“labels_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23891/labels{/name}”,“comments_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23891/comments”,“events_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23891/events”,“html_url”:“https://github.com/anomalyco/opencode/issues/23891”,“id”:4310584108,“node_id”:“I_kwDOOiiGL88AAAABAO5LLA”,“number”:23891,“title”:“Subtask hangs silently forever when ripgrep download stalls on first run”,“user”:{“login”:“1openwindow”,“id”:26411726,“node_id”:“MDQ6VXNlcjI2NDExNzI2”,“avatar_url”:“https://avatars.githubusercontent.com/u/26411726?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/1openwindow”,“html_url”:“https://github.com/1openwindow”,“followers_url”:“https://api.github.com/users/1openwindow/followers”,“following_url”:“https://api.github.com/users/1openwindow/following{/other_user}”,“gists_url”:“https://api.github.com/users/1openwindow/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/1openwindow/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/1openwindow/subscriptions”,“organizations_url”:“https://api.github.com/users/1openwindow/orgs”,“repos_url”:“https://api.github.com/users/1openwindow/repos”,“events_url”:“https://api.github.com/users/1openwindow/events{/privacy}”,“received_events_url”:“https://api.github.com/users/1openwindow/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“labels”:[{“id”:8542148739,“node_id”:“LA_kwDOOiiGL88AAAAB_SbYgw”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/bug”,“name”:“bug”,“color”:“d73a4a”,“default”:true,“description”:“Something isn’t working”},{“id”:9502448928,“node_id”:“LA_kwDOOiiGL88AAAACNmPdIA”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/windows”,“name”:“windows”,“color”:“fca1db”,“default”:false,“description”:""},{“id”:9549130930,“node_id”:“LA_kwDOOiiGL88AAAACOSwssg”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/perf”,“name”:“perf”,“color”:“5575ee”,“default”:false,“description”:“Indicates a performance issue or need for optimization”},{“id”:9835881465,“node_id”:“LA_kwDOOiiGL88AAAACSkOj-Q”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/core”,“name”:“core”,“color”:“1b6ea3”,“default”:false,“description”:“Anything pertaining to core functionality of the application (opencode server stuff)”}],“state”:“open”,“locked”:false,“assignees”:[{“login”:“rekram1-node”,“id”:63023139,“node_id”:“MDQ6VXNlcjYzMDIzMTM5”,“avatar_url”:“https://avatars.githubusercontent.com/u/63023139?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/rekram1-node”,“html_url”:“https://github.com/rekram1-node”,“followers_url”:“https://api.github.com/users/rekram1-node/followers”,“following_url”:“https://api.github.com/users/rekram1-node/following{/other_user}”,“gists_url”:“https://api.github.com/users/rekram1-node/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/rekram1-node/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/rekram1-node/subscriptions”,“organizations_url”:“https://api.github.com/users/rekram1-node/orgs”,“repos_url”:“https://api.github.com/users/rekram1-node/repos”,“events_url”:“https://api.github.com/users/rekram1-node/events{/privacy}”,“received_events_url”:“https://api.github.com/users/rekram1-node/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false}],“milestone”:null,“comments”:2,“created_at”:“2026-04-22T16:59:12Z”,“updated_at”:“2026-04-22T21:53:35Z”,“closed_at”:null,“assignee”:{“login”:“rekram1-node”,“id”:63023139,“node_id”:“MDQ6VXNlcjYzMDIzMTM5”,“avatar_url”:“https://avatars.githubusercontent.com/u/63023139?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/rekram1-node”,“html_url”:“https://github.com/rekram1-node”,“followers_url”:“https://api.github.com/users/rekram1-node/followers”,“following_url”:“https://api.github.com/users/rekram1-node/following{/other_user}”,“gists_url”:“https://api.github.com/users/rekram1-node/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/rekram1-node/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/rekram1-node/subscriptions”,“organizations_url”:“https://api.github.com/users/rekram1-node/orgs”,“repos_url”:“https://api.github.com/users/rekram1-node/repos”,“events_url”:“https://api.github.com/users/rekram1-node/events{/privacy}”,“received_events_url”:“https://api.github.com/users/rekram1-node/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“author_association”:“NONE”,“issue_field_values”:[],“type”:null,“active_lock_reason”:null,“sub_issues_summary”:{“total”:0,“completed”:0,“percent_completed”:0},“issue_dependencies_summary”:{“blocked_by”:0,“total_blocked_by”:0,“blocking”:0,“total_blocking”:0},“body”:”### Summary\nOn first run in a fresh WSL2 environment (no system rg installed), opencode\nattempts to download its bundled ripgrep binary from GitHub Releases. When that\ndownload stalls or fails, every built-in tool that relies on ripgrep\n(grep, and the file sampling inside the skill tool) hangs indefinitely with\nno error, no timeout, and no UI feedback. As a result, any subagent that\ntriggers a grep call (e.g. the explore subagent) appears frozen forever.\nFrom the user’s perspective opencode simply “stops working” after the first\nsubtask — there is no indication that a background binary download is the root\ncause.\n### What happened\n1. Installed opencode 1.14.20 fresh on WSL2. which rg → command not found.\n2. Same version works fine on macOS (where I had rg previously cached / installed).\n3. First non-trivial prompt in plan mode triggered an explore subagent.\n4. The subagent showed ↳ 3 toolcalls (1× Grep, 2× Glob) and then froze.\n5. Waited 8+ minutes. No progress, no error, no spinner change, nothing.\n### Log evidence\nFrom ~/.local/share/opencode/log/<timestamp>.log (full log available on request):\nLine 54 service=ripgrep url=https://github.com/BurntSushi/ripgrep/releases/download/15.1.0/ripgrep-15.1.0-x86_64-unknown-linux-musl.tar.gz downloading ripgrep\n…\nLine 548 service=llm … agent=explore mode=subagent stream\nLine 558 service=permission permission=grep pattern=image.(generat|tool)|generat.image action=allow\nLine 562 service=permission permission=glob pattern=/imagetool*.ts action=allow\nLine 566 service=permission permission=glob pattern=/tool//.ts action=allow\nLine 587 +497497ms <— 8 minutes of total silence, only TUI heartbeat GETs afterwards\nKey observations:\n- The downloading ripgrep log line (line 54) has no corresponding\n “downloaded” / “extracted” / “installed” log line anywhere in the file.\n- The Grep tool was invoked (line 558) and permission was granted, but it\n never produced a completion log entry.\n- The subagent, and therefore the parent session’s TaskTool, is stuck\n awaiting a Promise that will never resolve.\n### Root cause (from reading the source)\nThree compounding issues in opencode:\n1. Ripgrep download has no timeout and no fallback. If the GitHub Releases\n CDN is slow or blocked (common in regions with restricted connectivity),\n the download Promise stays pending forever.\n2. Grep / skill tools do not fall back to system rg even when one is\n available on $PATH. They only use the bundled download.\n3. TaskTool in packages/opencode/src/tool/task.ts has no timeout or\n liveness check. It only wires an AbortController. A frozen child\n session freezes the parent indefinitely.\n### Expected behaviour\n- Built-in tools (grep, glob, read, etc.) should refuse to run and\n return a descriptive error immediately if their required binary is not\n yet available, instead of silently awaiting it.\n- TaskTool should provide a “no activity for N seconds” warning in the TUI\n so users can see something is wrong.\n### Why a good UI hint matters\nBuilt-in tools like grep are part of the core UX promise — users assume\nthey “just work” after install. When they silently hang on first run, there\nis no signal a user can act on:\n- No error message\n- No progress bar for the background download\n- No hint to install ripgrep manually\n- Subtask UI just shows a static ↳ 3 toolcalls forever\nA simple status line such as\n\"Downloading ripgrep (15.1.0)... 40% – grep is temporarily unavailable\"\nor, on failure,\n\"Failed to download ripgrep. Please install it via your package manager (e.g. 'sudo apt install ripgrep') and restart opencode.\"\nwould have saved hours of debugging and avoided a “the product is broken”\nimpression for a new user.\n\n### Workaround\nInstalling system ripgrep and restarting opencode resolves the symptom:\nbash\nsudo apt install ripgrep\nBut this only works if the user somehow figures out that ripgrep is the\nculprit — which is the point of this issue.\nEnvironment\n- OpenCode version: 1.14.20\n- OS: WSL2 (Ubuntu) on Windows 11\n- Terminal: <fill in your actual terminal, e.g. Windows Terminal>\n- Plugins: none\n- Works fine on: macOS 26 with same opencode version\nSuggested fixes (in priority order)\n1. Add a startup readiness check for each built-in tool's required\n binaries; if a binary is missing, mark the tool as unavailable with a\n clear message instead of letting calls hang.\n2. Add a generic \"no activity\" warning to TaskTool after N seconds so\n users can tell when a subtask is stuck.\n\n### Plugins\n\n_No response_\n\n### OpenCode version\n\n1.14.20\n\n### Steps to reproduce\n\n1. Do **not** install ripgrep\n (`sudo apt remove ripgrep` if present).\n2. Block or throttle access to `github.com` release downloads to simulate a\n slow/failed download (or simply try from a network where this is the case).\n3. Install opencode `1.14.20` and launch in any project.\n4. Ask it something that triggers an `explore` subagent, e.g.\n `\"Analyze how tool X is implemented in this codebase\"`.\n5. Observe: subagent shows 3 toolcalls, then hangs forever with no error.\n\n### Screenshot and/or share link\n\n_No response_\n\n### Operating System\n\nWindow 11\n\n### Terminal\n\nWindows Terminal","closed_by":null,"reactions":{"url":"https://api.github.com/repos/anomalyco/opencode/issues/23891/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/anomalyco/opencode/issues/23891/timeline","performed_via_github_app":null,"state_reason":null,"pinned_comment":null},{"url":"https://api.github.com/repos/anomalyco/opencode/issues/23890","repository_url":"https://api.github.com/repos/anomalyco/opencode","labels_url":"https://api.github.com/repos/anomalyco/opencode/issues/23890/labels{/name}","comments_url":"https://api.github.com/repos/anomalyco/opencode/issues/23890/comments","events_url":"https://api.github.com/repos/anomalyco/opencode/issues/23890/events","html_url":"https://github.com/anomalyco/opencode/pull/23890","id":4310541359,"node_id":"PR_kwDOOiiGL87UszEw","number":23890,"title":"feat(search): add runtime-aware search service with fff","user":{"login":"nexxeln","id":95541290,"node_id":"U_kgDOBbHYKg","avatar_url":"https://avatars.githubusercontent.com/u/95541290?v=4","gravatar_id":"","url":"https://api.github.com/users/nexxeln","html_url":"https://github.com/nexxeln","followers_url":"https://api.github.com/users/nexxeln/followers","following_url":"https://api.github.com/users/nexxeln/following{/other_user}","gists_url":"https://api.github.com/users/nexxeln/gists{/gist_id}","starred_url":"https://api.github.com/users/nexxeln/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nexxeln/subscriptions","organizations_url":"https://api.github.com/users/nexxeln/orgs","repos_url":"https://api.github.com/users/nexxeln/repos","events_url":"https://api.github.com/users/nexxeln/events{/privacy}","received_events_url":"https://api.github.com/users/nexxeln/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[],"state":"open","locked":false,"assignees":[],"milestone":null,"comments":0,"created_at":"2026-04-22T16:51:12Z","updated_at":"2026-04-22T16:57:29Z","closed_at":null,"assignee":null,"author_association":"MEMBER","issue_field_values":[],"type":null,"active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/anomalyco/opencode/pulls/23890","html_url":"https://github.com/anomalyco/opencode/pull/23890","diff_url":"https://github.com/anomalyco/opencode/pull/23890.diff","patch_url":"https://github.com/anomalyco/opencode/pull/23890.patch","merged_at":null},"body":"## summary\n- add a runtime-aware `Search` service that uses `fff-bun` under Bun and falls back to the existing ripgrep path under Node and desktop\n- route file search, grep, glob, debug commands, routes, and tool wiring through `Search` while keeping exhaustive file listing and tree operations on ripgrep\n- record successful search-backed file reads for frecency/history and update the affected tests\n\n## testing\n- `bun typecheck`\n- `bun test test/file/search.test.ts test/file/index.test.ts test/tool/glob.test.ts test/tool/grep.test.ts test/tool/read.test.ts test/tool/registry.test.ts test/tool/skill.test.ts test/session/prompt.test.ts test/session/snapshot-tool-race.test.ts`\n- `git push -u origin nxl/runtime-aware-search-service` (pre-push hook ran `bun turbo typecheck`)","closed_by":null,"reactions":{"url":"https://api.github.com/repos/anomalyco/opencode/issues/23890/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/anomalyco/opencode/issues/23890/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/anomalyco/opencode/issues/23889","repository_url":"https://api.github.com/repos/anomalyco/opencode","labels_url":"https://api.github.com/repos/anomalyco/opencode/issues/23889/labels{/name}","comments_url":"https://api.github.com/repos/anomalyco/opencode/issues/23889/comments","events_url":"https://api.github.com/repos/anomalyco/opencode/issues/23889/events","html_url":"https://github.com/anomalyco/opencode/issues/23889","id":4310541097,"node_id":"I_kwDOOiiGL88AAAABAO2jKQ","number":23889,"title":"Error with GPT 5.4 : Invalid value: 'brief'. Supported values are: 'concise', 'detailed', and 'auto'.","user":{"login":"RTChou67","id":187550633,"node_id":"U_kgDOCy3LqQ","avatar_url":"https://avatars.githubusercontent.com/u/187550633?v=4","gravatar_id":"","url":"https://api.github.com/users/RTChou67","html_url":"https://github.com/RTChou67","followers_url":"https://api.github.com/users/RTChou67/followers","following_url":"https://api.github.com/users/RTChou67/following{/other_user}","gists_url":"https://api.github.com/users/RTChou67/gists{/gist_id}","starred_url":"https://api.github.com/users/RTChou67/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RTChou67/subscriptions","organizations_url":"https://api.github.com/users/RTChou67/orgs","repos_url":"https://api.github.com/users/RTChou67/repos","events_url":"https://api.github.com/users/RTChou67/events{/privacy}","received_events_url":"https://api.github.com/users/RTChou67/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":8542148739,"node_id":"LA_kwDOOiiGL88AAAAB_SbYgw","url":"https://api.github.com/repos/anomalyco/opencode/labels/bug","name":"bug","color":"d73a4a","default":true,"description":"Something isn't working"},{"id":9835881465,"node_id":"LA_kwDOOiiGL88AAAACSkOj-Q","url":"https://api.github.com/repos/anomalyco/opencode/labels/core","name":"core","color":"1b6ea3","default":false,"description":"Anything pertaining to core functionality of the application (opencode server stuff)"}],"state":"open","locked":false,"assignees":[{"login":"rekram1-node","id":63023139,"node_id":"MDQ6VXNlcjYzMDIzMTM5","avatar_url":"https://avatars.githubusercontent.com/u/63023139?v=4","gravatar_id":"","url":"https://api.github.com/users/rekram1-node","html_url":"https://github.com/rekram1-node","followers_url":"https://api.github.com/users/rekram1-node/followers","following_url":"https://api.github.com/users/rekram1-node/following{/other_user}","gists_url":"https://api.github.com/users/rekram1-node/gists{/gist_id}","starred_url":"https://api.github.com/users/rekram1-node/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rekram1-node/subscriptions","organizations_url":"https://api.github.com/users/rekram1-node/orgs","repos_url":"https://api.github.com/users/rekram1-node/repos","events_url":"https://api.github.com/users/rekram1-node/events{/privacy}","received_events_url":"https://api.github.com/users/rekram1-node/received_events","type":"User","user_view_type":"public","site_admin":false}],"milestone":null,"comments":1,"created_at":"2026-04-22T16:51:08Z","updated_at":"2026-04-22T16:52:12Z","closed_at":null,"assignee":{"login":"rekram1-node","id":63023139,"node_id":"MDQ6VXNlcjYzMDIzMTM5","avatar_url":"https://avatars.githubusercontent.com/u/63023139?v=4","gravatar_id":"","url":"https://api.github.com/users/rekram1-node","html_url":"https://github.com/rekram1-node","followers_url":"https://api.github.com/users/rekram1-node/followers","following_url":"https://api.github.com/users/rekram1-node/following{/other_user}","gists_url":"https://api.github.com/users/rekram1-node/gists{/gist_id}","starred_url":"https://api.github.com/users/rekram1-node/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rekram1-node/subscriptions","organizations_url":"https://api.github.com/users/rekram1-node/orgs","repos_url":"https://api.github.com/users/rekram1-node/repos","events_url":"https://api.github.com/users/rekram1-node/events{/privacy}","received_events_url":"https://api.github.com/users/rekram1-node/received_events","type":"User","user_view_type":"public","site_admin":false},"author_association":"NONE","issue_field_values":[],"type":null,"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"### Description\n\nNo matter what my input is, opencode always throw out an error:\n`Invalid value: 'brief'. Supported values are: 'concise', 'detailed', and 'auto'.`\nMy config is listed below:\n\n”models”: {\n “gpt-5.4”: {\n “name”: “GPT-5.4”,\n “variants”: {\n “high”: {\n “reasoningEffort”: “high”,\n “textVerbosity”: “low”,\n “reasoningSummary”: “auto”\n },\n “low”: {\n “reasoningEffort”: “low”,\n “textVerbosity”: “low”,\n “reasoningSummary”: “auto”\n }\n }\n }\n }\n\n\n### Plugins\n\n_No response_\n\n### OpenCode version\n\n1.14.20\n\n### Steps to reproduce\n\n_No response_\n\n### Screenshot and/or share link\n\n_No response_\n\n### Operating System\n\n_No response_\n\n### Terminal\n\n_No response_","closed_by":null,"reactions":{"url":"https://api.github.com/repos/anomalyco/opencode/issues/23889/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/anomalyco/opencode/issues/23889/timeline","performed_via_github_app":null,"state_reason":null,"pinned_comment":null},{"url":"https://api.github.com/repos/anomalyco/opencode/issues/23887","repository_url":"https://api.github.com/repos/anomalyco/opencode","labels_url":"https://api.github.com/repos/anomalyco/opencode/issues/23887/labels{/name}","comments_url":"https://api.github.com/repos/anomalyco/opencode/issues/23887/comments","events_url":"https://api.github.com/repos/anomalyco/opencode/issues/23887/events","html_url":"https://github.com/anomalyco/opencode/issues/23887","id":4310316336,"node_id":"I_kwDOOiiGL88AAAABAOo1MA","number":23887,"title":"[Bug]: OpenCode Go + Kimi K2.6/K2.5 returns 'Provider returned error' on CLI 1.14.20","user":{"login":"byungsker","id":72309817,"node_id":"MDQ6VXNlcjcyMzA5ODE3","avatar_url":"https://avatars.githubusercontent.com/u/72309817?v=4","gravatar_id":"","url":"https://api.github.com/users/byungsker","html_url":"https://github.com/byungsker","followers_url":"https://api.github.com/users/byungsker/followers","following_url":"https://api.github.com/users/byungsker/following{/other_user}","gists_url":"https://api.github.com/users/byungsker/gists{/gist_id}","starred_url":"https://api.github.com/users/byungsker/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/byungsker/subscriptions","organizations_url":"https://api.github.com/users/byungsker/orgs","repos_url":"https://api.github.com/users/byungsker/repos","events_url":"https://api.github.com/users/byungsker/events{/privacy}","received_events_url":"https://api.github.com/users/byungsker/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":9835881465,"node_id":"LA_kwDOOiiGL88AAAACSkOj-Q","url":"https://api.github.com/repos/anomalyco/opencode/labels/core","name":"core","color":"1b6ea3","default":false,"description":"Anything pertaining to core functionality of the application (opencode server stuff)"}],"state":"open","locked":false,"assignees":[{"login":"rekram1-node","id":63023139,"node_id":"MDQ6VXNlcjYzMDIzMTM5","avatar_url":"https://avatars.githubusercontent.com/u/63023139?v=4","gravatar_id":"","url":"https://api.github.com/users/rekram1-node","html_url":"https://github.com/rekram1-node","followers_url":"https://api.github.com/users/rekram1-node/followers","following_url":"https://api.github.com/users/rekram1-node/following{/other_user}","gists_url":"https://api.github.com/users/rekram1-node/gists{/gist_id}","starred_url":"https://api.github.com/users/rekram1-node/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rekram1-node/subscriptions","organizations_url":"https://api.github.com/users/rekram1-node/orgs","repos_url":"https://api.github.com/users/rekram1-node/repos","events_url":"https://api.github.com/users/rekram1-node/events{/privacy}","received_events_url":"https://api.github.com/users/rekram1-node/received_events","type":"User","user_view_type":"public","site_admin":false}],"milestone":null,"comments":7,"created_at":"2026-04-22T16:10:08Z","updated_at":"2026-04-23T00:46:11Z","closed_at":null,"assignee":{"login":"rekram1-node","id":63023139,"node_id":"MDQ6VXNlcjYzMDIzMTM5","avatar_url":"https://avatars.githubusercontent.com/u/63023139?v=4","gravatar_id":"","url":"https://api.github.com/users/rekram1-node","html_url":"https://github.com/rekram1-node","followers_url":"https://api.github.com/users/rekram1-node/followers","following_url":"https://api.github.com/users/rekram1-node/following{/other_user}","gists_url":"https://api.github.com/users/rekram1-node/gists{/gist_id}","starred_url":"https://api.github.com/users/rekram1-node/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rekram1-node/subscriptions","organizations_url":"https://api.github.com/users/rekram1-node/orgs","repos_url":"https://api.github.com/users/rekram1-node/repos","events_url":"https://api.github.com/users/rekram1-node/events{/privacy}","received_events_url":"https://api.github.com/users/rekram1-node/received_events","type":"User","user_view_type":"public","site_admin":false},"author_association":"NONE","issue_field_values":[],"type":null,"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"## Description\n\nOpenCode Go provider works perfectly for all models **except** Kimi K2.6 and K2.5, which consistently return \\\"Provider returned error\\\". Other models (GLM-5, Qwen3.5 Plus, MiniMax M2.5/M2.7) under the same OpenCode Go subscription work fine.\n\n## Environment\n\n- **OpenCode Version**: 1.14.20\n- **OS**: macOS\n- **Provider**: OpenCode Go (paid subscription, $10/month)\n- **Affected Models**: `kimi-k2.6`, `kimi-k2.5`\n- **Working Models**: `glm-5`, `glm-5.1`, `qwen3.5-plus`, `minimax-m2.5`, `minimax-m2.7`\n\n## Steps to Reproduce\n\n1. Run `opencode` and connect to OpenCode Go via `/connect`\n2. Select `kimi-k2.6` from `/models`\n3. Send any message (e.g., \\\"hi\\\")\n4. Observe: \\\"Provider returned error\\\" appears immediately\n\n## Evidence\n\n- **Same API key works with Kimi on other clients**: The exact same OpenCode Go API key works perfectly with Kimi K2.6 on:\n - OpenClaw gateway (same machine, different session)\n - OpenCode Zen provider (same machine, different provider selection)\n- This rules out API key invalidity or server-side Kimi outage.\n\n## Troubleshooting Already Attempted\n\n- [x] Cleared `~/.local/share/opencode` and re-authenticated\n- [x] Cleared `~/.cache/opencode` to force provider package re-download\n- [x] Reinstalled `opencode-ai` globally via npm\n- [x] Changed network (WiFi → mobile hotspot) to rule out IP-based blocking\n- [x] Verified same API key works with other OpenCode Go models\n- [x] Verified same API key works with Kimi on OpenCode Zen\n\n## Expected Behavior\n\nKimi K2.6/K2.5 should work through OpenCode Go provider, just like GLM-5 and Qwen3.5 Plus do.\n\n## Actual Behavior\n\nOnly Kimi models fail with a generic \\\"Provider returned error\\\" message. No detailed error code or HTTP status is exposed in the UI.\n\n## Additional Context\n\nThis appears similar to previously reported issues:\n- #17541 (Missing API Key error with OpenCode Go + Kimi K2.5)\n- #14892 (API Key invalid error with Kimi K2.5)\n- #16685 (Provider returned error with Kimi K2.5 via OpenCode Go)\n\nHowever, in this case the API key is definitively valid (works on Zen and other models), and the error persists across cache clears, reinstalls, and network changes.","closed_by":null,"reactions":{"url":"https://api.github.com/repos/anomalyco/opencode/issues/23887/reactions","total_count":1,"+1":1,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/anomalyco/opencode/issues/23887/timeline","performed_via_github_app":null,"state_reason":null,"pinned_comment":null},{"url":"https://api.github.com/repos/anomalyco/opencode/issues/23885","repository_url":"https://api.github.com/repos/anomalyco/opencode","labels_url":"https://api.github.com/repos/anomalyco/opencode/issues/23885/labels{/name}","comments_url":"https://api.github.com/repos/anomalyco/opencode/issues/23885/comments","events_url":"https://api.github.com/repos/anomalyco/opencode/issues/23885/events","html_url":"https://github.com/anomalyco/opencode/issues/23885","id":4310191194,"node_id":"I_kwDOOiiGL88AAAABAOhMWg","number":23885,"title":"[ACP compat] use normal filesystem path for skill finding response","user":{"login":"johnnychen94","id":8684355,"node_id":"MDQ6VXNlcjg2ODQzNTU=","avatar_url":"https://avatars.githubusercontent.com/u/8684355?v=4","gravatar_id":"","url":"https://api.github.com/users/johnnychen94","html_url":"https://github.com/johnnychen94","followers_url":"https://api.github.com/users/johnnychen94/followers","following_url":"https://api.github.com/users/johnnychen94/following{/other_user}","gists_url":"https://api.github.com/users/johnnychen94/gists{/gist_id}","starred_url":"https://api.github.com/users/johnnychen94/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/johnnychen94/subscriptions","organizations_url":"https://api.github.com/users/johnnychen94/orgs","repos_url":"https://api.github.com/users/johnnychen94/repos","events_url":"https://api.github.com/users/johnnychen94/events{/privacy}","received_events_url":"https://api.github.com/users/johnnychen94/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":9835881465,"node_id":"LA_kwDOOiiGL88AAAACSkOj-Q","url":"https://api.github.com/repos/anomalyco/opencode/labels/core","name":"core","color":"1b6ea3","default":false,"description":"Anything pertaining to core functionality of the application (opencode server stuff)"},{"id":10109743307,"node_id":"LA_kwDOOiiGL88AAAACWpZwyw","url":"https://api.github.com/repos/anomalyco/opencode/labels/acp","name":"acp","color":"ededed","default":false,"description":null}],"state":"open","locked":false,"assignees":[{"login":"rekram1-node","id":63023139,"node_id":"MDQ6VXNlcjYzMDIzMTM5","avatar_url":"https://avatars.githubusercontent.com/u/63023139?v=4","gravatar_id":"","url":"https://api.github.com/users/rekram1-node","html_url":"https://github.com/rekram1-node","followers_url":"https://api.github.com/users/rekram1-node/followers","following_url":"https://api.github.com/users/rekram1-node/following{/other_user}","gists_url":"https://api.github.com/users/rekram1-node/gists{/gist_id}","starred_url":"https://api.github.com/users/rekram1-node/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rekram1-node/subscriptions","organizations_url":"https://api.github.com/users/rekram1-node/orgs","repos_url":"https://api.github.com/users/rekram1-node/repos","events_url":"https://api.github.com/users/rekram1-node/events{/privacy}","received_events_url":"https://api.github.com/users/rekram1-node/received_events","type":"User","user_view_type":"public","site_admin":false}],"milestone":null,"comments":4,"created_at":"2026-04-22T15:49:16Z","updated_at":"2026-04-22T15:58:25Z","closed_at":null,"assignee":{"login":"rekram1-node","id":63023139,"node_id":"MDQ6VXNlcjYzMDIzMTM5","avatar_url":"https://avatars.githubusercontent.com/u/63023139?v=4","gravatar_id":"","url":"https://api.github.com/users/rekram1-node","html_url":"https://github.com/rekram1-node","followers_url":"https://api.github.com/users/rekram1-node/followers","following_url":"https://api.github.com/users/rekram1-node/following{/other_user}","gists_url":"https://api.github.com/users/rekram1-node/gists{/gist_id}","starred_url":"https://api.github.com/users/rekram1-node/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rekram1-node/subscriptions","organizations_url":"https://api.github.com/users/rekram1-node/orgs","repos_url":"https://api.github.com/users/rekram1-node/repos","events_url":"https://api.github.com/users/rekram1-node/events{/privacy}","received_events_url":"https://api.github.com/users/rekram1-node/received_events","type":"User","user_view_type":"public","site_admin":false},"author_association":"NONE","issue_field_values":[],"type":null,"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"### Description\n\nThe following data is the ACP protocol payload we captured. It indicates that if we contain the `file:///<fs_abspath>` in the find skill response, it's very easy for LLM to join the path with the prefix `file:///<fs_abspath>`.\n\nI didn't verify if opencode itself's internal read file tool handles the `file:///` URL style path, but for ACP compatibility, since the ACP protocol supports [fs/* tool overriding](https://agentclientprotocol.com/protocol/file-system#reading-files), it's very easy that a potential ACP editor to pass a read file implementation that has no idea of the internal `file:///` rule of opencode and hits the issue. Even if we patch the read/write file tools to support URL formats, we can't guarantee that the LLM generates the correct path for other tool calls (e.g., shell).\n\nI suggest we strip the `file:///` prefix in the find skill response, or tweak the prompt with an explicit comment that \"file:///` is a URL format.\n\n### Plugins\n\nnone\n\n### OpenCode version\n\nv1.14.20\n\n### Steps to reproduce\n\nWe have an internal ACP editor that captures the ACP payload below, I believe checking it would explain the issue.\n\n### Screenshot and/or share link\n\nhttps://github.com/anomalyco/opencode/blob/e300209db978f903f3e355f50005fa1f5a1a6b7a/packages/opencode/src/tool/skill.ts#L59\n\nhttps://github.com/anomalyco/opencode/issues/23885 is not related\n\n### Operating System\n\n_No response_\n\n### Terminal\n\n\n{\n “kind”: “trace.record”,\n “record”: {\n “traceId”: “1776861001601-4bhi3e:31”,\n “sessionId”: “ses_24ad525dbffeBJJt67xDS2DQ6S”,\n “scopeId”: “1776861001601-4bhi3e”,\n “scopeType”: “live-turn”,\n “lane”: “editor”,\n “direction”: “outbound”,\n “timestamp”: “2026-04-22T12:30:11.014Z”,\n “seq”: 31,\n “method”: “session.update”,\n “status”: “sent”,\n “summary”: “session.update”,\n “payload”: {\n “type”: “session.update”,\n “notification”: {\n “sessionId”: “ses_24ad525dbffeBJJt67xDS2DQ6S”,\n “update”: {\n “sessionUpdate”: “tool_call_update”,\n “toolCallId”: “call_function_365u0x3ova71_1”,\n “status”: “completed”,\n “kind”: “other”,\n “content”: [\n {\n “type”: “content”,\n “content”: {\n “type”: “text”,\n “text”: “<skill_content name=\“syslab-performance-optimization\”>\n# Skill: syslab-performance-optimization\n\n# [skill content] \n\nBase directory for this skill: file:///C:/Users/TR/.config/opencode/skills/syslab-performance-optimization\nRelative paths in this skill (e.g., scripts/, reference/) are relative to this base directory.\nNote: file list is sampled.\n\n<skill_files>\nopencode-cli.exe serve) accumulates orphan children, memory\n grows, page-fault pressure rises, and the sidecar stops responding to HTTP requests — the GUI freezes on an empty\n session screen because every RPC times out.\n\n ### Environment\n\n - OS: Windows 11 Home Single Language 10.0.26200\n - OpenCode Desktop: installed via official Windows installer\n - Binary path: %LOCALAPPDATA%\\OpenCode\\opencode-cli.exe\n - Sidecar invocation: opencode-cli --print-logs --log-level WARN serve --hostname 127.0.0.1 --port <port>\n - Global plugin: oh-my-openagent@latest\n - Project-local plugin (affected workspace): template-bridge (local path)\n - Several Claude plugins with MCP servers installed in %USERPROFILE%\\.claude\\plugins\\cache\\ (claude-mem,\n chrome-devtools-mcp, context7, grep_app, filesystem, etc.)\n - Desktop log directory: %LOCALAPPDATA%\\ai.opencode.desktop\\logs\\\n\n ### Observed behavior\n\n After working in one workspace for some time (including multiple task/delegation tool calls) and then opening a\n different workspace, the following processes remain alive under the current opencode-cli.exe:\n\n wmic process where name=‘node.exe’ …\n\n CommandLine = … @modelcontextprotocol/server-filesystem\n C:/Users/igorm/workspace/Pf2e_pretty_site/pretty_site_prototype\n ParentProcessId = 58376 # dead, orphaned\n ProcessId = 24244\n WorkingSetSize = 1,830,912\n (… 5 more identical entries for the Pf2e workspace, while the user is in a different workspace)\n\n CommandLine = node …\thedotmack\claude-mem\10.5.5\scripts\mcp-server.cjs\n ParentProcessId = 6024 # current opencode-cli\n ProcessId = 64476\n WorkingSetSize = 45,871,104\n\n CommandLine = node …\claude-mem\10.5.5\scripts\mcp-server.cjs\n ParentProcessId = 6024\n ProcessId = 65692\n WorkingSetSize = 45,985,792\n\n CommandLine = node …\claude-mem\10.5.5\scripts\mcp-server.cjs\n ParentProcessId = 6024\n ProcessId = 55512\n WorkingSetSize = 53,088,256\n\n Observations:\n 1. Cross-workspace orphans: 6 @modelcontextprotocol/server-filesystem instances pinned to a different\n workspace path (C:/Users/igorm/workspace/Pf2e_pretty_site/...) are still alive while the user is active in another\n workspace. Their listed ParentProcessId no longer exists. They were never shut down when the Pf2e session was\n closed.\n 2. Duplicate spawns within one session: 3 separate claude-mem MCP server processes are all children of the\n same live opencode-cli.exe (ParentProcessId = 6024). A single plugin is expected to produce one MCP server per\n session, not three.\n 3. Growing sidecar footprint: before the hang, the live opencode-cli.exe had:\n - WorkingSetSize ≈ 725 MB\n - VirtualSize ≈ 17.9 GB\n - PageFaults = 2,364,960\n - 14 descendant node.exe processes\n After killing the sidecar, many orphan children survived.\n\n ### Sidecar log excerpt during hang\n\n %LOCALAPPDATA%\\ai.opencode.desktop\\logs\\opencode-desktop_<date>_<time>.log:\n\n INFO opencode_lib: Spawning sidecar on http://127.0.0.1:54725\n INFO opencode_lib::server: Server ready elapsed=1.163913s\n ERROR service=plugin.copilot error=Failed to fetch models: 401 …\n ERROR service=server error=Session not found failed\n ERROR service=server error=NotFoundError failed\n ERROR service=mcp clientName=claude-mem:mcp-search error=MCP error -32601: Method not found failed to get prompts\n ERROR service=mcp clientName=context7 error=MCP error -32601: Method not found failed to get prompts\n ERROR service=mcp clientName=grep_app error=MCP error -32601: Method not found failed to get prompts\n\n The -32601 Method not found errors are a protocol mismatch (servers don’t implement prompts/list /\n resources/list) and may be unrelated, but they show that multiple MCP clients are being initialised repeatedly in a\n single session.\n\n ### Expected behavior\n\n 1. When a workspace is closed (window closed / project switched), all MCP child processes that were spawned for that\n workspace should be terminated, not left as orphans.\n 2. Within a single active session, repeated task delegations should reuse existing MCP clients for a given plugin\n rather than spawning additional independent processes.\n 3. The sidecar should never accumulate children in a way that grows unbounded with user activity.\n\n ### Actual behavior\n\n 1. Closing a workspace leaves every spawned MCP server running. They become parentless (detached) but keep consuming\n memory and file handles.\n 2. Each delegated task (or possibly each new chat/session) adds more MCP server children without reaping earlier ones.\n 3. Under the accumulated load the sidecar’s event loop eventually stops servicing HTTP, which presents to the user as\n a fully-frozen empty-session GUI.\n\n ### Impact\n\n The GUI becomes completely unresponsive; new chat windows don’t render; the only reliable recovery is taskkill /F on\n the opencode-cli.exe sidecar and all orphan node.exe MCP children, followed by a full relaunch. For users\n running many Claude plugins with MCP servers (claude-mem, chrome-devtools-mcp, filesystem per workspace, etc.), this\n happens within an hour of active use.\n\n ### Suggested areas to look\n\n - Sidecar MCP client registry: on session.close / workspace change, ensure spawned subprocesses are sent\n SIGTERM/killed on Windows.\n - task / agent-delegation path inside oh-my-openagent and any equivalent upstream delegation: before spawning a\n new MCP client for a subagent, check whether an existing client for the same plugin is already registered for the\n parent session and reuse it.\n - Consider an explicit MCP process reaper that walks known child PIDs on sidecar shutdown and terminates them\n synchronously before exiting.\n\n ### Workaround\n\n Periodically (especially after workspace switches or many delegated tasks) restart OpenCode Desktop. If the GUI is\n already frozen:\n\n taskkill /F /IM opencode-cli.exe\n taskkill /F /IM OpenCode.exe\n then kill any leftover node.exe processes whose command line contains\n\n “server-filesystem”, “claude-mem”, “context7”, etc.\n\n\n ### Related\n\n This is not the same as the duplicate-skill issue where ~/.config/opencode/skills/<name> and\n ~/.config/opencode/skills/superpowers/<name> both exist — that one was a config/data problem and was resolved by\n removing the duplicate tree. The MCP lifecycle bug described here is orthogonal and remained after that fix.\n\n### Plugins\n\nah-myh-openagents\n\n### OpenCode version\n\nlatest\n\n### Steps to reproduce\n\n_No response_\n\n### Screenshot and/or share link\n\n_No response_\n\n### Operating System\n\n_No response_\n\n### Terminal\n\ndesktop”,“closed_by”:null,“reactions”:{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23882/reactions”,“total_count”:0,“+1”:0,“-1”:0,“laugh”:0,“hooray”:0,“confused”:0,“heart”:0,“rocket”:0,“eyes”:0},“timeline_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23882/timeline”,“performed_via_github_app”:null,“state_reason”:null,“pinned_comment”:null},{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23879”,“repository_url”:“https://api.github.com/repos/anomalyco/opencode”,“labels_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23879/labels{/name}”,“comments_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23879/comments”,“events_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23879/events”,“html_url”:“https://github.com/anomalyco/opencode/issues/23879”,“id”:4310111439,“node_id”:“I_kwDOOiiGL88AAAABAOcUzw”,“number”:23879,“title”:“[FEATURE]: dismissible toasts — user keyboard/click dismiss + plugin programmatic dismiss”,“user”:{“login”:“marcusquinn”,“id”:6428977,“node_id”:“MDQ6VXNlcjY0Mjg5Nzc=”,“avatar_url”:“https://avatars.githubusercontent.com/u/6428977?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/marcusquinn”,“html_url”:“https://github.com/marcusquinn”,“followers_url”:“https://api.github.com/users/marcusquinn/followers”,“following_url”:“https://api.github.com/users/marcusquinn/following{/other_user}”,“gists_url”:“https://api.github.com/users/marcusquinn/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/marcusquinn/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/marcusquinn/subscriptions”,“organizations_url”:“https://api.github.com/users/marcusquinn/orgs”,“repos_url”:“https://api.github.com/users/marcusquinn/repos”,“events_url”:“https://api.github.com/users/marcusquinn/events{/privacy}”,“received_events_url”:“https://api.github.com/users/marcusquinn/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“labels”:[{“id”:9835881465,“node_id”:“LA_kwDOOiiGL88AAAACSkOj-Q”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/core”,“name”:“core”,“color”:“1b6ea3”,“default”:false,“description”:“Anything pertaining to core functionality of the application (opencode server stuff)”}],“state”:“open”,“locked”:false,“assignees”:[{“login”:“thdxr”,“id”:826656,“node_id”:“MDQ6VXNlcjgyNjY1Ng==”,“avatar_url”:“https://avatars.githubusercontent.com/u/826656?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/thdxr”,“html_url”:“https://github.com/thdxr”,“followers_url”:“https://api.github.com/users/thdxr/followers”,“following_url”:“https://api.github.com/users/thdxr/following{/other_user}”,“gists_url”:“https://api.github.com/users/thdxr/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/thdxr/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/thdxr/subscriptions”,“organizations_url”:“https://api.github.com/users/thdxr/orgs”,“repos_url”:“https://api.github.com/users/thdxr/repos”,“events_url”:“https://api.github.com/users/thdxr/events{/privacy}”,“received_events_url”:“https://api.github.com/users/thdxr/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false}],“milestone”:null,“comments”:2,“created_at”:“2026-04-22T15:34:15Z”,“updated_at”:“2026-04-22T15:36:00Z”,“closed_at”:null,“assignee”:{“login”:“thdxr”,“id”:826656,“node_id”:“MDQ6VXNlcjgyNjY1Ng==”,“avatar_url”:“https://avatars.githubusercontent.com/u/826656?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/thdxr”,“html_url”:“https://github.com/thdxr”,“followers_url”:“https://api.github.com/users/thdxr/followers”,“following_url”:“https://api.github.com/users/thdxr/following{/other_user}”,“gists_url”:“https://api.github.com/users/thdxr/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/thdxr/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/thdxr/subscriptions”,“organizations_url”:“https://api.github.com/users/thdxr/orgs”,“repos_url”:“https://api.github.com/users/thdxr/repos”,“events_url”:“https://api.github.com/users/thdxr/events{/privacy}”,“received_events_url”:“https://api.github.com/users/thdxr/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“author_association”:“NONE”,“issue_field_values”:[],“type”:null,“active_lock_reason”:null,“sub_issues_summary”:{“total”:0,“completed”:0,“percent_completed”:0},“issue_dependencies_summary”:{“blocked_by”:0,“total_blocked_by”:0,“blocking”:0,“total_blocking”:0},“body”:”### Summary\n\nTUI toasts emitted via client.tui.showToast() (and the underlying /tui/show-toast endpoint) have duration as the only control surface. Once shown, neither the user nor the emitting plugin can dismiss them early. For warning/error variants that legitimately need a long display window (10-30s), this leaves the toast blocking attention long after the user has read it.\n\n### Use case\n\nThe opencode-aidevops plugin renders session-start framework status (version, env, security posture, advisories) as a consolidated TUI toast. Severity is classified per line; variant and duration follow the highest severity present:\n\n- error (30s): security advisories\n- warning (15s): pulse-stalled / external contribution alerts\n- info (8s): version + env lines\n- success (5s): “all protections active”\n\nUsers typically absorb the message in 2-3s, but the toast stays up for the full duration with no way to clear it. The plugin also can’t clear it programmatically once the context it reported has changed (e.g., user runs aidevops update in a side terminal — the stale advisory banner continues to occupy screen real estate).\n\n### Proposal\n\nTwo small additions, both opt-in:\n\n1. User-side dismissibility — a keyboard shortcut (e.g., Esc while a toast is visible) and/or a click target on desktop dismisses the currently-visible toast immediately. Default off if back-compat is a concern; optional dismissible: boolean flag on the emit.\n\n2. Plugin-side programmatic dismiss — client.tui.showToast() returns an identifier; client.tui.dismissToast(id) (or equivalent /tui/dismiss-toast endpoint) closes it before duration elapses. Current SDK shape for reference: packages/opencode/node_modules/@opencode-ai/sdk/dist/gen/types.gen.d.ts → TuiShowToastData.body + TuiShowToastResponses.\n\n### Related\n\n- #17191 — inverse pain point (error toasts disappear too fast). A user-interaction primitive (press-to-pin, press-to-dismiss) addresses both directions with one mechanism.\n- #23613 — same inverse complaint for the “Copied to clipboard” toast on macOS.\n- #21542 (closed) — different concern (silencing a specific toast via env flag), but same underlying theme of users wanting finer control over toast lifecycle.\n\n### Scope\n\n- Backward compatible: both additions are opt-in.\n- Minimal SDK surface impact: one new field on TuiShowToastData.body, one new endpoint, one new return shape.\n- Complements existing toast API rather than replacing it.\n\nHappy to contribute a PR once the API shape is agreed — the aidevops plugin will ship it as a consumer on day one.\n\n\n\n---\naidevops.sh v3.8.93 plugin for OpenCode v1.14.20 with claude-opus-4-7 spent 14h 47m and 437,940 tokens on this with the user in an interactive session.”,“closed_by”:null,“reactions”:{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23879/reactions”,“total_count”:0,“+1”:0,“-1”:0,“laugh”:0,“hooray”:0,“confused”:0,“heart”:0,“rocket”:0,“eyes”:0},“timeline_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23879/timeline”,“performed_via_github_app”:null,“state_reason”:null,“pinned_comment”:null},{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23875”,“repository_url”:“https://api.github.com/repos/anomalyco/opencode”,“labels_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23875/labels{/name}”,“comments_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23875/comments”,“events_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23875/events”,“html_url”:“https://github.com/anomalyco/opencode/issues/23875”,“id”:4309866785,“node_id”:“I_kwDOOiiGL88AAAABAONZIQ”,“number”:23875,“title”:“Desktop app bugs: resize glitch and input not accepting text on Windows 11”,“user”:{“login”:“blue-fy”,“id”:64030571,“node_id”:“MDQ6VXNlcjY0MDMwNTcx”,“avatar_url”:“https://avatars.githubusercontent.com/u/64030571?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/blue-fy”,“html_url”:“https://github.com/blue-fy”,“followers_url”:“https://api.github.com/users/blue-fy/followers”,“following_url”:“https://api.github.com/users/blue-fy/following{/other_user}”,“gists_url”:“https://api.github.com/users/blue-fy/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/blue-fy/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/blue-fy/subscriptions”,“organizations_url”:“https://api.github.com/users/blue-fy/orgs”,“repos_url”:“https://api.github.com/users/blue-fy/repos”,“events_url”:“https://api.github.com/users/blue-fy/events{/privacy}”,“received_events_url”:“https://api.github.com/users/blue-fy/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“labels”:[{“id”:9502448928,“node_id”:“LA_kwDOOiiGL88AAAACNmPdIA”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/windows”,“name”:“windows”,“color”:“fca1db”,“default”:false,“description”:""},{“id”:9578754464,“node_id”:“LA_kwDOOiiGL88AAAACOvAxoA”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/web”,“name”:“web”,“color”:“5fd4dc”,“default”:false,“description”:“Relates to opencode on web / desktop”}],“state”:“open”,“locked”:false,“assignees”:[{“login”:“Brendonovich”,“id”:14191578,“node_id”:“MDQ6VXNlcjE0MTkxNTc4”,“avatar_url”:“https://avatars.githubusercontent.com/u/14191578?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/Brendonovich”,“html_url”:“https://github.com/Brendonovich”,“followers_url”:“https://api.github.com/users/Brendonovich/followers”,“following_url”:“https://api.github.com/users/Brendonovich/following{/other_user}”,“gists_url”:“https://api.github.com/users/Brendonovich/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/Brendonovich/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/Brendonovich/subscriptions”,“organizations_url”:“https://api.github.com/users/Brendonovich/orgs”,“repos_url”:“https://api.github.com/users/Brendonovich/repos”,“events_url”:“https://api.github.com/users/Brendonovich/events{/privacy}”,“received_events_url”:“https://api.github.com/users/Brendonovich/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false}],“milestone”:null,“comments”:6,“created_at”:“2026-04-22T14:52:48Z”,“updated_at”:“2026-04-22T17:45:31Z”,“closed_at”:null,“assignee”:{“login”:“Brendonovich”,“id”:14191578,“node_id”:“MDQ6VXNlcjE0MTkxNTc4”,“avatar_url”:“https://avatars.githubusercontent.com/u/14191578?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/Brendonovich”,“html_url”:“https://github.com/Brendonovich”,“followers_url”:“https://api.github.com/users/Brendonovich/followers”,“following_url”:“https://api.github.com/users/Brendonovich/following{/other_user}”,“gists_url”:“https://api.github.com/users/Brendonovich/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/Brendonovich/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/Brendonovich/subscriptions”,“organizations_url”:“https://api.github.com/users/Brendonovich/orgs”,“repos_url”:“https://api.github.com/users/Brendonovich/repos”,“events_url”:“https://api.github.com/users/Brendonovich/events{/privacy}”,“received_events_url”:“https://api.github.com/users/Brendonovich/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“author_association”:“NONE”,“issue_field_values”:[],“type”:null,“active_lock_reason”:null,“sub_issues_summary”:{“total”:0,“completed”:0,“percent_completed”:0},“issue_dependencies_summary”:{“blocked_by”:0,“total_blocked_by”:0,“blocking”:0,“total_blocking”:0},“body”:”## Bugs in OpenCode Desktop App on Windows\n\n### Bug 1: Resize glitch\nWhen resizing panes, the panes get glued to the mouse pointer and do not align to what resizing has been requested.\n\n### Bug 2: Input not accepting text\nThe command input window does not accept any content when typing.\n\n### Environment\n- OS: Windows 11 Pro (64-bit operating system, x64-based processor)\n- OpenCode version: Desktop app v1.14.20\n- RAM: 32.0 GB (31.8 GB usable)\n- Storage: 140GB SSD free\n- CPU: Intel(R) Core(TM) i7-8665U CPU @ 1.90GHz (2.11 GHz)\n\n### Steps to reproduce\n1. Open OpenCode desktop app\n2. Try to resize a pane - observe the resize glitch\n3. Try to type in the command input - observe that text is not accepted\n\nPlease investigate and fix these issues.”,“closed_by”:null,“reactions”:{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23875/reactions”,“total_count”:0,“+1”:0,“-1”:0,“laugh”:0,“hooray”:0,“confused”:0,“heart”:0,“rocket”:0,“eyes”:0},“timeline_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23875/timeline”,“performed_via_github_app”:null,“state_reason”:null,“pinned_comment”:null},{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23874”,“repository_url”:“https://api.github.com/repos/anomalyco/opencode”,“labels_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23874/labels{/name}”,“comments_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23874/comments”,“events_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23874/events”,“html_url”:“https://github.com/anomalyco/opencode/issues/23874”,“id”:4309832153,“node_id”:“I_kwDOOiiGL88AAAABAOLR2Q”,“number”:23874,“title”:“[FEATURE]: Improve Projects Side bar visibility”,“user”:{“login”:“abdelrahman-aboelnour”,“id”:77008017,“node_id”:“MDQ6VXNlcjc3MDA4MDE3”,“avatar_url”:“https://avatars.githubusercontent.com/u/77008017?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/abdelrahman-aboelnour”,“html_url”:“https://github.com/abdelrahman-aboelnour”,“followers_url”:“https://api.github.com/users/abdelrahman-aboelnour/followers”,“following_url”:“https://api.github.com/users/abdelrahman-aboelnour/following{/other_user}”,“gists_url”:“https://api.github.com/users/abdelrahman-aboelnour/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/abdelrahman-aboelnour/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/abdelrahman-aboelnour/subscriptions”,“organizations_url”:“https://api.github.com/users/abdelrahman-aboelnour/orgs”,“repos_url”:“https://api.github.com/users/abdelrahman-aboelnour/repos”,“events_url”:“https://api.github.com/users/abdelrahman-aboelnour/events{/privacy}”,“received_events_url”:“https://api.github.com/users/abdelrahman-aboelnour/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“labels”:[{“id”:9496536813,“node_id”:“LA_kwDOOiiGL88AAAACNgmm7Q”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/discussion”,“name”:“discussion”,“color”:“0e8a16”,“default”:false,“description”:“Used for feature requests, proposals, ideas, etc. Open discussion”}],“state”:“open”,“locked”:false,“assignees”:[],“milestone”:null,“comments”:2,“created_at”:“2026-04-22T14:47:48Z”,“updated_at”:“2026-04-22T14:50:58Z”,“closed_at”:null,“assignee”:null,“author_association”:“NONE”,“issue_field_values”:[],“type”:null,“active_lock_reason”:null,“sub_issues_summary”:{“total”:0,“completed”:0,“percent_completed”:0},“issue_dependencies_summary”:{“blocked_by”:0,“total_blocked_by”:0,“blocking”:0,“total_blocking”:0},“body”:”### Feature hasn’t been suggested before.\n\n- [x] I have verified this feature I’m about to request hasn’t been suggested before.\n\n### Describe the enhancement you want to request\n\nthe project sidebar seems to be hard to use and even harder to navigate / find the project you want, for example in my projects they all start with the same prefix so kinda annoying to be able to find the project I want to work in. think the side bar / chats need better visibility / UX.\n\n<img width=“65” height=“1017” alt=“Image” src=“https://github.com/user-attachments/assets/133b3f4c-78b7-4ebb-be39-2e58546897f0” />”,“closed_by”:null,“reactions”:{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23874/reactions”,“total_count”:0,“+1”:0,“-1”:0,“laugh”:0,“hooray”:0,“confused”:0,“heart”:0,“rocket”:0,“eyes”:0},“timeline_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23874/timeline”,“performed_via_github_app”:null,“state_reason”:null,“pinned_comment”:null},{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23872”,“repository_url”:“https://api.github.com/repos/anomalyco/opencode”,“labels_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23872/labels{/name}”,“comments_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23872/comments”,“events_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23872/events”,“html_url”:“https://github.com/anomalyco/opencode/issues/23872”,“id”:4309807698,“node_id”:“I_kwDOOiiGL88AAAABAOJyUg”,“number”:23872,“title”:“opencode桌面版显示问题”,“user”:{“login”:“gs272”,“id”:4101877,“node_id”:“MDQ6VXNlcjQxMDE4Nzc=”,“avatar_url”:“https://avatars.githubusercontent.com/u/4101877?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/gs272”,“html_url”:“https://github.com/gs272”,“followers_url”:“https://api.github.com/users/gs272/followers”,“following_url”:“https://api.github.com/users/gs272/following{/other_user}”,“gists_url”:“https://api.github.com/users/gs272/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/gs272/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/gs272/subscriptions”,“organizations_url”:“https://api.github.com/users/gs272/orgs”,“repos_url”:“https://api.github.com/users/gs272/repos”,“events_url”:“https://api.github.com/users/gs272/events{/privacy}”,“received_events_url”:“https://api.github.com/users/gs272/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“labels”:[{“id”:8542148739,“node_id”:“LA_kwDOOiiGL88AAAAB_SbYgw”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/bug”,“name”:“bug”,“color”:“d73a4a”,“default”:true,“description”:“Something isn’t working”},{“id”:9578754464,“node_id”:“LA_kwDOOiiGL88AAAACOvAxoA”,“url”:“https://api.github.com/repos/anomalyco/opencode/labels/web”,“name”:“web”,“color”:“5fd4dc”,“default”:false,“description”:“Relates to opencode on web / desktop”}],“state”:“open”,“locked”:false,“assignees”:[{“login”:“Brendonovich”,“id”:14191578,“node_id”:“MDQ6VXNlcjE0MTkxNTc4”,“avatar_url”:“https://avatars.githubusercontent.com/u/14191578?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/Brendonovich”,“html_url”:“https://github.com/Brendonovich”,“followers_url”:“https://api.github.com/users/Brendonovich/followers”,“following_url”:“https://api.github.com/users/Brendonovich/following{/other_user}”,“gists_url”:“https://api.github.com/users/Brendonovich/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/Brendonovich/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/Brendonovich/subscriptions”,“organizations_url”:“https://api.github.com/users/Brendonovich/orgs”,“repos_url”:“https://api.github.com/users/Brendonovich/repos”,“events_url”:“https://api.github.com/users/Brendonovich/events{/privacy}”,“received_events_url”:“https://api.github.com/users/Brendonovich/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false}],“milestone”:null,“comments”:1,“created_at”:“2026-04-22T14:44:20Z”,“updated_at”:“2026-04-22T15:15:06Z”,“closed_at”:null,“assignee”:{“login”:“Brendonovich”,“id”:14191578,“node_id”:“MDQ6VXNlcjE0MTkxNTc4”,“avatar_url”:“https://avatars.githubusercontent.com/u/14191578?v=4”,“gravatar_id”:"",“url”:“https://api.github.com/users/Brendonovich”,“html_url”:“https://github.com/Brendonovich”,“followers_url”:“https://api.github.com/users/Brendonovich/followers”,“following_url”:“https://api.github.com/users/Brendonovich/following{/other_user}”,“gists_url”:“https://api.github.com/users/Brendonovich/gists{/gist_id}”,“starred_url”:“https://api.github.com/users/Brendonovich/starred{/owner}{/repo}”,“subscriptions_url”:“https://api.github.com/users/Brendonovich/subscriptions”,“organizations_url”:“https://api.github.com/users/Brendonovich/orgs”,“repos_url”:“https://api.github.com/users/Brendonovich/repos”,“events_url”:“https://api.github.com/users/Brendonovich/events{/privacy}”,“received_events_url”:“https://api.github.com/users/Brendonovich/received_events”,“type”:“User”,“user_view_type”:“public”,“site_admin”:false},“author_association”:“NONE”,“issue_field_values”:[],“type”:null,“active_lock_reason”:null,“sub_issues_summary”:{“total”:0,“completed”:0,“percent_completed”:0},“issue_dependencies_summary”:{“blocked_by”:0,“total_blocked_by”:0,“blocking”:0,“total_blocking”:0},“body”:”### Description\n\n在会话过程中,会有AI给出选项让用户选择的情形,当选项列表过长时,会垂直撑满整个界面,无法看到和点击最下方的确认按钮,流程就硬生生卡住无法进行下一步。目测选项卡是贴底的,还会挡住提示词输入区域,要将选项卡融入会话区域,避免出现这种尴尬的局面。\n\n### Plugins\n\n_No response_\n\n### OpenCode version\n\n_No response_\n\n### Steps to reproduce\n\n_No response_\n\n### Screenshot and/or share link\n\n_No response_\n\n### Operating System\n\n_No response_\n\n### Terminal\n\n_No response_”,“closed_by”:null,“reactions”:{“url”:“https://api.github.com/repos/anomalyco/opencode/issues/23872/reactions”,“total_count”:0,“+1”:0,“-1”:0,“laugh”:0,“hooray”:0,“confused”:0,“heart”:0,“rocket”:0,“eyes”:0},“timeline_url”:“https://api.github.com/repos/anomalyco/opencode/issues/23872/timeline”,“performed_via_github_app”:null,“state_reason”:null,“pinned_comment”:null}]