Skip to content

Commit 86c5379

Browse files
committed
fix(api): user commands don't need a full-rerender
This can actually trigger a race condition between renderer.render_full_session and opencode delivering responses to the prompt.
1 parent 02a0a66 commit 86c5379

File tree

1 file changed

+12
-15
lines changed

1 file changed

+12
-15
lines changed

lua/opencode/api.lua

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
local core = require('opencode.core')
22
local util = require('opencode.util')
33
local session = require('opencode.session')
4-
local input_window = require('opencode.ui.input_window')
4+
local config_file = require('opencode.config_file')
5+
local state = require('opencode.state')
56

7+
local input_window = require('opencode.ui.input_window')
68
local ui = require('opencode.ui.ui')
79
local icons = require('opencode.ui.icons')
8-
local state = require('opencode.state')
910
local git_review = require('opencode.git_review')
1011
local history = require('opencode.history')
11-
local id = require('opencode.id')
1212

1313
local M = {}
1414

@@ -348,6 +348,8 @@ function M.debug_session()
348348
end
349349

350350
function M.initialize()
351+
local id = require('opencode.id')
352+
351353
ui.render_output(true)
352354

353355
local new_session = core.create_new_session('AGENTS.md Initialization')
@@ -382,7 +384,7 @@ function M.agent_build()
382384
end
383385

384386
function M.select_agent()
385-
local modes = require('opencode.config_file').get_opencode_agents()
387+
local modes = config_file.get_opencode_agents()
386388
vim.ui.select(modes, {
387389
prompt = 'Select mode:',
388390
}, function(selection)
@@ -395,7 +397,7 @@ function M.select_agent()
395397
end
396398

397399
function M.switch_mode()
398-
local modes = require('opencode.config_file').get_opencode_agents() --[[@as string[] ]]
400+
local modes = config_file.get_opencode_agents() --[[@as string[] ]]
399401

400402
local current_index = util.index_of(modes, state.current_mode)
401403

@@ -478,8 +480,7 @@ function M.help()
478480
end
479481

480482
function M.mcp()
481-
local info = require('opencode.config_file')
482-
local mcp = info.get_mcp_servers()
483+
local mcp = config_file.get_mcp_servers()
483484
if not mcp then
484485
vim.notify('No MCP configuration found. Please check your opencode config file.', vim.log.levels.WARN)
485486
return
@@ -520,8 +521,7 @@ function M.mcp()
520521
end
521522

522523
function M.commands_list()
523-
local info = require('opencode.config_file')
524-
local commands = info.get_user_commands()
524+
local commands = config_file.get_user_commands()
525525
if not commands then
526526
vim.notify('No user commands found. Please check your opencode config file.', vim.log.levels.WARN)
527527
return
@@ -533,13 +533,13 @@ function M.commands_list()
533533
local msg = M.with_header({
534534
'### Available User Commands',
535535
'',
536-
'| Name | Description |',
537-
'|------|-------------|',
536+
'| Name | Description |Arguments|',
537+
'|------|-------------|---------|',
538538
})
539539

540540
for name, def in pairs(commands) do
541541
local desc = def.description or ''
542-
table.insert(msg, string.format('| %s | %s |', name, desc))
542+
table.insert(msg, string.format('| %s | %s | %s |', name, desc, tostring(config_file.command_takes_arguments(def))))
543543
end
544544

545545
table.insert(msg, '')
@@ -552,7 +552,6 @@ end
552552
function M.run_user_command(name, args)
553553
M.open_input()
554554

555-
ui.render_output(true)
556555
if not state.active_session then
557556
vim.notify('No active session', vim.log.levels.WARN)
558557
return
@@ -1023,7 +1022,6 @@ M.commands = {
10231022
command = {
10241023
desc = 'Run user-defined command',
10251024
completions = function()
1026-
local config_file = require('opencode.config_file')
10271025
local user_commands = config_file.get_user_commands()
10281026
if not user_commands then
10291027
return {}
@@ -1224,7 +1222,6 @@ function M.get_slash_commands()
12241222
})
12251223
end
12261224

1227-
local config_file = require('opencode.config_file')
12281225
local user_commands = config_file.get_user_commands()
12291226
if user_commands then
12301227
for name, def in pairs(user_commands) do

0 commit comments

Comments
 (0)