summaryrefslogtreecommitdiff
path: root/panto-herdr
diff options
context:
space:
mode:
authort <t@tjp.lol>2026-09-01 12:00:53 -0600
committert <t@tjp.lol>2026-09-02 08:30:29 -0600
commit9d6b9a68f3df389a68b6b2cd69d17e01b81024dd (patch)
tree24e921ac74663ed0c14534be276dc2a85c403bc9 /panto-herdr
parent04791c3273ab7076cc53f146d7751670d86c5c9b (diff)
Keep Herdr working until all activity finishesHEADmain
Track foreground turns and balanced background-work events independently so Herdr only reports idle after the primary and every background task settle.
Diffstat (limited to 'panto-herdr')
-rw-r--r--panto-herdr/init.lua51
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,
}