chore(beans): mark Wave 2 tickets completed
Mark claudbg-uls1, claudbg-g5uv, claudbg-jupi, claudbg-76fy, claudbg-d3aj as completed with implementation summaries. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>main
parent
fb18b64621
commit
2acab9c179
@ -1,12 +1,14 @@
|
||||
---
|
||||
# claudbg-76fy
|
||||
title: Implement JSONL session file reader
|
||||
status: in-progress
|
||||
status: completed
|
||||
type: task
|
||||
priority: normal
|
||||
created_at: 2026-03-27T19:39:15Z
|
||||
updated_at: 2026-03-28T05:45:28Z
|
||||
updated_at: 2026-03-28T17:30:25Z
|
||||
parent: claudbg-mztt
|
||||
---
|
||||
|
||||
Async function that reads a .jsonl file line by line using tokio, deserializes each line into SessionEntry, and skips/logs malformed lines gracefully. Must handle partial last lines (live session writes).
|
||||
|
||||
## Summary of Changes\n\nCreated src/parser/reader.rs with async read_session_file(path: &Path) -> Result<Vec<RawEntry>>. Uses tokio::fs::File and tokio::io::BufReader with lines() iterator. Skips empty lines, skips unparseable lines with eprintln\! warning, returns Err(AppError::Io) for missing files. All 4 required unit tests pass (two valid lines, one valid + one invalid, empty file, nonexistent path).
|
||||
|
||||
@ -1,11 +1,14 @@
|
||||
---
|
||||
# claudbg-d3aj
|
||||
title: Session statistics computation
|
||||
status: todo
|
||||
status: completed
|
||||
type: task
|
||||
priority: normal
|
||||
created_at: 2026-03-27T19:39:15Z
|
||||
updated_at: 2026-03-27T19:39:15Z
|
||||
updated_at: 2026-03-28T17:31:49Z
|
||||
parent: claudbg-mztt
|
||||
---
|
||||
|
||||
Given a parsed list of SessionEntries, compute: total input/output/cache tokens (sum across all assistant message usage fields), tool call counts keyed by tool name, session duration (sum of durationMs from system messages with subtype=turn_duration), model (from first assistant message). Return a SessionStats struct.
|
||||
|
||||
## Summary of Changes\n\nCreated src/models/stats.rs with SessionStats struct (token counts, tool_calls HashMap, duration_ms, model, message counts) and compute_stats(entries: &[RawEntry]) -> SessionStats. Accumulates usage from assistant messages, counts tool_use blocks by name, sums duration_ms from system entries, captures model from first assistant message. All 4 required unit tests pass.
|
||||
|
||||
@ -1,12 +1,14 @@
|
||||
---
|
||||
# claudbg-g5uv
|
||||
title: Session file discovery
|
||||
status: in-progress
|
||||
status: completed
|
||||
type: task
|
||||
priority: normal
|
||||
created_at: 2026-03-27T19:39:15Z
|
||||
updated_at: 2026-03-28T05:43:18Z
|
||||
updated_at: 2026-03-28T05:48:59Z
|
||||
parent: claudbg-mztt
|
||||
---
|
||||
|
||||
Walk ~/.claude/projects/ to enumerate all session .jsonl files. Decode URL-encoded directory names (e.g. -run-media-pop-... → /run/media/pop/...) to recover the project path. Return a list of SessionRef { session_id: Uuid, project_path: PathBuf, file_path: PathBuf, modified_at: SystemTime }.
|
||||
|
||||
## Summary of Changes\n\nCreated src/parser/discovery.rs with SessionRef struct and discover_sessions() function. Walks ~/.claude/projects/ one level deep, collects *.jsonl files (skipping subagents/ dirs), extracts session_id from filename stem, reads project_path from first parseable JSONL line cwd field. Uses HOME env var for path expansion. Skips unreadable files with eprintln\! warnings. Created src/parser/mod.rs and updated src/lib.rs to expose pub mod parser.
|
||||
|
||||
@ -1,12 +1,14 @@
|
||||
---
|
||||
# claudbg-jupi
|
||||
title: Sub-agent file discovery
|
||||
status: in-progress
|
||||
status: completed
|
||||
type: task
|
||||
priority: normal
|
||||
created_at: 2026-03-27T19:39:15Z
|
||||
updated_at: 2026-03-28T05:45:22Z
|
||||
updated_at: 2026-03-28T06:07:11Z
|
||||
parent: claudbg-mztt
|
||||
---
|
||||
|
||||
Given a session ID, locate its subagents/ directory under ~/.claude/projects/{project-dir}/{session-id}/subagents/. Enumerate agent-{id}.jsonl files and their corresponding .meta.json files. Return AgentRef { agent_id: String, agent_type: Option<String>, session_id: Uuid, file_path: PathBuf }.
|
||||
|
||||
## Summary of Changes\n\nExtended src/parser/discovery.rs with AgentRef struct, discover_agents_for_session(session_file: &Path) that looks in sibling subagents/ directory, and discover_all_agents() that walks all project dirs. collect_agents_in_dir() helper handles filename parsing (agent-{uuid}.jsonl), reads session_id from first JSONL line, and reads agent_type from agent-{id}.meta.json if present.
|
||||
|
||||
@ -1,11 +1,14 @@
|
||||
---
|
||||
# claudbg-uls1
|
||||
title: Define Rust types for JSONL schema
|
||||
status: todo
|
||||
status: completed
|
||||
type: task
|
||||
priority: normal
|
||||
created_at: 2026-03-27T19:39:15Z
|
||||
updated_at: 2026-03-27T19:39:15Z
|
||||
updated_at: 2026-03-28T05:43:10Z
|
||||
parent: claudbg-mztt
|
||||
---
|
||||
|
||||
Model the full JSONL schema as serde-deserializable Rust types: SessionEntry enum (user/assistant/system/progress/file-history-snapshot/queue-operation), AssistantContent enum (text/thinking/tool_use), UserContent enum (text/tool_result/image), Usage struct, ToolUseInput, SystemMessage subtypes, ProgressData. All fields should match the on-disk schema discovered from ~/.claude/projects/.
|
||||
|
||||
## Summary of Changes\n\nCreated src/models/session.rs with permissive RawEntry (uses flatten for unknown fields), Message, MessageContent (untagged enum with Blocks first, Text second), ContentBlock (tagged enum with snake_case, includes Unknown catch-all), Usage, and SystemMessage types. Created src/models/stats.rs with SessionStats struct and compute_stats() function. Created src/models/mod.rs declaring both submodules. Updated src/lib.rs to expose pub mod models. All 4 required unit tests pass.
|
||||
|
||||
Loading…
Reference in New Issue