diff options
| author | ThePrimeagen <the.primeagen@gmail.com> | 2026-02-08 18:49:37 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-02-08 18:49:37 -0800 |
| commit | a5b4412a896824eadd22f73a4cbfb3fdeaebd209 (patch) | |
| tree | c71f5be3adcfd0b8b61cb8a74d8a81a1b3daeb94 /lua/99/init.lua | |
| parent | e4050fe6164765202814b353db43da75c1947af6 (diff) | |
| parent | a303021d63507e3949d43a41d77d80c3e74fdbd1 (diff) | |
| download | a4-a5b4412a896824eadd22f73a4cbfb3fdeaebd209.tar.xz a4-a5b4412a896824eadd22f73a4cbfb3fdeaebd209.zip | |
Merge branch 'master' into back-that-hash-up
Diffstat (limited to 'lua/99/init.lua')
| -rw-r--r-- | lua/99/init.lua | 85 |
1 files changed, 83 insertions, 2 deletions
diff --git a/lua/99/init.lua b/lua/99/init.lua index 4f27543..f983fb1 100644 --- a/lua/99/init.lua +++ b/lua/99/init.lua @@ -12,6 +12,7 @@ local Extensions = require("99.extensions") local Agents = require("99.extensions.agents") local Providers = require("99.providers") local time = require("99.time") +local Throbber = require("99.ops.throbber") ---@param path_or_rule string | _99.Agents.Rule ---@return _99.Agents.Rule | string @@ -54,12 +55,14 @@ end --- @class _99.ActiveRequest --- @field clean_up _99.Cleanup --- @field request_id number +--- @field name string --- @class _99.StateProps --- @field model string --- @field md_files string[] --- @field prompts _99.Prompts --- @field ai_stdout_rows number +--- @field show_in_flight_requests boolean --- @field languages string[] --- @field display_errors boolean --- @field auto_add_skills boolean @@ -76,6 +79,7 @@ local function create_99_state() md_files = {}, prompts = require("99.prompt-settings"), ai_stdout_rows = 3, + show_in_flight_requests = false, languages = { "lua", "go", "java", "elixir", "cpp", "ruby" }, display_errors = false, provider_override = nil, @@ -95,6 +99,7 @@ end --- @class _99.Options --- @field logger _99.Logger.Options? --- @field model string? +--- @field show_in_flight_requests boolean? --- @field md_files string[]? --- @field provider _99.Providers.BaseProvider? --- @field debug_log_prefix string? @@ -112,6 +117,9 @@ end --- @field ai_stdout_rows number --- @field languages string[] --- @field display_errors boolean +--- @field show_in_flight_requests boolean +--- @field show_in_flight_requests_window _99.window.Window | nil +--- @field show_in_flight_requests_throbber _99.Throbber | nil --- @field provider_override _99.Providers.BaseProvider? --- @field auto_add_skills boolean --- @field rules _99.Agents.Rules @@ -119,6 +127,7 @@ end --- @field __view_log_idx number --- @field __request_history _99.RequestEntry[] --- @field __request_by_id table<number, _99.RequestEntry> +--- @field __active_marks _99.Mark[] local _99_State = {} _99_State.__index = _99_State @@ -207,17 +216,24 @@ end local _active_request_id = 0 ---@param clean_up _99.Cleanup ---@param request_id number +---@param name string ---@return number -function _99_State:add_active_request(clean_up, request_id) +function _99_State:add_active_request(clean_up, request_id, name) _active_request_id = _active_request_id + 1 Logger:debug("adding active request", "id", _active_request_id) self.__active_requests[_active_request_id] = { clean_up = clean_up, request_id = request_id, + name = name, } return _active_request_id end +--- @param mark _99.Mark +function _99_State:add_mark(mark) + table.insert(self.__active_marks, mark) +end + function _99_State:active_request_count() local count = 0 for _ in pairs(self.__active_requests) do @@ -413,6 +429,13 @@ function _99.stop_all_requests() _99_state.__active_requests = {} end +function _99.clear_all_marks() + for _, mark in ipairs(_99_state.__active_marks or {}) do + mark:delete() + end + _99_state.__active_marks = {} +end + function _99.previous_requests_to_qfix() local items = {} for _, entry in ipairs(_99_state.__request_history) do @@ -437,11 +460,66 @@ function _99.__get_state() return _99_state end +local function shut_down_in_flight_requests_window() + if _99_state.show_in_flight_requests_throbber then + _99_state.show_in_flight_requests_throbber:stop() + end + + local win = _99_state.show_in_flight_requests_window + if win ~= nil then + Window.close(win) + end + _99_state.show_in_flight_requests_window = nil + _99_state.show_in_flight_requests_throbber = nil +end + +local function show_in_flight_requests() + if _99_state.show_in_flight_requests == false then + return + end + vim.defer_fn(show_in_flight_requests, 1000) + + Window.refresh_active_windows() + local current_win = _99_state.show_in_flight_requests_window + if current_win ~= nil and not Window.is_active_window(current_win) then + shut_down_in_flight_requests_window() + end + + if Window.has_active_windows() or _99_state:active_request_count() == 0 then + return + end + + if _99_state.show_in_flight_requests_window == nil then + local win = Window.status_window() + local throb = Throbber.new(function(throb) + local count = _99_state:active_request_count() + if count == 0 or not Window.valid(win) then + return shut_down_in_flight_requests_window() + end + + local lines = { + throb .. " requests(" .. tostring(count) .. ") " .. throb, + } + for _, r in pairs(_99_state.__active_requests) do + table.insert(lines, r.name) + end + + Window.resize(win, #lines[1], #lines) + vim.api.nvim_buf_set_lines(win.buf_id, 0, 1, false, lines) + end) + _99_state.show_in_flight_requests_window = win + _99_state.show_in_flight_requests_throbber = throb + + throb:start() + end +end + --- @param opts _99.Options? function _99.setup(opts) opts = opts or {} _99_state = _99_State.new() + _99_state.show_in_flight_requests = opts.show_in_flight_requests or false _99_state.provider_override = opts.provider _99_state.completion = opts.completion or { @@ -489,6 +567,10 @@ function _99.setup(opts) Languages.initialize(_99_state) Extensions.init(_99_state) Extensions.capture_project_root() + + if _99_state.show_in_flight_requests then + show_in_flight_requests() + end end --- @param md string @@ -525,5 +607,4 @@ function _99.__debug() end _99.Providers = Providers - return _99 |
