Skip to content

Commit 16154df

Browse files
committed
feat(state): add server port setter and session helpers
1 parent 5429155 commit 16154df

5 files changed

Lines changed: 29 additions & 10 deletions

File tree

lua/opencode/context.lua

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -116,12 +116,10 @@ end
116116
-- Delegate global state management to ChatContext
117117
function M.add_selection(selection)
118118
ChatContext.add_selection(selection)
119-
state.context.set_context_updated_at(vim.uv.now())
120119
end
121120

122121
function M.remove_selection(selection)
123122
ChatContext.remove_selection(selection)
124-
state.context.set_context_updated_at(vim.uv.now())
125123
end
126124

127125
function M.clear_selections()
@@ -216,13 +214,11 @@ function M.add_file(file)
216214

217215
file = vim.fn.fnamemodify(file, ':p')
218216
ChatContext.add_file(file)
219-
state.context.set_context_updated_at(vim.uv.now())
220217
end
221218

222219
function M.remove_file(file)
223220
file = vim.fn.fnamemodify(file, ':p')
224221
ChatContext.remove_file(file)
225-
state.context.set_context_updated_at(vim.uv.now())
226222
end
227223

228224
function M.clear_files()
@@ -231,12 +227,10 @@ end
231227

232228
function M.add_subagent(subagent)
233229
ChatContext.add_subagent(subagent)
234-
state.context.set_context_updated_at(vim.uv.now())
235230
end
236231

237232
function M.remove_subagent(subagent)
238233
ChatContext.remove_subagent(subagent)
239-
state.context.set_context_updated_at(vim.uv.now())
240234
end
241235

242236
function M.clear_subagents()
@@ -249,7 +243,6 @@ end
249243

250244
function M.load()
251245
ChatContext.load()
252-
state.context.set_context_updated_at(vim.uv.now())
253246
end
254247

255248
-- Context creation with delta logic (delegates to ChatContext)

lua/opencode/image_handler.lua

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,6 @@ function M.paste_image_from_clipboard()
150150

151151
if success then
152152
context.add_file(image_path)
153-
state.context.set_context_updated_at(os.time())
154153
vim.notify('Image saved and added to context: ' .. vim.fn.fnamemodify(image_path, ':t'), vim.log.levels.INFO)
155154
return true
156155
end

lua/opencode/state/jobs.lua

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,13 @@ function M.clear_server()
3131
return store.set('opencode_server', nil)
3232
end
3333

34+
---@param port integer
35+
function M.set_server_port(port)
36+
store.mutate('opencode_server', function(server)
37+
server.port = port
38+
end)
39+
end
40+
3441
---@param client OpencodeApiClient|nil
3542
function M.set_api_client(client)
3643
return store.set('api_client', client)

lua/opencode/state/session.lua

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,22 @@ function M.set_user_message_count(count)
4141
return store.set('user_message_count', count)
4242
end
4343

44+
---Increment/decrement the message count for a session, clamped to >= 0
45+
---@param session_id string
46+
---@param delta integer
47+
function M.increment_user_message_count(session_id, delta)
48+
store.mutate('user_message_count', function(counts)
49+
local new_value = (counts[session_id] or 0) + delta
50+
counts[session_id] = new_value >= 0 and new_value or 0
51+
end)
52+
end
53+
54+
---Update active_session without emitting a change event, used when a silent
55+
---in-place update is needed (e.g. session metadata refresh that must not
56+
---trigger a re-render)
57+
---@param session Session
58+
function M.update_silently(session)
59+
store.set_raw('active_session', session)
60+
end
61+
4462
return M

tests/minimal/init.lua

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ vim.opt.termguicolors = true
3434

3535
require('opencode')
3636

37-
if vim.treesitter and vim.treesitter.start then
38-
vim.treesitter.start = function() end
37+
-- Safely stub out treesitter start during tests. Accessing `vim.treesitter`
38+
local ok, ts = pcall(require, 'vim.treesitter')
39+
if ok and ts and ts.start then
40+
ts.start = function() end
3941
end

0 commit comments

Comments
 (0)