claude-code-log 1.1.1__tar.gz → 1.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/.claude/skills/tool-renderer/SKILL.md +27 -1
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/.github/workflows/ci.yml +3 -3
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/CHANGELOG.md +52 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/CLAUDE.md +31 -6
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/CONTRIBUTING.md +31 -8
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/PKG-INFO +37 -1
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/README.md +36 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/cache.py +167 -24
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/cli.py +155 -11
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/converter.py +1011 -143
- claude_code_log-1.3.0/claude_code_log/dag.py +1037 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/factories/__init__.py +21 -0
- claude_code_log-1.3.0/claude_code_log/factories/agent_metadata_factory.py +107 -0
- claude_code_log-1.3.0/claude_code_log/factories/attachment_factory.py +126 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/factories/meta_factory.py +2 -0
- claude_code_log-1.3.0/claude_code_log/factories/system_factory.py +158 -0
- claude_code_log-1.3.0/claude_code_log/factories/task_notification_factory.py +161 -0
- claude_code_log-1.3.0/claude_code_log/factories/teammate_factory.py +140 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/factories/tool_factory.py +520 -2
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/factories/transcript_factory.py +19 -3
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/factories/user_factory.py +104 -3
- claude_code_log-1.3.0/claude_code_log/html/async_formatter.py +175 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/renderer.py +545 -16
- claude_code_log-1.3.0/claude_code_log/html/system_formatters.py +299 -0
- claude_code_log-1.3.0/claude_code_log/html/teammate_formatter.py +568 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/filter_styles.css +4 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/global_styles.css +106 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/message_styles.css +214 -5
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/project_card_styles.css +25 -1
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/search.html +10 -5
- claude_code_log-1.3.0/claude_code_log/html/templates/components/session_nav.html +70 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/session_nav_styles.css +108 -0
- claude_code_log-1.3.0/claude_code_log/html/templates/components/teammate_styles.css +374 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/timeline.html +23 -3
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/index.html +15 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/transcript.html +145 -3
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/tool_formatters.py +255 -3
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/user_formatters.py +42 -5
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/utils.py +164 -6
- claude_code_log-1.3.0/claude_code_log/json/__init__.py +5 -0
- claude_code_log-1.3.0/claude_code_log/json/renderer.py +222 -0
- claude_code_log-1.3.0/claude_code_log/markdown/renderer.py +1875 -0
- claude_code_log-1.3.0/claude_code_log/migrations/004_html_pagination_variant.sql +69 -0
- claude_code_log-1.3.0/claude_code_log/migrations/005_session_team_name.sql +14 -0
- claude_code_log-1.3.0/claude_code_log/migrations/006_session_ai_title.sql +14 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/models.py +761 -3
- claude_code_log-1.3.0/claude_code_log/renderer.py +4305 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/tui.py +35 -27
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/utils.py +91 -59
- claude_code_log-1.3.0/dev-docs/agents.md +191 -0
- claude_code_log-1.3.0/dev-docs/application_model.md +448 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/css-classes.md +5 -0
- claude_code_log-1.3.0/dev-docs/dag.md +702 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/implementing-a-tool-renderer.md +17 -0
- claude_code_log-1.1.1/dev-docs/FOLD_STATE_DIAGRAM.md → claude_code_log-1.3.0/dev-docs/message-hierarchy.md +16 -12
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages.md +80 -5
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/rendering-architecture.md +44 -8
- claude_code_log-1.3.0/dev-docs/teammates.md +978 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/justfile +18 -20
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/pyproject.toml +6 -1
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/uv.lock +1 -1
- claude_code_log-1.3.0/work/async-agents.md +215 -0
- claude_code_log-1.3.0/work/refactor-reindex-with-ghosting.md +164 -0
- {claude_code_log-1.1.1/dev-docs → claude_code_log-1.3.0/work}/rendering-next.md +2 -2
- claude_code_log-1.3.0/work/session-state-propagation.md +233 -0
- claude_code_log-1.1.1/.github/workflows/claude.yml +0 -67
- claude_code_log-1.1.1/claude_code_log/factories/system_factory.py +0 -87
- claude_code_log-1.1.1/claude_code_log/html/system_formatters.py +0 -98
- claude_code_log-1.1.1/claude_code_log/html/templates/components/session_nav.html +0 -39
- claude_code_log-1.1.1/claude_code_log/markdown/renderer.py +0 -974
- claude_code_log-1.1.1/claude_code_log/renderer.py +0 -2329
- claude_code_log-1.1.1/dev-docs/restoring-archived-sessions.md +0 -105
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/.claude/settings.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/.gitignore +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/.vscode/settings.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/LICENSE +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/__init__.py +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/factories/assistant_factory.py +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/__init__.py +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/ansi_colors.py +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/assistant_formatters.py +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/renderer_code.py +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/edit_diff_styles.css +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/page_nav_styles.css +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/pygments_styles.css +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/search_inline.html +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/search_inline_script.html +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/search_results_panel.html +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/search_styles.css +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/timeline_styles.css +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/timezone_converter.js +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/todo_styles.css +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/image_export.py +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/markdown/__init__.py +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/migrations/001_initial_schema.sql +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/migrations/002_html_cache.sql +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/migrations/003_html_pagination.sql +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/migrations/__init__.py +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/migrations/runner.py +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/parser.py +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/py.typed +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/renderer_timings.py +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/assistant/assistant.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/assistant/assistant.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/assistant/assistant_sidechain.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/assistant/assistant_sidechain.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/assistant/thinking.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/assistant/thinking.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/system/file_history_snapshot.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/system/file_history_snapshot.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/system/queue_operation.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/system/queue_operation.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/system/summary.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/system/summary.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/system/system_info.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/system/system_info.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/AskUserQuestion-tool_result.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/AskUserQuestion-tool_result.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/AskUserQuestion-tool_result_error.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/AskUserQuestion-tool_result_error.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/AskUserQuestion-tool_use.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/AskUserQuestion-tool_use.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Bash-tool_result.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Bash-tool_result.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Bash-tool_result_error.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Bash-tool_result_error.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Bash-tool_use.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Bash-tool_use.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/BashOutput-tool_result.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/BashOutput-tool_result.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/BashOutput-tool_use.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/BashOutput-tool_use.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Edit-tool_result.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Edit-tool_result.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Edit-tool_result_error.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Edit-tool_result_error.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Edit-tool_use.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Edit-tool_use.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/ExitPlanMode-tool_result.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/ExitPlanMode-tool_result.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/ExitPlanMode-tool_result_error.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/ExitPlanMode-tool_result_error.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/ExitPlanMode-tool_use.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/ExitPlanMode-tool_use.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Glob-tool_result.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Glob-tool_result.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Glob-tool_use.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Glob-tool_use.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Grep-tool_result.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Grep-tool_result.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Grep-tool_use.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Grep-tool_use.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/KillShell-tool_result.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/KillShell-tool_result.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/KillShell-tool_result_error.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/KillShell-tool_result_error.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/KillShell-tool_use.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/KillShell-tool_use.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/LS-tool_result.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/LS-tool_result.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/LS-tool_use.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/LS-tool_use.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/MultiEdit-tool_result.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/MultiEdit-tool_result.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/MultiEdit-tool_result_error.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/MultiEdit-tool_result_error.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/MultiEdit-tool_use.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/MultiEdit-tool_use.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Read-tool_result.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Read-tool_result.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Read-tool_result_error.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Read-tool_result_error.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Read-tool_use.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Read-tool_use.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Task-tool_result.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Task-tool_result.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Task-tool_use.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Task-tool_use.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/TodoWrite-tool_result.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/TodoWrite-tool_result.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/TodoWrite-tool_use.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/TodoWrite-tool_use.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/WebFetch-tool_result.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/WebFetch-tool_result.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/WebFetch-tool_use.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/WebFetch-tool_use.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/WebSearch-tool_result.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/WebSearch-tool_result.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/WebSearch-tool_use.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/WebSearch-tool_use.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Write-tool_result.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Write-tool_result.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Write-tool_result_error.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Write-tool_result_error.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Write-tool_use.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Write-tool_use.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/exit_plan_mode-tool_result.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/exit_plan_mode-tool_result.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/exit_plan_mode-tool_use.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/exit_plan_mode-tool_use.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/user/bash_input.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/user/bash_input.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/user/bash_output.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/user/bash_output.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/user/command_output.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/user/command_output.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/user/image.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/user/image.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/user/user.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/user/user.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/user/user_command.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/user/user_command.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/user/user_sidechain.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/user/user_sidechain.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/user/user_slash_command.json +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/user/user_slash_command.jsonl +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/mise.toml +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/stubs/pygments/__init__.pyi +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/stubs/pygments/formatter.pyi +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/stubs/pygments/formatters/__init__.pyi +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/stubs/pygments/lexer.pyi +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/stubs/pygments/lexers/__init__.pyi +0 -0
- {claude_code_log-1.1.1 → claude_code_log-1.3.0}/stubs/pygments/util.pyi +0 -0
|
@@ -260,6 +260,32 @@ def title_WebSearchInput(self, input: WebSearchInput, message: TemplateMessage)
|
|
|
260
260
|
return self._tool_title(message, "🔎", f'"{input.query}"')
|
|
261
261
|
```
|
|
262
262
|
|
|
263
|
+
### Watch out: the template's wrench-suppression is emoji-range-gated
|
|
264
|
+
|
|
265
|
+
Tool-use messages get a default `🛠️` prefix prepended by
|
|
266
|
+
`templates/transcript.html` *unless* the title already starts with
|
|
267
|
+
an emoji that `html/utils.py::starts_with_emoji` recognises. That
|
|
268
|
+
function whitelists specific Unicode ranges:
|
|
269
|
+
|
|
270
|
+
- `0x2300-0x23FF` Misc Technical (`⏰ ⏳ ⏱️ ⏲️ ⏸ ⏹ ⏺ ⏏` …)
|
|
271
|
+
- `0x2600-0x26FF` Misc Symbols
|
|
272
|
+
- `0x2700-0x27BF` Dingbats
|
|
273
|
+
- `0x1F300-0x1F5FF` Misc Symbols and Pictographs
|
|
274
|
+
- `0x1F600-0x1F64F` Emoticons
|
|
275
|
+
- `0x1F680-0x1F6FF` Transport and Map Symbols
|
|
276
|
+
- `0x1F900-0x1F9FF` Supplemental Symbols
|
|
277
|
+
|
|
278
|
+
If the icon you pass to `_tool_title` falls **outside** these
|
|
279
|
+
ranges, the template will helpfully add a `🛠️` in front of it,
|
|
280
|
+
producing a redundant double-icon title like
|
|
281
|
+
`🛠️ <your-icon> <ToolName>`. Verify by rendering a fixture and
|
|
282
|
+
grepping for `🛠️` co-occurring with your icon, or by checking
|
|
283
|
+
`ord(your_icon)` against the ranges above.
|
|
284
|
+
|
|
285
|
+
If your icon is a real emoji that lives in a Unicode range not
|
|
286
|
+
listed there, **add the range** to `starts_with_emoji` rather than
|
|
287
|
+
picking a different icon.
|
|
288
|
+
|
|
263
289
|
## Step 5: Implement Markdown Renderer
|
|
264
290
|
|
|
265
291
|
In `markdown/renderer.py`:
|
|
@@ -369,7 +395,7 @@ class Test{ToolName}OutputFormatting:
|
|
|
369
395
|
uv run pytest test/test_{toolname}_rendering.py -v
|
|
370
396
|
|
|
371
397
|
# Run full test suite to check for regressions
|
|
372
|
-
uv run pytest -
|
|
398
|
+
uv run pytest -m "not (tui or browser)" -v
|
|
373
399
|
```
|
|
374
400
|
|
|
375
401
|
## Checklist
|
|
@@ -33,13 +33,13 @@ jobs:
|
|
|
33
33
|
run: uv sync --all-extras --dev && uv run playwright install chromium
|
|
34
34
|
|
|
35
35
|
- name: Run unit tests with coverage
|
|
36
|
-
run: uv run pytest -
|
|
36
|
+
run: uv run pytest -m "not (tui or browser or benchmark)" --cov=claude_code_log --cov-report=xml --cov-report=html --cov-report=term
|
|
37
37
|
|
|
38
38
|
- name: Run TUI tests with coverage append
|
|
39
|
-
run: uv run pytest -
|
|
39
|
+
run: uv run pytest -m tui --cov=claude_code_log --cov-append --cov-report=xml --cov-report=html --cov-report=term
|
|
40
40
|
|
|
41
41
|
- name: Run browser tests with coverage append
|
|
42
|
-
run: uv run pytest -
|
|
42
|
+
run: uv run pytest -m browser --cov=claude_code_log --cov-append --cov-report=xml --cov-report=html --cov-report=term
|
|
43
43
|
|
|
44
44
|
- name: Run benchmark tests with coverage append (primary only)
|
|
45
45
|
if: matrix.is-primary
|
|
@@ -6,6 +6,58 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
8
|
|
|
9
|
+
## [1.3.0] - 2026-05-14
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
|
|
13
|
+
- **Render ScheduleWakeup and Cron* tools (#148) (#152)**
|
|
14
|
+
- **Render hook attachment entries at FULL detail (#128) (#149)**
|
|
15
|
+
- **Style sidechain filter toggle with dashed border**
|
|
16
|
+
- **scrub_surrogates: handle high surrogate range (CR follow-up) (#150)**
|
|
17
|
+
- **Render the built-in Monitor tool with Task-end backlink (#142) (#147)**
|
|
18
|
+
- **Add support for ai-title and prefer it over legacy summary (#136)**
|
|
19
|
+
- **fix: add errors='replace' to read_text/write_text for Unicode safety (#139) (#146)**
|
|
20
|
+
- **Fix UnicodeEncodeError on JSONL with lone surrogates (#139) (#144)**
|
|
21
|
+
- **Use `--dist=worksteal` to speed up tests + move `-n auto` to config to make it default (#145)**
|
|
22
|
+
- **Fix/prevent dag cycle (#138)**
|
|
23
|
+
- **Render away_summary recap entries (#111) (#141)**
|
|
24
|
+
- **System info cosmetic improvements + chain-pairing fix (#137) (#140)**
|
|
25
|
+
- **dev-docs: introduce application_model.md as entry point, normalize naming, clean work/ (#134)**
|
|
26
|
+
- **export conversations to json (#36)**
|
|
27
|
+
- **Suppress noise in system-info messages (#129) (#133)**
|
|
28
|
+
- **Fix DAG cyclic-children hang and add SIGUSR1 stack dump (#135)**
|
|
29
|
+
- **Support async agents (#90) (#132)**
|
|
30
|
+
- **Robust within-session fork rendering: collapse parallel-tool_use forks, consistent labels (#131)**
|
|
31
|
+
- **Render user content as Markdown with raw fallback toggle (#119)**
|
|
32
|
+
- **Add --detail user-only level (#118)**
|
|
33
|
+
- **Pair Slash Command with User (slash command) (#126) (#127)**
|
|
34
|
+
- **Fold Skill name into tool_use title and drop the params row**
|
|
35
|
+
- **Fold Skill body into its tool_use block (#121)**
|
|
36
|
+
- **docs: add Community Extensions section (#120)**
|
|
37
|
+
- **Support teammates (#91): stitching + session headers + index (PR 3 of 3) (#125)**
|
|
38
|
+
- **Support teammates (#91): rendering (PR 2 of 3) (#122)**
|
|
39
|
+
- **Support teammates (#91): parsing + data model (draft) (#117)**
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
## [1.2.0] - 2026-04-19
|
|
43
|
+
|
|
44
|
+
### Changed
|
|
45
|
+
|
|
46
|
+
- **Preserve agentId anchors in parallel-Task stitch + tool-param UI fix (#115)**
|
|
47
|
+
- **Per-level output files for --detail and --compact (#114)**
|
|
48
|
+
- **Handle custom-title, agent-name, and agent-color transcript entry types (#113)**
|
|
49
|
+
- **Ignore 'last-prompt' message type (#112)**
|
|
50
|
+
- **Detail levels and compact rendering of conversations (#96)**
|
|
51
|
+
- **Skip PassthroughTranscriptEntry in _render_messages**
|
|
52
|
+
- **Integrate agent transcripts into the DAG (Phase C) (#99)**
|
|
53
|
+
- **Implement DAG-based message ordering (Phases A+B) (#97)**
|
|
54
|
+
- **Fix slow test hitting real ~/.claude/projects (5GB) (#109)**
|
|
55
|
+
- **feat: add --session-id flag for exporting a single (#103)**
|
|
56
|
+
- **Fix search broken when HTML saved with different filename (#106)**
|
|
57
|
+
- **Add Grep tool renderer with pattern in title (#107)**
|
|
58
|
+
- **Fix TUI square bracket escaping issue (#105)**
|
|
59
|
+
|
|
60
|
+
|
|
9
61
|
## [1.1.1] - 2026-03-10
|
|
10
62
|
|
|
11
63
|
### Changed
|
|
@@ -47,28 +47,30 @@ claude-code-log --from-date "last week"
|
|
|
47
47
|
|
|
48
48
|
See @CONTRIBUTING.md for detailed development setup, testing, architecture, and release process.
|
|
49
49
|
|
|
50
|
+
**Before pushing, always remind the user to run `just ci`.**
|
|
51
|
+
|
|
50
52
|
### Claude-Specific Testing Tips
|
|
51
53
|
|
|
52
|
-
**
|
|
54
|
+
**Config in `pyproject.toml` sets `-n auto --dist=worksteal` so you might need to unset for pdb, etc**
|
|
53
55
|
|
|
54
56
|
```bash
|
|
55
57
|
# Unit tests (fast, recommended for development)
|
|
56
58
|
just test
|
|
57
|
-
# or: uv run pytest -
|
|
59
|
+
# or: uv run pytest -m "not (tui or browser)" -v
|
|
58
60
|
|
|
59
61
|
# TUI tests
|
|
60
62
|
just test-tui
|
|
61
|
-
# or: uv run pytest -
|
|
63
|
+
# or: uv run pytest -m tui
|
|
62
64
|
|
|
63
65
|
# Browser tests
|
|
64
66
|
just test-browser
|
|
65
|
-
# or: uv run pytest -
|
|
67
|
+
# or: uv run pytest -m browser
|
|
66
68
|
|
|
67
69
|
# All tests
|
|
68
70
|
just test-all
|
|
69
71
|
```
|
|
70
72
|
|
|
71
|
-
**Tip:** Add `-x` to stop on first failure (e.g., `uv run pytest -
|
|
73
|
+
**Tip:** Add `-x` to stop on first failure (e.g., `uv run pytest -m "not (tui or browser)" -v -x`).
|
|
72
74
|
|
|
73
75
|
### Code Quality
|
|
74
76
|
|
|
@@ -93,7 +95,30 @@ The interactive timeline is implemented in JavaScript within `claude_code_log/te
|
|
|
93
95
|
|
|
94
96
|
## Architecture
|
|
95
97
|
|
|
96
|
-
|
|
98
|
+
Start with [dev-docs/application_model.md](dev-docs/application_model.md)
|
|
99
|
+
— the entry point covering subsystems, data lifecycle, and a glossary,
|
|
100
|
+
with pointers to the deep-dive docs:
|
|
101
|
+
|
|
97
102
|
- [dev-docs/rendering-architecture.md](dev-docs/rendering-architecture.md) - Data flow and rendering pipeline
|
|
98
103
|
- [dev-docs/messages.md](dev-docs/messages.md) - Message type reference
|
|
99
104
|
- [dev-docs/css-classes.md](dev-docs/css-classes.md) - CSS class combinations
|
|
105
|
+
- [dev-docs/dag.md](dev-docs/dag.md) - DAG-based session/fork architecture
|
|
106
|
+
- [dev-docs/agents.md](dev-docs/agents.md) - Sync/async/teammate agent integration
|
|
107
|
+
- [dev-docs/teammates.md](dev-docs/teammates.md) - Teammates feature deep-dive
|
|
108
|
+
- [dev-docs/message-hierarchy.md](dev-docs/message-hierarchy.md) - Fold/unfold state machine
|
|
109
|
+
- [dev-docs/implementing-a-tool-renderer.md](dev-docs/implementing-a-tool-renderer.md) - How-to: add a new tool
|
|
110
|
+
|
|
111
|
+
User-facing docs live in [docs/](docs/); plans and TODOs live in [work/](work/).
|
|
112
|
+
|
|
113
|
+
### Keeping dev-docs/ in sync
|
|
114
|
+
|
|
115
|
+
`dev-docs/` is **as-built reference** — the code is the authoritative
|
|
116
|
+
source. When a non-trivial change alters behavior, structure, or
|
|
117
|
+
invariants documented in a deep-dive, update the relevant page in
|
|
118
|
+
the same commit (or as a prompt follow-up). If `dev-docs/` and the
|
|
119
|
+
code disagree, the doc is wrong.
|
|
120
|
+
|
|
121
|
+
Typical lifecycle: a feature begins as a spec in `work/`, evolves
|
|
122
|
+
into a WIP scratchpad as the code adapts to reality, then graduates
|
|
123
|
+
into `dev-docs/` (new page or merged into an existing one) once the
|
|
124
|
+
implementation has stabilized.
|
|
@@ -50,7 +50,9 @@ claude_code_log/
|
|
|
50
50
|
|
|
51
51
|
scripts/ # Development utilities
|
|
52
52
|
test/test_data/ # Representative JSONL samples
|
|
53
|
-
dev-docs/ # Architecture documentation
|
|
53
|
+
dev-docs/ # Architecture / dev documentation (start in application_model.md)
|
|
54
|
+
docs/ # User-facing operations docs
|
|
55
|
+
work/ # Plans, TODOs, in-flight design docs
|
|
54
56
|
```
|
|
55
57
|
|
|
56
58
|
## Development Setup
|
|
@@ -94,7 +96,7 @@ The project uses a categorized test system to avoid async event loop conflicts.
|
|
|
94
96
|
```bash
|
|
95
97
|
# Unit tests only (fast, recommended for development)
|
|
96
98
|
just test
|
|
97
|
-
# or: uv run pytest -
|
|
99
|
+
# or: uv run pytest -m "not (tui or browser)" -v
|
|
98
100
|
|
|
99
101
|
# TUI tests (isolated event loop)
|
|
100
102
|
just test-tui
|
|
@@ -114,16 +116,23 @@ just test-cov
|
|
|
114
116
|
Snapshot tests detect unintended HTML output changes using [syrupy](https://github.com/syrupy-project/syrupy):
|
|
115
117
|
|
|
116
118
|
```bash
|
|
117
|
-
# Run snapshot tests
|
|
118
|
-
uv run pytest
|
|
119
|
+
# Run snapshot tests (parallel mode is fine for read-only runs)
|
|
120
|
+
uv run pytest test/test_snapshot_html.py -v
|
|
119
121
|
|
|
120
122
|
# Update snapshots after intentional HTML changes
|
|
121
|
-
|
|
123
|
+
# IMPORTANT: run --snapshot-update with -n0 (see warning below)
|
|
124
|
+
uv run pytest test/test_snapshot_html.py -n0 --snapshot-update
|
|
122
125
|
```
|
|
123
126
|
|
|
127
|
+
> **Warning — don't let `--snapshot-update` run with `-n auto`.** Syrupy
|
|
128
|
+
> and pytest-xdist race when writing snapshot files in parallel: the
|
|
129
|
+
> `.ambr` file ends up truncated (observed: ~6000 lines silently
|
|
130
|
+
> deleted on a single run, leaving the file structurally broken but
|
|
131
|
+
> still passing on next read). Run `--snapshot-update` serially.
|
|
132
|
+
|
|
124
133
|
When snapshot tests fail:
|
|
125
134
|
1. Review the diff to verify changes are intentional
|
|
126
|
-
2. If intentional, run `--snapshot-update` to accept new output
|
|
135
|
+
2. If intentional, run `--snapshot-update` (serially) to accept new output
|
|
127
136
|
3. If unintentional, fix your code and re-run tests
|
|
128
137
|
|
|
129
138
|
### Test Prerequisites
|
|
@@ -151,7 +160,7 @@ Running all tests together can cause "RuntimeError: This event loop is already r
|
|
|
151
160
|
just test-cov
|
|
152
161
|
|
|
153
162
|
# Or manually:
|
|
154
|
-
uv run pytest
|
|
163
|
+
uv run pytest --cov=claude_code_log --cov-report=html --cov-report=term
|
|
155
164
|
```
|
|
156
165
|
|
|
157
166
|
HTML coverage reports are generated in `htmlcov/index.html`.
|
|
@@ -186,9 +195,23 @@ CLAUDE_CODE_LOG_DEBUG_TIMING=1 claude-code-log path/to/file.jsonl
|
|
|
186
195
|
|
|
187
196
|
This outputs detailed timing for each rendering phase. The timing module is in `claude_code_log/renderer_timings.py`.
|
|
188
197
|
|
|
198
|
+
## Diagnosing Hangs
|
|
199
|
+
|
|
200
|
+
If `claude-code-log` appears stuck (100% CPU, no output), send `SIGUSR1` to print the live Python stack to stderr without killing the process:
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
# In another terminal
|
|
204
|
+
kill -USR1 $(pgrep -f claude-code-log | head -1)
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
The handler is installed in `cli.py` via `faulthandler.register(SIGUSR1)`. POSIX-only; no-op on Windows. Unlike `py-spy`, it needs no root and no extra install.
|
|
208
|
+
|
|
189
209
|
## Architecture
|
|
190
210
|
|
|
191
|
-
|
|
211
|
+
Start with [dev-docs/application_model.md](dev-docs/application_model.md)
|
|
212
|
+
for the system overview (subsystems, data lifecycle, glossary). For
|
|
213
|
+
the rendering pipeline specifically, see
|
|
214
|
+
[dev-docs/rendering-architecture.md](dev-docs/rendering-architecture.md).
|
|
192
215
|
|
|
193
216
|
### Data Flow Overview
|
|
194
217
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: claude-code-log
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.3.0
|
|
4
4
|
Summary: Convert Claude Code transcript JSONL files to HTML
|
|
5
5
|
Project-URL: Homepage, https://github.com/daaain/claude-code-log
|
|
6
6
|
Project-URL: Issues, https://github.com/daaain/claude-code-log/issues
|
|
@@ -66,6 +66,7 @@ uvx claude-code-log@latest --open-browser
|
|
|
66
66
|
- **Rich Message Types**: Support for user/assistant messages, tool use/results, thinking content, images
|
|
67
67
|
- **System Command Visibility**: Show system commands (like `init`) in expandable details with structured parsing
|
|
68
68
|
- **Markdown Rendering**: Server-side markdown rendering with syntax highlighting using mistune
|
|
69
|
+
- **Detail Levels & Compact Mode**: `--detail full|high|low|minimal|user-only` filters by verbosity and `--compact` merges repeated section headings — pairs well with `--format md` to feed past conversations back to an LLM for analysis or experience building
|
|
69
70
|
- **Floating Navigation**: Always-available back-to-top button and filter controls
|
|
70
71
|
- **CLI Interface**: Simple command-line tool using Click
|
|
71
72
|
|
|
@@ -81,6 +82,7 @@ This tool helps you answer questions like:
|
|
|
81
82
|
- **"How can I share my Claude Code conversation with others?"**
|
|
82
83
|
- **"What's the timeline of my project development?"**
|
|
83
84
|
- **"How can I analyse patterns in my Claude Code usage?"**
|
|
85
|
+
- **"How can I feed a past session back to an LLM for analysis or experience building?"**
|
|
84
86
|
|
|
85
87
|
## Usage
|
|
86
88
|
|
|
@@ -164,6 +166,28 @@ claude-code-log /path/to/directory --from-date "yesterday" --to-date "today"
|
|
|
164
166
|
claude-code-log /path/to/directory --from-date "3 days ago" --to-date "yesterday"
|
|
165
167
|
```
|
|
166
168
|
|
|
169
|
+
### Feeding Past Conversations to an LLM
|
|
170
|
+
|
|
171
|
+
The combination `--detail low --format md --compact` produces condensed Markdown suitable as context for an LLM to review or distill patterns from past work:
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
# Session → compact Markdown for LLM review
|
|
175
|
+
claude-code-log transcript.jsonl --detail low --format md --compact -o session.md
|
|
176
|
+
|
|
177
|
+
# Whole project history
|
|
178
|
+
claude-code-log /path/to/project --detail low --format md --compact
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
`--detail` levels (smallest → largest output):
|
|
182
|
+
|
|
183
|
+
- `user-only` — just user prompts and steering (useful as input to a downstream agent, e.g. building a requirements doc)
|
|
184
|
+
- `minimal` — user + assistant text only
|
|
185
|
+
- `low` — interaction-focused; keeps WebSearch, WebFetch, and Task (agent delegations) as key signals
|
|
186
|
+
- `high` — detailed but cleaned; drops system/hook noise
|
|
187
|
+
- `full` — everything (default)
|
|
188
|
+
|
|
189
|
+
`--compact` merges consecutive same-type sections in Markdown so runs of assistant responses share one heading instead of repeating `### 🤖 Assistant:` for each.
|
|
190
|
+
|
|
167
191
|
## Project Hierarchy Output
|
|
168
192
|
|
|
169
193
|
When processing all projects, the tool generates:
|
|
@@ -228,6 +252,7 @@ Markdown export provides a lightweight, portable alternative to HTML:
|
|
|
228
252
|
- **Code Preservation**: Syntax highlighting hints via fenced code blocks
|
|
229
253
|
- **Embedded Viewer**: TUI includes built-in Markdown viewer with table of contents
|
|
230
254
|
- **Image Support**: Configurable image handling (placeholder, embedded base64, or referenced files)
|
|
255
|
+
- **`--compact` Mode**: Merge consecutive same-type section headings — most useful with `--detail low` or `minimal` where tool stripping creates runs of Assistant or User sections
|
|
231
256
|
|
|
232
257
|
## Installation
|
|
233
258
|
|
|
@@ -256,6 +281,17 @@ uv run claude-code-log
|
|
|
256
281
|
|
|
257
282
|
See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup, testing, and architecture documentation.
|
|
258
283
|
|
|
284
|
+
## Community Extensions
|
|
285
|
+
|
|
286
|
+
Projects built on top of `claude-code-log`:
|
|
287
|
+
|
|
288
|
+
- **[archive-session](https://github.com/lifeinchords/claude-code-skills#archive-session-skill--slash-command--optional-hook)** by [@lifeinchords](https://github.com/lifeinchords). Wraps the CLI as three integration surfaces:
|
|
289
|
+
- a Claude Code [Skill](https://github.com/lifeinchords/claude-code-skills/blob/main/.claude/skills/archive-session/SKILL.md)
|
|
290
|
+
- a Claude Code slash [Command](https://github.com/lifeinchords/claude-code-skills/blob/main/.claude/commands/archive-session.md) `/archive-session` for explicit in-chat invocation
|
|
291
|
+
- a Claude Code PreCompact [Hook](https://github.com/lifeinchords/claude-code-skills/blob/main/.claude/hooks/pre-compact-archive.sh) that auto-archives transcripts and subagent logs right before context compaction
|
|
292
|
+
|
|
293
|
+
Cross-platform (macOS and Windows/MSYS).
|
|
294
|
+
|
|
259
295
|
## TODO
|
|
260
296
|
|
|
261
297
|
- tutorial overlay
|
|
@@ -42,6 +42,7 @@ uvx claude-code-log@latest --open-browser
|
|
|
42
42
|
- **Rich Message Types**: Support for user/assistant messages, tool use/results, thinking content, images
|
|
43
43
|
- **System Command Visibility**: Show system commands (like `init`) in expandable details with structured parsing
|
|
44
44
|
- **Markdown Rendering**: Server-side markdown rendering with syntax highlighting using mistune
|
|
45
|
+
- **Detail Levels & Compact Mode**: `--detail full|high|low|minimal|user-only` filters by verbosity and `--compact` merges repeated section headings — pairs well with `--format md` to feed past conversations back to an LLM for analysis or experience building
|
|
45
46
|
- **Floating Navigation**: Always-available back-to-top button and filter controls
|
|
46
47
|
- **CLI Interface**: Simple command-line tool using Click
|
|
47
48
|
|
|
@@ -57,6 +58,7 @@ This tool helps you answer questions like:
|
|
|
57
58
|
- **"How can I share my Claude Code conversation with others?"**
|
|
58
59
|
- **"What's the timeline of my project development?"**
|
|
59
60
|
- **"How can I analyse patterns in my Claude Code usage?"**
|
|
61
|
+
- **"How can I feed a past session back to an LLM for analysis or experience building?"**
|
|
60
62
|
|
|
61
63
|
## Usage
|
|
62
64
|
|
|
@@ -140,6 +142,28 @@ claude-code-log /path/to/directory --from-date "yesterday" --to-date "today"
|
|
|
140
142
|
claude-code-log /path/to/directory --from-date "3 days ago" --to-date "yesterday"
|
|
141
143
|
```
|
|
142
144
|
|
|
145
|
+
### Feeding Past Conversations to an LLM
|
|
146
|
+
|
|
147
|
+
The combination `--detail low --format md --compact` produces condensed Markdown suitable as context for an LLM to review or distill patterns from past work:
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
# Session → compact Markdown for LLM review
|
|
151
|
+
claude-code-log transcript.jsonl --detail low --format md --compact -o session.md
|
|
152
|
+
|
|
153
|
+
# Whole project history
|
|
154
|
+
claude-code-log /path/to/project --detail low --format md --compact
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
`--detail` levels (smallest → largest output):
|
|
158
|
+
|
|
159
|
+
- `user-only` — just user prompts and steering (useful as input to a downstream agent, e.g. building a requirements doc)
|
|
160
|
+
- `minimal` — user + assistant text only
|
|
161
|
+
- `low` — interaction-focused; keeps WebSearch, WebFetch, and Task (agent delegations) as key signals
|
|
162
|
+
- `high` — detailed but cleaned; drops system/hook noise
|
|
163
|
+
- `full` — everything (default)
|
|
164
|
+
|
|
165
|
+
`--compact` merges consecutive same-type sections in Markdown so runs of assistant responses share one heading instead of repeating `### 🤖 Assistant:` for each.
|
|
166
|
+
|
|
143
167
|
## Project Hierarchy Output
|
|
144
168
|
|
|
145
169
|
When processing all projects, the tool generates:
|
|
@@ -204,6 +228,7 @@ Markdown export provides a lightweight, portable alternative to HTML:
|
|
|
204
228
|
- **Code Preservation**: Syntax highlighting hints via fenced code blocks
|
|
205
229
|
- **Embedded Viewer**: TUI includes built-in Markdown viewer with table of contents
|
|
206
230
|
- **Image Support**: Configurable image handling (placeholder, embedded base64, or referenced files)
|
|
231
|
+
- **`--compact` Mode**: Merge consecutive same-type section headings — most useful with `--detail low` or `minimal` where tool stripping creates runs of Assistant or User sections
|
|
207
232
|
|
|
208
233
|
## Installation
|
|
209
234
|
|
|
@@ -232,6 +257,17 @@ uv run claude-code-log
|
|
|
232
257
|
|
|
233
258
|
See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup, testing, and architecture documentation.
|
|
234
259
|
|
|
260
|
+
## Community Extensions
|
|
261
|
+
|
|
262
|
+
Projects built on top of `claude-code-log`:
|
|
263
|
+
|
|
264
|
+
- **[archive-session](https://github.com/lifeinchords/claude-code-skills#archive-session-skill--slash-command--optional-hook)** by [@lifeinchords](https://github.com/lifeinchords). Wraps the CLI as three integration surfaces:
|
|
265
|
+
- a Claude Code [Skill](https://github.com/lifeinchords/claude-code-skills/blob/main/.claude/skills/archive-session/SKILL.md)
|
|
266
|
+
- a Claude Code slash [Command](https://github.com/lifeinchords/claude-code-skills/blob/main/.claude/commands/archive-session.md) `/archive-session` for explicit in-chat invocation
|
|
267
|
+
- a Claude Code PreCompact [Hook](https://github.com/lifeinchords/claude-code-skills/blob/main/.claude/hooks/pre-compact-archive.sh) that auto-archives transcripts and subagent logs right before context compaction
|
|
268
|
+
|
|
269
|
+
Cross-platform (macOS and Windows/MSYS).
|
|
270
|
+
|
|
235
271
|
## TODO
|
|
236
272
|
|
|
237
273
|
- tutorial overlay
|