17d56d0e01
Clean break, no compatibility alias. Renames the product name, the CLI binary (`ccam` -> `agenthub`), the env var prefix (`CCAM_` -> `AGENTHUB_`), the Prometheus metric namespace (`ccam_*` -> `agenthub_*`), the tmux session prefix (`ccam-lane-<id>` -> `agenthub-lane-<id>`), the per-repo runtime profile directory (`.ccam/profile` -> `.agenthub/profile`), the lanes state root (`~/.claude/ccam-lanes` -> `~/.claude/agenthub-lanes`), the bundled plugins (`plugins/ccam*` -> `plugins/agenthub*`) and their slash commands (`/ccam-doctor` -> `/agenthub-doctor`, `/ccam:*` -> `/agenthub:*`). Because there is no alias, an existing install has to be updated by hand: rename its `.ccam/profile` directory and any `CCAM_*` variables, and reinstall the plugin under its new name. Two other name families are deliberately left alone here, since they are not just strings: the `Claude-Code-Monitor` repository/marketplace name, and the `agent-dashboard` npm package plus its `~/.claude/agent-dashboard` runtime directory, which holds the live database and needs a migration rather than a rename. Verified: server 1406/1406, client 459/459, `grep -i ccam` clean across tracked files, `openapi.yaml` regenerated (95 paths, unchanged count).
62 lines
2.6 KiB
Markdown
62 lines
2.6 KiB
Markdown
---
|
||
description: >
|
||
Render an ordered timeline of one Claude Code session's events (every event type)
|
||
with per-event durations and tool names, reconstructed from Agent Monitor data.
|
||
Pairs PreToolUse with PostToolUse to compute tool durations and surfaces gaps,
|
||
errors, and compaction points. Use when reconstructing what happened in a session
|
||
step by step.
|
||
---
|
||
|
||
# Session Timeline
|
||
|
||
Reconstruct the chronological event timeline of a single Claude Code session.
|
||
|
||
## Input
|
||
|
||
The user provides: **$ARGUMENTS**
|
||
|
||
- A **session ID** to time-line, or
|
||
- "latest" / "last" for the most recent session.
|
||
|
||
## Data Sources
|
||
|
||
| Endpoint | Returns |
|
||
|----------|---------|
|
||
| `GET /api/sessions/:id` | session header: status, model, cwd, started_at, ended_at, cost, metadata (thinking_blocks, turn_count, total_turn_duration_ms) — and nested events |
|
||
| `GET /api/events?session_id=X` | the full event stream: event_type (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, Notification, Compaction, APIError, TurnDuration), tool_name, summary, data, timestamp |
|
||
|
||
## Report Sections
|
||
|
||
### 1. Resolve & header
|
||
If "latest", `GET /api/sessions?limit=1` to get the id, then `GET /api/sessions/:id`.
|
||
Print a one-line header: id, status, model, cwd basename, started_at → ended_at,
|
||
turn_count, total_turn_duration_ms, cost.
|
||
|
||
### 2. Build the ordered timeline
|
||
`GET /api/events?session_id=X`. Sort strictly by `timestamp`. For each event emit a
|
||
row with: relative offset from `started_at` (e.g. `+00:03.412`), event_type,
|
||
tool_name (when present), and a one-line `summary`.
|
||
|
||
### 3. Compute durations
|
||
Pair each `PreToolUse` with its matching `PostToolUse` (same tool_name, next
|
||
occurrence) and show the tool's wall-clock duration. For `TurnDuration` events use
|
||
the recorded duration directly. Flag any `PreToolUse` with no matching `PostToolUse`
|
||
as **unclosed**.
|
||
|
||
### 4. Annotate notable points
|
||
Mark `APIError` (❌), `Compaction` (⚠️ context compressed), `SubagentStop`
|
||
(subagent finished), `Notification` (ℹ️), and any timeline gap > 30s between
|
||
consecutive events as an idle window.
|
||
|
||
### 5. Tallies
|
||
Event count by type, total tool time vs. session wall time, and the longest single
|
||
tool call.
|
||
|
||
## Output
|
||
|
||
A Markdown table — `offset | event_type | tool_name | duration | summary` — in
|
||
strict timestamp order, preceded by the header line and followed by the tallies.
|
||
Durations in ms or `mm:ss.mmm`; currency as USD to 4 decimal places. Never invent a
|
||
duration when a PostToolUse is missing — label it `unclosed`. If the dashboard is
|
||
unreachable, tell the user to start it with `npm start` from the repo root.
|