agent sessions: show conversations, not storage ghosts
This commit is contained in:
parent
12da479c23
commit
dd19ab227f
2 changed files with 31 additions and 10 deletions
|
|
@ -152,12 +152,20 @@ souveraine_json() {
|
|||
local out="[]"
|
||||
while IFS= read -r f; do
|
||||
[ -n "$f" ] || continue
|
||||
local s
|
||||
s=$(jq -c '
|
||||
if .archived == true then empty else {
|
||||
local s agent_id parent_id agent_name
|
||||
agent_id=$(jq -r '.agent_id // empty' "$f" 2>/dev/null)
|
||||
parent_id=${agent_id%-sub}
|
||||
agent_name=$(jq -r '.name // empty' "$dir/$parent_id/agent.json" 2>/dev/null)
|
||||
[ -n "$agent_name" ] || agent_name="Souveraine"
|
||||
s=$(jq -c --arg agentName "$agent_name" '
|
||||
# A zero-message record is a newly-minted conversation slot, not
|
||||
# an agent session. Rendering it made every panel restart add a
|
||||
# plausible-looking ghost row.
|
||||
if .archived == true or (.message_count // 0) == 0 then empty else {
|
||||
provider: "souveraine",
|
||||
id: (.id // ""),
|
||||
agentId: (.agent_id // ""),
|
||||
agentName: $agentName,
|
||||
cwd: "",
|
||||
model: "",
|
||||
lastActivity: (.last_message_at // .updated_at // ""),
|
||||
|
|
@ -187,6 +195,7 @@ SOUV=$(souveraine_json); [ -n "$SOUV" ] || SOUV='{"available":false,"er
|
|||
# timestamps would be a guess wearing the costume of a measurement.
|
||||
jq -c -n \
|
||||
--argjson now "$NOW" \
|
||||
--argjson window "$((WINDOW_MIN * 60))" \
|
||||
--argjson claude "$CLAUDE" \
|
||||
--argjson codex "$CODEX" \
|
||||
--argjson souv "$SOUV" '
|
||||
|
|
@ -207,6 +216,10 @@ jq -c -n \
|
|||
else "idle" end;
|
||||
( ($claude.sessions // []) + ($codex.sessions // []) + ($souv.sessions // []) )
|
||||
| map(. + {state: state($now), age: ($now - (.lastActivity | epoch))})
|
||||
# `find -mmin` is only the cheap filesystem prefilter. Restores and copies
|
||||
# can touch a May record today; enforce the promised window against the
|
||||
# the record timestamp before anything calls it a current session.
|
||||
| map(select(.age >= 0 and .age <= $window))
|
||||
| sort_by(.age)
|
||||
as $all
|
||||
| {
|
||||
|
|
@ -214,9 +227,9 @@ jq -c -n \
|
|||
sessions: $all,
|
||||
active: ($all | map(select(.state == "active")) | length),
|
||||
providers: {
|
||||
claude: ($claude | del(.sessions)) + {sessions: ($claude.sessions // [] | length)},
|
||||
codex: ($codex | del(.sessions)) + {sessions: ($codex.sessions // [] | length)},
|
||||
souveraine: ($souv | del(.sessions)) + {sessions: ($souv.sessions // [] | length)}
|
||||
claude: ($claude | del(.sessions)) + {sessions: ($all | map(select(.provider == "claude")) | length)},
|
||||
codex: ($codex | del(.sessions)) + {sessions: ($all | map(select(.provider == "codex")) | length)},
|
||||
souveraine: ($souv | del(.sessions)) + {sessions: ($all | map(select(.provider == "souveraine")) | length)}
|
||||
}
|
||||
}' 2>/dev/null \
|
||||
|| printf '{"ts":%s,"sessions":[],"active":0,"providers":{"claude":{"available":false,"error":"merge failed"},"codex":{"available":false,"error":"merge failed"},"souveraine":{"available":false,"error":"merge failed"}}}\n' "$NOW"
|
||||
|
|
|
|||
Loading…
Reference in a new issue