From c8bc0f0e20eb0cd72ba9cc57fdd9d06a93aa5f99 Mon Sep 17 00:00:00 2001 From: disrupted Date: Thu, 12 Feb 2026 21:46:08 +0100 Subject: [PATCH 1/9] refactor(ui): switch to locale-aware timestamp formatting --- lua/opencode/ui/formatter.lua | 118 +++++++++++++++++++++------------- lua/opencode/util.lua | 49 ++++++++++++-- 2 files changed, 118 insertions(+), 49 deletions(-) diff --git a/lua/opencode/ui/formatter.lua b/lua/opencode/ui/formatter.lua index 00f482f7..63d076fc 100644 --- a/lua/opencode/ui/formatter.lua +++ b/lua/opencode/ui/formatter.lua @@ -19,27 +19,26 @@ M.separator = { ---@param part OpencodeMessagePart function M._format_reasoning(output, part) local text = vim.trim(part.text or '') - if text == '' then - return - end local start_line = output:get_line_count() + 1 local title = 'Reasoning' local time = part.time if time and type(time) == 'table' and time.start then - local start_text = util.format_time(time.start) or '' - local end_text = (time['end'] and util.format_time(time['end'])) or nil - if end_text and end_text ~= '' then - title = string.format('%s (%s - %s)', title, start_text, end_text) - elseif start_text ~= '' then - title = string.format('%s (%s)', title, start_text) + local duration_text = util.format_duration_seconds(time.start, time['end']) + if duration_text then + title = string.format('%s (%s)', title, duration_text) + else + local start_text = util.format_time(time.start) or '' + if start_text ~= '' then + title = string.format('%s (%s)', title, start_text) + end end end M.format_action(output, icons.get('reasoning') .. ' ' .. title, '') - if config.ui.output.tools.show_reasoning_output then + if config.ui.output.tools.show_reasoning_output and text ~= '' then output:add_empty_line() output:add_lines(vim.split(text, '\n')) output:add_empty_line() @@ -219,7 +218,6 @@ function M.format_message_header(message) local icon = message.info.role == 'user' and icons.get('header_user') or icons.get('header_assistant') local time = message.info.time and message.info.time.created or nil - local time_text = (time and ' (' .. util.format_time(time) .. ')' or '') local role_hl = 'OpencodeMessageRole' .. role:sub(1, 1):upper() .. role:sub(2) local model_text = message.info.modelID and ' ' .. message.info.modelID or '' @@ -250,13 +248,20 @@ function M.format_message_header(message) { ' ' }, { display_name, role_hl }, { model_text, 'OpencodeHint' }, - { time_text, 'OpencodeHint' }, { debug_text, 'OpencodeHint' }, }, virt_text_win_col = -3, priority = 10, } --[[@as OutputExtmark]]) + if time then + output:add_extmark(output:get_line_count() - 1, { + virt_text = { { ' ' .. util.format_time(time), 'OpencodeHint' } }, + virt_text_pos = 'right_align', + priority = 9, + } --[[@as OutputExtmark]]) + end + -- Only want to show the error if we have no parts. If we have parts, they'll -- handle rendering the error if @@ -468,11 +473,14 @@ end ---@param output Output Output object to write to ---@param tool_type string Tool type (e.g., 'run', 'read', 'edit', etc.) ---@param value string Value associated with the action (e.g., filename, command) -function M.format_action(output, tool_type, value) +---@param duration_text? string +function M.format_action(output, tool_type, value, duration_text) if not tool_type or not value then return end - local line = string.format('**%s** %s', tool_type, value and #value > 0 and ('`' .. value .. '`') or '') + local detail = value and #value > 0 and ('`' .. value .. '`') or '' + local duration_suffix = duration_text and (' ' .. duration_text) or '' + local line = string.format('**%s** %s%s', tool_type, detail, duration_suffix) output:add_line(line) end @@ -480,8 +488,9 @@ end ---@param output Output Output object to write to ---@param input BashToolInput data for the tool ---@param metadata BashToolMetadata Metadata for the tool use -function M._format_bash_tool(output, input, metadata) - M.format_action(output, icons.get('run') .. ' run', input and input.description) +---@param duration_text? string +function M._format_bash_tool(output, input, metadata, duration_text) + M.format_action(output, icons.get('run') .. ' run', input and input.description, duration_text) if not config.ui.output.tools.show_output then return @@ -498,7 +507,8 @@ end ---@param tool_type string Tool type (e.g., 'read', 'edit', 'write') ---@param input FileToolInput data for the tool ---@param metadata FileToolMetadata Metadata for the tool use -function M._format_file_tool(output, tool_type, input, metadata) +---@param duration_text? string +function M._format_file_tool(output, tool_type, input, metadata, duration_text) local file_name = '' if input and input.filePath then local cwd = vim.fn.getcwd() @@ -514,7 +524,7 @@ function M._format_file_tool(output, tool_type, input, metadata) local file_type = input and util.get_markdown_filetype(input.filePath) or '' local tool_action_icons = { read = icons.get('read'), edit = icons.get('edit'), write = icons.get('write') } - M.format_action(output, tool_action_icons[tool_type] .. ' ' .. tool_type, file_name) + M.format_action(output, tool_action_icons[tool_type] .. ' ' .. tool_type, file_name, duration_text) if not config.ui.output.tools.show_output then return @@ -530,8 +540,9 @@ end ---@param output Output Output object to write to ---@param title string ---@param input TodoToolInput -function M._format_todo_tool(output, title, input) - M.format_action(output, icons.get('plan') .. ' plan', (title or '')) +---@param duration_text? string +function M._format_todo_tool(output, title, input, duration_text) + M.format_action(output, icons.get('plan') .. ' plan', (title or ''), duration_text) if not config.ui.output.tools.show_output then return end @@ -547,8 +558,9 @@ end ---@param output Output Output object to write to ---@param input GlobToolInput data for the tool ---@param metadata GlobToolMetadata Metadata for the tool use -function M._format_glob_tool(output, input, metadata) - M.format_action(output, icons.get('search') .. ' glob', input and input.pattern) +---@param duration_text? string +function M._format_glob_tool(output, input, metadata, duration_text) + M.format_action(output, icons.get('search') .. ' glob', input and input.pattern, duration_text) if not config.ui.output.tools.show_output then return end @@ -559,7 +571,8 @@ end ---@param output Output Output object to write to ---@param input GrepToolInput data for the tool ---@param metadata GrepToolMetadata Metadata for the tool use -function M._format_grep_tool(output, input, metadata) +---@param duration_text? string +function M._format_grep_tool(output, input, metadata, duration_text) local grep_str = table.concat( vim.tbl_filter(function(part) return part ~= nil @@ -567,7 +580,7 @@ function M._format_grep_tool(output, input, metadata) '` `' ) - M.format_action(output, icons.get('search') .. ' grep', grep_str) + M.format_action(output, icons.get('search') .. ' grep', grep_str, duration_text) if not config.ui.output.tools.show_output then return end @@ -579,16 +592,18 @@ end ---@param output Output Output object to write to ---@param input WebFetchToolInput data for the tool -function M._format_webfetch_tool(output, input) - M.format_action(output, icons.get('web') .. ' fetch', input and input.url) +---@param duration_text? string +function M._format_webfetch_tool(output, input, duration_text) + M.format_action(output, icons.get('web') .. ' fetch', input and input.url, duration_text) end ---@param output Output Output object to write to ---@param input ListToolInput ---@param metadata ListToolMetadata ---@param tool_output string -function M._format_list_tool(output, input, metadata, tool_output) - M.format_action(output, icons.get('list') .. ' list', input and input.path or '') +---@param duration_text? string +function M._format_list_tool(output, input, metadata, tool_output, duration_text) + M.format_action(output, icons.get('list') .. ' list', input and input.path or '', duration_text) if not config.ui.output.tools.show_output then return end @@ -615,8 +630,9 @@ end ---@param input QuestionToolInput Question tool input data ---@param metadata QuestionToolMetadata Question tool metadata ---@param status string Status of the tool execution -function M._format_question_tool(output, input, metadata, status) - M.format_action(output, icons.get('question') .. ' question', '') +---@param duration_text? string +function M._format_question_tool(output, input, metadata, status, duration_text) + M.format_action(output, icons.get('question') .. ' question', '', duration_text) output:add_empty_line() if not config.ui.output.tools.show_output or status ~= 'completed' then return @@ -655,32 +671,47 @@ function M._format_tool(output, part) local input = part.state.input or {} local metadata = part.state.metadata or {} local tool_output = part.state.output or '' + local tool_time = part.state.time or {} + local duration_text = util.format_duration_seconds(tool_time.start, tool_time['end']) if tool == 'bash' then - M._format_bash_tool(output, input --[[@as BashToolInput]], metadata --[[@as BashToolMetadata]]) + M._format_bash_tool(output, input --[[@as BashToolInput]], metadata --[[@as BashToolMetadata]], duration_text) elseif tool == 'read' or tool == 'edit' or tool == 'write' then - M._format_file_tool(output, tool, input --[[@as FileToolInput]], metadata --[[@as FileToolMetadata]]) + M._format_file_tool(output, tool, input --[[@as FileToolInput]], metadata --[[@as FileToolMetadata]], duration_text) elseif tool == 'todowrite' then - M._format_todo_tool(output, part.state.title, input --[[@as TodoToolInput]]) + M._format_todo_tool(output, part.state.title, input --[[@as TodoToolInput]], duration_text) elseif tool == 'glob' then - M._format_glob_tool(output, input --[[@as GlobToolInput]], metadata --[[@as GlobToolMetadata]]) + M._format_glob_tool(output, input --[[@as GlobToolInput]], metadata --[[@as GlobToolMetadata]], duration_text) elseif tool == 'list' then - M._format_list_tool(output, input --[[@as ListToolInput]], metadata --[[@as ListToolMetadata]], tool_output) + M._format_list_tool( + output, + input --[[@as ListToolInput]], + metadata --[[@as ListToolMetadata]], + tool_output, + duration_text + ) elseif tool == 'grep' then - M._format_grep_tool(output, input --[[@as GrepToolInput]], metadata --[[@as GrepToolMetadata]]) + M._format_grep_tool(output, input --[[@as GrepToolInput]], metadata --[[@as GrepToolMetadata]], duration_text) elseif tool == 'webfetch' then - M._format_webfetch_tool(output, input --[[@as WebFetchToolInput]]) + M._format_webfetch_tool(output, input --[[@as WebFetchToolInput]], duration_text) elseif tool == 'task' then - M._format_task_tool(output, input --[[@as TaskToolInput]], metadata --[[@as TaskToolMetadata]], tool_output) + M._format_task_tool( + output, + input --[[@as TaskToolInput]], + metadata --[[@as TaskToolMetadata]], + tool_output, + duration_text + ) elseif tool == 'question' then M._format_question_tool( output, input --[[@as QuestionToolInput]], metadata --[[@as QuestionToolMetadata]], - part.state.status + part.state.status, + duration_text ) else - M.format_action(output, icons.get('tool') .. ' tool', tool) + M.format_action(output, icons.get('tool') .. ' tool', tool, duration_text) end if part.state.status == 'error' and part.state.error then @@ -704,7 +735,8 @@ end ---@param input TaskToolInput data for the tool ---@param metadata TaskToolMetadata Metadata for the tool use ---@param tool_output string -function M._format_task_tool(output, input, metadata, tool_output) +---@param duration_text? string +function M._format_task_tool(output, input, metadata, tool_output, duration_text) local start_line = output:get_line_count() + 1 -- Show agent type if available @@ -714,7 +746,7 @@ function M._format_task_tool(output, input, metadata, tool_output) description = string.format('%s (@%s)', description, agent_type) end - M.format_action(output, icons.get('task') .. ' task', description) + M.format_action(output, icons.get('task') .. ' task', description, duration_text) if config.ui.output.tools.show_output then -- Show task summary from metadata @@ -877,7 +909,7 @@ function M.format_part(part, message, is_last_part) if part.type == 'text' and part.text then M._format_assistant_message(output, vim.trim(part.text)) content_added = true - elseif part.type == 'reasoning' and part.text then + elseif part.type == 'reasoning' then M._format_reasoning(output, part) content_added = true elseif part.type == 'tool' then diff --git a/lua/opencode/util.lua b/lua/opencode/util.lua index e36cb88b..1b73b297 100644 --- a/lua/opencode/util.lua +++ b/lua/opencode/util.lua @@ -88,18 +88,55 @@ end --- @param timestamp number --- @return string: Formatted time string function M.format_time(timestamp) - local formats = { day = '%I:%M %p', year = '%d %b %I:%M %p', full = '%d %b %Y %I:%M %p' } - - if timestamp > 1e12 then - timestamp = math.floor(timestamp / 1000) + timestamp = M.normalize_timestamp(timestamp) + if not timestamp then + return '' end local same_day = os.date('%Y-%m-%d') == os.date('%Y-%m-%d', timestamp) local same_year = os.date('%Y') == os.date('%Y', timestamp) + local locale_time = vim.trim(os.date('%X', timestamp) or '') + + -- Keep output close to previous formatting by dropping seconds when present. + locale_time = locale_time:gsub('^(%d?%d:%d%d):%d%d(.*)$', '%1%2') + if locale_time == '' then + locale_time = vim.trim(os.date('%H:%M', timestamp) or '') + end + + if same_day then + return locale_time + end + + if same_year then + return string.format('%s %s', os.date('%d %b', timestamp), locale_time) + end + + return string.format('%s %s', os.date('%d %b %Y', timestamp), locale_time) +end - local format_str = same_day and formats.day or (same_year and formats.year or formats.full) +---@param timestamp number +---@return number +function M.normalize_timestamp(timestamp) + if not timestamp then + return nil + end + + if timestamp > 1e12 then + return math.floor(timestamp / 1000) + end + + return timestamp +end + +---@param start_time number|nil +---@param end_time number|nil +---@return string|nil +function M.format_duration_seconds(start_time, end_time) + if not start_time or not end_time then + return nil + end - return os.date(format_str, timestamp) --[[@as string]] + return string.format('%ds', math.max(0, M.normalize_timestamp(end_time) - M.normalize_timestamp(start_time))) end function M.index_of(tbl, value) From d80d28ff5c0357f94f0aa69fb805a7489d42813a Mon Sep 17 00:00:00 2001 From: disrupted Date: Thu, 12 Feb 2026 22:33:35 +0100 Subject: [PATCH 2/9] refactor(ui): improve duration rendering --- lua/opencode/ui/formatter.lua | 4 +++- lua/opencode/util.lua | 18 ++++++++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/lua/opencode/ui/formatter.lua b/lua/opencode/ui/formatter.lua index 63d076fc..cd78cbab 100644 --- a/lua/opencode/ui/formatter.lua +++ b/lua/opencode/ui/formatter.lua @@ -672,7 +672,9 @@ function M._format_tool(output, part) local metadata = part.state.metadata or {} local tool_output = part.state.output or '' local tool_time = part.state.time or {} - local duration_text = util.format_duration_seconds(tool_time.start, tool_time['end']) + local tool_status = part.state.status + local should_show_duration = tool ~= 'question' and tool_status ~= 'pending' + local duration_text = should_show_duration and util.format_duration_seconds(tool_time.start, tool_time['end']) or nil if tool == 'bash' then M._format_bash_tool(output, input --[[@as BashToolInput]], metadata --[[@as BashToolMetadata]], duration_text) diff --git a/lua/opencode/util.lua b/lua/opencode/util.lua index 1b73b297..8dc66cbe 100644 --- a/lua/opencode/util.lua +++ b/lua/opencode/util.lua @@ -132,11 +132,25 @@ end ---@param end_time number|nil ---@return string|nil function M.format_duration_seconds(start_time, end_time) - if not start_time or not end_time then + local normalized_start = M.normalize_timestamp(start_time) + if not normalized_start then return nil end - return string.format('%ds', math.max(0, M.normalize_timestamp(end_time) - M.normalize_timestamp(start_time))) + local is_in_progress = end_time == nil + local normalized_end = M.normalize_timestamp(end_time) or os.time() + local elapsed_seconds = math.max(0, normalized_end - normalized_start) + + if is_in_progress then + elapsed_seconds = math.max(1, elapsed_seconds) + return string.format('%ds', elapsed_seconds) + end + + if elapsed_seconds < 1 then + return nil + end + + return string.format('%ds', elapsed_seconds) end function M.index_of(tbl, value) From 85097e0b90730cfaa517fa422fbb66d56619887f Mon Sep 17 00:00:00 2001 From: disrupted Date: Thu, 12 Feb 2026 22:36:20 +0100 Subject: [PATCH 3/9] refactor(ui): render reasoning time as duration --- lua/opencode/ui/formatter.lua | 5 ----- 1 file changed, 5 deletions(-) diff --git a/lua/opencode/ui/formatter.lua b/lua/opencode/ui/formatter.lua index cd78cbab..c23ded42 100644 --- a/lua/opencode/ui/formatter.lua +++ b/lua/opencode/ui/formatter.lua @@ -28,11 +28,6 @@ function M._format_reasoning(output, part) local duration_text = util.format_duration_seconds(time.start, time['end']) if duration_text then title = string.format('%s (%s)', title, duration_text) - else - local start_text = util.format_time(time.start) or '' - if start_text ~= '' then - title = string.format('%s (%s)', title, start_text) - end end end From c1497aa748d6d8cbbb9e8e8db4dfea16b3e8193f Mon Sep 17 00:00:00 2001 From: disrupted Date: Thu, 12 Feb 2026 22:51:10 +0100 Subject: [PATCH 4/9] refactor(formatter): drop parentheses around reasoning duration for consistency with tool usage --- lua/opencode/ui/formatter.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/opencode/ui/formatter.lua b/lua/opencode/ui/formatter.lua index c23ded42..9dc6c159 100644 --- a/lua/opencode/ui/formatter.lua +++ b/lua/opencode/ui/formatter.lua @@ -27,7 +27,7 @@ function M._format_reasoning(output, part) if time and type(time) == 'table' and time.start then local duration_text = util.format_duration_seconds(time.start, time['end']) if duration_text then - title = string.format('%s (%s)', title, duration_text) + title = string.format('%s %s', title, duration_text) end end From 9603f8a94c5e46cf3f73809e13092c450c2927cc Mon Sep 17 00:00:00 2001 From: disrupted Date: Thu, 12 Feb 2026 22:54:19 +0100 Subject: [PATCH 5/9] refactor: improve type annotation --- lua/opencode/util.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/opencode/util.lua b/lua/opencode/util.lua index 8dc66cbe..1438c7dd 100644 --- a/lua/opencode/util.lua +++ b/lua/opencode/util.lua @@ -128,7 +128,7 @@ function M.normalize_timestamp(timestamp) return timestamp end ----@param start_time number|nil +---@param start_time number ---@param end_time number|nil ---@return string|nil function M.format_duration_seconds(start_time, end_time) From d44b711c9a88deff98c6995fb0ac8efe306f87a1 Mon Sep 17 00:00:00 2001 From: disrupted Date: Thu, 12 Feb 2026 22:56:34 +0100 Subject: [PATCH 6/9] test: update unit tests --- tests/unit/util_spec.lua | 114 ++++++++++++++++++++++++--------------- 1 file changed, 70 insertions(+), 44 deletions(-) diff --git a/tests/unit/util_spec.lua b/tests/unit/util_spec.lua index e44dc214..814f990e 100644 --- a/tests/unit/util_spec.lua +++ b/tests/unit/util_spec.lua @@ -103,6 +103,15 @@ describe('util.format_time', function() return os.time({ year = year, month = month, day = day, hour = hour or 0, min = min or 0, sec = sec or 0 }) end + local function compact_locale_time(timestamp) + local locale_time = vim.trim(os.date('%X', timestamp) or '') + locale_time = locale_time:gsub('^(%d?%d:%d%d):%d%d(.*)$', '%1%2') + if locale_time == '' then + locale_time = vim.trim(os.date('%H:%M', timestamp) or '') + end + return locale_time + end + local today = os.date('*t') local today_morning = make_timestamp(today.year, today.month, today.day, 8, 30, 0) local today_afternoon = make_timestamp(today.year, today.month, today.day, 15, 45, 30) @@ -114,56 +123,52 @@ describe('util.format_time', function() local next_year = make_timestamp(today.year + 1, 6, 15, 12, 0, 0) describe('today timestamps', function() - it('formats morning time correctly', function() + it('formats morning time with locale time only', function() local result = util.format_time(today_morning) - assert.matches('^%d%d?:%d%d [AP]M$', result) + assert.equals(compact_locale_time(today_morning), result) assert.is_nil(result:match('%d%d%d%d')) end) - it('formats afternoon time correctly', function() + it('formats afternoon time with locale time only', function() local result = util.format_time(today_afternoon) - assert.matches('^%d%d?:%d%d [AP]M$', result) + assert.equals(compact_locale_time(today_afternoon), result) assert.is_nil(result:match('%d%d%d%d')) end) - it('formats late evening time correctly', function() + it('formats late evening time with locale time only', function() local result = util.format_time(today_evening) - assert.matches('^%d%d?:%d%d [AP]M$', result) + assert.equals(compact_locale_time(today_evening), result) assert.is_nil(result:match('%d%d%d%d')) end) it('formats current time as time-only', function() local current_time = os.time() local result = util.format_time(current_time) - assert.matches('^%d%d?:%d%d [AP]M$', result) + assert.equals(compact_locale_time(current_time), result) assert.is_nil(result:match('%d%d%d%d')) end) end) describe('other day timestamps', function() - it('formats yesterday with date', function() + it('formats yesterday with date prefix and locale time', function() local result = util.format_time(yesterday) - local yesterday_date = os.date('*t', yesterday) - if yesterday_date.year == today.year then - assert.matches('^%d%d? %a%a%a %d%d?:%d%d [AP]M$', result) - else - assert.matches('^%d%d? %a%a%a %d%d%d%d %d%d?:%d%d [AP]M$', result) - end + local expected_prefix = os.date('%d %b', yesterday) .. ' ' + assert.is_true(vim.startswith(result, expected_prefix)) + assert.equals(compact_locale_time(yesterday), result:sub(#expected_prefix + 1)) end) - it('formats last week with date', function() + it('formats last week with date prefix and locale time', function() local result = util.format_time(last_week) - local last_week_date = os.date('*t', last_week) - if last_week_date.year == today.year then - assert.matches('^%d%d? %a%a%a %d%d?:%d%d [AP]M$', result) - else - assert.matches('^%d%d? %a%a%a %d%d%d%d %d%d?:%d%d [AP]M$', result) - end + local expected_prefix = os.date('%d %b', last_week) .. ' ' + assert.is_true(vim.startswith(result, expected_prefix)) + assert.equals(compact_locale_time(last_week), result:sub(#expected_prefix + 1)) end) - it('formats future date with full date', function() + it('formats future date with full date and locale time', function() local result = util.format_time(next_year) - assert.matches('^%d%d? %a%a%a %d%d%d%d %d%d?:%d%d [AP]M$', result) + local expected_prefix = os.date('%d %b %Y', next_year) .. ' ' + assert.is_true(vim.startswith(result, expected_prefix)) + assert.equals(compact_locale_time(next_year), result:sub(#expected_prefix + 1)) assert.matches('%d%d%d%d', result) end) end) @@ -185,11 +190,7 @@ describe('util.format_time', function() assert.is_not_nil(result) assert.is_string(result) - - local is_time_only = result:match('^%d%d?:%d%d [AP]M$') - local is_same_year = result:match('^%d%d? %a%a%a %d%d?:%d%d [AP]M$') - local is_full_date = result:match('^%d%d? %a%a%a %d%d%d%d %d%d?:%d%d [AP]M$') - assert.is_true(is_time_only ~= nil or is_same_year ~= nil or is_full_date ~= nil) + assert.is_true(result:find(':', 1, true) ~= nil) end) it('does not convert regular second timestamps', function() @@ -207,20 +208,14 @@ describe('util.format_time', function() local midnight = make_timestamp(today.year, today.month, today.day, 0, 0, 0) local result = util.format_time(midnight) - if os.date('%Y-%m-%d', midnight) == os.date('%Y-%m-%d') then - assert.matches('^%d%d?:%d%d [AP]M$', result) - assert.matches('12:00 AM', result) -- Midnight should be 12:00 AM - else - assert.matches('^%d%d? %a%a%a %d%d%d%d %d%d?:%d%d [AP]M$', result) - end + assert.equals(compact_locale_time(midnight), result) end) it('handles noon correctly', function() local noon = make_timestamp(today.year, today.month, today.day, 12, 0, 0) local result = util.format_time(noon) - assert.matches('^%d%d?:%d%d [AP]M$', result) - assert.matches('12:00 PM', result) -- Noon should be 12:00 PM + assert.equals(compact_locale_time(noon), result) end) it('handles date boundary transitions', function() @@ -230,16 +225,14 @@ describe('util.format_time', function() local late_result = util.format_time(late_today) local early_result = util.format_time(early_tomorrow) - -- Late today should be time-only - assert.matches('^%d%d?:%d%d [AP]M$', late_result) + assert.equals(compact_locale_time(late_today), late_result) - -- Early tomorrow behavior depends on whether it's actually tomorrow if os.date('%Y-%m-%d', early_tomorrow) == os.date('%Y-%m-%d') then - -- Still today - assert.matches('^%d%d?:%d%d [AP]M$', early_result) + assert.equals(compact_locale_time(early_tomorrow), early_result) else - -- Actually tomorrow - assert.matches('^%d%d? %a%a%a %d%d?:%d%d [AP]M$', early_result) + local expected_prefix = os.date('%d %b', early_tomorrow) .. ' ' + assert.is_true(vim.startswith(early_result, expected_prefix)) + assert.equals(compact_locale_time(early_tomorrow), early_result:sub(#expected_prefix + 1)) end end) end) @@ -255,11 +248,44 @@ describe('util.format_time', function() assert.equals(timestamp_date, current_date) local result = util.format_time(now) - assert.matches('^%d%d?:%d%d [AP]M$', result) + assert.equals(compact_locale_time(now), result) end) end) end) +describe('util.format_duration_seconds', function() + it('returns nil without a start time', function() + assert.is_nil(util.format_duration_seconds(nil, os.time())) + end) + + it('returns live duration for in-progress operations', function() + local start_time = os.time() - 3 + assert.equals('3s', util.format_duration_seconds(start_time, nil)) + end) + + it('shows at least 1s while in progress', function() + local start_time = os.time() + assert.equals('1s', util.format_duration_seconds(start_time, nil)) + end) + + it('returns nil for finished durations below one second', function() + local now = os.time() + assert.is_nil(util.format_duration_seconds(now, now)) + end) + + it('returns seconds for finished durations >= 1s', function() + local end_time = os.time() + local start_time = end_time - 5 + assert.equals('5s', util.format_duration_seconds(start_time, end_time)) + end) + + it('supports millisecond timestamps for finished durations', function() + local start_ms = 1700000000000 + local end_ms = start_ms + 4000 + assert.equals('4s', util.format_duration_seconds(start_ms, end_ms)) + end) +end) + describe('util.parse_quick_context_args', function() local function parse_and_verify(input, expected_prompt, context_checks) local prompt, config = util.parse_quick_context_args(input) From e420125a40f48c26e1091a9efe2f3003c94f0aa1 Mon Sep 17 00:00:00 2001 From: disrupted Date: Thu, 12 Feb 2026 23:05:04 +0100 Subject: [PATCH 7/9] test: regenerate replay snapshots --- tests/data/ansi-codes.expected.json | 835 ++++++------ tests/data/api-abort.expected.json | 56 +- tests/data/api-error.expected.json | 81 +- tests/data/cursor_data.expected.json | 68 +- tests/data/diagnostics.expected.json | 1203 +++++++++-------- tests/data/diff.expected.json | 101 +- tests/data/markdown-codefence.expected.json | 148 +- tests/data/mentions-with-ranges.expected.json | 67 +- tests/data/message-removal.expected.json | 89 +- .../multiple-messages-synthetic.expected.json | 160 ++- tests/data/multiple-messages.expected.json | 114 +- ...tiple-question-ask-reply-all.expected.json | 105 +- .../data/multiple-question-ask.expected.json | 86 +- tests/data/perf.expected.json | 56 +- .../permission-ask-new-approve.expected.json | 133 +- .../permission-ask-new-deny.expected.json | 74 +- tests/data/permission-ask-new.expected.json | 112 +- tests/data/permission-prompt.expected.json | 75 +- tests/data/permission.expected.json | 89 +- tests/data/planning.expected.json | 151 ++- tests/data/question-ask-replied.expected.json | 89 +- tests/data/question-ask.expected.json | 86 +- tests/data/reasoning.expected.json | 76 +- tests/data/redo-all.expected.json | 427 ++++-- tests/data/redo-once.expected.json | 233 +++- tests/data/revert.expected.json | 167 ++- tests/data/selection.expected.json | 76 +- .../shifting-and-multiple-perms.expected.json | 230 +++- tests/data/simple-session.expected.json | 60 +- tests/data/tool-invalid.expected.json | 35 +- tests/data/updating-text.expected.json | 56 +- 31 files changed, 3409 insertions(+), 1929 deletions(-) diff --git a/tests/data/ansi-codes.expected.json b/tests/data/ansi-codes.expected.json index 0fea652e..9b82b020 100644 --- a/tests/data/ansi-codes.expected.json +++ b/tests/data/ansi-codes.expected.json @@ -25,10 +25,6 @@ " claude-sonnet-4.5", "OpencodeHint" ], - [ - " (2025-10-23 21:00:24)", - "OpencodeHint" - ], [ " [msg_a12df6fcc002lSmBoztX2X6eCp]", "OpencodeHint" @@ -42,6 +38,25 @@ ], [ 2, + 1, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-23 21:00:24", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 3, 3, 0, { @@ -61,7 +76,7 @@ } ], [ - 3, + 4, 4, 0, { @@ -81,7 +96,7 @@ } ], [ - 4, + 5, 5, 0, { @@ -101,7 +116,7 @@ } ], [ - 5, + 6, 6, 0, { @@ -121,7 +136,7 @@ } ], [ - 6, + 7, 7, 0, { @@ -141,7 +156,7 @@ } ], [ - 7, + 8, 8, 0, { @@ -161,7 +176,7 @@ } ], [ - 8, + 9, 9, 0, { @@ -181,7 +196,7 @@ } ], [ - 9, + 10, 10, 0, { @@ -201,7 +216,7 @@ } ], [ - 10, + 11, 11, 0, { @@ -221,7 +236,7 @@ } ], [ - 11, + 12, 12, 0, { @@ -241,7 +256,7 @@ } ], [ - 12, + 13, 13, 0, { @@ -261,7 +276,7 @@ } ], [ - 13, + 14, 14, 0, { @@ -281,7 +296,7 @@ } ], [ - 14, + 15, 15, 0, { @@ -301,7 +316,7 @@ } ], [ - 15, + 16, 16, 0, { @@ -321,7 +336,7 @@ } ], [ - 16, + 17, 17, 0, { @@ -341,7 +356,7 @@ } ], [ - 17, + 18, 18, 0, { @@ -361,7 +376,7 @@ } ], [ - 18, + 19, 19, 0, { @@ -381,7 +396,7 @@ } ], [ - 19, + 20, 20, 0, { @@ -401,7 +416,7 @@ } ], [ - 20, + 21, 21, 0, { @@ -421,7 +436,7 @@ } ], [ - 21, + 22, 22, 0, { @@ -441,7 +456,7 @@ } ], [ - 22, + 23, 23, 0, { @@ -461,7 +476,7 @@ } ], [ - 23, + 24, 24, 0, { @@ -481,7 +496,7 @@ } ], [ - 24, + 25, 25, 0, { @@ -501,7 +516,7 @@ } ], [ - 25, + 26, 26, 0, { @@ -521,7 +536,7 @@ } ], [ - 26, + 27, 27, 0, { @@ -541,7 +556,7 @@ } ], [ - 27, + 28, 28, 0, { @@ -561,7 +576,7 @@ } ], [ - 28, + 29, 29, 0, { @@ -581,7 +596,7 @@ } ], [ - 29, + 30, 30, 0, { @@ -601,7 +616,7 @@ } ], [ - 30, + 31, 31, 0, { @@ -621,7 +636,7 @@ } ], [ - 31, + 32, 32, 0, { @@ -641,7 +656,7 @@ } ], [ - 32, + 33, 33, 0, { @@ -661,7 +676,7 @@ } ], [ - 33, + 34, 34, 0, { @@ -681,7 +696,7 @@ } ], [ - 34, + 35, 35, 0, { @@ -701,7 +716,7 @@ } ], [ - 35, + 36, 36, 0, { @@ -721,7 +736,7 @@ } ], [ - 36, + 37, 37, 0, { @@ -741,7 +756,7 @@ } ], [ - 37, + 38, 38, 0, { @@ -761,7 +776,7 @@ } ], [ - 38, + 39, 39, 0, { @@ -781,7 +796,7 @@ } ], [ - 39, + 40, 40, 0, { @@ -801,7 +816,7 @@ } ], [ - 40, + 41, 41, 0, { @@ -821,7 +836,7 @@ } ], [ - 41, + 42, 42, 0, { @@ -841,7 +856,7 @@ } ], [ - 42, + 43, 43, 0, { @@ -861,7 +876,7 @@ } ], [ - 43, + 44, 44, 0, { @@ -881,7 +896,7 @@ } ], [ - 44, + 45, 45, 0, { @@ -901,7 +916,7 @@ } ], [ - 45, + 46, 46, 0, { @@ -921,7 +936,7 @@ } ], [ - 46, + 47, 47, 0, { @@ -941,7 +956,7 @@ } ], [ - 47, + 48, 48, 0, { @@ -961,7 +976,7 @@ } ], [ - 48, + 49, 49, 0, { @@ -981,7 +996,7 @@ } ], [ - 49, + 50, 50, 0, { @@ -1001,7 +1016,7 @@ } ], [ - 50, + 51, 51, 0, { @@ -1021,7 +1036,7 @@ } ], [ - 51, + 52, 52, 0, { @@ -1041,7 +1056,7 @@ } ], [ - 52, + 53, 53, 0, { @@ -1061,7 +1076,7 @@ } ], [ - 53, + 54, 54, 0, { @@ -1081,7 +1096,7 @@ } ], [ - 54, + 55, 55, 0, { @@ -1101,7 +1116,7 @@ } ], [ - 55, + 56, 56, 0, { @@ -1121,7 +1136,7 @@ } ], [ - 56, + 57, 57, 0, { @@ -1141,7 +1156,7 @@ } ], [ - 57, + 58, 58, 0, { @@ -1161,7 +1176,7 @@ } ], [ - 58, + 59, 59, 0, { @@ -1181,7 +1196,7 @@ } ], [ - 59, + 60, 60, 0, { @@ -1201,7 +1216,7 @@ } ], [ - 60, + 61, 61, 0, { @@ -1221,7 +1236,7 @@ } ], [ - 61, + 62, 62, 0, { @@ -1241,7 +1256,7 @@ } ], [ - 62, + 63, 63, 0, { @@ -1261,7 +1276,7 @@ } ], [ - 63, + 64, 64, 0, { @@ -1281,7 +1296,7 @@ } ], [ - 64, + 65, 65, 0, { @@ -1301,7 +1316,7 @@ } ], [ - 65, + 66, 66, 0, { @@ -1321,7 +1336,7 @@ } ], [ - 66, + 67, 67, 0, { @@ -1341,7 +1356,7 @@ } ], [ - 67, + 68, 68, 0, { @@ -1361,7 +1376,7 @@ } ], [ - 68, + 69, 69, 0, { @@ -1381,7 +1396,7 @@ } ], [ - 69, + 70, 70, 0, { @@ -1401,7 +1416,7 @@ } ], [ - 70, + 71, 71, 0, { @@ -1421,7 +1436,7 @@ } ], [ - 71, + 72, 72, 0, { @@ -1441,7 +1456,7 @@ } ], [ - 72, + 73, 73, 0, { @@ -1461,7 +1476,7 @@ } ], [ - 73, + 74, 74, 0, { @@ -1481,7 +1496,7 @@ } ], [ - 74, + 75, 75, 0, { @@ -1501,7 +1516,7 @@ } ], [ - 75, + 76, 76, 0, { @@ -1521,7 +1536,7 @@ } ], [ - 76, + 77, 77, 0, { @@ -1541,7 +1556,7 @@ } ], [ - 77, + 78, 78, 0, { @@ -1561,7 +1576,7 @@ } ], [ - 78, + 79, 79, 0, { @@ -1581,7 +1596,7 @@ } ], [ - 79, + 80, 80, 0, { @@ -1601,7 +1616,7 @@ } ], [ - 80, + 81, 81, 0, { @@ -1621,7 +1636,7 @@ } ], [ - 81, + 82, 82, 0, { @@ -1641,7 +1656,7 @@ } ], [ - 82, + 83, 83, 0, { @@ -1661,7 +1676,7 @@ } ], [ - 83, + 84, 84, 0, { @@ -1681,7 +1696,7 @@ } ], [ - 84, + 85, 85, 0, { @@ -1701,7 +1716,7 @@ } ], [ - 85, + 86, 86, 0, { @@ -1721,7 +1736,7 @@ } ], [ - 86, + 87, 87, 0, { @@ -1741,7 +1756,7 @@ } ], [ - 87, + 88, 88, 0, { @@ -1761,7 +1776,7 @@ } ], [ - 88, + 89, 89, 0, { @@ -1781,7 +1796,7 @@ } ], [ - 89, + 90, 90, 0, { @@ -1801,7 +1816,7 @@ } ], [ - 90, + 91, 91, 0, { @@ -1821,7 +1836,7 @@ } ], [ - 91, + 92, 92, 0, { @@ -1841,7 +1856,7 @@ } ], [ - 92, + 93, 93, 0, { @@ -1861,7 +1876,7 @@ } ], [ - 93, + 94, 94, 0, { @@ -1881,7 +1896,7 @@ } ], [ - 94, + 95, 95, 0, { @@ -1901,7 +1916,7 @@ } ], [ - 95, + 96, 96, 0, { @@ -1921,7 +1936,7 @@ } ], [ - 96, + 97, 97, 0, { @@ -1941,7 +1956,7 @@ } ], [ - 97, + 98, 98, 0, { @@ -1961,7 +1976,7 @@ } ], [ - 98, + 99, 99, 0, { @@ -1981,7 +1996,7 @@ } ], [ - 99, + 100, 100, 0, { @@ -2001,7 +2016,7 @@ } ], [ - 100, + 101, 101, 0, { @@ -2021,7 +2036,7 @@ } ], [ - 101, + 102, 102, 0, { @@ -2041,7 +2056,7 @@ } ], [ - 102, + 103, 103, 0, { @@ -2061,7 +2076,7 @@ } ], [ - 103, + 104, 104, 0, { @@ -2081,7 +2096,7 @@ } ], [ - 104, + 105, 105, 0, { @@ -2101,7 +2116,7 @@ } ], [ - 105, + 106, 106, 0, { @@ -2121,7 +2136,7 @@ } ], [ - 106, + 107, 107, 0, { @@ -2141,7 +2156,7 @@ } ], [ - 107, + 108, 108, 0, { @@ -2161,7 +2176,7 @@ } ], [ - 108, + 109, 109, 0, { @@ -2181,7 +2196,7 @@ } ], [ - 109, + 110, 110, 0, { @@ -2201,7 +2216,7 @@ } ], [ - 110, + 111, 111, 0, { @@ -2221,7 +2236,7 @@ } ], [ - 111, + 112, 112, 0, { @@ -2241,7 +2256,7 @@ } ], [ - 112, + 113, 113, 0, { @@ -2261,7 +2276,7 @@ } ], [ - 113, + 114, 114, 0, { @@ -2281,7 +2296,7 @@ } ], [ - 114, + 115, 115, 0, { @@ -2301,7 +2316,7 @@ } ], [ - 115, + 116, 116, 0, { @@ -2321,7 +2336,7 @@ } ], [ - 116, + 117, 117, 0, { @@ -2341,7 +2356,7 @@ } ], [ - 117, + 118, 118, 0, { @@ -2361,7 +2376,7 @@ } ], [ - 118, + 119, 119, 0, { @@ -2381,7 +2396,7 @@ } ], [ - 119, + 120, 120, 0, { @@ -2401,7 +2416,7 @@ } ], [ - 120, + 121, 121, 0, { @@ -2421,7 +2436,7 @@ } ], [ - 121, + 122, 122, 0, { @@ -2441,7 +2456,7 @@ } ], [ - 122, + 123, 123, 0, { @@ -2461,7 +2476,7 @@ } ], [ - 123, + 124, 124, 0, { @@ -2481,7 +2496,7 @@ } ], [ - 124, + 125, 125, 0, { @@ -2501,7 +2516,7 @@ } ], [ - 125, + 126, 126, 0, { @@ -2521,7 +2536,7 @@ } ], [ - 126, + 127, 127, 0, { @@ -2541,7 +2556,7 @@ } ], [ - 127, + 128, 128, 0, { @@ -2561,7 +2576,7 @@ } ], [ - 128, + 129, 129, 0, { @@ -2581,7 +2596,7 @@ } ], [ - 129, + 130, 130, 0, { @@ -2601,7 +2616,7 @@ } ], [ - 130, + 131, 131, 0, { @@ -2621,7 +2636,7 @@ } ], [ - 131, + 132, 132, 0, { @@ -2641,7 +2656,7 @@ } ], [ - 132, + 133, 133, 0, { @@ -2661,7 +2676,7 @@ } ], [ - 133, + 134, 134, 0, { @@ -2681,7 +2696,7 @@ } ], [ - 134, + 135, 135, 0, { @@ -2701,7 +2716,7 @@ } ], [ - 135, + 136, 136, 0, { @@ -2721,7 +2736,7 @@ } ], [ - 136, + 137, 137, 0, { @@ -2741,7 +2756,7 @@ } ], [ - 137, + 138, 138, 0, { @@ -2761,7 +2776,7 @@ } ], [ - 138, + 139, 139, 0, { @@ -2781,7 +2796,7 @@ } ], [ - 139, + 140, 140, 0, { @@ -2801,7 +2816,7 @@ } ], [ - 140, + 141, 141, 0, { @@ -2821,7 +2836,7 @@ } ], [ - 141, + 142, 142, 0, { @@ -2841,7 +2856,7 @@ } ], [ - 142, + 143, 143, 0, { @@ -2861,7 +2876,7 @@ } ], [ - 143, + 144, 144, 0, { @@ -2881,7 +2896,7 @@ } ], [ - 144, + 145, 145, 0, { @@ -2901,7 +2916,7 @@ } ], [ - 145, + 146, 146, 0, { @@ -2921,7 +2936,7 @@ } ], [ - 146, + 147, 147, 0, { @@ -2941,7 +2956,7 @@ } ], [ - 147, + 148, 148, 0, { @@ -2961,7 +2976,7 @@ } ], [ - 148, + 149, 149, 0, { @@ -2981,7 +2996,7 @@ } ], [ - 149, + 150, 150, 0, { @@ -3001,7 +3016,7 @@ } ], [ - 150, + 151, 151, 0, { @@ -3021,7 +3036,7 @@ } ], [ - 151, + 152, 152, 0, { @@ -3041,7 +3056,7 @@ } ], [ - 152, + 153, 153, 0, { @@ -3061,7 +3076,7 @@ } ], [ - 153, + 154, 154, 0, { @@ -3081,7 +3096,7 @@ } ], [ - 154, + 155, 155, 0, { @@ -3101,7 +3116,7 @@ } ], [ - 155, + 156, 156, 0, { @@ -3121,7 +3136,7 @@ } ], [ - 156, + 157, 157, 0, { @@ -3141,7 +3156,7 @@ } ], [ - 157, + 158, 158, 0, { @@ -3161,7 +3176,7 @@ } ], [ - 158, + 159, 159, 0, { @@ -3181,7 +3196,7 @@ } ], [ - 159, + 160, 160, 0, { @@ -3201,7 +3216,7 @@ } ], [ - 160, + 161, 161, 0, { @@ -3221,7 +3236,7 @@ } ], [ - 161, + 162, 162, 0, { @@ -3241,7 +3256,7 @@ } ], [ - 162, + 163, 163, 0, { @@ -3261,7 +3276,7 @@ } ], [ - 163, + 164, 164, 0, { @@ -3281,7 +3296,7 @@ } ], [ - 164, + 165, 165, 0, { @@ -3301,7 +3316,7 @@ } ], [ - 165, + 166, 166, 0, { @@ -3321,7 +3336,7 @@ } ], [ - 166, + 167, 167, 0, { @@ -3341,7 +3356,7 @@ } ], [ - 167, + 168, 168, 0, { @@ -3361,7 +3376,7 @@ } ], [ - 168, + 169, 169, 0, { @@ -3381,7 +3396,7 @@ } ], [ - 169, + 170, 170, 0, { @@ -3401,7 +3416,7 @@ } ], [ - 170, + 171, 171, 0, { @@ -3421,7 +3436,7 @@ } ], [ - 171, + 172, 172, 0, { @@ -3441,7 +3456,7 @@ } ], [ - 172, + 173, 173, 0, { @@ -3461,7 +3476,7 @@ } ], [ - 173, + 174, 174, 0, { @@ -3481,7 +3496,7 @@ } ], [ - 174, + 175, 175, 0, { @@ -3501,7 +3516,7 @@ } ], [ - 175, + 176, 176, 0, { @@ -3521,7 +3536,7 @@ } ], [ - 176, + 177, 177, 0, { @@ -3541,7 +3556,7 @@ } ], [ - 177, + 178, 178, 0, { @@ -3561,7 +3576,7 @@ } ], [ - 178, + 179, 179, 0, { @@ -3581,7 +3596,7 @@ } ], [ - 179, + 180, 180, 0, { @@ -3601,7 +3616,7 @@ } ], [ - 180, + 181, 181, 0, { @@ -3621,7 +3636,7 @@ } ], [ - 181, + 182, 182, 0, { @@ -3641,7 +3656,7 @@ } ], [ - 182, + 183, 183, 0, { @@ -3661,7 +3676,7 @@ } ], [ - 183, + 184, 184, 0, { @@ -3681,7 +3696,7 @@ } ], [ - 184, + 185, 185, 0, { @@ -3701,7 +3716,7 @@ } ], [ - 185, + 186, 186, 0, { @@ -3721,7 +3736,7 @@ } ], [ - 186, + 187, 187, 0, { @@ -3741,7 +3756,7 @@ } ], [ - 187, + 188, 188, 0, { @@ -3761,7 +3776,7 @@ } ], [ - 188, + 189, 189, 0, { @@ -3781,7 +3796,7 @@ } ], [ - 189, + 190, 190, 0, { @@ -3801,7 +3816,7 @@ } ], [ - 190, + 191, 191, 0, { @@ -3821,7 +3836,7 @@ } ], [ - 191, + 192, 192, 0, { @@ -3841,7 +3856,7 @@ } ], [ - 192, + 193, 193, 0, { @@ -3861,7 +3876,7 @@ } ], [ - 193, + 194, 194, 0, { @@ -3881,7 +3896,7 @@ } ], [ - 194, + 195, 195, 0, { @@ -3901,7 +3916,7 @@ } ], [ - 195, + 196, 196, 0, { @@ -3921,7 +3936,7 @@ } ], [ - 196, + 197, 197, 0, { @@ -3941,7 +3956,7 @@ } ], [ - 197, + 198, 198, 0, { @@ -3961,7 +3976,7 @@ } ], [ - 198, + 199, 199, 0, { @@ -3981,7 +3996,7 @@ } ], [ - 199, + 200, 200, 0, { @@ -4001,7 +4016,7 @@ } ], [ - 200, + 201, 201, 0, { @@ -4021,7 +4036,7 @@ } ], [ - 201, + 202, 202, 0, { @@ -4041,7 +4056,7 @@ } ], [ - 202, + 203, 203, 0, { @@ -4061,7 +4076,7 @@ } ], [ - 203, + 204, 204, 0, { @@ -4081,7 +4096,7 @@ } ], [ - 204, + 205, 205, 0, { @@ -4101,7 +4116,7 @@ } ], [ - 205, + 206, 206, 0, { @@ -4121,7 +4136,7 @@ } ], [ - 206, + 207, 207, 0, { @@ -4141,7 +4156,7 @@ } ], [ - 207, + 208, 208, 0, { @@ -4161,7 +4176,7 @@ } ], [ - 208, + 209, 209, 0, { @@ -4181,7 +4196,7 @@ } ], [ - 209, + 210, 210, 0, { @@ -4201,7 +4216,7 @@ } ], [ - 210, + 211, 211, 0, { @@ -4221,7 +4236,7 @@ } ], [ - 211, + 212, 212, 0, { @@ -4241,7 +4256,7 @@ } ], [ - 212, + 213, 213, 0, { @@ -4261,7 +4276,7 @@ } ], [ - 213, + 214, 214, 0, { @@ -4281,7 +4296,7 @@ } ], [ - 214, + 215, 215, 0, { @@ -4301,7 +4316,7 @@ } ], [ - 215, + 216, 216, 0, { @@ -4321,7 +4336,7 @@ } ], [ - 216, + 217, 217, 0, { @@ -4341,7 +4356,7 @@ } ], [ - 217, + 218, 218, 0, { @@ -4361,7 +4376,7 @@ } ], [ - 218, + 219, 219, 0, { @@ -4381,7 +4396,7 @@ } ], [ - 219, + 220, 220, 0, { @@ -4401,7 +4416,7 @@ } ], [ - 220, + 221, 221, 0, { @@ -4421,7 +4436,7 @@ } ], [ - 221, + 222, 222, 0, { @@ -4441,7 +4456,7 @@ } ], [ - 222, + 223, 223, 0, { @@ -4461,7 +4476,7 @@ } ], [ - 223, + 224, 224, 0, { @@ -4481,7 +4496,7 @@ } ], [ - 224, + 225, 225, 0, { @@ -4501,7 +4516,7 @@ } ], [ - 225, + 226, 226, 0, { @@ -4521,7 +4536,7 @@ } ], [ - 226, + 227, 227, 0, { @@ -4541,7 +4556,7 @@ } ], [ - 227, + 228, 228, 0, { @@ -4561,7 +4576,7 @@ } ], [ - 228, + 229, 229, 0, { @@ -4581,7 +4596,7 @@ } ], [ - 229, + 230, 230, 0, { @@ -4601,7 +4616,7 @@ } ], [ - 230, + 231, 231, 0, { @@ -4621,7 +4636,7 @@ } ], [ - 231, + 232, 232, 0, { @@ -4641,7 +4656,7 @@ } ], [ - 232, + 233, 233, 0, { @@ -4661,7 +4676,7 @@ } ], [ - 233, + 234, 234, 0, { @@ -4681,7 +4696,7 @@ } ], [ - 234, + 235, 235, 0, { @@ -4701,7 +4716,7 @@ } ], [ - 235, + 236, 236, 0, { @@ -4721,7 +4736,7 @@ } ], [ - 236, + 237, 237, 0, { @@ -4741,7 +4756,7 @@ } ], [ - 237, + 238, 238, 0, { @@ -4761,7 +4776,7 @@ } ], [ - 238, + 239, 239, 0, { @@ -4781,7 +4796,7 @@ } ], [ - 239, + 240, 240, 0, { @@ -4801,7 +4816,7 @@ } ], [ - 240, + 241, 241, 0, { @@ -4821,7 +4836,7 @@ } ], [ - 241, + 242, 242, 0, { @@ -4841,7 +4856,7 @@ } ], [ - 242, + 243, 243, 0, { @@ -4861,7 +4876,7 @@ } ], [ - 243, + 244, 244, 0, { @@ -4881,7 +4896,7 @@ } ], [ - 244, + 245, 245, 0, { @@ -4901,7 +4916,7 @@ } ], [ - 245, + 246, 246, 0, { @@ -4921,7 +4936,7 @@ } ], [ - 246, + 247, 247, 0, { @@ -4941,7 +4956,7 @@ } ], [ - 247, + 248, 248, 0, { @@ -4961,7 +4976,7 @@ } ], [ - 248, + 249, 249, 0, { @@ -4981,7 +4996,7 @@ } ], [ - 249, + 250, 250, 0, { @@ -5001,7 +5016,7 @@ } ], [ - 250, + 251, 251, 0, { @@ -5021,7 +5036,7 @@ } ], [ - 251, + 252, 252, 0, { @@ -5041,7 +5056,7 @@ } ], [ - 252, + 253, 253, 0, { @@ -5061,7 +5076,7 @@ } ], [ - 253, + 254, 254, 0, { @@ -5081,7 +5096,7 @@ } ], [ - 254, + 255, 255, 0, { @@ -5101,7 +5116,7 @@ } ], [ - 255, + 256, 256, 0, { @@ -5121,7 +5136,7 @@ } ], [ - 256, + 257, 257, 0, { @@ -5141,7 +5156,7 @@ } ], [ - 257, + 258, 258, 0, { @@ -5161,7 +5176,7 @@ } ], [ - 258, + 259, 259, 0, { @@ -5181,7 +5196,7 @@ } ], [ - 259, + 260, 260, 0, { @@ -5201,7 +5216,7 @@ } ], [ - 260, + 261, 261, 0, { @@ -5221,7 +5236,7 @@ } ], [ - 261, + 262, 262, 0, { @@ -5241,7 +5256,7 @@ } ], [ - 262, + 263, 263, 0, { @@ -5261,7 +5276,7 @@ } ], [ - 263, + 264, 264, 0, { @@ -5281,7 +5296,7 @@ } ], [ - 264, + 265, 265, 0, { @@ -5301,7 +5316,7 @@ } ], [ - 265, + 266, 266, 0, { @@ -5321,7 +5336,7 @@ } ], [ - 266, + 267, 267, 0, { @@ -5341,7 +5356,7 @@ } ], [ - 267, + 268, 268, 0, { @@ -5361,7 +5376,7 @@ } ], [ - 268, + 269, 269, 0, { @@ -5381,7 +5396,7 @@ } ], [ - 269, + 270, 270, 0, { @@ -5401,7 +5416,7 @@ } ], [ - 270, + 271, 271, 0, { @@ -5421,7 +5436,7 @@ } ], [ - 271, + 272, 272, 0, { @@ -5441,7 +5456,7 @@ } ], [ - 272, + 273, 273, 0, { @@ -5461,7 +5476,7 @@ } ], [ - 273, + 274, 274, 0, { @@ -5481,7 +5496,7 @@ } ], [ - 274, + 275, 275, 0, { @@ -5501,7 +5516,7 @@ } ], [ - 275, + 276, 276, 0, { @@ -5521,7 +5536,7 @@ } ], [ - 276, + 277, 277, 0, { @@ -5541,7 +5556,7 @@ } ], [ - 277, + 278, 278, 0, { @@ -5561,7 +5576,7 @@ } ], [ - 278, + 279, 279, 0, { @@ -5581,7 +5596,7 @@ } ], [ - 279, + 280, 280, 0, { @@ -5601,7 +5616,7 @@ } ], [ - 280, + 281, 281, 0, { @@ -5621,7 +5636,7 @@ } ], [ - 281, + 282, 282, 0, { @@ -5641,7 +5656,7 @@ } ], [ - 282, + 283, 283, 0, { @@ -5661,7 +5676,7 @@ } ], [ - 283, + 284, 284, 0, { @@ -5681,7 +5696,7 @@ } ], [ - 284, + 285, 285, 0, { @@ -5701,7 +5716,7 @@ } ], [ - 285, + 286, 286, 0, { @@ -5721,7 +5736,7 @@ } ], [ - 286, + 287, 287, 0, { @@ -5741,7 +5756,7 @@ } ], [ - 287, + 288, 288, 0, { @@ -5761,7 +5776,7 @@ } ], [ - 288, + 289, 289, 0, { @@ -5781,7 +5796,7 @@ } ], [ - 289, + 290, 290, 0, { @@ -5801,7 +5816,7 @@ } ], [ - 290, + 291, 291, 0, { @@ -5821,7 +5836,7 @@ } ], [ - 291, + 292, 292, 0, { @@ -5841,7 +5856,7 @@ } ], [ - 292, + 293, 293, 0, { @@ -5861,7 +5876,7 @@ } ], [ - 293, + 294, 294, 0, { @@ -5881,7 +5896,7 @@ } ], [ - 294, + 295, 295, 0, { @@ -5901,7 +5916,7 @@ } ], [ - 295, + 296, 296, 0, { @@ -5921,7 +5936,7 @@ } ], [ - 296, + 297, 297, 0, { @@ -5941,7 +5956,7 @@ } ], [ - 297, + 298, 298, 0, { @@ -5961,7 +5976,7 @@ } ], [ - 298, + 299, 299, 0, { @@ -5981,7 +5996,7 @@ } ], [ - 299, + 300, 300, 0, { @@ -6001,7 +6016,7 @@ } ], [ - 300, + 301, 301, 0, { @@ -6021,7 +6036,7 @@ } ], [ - 301, + 302, 302, 0, { @@ -6041,7 +6056,7 @@ } ], [ - 302, + 303, 303, 0, { @@ -6061,7 +6076,7 @@ } ], [ - 303, + 304, 304, 0, { @@ -6081,7 +6096,7 @@ } ], [ - 304, + 305, 305, 0, { @@ -6101,7 +6116,7 @@ } ], [ - 305, + 306, 306, 0, { @@ -6121,7 +6136,7 @@ } ], [ - 306, + 307, 307, 0, { @@ -6141,7 +6156,7 @@ } ], [ - 307, + 308, 308, 0, { @@ -6161,7 +6176,7 @@ } ], [ - 308, + 309, 309, 0, { @@ -6181,7 +6196,7 @@ } ], [ - 309, + 310, 310, 0, { @@ -6201,7 +6216,7 @@ } ], [ - 310, + 311, 311, 0, { @@ -6221,7 +6236,7 @@ } ], [ - 311, + 312, 312, 0, { @@ -6241,7 +6256,7 @@ } ], [ - 312, + 313, 313, 0, { @@ -6261,7 +6276,7 @@ } ], [ - 313, + 314, 314, 0, { @@ -6281,7 +6296,7 @@ } ], [ - 314, + 315, 315, 0, { @@ -6301,7 +6316,7 @@ } ], [ - 315, + 316, 316, 0, { @@ -6321,7 +6336,7 @@ } ], [ - 316, + 317, 317, 0, { @@ -6341,7 +6356,7 @@ } ], [ - 317, + 318, 318, 0, { @@ -6361,7 +6376,7 @@ } ], [ - 318, + 319, 319, 0, { @@ -6381,7 +6396,7 @@ } ], [ - 319, + 320, 320, 0, { @@ -6401,7 +6416,7 @@ } ], [ - 320, + 321, 321, 0, { @@ -6421,7 +6436,7 @@ } ], [ - 321, + 322, 322, 0, { @@ -6441,7 +6456,7 @@ } ], [ - 322, + 323, 323, 0, { @@ -6461,7 +6476,7 @@ } ], [ - 323, + 324, 324, 0, { @@ -6481,7 +6496,7 @@ } ], [ - 324, + 325, 325, 0, { @@ -6501,7 +6516,7 @@ } ], [ - 325, + 326, 326, 0, { @@ -6521,7 +6536,7 @@ } ], [ - 326, + 327, 327, 0, { @@ -6541,7 +6556,7 @@ } ], [ - 327, + 328, 328, 0, { @@ -6561,7 +6576,7 @@ } ], [ - 328, + 329, 329, 0, { @@ -6581,7 +6596,7 @@ } ], [ - 329, + 330, 330, 0, { @@ -6601,7 +6616,7 @@ } ], [ - 330, + 331, 331, 0, { @@ -6621,7 +6636,7 @@ } ], [ - 331, + 332, 332, 0, { @@ -6641,7 +6656,7 @@ } ], [ - 332, + 333, 333, 0, { @@ -6661,7 +6676,7 @@ } ], [ - 333, + 334, 334, 0, { @@ -6681,7 +6696,7 @@ } ], [ - 334, + 335, 335, 0, { @@ -6701,7 +6716,7 @@ } ], [ - 335, + 336, 336, 0, { @@ -6721,7 +6736,7 @@ } ], [ - 336, + 337, 337, 0, { @@ -6741,7 +6756,7 @@ } ], [ - 337, + 338, 338, 0, { @@ -6761,7 +6776,7 @@ } ], [ - 338, + 339, 339, 0, { @@ -6781,7 +6796,7 @@ } ], [ - 339, + 340, 340, 0, { @@ -6801,7 +6816,7 @@ } ], [ - 340, + 341, 341, 0, { @@ -6821,7 +6836,7 @@ } ], [ - 341, + 342, 342, 0, { @@ -6841,7 +6856,7 @@ } ], [ - 342, + 343, 343, 0, { @@ -6861,7 +6876,7 @@ } ], [ - 343, + 344, 344, 0, { @@ -6881,7 +6896,7 @@ } ], [ - 344, + 345, 345, 0, { @@ -6901,7 +6916,7 @@ } ], [ - 345, + 346, 346, 0, { @@ -6921,7 +6936,7 @@ } ], [ - 346, + 347, 347, 0, { @@ -6941,7 +6956,7 @@ } ], [ - 347, + 348, 348, 0, { @@ -6961,7 +6976,7 @@ } ], [ - 348, + 349, 349, 0, { @@ -6981,7 +6996,7 @@ } ], [ - 349, + 350, 350, 0, { @@ -7001,7 +7016,7 @@ } ], [ - 350, + 351, 351, 0, { @@ -7021,7 +7036,7 @@ } ], [ - 351, + 352, 352, 0, { @@ -7041,7 +7056,7 @@ } ], [ - 352, + 353, 353, 0, { @@ -7061,7 +7076,7 @@ } ], [ - 353, + 354, 354, 0, { @@ -7081,7 +7096,7 @@ } ], [ - 354, + 355, 355, 0, { @@ -7101,7 +7116,7 @@ } ], [ - 355, + 356, 356, 0, { @@ -7121,7 +7136,7 @@ } ], [ - 356, + 357, 357, 0, { @@ -7141,7 +7156,7 @@ } ], [ - 357, + 358, 358, 0, { @@ -7161,7 +7176,7 @@ } ], [ - 358, + 359, 359, 0, { @@ -7181,7 +7196,7 @@ } ], [ - 359, + 360, 360, 0, { @@ -7201,7 +7216,7 @@ } ], [ - 360, + 361, 361, 0, { @@ -7221,7 +7236,7 @@ } ], [ - 361, + 362, 362, 0, { @@ -7241,7 +7256,7 @@ } ], [ - 362, + 363, 363, 0, { @@ -7261,7 +7276,7 @@ } ], [ - 363, + 364, 364, 0, { @@ -7281,7 +7296,7 @@ } ], [ - 364, + 365, 365, 0, { @@ -7301,7 +7316,7 @@ } ], [ - 365, + 366, 366, 0, { @@ -7321,7 +7336,7 @@ } ], [ - 366, + 367, 367, 0, { @@ -7341,7 +7356,7 @@ } ], [ - 367, + 368, 368, 0, { @@ -7361,7 +7376,7 @@ } ], [ - 368, + 369, 369, 0, { @@ -7381,7 +7396,7 @@ } ], [ - 369, + 370, 370, 0, { @@ -7401,7 +7416,7 @@ } ], [ - 370, + 371, 371, 0, { @@ -7421,7 +7436,7 @@ } ], [ - 371, + 372, 372, 0, { @@ -7441,7 +7456,7 @@ } ], [ - 372, + 373, 373, 0, { @@ -7461,7 +7476,7 @@ } ], [ - 373, + 374, 374, 0, { @@ -7481,7 +7496,7 @@ } ], [ - 374, + 375, 375, 0, { @@ -7501,7 +7516,7 @@ } ], [ - 375, + 376, 376, 0, { @@ -7521,7 +7536,7 @@ } ], [ - 376, + 377, 377, 0, { @@ -7541,7 +7556,7 @@ } ], [ - 377, + 378, 378, 0, { @@ -7561,7 +7576,7 @@ } ], [ - 378, + 379, 379, 0, { @@ -7581,7 +7596,7 @@ } ], [ - 379, + 380, 380, 0, { @@ -7601,7 +7616,7 @@ } ], [ - 380, + 381, 381, 0, { @@ -7621,7 +7636,7 @@ } ], [ - 381, + 382, 382, 0, { @@ -7641,7 +7656,7 @@ } ], [ - 382, + 383, 383, 0, { @@ -7661,7 +7676,7 @@ } ], [ - 383, + 384, 384, 0, { @@ -7681,7 +7696,7 @@ } ], [ - 384, + 385, 385, 0, { @@ -7701,7 +7716,7 @@ } ], [ - 385, + 386, 386, 0, { @@ -7721,7 +7736,7 @@ } ], [ - 386, + 387, 387, 0, { @@ -7741,7 +7756,7 @@ } ], [ - 387, + 388, 388, 0, { @@ -7761,7 +7776,7 @@ } ], [ - 388, + 389, 389, 0, { @@ -7781,7 +7796,7 @@ } ], [ - 389, + 390, 390, 0, { @@ -7801,7 +7816,7 @@ } ], [ - 390, + 391, 391, 0, { @@ -7821,7 +7836,7 @@ } ], [ - 391, + 392, 392, 0, { @@ -7841,7 +7856,7 @@ } ], [ - 392, + 393, 393, 0, { @@ -7861,7 +7876,7 @@ } ], [ - 393, + 394, 394, 0, { @@ -7881,7 +7896,7 @@ } ], [ - 394, + 395, 395, 0, { @@ -7901,7 +7916,7 @@ } ], [ - 395, + 396, 396, 0, { @@ -7921,7 +7936,7 @@ } ], [ - 396, + 397, 397, 0, { @@ -7941,7 +7956,7 @@ } ], [ - 397, + 398, 398, 0, { @@ -7961,7 +7976,7 @@ } ], [ - 398, + 399, 399, 0, { @@ -7981,7 +7996,7 @@ } ], [ - 399, + 400, 400, 0, { @@ -8001,7 +8016,7 @@ } ], [ - 400, + 401, 401, 0, { @@ -8021,7 +8036,7 @@ } ], [ - 401, + 402, 402, 0, { @@ -8041,7 +8056,7 @@ } ], [ - 402, + 403, 403, 0, { @@ -8061,7 +8076,7 @@ } ], [ - 403, + 404, 404, 0, { @@ -8081,7 +8096,7 @@ } ], [ - 404, + 405, 405, 0, { @@ -8101,7 +8116,7 @@ } ], [ - 405, + 406, 406, 0, { @@ -8121,7 +8136,7 @@ } ], [ - 406, + 407, 407, 0, { @@ -8145,7 +8160,7 @@ "----", "", "", - "** run** `Run all tests to verify refactoring`", + "** run** `Run all tests to verify refactoring` 7s", "", "`````bash", "> cd /Users/cam/Dev/neovim-dev/opencode.nvim && ./run_tests.sh", @@ -8553,5 +8568,5 @@ "", "" ], - "timestamp": 1770751422 + "timestamp": 1770933866 } \ No newline at end of file diff --git a/tests/data/api-abort.expected.json b/tests/data/api-abort.expected.json index e75b0bf6..1d6b7bd6 100644 --- a/tests/data/api-abort.expected.json +++ b/tests/data/api-abort.expected.json @@ -25,10 +25,6 @@ "", "OpencodeHint" ], - [ - " (2025-10-27 22:44:29)", - "OpencodeHint" - ], [ " [msg_a27d8299d001nchmBunYlZcPyL]", "OpencodeHint" @@ -42,6 +38,25 @@ ], [ 2, + 1, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-27 22:44:29", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 3, 2, 0, { @@ -61,7 +76,7 @@ } ], [ - 3, + 4, 3, 0, { @@ -81,7 +96,7 @@ } ], [ - 4, + 5, 4, 0, { @@ -101,7 +116,7 @@ } ], [ - 5, + 6, 5, 0, { @@ -121,7 +136,7 @@ } ], [ - 6, + 7, 8, 0, { @@ -144,10 +159,6 @@ " gpt-4.1", "OpencodeHint" ], - [ - " (2025-10-27 22:44:29)", - "OpencodeHint" - ], [ " [msg_a27d829f9002sfUFPslHq5P2b4]", "OpencodeHint" @@ -158,6 +169,25 @@ "virt_text_repeat_linebreak": false, "virt_text_win_col": -3 } + ], + [ + 8, + 8, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-27 22:44:29", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } ] ], "lines": [ @@ -177,5 +207,5 @@ "", "" ], - "timestamp": 1770751423 + "timestamp": 1770933866 } \ No newline at end of file diff --git a/tests/data/api-error.expected.json b/tests/data/api-error.expected.json index d81010a3..16071b36 100644 --- a/tests/data/api-error.expected.json +++ b/tests/data/api-error.expected.json @@ -25,10 +25,6 @@ "", "OpencodeHint" ], - [ - " (2025-10-20 04:44:37)", - "OpencodeHint" - ], [ " [msg_9ffef0129001CoCrBKemk7DqcU]", "OpencodeHint" @@ -42,6 +38,25 @@ ], [ 2, + 1, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-20 04:44:37", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 3, 2, 0, { @@ -61,7 +76,7 @@ } ], [ - 3, + 4, 3, 0, { @@ -81,7 +96,7 @@ } ], [ - 4, + 5, 4, 0, { @@ -101,7 +116,7 @@ } ], [ - 5, + 6, 5, 0, { @@ -121,7 +136,7 @@ } ], [ - 6, + 7, 8, 0, { @@ -144,10 +159,6 @@ " claude-sonnet-4-5-20250929", "OpencodeHint" ], - [ - " (2025-10-20 04:44:37)", - "OpencodeHint" - ], [ " [msg_9ffef0160001eArLyAssT]", "OpencodeHint" @@ -160,7 +171,26 @@ } ], [ - 7, + 8, + 8, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-20 04:44:37", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 9, 15, 0, { @@ -183,10 +213,6 @@ " claude-sonnet-4-5-20250929", "OpencodeHint" ], - [ - " (2025-10-20 04:44:37)", - "OpencodeHint" - ], [ " [msg_9ffef0170001s2OM00h2cDa94A]", "OpencodeHint" @@ -197,6 +223,25 @@ "virt_text_repeat_linebreak": false, "virt_text_win_col": -3 } + ], + [ + 10, + 15, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-20 04:44:37", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } ] ], "lines": [ @@ -221,5 +266,5 @@ "", "" ], - "timestamp": 1770751423 + "timestamp": 1770933867 } \ No newline at end of file diff --git a/tests/data/cursor_data.expected.json b/tests/data/cursor_data.expected.json index 4d37132d..e2e2affa 100644 --- a/tests/data/cursor_data.expected.json +++ b/tests/data/cursor_data.expected.json @@ -25,10 +25,6 @@ "", "OpencodeHint" ], - [ - " (2025-10-30 17:42:54)", - "OpencodeHint" - ], [ " [msg_a3637244a001FDRDfoBYVPEGpd]", "OpencodeHint" @@ -42,6 +38,25 @@ ], [ 2, + 1, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-30 17:42:54", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 3, 2, 0, { @@ -61,7 +76,7 @@ } ], [ - 3, + 4, 3, 0, { @@ -81,7 +96,7 @@ } ], [ - 4, + 5, 4, 0, { @@ -101,7 +116,7 @@ } ], [ - 5, + 6, 5, 0, { @@ -121,7 +136,7 @@ } ], [ - 6, + 7, 6, 0, { @@ -141,7 +156,7 @@ } ], [ - 7, + 8, 7, 0, { @@ -161,7 +176,7 @@ } ], [ - 8, + 9, 8, 0, { @@ -181,7 +196,7 @@ } ], [ - 9, + 10, 9, 0, { @@ -201,7 +216,7 @@ } ], [ - 10, + 11, 10, 0, { @@ -221,7 +236,7 @@ } ], [ - 11, + 12, 11, 0, { @@ -241,7 +256,7 @@ } ], [ - 12, + 13, 13, 0, { @@ -264,10 +279,6 @@ " gpt-5-mini", "OpencodeHint" ], - [ - " (2025-10-30 17:42:56)", - "OpencodeHint" - ], [ " [msg_a36372b9a001M1lQEix4SK5QE5]", "OpencodeHint" @@ -278,6 +289,25 @@ "virt_text_repeat_linebreak": false, "virt_text_win_col": -3 } + ], + [ + 14, + 13, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-30 17:42:56", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } ] ], "lines": [ @@ -308,5 +338,5 @@ "", "" ], - "timestamp": 1770751423 + "timestamp": 1770933867 } \ No newline at end of file diff --git a/tests/data/diagnostics.expected.json b/tests/data/diagnostics.expected.json index d4a4d9d5..64060717 100644 --- a/tests/data/diagnostics.expected.json +++ b/tests/data/diagnostics.expected.json @@ -2,78 +2,78 @@ "actions": [ { "args": [ - "f33f38a70b284207e092c2c578a24e96fdd1bd4d" + "8e7903714919009004aad8754db0035fb47ecb24" ], - "display_line": 94, + "display_line": 57, "key": "R", "range": { - "from": 94, - "to": 94 + "from": 57, + "to": 57 }, "text": "[R]evert file", "type": "diff_revert_selected_file" }, { "args": [ - "f33f38a70b284207e092c2c578a24e96fdd1bd4d" + "8e7903714919009004aad8754db0035fb47ecb24" ], - "display_line": 94, + "display_line": 57, "key": "A", "range": { - "from": 94, - "to": 94 + "from": 57, + "to": 57 }, "text": "Revert [A]ll", "type": "diff_revert_all" }, { "args": [ - "f33f38a70b284207e092c2c578a24e96fdd1bd4d" + "8e7903714919009004aad8754db0035fb47ecb24" ], - "display_line": 94, + "display_line": 57, "key": "D", "range": { - "from": 94, - "to": 94 + "from": 57, + "to": 57 }, "text": "[D]iff", "type": "diff_open" }, { "args": [ - "8e7903714919009004aad8754db0035fb47ecb24" + "f33f38a70b284207e092c2c578a24e96fdd1bd4d" ], - "display_line": 57, + "display_line": 94, "key": "R", "range": { - "from": 57, - "to": 57 + "from": 94, + "to": 94 }, "text": "[R]evert file", "type": "diff_revert_selected_file" }, { "args": [ - "8e7903714919009004aad8754db0035fb47ecb24" + "f33f38a70b284207e092c2c578a24e96fdd1bd4d" ], - "display_line": 57, + "display_line": 94, "key": "A", "range": { - "from": 57, - "to": 57 + "from": 94, + "to": 94 }, "text": "Revert [A]ll", "type": "diff_revert_all" }, { "args": [ - "8e7903714919009004aad8754db0035fb47ecb24" + "f33f38a70b284207e092c2c578a24e96fdd1bd4d" ], - "display_line": 57, + "display_line": 94, "key": "D", "range": { - "from": 57, - "to": 57 + "from": 94, + "to": 94 }, "text": "[D]iff", "type": "diff_open" @@ -104,10 +104,6 @@ "", "OpencodeHint" ], - [ - " (2025-11-03 13:34:57)", - "OpencodeHint" - ], [ " [msg_a49ed91d6001coTsjFq9x6FF5W]", "OpencodeHint" @@ -121,6 +117,25 @@ ], [ 2, + 1, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-11-03 13:34:57", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 3, 2, 0, { @@ -140,7 +155,7 @@ } ], [ - 3, + 4, 3, 0, { @@ -160,7 +175,7 @@ } ], [ - 4, + 5, 4, 0, { @@ -180,7 +195,7 @@ } ], [ - 5, + 6, 5, 0, { @@ -200,7 +215,7 @@ } ], [ - 6, + 7, 6, 0, { @@ -220,7 +235,7 @@ } ], [ - 7, + 8, 7, 0, { @@ -240,7 +255,7 @@ } ], [ - 8, + 9, 8, 0, { @@ -260,7 +275,7 @@ } ], [ - 9, + 10, 10, 0, { @@ -283,10 +298,6 @@ " gpt-4.1", "OpencodeHint" ], - [ - " (2025-11-03 13:34:59)", - "OpencodeHint" - ], [ " [msg_a49ed9828001mN6CDcWPnGnpHS]", "OpencodeHint" @@ -299,7 +310,26 @@ } ], [ + 11, 10, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-11-03 13:34:59", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 12, 39, 0, { @@ -319,7 +349,7 @@ } ], [ - 11, + 13, 40, 0, { @@ -339,7 +369,7 @@ } ], [ - 12, + 14, 41, 0, { @@ -359,7 +389,7 @@ } ], [ - 13, + 15, 42, 0, { @@ -379,7 +409,7 @@ } ], [ - 14, + 16, 43, 0, { @@ -399,7 +429,7 @@ } ], [ - 15, + 17, 44, 0, { @@ -419,7 +449,7 @@ } ], [ - 16, + 18, 45, 0, { @@ -439,7 +469,7 @@ } ], [ - 17, + 19, 46, 0, { @@ -463,7 +493,7 @@ } ], [ - 18, + 20, 46, 0, { @@ -483,7 +513,7 @@ } ], [ - 19, + 21, 47, 0, { @@ -507,7 +537,7 @@ } ], [ - 20, + 22, 47, 0, { @@ -527,7 +557,7 @@ } ], [ - 21, + 23, 48, 0, { @@ -551,7 +581,7 @@ } ], [ - 22, + 24, 48, 0, { @@ -571,7 +601,7 @@ } ], [ - 23, + 25, 49, 0, { @@ -595,7 +625,7 @@ } ], [ - 24, + 26, 49, 0, { @@ -615,7 +645,7 @@ } ], [ - 25, + 27, 50, 0, { @@ -635,7 +665,7 @@ } ], [ - 26, + 28, 51, 0, { @@ -655,7 +685,7 @@ } ], [ - 27, + 29, 52, 0, { @@ -675,7 +705,7 @@ } ], [ - 28, + 30, 53, 0, { @@ -695,7 +725,7 @@ } ], [ - 29, + 31, 54, 0, { @@ -715,7 +745,7 @@ } ], [ - 30, + 32, 55, 0, { @@ -735,7 +765,7 @@ } ], [ - 31, + 33, 60, 0, { @@ -758,10 +788,6 @@ " gpt-4.1", "OpencodeHint" ], - [ - " (2025-11-03 13:35:06)", - "OpencodeHint" - ], [ " [msg_a49edb694001syExFxMUW1ik3n]", "OpencodeHint" @@ -774,7 +800,26 @@ } ], [ - 32, + 34, + 60, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-11-03 13:35:06", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 35, 78, 0, { @@ -794,7 +839,7 @@ } ], [ - 33, + 36, 79, 0, { @@ -814,7 +859,7 @@ } ], [ - 34, + 37, 80, 0, { @@ -834,7 +879,7 @@ } ], [ - 35, + 38, 81, 0, { @@ -854,7 +899,7 @@ } ], [ - 36, + 39, 82, 0, { @@ -874,7 +919,7 @@ } ], [ - 37, + 40, 83, 0, { @@ -894,7 +939,7 @@ } ], [ - 38, + 41, 84, 0, { @@ -914,7 +959,7 @@ } ], [ - 39, + 42, 85, 0, { @@ -938,7 +983,7 @@ } ], [ - 40, + 43, 85, 0, { @@ -958,7 +1003,7 @@ } ], [ - 41, + 44, 86, 0, { @@ -982,7 +1027,7 @@ } ], [ - 42, + 45, 86, 0, { @@ -1002,7 +1047,7 @@ } ], [ - 43, + 46, 87, 0, { @@ -1022,7 +1067,7 @@ } ], [ - 44, + 47, 88, 0, { @@ -1042,7 +1087,7 @@ } ], [ - 45, + 48, 89, 0, { @@ -1062,7 +1107,7 @@ } ], [ - 46, + 49, 90, 0, { @@ -1082,7 +1127,7 @@ } ], [ - 47, + 50, 91, 0, { @@ -1102,7 +1147,7 @@ } ], [ - 48, + 51, 92, 0, { @@ -1122,7 +1167,7 @@ } ], [ - 49, + 52, 97, 0, { @@ -1145,10 +1190,6 @@ " gpt-4.1", "OpencodeHint" ], - [ - " (2025-11-03 13:35:10)", - "OpencodeHint" - ], [ " [msg_a49edc4640017DZPFVUPHCm7Ji]", "OpencodeHint" @@ -1161,7 +1202,26 @@ } ], [ - 50, + 53, + 97, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-11-03 13:35:10", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 54, 105, 0, { @@ -1181,7 +1241,7 @@ } ], [ - 51, + 55, 106, 0, { @@ -1201,7 +1261,7 @@ } ], [ - 52, + 56, 107, 0, { @@ -1221,7 +1281,7 @@ } ], [ - 53, + 57, 108, 0, { @@ -1241,7 +1301,7 @@ } ], [ - 54, + 58, 109, 0, { @@ -1261,7 +1321,7 @@ } ], [ - 55, + 59, 110, 0, { @@ -1281,7 +1341,7 @@ } ], [ - 56, + 60, 111, 0, { @@ -1301,7 +1361,7 @@ } ], [ - 57, + 61, 112, 0, { @@ -1321,7 +1381,7 @@ } ], [ - 58, + 62, 113, 0, { @@ -1341,7 +1401,7 @@ } ], [ - 59, + 63, 114, 0, { @@ -1361,7 +1421,7 @@ } ], [ - 60, + 64, 115, 0, { @@ -1381,7 +1441,7 @@ } ], [ - 61, + 65, 116, 0, { @@ -1401,7 +1461,7 @@ } ], [ - 62, + 66, 117, 0, { @@ -1421,7 +1481,7 @@ } ], [ - 63, + 67, 118, 0, { @@ -1441,7 +1501,7 @@ } ], [ - 64, + 68, 119, 0, { @@ -1461,7 +1521,7 @@ } ], [ - 65, + 69, 120, 0, { @@ -1481,7 +1541,7 @@ } ], [ - 66, + 70, 121, 0, { @@ -1501,7 +1561,7 @@ } ], [ - 67, + 71, 122, 0, { @@ -1521,7 +1581,7 @@ } ], [ - 68, + 72, 123, 0, { @@ -1541,7 +1601,7 @@ } ], [ - 69, + 73, 124, 0, { @@ -1561,7 +1621,7 @@ } ], [ - 70, + 74, 125, 0, { @@ -1581,7 +1641,7 @@ } ], [ - 71, + 75, 126, 0, { @@ -1601,7 +1661,7 @@ } ], [ - 72, + 76, 127, 0, { @@ -1621,7 +1681,7 @@ } ], [ - 73, + 77, 128, 0, { @@ -1641,7 +1701,7 @@ } ], [ - 74, + 78, 129, 0, { @@ -1661,7 +1721,7 @@ } ], [ - 75, + 79, 130, 0, { @@ -1681,7 +1741,7 @@ } ], [ - 76, + 80, 131, 0, { @@ -1701,7 +1761,7 @@ } ], [ - 77, + 81, 132, 0, { @@ -1721,7 +1781,7 @@ } ], [ - 78, + 82, 133, 0, { @@ -1741,7 +1801,7 @@ } ], [ - 79, + 83, 134, 0, { @@ -1761,7 +1821,7 @@ } ], [ - 80, + 84, 135, 0, { @@ -1781,7 +1841,7 @@ } ], [ - 81, + 85, 136, 0, { @@ -1801,7 +1861,7 @@ } ], [ - 82, + 86, 137, 0, { @@ -1821,7 +1881,7 @@ } ], [ - 83, + 87, 138, 0, { @@ -1841,7 +1901,7 @@ } ], [ - 84, + 88, 139, 0, { @@ -1861,7 +1921,7 @@ } ], [ - 85, + 89, 140, 0, { @@ -1881,7 +1941,7 @@ } ], [ - 86, + 90, 141, 0, { @@ -1901,7 +1961,7 @@ } ], [ - 87, + 91, 142, 0, { @@ -1921,7 +1981,7 @@ } ], [ - 88, + 92, 143, 0, { @@ -1941,7 +2001,7 @@ } ], [ - 89, + 93, 144, 0, { @@ -1961,7 +2021,7 @@ } ], [ - 90, + 94, 145, 0, { @@ -1981,7 +2041,7 @@ } ], [ - 91, + 95, 146, 0, { @@ -2001,7 +2061,7 @@ } ], [ - 92, + 96, 147, 0, { @@ -2021,7 +2081,7 @@ } ], [ - 93, + 97, 148, 0, { @@ -2041,7 +2101,7 @@ } ], [ - 94, + 98, 149, 0, { @@ -2061,7 +2121,7 @@ } ], [ - 95, + 99, 150, 0, { @@ -2081,7 +2141,7 @@ } ], [ - 96, + 100, 151, 0, { @@ -2101,7 +2161,7 @@ } ], [ - 97, + 101, 152, 0, { @@ -2121,7 +2181,7 @@ } ], [ - 98, + 102, 153, 0, { @@ -2141,7 +2201,7 @@ } ], [ - 99, + 103, 154, 0, { @@ -2161,7 +2221,7 @@ } ], [ - 100, + 104, 155, 0, { @@ -2181,7 +2241,7 @@ } ], [ - 101, + 105, 156, 0, { @@ -2201,7 +2261,7 @@ } ], [ - 102, + 106, 157, 0, { @@ -2221,7 +2281,7 @@ } ], [ - 103, + 107, 158, 0, { @@ -2241,7 +2301,7 @@ } ], [ - 104, + 108, 159, 0, { @@ -2261,7 +2321,7 @@ } ], [ - 105, + 109, 160, 0, { @@ -2281,7 +2341,7 @@ } ], [ - 106, + 110, 161, 0, { @@ -2301,7 +2361,7 @@ } ], [ - 107, + 111, 162, 0, { @@ -2321,7 +2381,7 @@ } ], [ - 108, + 112, 163, 0, { @@ -2341,7 +2401,7 @@ } ], [ - 109, + 113, 164, 0, { @@ -2361,7 +2421,7 @@ } ], [ - 110, + 114, 165, 0, { @@ -2381,7 +2441,7 @@ } ], [ - 111, + 115, 166, 0, { @@ -2401,7 +2461,7 @@ } ], [ - 112, + 116, 167, 0, { @@ -2421,7 +2481,7 @@ } ], [ - 113, + 117, 168, 0, { @@ -2441,7 +2501,7 @@ } ], [ - 114, + 118, 169, 0, { @@ -2461,7 +2521,7 @@ } ], [ - 115, + 119, 170, 0, { @@ -2481,7 +2541,7 @@ } ], [ - 116, + 120, 171, 0, { @@ -2501,7 +2561,7 @@ } ], [ - 117, + 121, 172, 0, { @@ -2521,7 +2581,7 @@ } ], [ - 118, + 122, 173, 0, { @@ -2541,7 +2601,7 @@ } ], [ - 119, + 123, 174, 0, { @@ -2561,7 +2621,7 @@ } ], [ - 120, + 124, 175, 0, { @@ -2581,7 +2641,7 @@ } ], [ - 121, + 125, 176, 0, { @@ -2601,7 +2661,7 @@ } ], [ - 122, + 126, 177, 0, { @@ -2621,7 +2681,7 @@ } ], [ - 123, + 127, 178, 0, { @@ -2641,7 +2701,7 @@ } ], [ - 124, + 128, 179, 0, { @@ -2661,7 +2721,7 @@ } ], [ - 125, + 129, 180, 0, { @@ -2681,7 +2741,7 @@ } ], [ - 126, + 130, 181, 0, { @@ -2701,7 +2761,7 @@ } ], [ - 127, + 131, 182, 0, { @@ -2721,7 +2781,7 @@ } ], [ - 128, + 132, 183, 0, { @@ -2741,7 +2801,7 @@ } ], [ - 129, + 133, 184, 0, { @@ -2761,7 +2821,7 @@ } ], [ - 130, + 134, 185, 0, { @@ -2781,7 +2841,7 @@ } ], [ - 131, + 135, 186, 0, { @@ -2801,7 +2861,7 @@ } ], [ - 132, + 136, 187, 0, { @@ -2821,7 +2881,7 @@ } ], [ - 133, + 137, 188, 0, { @@ -2841,7 +2901,7 @@ } ], [ - 134, + 138, 189, 0, { @@ -2861,7 +2921,7 @@ } ], [ - 135, + 139, 190, 0, { @@ -2881,7 +2941,7 @@ } ], [ - 136, + 140, 191, 0, { @@ -2901,7 +2961,7 @@ } ], [ - 137, + 141, 192, 0, { @@ -2921,7 +2981,7 @@ } ], [ - 138, + 142, 193, 0, { @@ -2941,7 +3001,7 @@ } ], [ - 139, + 143, 194, 0, { @@ -2961,7 +3021,7 @@ } ], [ - 140, + 144, 195, 0, { @@ -2981,7 +3041,7 @@ } ], [ - 141, + 145, 196, 0, { @@ -3001,7 +3061,7 @@ } ], [ - 142, + 146, 197, 0, { @@ -3021,7 +3081,7 @@ } ], [ - 143, + 147, 198, 0, { @@ -3041,7 +3101,7 @@ } ], [ - 144, + 148, 199, 0, { @@ -3061,7 +3121,7 @@ } ], [ - 145, + 149, 200, 0, { @@ -3081,7 +3141,7 @@ } ], [ - 146, + 150, 201, 0, { @@ -3101,7 +3161,7 @@ } ], [ - 147, + 151, 202, 0, { @@ -3121,7 +3181,7 @@ } ], [ - 148, + 152, 203, 0, { @@ -3141,7 +3201,7 @@ } ], [ - 149, + 153, 204, 0, { @@ -3161,7 +3221,7 @@ } ], [ - 150, + 154, 205, 0, { @@ -3181,7 +3241,7 @@ } ], [ - 151, + 155, 206, 0, { @@ -3201,7 +3261,7 @@ } ], [ - 152, + 156, 207, 0, { @@ -3221,7 +3281,7 @@ } ], [ - 153, + 157, 208, 0, { @@ -3241,7 +3301,7 @@ } ], [ - 154, + 158, 209, 0, { @@ -3261,7 +3321,7 @@ } ], [ - 155, + 159, 210, 0, { @@ -3281,7 +3341,7 @@ } ], [ - 156, + 160, 211, 0, { @@ -3301,7 +3361,7 @@ } ], [ - 157, + 161, 212, 0, { @@ -3321,7 +3381,7 @@ } ], [ - 158, + 162, 213, 0, { @@ -3341,7 +3401,7 @@ } ], [ - 159, + 163, 214, 0, { @@ -3361,7 +3421,7 @@ } ], [ - 160, + 164, 215, 0, { @@ -3381,7 +3441,7 @@ } ], [ - 161, + 165, 216, 0, { @@ -3401,7 +3461,7 @@ } ], [ - 162, + 166, 217, 0, { @@ -3421,7 +3481,7 @@ } ], [ - 163, + 167, 218, 0, { @@ -3441,7 +3501,7 @@ } ], [ - 164, + 168, 219, 0, { @@ -3461,7 +3521,7 @@ } ], [ - 165, + 169, 220, 0, { @@ -3481,7 +3541,7 @@ } ], [ - 166, + 170, 221, 0, { @@ -3501,7 +3561,7 @@ } ], [ - 167, + 171, 222, 0, { @@ -3521,7 +3581,7 @@ } ], [ - 168, + 172, 223, 0, { @@ -3541,7 +3601,7 @@ } ], [ - 169, + 173, 224, 0, { @@ -3561,7 +3621,7 @@ } ], [ - 170, + 174, 225, 0, { @@ -3581,7 +3641,7 @@ } ], [ - 171, + 175, 226, 0, { @@ -3601,7 +3661,7 @@ } ], [ - 172, + 176, 227, 0, { @@ -3621,7 +3681,7 @@ } ], [ - 173, + 177, 228, 0, { @@ -3641,7 +3701,7 @@ } ], [ - 174, + 178, 229, 0, { @@ -3661,7 +3721,7 @@ } ], [ - 175, + 179, 230, 0, { @@ -3681,7 +3741,7 @@ } ], [ - 176, + 180, 231, 0, { @@ -3701,7 +3761,7 @@ } ], [ - 177, + 181, 232, 0, { @@ -3721,7 +3781,7 @@ } ], [ - 178, + 182, 233, 0, { @@ -3741,7 +3801,7 @@ } ], [ - 179, + 183, 234, 0, { @@ -3761,7 +3821,7 @@ } ], [ - 180, + 184, 235, 0, { @@ -3781,7 +3841,7 @@ } ], [ - 181, + 185, 236, 0, { @@ -3801,7 +3861,7 @@ } ], [ - 182, + 186, 237, 0, { @@ -3821,7 +3881,7 @@ } ], [ - 183, + 187, 238, 0, { @@ -3841,7 +3901,7 @@ } ], [ - 184, + 188, 239, 0, { @@ -3861,7 +3921,7 @@ } ], [ - 185, + 189, 240, 0, { @@ -3881,7 +3941,7 @@ } ], [ - 186, + 190, 241, 0, { @@ -3901,7 +3961,7 @@ } ], [ - 187, + 191, 242, 0, { @@ -3921,7 +3981,7 @@ } ], [ - 188, + 192, 243, 0, { @@ -3941,7 +4001,7 @@ } ], [ - 189, + 193, 244, 0, { @@ -3961,7 +4021,7 @@ } ], [ - 190, + 194, 245, 0, { @@ -3981,7 +4041,7 @@ } ], [ - 191, + 195, 246, 0, { @@ -4001,7 +4061,7 @@ } ], [ - 192, + 196, 247, 0, { @@ -4021,7 +4081,7 @@ } ], [ - 193, + 197, 248, 0, { @@ -4041,7 +4101,7 @@ } ], [ - 194, + 198, 249, 0, { @@ -4061,7 +4121,7 @@ } ], [ - 195, + 199, 250, 0, { @@ -4081,7 +4141,7 @@ } ], [ - 196, + 200, 251, 0, { @@ -4101,7 +4161,7 @@ } ], [ - 197, + 201, 252, 0, { @@ -4121,7 +4181,7 @@ } ], [ - 198, + 202, 253, 0, { @@ -4141,7 +4201,7 @@ } ], [ - 199, + 203, 254, 0, { @@ -4161,7 +4221,7 @@ } ], [ - 200, + 204, 255, 0, { @@ -4181,7 +4241,7 @@ } ], [ - 201, + 205, 256, 0, { @@ -4201,7 +4261,7 @@ } ], [ - 202, + 206, 257, 0, { @@ -4221,7 +4281,7 @@ } ], [ - 203, + 207, 258, 0, { @@ -4241,7 +4301,7 @@ } ], [ - 204, + 208, 259, 0, { @@ -4261,7 +4321,7 @@ } ], [ - 205, + 209, 260, 0, { @@ -4281,7 +4341,7 @@ } ], [ - 206, + 210, 261, 0, { @@ -4301,7 +4361,7 @@ } ], [ - 207, + 211, 262, 0, { @@ -4321,7 +4381,7 @@ } ], [ - 208, + 212, 263, 0, { @@ -4341,7 +4401,7 @@ } ], [ - 209, + 213, 264, 0, { @@ -4361,7 +4421,7 @@ } ], [ - 210, + 214, 265, 0, { @@ -4381,7 +4441,7 @@ } ], [ - 211, + 215, 266, 0, { @@ -4401,7 +4461,7 @@ } ], [ - 212, + 216, 267, 0, { @@ -4421,7 +4481,7 @@ } ], [ - 213, + 217, 268, 0, { @@ -4441,7 +4501,7 @@ } ], [ - 214, + 218, 269, 0, { @@ -4461,7 +4521,7 @@ } ], [ - 215, + 219, 270, 0, { @@ -4481,7 +4541,7 @@ } ], [ - 216, + 220, 271, 0, { @@ -4501,7 +4561,7 @@ } ], [ - 217, + 221, 272, 0, { @@ -4521,7 +4581,7 @@ } ], [ - 218, + 222, 273, 0, { @@ -4541,7 +4601,7 @@ } ], [ - 219, + 223, 274, 0, { @@ -4561,7 +4621,7 @@ } ], [ - 220, + 224, 275, 0, { @@ -4581,7 +4641,7 @@ } ], [ - 221, + 225, 276, 0, { @@ -4601,7 +4661,7 @@ } ], [ - 222, + 226, 277, 0, { @@ -4621,7 +4681,7 @@ } ], [ - 223, + 227, 278, 0, { @@ -4641,7 +4701,7 @@ } ], [ - 224, + 228, 279, 0, { @@ -4661,7 +4721,7 @@ } ], [ - 225, + 229, 280, 0, { @@ -4681,7 +4741,7 @@ } ], [ - 226, + 230, 281, 0, { @@ -4701,7 +4761,7 @@ } ], [ - 227, + 231, 282, 0, { @@ -4721,7 +4781,7 @@ } ], [ - 228, + 232, 283, 0, { @@ -4741,7 +4801,7 @@ } ], [ - 229, + 233, 284, 0, { @@ -4761,7 +4821,7 @@ } ], [ - 230, + 234, 285, 0, { @@ -4781,7 +4841,7 @@ } ], [ - 231, + 235, 286, 0, { @@ -4801,7 +4861,7 @@ } ], [ - 232, + 236, 287, 0, { @@ -4821,7 +4881,7 @@ } ], [ - 233, + 237, 288, 0, { @@ -4841,7 +4901,7 @@ } ], [ - 234, + 238, 289, 0, { @@ -4861,7 +4921,7 @@ } ], [ - 235, + 239, 290, 0, { @@ -4881,7 +4941,7 @@ } ], [ - 236, + 240, 291, 0, { @@ -4901,7 +4961,7 @@ } ], [ - 237, + 241, 292, 0, { @@ -4921,7 +4981,7 @@ } ], [ - 238, + 242, 293, 0, { @@ -4941,7 +5001,7 @@ } ], [ - 239, + 243, 294, 0, { @@ -4961,7 +5021,7 @@ } ], [ - 240, + 244, 295, 0, { @@ -4981,7 +5041,7 @@ } ], [ - 241, + 245, 296, 0, { @@ -5001,7 +5061,7 @@ } ], [ - 242, + 246, 297, 0, { @@ -5021,7 +5081,7 @@ } ], [ - 243, + 247, 298, 0, { @@ -5041,7 +5101,7 @@ } ], [ - 244, + 248, 299, 0, { @@ -5061,7 +5121,7 @@ } ], [ - 245, + 249, 300, 0, { @@ -5081,7 +5141,7 @@ } ], [ - 246, + 250, 301, 0, { @@ -5101,7 +5161,7 @@ } ], [ - 247, + 251, 302, 0, { @@ -5121,7 +5181,7 @@ } ], [ - 248, + 252, 303, 0, { @@ -5141,7 +5201,7 @@ } ], [ - 249, + 253, 304, 0, { @@ -5161,7 +5221,7 @@ } ], [ - 250, + 254, 305, 0, { @@ -5181,7 +5241,7 @@ } ], [ - 251, + 255, 306, 0, { @@ -5201,7 +5261,7 @@ } ], [ - 252, + 256, 307, 0, { @@ -5221,7 +5281,7 @@ } ], [ - 253, + 257, 308, 0, { @@ -5241,7 +5301,7 @@ } ], [ - 254, + 258, 309, 0, { @@ -5261,7 +5321,7 @@ } ], [ - 255, + 259, 310, 0, { @@ -5281,7 +5341,7 @@ } ], [ - 256, + 260, 311, 0, { @@ -5301,7 +5361,7 @@ } ], [ - 257, + 261, 312, 0, { @@ -5321,7 +5381,7 @@ } ], [ - 258, + 262, 313, 0, { @@ -5341,7 +5401,7 @@ } ], [ - 259, + 263, 314, 0, { @@ -5361,7 +5421,7 @@ } ], [ - 260, + 264, 315, 0, { @@ -5381,7 +5441,7 @@ } ], [ - 261, + 265, 316, 0, { @@ -5401,7 +5461,7 @@ } ], [ - 262, + 266, 317, 0, { @@ -5421,7 +5481,7 @@ } ], [ - 263, + 267, 318, 0, { @@ -5441,7 +5501,7 @@ } ], [ - 264, + 268, 319, 0, { @@ -5461,7 +5521,7 @@ } ], [ - 265, + 269, 320, 0, { @@ -5481,7 +5541,7 @@ } ], [ - 266, + 270, 321, 0, { @@ -5501,7 +5561,7 @@ } ], [ - 267, + 271, 322, 0, { @@ -5521,7 +5581,7 @@ } ], [ - 268, + 272, 323, 0, { @@ -5541,7 +5601,7 @@ } ], [ - 269, + 273, 324, 0, { @@ -5561,7 +5621,7 @@ } ], [ - 270, + 274, 325, 0, { @@ -5581,7 +5641,7 @@ } ], [ - 271, + 275, 326, 0, { @@ -5601,7 +5661,7 @@ } ], [ - 272, + 276, 327, 0, { @@ -5621,7 +5681,7 @@ } ], [ - 273, + 277, 328, 0, { @@ -5641,7 +5701,7 @@ } ], [ - 274, + 278, 329, 0, { @@ -5661,7 +5721,7 @@ } ], [ - 275, + 279, 330, 0, { @@ -5681,7 +5741,7 @@ } ], [ - 276, + 280, 331, 0, { @@ -5701,7 +5761,7 @@ } ], [ - 277, + 281, 332, 0, { @@ -5721,7 +5781,7 @@ } ], [ - 278, + 282, 333, 0, { @@ -5741,7 +5801,7 @@ } ], [ - 279, + 283, 334, 0, { @@ -5761,7 +5821,7 @@ } ], [ - 280, + 284, 335, 0, { @@ -5781,7 +5841,7 @@ } ], [ - 281, + 285, 336, 0, { @@ -5801,7 +5861,7 @@ } ], [ - 282, + 286, 337, 0, { @@ -5821,7 +5881,7 @@ } ], [ - 283, + 287, 338, 0, { @@ -5841,7 +5901,7 @@ } ], [ - 284, + 288, 339, 0, { @@ -5861,7 +5921,7 @@ } ], [ - 285, + 289, 340, 0, { @@ -5881,7 +5941,7 @@ } ], [ - 286, + 290, 341, 0, { @@ -5901,7 +5961,7 @@ } ], [ - 287, + 291, 342, 0, { @@ -5921,7 +5981,7 @@ } ], [ - 288, + 292, 343, 0, { @@ -5941,7 +6001,7 @@ } ], [ - 289, + 293, 344, 0, { @@ -5961,7 +6021,7 @@ } ], [ - 290, + 294, 345, 0, { @@ -5981,7 +6041,7 @@ } ], [ - 291, + 295, 346, 0, { @@ -6001,7 +6061,7 @@ } ], [ - 292, + 296, 347, 0, { @@ -6021,7 +6081,7 @@ } ], [ - 293, + 297, 348, 0, { @@ -6041,7 +6101,7 @@ } ], [ - 294, + 298, 349, 0, { @@ -6061,7 +6121,7 @@ } ], [ - 295, + 299, 350, 0, { @@ -6081,7 +6141,7 @@ } ], [ - 296, + 300, 351, 0, { @@ -6101,7 +6161,7 @@ } ], [ - 297, + 301, 352, 0, { @@ -6121,7 +6181,7 @@ } ], [ - 298, + 302, 353, 0, { @@ -6141,7 +6201,7 @@ } ], [ - 299, + 303, 354, 0, { @@ -6161,7 +6221,7 @@ } ], [ - 300, + 304, 355, 0, { @@ -6181,7 +6241,7 @@ } ], [ - 301, + 305, 356, 0, { @@ -6201,7 +6261,7 @@ } ], [ - 302, + 306, 357, 0, { @@ -6221,7 +6281,7 @@ } ], [ - 303, + 307, 358, 0, { @@ -6241,7 +6301,7 @@ } ], [ - 304, + 308, 359, 0, { @@ -6261,7 +6321,7 @@ } ], [ - 305, + 309, 360, 0, { @@ -6281,7 +6341,7 @@ } ], [ - 306, + 310, 361, 0, { @@ -6301,7 +6361,7 @@ } ], [ - 307, + 311, 362, 0, { @@ -6321,7 +6381,7 @@ } ], [ - 308, + 312, 363, 0, { @@ -6341,7 +6401,7 @@ } ], [ - 309, + 313, 364, 0, { @@ -6361,7 +6421,7 @@ } ], [ - 310, + 314, 365, 0, { @@ -6381,7 +6441,7 @@ } ], [ - 311, + 315, 366, 0, { @@ -6401,7 +6461,7 @@ } ], [ - 312, + 316, 367, 0, { @@ -6421,7 +6481,7 @@ } ], [ - 313, + 317, 368, 0, { @@ -6441,7 +6501,7 @@ } ], [ - 314, + 318, 369, 0, { @@ -6461,7 +6521,7 @@ } ], [ - 315, + 319, 370, 0, { @@ -6481,7 +6541,7 @@ } ], [ - 316, + 320, 371, 0, { @@ -6501,7 +6561,7 @@ } ], [ - 317, + 321, 372, 0, { @@ -6521,7 +6581,7 @@ } ], [ - 318, + 322, 373, 0, { @@ -6541,7 +6601,7 @@ } ], [ - 319, + 323, 374, 0, { @@ -6561,7 +6621,7 @@ } ], [ - 320, + 324, 375, 0, { @@ -6581,7 +6641,7 @@ } ], [ - 321, + 325, 376, 0, { @@ -6601,7 +6661,7 @@ } ], [ - 322, + 326, 377, 0, { @@ -6621,7 +6681,7 @@ } ], [ - 323, + 327, 378, 0, { @@ -6641,7 +6701,7 @@ } ], [ - 324, + 328, 379, 0, { @@ -6661,7 +6721,7 @@ } ], [ - 325, + 329, 380, 0, { @@ -6681,7 +6741,7 @@ } ], [ - 326, + 330, 381, 0, { @@ -6701,7 +6761,7 @@ } ], [ - 327, + 331, 382, 0, { @@ -6721,7 +6781,7 @@ } ], [ - 328, + 332, 383, 0, { @@ -6741,7 +6801,7 @@ } ], [ - 329, + 333, 384, 0, { @@ -6761,7 +6821,7 @@ } ], [ - 330, + 334, 385, 0, { @@ -6781,7 +6841,7 @@ } ], [ - 331, + 335, 386, 0, { @@ -6801,7 +6861,7 @@ } ], [ - 332, + 336, 387, 0, { @@ -6821,7 +6881,7 @@ } ], [ - 333, + 337, 388, 0, { @@ -6841,7 +6901,7 @@ } ], [ - 334, + 338, 389, 0, { @@ -6861,7 +6921,7 @@ } ], [ - 335, + 339, 390, 0, { @@ -6881,7 +6941,7 @@ } ], [ - 336, + 340, 391, 0, { @@ -6901,7 +6961,7 @@ } ], [ - 337, + 341, 392, 0, { @@ -6921,7 +6981,7 @@ } ], [ - 338, + 342, 393, 0, { @@ -6941,7 +7001,7 @@ } ], [ - 339, + 343, 394, 0, { @@ -6961,7 +7021,7 @@ } ], [ - 340, + 344, 395, 0, { @@ -6981,7 +7041,7 @@ } ], [ - 341, + 345, 396, 0, { @@ -7001,7 +7061,7 @@ } ], [ - 342, + 346, 397, 0, { @@ -7021,7 +7081,7 @@ } ], [ - 343, + 347, 398, 0, { @@ -7041,7 +7101,7 @@ } ], [ - 344, + 348, 399, 0, { @@ -7061,7 +7121,7 @@ } ], [ - 345, + 349, 400, 0, { @@ -7081,7 +7141,7 @@ } ], [ - 346, + 350, 401, 0, { @@ -7101,7 +7161,7 @@ } ], [ - 347, + 351, 402, 0, { @@ -7121,7 +7181,7 @@ } ], [ - 348, + 352, 403, 0, { @@ -7141,7 +7201,7 @@ } ], [ - 349, + 353, 404, 0, { @@ -7161,7 +7221,7 @@ } ], [ - 350, + 354, 405, 0, { @@ -7181,7 +7241,7 @@ } ], [ - 351, + 355, 406, 0, { @@ -7201,7 +7261,7 @@ } ], [ - 352, + 356, 407, 0, { @@ -7221,7 +7281,7 @@ } ], [ - 353, + 357, 408, 0, { @@ -7241,7 +7301,7 @@ } ], [ - 354, + 358, 409, 0, { @@ -7261,7 +7321,7 @@ } ], [ - 355, + 359, 410, 0, { @@ -7281,7 +7341,7 @@ } ], [ - 356, + 360, 411, 0, { @@ -7301,7 +7361,7 @@ } ], [ - 357, + 361, 412, 0, { @@ -7321,7 +7381,7 @@ } ], [ - 358, + 362, 413, 0, { @@ -7341,7 +7401,7 @@ } ], [ - 359, + 363, 414, 0, { @@ -7361,7 +7421,7 @@ } ], [ - 360, + 364, 415, 0, { @@ -7381,7 +7441,7 @@ } ], [ - 361, + 365, 416, 0, { @@ -7401,7 +7461,7 @@ } ], [ - 362, + 366, 417, 0, { @@ -7421,7 +7481,7 @@ } ], [ - 363, + 367, 418, 0, { @@ -7441,7 +7501,7 @@ } ], [ - 364, + 368, 419, 0, { @@ -7461,7 +7521,7 @@ } ], [ - 365, + 369, 420, 0, { @@ -7481,7 +7541,7 @@ } ], [ - 366, + 370, 421, 0, { @@ -7501,7 +7561,7 @@ } ], [ - 367, + 371, 422, 0, { @@ -7521,7 +7581,7 @@ } ], [ - 368, + 372, 423, 0, { @@ -7541,7 +7601,7 @@ } ], [ - 369, + 373, 424, 0, { @@ -7561,7 +7621,7 @@ } ], [ - 370, + 374, 425, 0, { @@ -7581,7 +7641,7 @@ } ], [ - 371, + 375, 426, 0, { @@ -7601,7 +7661,7 @@ } ], [ - 372, + 376, 427, 0, { @@ -7621,7 +7681,7 @@ } ], [ - 373, + 377, 428, 0, { @@ -7641,7 +7701,7 @@ } ], [ - 374, + 378, 429, 0, { @@ -7661,7 +7721,7 @@ } ], [ - 375, + 379, 430, 0, { @@ -7681,7 +7741,7 @@ } ], [ - 376, + 380, 431, 0, { @@ -7701,7 +7761,7 @@ } ], [ - 377, + 381, 432, 0, { @@ -7721,7 +7781,7 @@ } ], [ - 378, + 382, 433, 0, { @@ -7741,7 +7801,7 @@ } ], [ - 379, + 383, 434, 0, { @@ -7761,7 +7821,7 @@ } ], [ - 380, + 384, 435, 0, { @@ -7781,7 +7841,7 @@ } ], [ - 381, + 385, 436, 0, { @@ -7801,7 +7861,7 @@ } ], [ - 382, + 386, 437, 0, { @@ -7821,7 +7881,7 @@ } ], [ - 383, + 387, 438, 0, { @@ -7841,7 +7901,7 @@ } ], [ - 384, + 388, 439, 0, { @@ -7861,7 +7921,7 @@ } ], [ - 385, + 389, 440, 0, { @@ -7881,7 +7941,7 @@ } ], [ - 386, + 390, 441, 0, { @@ -7901,7 +7961,7 @@ } ], [ - 387, + 391, 442, 0, { @@ -7921,7 +7981,7 @@ } ], [ - 388, + 392, 443, 0, { @@ -7941,7 +8001,7 @@ } ], [ - 389, + 393, 444, 0, { @@ -7961,7 +8021,7 @@ } ], [ - 390, + 394, 445, 0, { @@ -7981,7 +8041,7 @@ } ], [ - 391, + 395, 446, 0, { @@ -8001,7 +8061,7 @@ } ], [ - 392, + 396, 447, 0, { @@ -8021,7 +8081,7 @@ } ], [ - 393, + 397, 448, 0, { @@ -8041,7 +8101,7 @@ } ], [ - 394, + 398, 449, 0, { @@ -8061,7 +8121,7 @@ } ], [ - 395, + 399, 450, 0, { @@ -8081,7 +8141,7 @@ } ], [ - 396, + 400, 451, 0, { @@ -8101,7 +8161,7 @@ } ], [ - 397, + 401, 452, 0, { @@ -8121,7 +8181,7 @@ } ], [ - 398, + 402, 453, 0, { @@ -8141,7 +8201,7 @@ } ], [ - 399, + 403, 454, 0, { @@ -8161,7 +8221,7 @@ } ], [ - 400, + 404, 455, 0, { @@ -8181,7 +8241,7 @@ } ], [ - 401, + 405, 456, 0, { @@ -8201,7 +8261,7 @@ } ], [ - 402, + 406, 457, 0, { @@ -8221,7 +8281,7 @@ } ], [ - 403, + 407, 458, 0, { @@ -8241,7 +8301,7 @@ } ], [ - 404, + 408, 459, 0, { @@ -8261,7 +8321,7 @@ } ], [ - 405, + 409, 460, 0, { @@ -8281,7 +8341,7 @@ } ], [ - 406, + 410, 461, 0, { @@ -8301,7 +8361,7 @@ } ], [ - 407, + 411, 462, 0, { @@ -8321,7 +8381,7 @@ } ], [ - 408, + 412, 463, 0, { @@ -8341,7 +8401,7 @@ } ], [ - 409, + 413, 464, 0, { @@ -8361,7 +8421,7 @@ } ], [ - 410, + 414, 465, 0, { @@ -8381,7 +8441,7 @@ } ], [ - 411, + 415, 466, 0, { @@ -8401,7 +8461,7 @@ } ], [ - 412, + 416, 467, 0, { @@ -8421,7 +8481,7 @@ } ], [ - 413, + 417, 468, 0, { @@ -8441,7 +8501,7 @@ } ], [ - 414, + 418, 469, 0, { @@ -8461,7 +8521,7 @@ } ], [ - 415, + 419, 470, 0, { @@ -8481,7 +8541,7 @@ } ], [ - 416, + 420, 471, 0, { @@ -8501,7 +8561,7 @@ } ], [ - 417, + 421, 472, 0, { @@ -8521,7 +8581,7 @@ } ], [ - 418, + 422, 473, 0, { @@ -8541,7 +8601,7 @@ } ], [ - 419, + 423, 474, 0, { @@ -8561,7 +8621,7 @@ } ], [ - 420, + 424, 475, 0, { @@ -8581,7 +8641,7 @@ } ], [ - 421, + 425, 476, 0, { @@ -8601,7 +8661,7 @@ } ], [ - 422, + 426, 477, 0, { @@ -8621,7 +8681,7 @@ } ], [ - 423, + 427, 478, 0, { @@ -8641,7 +8701,7 @@ } ], [ - 424, + 428, 479, 0, { @@ -8661,7 +8721,7 @@ } ], [ - 425, + 429, 480, 0, { @@ -8681,7 +8741,7 @@ } ], [ - 426, + 430, 481, 0, { @@ -8701,7 +8761,7 @@ } ], [ - 427, + 431, 482, 0, { @@ -8721,7 +8781,7 @@ } ], [ - 428, + 432, 483, 0, { @@ -8741,7 +8801,7 @@ } ], [ - 429, + 433, 484, 0, { @@ -8761,7 +8821,7 @@ } ], [ - 430, + 434, 485, 0, { @@ -8781,7 +8841,7 @@ } ], [ - 431, + 435, 486, 0, { @@ -8801,7 +8861,7 @@ } ], [ - 432, + 436, 487, 0, { @@ -8821,7 +8881,7 @@ } ], [ - 433, + 437, 488, 0, { @@ -8841,7 +8901,7 @@ } ], [ - 434, + 438, 489, 0, { @@ -8861,7 +8921,7 @@ } ], [ - 435, + 439, 490, 0, { @@ -8881,7 +8941,7 @@ } ], [ - 436, + 440, 491, 0, { @@ -8901,7 +8961,7 @@ } ], [ - 437, + 441, 492, 0, { @@ -8921,7 +8981,7 @@ } ], [ - 438, + 442, 493, 0, { @@ -8941,7 +9001,7 @@ } ], [ - 439, + 443, 494, 0, { @@ -8961,7 +9021,7 @@ } ], [ - 440, + 444, 495, 0, { @@ -8981,7 +9041,7 @@ } ], [ - 441, + 445, 496, 0, { @@ -9001,7 +9061,7 @@ } ], [ - 442, + 446, 497, 0, { @@ -9021,7 +9081,7 @@ } ], [ - 443, + 447, 498, 0, { @@ -9041,7 +9101,7 @@ } ], [ - 444, + 448, 499, 0, { @@ -9061,7 +9121,7 @@ } ], [ - 445, + 449, 500, 0, { @@ -9081,7 +9141,7 @@ } ], [ - 446, + 450, 501, 0, { @@ -9101,7 +9161,7 @@ } ], [ - 447, + 451, 502, 0, { @@ -9121,7 +9181,7 @@ } ], [ - 448, + 452, 503, 0, { @@ -9141,7 +9201,7 @@ } ], [ - 449, + 453, 504, 0, { @@ -9161,7 +9221,7 @@ } ], [ - 450, + 454, 505, 0, { @@ -9181,7 +9241,7 @@ } ], [ - 451, + 455, 506, 0, { @@ -9201,7 +9261,7 @@ } ], [ - 452, + 456, 507, 0, { @@ -9221,7 +9281,7 @@ } ], [ - 453, + 457, 508, 0, { @@ -9241,7 +9301,7 @@ } ], [ - 454, + 458, 509, 0, { @@ -9261,7 +9321,7 @@ } ], [ - 455, + 459, 510, 0, { @@ -9281,7 +9341,7 @@ } ], [ - 456, + 460, 511, 0, { @@ -9301,7 +9361,7 @@ } ], [ - 457, + 461, 512, 0, { @@ -9321,7 +9381,7 @@ } ], [ - 458, + 462, 513, 0, { @@ -9341,7 +9401,7 @@ } ], [ - 459, + 463, 514, 0, { @@ -9361,7 +9421,7 @@ } ], [ - 460, + 464, 515, 0, { @@ -9381,7 +9441,7 @@ } ], [ - 461, + 465, 516, 0, { @@ -9401,7 +9461,7 @@ } ], [ - 462, + 466, 517, 0, { @@ -9421,7 +9481,7 @@ } ], [ - 463, + 467, 518, 0, { @@ -9441,7 +9501,7 @@ } ], [ - 464, + 468, 519, 0, { @@ -9461,7 +9521,7 @@ } ], [ - 465, + 469, 520, 0, { @@ -9481,7 +9541,7 @@ } ], [ - 466, + 470, 521, 0, { @@ -9501,7 +9561,7 @@ } ], [ - 467, + 471, 522, 0, { @@ -9521,7 +9581,7 @@ } ], [ - 468, + 472, 523, 0, { @@ -9541,7 +9601,7 @@ } ], [ - 469, + 473, 524, 0, { @@ -9561,7 +9621,7 @@ } ], [ - 470, + 474, 525, 0, { @@ -9581,7 +9641,7 @@ } ], [ - 471, + 475, 526, 0, { @@ -9601,7 +9661,7 @@ } ], [ - 472, + 476, 527, 0, { @@ -9621,7 +9681,7 @@ } ], [ - 473, + 477, 528, 0, { @@ -9641,7 +9701,7 @@ } ], [ - 474, + 478, 529, 0, { @@ -9661,7 +9721,7 @@ } ], [ - 475, + 479, 530, 0, { @@ -9681,7 +9741,7 @@ } ], [ - 476, + 480, 531, 0, { @@ -9701,7 +9761,7 @@ } ], [ - 477, + 481, 532, 0, { @@ -9721,7 +9781,7 @@ } ], [ - 478, + 482, 533, 0, { @@ -9741,7 +9801,7 @@ } ], [ - 479, + 483, 534, 0, { @@ -9761,7 +9821,7 @@ } ], [ - 480, + 484, 535, 0, { @@ -9781,7 +9841,7 @@ } ], [ - 481, + 485, 536, 0, { @@ -9801,7 +9861,7 @@ } ], [ - 482, + 486, 537, 0, { @@ -9821,7 +9881,7 @@ } ], [ - 483, + 487, 538, 0, { @@ -9841,7 +9901,7 @@ } ], [ - 484, + 488, 539, 0, { @@ -9861,7 +9921,7 @@ } ], [ - 485, + 489, 540, 0, { @@ -9881,7 +9941,7 @@ } ], [ - 486, + 490, 541, 0, { @@ -9901,7 +9961,7 @@ } ], [ - 487, + 491, 542, 0, { @@ -9921,7 +9981,7 @@ } ], [ - 488, + 492, 543, 0, { @@ -9941,7 +10001,7 @@ } ], [ - 489, + 493, 544, 0, { @@ -9961,7 +10021,7 @@ } ], [ - 490, + 494, 545, 0, { @@ -9981,7 +10041,7 @@ } ], [ - 491, + 495, 546, 0, { @@ -10001,7 +10061,7 @@ } ], [ - 492, + 496, 547, 0, { @@ -10021,7 +10081,7 @@ } ], [ - 493, + 497, 548, 0, { @@ -10041,7 +10101,7 @@ } ], [ - 494, + 498, 549, 0, { @@ -10061,7 +10121,7 @@ } ], [ - 495, + 499, 550, 0, { @@ -10081,7 +10141,7 @@ } ], [ - 496, + 500, 551, 0, { @@ -10101,7 +10161,7 @@ } ], [ - 497, + 501, 552, 0, { @@ -10121,7 +10181,7 @@ } ], [ - 498, + 502, 553, 0, { @@ -10141,7 +10201,7 @@ } ], [ - 499, + 503, 554, 0, { @@ -10161,7 +10221,7 @@ } ], [ - 500, + 504, 555, 0, { @@ -10181,7 +10241,7 @@ } ], [ - 501, + 505, 556, 0, { @@ -10201,7 +10261,7 @@ } ], [ - 502, + 506, 557, 0, { @@ -10221,7 +10281,7 @@ } ], [ - 503, + 507, 558, 0, { @@ -10241,7 +10301,7 @@ } ], [ - 504, + 508, 559, 0, { @@ -10261,7 +10321,7 @@ } ], [ - 505, + 509, 560, 0, { @@ -10281,7 +10341,7 @@ } ], [ - 506, + 510, 561, 0, { @@ -10301,7 +10361,7 @@ } ], [ - 507, + 511, 562, 0, { @@ -10321,7 +10381,7 @@ } ], [ - 508, + 512, 563, 0, { @@ -10341,7 +10401,7 @@ } ], [ - 509, + 513, 564, 0, { @@ -10361,7 +10421,7 @@ } ], [ - 510, + 514, 565, 0, { @@ -10381,7 +10441,7 @@ } ], [ - 511, + 515, 566, 0, { @@ -10401,7 +10461,7 @@ } ], [ - 512, + 516, 567, 0, { @@ -10421,7 +10481,7 @@ } ], [ - 513, + 517, 568, 0, { @@ -10441,7 +10501,7 @@ } ], [ - 514, + 518, 569, 0, { @@ -10461,7 +10521,7 @@ } ], [ - 515, + 519, 570, 0, { @@ -10481,7 +10541,7 @@ } ], [ - 516, + 520, 571, 0, { @@ -10501,7 +10561,7 @@ } ], [ - 517, + 521, 572, 0, { @@ -10521,7 +10581,7 @@ } ], [ - 518, + 522, 573, 0, { @@ -10541,7 +10601,7 @@ } ], [ - 519, + 523, 574, 0, { @@ -10561,7 +10621,7 @@ } ], [ - 520, + 524, 577, 0, { @@ -10584,10 +10644,6 @@ " gpt-4.1", "OpencodeHint" ], - [ - " (2025-11-03 13:35:15)", - "OpencodeHint" - ], [ " [msg_a49edd87f001eOJDDoq5Vb5hra]", "OpencodeHint" @@ -10598,6 +10654,25 @@ "virt_text_repeat_linebreak": false, "virt_text_win_col": -3 } + ], + [ + 525, + 577, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-11-03 13:35:15", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } ] ], "lines": [ @@ -10679,7 +10754,7 @@ "", "I'll fix this now.", "", - "** edit** `/home/francis/Projects/_nvim/opencode.nvim/lua/opencode/core.lua`", + "** edit** `/home/francis/Projects/_nvim/opencode.nvim/lua/opencode/core.lua` 1s", "", "`````lua", " local params = {}", @@ -10706,7 +10781,7 @@ "", "I'll run the test suite using the provided script to verify everything is working.", "", - "** run** `Run all tests to verify code changes`", + "** run** `Run all tests to verify code changes` 3s", "", "`````bash", "> ./run_tests.sh", @@ -11190,5 +11265,5 @@ "", "" ], - "timestamp": 1770751424 + "timestamp": 1770933868 } \ No newline at end of file diff --git a/tests/data/diff.expected.json b/tests/data/diff.expected.json index 51526f2e..dd0bddc8 100644 --- a/tests/data/diff.expected.json +++ b/tests/data/diff.expected.json @@ -65,10 +65,6 @@ "", "OpencodeHint" ], - [ - " (2025-10-12 06:42:56)", - "OpencodeHint" - ], [ " [msg_9d7287269001C5gRusYfX7A1w1]", "OpencodeHint" @@ -82,6 +78,25 @@ ], [ 2, + 1, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-12 06:42:56", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 3, 2, 0, { @@ -101,7 +116,7 @@ } ], [ - 3, + 4, 3, 0, { @@ -121,7 +136,7 @@ } ], [ - 4, + 5, 3, 39, { @@ -136,7 +151,7 @@ } ], [ - 5, + 6, 4, 0, { @@ -156,7 +171,7 @@ } ], [ - 6, + 7, 5, 0, { @@ -176,7 +191,7 @@ } ], [ - 7, + 8, 8, 0, { @@ -199,10 +214,6 @@ " claude-sonnet-4.5", "OpencodeHint" ], - [ - " (2025-10-12 06:42:56)", - "OpencodeHint" - ], [ " [msg_9d7287287001HVwpPaH7WkRVdN]", "OpencodeHint" @@ -215,7 +226,26 @@ } ], [ + 9, 8, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-12 06:42:56", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 10, 10, 0, { @@ -235,7 +265,7 @@ } ], [ - 9, + 11, 11, 0, { @@ -255,7 +285,7 @@ } ], [ - 10, + 12, 12, 0, { @@ -275,7 +305,7 @@ } ], [ - 11, + 13, 13, 0, { @@ -299,7 +329,7 @@ } ], [ - 12, + 14, 13, 0, { @@ -319,7 +349,7 @@ } ], [ - 13, + 15, 14, 0, { @@ -343,7 +373,7 @@ } ], [ - 14, + 16, 14, 0, { @@ -363,7 +393,7 @@ } ], [ - 15, + 17, 15, 0, { @@ -383,7 +413,7 @@ } ], [ - 16, + 18, 16, 0, { @@ -403,7 +433,7 @@ } ], [ - 17, + 19, 21, 0, { @@ -426,10 +456,6 @@ " claude-sonnet-4.5", "OpencodeHint" ], - [ - " (2025-10-12 06:43:03)", - "OpencodeHint" - ], [ " [msg_9d7288f2f001hW6NqqhtBc72UU]", "OpencodeHint" @@ -440,6 +466,25 @@ "virt_text_repeat_linebreak": false, "virt_text_win_col": -3 } + ], + [ + 20, + 21, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-12 06:43:03", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } ] ], "lines": [ @@ -453,7 +498,7 @@ "----", "", "", - "** edit** `/Users/cam/tmp/a/diff-test.txt`", + "** edit** `/Users/cam/tmp/a/diff-test.txt` 5s", "", "`````txt", " this is a string", @@ -468,5 +513,5 @@ "", "" ], - "timestamp": 1770751424 + "timestamp": 1770933868 } \ No newline at end of file diff --git a/tests/data/markdown-codefence.expected.json b/tests/data/markdown-codefence.expected.json index 437c70d7..aac2ffd1 100644 --- a/tests/data/markdown-codefence.expected.json +++ b/tests/data/markdown-codefence.expected.json @@ -65,10 +65,6 @@ " claude-sonnet-4.5", "OpencodeHint" ], - [ - " (2025-10-28 21:53:58)", - "OpencodeHint" - ], [ " [msg_a2cd04588001P9plKmrFnsNH3M]", "OpencodeHint" @@ -82,6 +78,25 @@ ], [ 2, + 1, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-28 21:53:58", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 3, 5, 0, { @@ -101,7 +116,7 @@ } ], [ - 3, + 4, 6, 0, { @@ -121,7 +136,7 @@ } ], [ - 4, + 5, 7, 0, { @@ -141,7 +156,7 @@ } ], [ - 5, + 6, 8, 0, { @@ -161,7 +176,7 @@ } ], [ - 6, + 7, 9, 0, { @@ -181,7 +196,7 @@ } ], [ - 7, + 8, 10, 0, { @@ -201,7 +216,7 @@ } ], [ - 8, + 9, 11, 0, { @@ -221,7 +236,7 @@ } ], [ - 9, + 10, 12, 0, { @@ -245,7 +260,7 @@ } ], [ - 10, + 11, 12, 0, { @@ -265,7 +280,7 @@ } ], [ - 11, + 12, 13, 0, { @@ -289,7 +304,7 @@ } ], [ - 12, + 13, 13, 0, { @@ -309,7 +324,7 @@ } ], [ - 13, + 14, 14, 0, { @@ -333,7 +348,7 @@ } ], [ - 14, + 15, 14, 0, { @@ -353,7 +368,7 @@ } ], [ - 15, + 16, 15, 0, { @@ -377,7 +392,7 @@ } ], [ - 16, + 17, 15, 0, { @@ -397,7 +412,7 @@ } ], [ - 17, + 18, 16, 0, { @@ -417,7 +432,7 @@ } ], [ - 18, + 19, 17, 0, { @@ -437,7 +452,7 @@ } ], [ - 19, + 20, 18, 0, { @@ -457,7 +472,7 @@ } ], [ - 20, + 21, 19, 0, { @@ -477,7 +492,7 @@ } ], [ - 21, + 22, 20, 0, { @@ -497,7 +512,7 @@ } ], [ - 22, + 23, 21, 0, { @@ -517,7 +532,7 @@ } ], [ - 23, + 24, 26, 0, { @@ -540,10 +555,6 @@ " claude-sonnet-4.5", "OpencodeHint" ], - [ - " (2025-10-28 21:54:05)", - "OpencodeHint" - ], [ " [msg_a2cd062fb001UA0ZzR6JxgLxDQ]", "OpencodeHint" @@ -556,7 +567,26 @@ } ], [ - 24, + 25, + 26, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-28 21:54:05", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 26, 31, 0, { @@ -579,10 +609,6 @@ "", "OpencodeHint" ], - [ - " (2025-10-28 22:34:58)", - "OpencodeHint" - ], [ " [msg_a2cf5ce65001YLvVsYxIboFcP4]", "OpencodeHint" @@ -595,7 +621,26 @@ } ], [ - 25, + 27, + 31, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-28 22:34:58", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 28, 32, 0, { @@ -615,7 +660,7 @@ } ], [ - 26, + 29, 33, 0, { @@ -635,7 +680,7 @@ } ], [ - 27, + 30, 34, 0, { @@ -655,7 +700,7 @@ } ], [ - 28, + 31, 35, 0, { @@ -675,7 +720,7 @@ } ], [ - 29, + 32, 38, 0, { @@ -698,10 +743,6 @@ " gpt-4.1", "OpencodeHint" ], - [ - " (2025-10-28 22:34:58)", - "OpencodeHint" - ], [ " [msg_a2cf5cf0f002oBAjmnGIMGXjez]", "OpencodeHint" @@ -712,6 +753,25 @@ "virt_text_repeat_linebreak": false, "virt_text_win_col": -3 } + ], + [ + 33, + 38, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-28 22:34:58", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } ] ], "lines": [ @@ -794,5 +854,5 @@ "", "" ], - "timestamp": 1770751424 + "timestamp": 1770933868 } \ No newline at end of file diff --git a/tests/data/mentions-with-ranges.expected.json b/tests/data/mentions-with-ranges.expected.json index 35b8e7f6..980321f9 100644 --- a/tests/data/mentions-with-ranges.expected.json +++ b/tests/data/mentions-with-ranges.expected.json @@ -25,10 +25,6 @@ "", "OpencodeHint" ], - [ - " (2025-10-12 23:38:21)", - "OpencodeHint" - ], [ " [msg_9daca16bf0017x95VD45mw3k8Q]", "OpencodeHint" @@ -42,6 +38,25 @@ ], [ 2, + 1, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-12 23:38:21", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 3, 2, 0, { @@ -61,7 +76,7 @@ } ], [ - 3, + 4, 3, 0, { @@ -81,7 +96,7 @@ } ], [ - 4, + 5, 3, 5, { @@ -96,7 +111,7 @@ } ], [ - 5, + 6, 4, 0, { @@ -116,7 +131,7 @@ } ], [ - 6, + 7, 5, 0, { @@ -136,7 +151,7 @@ } ], [ - 7, + 8, 5, 23, { @@ -151,7 +166,7 @@ } ], [ - 8, + 9, 6, 0, { @@ -171,7 +186,7 @@ } ], [ - 9, + 10, 7, 0, { @@ -191,7 +206,7 @@ } ], [ - 10, + 11, 8, 0, { @@ -211,7 +226,7 @@ } ], [ - 11, + 12, 9, 0, { @@ -231,7 +246,7 @@ } ], [ - 12, + 13, 10, 0, { @@ -251,7 +266,7 @@ } ], [ - 13, + 14, 11, 0, { @@ -271,7 +286,7 @@ } ], [ - 14, + 15, 12, 0, { @@ -291,7 +306,7 @@ } ], [ - 15, + 16, 13, 0, { @@ -311,7 +326,7 @@ } ], [ - 16, + 17, 14, 0, { @@ -331,7 +346,7 @@ } ], [ - 17, + 18, 15, 0, { @@ -351,7 +366,7 @@ } ], [ - 18, + 19, 16, 0, { @@ -371,7 +386,7 @@ } ], [ - 19, + 20, 17, 0, { @@ -391,7 +406,7 @@ } ], [ - 20, + 21, 18, 0, { @@ -411,7 +426,7 @@ } ], [ - 21, + 22, 19, 0, { @@ -431,7 +446,7 @@ } ], [ - 22, + 23, 20, 0, { @@ -451,7 +466,7 @@ } ], [ - 23, + 24, 21, 0, { @@ -497,5 +512,5 @@ "", "" ], - "timestamp": 1770751424 + "timestamp": 1770933868 } \ No newline at end of file diff --git a/tests/data/message-removal.expected.json b/tests/data/message-removal.expected.json index efd44c78..47a69bc8 100644 --- a/tests/data/message-removal.expected.json +++ b/tests/data/message-removal.expected.json @@ -25,10 +25,6 @@ "", "OpencodeHint" ], - [ - " (2025-10-09 08:53:21)", - "OpencodeHint" - ], [ " [msg_001]", "OpencodeHint" @@ -42,6 +38,25 @@ ], [ 2, + 1, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-09 08:53:21", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 3, 2, 0, { @@ -61,7 +76,7 @@ } ], [ - 3, + 4, 3, 0, { @@ -81,7 +96,7 @@ } ], [ - 4, + 5, 4, 0, { @@ -101,7 +116,7 @@ } ], [ - 5, + 6, 5, 0, { @@ -121,7 +136,7 @@ } ], [ - 6, + 7, 6, 0, { @@ -141,7 +156,7 @@ } ], [ - 7, + 8, 7, 0, { @@ -161,7 +176,7 @@ } ], [ - 8, + 9, 8, 0, { @@ -181,7 +196,7 @@ } ], [ - 9, + 10, 9, 0, { @@ -201,7 +216,7 @@ } ], [ - 10, + 11, 12, 0, { @@ -224,10 +239,6 @@ "", "OpencodeHint" ], - [ - " (2025-10-09 08:53:22)", - "OpencodeHint" - ], [ " [msg_002]", "OpencodeHint" @@ -240,7 +251,26 @@ } ], [ - 11, + 12, + 12, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-09 08:53:22", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 13, 21, 0, { @@ -263,10 +293,6 @@ "", "OpencodeHint" ], - [ - " (2025-10-09 08:53:24)", - "OpencodeHint" - ], [ " [msg_004]", "OpencodeHint" @@ -277,6 +303,25 @@ "virt_text_repeat_linebreak": false, "virt_text_win_col": -3 } + ], + [ + 14, + 21, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-09 08:53:24", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } ] ], "lines": [ @@ -309,5 +354,5 @@ "", "" ], - "timestamp": 1770751425 + "timestamp": 1770933869 } \ No newline at end of file diff --git a/tests/data/multiple-messages-synthetic.expected.json b/tests/data/multiple-messages-synthetic.expected.json index 65215d0c..fdf79f29 100644 --- a/tests/data/multiple-messages-synthetic.expected.json +++ b/tests/data/multiple-messages-synthetic.expected.json @@ -25,10 +25,6 @@ "", "OpencodeHint" ], - [ - " (2001-09-09 01:46:41)", - "OpencodeHint" - ], [ " [msg_001]", "OpencodeHint" @@ -42,6 +38,25 @@ ], [ 2, + 1, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2001-09-09 01:46:41", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 3, 2, 0, { @@ -61,7 +76,7 @@ } ], [ - 3, + 4, 3, 0, { @@ -81,7 +96,7 @@ } ], [ - 4, + 5, 6, 0, { @@ -104,10 +119,6 @@ "", "OpencodeHint" ], - [ - " (2001-09-09 01:46:42)", - "OpencodeHint" - ], [ " [msg_002]", "OpencodeHint" @@ -120,7 +131,26 @@ } ], [ - 5, + 6, + 6, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2001-09-09 01:46:42", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 7, 17, 0, { @@ -143,10 +173,6 @@ "", "OpencodeHint" ], - [ - " (2001-09-09 01:46:43)", - "OpencodeHint" - ], [ " [msg_003]", "OpencodeHint" @@ -159,7 +185,26 @@ } ], [ - 6, + 8, + 17, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2001-09-09 01:46:43", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 9, 18, 0, { @@ -179,7 +224,7 @@ } ], [ - 7, + 10, 19, 0, { @@ -199,7 +244,7 @@ } ], [ - 8, + 11, 22, 0, { @@ -222,10 +267,6 @@ "", "OpencodeHint" ], - [ - " (2001-09-09 01:46:44)", - "OpencodeHint" - ], [ " [msg_004]", "OpencodeHint" @@ -238,7 +279,26 @@ } ], [ - 9, + 12, + 22, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2001-09-09 01:46:44", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 13, 33, 0, { @@ -261,10 +321,6 @@ "", "OpencodeHint" ], - [ - " (2001-09-09 01:46:45)", - "OpencodeHint" - ], [ " [msg_005]", "OpencodeHint" @@ -277,7 +333,26 @@ } ], [ - 10, + 14, + 33, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2001-09-09 01:46:45", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 15, 34, 0, { @@ -297,7 +372,7 @@ } ], [ - 11, + 16, 35, 0, { @@ -317,7 +392,7 @@ } ], [ - 12, + 17, 38, 0, { @@ -340,10 +415,6 @@ "", "OpencodeHint" ], - [ - " (2001-09-09 01:46:46)", - "OpencodeHint" - ], [ " [msg_006]", "OpencodeHint" @@ -354,6 +425,25 @@ "virt_text_repeat_linebreak": false, "virt_text_win_col": -3 } + ], + [ + 18, + 38, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2001-09-09 01:46:46", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } ] ], "lines": [ @@ -405,5 +495,5 @@ "", "" ], - "timestamp": 1770751425 + "timestamp": 1770933869 } \ No newline at end of file diff --git a/tests/data/multiple-messages.expected.json b/tests/data/multiple-messages.expected.json index 633b8213..d6a12cd3 100644 --- a/tests/data/multiple-messages.expected.json +++ b/tests/data/multiple-messages.expected.json @@ -25,10 +25,6 @@ "", "OpencodeHint" ], - [ - " (2025-11-01 03:32:54)", - "OpencodeHint" - ], [ " [msg_a3d79a71f001dkQYw23QnYYElB]", "OpencodeHint" @@ -42,6 +38,25 @@ ], [ 2, + 1, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-11-01 03:32:54", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 3, 2, 0, { @@ -61,7 +76,7 @@ } ], [ - 3, + 4, 3, 0, { @@ -81,7 +96,7 @@ } ], [ - 4, + 5, 4, 0, { @@ -101,7 +116,7 @@ } ], [ - 5, + 6, 5, 0, { @@ -121,7 +136,7 @@ } ], [ - 6, + 7, 8, 0, { @@ -144,10 +159,6 @@ " gpt-4.1", "OpencodeHint" ], - [ - " (2025-11-01 03:32:54)", - "OpencodeHint" - ], [ " [msg_a3d79a771002NY7n6a0vJlriLH]", "OpencodeHint" @@ -160,7 +171,26 @@ } ], [ - 7, + 8, + 8, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-11-01 03:32:54", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 9, 26, 0, { @@ -183,10 +213,6 @@ "", "OpencodeHint" ], - [ - " (2025-11-01 03:32:55)", - "OpencodeHint" - ], [ " [msg_a3d79aa5b0014RYY4My2AeTokd]", "OpencodeHint" @@ -199,7 +225,26 @@ } ], [ - 8, + 10, + 26, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-11-01 03:32:55", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 11, 27, 0, { @@ -219,7 +264,7 @@ } ], [ - 9, + 12, 28, 0, { @@ -239,7 +284,7 @@ } ], [ - 10, + 13, 29, 0, { @@ -259,7 +304,7 @@ } ], [ - 11, + 14, 30, 0, { @@ -279,7 +324,7 @@ } ], [ - 12, + 15, 33, 0, { @@ -302,10 +347,6 @@ " gpt-4.1", "OpencodeHint" ], - [ - " (2025-11-01 03:32:56)", - "OpencodeHint" - ], [ " [msg_a3d79ae610029QFKwb1uvSa4Lf]", "OpencodeHint" @@ -316,6 +357,25 @@ "virt_text_repeat_linebreak": false, "virt_text_win_col": -3 } + ], + [ + 16, + 33, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-11-01 03:32:56", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } ] ], "lines": [ @@ -416,5 +476,5 @@ "", "" ], - "timestamp": 1770751425 + "timestamp": 1770933869 } \ No newline at end of file diff --git a/tests/data/multiple-question-ask-reply-all.expected.json b/tests/data/multiple-question-ask-reply-all.expected.json index d3b8afa5..c27c11fa 100644 --- a/tests/data/multiple-question-ask-reply-all.expected.json +++ b/tests/data/multiple-question-ask-reply-all.expected.json @@ -65,10 +65,6 @@ "", "OpencodeHint" ], - [ - " (2026-01-26 14:30:46)", - "OpencodeHint" - ], [ " [msg_bfab6dbf3001ZOVHTFKR1CMUE5]", "OpencodeHint" @@ -82,6 +78,25 @@ ], [ 2, + 1, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2026-01-26 14:30:46", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 3, 2, 0, { @@ -101,7 +116,7 @@ } ], [ - 3, + 4, 3, 0, { @@ -121,7 +136,7 @@ } ], [ - 4, + 5, 4, 0, { @@ -141,7 +156,7 @@ } ], [ - 5, + 6, 5, 0, { @@ -161,7 +176,7 @@ } ], [ - 6, + 7, 6, 0, { @@ -181,7 +196,7 @@ } ], [ - 7, + 8, 8, 0, { @@ -204,10 +219,6 @@ " gpt-4.1", "OpencodeHint" ], - [ - " (2026-01-26 14:30:46)", - "OpencodeHint" - ], [ " [msg_bfab6dc80001FueCN7E2691J2R]", "OpencodeHint" @@ -220,7 +231,26 @@ } ], [ + 9, 8, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2026-01-26 14:30:46", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 10, 10, 0, { @@ -240,7 +270,7 @@ } ], [ - 9, + 11, 11, 0, { @@ -260,7 +290,7 @@ } ], [ - 10, + 12, 12, 0, { @@ -280,7 +310,7 @@ } ], [ - 11, + 13, 13, 0, { @@ -300,7 +330,7 @@ } ], [ - 12, + 14, 14, 0, { @@ -320,7 +350,7 @@ } ], [ - 13, + 15, 15, 0, { @@ -340,7 +370,7 @@ } ], [ - 14, + 16, 16, 0, { @@ -360,7 +390,7 @@ } ], [ - 15, + 17, 17, 0, { @@ -380,7 +410,7 @@ } ], [ - 16, + 18, 18, 0, { @@ -400,7 +430,7 @@ } ], [ - 17, + 19, 19, 0, { @@ -420,7 +450,7 @@ } ], [ - 18, + 20, 20, 0, { @@ -440,7 +470,7 @@ } ], [ - 19, + 21, 21, 0, { @@ -460,7 +490,7 @@ } ], [ - 20, + 22, 26, 0, { @@ -483,10 +513,6 @@ " gpt-4.1", "OpencodeHint" ], - [ - " (2026-01-26 14:31:55)", - "OpencodeHint" - ], [ " [msg_bfab7e7fd0018kA9yLHMkJM3fA]", "OpencodeHint" @@ -497,6 +523,25 @@ "virt_text_repeat_linebreak": false, "virt_text_win_col": -3 } + ], + [ + 23, + 26, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2026-01-26 14:31:55", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } ] ], "lines": [ @@ -537,5 +582,5 @@ "", "" ], - "timestamp": 1770751425 + "timestamp": 1770933869 } \ No newline at end of file diff --git a/tests/data/multiple-question-ask.expected.json b/tests/data/multiple-question-ask.expected.json index 254ddcd1..ea88ec8b 100644 --- a/tests/data/multiple-question-ask.expected.json +++ b/tests/data/multiple-question-ask.expected.json @@ -25,10 +25,6 @@ "", "OpencodeHint" ], - [ - " (2026-01-26 14:30:46)", - "OpencodeHint" - ], [ " [msg_bfab6dbf3001ZOVHTFKR1CMUE5]", "OpencodeHint" @@ -42,6 +38,25 @@ ], [ 2, + 1, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2026-01-26 14:30:46", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 3, 2, 0, { @@ -61,7 +76,7 @@ } ], [ - 3, + 4, 3, 0, { @@ -81,7 +96,7 @@ } ], [ - 4, + 5, 4, 0, { @@ -101,7 +116,7 @@ } ], [ - 5, + 6, 5, 0, { @@ -121,7 +136,7 @@ } ], [ - 6, + 7, 6, 0, { @@ -141,7 +156,7 @@ } ], [ - 7, + 8, 8, 0, { @@ -164,10 +179,6 @@ " gpt-4.1", "OpencodeHint" ], - [ - " (2026-01-26 14:30:46)", - "OpencodeHint" - ], [ " [msg_bfab6dc80001FueCN7E2691J2R]", "OpencodeHint" @@ -180,7 +191,26 @@ } ], [ + 9, 8, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2026-01-26 14:30:46", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 10, 13, 0, { @@ -203,10 +233,6 @@ "", "OpencodeHint" ], - [ - "", - "OpencodeHint" - ], [ " [question-display-message]", "OpencodeHint" @@ -219,7 +245,7 @@ } ], [ - 9, + 11, 15, 0, { @@ -230,7 +256,7 @@ } ], [ - 10, + 12, 15, 0, { @@ -250,7 +276,7 @@ } ], [ - 11, + 13, 16, 0, { @@ -270,7 +296,7 @@ } ], [ - 12, + 14, 17, 0, { @@ -290,7 +316,7 @@ } ], [ - 13, + 15, 18, 0, { @@ -310,7 +336,7 @@ } ], [ - 14, + 16, 19, 0, { @@ -321,7 +347,7 @@ } ], [ - 15, + 17, 19, 0, { @@ -341,7 +367,7 @@ } ], [ - 16, + 18, 19, 2, { @@ -360,7 +386,7 @@ } ], [ - 17, + 19, 20, 0, { @@ -380,7 +406,7 @@ } ], [ - 18, + 20, 21, 0, { @@ -400,7 +426,7 @@ } ], [ - 19, + 21, 22, 0, { @@ -420,7 +446,7 @@ } ], [ - 20, + 22, 23, 0, { @@ -468,5 +494,5 @@ "", "" ], - "timestamp": 1770751426 + "timestamp": 1770933870 } \ No newline at end of file diff --git a/tests/data/perf.expected.json b/tests/data/perf.expected.json index a0a08b26..68b2e9ac 100644 --- a/tests/data/perf.expected.json +++ b/tests/data/perf.expected.json @@ -25,10 +25,6 @@ "", "OpencodeHint" ], - [ - " (2025-10-24 19:32:00)", - "OpencodeHint" - ], [ " [msg_a17b4dc4c001x19oFZANB8CsEB]", "OpencodeHint" @@ -42,6 +38,25 @@ ], [ 2, + 1, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-24 19:32:00", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 3, 2, 0, { @@ -61,7 +76,7 @@ } ], [ - 3, + 4, 3, 0, { @@ -81,7 +96,7 @@ } ], [ - 4, + 5, 4, 0, { @@ -101,7 +116,7 @@ } ], [ - 5, + 6, 5, 0, { @@ -121,7 +136,7 @@ } ], [ - 6, + 7, 8, 0, { @@ -144,10 +159,6 @@ " gpt-5-mini", "OpencodeHint" ], - [ - " (2025-10-24 19:32:01)", - "OpencodeHint" - ], [ " [msg_a17b4e166001vCnLczdZXvqLL6]", "OpencodeHint" @@ -158,6 +169,25 @@ "virt_text_repeat_linebreak": false, "virt_text_win_col": -3 } + ], + [ + 8, + 8, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-24 19:32:01", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } ] ], "lines": [ @@ -479,5 +509,5 @@ "", "" ], - "timestamp": 1770751426 + "timestamp": 1770933870 } \ No newline at end of file diff --git a/tests/data/permission-ask-new-approve.expected.json b/tests/data/permission-ask-new-approve.expected.json index e98b61cc..b50b9141 100644 --- a/tests/data/permission-ask-new-approve.expected.json +++ b/tests/data/permission-ask-new-approve.expected.json @@ -65,10 +65,6 @@ "", "OpencodeHint" ], - [ - " (2026-01-05 14:07:54)", - "OpencodeHint" - ], [ " [msg_b8e7c60a2001Kisjwk2mVB4dye]", "OpencodeHint" @@ -82,6 +78,25 @@ ], [ 2, + 1, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2026-01-05 14:07:54", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 3, 2, 0, { @@ -101,7 +116,7 @@ } ], [ - 3, + 4, 3, 0, { @@ -121,7 +136,7 @@ } ], [ - 4, + 5, 4, 0, { @@ -141,7 +156,7 @@ } ], [ - 5, + 6, 5, 0, { @@ -161,7 +176,7 @@ } ], [ - 6, + 7, 6, 0, { @@ -181,7 +196,7 @@ } ], [ - 7, + 8, 7, 0, { @@ -201,7 +216,7 @@ } ], [ - 8, + 9, 8, 0, { @@ -221,7 +236,7 @@ } ], [ - 9, + 10, 10, 0, { @@ -244,10 +259,6 @@ " gpt-4.1", "OpencodeHint" ], - [ - " (2026-01-05 14:07:54)", - "OpencodeHint" - ], [ " [msg_b8e7c60f1001aEWYlAaDRXQ4aJ]", "OpencodeHint" @@ -260,7 +271,26 @@ } ], [ + 11, 10, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2026-01-05 14:07:54", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 12, 12, 0, { @@ -280,7 +310,7 @@ } ], [ - 11, + 13, 13, 0, { @@ -300,7 +330,7 @@ } ], [ - 12, + 14, 14, 0, { @@ -320,7 +350,7 @@ } ], [ - 13, + 15, 15, 0, { @@ -340,7 +370,7 @@ } ], [ - 14, + 16, 16, 0, { @@ -360,7 +390,7 @@ } ], [ - 15, + 17, 17, 0, { @@ -380,7 +410,7 @@ } ], [ - 16, + 18, 18, 0, { @@ -400,7 +430,7 @@ } ], [ - 17, + 19, 19, 0, { @@ -420,7 +450,7 @@ } ], [ - 18, + 20, 20, 0, { @@ -440,7 +470,7 @@ } ], [ - 19, + 21, 21, 0, { @@ -460,7 +490,7 @@ } ], [ - 20, + 22, 22, 0, { @@ -480,7 +510,7 @@ } ], [ - 21, + 23, 23, 0, { @@ -500,7 +530,7 @@ } ], [ - 22, + 24, 24, 0, { @@ -520,7 +550,7 @@ } ], [ - 23, + 25, 25, 0, { @@ -540,7 +570,7 @@ } ], [ - 24, + 26, 26, 0, { @@ -560,7 +590,7 @@ } ], [ - 25, + 27, 27, 0, { @@ -580,7 +610,7 @@ } ], [ - 26, + 28, 28, 0, { @@ -600,7 +630,7 @@ } ], [ - 27, + 29, 29, 0, { @@ -620,7 +650,7 @@ } ], [ - 28, + 30, 30, 0, { @@ -640,7 +670,7 @@ } ], [ - 29, + 31, 31, 0, { @@ -660,7 +690,7 @@ } ], [ - 30, + 32, 32, 0, { @@ -680,7 +710,7 @@ } ], [ - 31, + 33, 33, 0, { @@ -700,7 +730,7 @@ } ], [ - 32, + 34, 34, 0, { @@ -720,7 +750,7 @@ } ], [ - 33, + 35, 39, 0, { @@ -743,10 +773,6 @@ " gpt-4.1", "OpencodeHint" ], - [ - " (2026-01-05 14:08:26)", - "OpencodeHint" - ], [ " [msg_b8e7cde9e0013hRkUyt0X2yMil]", "OpencodeHint" @@ -757,6 +783,25 @@ "virt_text_repeat_linebreak": false, "virt_text_win_col": -3 } + ], + [ + 36, + 39, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2026-01-05 14:08:26", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } ] ], "lines": [ @@ -772,7 +817,7 @@ "----", "", "", - "** run** `Shows working tree status`", + "** run** `Shows working tree status` 30s", "", "`````bash", "> git status", @@ -816,5 +861,5 @@ "", "" ], - "timestamp": 1770751427 + "timestamp": 1770933871 } \ No newline at end of file diff --git a/tests/data/permission-ask-new-deny.expected.json b/tests/data/permission-ask-new-deny.expected.json index 37e5adb9..d53a928f 100644 --- a/tests/data/permission-ask-new-deny.expected.json +++ b/tests/data/permission-ask-new-deny.expected.json @@ -25,10 +25,6 @@ "", "OpencodeHint" ], - [ - " (2026-01-05 14:09:08)", - "OpencodeHint" - ], [ " [msg_b8e7d8222001ZAc4G1t5RfHzou]", "OpencodeHint" @@ -42,6 +38,25 @@ ], [ 2, + 1, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2026-01-05 14:09:08", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 3, 2, 0, { @@ -61,7 +76,7 @@ } ], [ - 3, + 4, 3, 0, { @@ -81,7 +96,7 @@ } ], [ - 4, + 5, 4, 0, { @@ -101,7 +116,7 @@ } ], [ - 5, + 6, 5, 0, { @@ -121,7 +136,7 @@ } ], [ - 6, + 7, 8, 0, { @@ -144,10 +159,6 @@ " gpt-4.1", "OpencodeHint" ], - [ - " (2026-01-05 14:09:08)", - "OpencodeHint" - ], [ " [msg_b8e7d823f001HX1Rr9DYE7TYBf]", "OpencodeHint" @@ -160,7 +171,26 @@ } ], [ - 7, + 8, + 8, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2026-01-05 14:09:08", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 9, 10, 0, { @@ -180,7 +210,7 @@ } ], [ - 8, + 10, 11, 0, { @@ -200,7 +230,7 @@ } ], [ - 9, + 11, 12, 0, { @@ -220,7 +250,7 @@ } ], [ - 10, + 12, 13, 0, { @@ -240,7 +270,7 @@ } ], [ - 11, + 13, 14, 0, { @@ -260,7 +290,7 @@ } ], [ - 12, + 14, 15, 0, { @@ -280,7 +310,7 @@ } ], [ - 13, + 15, 16, 0, { @@ -300,7 +330,7 @@ } ], [ - 14, + 16, 17, 0, { @@ -331,7 +361,7 @@ "----", "", "", - "** run** `Shows working tree status`", + "** run** `Shows working tree status` 6s", "", "`````bash", "> git status", @@ -342,5 +372,5 @@ "", "" ], - "timestamp": 1770751427 + "timestamp": 1770933871 } \ No newline at end of file diff --git a/tests/data/permission-ask-new.expected.json b/tests/data/permission-ask-new.expected.json index 6ecad2aa..3359c0ac 100644 --- a/tests/data/permission-ask-new.expected.json +++ b/tests/data/permission-ask-new.expected.json @@ -25,10 +25,6 @@ "", "OpencodeHint" ], - [ - " (2026-01-05 14:07:54)", - "OpencodeHint" - ], [ " [msg_b8e7c60a2001Kisjwk2mVB4dye]", "OpencodeHint" @@ -42,6 +38,25 @@ ], [ 2, + 1, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2026-01-05 14:07:54", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 3, 2, 0, { @@ -61,7 +76,7 @@ } ], [ - 3, + 4, 3, 0, { @@ -81,7 +96,7 @@ } ], [ - 4, + 5, 4, 0, { @@ -101,7 +116,7 @@ } ], [ - 5, + 6, 5, 0, { @@ -121,7 +136,7 @@ } ], [ - 6, + 7, 6, 0, { @@ -141,7 +156,7 @@ } ], [ - 7, + 8, 7, 0, { @@ -161,7 +176,7 @@ } ], [ - 8, + 9, 8, 0, { @@ -181,7 +196,7 @@ } ], [ - 9, + 10, 10, 0, { @@ -204,10 +219,6 @@ " gpt-4.1", "OpencodeHint" ], - [ - " (2026-01-05 14:07:54)", - "OpencodeHint" - ], [ " [msg_b8e7c60f1001aEWYlAaDRXQ4aJ]", "OpencodeHint" @@ -220,7 +231,26 @@ } ], [ + 11, 10, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2026-01-05 14:07:54", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 12, 12, 0, { @@ -240,7 +270,7 @@ } ], [ - 11, + 13, 13, 0, { @@ -260,7 +290,7 @@ } ], [ - 12, + 14, 14, 0, { @@ -280,7 +310,7 @@ } ], [ - 13, + 15, 15, 0, { @@ -300,7 +330,7 @@ } ], [ - 14, + 16, 16, 0, { @@ -320,7 +350,7 @@ } ], [ - 15, + 17, 17, 0, { @@ -340,7 +370,7 @@ } ], [ - 16, + 18, 20, 0, { @@ -363,10 +393,6 @@ "", "OpencodeHint" ], - [ - "", - "OpencodeHint" - ], [ " [permission-display-message]", "OpencodeHint" @@ -379,7 +405,7 @@ } ], [ - 17, + 19, 22, 0, { @@ -390,7 +416,7 @@ } ], [ - 18, + 20, 22, 0, { @@ -410,7 +436,7 @@ } ], [ - 19, + 21, 23, 0, { @@ -430,7 +456,7 @@ } ], [ - 20, + 22, 24, 0, { @@ -450,7 +476,7 @@ } ], [ - 21, + 23, 25, 0, { @@ -470,7 +496,7 @@ } ], [ - 22, + 24, 26, 0, { @@ -490,7 +516,7 @@ } ], [ - 23, + 25, 27, 0, { @@ -510,7 +536,7 @@ } ], [ - 24, + 26, 28, 0, { @@ -530,7 +556,7 @@ } ], [ - 25, + 27, 29, 0, { @@ -550,7 +576,7 @@ } ], [ - 26, + 28, 30, 0, { @@ -561,7 +587,7 @@ } ], [ - 27, + 29, 30, 0, { @@ -581,7 +607,7 @@ } ], [ - 28, + 30, 30, 2, { @@ -600,7 +626,7 @@ } ], [ - 29, + 31, 31, 0, { @@ -620,7 +646,7 @@ } ], [ - 30, + 32, 32, 0, { @@ -640,7 +666,7 @@ } ], [ - 31, + 33, 33, 0, { @@ -660,7 +686,7 @@ } ], [ - 32, + 34, 34, 0, { @@ -693,7 +719,7 @@ "----", "", "", - "** run** `Shows working tree status`", + "** run** `Shows working tree status` 3311795s", "", "`````bash", "> git status", @@ -719,5 +745,5 @@ "", "" ], - "timestamp": 1770751427 + "timestamp": 1770933871 } \ No newline at end of file diff --git a/tests/data/permission-prompt.expected.json b/tests/data/permission-prompt.expected.json index d0715f7c..55f9182e 100644 --- a/tests/data/permission-prompt.expected.json +++ b/tests/data/permission-prompt.expected.json @@ -25,10 +25,6 @@ " claude-sonnet-4.5", "OpencodeHint" ], - [ - " (2025-10-16 04:27:36)", - "OpencodeHint" - ], [ " [msg_9eb45fbe60020xE560OGH3Vdoo]", "OpencodeHint" @@ -42,6 +38,25 @@ ], [ 2, + 1, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-16 04:27:36", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 3, 5, 0, { @@ -61,7 +76,7 @@ } ], [ - 3, + 4, 6, 0, { @@ -81,7 +96,7 @@ } ], [ - 4, + 5, 7, 0, { @@ -101,7 +116,7 @@ } ], [ - 5, + 6, 8, 0, { @@ -121,7 +136,7 @@ } ], [ - 6, + 7, 9, 0, { @@ -141,7 +156,7 @@ } ], [ - 7, + 8, 10, 0, { @@ -161,7 +176,7 @@ } ], [ - 8, + 9, 13, 0, { @@ -184,10 +199,6 @@ "", "OpencodeHint" ], - [ - "", - "OpencodeHint" - ], [ " [permission-display-message]", "OpencodeHint" @@ -200,7 +211,7 @@ } ], [ - 9, + 10, 15, 0, { @@ -211,7 +222,7 @@ } ], [ - 10, + 11, 15, 0, { @@ -231,7 +242,7 @@ } ], [ - 11, + 12, 16, 0, { @@ -251,7 +262,7 @@ } ], [ - 12, + 13, 17, 0, { @@ -271,7 +282,7 @@ } ], [ - 13, + 14, 18, 0, { @@ -291,7 +302,7 @@ } ], [ - 14, + 15, 19, 0, { @@ -311,7 +322,7 @@ } ], [ - 15, + 16, 20, 0, { @@ -331,7 +342,7 @@ } ], [ - 16, + 17, 21, 0, { @@ -351,7 +362,7 @@ } ], [ - 17, + 18, 22, 0, { @@ -371,7 +382,7 @@ } ], [ - 18, + 19, 23, 0, { @@ -382,7 +393,7 @@ } ], [ - 19, + 20, 23, 0, { @@ -402,7 +413,7 @@ } ], [ - 20, + 21, 23, 2, { @@ -421,7 +432,7 @@ } ], [ - 21, + 22, 24, 0, { @@ -441,7 +452,7 @@ } ], [ - 22, + 23, 25, 0, { @@ -461,7 +472,7 @@ } ], [ - 23, + 24, 26, 0, { @@ -481,7 +492,7 @@ } ], [ - 24, + 25, 27, 0, { @@ -507,7 +518,7 @@ "", "Perfect! Now I understand how it works. The message headers have extmarks with `virt_text` where the first element contains the icon (either `header_user` or `header_assistant`). Let me check the output_window module to understand the extmark namespace:", "", - "** run** `Find extmark namespace usage`", + "** run** `Find extmark namespace usage` 10345010s", "", "`````bash", "> rg \"nvim_buf_get_extmarks|ns_id\" /Users/cam/Dev/neovim-dev/opencode.nvim/lua/opencode/ui/output_window.lua -B 2 -A 2", @@ -533,5 +544,5 @@ "", "" ], - "timestamp": 1770751427 + "timestamp": 1770933871 } \ No newline at end of file diff --git a/tests/data/permission.expected.json b/tests/data/permission.expected.json index aa137235..002171cd 100644 --- a/tests/data/permission.expected.json +++ b/tests/data/permission.expected.json @@ -65,10 +65,6 @@ "", "OpencodeHint" ], - [ - " (2025-10-12 05:43:49)", - "OpencodeHint" - ], [ " [msg_9d6f253910015UFmkGkiWtUsRW]", "OpencodeHint" @@ -82,6 +78,25 @@ ], [ 2, + 1, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-12 05:43:49", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 3, 2, 0, { @@ -101,7 +116,7 @@ } ], [ - 3, + 4, 3, 0, { @@ -121,7 +136,7 @@ } ], [ - 4, + 5, 6, 0, { @@ -144,10 +159,6 @@ " claude-sonnet-4.5", "OpencodeHint" ], - [ - " (2025-10-12 05:43:49)", - "OpencodeHint" - ], [ " [msg_9d6f253df001TjqxW12FAjGf5s]", "OpencodeHint" @@ -160,7 +171,26 @@ } ], [ - 5, + 6, + 6, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-12 05:43:49", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 7, 8, 0, { @@ -180,7 +210,7 @@ } ], [ - 6, + 8, 9, 0, { @@ -200,7 +230,7 @@ } ], [ - 7, + 9, 10, 0, { @@ -220,7 +250,7 @@ } ], [ - 8, + 10, 11, 0, { @@ -240,7 +270,7 @@ } ], [ - 9, + 11, 12, 0, { @@ -260,7 +290,7 @@ } ], [ - 10, + 12, 17, 0, { @@ -283,10 +313,6 @@ " claude-sonnet-4.5", "OpencodeHint" ], - [ - " (2025-10-12 05:44:00)", - "OpencodeHint" - ], [ " [msg_9d6f27f4800103Tp3N6i6JW53p]", "OpencodeHint" @@ -297,6 +323,25 @@ "virt_text_repeat_linebreak": false, "virt_text_win_col": -3 } + ], + [ + 13, + 17, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-12 05:44:00", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } ] ], "lines": [ @@ -308,7 +353,7 @@ "----", "", "", - "** write** `/Users/cam/tmp/a/test.txt`", + "** write** `/Users/cam/tmp/a/test.txt` 8s", "", "`````txt", ":)", @@ -321,5 +366,5 @@ "", "" ], - "timestamp": 1770751428 + "timestamp": 1770933872 } \ No newline at end of file diff --git a/tests/data/planning.expected.json b/tests/data/planning.expected.json index 738e9aaa..7ce44890 100644 --- a/tests/data/planning.expected.json +++ b/tests/data/planning.expected.json @@ -25,10 +25,6 @@ "", "OpencodeHint" ], - [ - " (2025-10-11 17:41:45)", - "OpencodeHint" - ], [ " [msg_9d45d40c9001s7A1sP3Ew537QN]", "OpencodeHint" @@ -42,6 +38,25 @@ ], [ 2, + 1, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-11 17:41:45", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 3, 2, 0, { @@ -61,7 +76,7 @@ } ], [ - 3, + 4, 3, 0, { @@ -81,7 +96,7 @@ } ], [ - 4, + 5, 4, 0, { @@ -101,7 +116,7 @@ } ], [ - 5, + 6, 5, 0, { @@ -121,7 +136,7 @@ } ], [ - 6, + 7, 8, 0, { @@ -144,10 +159,6 @@ " claude-sonnet-4", "OpencodeHint" ], - [ - " (2025-10-11 17:41:45)", - "OpencodeHint" - ], [ " [msg_9d45d411b00254Lm5jVRwAeQxT]", "OpencodeHint" @@ -160,7 +171,26 @@ } ], [ - 7, + 8, + 8, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-11 17:41:45", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 9, 12, 0, { @@ -180,7 +210,7 @@ } ], [ - 8, + 10, 13, 0, { @@ -200,7 +230,7 @@ } ], [ - 9, + 11, 14, 0, { @@ -220,7 +250,7 @@ } ], [ - 10, + 12, 15, 0, { @@ -240,7 +270,7 @@ } ], [ - 11, + 13, 16, 0, { @@ -260,7 +290,7 @@ } ], [ - 12, + 14, 19, 0, { @@ -283,10 +313,6 @@ " claude-sonnet-4", "OpencodeHint" ], - [ - " (2025-10-11 17:41:51)", - "OpencodeHint" - ], [ " [msg_9d45d585800269UgJnOLD8i2pF]", "OpencodeHint" @@ -299,7 +325,26 @@ } ], [ - 13, + 15, + 19, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-11 17:41:51", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 16, 24, 0, { @@ -322,10 +367,6 @@ " claude-sonnet-4", "OpencodeHint" ], - [ - " (2025-10-11 17:41:54)", - "OpencodeHint" - ], [ " [msg_9d45d65b40026mDvwR5cCGTA30]", "OpencodeHint" @@ -338,7 +379,26 @@ } ], [ - 14, + 17, + 24, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-11 17:41:54", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 18, 26, 0, { @@ -358,7 +418,7 @@ } ], [ - 15, + 19, 27, 0, { @@ -378,7 +438,7 @@ } ], [ - 16, + 20, 28, 0, { @@ -398,7 +458,7 @@ } ], [ - 17, + 21, 29, 0, { @@ -418,7 +478,7 @@ } ], [ - 18, + 22, 30, 0, { @@ -438,7 +498,7 @@ } ], [ - 19, + 23, 33, 0, { @@ -461,10 +521,6 @@ " claude-sonnet-4", "OpencodeHint" ], - [ - " (2025-10-11 17:41:58)", - "OpencodeHint" - ], [ " [msg_9d45d7390002yE2ve5szXtMdw0]", "OpencodeHint" @@ -475,6 +531,25 @@ "virt_text_repeat_linebreak": false, "virt_text_win_col": -3 } + ], + [ + 24, + 33, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-11 17:41:58", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } ] ], "lines": [ @@ -523,5 +598,5 @@ "", "" ], - "timestamp": 1770751428 + "timestamp": 1770933872 } \ No newline at end of file diff --git a/tests/data/question-ask-replied.expected.json b/tests/data/question-ask-replied.expected.json index ed6b6ec6..121070a9 100644 --- a/tests/data/question-ask-replied.expected.json +++ b/tests/data/question-ask-replied.expected.json @@ -25,10 +25,6 @@ "", "OpencodeHint" ], - [ - " (2026-01-26 14:23:12)", - "OpencodeHint" - ], [ " [msg_bfaafef41001700DjtCwvhFxse]", "OpencodeHint" @@ -42,6 +38,25 @@ ], [ 2, + 1, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2026-01-26 14:23:12", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 3, 2, 0, { @@ -61,7 +76,7 @@ } ], [ - 3, + 4, 3, 0, { @@ -81,7 +96,7 @@ } ], [ - 4, + 5, 4, 0, { @@ -101,7 +116,7 @@ } ], [ - 5, + 6, 5, 0, { @@ -121,7 +136,7 @@ } ], [ - 6, + 7, 6, 0, { @@ -141,7 +156,7 @@ } ], [ - 7, + 8, 8, 0, { @@ -164,10 +179,6 @@ " gpt-4.1", "OpencodeHint" ], - [ - " (2026-01-26 14:23:12)", - "OpencodeHint" - ], [ " [msg_bfaafefb3001iBSmqfzFffDjCS]", "OpencodeHint" @@ -180,7 +191,26 @@ } ], [ + 9, 8, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2026-01-26 14:23:12", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 10, 10, 0, { @@ -200,7 +230,7 @@ } ], [ - 9, + 11, 11, 0, { @@ -220,7 +250,7 @@ } ], [ - 10, + 12, 12, 0, { @@ -240,7 +270,7 @@ } ], [ - 11, + 13, 13, 0, { @@ -260,7 +290,7 @@ } ], [ - 12, + 14, 16, 0, { @@ -283,10 +313,6 @@ " gpt-4.1", "OpencodeHint" ], - [ - " (2026-01-26 14:23:22)", - "OpencodeHint" - ], [ " [msg_bfab0156d001NyMxaTnj6Cml0c]", "OpencodeHint" @@ -297,6 +323,25 @@ "virt_text_repeat_linebreak": false, "virt_text_win_col": -3 } + ], + [ + 15, + 16, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2026-01-26 14:23:22", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } ] ], "lines": [ @@ -322,5 +367,5 @@ "", "" ], - "timestamp": 1770751428 + "timestamp": 1770933872 } \ No newline at end of file diff --git a/tests/data/question-ask.expected.json b/tests/data/question-ask.expected.json index b990279b..1629509a 100644 --- a/tests/data/question-ask.expected.json +++ b/tests/data/question-ask.expected.json @@ -25,10 +25,6 @@ "", "OpencodeHint" ], - [ - " (2026-01-26 14:06:19)", - "OpencodeHint" - ], [ " [msg_bfaa078a2001RUYhlKZhSlyWeF]", "OpencodeHint" @@ -42,6 +38,25 @@ ], [ 2, + 1, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2026-01-26 14:06:19", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 3, 2, 0, { @@ -61,7 +76,7 @@ } ], [ - 3, + 4, 3, 0, { @@ -81,7 +96,7 @@ } ], [ - 4, + 5, 4, 0, { @@ -101,7 +116,7 @@ } ], [ - 5, + 6, 5, 0, { @@ -121,7 +136,7 @@ } ], [ - 6, + 7, 6, 0, { @@ -141,7 +156,7 @@ } ], [ - 7, + 8, 8, 0, { @@ -164,10 +179,6 @@ " gpt-4.1", "OpencodeHint" ], - [ - " (2026-01-26 14:06:19)", - "OpencodeHint" - ], [ " [msg_bfaa078e7001qc33BqBlqzHv8X]", "OpencodeHint" @@ -180,7 +191,26 @@ } ], [ + 9, 8, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2026-01-26 14:06:19", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 10, 13, 0, { @@ -203,10 +233,6 @@ "", "OpencodeHint" ], - [ - "", - "OpencodeHint" - ], [ " [question-display-message]", "OpencodeHint" @@ -219,7 +245,7 @@ } ], [ - 9, + 11, 15, 0, { @@ -230,7 +256,7 @@ } ], [ - 10, + 12, 15, 0, { @@ -250,7 +276,7 @@ } ], [ - 11, + 13, 16, 0, { @@ -270,7 +296,7 @@ } ], [ - 12, + 14, 17, 0, { @@ -290,7 +316,7 @@ } ], [ - 13, + 15, 18, 0, { @@ -310,7 +336,7 @@ } ], [ - 14, + 16, 19, 0, { @@ -321,7 +347,7 @@ } ], [ - 15, + 17, 19, 0, { @@ -341,7 +367,7 @@ } ], [ - 16, + 18, 19, 2, { @@ -360,7 +386,7 @@ } ], [ - 17, + 19, 20, 0, { @@ -380,7 +406,7 @@ } ], [ - 18, + 20, 21, 0, { @@ -400,7 +426,7 @@ } ], [ - 19, + 21, 22, 0, { @@ -420,7 +446,7 @@ } ], [ - 20, + 22, 23, 0, { @@ -468,5 +494,5 @@ "", "" ], - "timestamp": 1770751428 + "timestamp": 1770933872 } \ No newline at end of file diff --git a/tests/data/reasoning.expected.json b/tests/data/reasoning.expected.json index 19d03ae9..48f43598 100644 --- a/tests/data/reasoning.expected.json +++ b/tests/data/reasoning.expected.json @@ -25,10 +25,6 @@ "", "OpencodeHint" ], - [ - " (2025-12-17 19:33:20)", - "OpencodeHint" - ], [ " [msg_reason_user1]", "OpencodeHint" @@ -42,6 +38,25 @@ ], [ 2, + 1, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-12-17 19:33:20", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 3, 2, 0, { @@ -61,7 +76,7 @@ } ], [ - 3, + 4, 3, 0, { @@ -81,7 +96,7 @@ } ], [ - 4, + 5, 6, 0, { @@ -104,10 +119,6 @@ " claude-sonnet-4", "OpencodeHint" ], - [ - " (2025-12-17 19:33:20)", - "OpencodeHint" - ], [ " [msg_reason_asst1]", "OpencodeHint" @@ -120,7 +131,26 @@ } ], [ - 5, + 6, + 6, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-12-17 19:33:20", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 7, 8, 0, { @@ -141,7 +171,7 @@ } ], [ - 6, + 8, 9, 0, { @@ -162,7 +192,7 @@ } ], [ - 7, + 9, 10, 0, { @@ -183,7 +213,7 @@ } ], [ - 8, + 10, 11, 0, { @@ -204,7 +234,7 @@ } ], [ - 9, + 11, 12, 0, { @@ -225,7 +255,7 @@ } ], [ - 10, + 12, 13, 0, { @@ -246,7 +276,7 @@ } ], [ - 11, + 13, 14, 0, { @@ -267,7 +297,7 @@ } ], [ - 12, + 14, 15, 0, { @@ -288,7 +318,7 @@ } ], [ - 13, + 15, 16, 0, { @@ -309,7 +339,7 @@ } ], [ - 14, + 16, 17, 0, { @@ -330,7 +360,7 @@ } ], [ - 15, + 17, 18, 0, { @@ -360,7 +390,7 @@ "----", "", "", - "**󰧑 Reasoning (2025-12-17 19:33:20 - 2025-12-17 19:33:21)** ", + "**󰧑 Reasoning 1s** ", "", "The user is asking me to explain my plan and then provide a final title. I need to think through what they're asking for. It seems like they want me to demonstrate reasoning capabilities - showing my thought process before giving an answer. Let me break this down into steps.", "", @@ -385,5 +415,5 @@ "", "" ], - "timestamp": 1770751429 + "timestamp": 1770933873 } \ No newline at end of file diff --git a/tests/data/redo-all.expected.json b/tests/data/redo-all.expected.json index e3148fa9..45e2cce1 100644 --- a/tests/data/redo-all.expected.json +++ b/tests/data/redo-all.expected.json @@ -2,117 +2,117 @@ "actions": [ { "args": [ - "57d83f5596cb1f142fbc681d3d93b7184f7f73cd" + "d988cc85565b99017d40ad8baea20225165be9d5" ], - "display_line": 56, + "display_line": 90, "key": "R", "range": { - "from": 56, - "to": 56 + "from": 90, + "to": 90 }, "text": "[R]evert file", "type": "diff_revert_selected_file" }, { "args": [ - "57d83f5596cb1f142fbc681d3d93b7184f7f73cd" + "d988cc85565b99017d40ad8baea20225165be9d5" ], - "display_line": 56, + "display_line": 90, "key": "A", "range": { - "from": 56, - "to": 56 + "from": 90, + "to": 90 }, "text": "Revert [A]ll", "type": "diff_revert_all" }, { "args": [ - "57d83f5596cb1f142fbc681d3d93b7184f7f73cd" + "d988cc85565b99017d40ad8baea20225165be9d5" ], - "display_line": 56, + "display_line": 90, "key": "D", "range": { - "from": 56, - "to": 56 + "from": 90, + "to": 90 }, "text": "[D]iff", "type": "diff_open" }, { "args": [ - "d988cc85565b99017d40ad8baea20225165be9d5" + "1b6ba655c6c0d899965adff278ac6320d5fc3b12" ], - "display_line": 90, + "display_line": 22, "key": "R", "range": { - "from": 90, - "to": 90 + "from": 22, + "to": 22 }, "text": "[R]evert file", "type": "diff_revert_selected_file" }, { "args": [ - "d988cc85565b99017d40ad8baea20225165be9d5" + "1b6ba655c6c0d899965adff278ac6320d5fc3b12" ], - "display_line": 90, + "display_line": 22, "key": "A", "range": { - "from": 90, - "to": 90 + "from": 22, + "to": 22 }, "text": "Revert [A]ll", "type": "diff_revert_all" }, { "args": [ - "d988cc85565b99017d40ad8baea20225165be9d5" + "1b6ba655c6c0d899965adff278ac6320d5fc3b12" ], - "display_line": 90, + "display_line": 22, "key": "D", "range": { - "from": 90, - "to": 90 + "from": 22, + "to": 22 }, "text": "[D]iff", "type": "diff_open" }, { "args": [ - "1b6ba655c6c0d899965adff278ac6320d5fc3b12" + "57d83f5596cb1f142fbc681d3d93b7184f7f73cd" ], - "display_line": 22, + "display_line": 56, "key": "R", "range": { - "from": 22, - "to": 22 + "from": 56, + "to": 56 }, "text": "[R]evert file", "type": "diff_revert_selected_file" }, { "args": [ - "1b6ba655c6c0d899965adff278ac6320d5fc3b12" + "57d83f5596cb1f142fbc681d3d93b7184f7f73cd" ], - "display_line": 22, + "display_line": 56, "key": "A", "range": { - "from": 22, - "to": 22 + "from": 56, + "to": 56 }, "text": "Revert [A]ll", "type": "diff_revert_all" }, { "args": [ - "1b6ba655c6c0d899965adff278ac6320d5fc3b12" + "57d83f5596cb1f142fbc681d3d93b7184f7f73cd" ], - "display_line": 22, + "display_line": 56, "key": "D", "range": { - "from": 22, - "to": 22 + "from": 56, + "to": 56 }, "text": "[D]iff", "type": "diff_open" @@ -143,10 +143,6 @@ "", "OpencodeHint" ], - [ - " (2025-10-20 15:20:02)", - "OpencodeHint" - ], [ " [msg_a0234c0b7001y2o9S1jMaNVZar]", "OpencodeHint" @@ -160,6 +156,25 @@ ], [ 2, + 1, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-20 15:20:02", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 3, 2, 0, { @@ -179,7 +194,7 @@ } ], [ - 3, + 4, 3, 0, { @@ -199,7 +214,7 @@ } ], [ - 4, + 5, 4, 0, { @@ -219,7 +234,7 @@ } ], [ - 5, + 6, 5, 0, { @@ -239,7 +254,7 @@ } ], [ - 6, + 7, 8, 0, { @@ -262,10 +277,6 @@ " gpt-5-mini", "OpencodeHint" ], - [ - " (2025-10-20 15:20:04)", - "OpencodeHint" - ], [ " [msg_a0234c7960011LTxTvD94hfWCi]", "OpencodeHint" @@ -278,7 +289,26 @@ } ], [ - 7, + 8, + 8, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-20 15:20:04", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 9, 12, 0, { @@ -298,7 +328,7 @@ } ], [ - 8, + 10, 13, 0, { @@ -318,7 +348,7 @@ } ], [ - 9, + 11, 14, 0, { @@ -338,7 +368,7 @@ } ], [ - 10, + 12, 15, 0, { @@ -362,7 +392,7 @@ } ], [ - 11, + 13, 15, 0, { @@ -382,7 +412,7 @@ } ], [ - 12, + 14, 16, 0, { @@ -406,7 +436,7 @@ } ], [ - 13, + 15, 16, 0, { @@ -426,7 +456,7 @@ } ], [ - 14, + 16, 17, 0, { @@ -446,7 +476,7 @@ } ], [ - 15, + 17, 18, 0, { @@ -466,7 +496,7 @@ } ], [ - 16, + 18, 19, 0, { @@ -486,7 +516,7 @@ } ], [ - 17, + 19, 20, 0, { @@ -506,7 +536,7 @@ } ], [ - 18, + 20, 25, 0, { @@ -529,10 +559,6 @@ " gpt-5-mini", "OpencodeHint" ], - [ - " (2025-10-20 15:20:09)", - "OpencodeHint" - ], [ " [msg_a0234d8fb001SXyngLjuKSuxOY]", "OpencodeHint" @@ -545,7 +571,26 @@ } ], [ - 19, + 21, + 25, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-20 15:20:09", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 22, 30, 0, { @@ -568,10 +613,6 @@ "", "OpencodeHint" ], - [ - " (2025-10-20 15:20:11)", - "OpencodeHint" - ], [ " [msg_a0234e308001SKl5bQUibp5gtI]", "OpencodeHint" @@ -584,7 +625,26 @@ } ], [ - 20, + 23, + 30, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-20 15:20:11", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 24, 31, 0, { @@ -604,7 +664,7 @@ } ], [ - 21, + 25, 32, 0, { @@ -624,7 +684,7 @@ } ], [ - 22, + 26, 35, 0, { @@ -647,10 +707,6 @@ " gpt-5-mini", "OpencodeHint" ], - [ - " (2025-10-20 15:20:11)", - "OpencodeHint" - ], [ " [msg_a0234e31f001m4EsQdPmY3PTtS]", "OpencodeHint" @@ -663,7 +719,26 @@ } ], [ - 23, + 27, + 35, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-20 15:20:11", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 28, 42, 0, { @@ -686,10 +761,6 @@ " gpt-5-mini", "OpencodeHint" ], - [ - " (2025-10-20 15:20:16)", - "OpencodeHint" - ], [ " [msg_a0234f482001PQbMjWc6W8s0eF]", "OpencodeHint" @@ -702,7 +773,26 @@ } ], [ - 24, + 29, + 42, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-20 15:20:16", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 30, 46, 0, { @@ -722,7 +812,7 @@ } ], [ - 25, + 31, 47, 0, { @@ -742,7 +832,7 @@ } ], [ - 26, + 32, 48, 0, { @@ -762,7 +852,7 @@ } ], [ - 27, + 33, 49, 0, { @@ -786,7 +876,7 @@ } ], [ - 28, + 34, 49, 0, { @@ -806,7 +896,7 @@ } ], [ - 29, + 35, 50, 0, { @@ -830,7 +920,7 @@ } ], [ - 30, + 36, 50, 0, { @@ -850,7 +940,7 @@ } ], [ - 31, + 37, 51, 0, { @@ -870,7 +960,7 @@ } ], [ - 32, + 38, 52, 0, { @@ -890,7 +980,7 @@ } ], [ - 33, + 39, 53, 0, { @@ -910,7 +1000,7 @@ } ], [ - 34, + 40, 54, 0, { @@ -930,7 +1020,7 @@ } ], [ - 35, + 41, 59, 0, { @@ -953,10 +1043,6 @@ " gpt-5-mini", "OpencodeHint" ], - [ - " (2025-10-20 15:20:17)", - "OpencodeHint" - ], [ " [msg_a0234f9c6001JCKYaca1HHwwx6]", "OpencodeHint" @@ -969,7 +1055,26 @@ } ], [ - 36, + 42, + 59, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-20 15:20:17", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 43, 64, 0, { @@ -992,10 +1097,6 @@ "", "OpencodeHint" ], - [ - " (2025-10-20 15:22:29)", - "OpencodeHint" - ], [ " [msg_a0236fd1c001TlwqL8fwvq529i]", "OpencodeHint" @@ -1008,7 +1109,26 @@ } ], [ - 37, + 44, + 64, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-20 15:22:29", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 45, 65, 0, { @@ -1028,7 +1148,7 @@ } ], [ - 38, + 46, 66, 0, { @@ -1048,7 +1168,7 @@ } ], [ - 39, + 47, 69, 0, { @@ -1071,10 +1191,6 @@ " gpt-5-mini", "OpencodeHint" ], - [ - " (2025-10-20 15:22:29)", - "OpencodeHint" - ], [ " [msg_a0236fd57001pTnTjSBdFlleCb]", "OpencodeHint" @@ -1087,7 +1203,26 @@ } ], [ - 40, + 48, + 69, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-20 15:22:29", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 49, 76, 0, { @@ -1110,10 +1245,6 @@ " gpt-5-mini", "OpencodeHint" ], - [ - " (2025-10-20 15:22:34)", - "OpencodeHint" - ], [ " [msg_a02371241001PBQAsr8Oc9hqNI]", "OpencodeHint" @@ -1126,7 +1257,26 @@ } ], [ - 41, + 50, + 76, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-20 15:22:34", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 51, 80, 0, { @@ -1146,7 +1296,7 @@ } ], [ - 42, + 52, 81, 0, { @@ -1166,7 +1316,7 @@ } ], [ - 43, + 53, 82, 0, { @@ -1186,7 +1336,7 @@ } ], [ - 44, + 54, 83, 0, { @@ -1210,7 +1360,7 @@ } ], [ - 45, + 55, 83, 0, { @@ -1230,7 +1380,7 @@ } ], [ - 46, + 56, 84, 0, { @@ -1254,7 +1404,7 @@ } ], [ - 47, + 57, 84, 0, { @@ -1274,7 +1424,7 @@ } ], [ - 48, + 58, 85, 0, { @@ -1294,7 +1444,7 @@ } ], [ - 49, + 59, 86, 0, { @@ -1314,7 +1464,7 @@ } ], [ - 50, + 60, 87, 0, { @@ -1334,7 +1484,7 @@ } ], [ - 51, + 61, 88, 0, { @@ -1354,7 +1504,7 @@ } ], [ - 52, + 62, 93, 0, { @@ -1377,10 +1527,6 @@ " gpt-5-mini", "OpencodeHint" ], - [ - " (2025-10-20 15:22:39)", - "OpencodeHint" - ], [ " [msg_a023723d0001r87MaJThFssUw1]", "OpencodeHint" @@ -1391,6 +1537,25 @@ "virt_text_repeat_linebreak": false, "virt_text_win_col": -3 } + ], + [ + 63, + 93, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-20 15:22:39", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } ] ], "lines": [ @@ -1493,5 +1658,5 @@ "", "" ], - "timestamp": 1770751429 + "timestamp": 1770933873 } \ No newline at end of file diff --git a/tests/data/redo-once.expected.json b/tests/data/redo-once.expected.json index 59a7ceb3..d1b32d1b 100644 --- a/tests/data/redo-once.expected.json +++ b/tests/data/redo-once.expected.json @@ -104,10 +104,6 @@ "", "OpencodeHint" ], - [ - " (2025-10-20 15:20:02)", - "OpencodeHint" - ], [ " [msg_a0234c0b7001y2o9S1jMaNVZar]", "OpencodeHint" @@ -121,6 +117,25 @@ ], [ 2, + 1, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-20 15:20:02", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 3, 2, 0, { @@ -140,7 +155,7 @@ } ], [ - 3, + 4, 3, 0, { @@ -160,7 +175,7 @@ } ], [ - 4, + 5, 4, 0, { @@ -180,7 +195,7 @@ } ], [ - 5, + 6, 5, 0, { @@ -200,7 +215,7 @@ } ], [ - 6, + 7, 8, 0, { @@ -223,10 +238,6 @@ " gpt-5-mini", "OpencodeHint" ], - [ - " (2025-10-20 15:20:04)", - "OpencodeHint" - ], [ " [msg_a0234c7960011LTxTvD94hfWCi]", "OpencodeHint" @@ -239,7 +250,26 @@ } ], [ - 7, + 8, + 8, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-20 15:20:04", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 9, 12, 0, { @@ -259,7 +289,7 @@ } ], [ - 8, + 10, 13, 0, { @@ -279,7 +309,7 @@ } ], [ - 9, + 11, 14, 0, { @@ -299,7 +329,7 @@ } ], [ - 10, + 12, 15, 0, { @@ -323,7 +353,7 @@ } ], [ - 11, + 13, 15, 0, { @@ -343,7 +373,7 @@ } ], [ - 12, + 14, 16, 0, { @@ -367,7 +397,7 @@ } ], [ - 13, + 15, 16, 0, { @@ -387,7 +417,7 @@ } ], [ - 14, + 16, 17, 0, { @@ -407,7 +437,7 @@ } ], [ - 15, + 17, 18, 0, { @@ -427,7 +457,7 @@ } ], [ - 16, + 18, 19, 0, { @@ -447,7 +477,7 @@ } ], [ - 17, + 19, 20, 0, { @@ -467,7 +497,7 @@ } ], [ - 18, + 20, 25, 0, { @@ -490,10 +520,6 @@ " gpt-5-mini", "OpencodeHint" ], - [ - " (2025-10-20 15:20:09)", - "OpencodeHint" - ], [ " [msg_a0234d8fb001SXyngLjuKSuxOY]", "OpencodeHint" @@ -506,7 +532,26 @@ } ], [ - 19, + 21, + 25, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-20 15:20:09", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 22, 30, 0, { @@ -529,10 +574,6 @@ "", "OpencodeHint" ], - [ - " (2025-10-20 15:20:11)", - "OpencodeHint" - ], [ " [msg_a0234e308001SKl5bQUibp5gtI]", "OpencodeHint" @@ -545,7 +586,26 @@ } ], [ - 20, + 23, + 30, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-20 15:20:11", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 24, 31, 0, { @@ -565,7 +625,7 @@ } ], [ - 21, + 25, 32, 0, { @@ -585,7 +645,7 @@ } ], [ - 22, + 26, 35, 0, { @@ -608,10 +668,6 @@ " gpt-5-mini", "OpencodeHint" ], - [ - " (2025-10-20 15:20:11)", - "OpencodeHint" - ], [ " [msg_a0234e31f001m4EsQdPmY3PTtS]", "OpencodeHint" @@ -624,7 +680,26 @@ } ], [ - 23, + 27, + 35, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-20 15:20:11", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 28, 42, 0, { @@ -647,10 +722,6 @@ " gpt-5-mini", "OpencodeHint" ], - [ - " (2025-10-20 15:20:16)", - "OpencodeHint" - ], [ " [msg_a0234f482001PQbMjWc6W8s0eF]", "OpencodeHint" @@ -663,7 +734,26 @@ } ], [ - 24, + 29, + 42, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-20 15:20:16", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 30, 46, 0, { @@ -683,7 +773,7 @@ } ], [ - 25, + 31, 47, 0, { @@ -703,7 +793,7 @@ } ], [ - 26, + 32, 48, 0, { @@ -723,7 +813,7 @@ } ], [ - 27, + 33, 49, 0, { @@ -747,7 +837,7 @@ } ], [ - 28, + 34, 49, 0, { @@ -767,7 +857,7 @@ } ], [ - 29, + 35, 50, 0, { @@ -791,7 +881,7 @@ } ], [ - 30, + 36, 50, 0, { @@ -811,7 +901,7 @@ } ], [ - 31, + 37, 51, 0, { @@ -831,7 +921,7 @@ } ], [ - 32, + 38, 52, 0, { @@ -851,7 +941,7 @@ } ], [ - 33, + 39, 53, 0, { @@ -871,7 +961,7 @@ } ], [ - 34, + 40, 54, 0, { @@ -891,7 +981,7 @@ } ], [ - 35, + 41, 59, 0, { @@ -914,10 +1004,6 @@ " gpt-5-mini", "OpencodeHint" ], - [ - " (2025-10-20 15:20:17)", - "OpencodeHint" - ], [ " [msg_a0234f9c6001JCKYaca1HHwwx6]", "OpencodeHint" @@ -930,7 +1016,26 @@ } ], [ - 36, + 42, + 59, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-20 15:20:17", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 43, 69, 0, { @@ -950,7 +1055,7 @@ } ], [ - 37, + 44, 69, 0, { @@ -1043,5 +1148,5 @@ " test.txt: +1 -1", "" ], - "timestamp": 1770751430 + "timestamp": 1770933874 } \ No newline at end of file diff --git a/tests/data/revert.expected.json b/tests/data/revert.expected.json index 4f7519ea..5314fa91 100644 --- a/tests/data/revert.expected.json +++ b/tests/data/revert.expected.json @@ -65,10 +65,6 @@ "", "OpencodeHint" ], - [ - " (2025-10-19 17:50:43)", - "OpencodeHint" - ], [ " [msg_9fd985573001fk1Xlot7uyDgTo]", "OpencodeHint" @@ -82,6 +78,25 @@ ], [ 2, + 1, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-19 17:50:43", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 3, 2, 0, { @@ -101,7 +116,7 @@ } ], [ - 3, + 4, 3, 0, { @@ -121,7 +136,7 @@ } ], [ - 4, + 5, 4, 0, { @@ -141,7 +156,7 @@ } ], [ - 5, + 6, 5, 0, { @@ -161,7 +176,7 @@ } ], [ - 6, + 7, 8, 0, { @@ -184,10 +199,6 @@ " gpt-4.1", "OpencodeHint" ], - [ - " (2025-10-19 17:50:44)", - "OpencodeHint" - ], [ " [msg_9fd985a4d001wOX3Op7CpFiCTq]", "OpencodeHint" @@ -200,7 +211,26 @@ } ], [ - 7, + 8, + 8, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-19 17:50:44", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 9, 26, 0, { @@ -223,10 +253,6 @@ "", "OpencodeHint" ], - [ - " (2025-10-19 17:50:57)", - "OpencodeHint" - ], [ " [msg_9fd988c92001w0IZCVPQsN6xa9]", "OpencodeHint" @@ -239,7 +265,26 @@ } ], [ - 8, + 10, + 26, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-19 17:50:57", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 11, 27, 0, { @@ -259,7 +304,7 @@ } ], [ - 9, + 12, 28, 0, { @@ -279,7 +324,7 @@ } ], [ - 10, + 13, 31, 0, { @@ -302,10 +347,6 @@ " gpt-4.1", "OpencodeHint" ], - [ - " (2025-10-19 17:50:57)", - "OpencodeHint" - ], [ " [msg_9fd988ca7001lgaGttpI4YeGSA]", "OpencodeHint" @@ -318,7 +359,26 @@ } ], [ - 11, + 14, + 31, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-19 17:50:57", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 15, 37, 0, { @@ -338,7 +398,7 @@ } ], [ - 12, + 16, 38, 0, { @@ -358,7 +418,7 @@ } ], [ - 13, + 17, 39, 0, { @@ -378,7 +438,7 @@ } ], [ - 14, + 18, 40, 0, { @@ -398,7 +458,7 @@ } ], [ - 15, + 19, 41, 0, { @@ -418,7 +478,7 @@ } ], [ - 16, + 20, 42, 0, { @@ -438,7 +498,7 @@ } ], [ - 17, + 21, 43, 0, { @@ -458,7 +518,7 @@ } ], [ - 18, + 22, 44, 0, { @@ -478,7 +538,7 @@ } ], [ - 19, + 23, 45, 0, { @@ -498,7 +558,7 @@ } ], [ - 20, + 24, 46, 0, { @@ -518,7 +578,7 @@ } ], [ - 21, + 25, 47, 0, { @@ -538,7 +598,7 @@ } ], [ - 22, + 26, 48, 0, { @@ -558,7 +618,7 @@ } ], [ - 23, + 27, 49, 0, { @@ -578,7 +638,7 @@ } ], [ - 24, + 28, 50, 0, { @@ -598,7 +658,7 @@ } ], [ - 25, + 29, 51, 0, { @@ -618,7 +678,7 @@ } ], [ - 26, + 30, 56, 0, { @@ -641,10 +701,6 @@ " gpt-4.1", "OpencodeHint" ], - [ - " (2025-10-19 17:50:59)", - "OpencodeHint" - ], [ " [msg_9fd98942d001elqd2sd8CZeOoA]", "OpencodeHint" @@ -657,7 +713,26 @@ } ], [ - 27, + 31, + 56, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-19 17:50:59", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 32, 66, 0, { @@ -747,5 +822,5 @@ " poem.md: -20", "" ], - "timestamp": 1770751430 + "timestamp": 1770933874 } \ No newline at end of file diff --git a/tests/data/selection.expected.json b/tests/data/selection.expected.json index b619a9ce..6af0f0c5 100644 --- a/tests/data/selection.expected.json +++ b/tests/data/selection.expected.json @@ -25,10 +25,6 @@ "", "OpencodeHint" ], - [ - " (2025-10-18 05:02:28)", - "OpencodeHint" - ], [ " [msg_9f5b29fea001z6jYXF7CG9omHa]", "OpencodeHint" @@ -42,6 +38,25 @@ ], [ 2, + 1, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-18 05:02:28", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 3, 2, 0, { @@ -61,7 +76,7 @@ } ], [ - 3, + 4, 3, 0, { @@ -81,7 +96,7 @@ } ], [ - 4, + 5, 4, 0, { @@ -101,7 +116,7 @@ } ], [ - 5, + 6, 5, 0, { @@ -121,7 +136,7 @@ } ], [ - 6, + 7, 6, 0, { @@ -141,7 +156,7 @@ } ], [ - 7, + 8, 7, 0, { @@ -161,7 +176,7 @@ } ], [ - 8, + 9, 8, 0, { @@ -181,7 +196,7 @@ } ], [ - 9, + 10, 8, 0, { @@ -201,7 +216,7 @@ } ], [ - 10, + 11, 9, 0, { @@ -221,7 +236,7 @@ } ], [ - 11, + 12, 10, 0, { @@ -241,7 +256,7 @@ } ], [ - 12, + 13, 11, 0, { @@ -261,7 +276,7 @@ } ], [ - 13, + 14, 12, 0, { @@ -281,7 +296,7 @@ } ], [ - 14, + 15, 12, 0, { @@ -301,7 +316,7 @@ } ], [ - 15, + 16, 13, 0, { @@ -321,7 +336,7 @@ } ], [ - 16, + 17, 16, 0, { @@ -344,10 +359,6 @@ " claude-sonnet-4.5", "OpencodeHint" ], - [ - " (2025-10-18 05:02:28)", - "OpencodeHint" - ], [ " [msg_9f5b2a039001xop8ITmXQq0Gjh]", "OpencodeHint" @@ -358,6 +369,25 @@ "virt_text_repeat_linebreak": false, "virt_text_win_col": -3 } + ], + [ + 18, + 16, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-18 05:02:28", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } ] ], "lines": [ @@ -389,5 +419,5 @@ "", "" ], - "timestamp": 1770751430 + "timestamp": 1770933874 } \ No newline at end of file diff --git a/tests/data/shifting-and-multiple-perms.expected.json b/tests/data/shifting-and-multiple-perms.expected.json index 3d4c2ac8..5c164350 100644 --- a/tests/data/shifting-and-multiple-perms.expected.json +++ b/tests/data/shifting-and-multiple-perms.expected.json @@ -25,10 +25,6 @@ "", "OpencodeHint" ], - [ - " (2025-10-17 01:05:49)", - "OpencodeHint" - ], [ " [msg_9efb39d68001J2h30a50B2774b]", "OpencodeHint" @@ -42,6 +38,25 @@ ], [ 2, + 1, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-17 01:05:49", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 3, 2, 0, { @@ -61,7 +76,7 @@ } ], [ - 3, + 4, 3, 0, { @@ -81,7 +96,7 @@ } ], [ - 4, + 5, 4, 0, { @@ -101,7 +116,7 @@ } ], [ - 5, + 6, 5, 0, { @@ -121,7 +136,7 @@ } ], [ - 6, + 7, 8, 0, { @@ -144,10 +159,6 @@ " claude-sonnet-4.5", "OpencodeHint" ], - [ - " (2025-10-17 01:05:50)", - "OpencodeHint" - ], [ " [msg_9efb39dc3002f81rMRqF2WO1UU]", "OpencodeHint" @@ -160,7 +171,26 @@ } ], [ - 7, + 8, + 8, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-17 01:05:50", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 9, 83, 0, { @@ -183,10 +213,6 @@ "", "OpencodeHint" ], - [ - " (2025-10-17 01:07:23)", - "OpencodeHint" - ], [ " [msg_9efb50a0b001WFK7AMDV45cF8Z]", "OpencodeHint" @@ -199,7 +225,26 @@ } ], [ - 8, + 10, + 83, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-17 01:07:23", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 11, 84, 0, { @@ -219,7 +264,7 @@ } ], [ - 9, + 12, 85, 0, { @@ -239,7 +284,7 @@ } ], [ - 10, + 13, 88, 0, { @@ -262,10 +307,6 @@ " claude-sonnet-4.5", "OpencodeHint" ], - [ - " (2025-10-17 01:07:23)", - "OpencodeHint" - ], [ " [msg_9efb50a2a002dzMgbQnasd86o1]", "OpencodeHint" @@ -278,7 +319,26 @@ } ], [ - 11, + 14, + 88, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-17 01:07:23", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 15, 111, 0, { @@ -301,10 +361,6 @@ "", "OpencodeHint" ], - [ - " (2025-10-17 01:08:01)", - "OpencodeHint" - ], [ " [msg_9efb59d93001LSm9y0DS9p8cP6]", "OpencodeHint" @@ -317,7 +373,26 @@ } ], [ - 12, + 16, + 111, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-17 01:08:01", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 17, 112, 0, { @@ -337,7 +412,7 @@ } ], [ - 13, + 18, 113, 0, { @@ -357,7 +432,7 @@ } ], [ - 14, + 19, 116, 0, { @@ -380,10 +455,6 @@ " claude-sonnet-4.5", "OpencodeHint" ], - [ - " (2025-10-17 01:08:01)", - "OpencodeHint" - ], [ " [msg_9efb59db4002uWmyFRTjRIhIaQ]", "OpencodeHint" @@ -396,7 +467,26 @@ } ], [ - 15, + 20, + 116, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-17 01:08:01", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 21, 125, 0, { @@ -419,10 +509,6 @@ "", "OpencodeHint" ], - [ - "", - "OpencodeHint" - ], [ " [permission-display-message]", "OpencodeHint" @@ -435,7 +521,7 @@ } ], [ - 16, + 22, 127, 0, { @@ -446,7 +532,7 @@ } ], [ - 17, + 23, 127, 0, { @@ -466,7 +552,7 @@ } ], [ - 18, + 24, 128, 0, { @@ -486,7 +572,7 @@ } ], [ - 19, + 25, 129, 0, { @@ -506,7 +592,7 @@ } ], [ - 20, + 26, 130, 0, { @@ -526,7 +612,7 @@ } ], [ - 21, + 27, 131, 0, { @@ -546,7 +632,7 @@ } ], [ - 22, + 28, 132, 0, { @@ -566,7 +652,7 @@ } ], [ - 23, + 29, 133, 0, { @@ -586,7 +672,7 @@ } ], [ - 24, + 30, 134, 0, { @@ -606,7 +692,7 @@ } ], [ - 25, + 31, 135, 0, { @@ -626,7 +712,7 @@ } ], [ - 26, + 32, 136, 0, { @@ -646,7 +732,7 @@ } ], [ - 27, + 33, 137, 0, { @@ -670,7 +756,7 @@ } ], [ - 28, + 34, 137, 0, { @@ -690,7 +776,7 @@ } ], [ - 29, + 35, 138, 0, { @@ -710,7 +796,7 @@ } ], [ - 30, + 36, 139, 0, { @@ -730,7 +816,7 @@ } ], [ - 31, + 37, 140, 0, { @@ -750,7 +836,7 @@ } ], [ - 32, + 38, 141, 0, { @@ -770,7 +856,7 @@ } ], [ - 33, + 39, 142, 0, { @@ -790,7 +876,7 @@ } ], [ - 34, + 40, 143, 0, { @@ -810,7 +896,7 @@ } ], [ - 35, + 41, 144, 0, { @@ -830,7 +916,7 @@ } ], [ - 36, + 42, 145, 0, { @@ -841,7 +927,7 @@ } ], [ - 37, + 43, 145, 0, { @@ -861,7 +947,7 @@ } ], [ - 38, + 44, 145, 2, { @@ -880,7 +966,7 @@ } ], [ - 39, + 45, 146, 0, { @@ -900,7 +986,7 @@ } ], [ - 40, + 46, 147, 0, { @@ -920,7 +1006,7 @@ } ], [ - 41, + 47, 148, 0, { @@ -940,7 +1026,7 @@ } ], [ - 42, + 48, 149, 0, { @@ -1079,11 +1165,11 @@ "----", "", "", - "** edit** `/Users/cam/Dev/neovim-dev/opencode.nvim/lua/opencode/ui/renderer.lua`", + "** edit** `/Users/cam/Dev/neovim-dev/opencode.nvim/lua/opencode/ui/renderer.lua` 10270589s", "", - "** edit** `/Users/cam/Dev/neovim-dev/opencode.nvim/lua/opencode/ui/renderer.lua`", + "** edit** `/Users/cam/Dev/neovim-dev/opencode.nvim/lua/opencode/ui/renderer.lua` 10270587s", "", - "** edit** `/Users/cam/Dev/neovim-dev/opencode.nvim/lua/opencode/ui/renderer.lua`", + "** edit** `/Users/cam/Dev/neovim-dev/opencode.nvim/lua/opencode/ui/renderer.lua` 10270580s", "", "----", "", @@ -1114,5 +1200,5 @@ "", "" ], - "timestamp": 1770751431 + "timestamp": 1770933875 } \ No newline at end of file diff --git a/tests/data/simple-session.expected.json b/tests/data/simple-session.expected.json index f5cf50aa..e1a56b6d 100644 --- a/tests/data/simple-session.expected.json +++ b/tests/data/simple-session.expected.json @@ -25,10 +25,6 @@ "", "OpencodeHint" ], - [ - " (2025-10-10 19:18:25)", - "OpencodeHint" - ], [ " [msg_9cf8f64de0016tbfTQqWMydbdr]", "OpencodeHint" @@ -42,6 +38,25 @@ ], [ 2, + 1, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-10 19:18:25", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 3, 2, 0, { @@ -61,7 +76,7 @@ } ], [ - 3, + 4, 3, 0, { @@ -81,7 +96,7 @@ } ], [ - 4, + 5, 4, 0, { @@ -101,7 +116,7 @@ } ], [ - 5, + 6, 5, 0, { @@ -121,7 +136,7 @@ } ], [ - 6, + 7, 6, 0, { @@ -141,7 +156,7 @@ } ], [ - 7, + 8, 7, 0, { @@ -161,7 +176,7 @@ } ], [ - 8, + 9, 10, 0, { @@ -184,10 +199,6 @@ " claude-sonnet-4", "OpencodeHint" ], - [ - " (2025-10-10 19:18:25)", - "OpencodeHint" - ], [ " [msg_9cf8f6549001tpoRuqkwS4Rxtl]", "OpencodeHint" @@ -198,6 +209,25 @@ "virt_text_repeat_linebreak": false, "virt_text_win_col": -3 } + ], + [ + 10, + 10, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-10 19:18:25", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } ] ], "lines": [ @@ -217,5 +247,5 @@ "", "" ], - "timestamp": 1770751431 + "timestamp": 1770933875 } \ No newline at end of file diff --git a/tests/data/tool-invalid.expected.json b/tests/data/tool-invalid.expected.json index 8c0bd584..b1bc172c 100644 --- a/tests/data/tool-invalid.expected.json +++ b/tests/data/tool-invalid.expected.json @@ -25,10 +25,6 @@ " claude-sonnet-4.5", "OpencodeHint" ], - [ - " (2025-10-13 20:10:06)", - "OpencodeHint" - ], [ " [msg_9df31cc90001HGn2UbFUgqJnLr]", "OpencodeHint" @@ -42,6 +38,25 @@ ], [ 2, + 1, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-13 20:10:06", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 3, 3, 0, { @@ -61,7 +76,7 @@ } ], [ - 3, + 4, 4, 0, { @@ -81,7 +96,7 @@ } ], [ - 4, + 5, 5, 0, { @@ -101,7 +116,7 @@ } ], [ - 5, + 6, 6, 0, { @@ -121,7 +136,7 @@ } ], [ - 6, + 7, 7, 0, { @@ -141,7 +156,7 @@ } ], [ - 7, + 8, 8, 0, { @@ -174,5 +189,5 @@ "", "" ], - "timestamp": 1770751431 + "timestamp": 1770933875 } \ No newline at end of file diff --git a/tests/data/updating-text.expected.json b/tests/data/updating-text.expected.json index 9a45ccb1..de0bdacb 100644 --- a/tests/data/updating-text.expected.json +++ b/tests/data/updating-text.expected.json @@ -25,10 +25,6 @@ "", "OpencodeHint" ], - [ - " (2025-10-10 22:06:43)", - "OpencodeHint" - ], [ " [msg_9d0297a630014CA5ly3Vvw8Kt5]", "OpencodeHint" @@ -42,6 +38,25 @@ ], [ 2, + 1, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-10 22:06:43", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } + ], + [ + 3, 2, 0, { @@ -61,7 +76,7 @@ } ], [ - 3, + 4, 3, 0, { @@ -81,7 +96,7 @@ } ], [ - 4, + 5, 4, 0, { @@ -101,7 +116,7 @@ } ], [ - 5, + 6, 5, 0, { @@ -121,7 +136,7 @@ } ], [ - 6, + 7, 8, 0, { @@ -144,10 +159,6 @@ " claude-sonnet-4", "OpencodeHint" ], - [ - " (2025-10-10 22:06:43)", - "OpencodeHint" - ], [ " [msg_9d0297ab3001UGZU9fDJM4Y75w]", "OpencodeHint" @@ -158,6 +169,25 @@ "virt_text_repeat_linebreak": false, "virt_text_win_col": -3 } + ], + [ + 8, + 8, + 0, + { + "ns_id": 3, + "priority": 9, + "right_gravity": true, + "virt_text": [ + [ + " 2025-10-10 22:06:43", + "OpencodeHint" + ] + ], + "virt_text_hide": false, + "virt_text_pos": "right_align", + "virt_text_repeat_linebreak": false + } ] ], "lines": [ @@ -224,5 +254,5 @@ "", "" ], - "timestamp": 1770751431 + "timestamp": 1770933875 } \ No newline at end of file From cf147f43b865dd65adb12226752de6ce589740dd Mon Sep 17 00:00:00 2001 From: disrupted Date: Thu, 12 Feb 2026 23:21:48 +0100 Subject: [PATCH 8/9] fix: return nil duration for in-progress --- lua/opencode/util.lua | 12 ++---------- tests/unit/util_spec.lua | 9 ++------- 2 files changed, 4 insertions(+), 17 deletions(-) diff --git a/lua/opencode/util.lua b/lua/opencode/util.lua index 1438c7dd..b80e8c9a 100644 --- a/lua/opencode/util.lua +++ b/lua/opencode/util.lua @@ -132,19 +132,11 @@ end ---@param end_time number|nil ---@return string|nil function M.format_duration_seconds(start_time, end_time) - local normalized_start = M.normalize_timestamp(start_time) - if not normalized_start then + if not start_time or not end_time then return nil end - local is_in_progress = end_time == nil - local normalized_end = M.normalize_timestamp(end_time) or os.time() - local elapsed_seconds = math.max(0, normalized_end - normalized_start) - - if is_in_progress then - elapsed_seconds = math.max(1, elapsed_seconds) - return string.format('%ds', elapsed_seconds) - end + local elapsed_seconds = math.max(0, M.normalize_timestamp(end_time) - M.normalize_timestamp(start_time)) if elapsed_seconds < 1 then return nil diff --git a/tests/unit/util_spec.lua b/tests/unit/util_spec.lua index 814f990e..9c47cb34 100644 --- a/tests/unit/util_spec.lua +++ b/tests/unit/util_spec.lua @@ -258,14 +258,9 @@ describe('util.format_duration_seconds', function() assert.is_nil(util.format_duration_seconds(nil, os.time())) end) - it('returns live duration for in-progress operations', function() + it('returns nil for in-progress operations', function() local start_time = os.time() - 3 - assert.equals('3s', util.format_duration_seconds(start_time, nil)) - end) - - it('shows at least 1s while in progress', function() - local start_time = os.time() - assert.equals('1s', util.format_duration_seconds(start_time, nil)) + assert.is_nil(util.format_duration_seconds(start_time, nil)) end) it('returns nil for finished durations below one second', function() From c808f54238d44f61df168e45e274a51d18676e53 Mon Sep 17 00:00:00 2001 From: disrupted Date: Thu, 12 Feb 2026 23:27:39 +0100 Subject: [PATCH 9/9] test: regenerate replay snapshots --- tests/data/ansi-codes.expected.json | 2 +- tests/data/api-abort.expected.json | 2 +- tests/data/api-error.expected.json | 2 +- tests/data/cursor_data.expected.json | 2 +- tests/data/diagnostics.expected.json | 50 ++++++------- tests/data/diff.expected.json | 2 +- tests/data/markdown-codefence.expected.json | 2 +- tests/data/mentions-with-ranges.expected.json | 2 +- tests/data/message-removal.expected.json | 2 +- .../multiple-messages-synthetic.expected.json | 2 +- tests/data/multiple-messages.expected.json | 2 +- ...tiple-question-ask-reply-all.expected.json | 2 +- .../data/multiple-question-ask.expected.json | 2 +- tests/data/perf.expected.json | 2 +- .../permission-ask-new-approve.expected.json | 2 +- .../permission-ask-new-deny.expected.json | 2 +- tests/data/permission-ask-new.expected.json | 4 +- tests/data/permission-prompt.expected.json | 4 +- tests/data/permission.expected.json | 2 +- tests/data/planning.expected.json | 2 +- tests/data/question-ask-replied.expected.json | 2 +- tests/data/question-ask.expected.json | 2 +- tests/data/reasoning.expected.json | 2 +- tests/data/redo-all.expected.json | 74 +++++++++---------- tests/data/redo-once.expected.json | 2 +- tests/data/revert.expected.json | 2 +- tests/data/selection.expected.json | 2 +- .../shifting-and-multiple-perms.expected.json | 8 +- tests/data/simple-session.expected.json | 2 +- tests/data/tool-invalid.expected.json | 2 +- tests/data/updating-text.expected.json | 2 +- 31 files changed, 96 insertions(+), 96 deletions(-) diff --git a/tests/data/ansi-codes.expected.json b/tests/data/ansi-codes.expected.json index 9b82b020..1dbd568b 100644 --- a/tests/data/ansi-codes.expected.json +++ b/tests/data/ansi-codes.expected.json @@ -8568,5 +8568,5 @@ "", "" ], - "timestamp": 1770933866 + "timestamp": 1770935234 } \ No newline at end of file diff --git a/tests/data/api-abort.expected.json b/tests/data/api-abort.expected.json index 1d6b7bd6..76f5b5cd 100644 --- a/tests/data/api-abort.expected.json +++ b/tests/data/api-abort.expected.json @@ -207,5 +207,5 @@ "", "" ], - "timestamp": 1770933866 + "timestamp": 1770935234 } \ No newline at end of file diff --git a/tests/data/api-error.expected.json b/tests/data/api-error.expected.json index 16071b36..21026f71 100644 --- a/tests/data/api-error.expected.json +++ b/tests/data/api-error.expected.json @@ -266,5 +266,5 @@ "", "" ], - "timestamp": 1770933867 + "timestamp": 1770935234 } \ No newline at end of file diff --git a/tests/data/cursor_data.expected.json b/tests/data/cursor_data.expected.json index e2e2affa..20755d64 100644 --- a/tests/data/cursor_data.expected.json +++ b/tests/data/cursor_data.expected.json @@ -338,5 +338,5 @@ "", "" ], - "timestamp": 1770933867 + "timestamp": 1770935235 } \ No newline at end of file diff --git a/tests/data/diagnostics.expected.json b/tests/data/diagnostics.expected.json index 64060717..cd800eeb 100644 --- a/tests/data/diagnostics.expected.json +++ b/tests/data/diagnostics.expected.json @@ -2,78 +2,78 @@ "actions": [ { "args": [ - "8e7903714919009004aad8754db0035fb47ecb24" + "f33f38a70b284207e092c2c578a24e96fdd1bd4d" ], - "display_line": 57, + "display_line": 94, "key": "R", "range": { - "from": 57, - "to": 57 + "from": 94, + "to": 94 }, "text": "[R]evert file", "type": "diff_revert_selected_file" }, { "args": [ - "8e7903714919009004aad8754db0035fb47ecb24" + "f33f38a70b284207e092c2c578a24e96fdd1bd4d" ], - "display_line": 57, + "display_line": 94, "key": "A", "range": { - "from": 57, - "to": 57 + "from": 94, + "to": 94 }, "text": "Revert [A]ll", "type": "diff_revert_all" }, { "args": [ - "8e7903714919009004aad8754db0035fb47ecb24" + "f33f38a70b284207e092c2c578a24e96fdd1bd4d" ], - "display_line": 57, + "display_line": 94, "key": "D", "range": { - "from": 57, - "to": 57 + "from": 94, + "to": 94 }, "text": "[D]iff", "type": "diff_open" }, { "args": [ - "f33f38a70b284207e092c2c578a24e96fdd1bd4d" + "8e7903714919009004aad8754db0035fb47ecb24" ], - "display_line": 94, + "display_line": 57, "key": "R", "range": { - "from": 94, - "to": 94 + "from": 57, + "to": 57 }, "text": "[R]evert file", "type": "diff_revert_selected_file" }, { "args": [ - "f33f38a70b284207e092c2c578a24e96fdd1bd4d" + "8e7903714919009004aad8754db0035fb47ecb24" ], - "display_line": 94, + "display_line": 57, "key": "A", "range": { - "from": 94, - "to": 94 + "from": 57, + "to": 57 }, "text": "Revert [A]ll", "type": "diff_revert_all" }, { "args": [ - "f33f38a70b284207e092c2c578a24e96fdd1bd4d" + "8e7903714919009004aad8754db0035fb47ecb24" ], - "display_line": 94, + "display_line": 57, "key": "D", "range": { - "from": 94, - "to": 94 + "from": 57, + "to": 57 }, "text": "[D]iff", "type": "diff_open" @@ -11265,5 +11265,5 @@ "", "" ], - "timestamp": 1770933868 + "timestamp": 1770935235 } \ No newline at end of file diff --git a/tests/data/diff.expected.json b/tests/data/diff.expected.json index dd0bddc8..3c69cc2a 100644 --- a/tests/data/diff.expected.json +++ b/tests/data/diff.expected.json @@ -513,5 +513,5 @@ "", "" ], - "timestamp": 1770933868 + "timestamp": 1770935235 } \ No newline at end of file diff --git a/tests/data/markdown-codefence.expected.json b/tests/data/markdown-codefence.expected.json index aac2ffd1..1cd43e9d 100644 --- a/tests/data/markdown-codefence.expected.json +++ b/tests/data/markdown-codefence.expected.json @@ -854,5 +854,5 @@ "", "" ], - "timestamp": 1770933868 + "timestamp": 1770935236 } \ No newline at end of file diff --git a/tests/data/mentions-with-ranges.expected.json b/tests/data/mentions-with-ranges.expected.json index 980321f9..a852bfe4 100644 --- a/tests/data/mentions-with-ranges.expected.json +++ b/tests/data/mentions-with-ranges.expected.json @@ -512,5 +512,5 @@ "", "" ], - "timestamp": 1770933868 + "timestamp": 1770935236 } \ No newline at end of file diff --git a/tests/data/message-removal.expected.json b/tests/data/message-removal.expected.json index 47a69bc8..8205e831 100644 --- a/tests/data/message-removal.expected.json +++ b/tests/data/message-removal.expected.json @@ -354,5 +354,5 @@ "", "" ], - "timestamp": 1770933869 + "timestamp": 1770935236 } \ No newline at end of file diff --git a/tests/data/multiple-messages-synthetic.expected.json b/tests/data/multiple-messages-synthetic.expected.json index fdf79f29..27108582 100644 --- a/tests/data/multiple-messages-synthetic.expected.json +++ b/tests/data/multiple-messages-synthetic.expected.json @@ -495,5 +495,5 @@ "", "" ], - "timestamp": 1770933869 + "timestamp": 1770935236 } \ No newline at end of file diff --git a/tests/data/multiple-messages.expected.json b/tests/data/multiple-messages.expected.json index d6a12cd3..9deab52a 100644 --- a/tests/data/multiple-messages.expected.json +++ b/tests/data/multiple-messages.expected.json @@ -476,5 +476,5 @@ "", "" ], - "timestamp": 1770933869 + "timestamp": 1770935237 } \ No newline at end of file diff --git a/tests/data/multiple-question-ask-reply-all.expected.json b/tests/data/multiple-question-ask-reply-all.expected.json index c27c11fa..3c296b29 100644 --- a/tests/data/multiple-question-ask-reply-all.expected.json +++ b/tests/data/multiple-question-ask-reply-all.expected.json @@ -582,5 +582,5 @@ "", "" ], - "timestamp": 1770933869 + "timestamp": 1770935237 } \ No newline at end of file diff --git a/tests/data/multiple-question-ask.expected.json b/tests/data/multiple-question-ask.expected.json index ea88ec8b..5b528cf1 100644 --- a/tests/data/multiple-question-ask.expected.json +++ b/tests/data/multiple-question-ask.expected.json @@ -494,5 +494,5 @@ "", "" ], - "timestamp": 1770933870 + "timestamp": 1770935237 } \ No newline at end of file diff --git a/tests/data/perf.expected.json b/tests/data/perf.expected.json index 68b2e9ac..5fbf2c46 100644 --- a/tests/data/perf.expected.json +++ b/tests/data/perf.expected.json @@ -509,5 +509,5 @@ "", "" ], - "timestamp": 1770933870 + "timestamp": 1770935238 } \ No newline at end of file diff --git a/tests/data/permission-ask-new-approve.expected.json b/tests/data/permission-ask-new-approve.expected.json index b50b9141..150f0546 100644 --- a/tests/data/permission-ask-new-approve.expected.json +++ b/tests/data/permission-ask-new-approve.expected.json @@ -861,5 +861,5 @@ "", "" ], - "timestamp": 1770933871 + "timestamp": 1770935238 } \ No newline at end of file diff --git a/tests/data/permission-ask-new-deny.expected.json b/tests/data/permission-ask-new-deny.expected.json index d53a928f..44e5b746 100644 --- a/tests/data/permission-ask-new-deny.expected.json +++ b/tests/data/permission-ask-new-deny.expected.json @@ -372,5 +372,5 @@ "", "" ], - "timestamp": 1770933871 + "timestamp": 1770935238 } \ No newline at end of file diff --git a/tests/data/permission-ask-new.expected.json b/tests/data/permission-ask-new.expected.json index 3359c0ac..ad54b7ff 100644 --- a/tests/data/permission-ask-new.expected.json +++ b/tests/data/permission-ask-new.expected.json @@ -719,7 +719,7 @@ "----", "", "", - "** run** `Shows working tree status` 3311795s", + "** run** `Shows working tree status`", "", "`````bash", "> git status", @@ -745,5 +745,5 @@ "", "" ], - "timestamp": 1770933871 + "timestamp": 1770935239 } \ No newline at end of file diff --git a/tests/data/permission-prompt.expected.json b/tests/data/permission-prompt.expected.json index 55f9182e..537b1a4d 100644 --- a/tests/data/permission-prompt.expected.json +++ b/tests/data/permission-prompt.expected.json @@ -518,7 +518,7 @@ "", "Perfect! Now I understand how it works. The message headers have extmarks with `virt_text` where the first element contains the icon (either `header_user` or `header_assistant`). Let me check the output_window module to understand the extmark namespace:", "", - "** run** `Find extmark namespace usage` 10345010s", + "** run** `Find extmark namespace usage`", "", "`````bash", "> rg \"nvim_buf_get_extmarks|ns_id\" /Users/cam/Dev/neovim-dev/opencode.nvim/lua/opencode/ui/output_window.lua -B 2 -A 2", @@ -544,5 +544,5 @@ "", "" ], - "timestamp": 1770933871 + "timestamp": 1770935239 } \ No newline at end of file diff --git a/tests/data/permission.expected.json b/tests/data/permission.expected.json index 002171cd..2843ca0f 100644 --- a/tests/data/permission.expected.json +++ b/tests/data/permission.expected.json @@ -366,5 +366,5 @@ "", "" ], - "timestamp": 1770933872 + "timestamp": 1770935239 } \ No newline at end of file diff --git a/tests/data/planning.expected.json b/tests/data/planning.expected.json index 7ce44890..49c96c17 100644 --- a/tests/data/planning.expected.json +++ b/tests/data/planning.expected.json @@ -598,5 +598,5 @@ "", "" ], - "timestamp": 1770933872 + "timestamp": 1770935239 } \ No newline at end of file diff --git a/tests/data/question-ask-replied.expected.json b/tests/data/question-ask-replied.expected.json index 121070a9..b3a9730e 100644 --- a/tests/data/question-ask-replied.expected.json +++ b/tests/data/question-ask-replied.expected.json @@ -367,5 +367,5 @@ "", "" ], - "timestamp": 1770933872 + "timestamp": 1770935240 } \ No newline at end of file diff --git a/tests/data/question-ask.expected.json b/tests/data/question-ask.expected.json index 1629509a..bce8f336 100644 --- a/tests/data/question-ask.expected.json +++ b/tests/data/question-ask.expected.json @@ -494,5 +494,5 @@ "", "" ], - "timestamp": 1770933872 + "timestamp": 1770935240 } \ No newline at end of file diff --git a/tests/data/reasoning.expected.json b/tests/data/reasoning.expected.json index 48f43598..1aefd485 100644 --- a/tests/data/reasoning.expected.json +++ b/tests/data/reasoning.expected.json @@ -415,5 +415,5 @@ "", "" ], - "timestamp": 1770933873 + "timestamp": 1770935240 } \ No newline at end of file diff --git a/tests/data/redo-all.expected.json b/tests/data/redo-all.expected.json index 45e2cce1..4d56a057 100644 --- a/tests/data/redo-all.expected.json +++ b/tests/data/redo-all.expected.json @@ -2,117 +2,117 @@ "actions": [ { "args": [ - "d988cc85565b99017d40ad8baea20225165be9d5" + "57d83f5596cb1f142fbc681d3d93b7184f7f73cd" ], - "display_line": 90, + "display_line": 56, "key": "R", "range": { - "from": 90, - "to": 90 + "from": 56, + "to": 56 }, "text": "[R]evert file", "type": "diff_revert_selected_file" }, { "args": [ - "d988cc85565b99017d40ad8baea20225165be9d5" + "57d83f5596cb1f142fbc681d3d93b7184f7f73cd" ], - "display_line": 90, + "display_line": 56, "key": "A", "range": { - "from": 90, - "to": 90 + "from": 56, + "to": 56 }, "text": "Revert [A]ll", "type": "diff_revert_all" }, { "args": [ - "d988cc85565b99017d40ad8baea20225165be9d5" + "57d83f5596cb1f142fbc681d3d93b7184f7f73cd" ], - "display_line": 90, + "display_line": 56, "key": "D", "range": { - "from": 90, - "to": 90 + "from": 56, + "to": 56 }, "text": "[D]iff", "type": "diff_open" }, { "args": [ - "1b6ba655c6c0d899965adff278ac6320d5fc3b12" + "d988cc85565b99017d40ad8baea20225165be9d5" ], - "display_line": 22, + "display_line": 90, "key": "R", "range": { - "from": 22, - "to": 22 + "from": 90, + "to": 90 }, "text": "[R]evert file", "type": "diff_revert_selected_file" }, { "args": [ - "1b6ba655c6c0d899965adff278ac6320d5fc3b12" + "d988cc85565b99017d40ad8baea20225165be9d5" ], - "display_line": 22, + "display_line": 90, "key": "A", "range": { - "from": 22, - "to": 22 + "from": 90, + "to": 90 }, "text": "Revert [A]ll", "type": "diff_revert_all" }, { "args": [ - "1b6ba655c6c0d899965adff278ac6320d5fc3b12" + "d988cc85565b99017d40ad8baea20225165be9d5" ], - "display_line": 22, + "display_line": 90, "key": "D", "range": { - "from": 22, - "to": 22 + "from": 90, + "to": 90 }, "text": "[D]iff", "type": "diff_open" }, { "args": [ - "57d83f5596cb1f142fbc681d3d93b7184f7f73cd" + "1b6ba655c6c0d899965adff278ac6320d5fc3b12" ], - "display_line": 56, + "display_line": 22, "key": "R", "range": { - "from": 56, - "to": 56 + "from": 22, + "to": 22 }, "text": "[R]evert file", "type": "diff_revert_selected_file" }, { "args": [ - "57d83f5596cb1f142fbc681d3d93b7184f7f73cd" + "1b6ba655c6c0d899965adff278ac6320d5fc3b12" ], - "display_line": 56, + "display_line": 22, "key": "A", "range": { - "from": 56, - "to": 56 + "from": 22, + "to": 22 }, "text": "Revert [A]ll", "type": "diff_revert_all" }, { "args": [ - "57d83f5596cb1f142fbc681d3d93b7184f7f73cd" + "1b6ba655c6c0d899965adff278ac6320d5fc3b12" ], - "display_line": 56, + "display_line": 22, "key": "D", "range": { - "from": 56, - "to": 56 + "from": 22, + "to": 22 }, "text": "[D]iff", "type": "diff_open" @@ -1658,5 +1658,5 @@ "", "" ], - "timestamp": 1770933873 + "timestamp": 1770935241 } \ No newline at end of file diff --git a/tests/data/redo-once.expected.json b/tests/data/redo-once.expected.json index d1b32d1b..5521ae11 100644 --- a/tests/data/redo-once.expected.json +++ b/tests/data/redo-once.expected.json @@ -1148,5 +1148,5 @@ " test.txt: +1 -1", "" ], - "timestamp": 1770933874 + "timestamp": 1770935241 } \ No newline at end of file diff --git a/tests/data/revert.expected.json b/tests/data/revert.expected.json index 5314fa91..d8cb1c04 100644 --- a/tests/data/revert.expected.json +++ b/tests/data/revert.expected.json @@ -822,5 +822,5 @@ " poem.md: -20", "" ], - "timestamp": 1770933874 + "timestamp": 1770935242 } \ No newline at end of file diff --git a/tests/data/selection.expected.json b/tests/data/selection.expected.json index 6af0f0c5..f33c1ddb 100644 --- a/tests/data/selection.expected.json +++ b/tests/data/selection.expected.json @@ -419,5 +419,5 @@ "", "" ], - "timestamp": 1770933874 + "timestamp": 1770935242 } \ No newline at end of file diff --git a/tests/data/shifting-and-multiple-perms.expected.json b/tests/data/shifting-and-multiple-perms.expected.json index 5c164350..9606424f 100644 --- a/tests/data/shifting-and-multiple-perms.expected.json +++ b/tests/data/shifting-and-multiple-perms.expected.json @@ -1165,11 +1165,11 @@ "----", "", "", - "** edit** `/Users/cam/Dev/neovim-dev/opencode.nvim/lua/opencode/ui/renderer.lua` 10270589s", + "** edit** `/Users/cam/Dev/neovim-dev/opencode.nvim/lua/opencode/ui/renderer.lua`", "", - "** edit** `/Users/cam/Dev/neovim-dev/opencode.nvim/lua/opencode/ui/renderer.lua` 10270587s", + "** edit** `/Users/cam/Dev/neovim-dev/opencode.nvim/lua/opencode/ui/renderer.lua`", "", - "** edit** `/Users/cam/Dev/neovim-dev/opencode.nvim/lua/opencode/ui/renderer.lua` 10270580s", + "** edit** `/Users/cam/Dev/neovim-dev/opencode.nvim/lua/opencode/ui/renderer.lua`", "", "----", "", @@ -1200,5 +1200,5 @@ "", "" ], - "timestamp": 1770933875 + "timestamp": 1770935242 } \ No newline at end of file diff --git a/tests/data/simple-session.expected.json b/tests/data/simple-session.expected.json index e1a56b6d..065a4847 100644 --- a/tests/data/simple-session.expected.json +++ b/tests/data/simple-session.expected.json @@ -247,5 +247,5 @@ "", "" ], - "timestamp": 1770933875 + "timestamp": 1770935243 } \ No newline at end of file diff --git a/tests/data/tool-invalid.expected.json b/tests/data/tool-invalid.expected.json index b1bc172c..9b36fdae 100644 --- a/tests/data/tool-invalid.expected.json +++ b/tests/data/tool-invalid.expected.json @@ -189,5 +189,5 @@ "", "" ], - "timestamp": 1770933875 + "timestamp": 1770935243 } \ No newline at end of file diff --git a/tests/data/updating-text.expected.json b/tests/data/updating-text.expected.json index de0bdacb..c60a7024 100644 --- a/tests/data/updating-text.expected.json +++ b/tests/data/updating-text.expected.json @@ -254,5 +254,5 @@ "", "" ], - "timestamp": 1770933875 + "timestamp": 1770935243 } \ No newline at end of file