claude-code-log 1.3.0__tar.gz → 1.5.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.5.0/.devbox-foldyard/.gitignore +1 -0
- claude_code_log-1.5.0/.devbox-foldyard/foldyard-0.0.1-py3-none-any.whl +0 -0
- claude_code_log-1.5.0/.github/workflows/ci.yml +117 -0
- claude_code_log-1.5.0/.github/workflows/docs.yml +68 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/.gitignore +4 -3
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/CHANGELOG.md +108 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/CLAUDE.md +7 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/CONTRIBUTING.md +41 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/PKG-INFO +18 -3
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/README.md +16 -1
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/cache.py +273 -37
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/cli.py +485 -13
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/converter.py +1115 -712
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/dag.py +114 -15
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/factories/meta_factory.py +8 -1
- claude_code_log-1.5.0/claude_code_log/factories/priorities.py +46 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/factories/system_factory.py +3 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/factories/tool_factory.py +378 -46
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/factories/user_factory.py +25 -0
- claude_code_log-1.5.0/claude_code_log/git_remote.py +343 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/html/__init__.py +4 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/html/async_formatter.py +2 -2
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/html/renderer.py +633 -54
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/html/system_formatters.py +16 -13
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/html/templates/components/edit_diff_styles.css +1 -1
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/html/templates/components/global_styles.css +16 -2
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/html/templates/components/message_styles.css +606 -13
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/html/templates/components/project_card_styles.css +32 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/html/templates/components/session_nav.html +14 -1
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/html/templates/components/session_nav_styles.css +8 -3
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/html/templates/components/teammate_styles.css +6 -7
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/html/templates/components/timeline.html +28 -6
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/html/templates/components/todo_styles.css +19 -0
- claude_code_log-1.5.0/claude_code_log/html/templates/index.html +157 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/html/templates/transcript.html +310 -297
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/html/tool_formatters.py +812 -89
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/html/user_formatters.py +154 -1
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/html/utils.py +315 -25
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/json/renderer.py +16 -4
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/markdown/renderer.py +698 -40
- claude_code_log-1.5.0/claude_code_log/markdown_plugins.py +440 -0
- claude_code_log-1.5.0/claude_code_log/migrations/007_subagents_fingerprint.sql +16 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/models.py +382 -4
- claude_code_log-1.5.0/claude_code_log/plugins.py +409 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/renderer.py +1777 -607
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/utils.py +361 -3
- claude_code_log-1.5.0/claude_code_log/workflow.py +661 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/agents.md +182 -4
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/application_model.md +77 -23
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/css-classes.md +4 -1
- claude_code_log-1.5.0/dev-docs/dag.md +721 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/implementing-a-tool-renderer.md +61 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/message-hierarchy.md +40 -36
- claude_code_log-1.5.0/dev-docs/messages/tools/Artifact-tool_result.json +24 -0
- claude_code_log-1.5.0/dev-docs/messages/tools/Artifact-tool_result.jsonl +1 -0
- claude_code_log-1.5.0/dev-docs/messages/tools/Artifact-tool_use.json +27 -0
- claude_code_log-1.5.0/dev-docs/messages/tools/Artifact-tool_use.jsonl +1 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages.md +40 -1
- claude_code_log-1.5.0/dev-docs/plugins.md +818 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/rendering-architecture.md +59 -10
- claude_code_log-1.5.0/dev-docs/workflows.md +341 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/justfile +28 -14
- claude_code_log-1.5.0/mise.toml +8 -0
- claude_code_log-1.5.0/mkdocs.yml +94 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/pyproject.toml +34 -3
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/uv.lock +352 -24
- claude_code_log-1.5.0/work/agent-hierarchies-design.md +229 -0
- claude_code_log-1.5.0/work/obsidian-friendly-output.md +81 -0
- claude_code_log-1.5.0/work/parse-memory-spike.md +140 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/work/rendering-next.md +1 -34
- claude_code_log-1.5.0/work/tool-renderer-plugins.md +29 -0
- claude_code_log-1.5.0/work/tui-output-fixes.md +75 -0
- claude_code_log-1.5.0/work/win-io.md +79 -0
- claude_code_log-1.5.0/work/xdist-import-cost.md +133 -0
- claude_code_log-1.3.0/.github/workflows/ci.yml +0 -81
- claude_code_log-1.3.0/claude_code_log/html/templates/index.html +0 -118
- claude_code_log-1.3.0/dev-docs/dag.md +0 -702
- claude_code_log-1.3.0/mise.toml +0 -2
- claude_code_log-1.3.0/work/async-agents.md +0 -215
- claude_code_log-1.3.0/work/refactor-reindex-with-ghosting.md +0 -164
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/.claude/settings.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/.claude/skills/tool-renderer/SKILL.md +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/.vscode/settings.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/LICENSE +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/__init__.py +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/factories/__init__.py +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/factories/agent_metadata_factory.py +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/factories/assistant_factory.py +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/factories/attachment_factory.py +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/factories/task_notification_factory.py +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/factories/teammate_factory.py +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/factories/transcript_factory.py +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/html/ansi_colors.py +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/html/assistant_formatters.py +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/html/renderer_code.py +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/html/teammate_formatter.py +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/html/templates/components/filter_styles.css +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/html/templates/components/page_nav_styles.css +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/html/templates/components/pygments_styles.css +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/html/templates/components/search.html +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/html/templates/components/search_inline.html +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/html/templates/components/search_inline_script.html +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/html/templates/components/search_results_panel.html +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/html/templates/components/search_styles.css +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/html/templates/components/timeline_styles.css +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/html/templates/components/timezone_converter.js +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/image_export.py +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/json/__init__.py +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/markdown/__init__.py +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/migrations/001_initial_schema.sql +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/migrations/002_html_cache.sql +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/migrations/003_html_pagination.sql +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/migrations/004_html_pagination_variant.sql +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/migrations/005_session_team_name.sql +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/migrations/006_session_ai_title.sql +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/migrations/__init__.py +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/migrations/runner.py +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/parser.py +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/py.typed +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/renderer_timings.py +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/claude_code_log/tui.py +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/assistant/assistant.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/assistant/assistant.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/assistant/assistant_sidechain.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/assistant/assistant_sidechain.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/assistant/thinking.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/assistant/thinking.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/system/file_history_snapshot.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/system/file_history_snapshot.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/system/queue_operation.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/system/queue_operation.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/system/summary.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/system/summary.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/system/system_info.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/system/system_info.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/AskUserQuestion-tool_result.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/AskUserQuestion-tool_result.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/AskUserQuestion-tool_result_error.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/AskUserQuestion-tool_result_error.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/AskUserQuestion-tool_use.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/AskUserQuestion-tool_use.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Bash-tool_result.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Bash-tool_result.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Bash-tool_result_error.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Bash-tool_result_error.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Bash-tool_use.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Bash-tool_use.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/BashOutput-tool_result.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/BashOutput-tool_result.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/BashOutput-tool_use.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/BashOutput-tool_use.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Edit-tool_result.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Edit-tool_result.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Edit-tool_result_error.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Edit-tool_result_error.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Edit-tool_use.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Edit-tool_use.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/ExitPlanMode-tool_result.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/ExitPlanMode-tool_result.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/ExitPlanMode-tool_result_error.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/ExitPlanMode-tool_result_error.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/ExitPlanMode-tool_use.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/ExitPlanMode-tool_use.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Glob-tool_result.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Glob-tool_result.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Glob-tool_use.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Glob-tool_use.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Grep-tool_result.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Grep-tool_result.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Grep-tool_use.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Grep-tool_use.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/KillShell-tool_result.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/KillShell-tool_result.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/KillShell-tool_result_error.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/KillShell-tool_result_error.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/KillShell-tool_use.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/KillShell-tool_use.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/LS-tool_result.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/LS-tool_result.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/LS-tool_use.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/LS-tool_use.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/MultiEdit-tool_result.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/MultiEdit-tool_result.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/MultiEdit-tool_result_error.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/MultiEdit-tool_result_error.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/MultiEdit-tool_use.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/MultiEdit-tool_use.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Read-tool_result.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Read-tool_result.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Read-tool_result_error.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Read-tool_result_error.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Read-tool_use.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Read-tool_use.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Task-tool_result.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Task-tool_result.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Task-tool_use.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Task-tool_use.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/TodoWrite-tool_result.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/TodoWrite-tool_result.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/TodoWrite-tool_use.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/TodoWrite-tool_use.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/WebFetch-tool_result.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/WebFetch-tool_result.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/WebFetch-tool_use.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/WebFetch-tool_use.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/WebSearch-tool_result.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/WebSearch-tool_result.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/WebSearch-tool_use.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/WebSearch-tool_use.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Write-tool_result.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Write-tool_result.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Write-tool_result_error.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Write-tool_result_error.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Write-tool_use.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/Write-tool_use.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/exit_plan_mode-tool_result.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/exit_plan_mode-tool_result.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/exit_plan_mode-tool_use.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/tools/exit_plan_mode-tool_use.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/user/bash_input.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/user/bash_input.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/user/bash_output.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/user/bash_output.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/user/command_output.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/user/command_output.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/user/image.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/user/image.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/user/user.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/user/user.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/user/user_command.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/user/user_command.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/user/user_sidechain.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/user/user_sidechain.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/user/user_slash_command.json +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/messages/user/user_slash_command.jsonl +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/dev-docs/teammates.md +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/stubs/pygments/__init__.pyi +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/stubs/pygments/formatter.pyi +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/stubs/pygments/formatters/__init__.pyi +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/stubs/pygments/lexer.pyi +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/stubs/pygments/lexers/__init__.pyi +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/stubs/pygments/util.pyi +0 -0
- {claude_code_log-1.3.0 → claude_code_log-1.5.0}/work/session-state-propagation.md +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
*
|
|
Binary file
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ main ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ main ]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: ${{ matrix.os }}
|
|
12
|
+
strategy:
|
|
13
|
+
matrix:
|
|
14
|
+
os: ["ubuntu-latest", "windows-latest"]
|
|
15
|
+
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
|
|
16
|
+
include:
|
|
17
|
+
- os: "ubuntu-latest"
|
|
18
|
+
python-version: "3.12"
|
|
19
|
+
is-primary: true
|
|
20
|
+
|
|
21
|
+
env:
|
|
22
|
+
# Collect coverage only on the primary job: it is the only one that
|
|
23
|
+
# uploads the reports and feeds the PR comment, while --cov costs
|
|
24
|
+
# ~65% extra pytest wall time (worst on Windows). Windows-only
|
|
25
|
+
# covered lines measured at 5 (diffing covered lines per file,
|
|
26
|
+
# Windows vs the primary artifact): the SIGUSR1 no-op return and the
|
|
27
|
+
# drive-letter branch of convert_project_path_to_claude_dir, both in
|
|
28
|
+
# cli.py. Those were never in the published report (non-primary
|
|
29
|
+
# coverage was computed and discarded), so this changes nothing.
|
|
30
|
+
COV: ${{ matrix.is-primary && '--cov=claude_code_log --cov-report=xml --cov-report=html --cov-report=term' || '' }}
|
|
31
|
+
COV_APPEND: ${{ matrix.is-primary && '--cov=claude_code_log --cov-append --cov-report=xml --cov-report=html --cov-report=term' || '' }}
|
|
32
|
+
|
|
33
|
+
steps:
|
|
34
|
+
- uses: actions/checkout@v4
|
|
35
|
+
with:
|
|
36
|
+
# Full history so test/test_commit_linkifier.py's
|
|
37
|
+
# TestIntegrationLocalRepo can resolve SHAs older than the
|
|
38
|
+
# current tip (`git branch -r --contains` reads local refs
|
|
39
|
+
# only and needs the commits in the object DB).
|
|
40
|
+
fetch-depth: 0
|
|
41
|
+
|
|
42
|
+
- name: Move TEMP to the workspace disk (Windows)
|
|
43
|
+
# On windows runners TMP/TEMP default to the C: OS disk, whose
|
|
44
|
+
# throttled I/O dominates this tmp-heavy suite; RUNNER_TEMP lives on
|
|
45
|
+
# the same disk as the workspace (D:). Measured via A/B experiment
|
|
46
|
+
# (run 28715118956): this redirect alone took the unit selection from
|
|
47
|
+
# 555s mean to 150s — parity with ubuntu (~161s). Defender is NOT the
|
|
48
|
+
# culprit: real-time protection is already off on current images
|
|
49
|
+
# (exclusions/disable measured as no-ops), and a ReFS dev drive
|
|
50
|
+
# (~296s) was dominated by this redirect. Details: work/win-io.md
|
|
51
|
+
if: runner.os == 'Windows'
|
|
52
|
+
shell: pwsh
|
|
53
|
+
run: |
|
|
54
|
+
"TMP=$env:RUNNER_TEMP" >> $env:GITHUB_ENV
|
|
55
|
+
"TEMP=$env:RUNNER_TEMP" >> $env:GITHUB_ENV
|
|
56
|
+
|
|
57
|
+
- name: Install uv
|
|
58
|
+
uses: astral-sh/setup-uv@v4
|
|
59
|
+
with:
|
|
60
|
+
enable-cache: true
|
|
61
|
+
|
|
62
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
63
|
+
run: uv python install ${{ matrix.python-version }}
|
|
64
|
+
|
|
65
|
+
- name: Install dependencies
|
|
66
|
+
run: uv sync --all-extras --dev && uv run playwright install chromium
|
|
67
|
+
|
|
68
|
+
- name: Run unit tests (coverage on primary only)
|
|
69
|
+
# -p no:playwright: unit tests don't use the browser fixtures; skipping the
|
|
70
|
+
# plugin avoids a ~1s playwright import per xdist worker, which Windows pays
|
|
71
|
+
# per spawned worker. See work/xdist-import-cost.md.
|
|
72
|
+
run: uv run pytest -p no:playwright -m "not (tui or browser or benchmark)" ${{ env.COV }}
|
|
73
|
+
|
|
74
|
+
- name: Run TUI tests (coverage append on primary only)
|
|
75
|
+
run: uv run pytest -m tui ${{ env.COV_APPEND }}
|
|
76
|
+
|
|
77
|
+
- name: Run browser tests (coverage append on primary only)
|
|
78
|
+
run: uv run pytest -m browser ${{ env.COV_APPEND }}
|
|
79
|
+
|
|
80
|
+
- name: Run benchmark tests with coverage append (primary only)
|
|
81
|
+
if: matrix.is-primary
|
|
82
|
+
env:
|
|
83
|
+
CLAUDE_CODE_LOG_DEBUG_TIMING: "1"
|
|
84
|
+
run: uv run pytest -m benchmark ${{ env.COV_APPEND }} -v
|
|
85
|
+
|
|
86
|
+
- name: Upload coverage HTML report as artifact
|
|
87
|
+
uses: actions/upload-artifact@v4
|
|
88
|
+
if: matrix.is-primary
|
|
89
|
+
with:
|
|
90
|
+
name: coverage-report-html
|
|
91
|
+
path: htmlcov/
|
|
92
|
+
retention-days: 30
|
|
93
|
+
|
|
94
|
+
- name: Upload coverage XML as artifact
|
|
95
|
+
uses: actions/upload-artifact@v4
|
|
96
|
+
if: matrix.is-primary
|
|
97
|
+
with:
|
|
98
|
+
name: coverage-report-xml
|
|
99
|
+
path: coverage.xml
|
|
100
|
+
retention-days: 30
|
|
101
|
+
|
|
102
|
+
- name: Coverage comment (PR only)
|
|
103
|
+
if: github.event_name == 'pull_request' && matrix.is-primary
|
|
104
|
+
uses: py-cov-action/python-coverage-comment-action@v3
|
|
105
|
+
with:
|
|
106
|
+
GITHUB_TOKEN: ${{ github.token }}
|
|
107
|
+
MINIMUM_GREEN: 75
|
|
108
|
+
MINIMUM_ORANGE: 60
|
|
109
|
+
|
|
110
|
+
- name: Run linting
|
|
111
|
+
run: uv run ruff check
|
|
112
|
+
|
|
113
|
+
- name: Run formatting check
|
|
114
|
+
run: uv run ruff format --check
|
|
115
|
+
|
|
116
|
+
- name: Run type checking
|
|
117
|
+
run: uv run pyright
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
name: Docs
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ main ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ main ]
|
|
8
|
+
|
|
9
|
+
# Allow the deploy job to publish to GitHub Pages.
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read
|
|
12
|
+
pages: write
|
|
13
|
+
id-token: write
|
|
14
|
+
|
|
15
|
+
# Avoid overlapping deploys; let an in-progress run finish.
|
|
16
|
+
concurrency:
|
|
17
|
+
group: pages
|
|
18
|
+
cancel-in-progress: false
|
|
19
|
+
|
|
20
|
+
env:
|
|
21
|
+
# Silence the Material-for-MkDocs vendor banner about a future MkDocs 2.0.
|
|
22
|
+
DISABLE_MKDOCS_2_WARNING: "true"
|
|
23
|
+
|
|
24
|
+
jobs:
|
|
25
|
+
build:
|
|
26
|
+
runs-on: ubuntu-latest
|
|
27
|
+
steps:
|
|
28
|
+
- uses: actions/checkout@v5
|
|
29
|
+
|
|
30
|
+
- name: Install uv
|
|
31
|
+
uses: astral-sh/setup-uv@v8.2.0
|
|
32
|
+
with:
|
|
33
|
+
enable-cache: true
|
|
34
|
+
|
|
35
|
+
- name: Set up Python
|
|
36
|
+
run: uv python install 3.12
|
|
37
|
+
|
|
38
|
+
- name: Install docs dependencies
|
|
39
|
+
run: uv sync --group docs
|
|
40
|
+
|
|
41
|
+
- name: Build site (strict)
|
|
42
|
+
run: uv run mkdocs build --strict
|
|
43
|
+
|
|
44
|
+
- name: Upload site as artifact (downloadable preview)
|
|
45
|
+
uses: actions/upload-artifact@v7
|
|
46
|
+
with:
|
|
47
|
+
name: site-preview
|
|
48
|
+
path: site
|
|
49
|
+
retention-days: 14
|
|
50
|
+
|
|
51
|
+
- name: Upload Pages artifact
|
|
52
|
+
if: github.ref == 'refs/heads/main'
|
|
53
|
+
uses: actions/upload-pages-artifact@v3
|
|
54
|
+
with:
|
|
55
|
+
path: site
|
|
56
|
+
|
|
57
|
+
deploy:
|
|
58
|
+
# Only publish from main; PRs just run the strict build above.
|
|
59
|
+
if: github.ref == 'refs/heads/main'
|
|
60
|
+
needs: build
|
|
61
|
+
runs-on: ubuntu-latest
|
|
62
|
+
environment:
|
|
63
|
+
name: github-pages
|
|
64
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
65
|
+
steps:
|
|
66
|
+
- name: Deploy to GitHub Pages
|
|
67
|
+
id: deployment
|
|
68
|
+
uses: actions/deploy-pages@v4
|
|
@@ -147,6 +147,8 @@ venv.bak/
|
|
|
147
147
|
|
|
148
148
|
# mkdocs documentation
|
|
149
149
|
/site
|
|
150
|
+
# Locally-generated TUI screenshots (regenerated at build time by gen-files)
|
|
151
|
+
docs/assets/tui/
|
|
150
152
|
|
|
151
153
|
# mypy
|
|
152
154
|
.mypy_cache/
|
|
@@ -187,11 +189,10 @@ test/test_data/*.html
|
|
|
187
189
|
.local.code-workspace
|
|
188
190
|
local.ps1
|
|
189
191
|
|
|
190
|
-
# Generated documentation examples (uploaded to GitHub releases instead)
|
|
191
|
-
docs/claude-code-log-transcript.html
|
|
192
|
-
docs/cache/
|
|
193
192
|
|
|
194
193
|
# Integration test data - exclude generated cache/HTML, keep JSONL files
|
|
195
194
|
test/test_data/real_projects/*/cache/
|
|
196
195
|
test/test_data/real_projects/*/*.html
|
|
197
196
|
test/test_data/real_projects/index.html
|
|
197
|
+
# SQLite cache the CLI drops into a projects dir when run against test data
|
|
198
|
+
claude-code-log-cache.db
|
|
@@ -6,6 +6,114 @@ 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.5.0] - 2026-07-09
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
|
|
13
|
+
- **Filter <local-command-caveat>-wrapped caveat messages (Claude Code ≥ ~2.1) (#269)**
|
|
14
|
+
- **Fix perpetual re-regeneration of projects with up-to-date caches (#268)**
|
|
15
|
+
- **Fix ty possibly-missing-attribute warnings in tests (#267)**
|
|
16
|
+
- **Speed up cache freshness checks on large archives (#266)**
|
|
17
|
+
- **ci: move TMP/TEMP to the workspace disk on Windows runners**
|
|
18
|
+
- **perf(cov): use sys.monitoring coverage core (COVERAGE_CORE=sysmon equivalent)**
|
|
19
|
+
- **ci: collect coverage only on the primary matrix job**
|
|
20
|
+
- **Improve Artifact tool look&feel: label-linked result, lean tool use (#262) (#263)**
|
|
21
|
+
- **Remap dangling parent refs when dedup drops a distinct DAG node (#259) (#261)**
|
|
22
|
+
- **Render the Artifact tool (deploy HTML/MD page → claude.ai URL) (#257) (#260)**
|
|
23
|
+
- **Handle the full variety of Workflow invocation shapes (#174 follow-up) (#258)**
|
|
24
|
+
- **Regenerate a --no-cache directory when a source .jsonl grows (#254) (#256)**
|
|
25
|
+
- **Regenerate single-file output when its source grows; fix success-message accuracy (#221 follow-up) (#253)**
|
|
26
|
+
- **Surface the model each agent ran on, once per agent context (#246) (#252)**
|
|
27
|
+
- **feat: use nicer glyphs for fold/unfold controls (#247) (#255)**
|
|
28
|
+
- **Escape raw HTML in assistant/tool content to fix XSS (#245)**
|
|
29
|
+
- **Warn that --output / --format are ignored under --tui (#220) (#241)**
|
|
30
|
+
- **Speed up the SQLite metadata-cache build (connection reuse + synchronous=NORMAL) (#251)**
|
|
31
|
+
- **Cut pytest-xdist per-worker import cost on Windows unit runs (#250)**
|
|
32
|
+
- **Speed up integration-test fixtures on Windows (shrink copied transcripts; skip symlink tests when unavailable) (#249)**
|
|
33
|
+
- **Stream output to stdout: support -o - / /dev/stdout (#223 part 2) (#239)**
|
|
34
|
+
- **Keep fork points visible when their host message is detail-filtered (#233 follow-up) (#240)**
|
|
35
|
+
- **Explicit --output: always regenerate, infer format from suffix, fix stdout hang (#221, #222, #223 part 1) (#237)**
|
|
36
|
+
- **Connect fork-point and branch headers to their anchor message (#238)**
|
|
37
|
+
- **Anchor fork points whose node is an unrendered system message (#236)**
|
|
38
|
+
- **Render Read/Write of any Markdown file as Markdown, not Pygments (#232) (#234)**
|
|
39
|
+
- **Generic tool results: render structured content items (#227) (#235)**
|
|
40
|
+
- **Nested agent hierarchies: visual layer (#213, part 2 — WIP) (#219)**
|
|
41
|
+
- **Render nested sub-agent hierarchies (#213) (#218)**
|
|
42
|
+
- **Build(deps): bump pygments from 2.19.2 to 2.20.0 (#228)**
|
|
43
|
+
- **Build(deps): bump requests from 2.32.5 to 2.33.0 (#229)**
|
|
44
|
+
- **Build(deps-dev): bump pytest from 9.0.1 to 9.0.3 (#230)**
|
|
45
|
+
- **Build(deps): bump idna from 3.11 to 3.15 (#231)**
|
|
46
|
+
- **Side-channel prompt rendering + params-fold UX and accessibility (#174 follow-up) (#217)**
|
|
47
|
+
- **Polish the workflow run tree + dev-docs sync (#174 follow-up) (#215)**
|
|
48
|
+
- **Hybrid JSON/Markdown rendering for tool params tables (#216)**
|
|
49
|
+
- **Linearize assistant-continuation tool-flow forks instead of branching (#214)**
|
|
50
|
+
- **Enrich fork-point and branch nav labels with message summaries (#179 follow-up) (#212)**
|
|
51
|
+
- **Render dynamic-workflow run tree on the nested DOM (#174 PR3) (#210)**
|
|
52
|
+
- **Keep recaps visible at all detail levels; add --no-recaps (#179) (#209)**
|
|
53
|
+
- **Dedupe "unrecognized message type" warnings per file (#211)**
|
|
54
|
+
- **work/: delete the completed converter/renderer simplification plans (#208)**
|
|
55
|
+
- **Flag auto-memory interactions: 🧠 titles + memory filter (#192) (#204)**
|
|
56
|
+
- **Phase 3: single-axis collapse — delete pre-render _filter_by_detail (#206)**
|
|
57
|
+
- **Render Workflow tool-input (JS) + async-result JSON bodies (#174 PR2) (#205)**
|
|
58
|
+
- **Phase 2 of ghosting epic: detail-filter ghosts in place; drop _reindex_filtered_context (#194)**
|
|
59
|
+
- **Parse dynamic-Workflow runs into WorkflowRun models (#174 PR1) (#203)**
|
|
60
|
+
- **Bump mistune from 3.1.4 to 3.2.1 (#202)**
|
|
61
|
+
- **Bump gitpython from 3.1.45 to 3.1.50 (#200)**
|
|
62
|
+
- **Exclude docs/ from ty type-checking (#201)**
|
|
63
|
+
- **Render message tree as nested DOM (PR0 for #174) (#191)**
|
|
64
|
+
- **Bump urllib3 from 2.5.0 to 2.7.0 (#199)**
|
|
65
|
+
- **Ghost-aware ctx.messages; skill-fold uses None slots (ghosting epic Phase 1) (#193)**
|
|
66
|
+
- **Merge pull request #198 from daaain/fix-linux-release**
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
## [1.4.0] - 2026-06-03
|
|
70
|
+
|
|
71
|
+
### Changed
|
|
72
|
+
|
|
73
|
+
- **Fix sed**
|
|
74
|
+
- **Add MkDocs documentation site with live TUI reference (#197)**
|
|
75
|
+
- **Relax Textual constraint from `==` to `>=` (#196)**
|
|
76
|
+
- **Add `--version` flag to the CLI (#195)**
|
|
77
|
+
- **Fix AskUserQuestion result rendering + highlight chosen options (#180) (#189)**
|
|
78
|
+
- **Derive render_session_id from the SessionTree, not a loop variable (#190)**
|
|
79
|
+
- **Fix collapsible body overlapping preceding content in tool cards (#153) (#187)**
|
|
80
|
+
- **Extract compute_session_data + compute_project_aggregates (C9b) (#188)**
|
|
81
|
+
- **Add C9a characterization tests for session-scan call sites (#186)**
|
|
82
|
+
- **Route converter summary + ai-title extraction through shared helpers (#185)**
|
|
83
|
+
- **status: Wave B fully merged; Wave C kickoff (C8/C9a/C9b stacked, C10 dropped, decisions locked)**
|
|
84
|
+
- **Compute branch preview once from the DAG-line (#184)**
|
|
85
|
+
- **status: #184 fully validated (CI 11/11, CodeRabbit clean) — ready to merge**
|
|
86
|
+
- **docs: keep simplification status note self-contained to project scope**
|
|
87
|
+
- **status: correct #184 state; move GitHub CI/CodeRabbit ops to github guideline**
|
|
88
|
+
- **status: reverse-order stacked-PR lift recipe CONFIRMED on #184**
|
|
89
|
+
- **Factor session-header construction out of _render_messages (#183)**
|
|
90
|
+
- **status: #183/#184 rebased + CodeRabbit forced (#183 clean, #184 2 doc fixes); record @coderabbitai + reverse-order workarounds**
|
|
91
|
+
- **Dedup requestId tokens in pagination cache-miss fallback (#182)**
|
|
92
|
+
- **status: Wave B track complete — opp 7 PR #184 up, all monk-approved; add merge sequence**
|
|
93
|
+
- **status: note stacked-PR CI/CodeRabbit defers to merge-time**
|
|
94
|
+
- **status: opp 1 green (#182, awaiting merge); opp 6 #183 in review; opp 7 in progress**
|
|
95
|
+
- **status: opp 1 -> PR #182 (in review); opp 6 in progress**
|
|
96
|
+
- **Add live-status section to simplification plan**
|
|
97
|
+
- **Add converter/renderer simplification plan**
|
|
98
|
+
- **Move detail-visibility predicate onto MessageContent (#181)**
|
|
99
|
+
- **Sync rendering-architecture.md §5 with the current pipeline (#178)**
|
|
100
|
+
- **Extract inline junction-forward-link block into a named pass (#177)**
|
|
101
|
+
- **Co-locate the away-summary detail rule on AwaySummaryMessage (#176)**
|
|
102
|
+
- **Remove vestigial progress-chain parent repair (#175)**
|
|
103
|
+
- **plugins: dev-docs gaps + public helper API + ToolResult example (Phase 2) (#173)**
|
|
104
|
+
- **Implement unified plugin system from RFC #166 (#169)**
|
|
105
|
+
- **Render Read tool results with pygments via structured payload (closes #170) (#172)**
|
|
106
|
+
- **work/: triage against shipped main (#171)**
|
|
107
|
+
- **Always regenerate projects index so variant-flag toggles refresh links (#168)**
|
|
108
|
+
- **RFC: plugin system (unified message-transformer mechanism) (#166)**
|
|
109
|
+
- **Per-message timestamps in Markdown output (#160) (#165)**
|
|
110
|
+
- **Support non-GitHub forges via static map + `--git-link` fallback (#156) (#164)**
|
|
111
|
+
- **Obsidian-friendly output: --output dir + --expand-paths + --filter-path (#151) (#155)**
|
|
112
|
+
- **Linkify commit SHAs in rendered Markdown + HTML — closes #156 (#161)**
|
|
113
|
+
- **CSS clean-ups (issue #153) (#163)**
|
|
114
|
+
- **Cross-link TaskOutput / TaskUpdate headers back to their spawn (#154) (#158)**
|
|
115
|
+
|
|
116
|
+
|
|
9
117
|
## [1.3.0] - 2026-05-14
|
|
10
118
|
|
|
11
119
|
### Changed
|
|
@@ -107,9 +107,16 @@ with pointers to the deep-dive docs:
|
|
|
107
107
|
- [dev-docs/teammates.md](dev-docs/teammates.md) - Teammates feature deep-dive
|
|
108
108
|
- [dev-docs/message-hierarchy.md](dev-docs/message-hierarchy.md) - Fold/unfold state machine
|
|
109
109
|
- [dev-docs/implementing-a-tool-renderer.md](dev-docs/implementing-a-tool-renderer.md) - How-to: add a new tool
|
|
110
|
+
- [dev-docs/plugins.md](dev-docs/plugins.md) - Plugin system reference + author guide
|
|
110
111
|
|
|
111
112
|
User-facing docs live in [docs/](docs/); plans and TODOs live in [work/](work/).
|
|
112
113
|
|
|
114
|
+
A documentation site (MkDocs + Material) is published to GitHub Pages from
|
|
115
|
+
`docs/` + `mkdocs.yml`. The CLI reference is rendered live from Click, and the
|
|
116
|
+
TUI reference (keybindings + screenshots) is auto-generated at build time. See
|
|
117
|
+
the "Documentation Site" section of @CONTRIBUTING.md. Preview with
|
|
118
|
+
`just docs-serve`; strict build with `just docs-build`.
|
|
119
|
+
|
|
113
120
|
### Keeping dev-docs/ in sync
|
|
114
121
|
|
|
115
122
|
`dev-docs/` is **as-built reference** — the code is the authoritative
|
|
@@ -206,6 +206,47 @@ kill -USR1 $(pgrep -f claude-code-log | head -1)
|
|
|
206
206
|
|
|
207
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
208
|
|
|
209
|
+
## Documentation Site
|
|
210
|
+
|
|
211
|
+
The project publishes a documentation site to GitHub Pages, built with
|
|
212
|
+
[MkDocs](https://www.mkdocs.org/) and the
|
|
213
|
+
[Material](https://squidfunk.github.io/mkdocs-material/) theme. The site
|
|
214
|
+
configuration is `mkdocs.yml`; pages live under `docs/`.
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
# Install docs dependencies
|
|
218
|
+
uv sync --group docs
|
|
219
|
+
|
|
220
|
+
# Live-reload preview at http://127.0.0.1:8000
|
|
221
|
+
just docs-serve
|
|
222
|
+
|
|
223
|
+
# Strict build (fails on broken links/nav — same as CI)
|
|
224
|
+
just docs-build
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
Key points:
|
|
228
|
+
|
|
229
|
+
- **CLI reference** (`docs/reference/cli.md`) is rendered live from the Click
|
|
230
|
+
command via the `mkdocs-click` plugin — no manual upkeep.
|
|
231
|
+
- **TUI reference** (`reference/tui.md`) is generated at build time by
|
|
232
|
+
`docs/gen_pages.py` (a `mkdocs-gen-files` script): it introspects the Textual
|
|
233
|
+
`BINDINGS` for the keybindings tables (`scripts/generate_tui_docs.py`) and
|
|
234
|
+
captures SVG screenshots of the running TUI
|
|
235
|
+
(`scripts/generate_tui_screenshots.py`). Both scripts are runnable standalone.
|
|
236
|
+
- **Example output** (`example.md` + `examples/transcript.html`) is rendered at
|
|
237
|
+
build time from a bundled sample project
|
|
238
|
+
(`scripts/generate_example_output.py`, also `just example`) — no private data
|
|
239
|
+
or release asset involved. Generation is fault-tolerant so a render hiccup
|
|
240
|
+
can't block the build.
|
|
241
|
+
- **Development** section surfaces `dev-docs/` (symlinked as `docs/development`).
|
|
242
|
+
`CONTRIBUTING.md` and `CHANGELOG.md` are symlinked in as `docs/contributing.md`
|
|
243
|
+
and `docs/changelog.md`. A build hook (`docs/hooks.py`) rewrites links to repo
|
|
244
|
+
source files (e.g. `../claude_code_log/cli.py`) into GitHub URLs so the strict
|
|
245
|
+
build stays green.
|
|
246
|
+
- Deployment is automated by `.github/workflows/docs.yml`: PRs run a strict
|
|
247
|
+
build; pushes to `main` deploy to Pages. The repo's **Settings → Pages →
|
|
248
|
+
Source** must be set to **GitHub Actions** (one-time).
|
|
249
|
+
|
|
209
250
|
## Architecture
|
|
210
251
|
|
|
211
252
|
Start with [dev-docs/application_model.md](dev-docs/application_model.md)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: claude-code-log
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.5.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
|
|
@@ -18,7 +18,7 @@ Requires-Dist: mistune>=3.1.4
|
|
|
18
18
|
Requires-Dist: packaging>=25.0
|
|
19
19
|
Requires-Dist: pydantic>=2.12.0
|
|
20
20
|
Requires-Dist: pygments>=2.19.2
|
|
21
|
-
Requires-Dist: textual
|
|
21
|
+
Requires-Dist: textual>=6.5.0
|
|
22
22
|
Requires-Dist: toml>=0.10.2
|
|
23
23
|
Description-Content-Type: text/markdown
|
|
24
24
|
|
|
@@ -40,7 +40,7 @@ TUI demo:
|
|
|
40
40
|
|
|
41
41
|
This tool generates clean, minimalist HTML pages showing user prompts and assistant responses chronologically. It's designed to create a readable log of your Claude Code interactions with support for both individual files and entire project hierarchies.
|
|
42
42
|
|
|
43
|
-
📄 **[View Example HTML Output](https://github.
|
|
43
|
+
📄 **[View Example HTML Output](https://daaain.github.io/claude-code-log/example/)** - A real example generated from a sample of this project's development, regenerated on every docs build
|
|
44
44
|
|
|
45
45
|
## Quickstart
|
|
46
46
|
|
|
@@ -188,6 +188,21 @@ claude-code-log /path/to/project --detail low --format md --compact
|
|
|
188
188
|
|
|
189
189
|
`--compact` merges consecutive same-type sections in Markdown so runs of assistant responses share one heading instead of repeating `### 🤖 Assistant:` for each.
|
|
190
190
|
|
|
191
|
+
### Linking Commit SHAs
|
|
192
|
+
|
|
193
|
+
Plain `7c2e6f6`-shaped tokens in transcript prose get turned into clickable commit links when the SHA is reachable from a local remote-tracking branch. **github.com**, **gitlab.com**, and **bitbucket.org** work out of the box. For self-hosted forges (in-house GitLab, Gitea, Forgejo, …), supply a URL template via `--git-link`:
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
# Self-hosted GitLab
|
|
197
|
+
claude-code-log /path/to/transcript --git-link 'https://{host}/{path}/-/commit/{sha}'
|
|
198
|
+
|
|
199
|
+
# Same thing via env var (useful for TUI / repeated invocations)
|
|
200
|
+
export CLAUDE_CODE_LOG_GIT_LINK='https://{host}/{path}/-/commit/{sha}'
|
|
201
|
+
claude-code-log --tui
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
Placeholders: `{host}`, `{path}`, `{sha}`. The template fires only when the static map doesn't already know the host, so a mix of GitHub repos + self-hosted GitLab gets correct links from both. SHAs not reachable from any local remote-tracking ref render as plain text — local-only work-in-progress commits never produce broken links.
|
|
205
|
+
|
|
191
206
|
## Project Hierarchy Output
|
|
192
207
|
|
|
193
208
|
When processing all projects, the tool generates:
|
|
@@ -16,7 +16,7 @@ TUI demo:
|
|
|
16
16
|
|
|
17
17
|
This tool generates clean, minimalist HTML pages showing user prompts and assistant responses chronologically. It's designed to create a readable log of your Claude Code interactions with support for both individual files and entire project hierarchies.
|
|
18
18
|
|
|
19
|
-
📄 **[View Example HTML Output](https://github.
|
|
19
|
+
📄 **[View Example HTML Output](https://daaain.github.io/claude-code-log/example/)** - A real example generated from a sample of this project's development, regenerated on every docs build
|
|
20
20
|
|
|
21
21
|
## Quickstart
|
|
22
22
|
|
|
@@ -164,6 +164,21 @@ claude-code-log /path/to/project --detail low --format md --compact
|
|
|
164
164
|
|
|
165
165
|
`--compact` merges consecutive same-type sections in Markdown so runs of assistant responses share one heading instead of repeating `### 🤖 Assistant:` for each.
|
|
166
166
|
|
|
167
|
+
### Linking Commit SHAs
|
|
168
|
+
|
|
169
|
+
Plain `7c2e6f6`-shaped tokens in transcript prose get turned into clickable commit links when the SHA is reachable from a local remote-tracking branch. **github.com**, **gitlab.com**, and **bitbucket.org** work out of the box. For self-hosted forges (in-house GitLab, Gitea, Forgejo, …), supply a URL template via `--git-link`:
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
# Self-hosted GitLab
|
|
173
|
+
claude-code-log /path/to/transcript --git-link 'https://{host}/{path}/-/commit/{sha}'
|
|
174
|
+
|
|
175
|
+
# Same thing via env var (useful for TUI / repeated invocations)
|
|
176
|
+
export CLAUDE_CODE_LOG_GIT_LINK='https://{host}/{path}/-/commit/{sha}'
|
|
177
|
+
claude-code-log --tui
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Placeholders: `{host}`, `{path}`, `{sha}`. The template fires only when the static map doesn't already know the host, so a mix of GitHub repos + self-hosted GitLab gets correct links from both. SHAs not reachable from any local remote-tracking ref render as plain text — local-only work-in-progress commits never produce broken links.
|
|
181
|
+
|
|
167
182
|
## Project Hierarchy Output
|
|
168
183
|
|
|
169
184
|
When processing all projects, the tool generates:
|