diff options
Diffstat (limited to 'panto-herdr/init.lua')
| -rw-r--r-- | panto-herdr/init.lua | 51 |
1 files changed, 43 insertions, 8 deletions
diff --git a/panto-herdr/init.lua b/panto-herdr/init.lua index cc0b527..b3d30be 100644 --- a/panto-herdr/init.lua +++ b/panto-herdr/init.lua @@ -17,6 +17,9 @@ return { local seq = os.time() * 1000000 local last_state local last_status + local foreground_working = false + local foreground_status + local background_work = 0 local function spawn(args) local handle @@ -57,16 +60,48 @@ return { }) end - panto.ext.on("session_start", function() report("idle") end) - panto.ext.on("session_ready", function() report("idle") end) - panto.ext.on("user_message", function() report("working", "thinking") end) - panto.ext.on("thinking", function() report("working", "thinking") end) - panto.ext.on("compaction", function() report("working", "compacting") end) + local function update_idle_state() + if foreground_working or background_work > 0 then + report("working", foreground_working and foreground_status or "background") + else + report("idle") + end + end + + local function foreground(status) + foreground_working, foreground_status = true, status + report("working", status) + end + + panto.ext.on("session_start", function() + foreground_working, foreground_status, background_work = false, nil, 0 + report("idle") + end) + panto.ext.on("session_ready", function() + foreground_working, foreground_status = false, nil + update_idle_state() + end) + panto.ext.on("turn_start", function() foreground("thinking") end) + panto.ext.on("agent_submission", function() foreground("thinking") end) + panto.ext.on("user_message", function() foreground("thinking") end) + panto.ext.on("thinking", function() foreground("thinking") end) + panto.ext.on("compaction", function() foreground("compacting") end) panto.ext.on("tool_details", function(event) - report("working", tool_status(event.tool_name)) + foreground(tool_status(event.tool_name)) + end) + panto.ext.on("assistant_text", function() foreground("responding") end) + panto.ext.on("turn_end", function() + foreground_working, foreground_status = false, nil + update_idle_state() + end) + panto.ext.on("background_work_start", function() + background_work = background_work + 1 + update_idle_state() + end) + panto.ext.on("background_work_end", function() + background_work = math.max(0, background_work - 1) + update_idle_state() end) - panto.ext.on("assistant_text", function() report("working", "responding") end) - panto.ext.on("assistant_text_complete", function() report("idle") end) panto.ext.on("session_end", release) end, } |
