summaryrefslogtreecommitdiff
path: root/lua/99/init.lua
diff options
context:
space:
mode:
authorThePrimeagen <the.primeagen@gmail.com>2026-02-08 18:49:37 -0800
committerGitHub <noreply@github.com>2026-02-08 18:49:37 -0800
commita5b4412a896824eadd22f73a4cbfb3fdeaebd209 (patch)
treec71f5be3adcfd0b8b61cb8a74d8a81a1b3daeb94 /lua/99/init.lua
parente4050fe6164765202814b353db43da75c1947af6 (diff)
parenta303021d63507e3949d43a41d77d80c3e74fdbd1 (diff)
downloada4-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.lua85
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