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.
Files changed (223) hide show
  1. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/.claude/skills/tool-renderer/SKILL.md +27 -1
  2. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/.github/workflows/ci.yml +3 -3
  3. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/CHANGELOG.md +52 -0
  4. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/CLAUDE.md +31 -6
  5. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/CONTRIBUTING.md +31 -8
  6. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/PKG-INFO +37 -1
  7. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/README.md +36 -0
  8. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/cache.py +167 -24
  9. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/cli.py +155 -11
  10. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/converter.py +1011 -143
  11. claude_code_log-1.3.0/claude_code_log/dag.py +1037 -0
  12. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/factories/__init__.py +21 -0
  13. claude_code_log-1.3.0/claude_code_log/factories/agent_metadata_factory.py +107 -0
  14. claude_code_log-1.3.0/claude_code_log/factories/attachment_factory.py +126 -0
  15. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/factories/meta_factory.py +2 -0
  16. claude_code_log-1.3.0/claude_code_log/factories/system_factory.py +158 -0
  17. claude_code_log-1.3.0/claude_code_log/factories/task_notification_factory.py +161 -0
  18. claude_code_log-1.3.0/claude_code_log/factories/teammate_factory.py +140 -0
  19. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/factories/tool_factory.py +520 -2
  20. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/factories/transcript_factory.py +19 -3
  21. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/factories/user_factory.py +104 -3
  22. claude_code_log-1.3.0/claude_code_log/html/async_formatter.py +175 -0
  23. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/renderer.py +545 -16
  24. claude_code_log-1.3.0/claude_code_log/html/system_formatters.py +299 -0
  25. claude_code_log-1.3.0/claude_code_log/html/teammate_formatter.py +568 -0
  26. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/filter_styles.css +4 -0
  27. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/global_styles.css +106 -0
  28. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/message_styles.css +214 -5
  29. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/project_card_styles.css +25 -1
  30. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/search.html +10 -5
  31. claude_code_log-1.3.0/claude_code_log/html/templates/components/session_nav.html +70 -0
  32. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/session_nav_styles.css +108 -0
  33. claude_code_log-1.3.0/claude_code_log/html/templates/components/teammate_styles.css +374 -0
  34. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/timeline.html +23 -3
  35. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/index.html +15 -0
  36. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/transcript.html +145 -3
  37. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/tool_formatters.py +255 -3
  38. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/user_formatters.py +42 -5
  39. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/utils.py +164 -6
  40. claude_code_log-1.3.0/claude_code_log/json/__init__.py +5 -0
  41. claude_code_log-1.3.0/claude_code_log/json/renderer.py +222 -0
  42. claude_code_log-1.3.0/claude_code_log/markdown/renderer.py +1875 -0
  43. claude_code_log-1.3.0/claude_code_log/migrations/004_html_pagination_variant.sql +69 -0
  44. claude_code_log-1.3.0/claude_code_log/migrations/005_session_team_name.sql +14 -0
  45. claude_code_log-1.3.0/claude_code_log/migrations/006_session_ai_title.sql +14 -0
  46. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/models.py +761 -3
  47. claude_code_log-1.3.0/claude_code_log/renderer.py +4305 -0
  48. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/tui.py +35 -27
  49. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/utils.py +91 -59
  50. claude_code_log-1.3.0/dev-docs/agents.md +191 -0
  51. claude_code_log-1.3.0/dev-docs/application_model.md +448 -0
  52. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/css-classes.md +5 -0
  53. claude_code_log-1.3.0/dev-docs/dag.md +702 -0
  54. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/implementing-a-tool-renderer.md +17 -0
  55. 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
  56. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages.md +80 -5
  57. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/rendering-architecture.md +44 -8
  58. claude_code_log-1.3.0/dev-docs/teammates.md +978 -0
  59. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/justfile +18 -20
  60. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/pyproject.toml +6 -1
  61. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/uv.lock +1 -1
  62. claude_code_log-1.3.0/work/async-agents.md +215 -0
  63. claude_code_log-1.3.0/work/refactor-reindex-with-ghosting.md +164 -0
  64. {claude_code_log-1.1.1/dev-docs → claude_code_log-1.3.0/work}/rendering-next.md +2 -2
  65. claude_code_log-1.3.0/work/session-state-propagation.md +233 -0
  66. claude_code_log-1.1.1/.github/workflows/claude.yml +0 -67
  67. claude_code_log-1.1.1/claude_code_log/factories/system_factory.py +0 -87
  68. claude_code_log-1.1.1/claude_code_log/html/system_formatters.py +0 -98
  69. claude_code_log-1.1.1/claude_code_log/html/templates/components/session_nav.html +0 -39
  70. claude_code_log-1.1.1/claude_code_log/markdown/renderer.py +0 -974
  71. claude_code_log-1.1.1/claude_code_log/renderer.py +0 -2329
  72. claude_code_log-1.1.1/dev-docs/restoring-archived-sessions.md +0 -105
  73. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/.claude/settings.json +0 -0
  74. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/.gitignore +0 -0
  75. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/.vscode/settings.json +0 -0
  76. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/LICENSE +0 -0
  77. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/__init__.py +0 -0
  78. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/factories/assistant_factory.py +0 -0
  79. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/__init__.py +0 -0
  80. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/ansi_colors.py +0 -0
  81. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/assistant_formatters.py +0 -0
  82. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/renderer_code.py +0 -0
  83. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/edit_diff_styles.css +0 -0
  84. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/page_nav_styles.css +0 -0
  85. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/pygments_styles.css +0 -0
  86. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/search_inline.html +0 -0
  87. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/search_inline_script.html +0 -0
  88. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/search_results_panel.html +0 -0
  89. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/search_styles.css +0 -0
  90. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/timeline_styles.css +0 -0
  91. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/timezone_converter.js +0 -0
  92. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/html/templates/components/todo_styles.css +0 -0
  93. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/image_export.py +0 -0
  94. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/markdown/__init__.py +0 -0
  95. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/migrations/001_initial_schema.sql +0 -0
  96. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/migrations/002_html_cache.sql +0 -0
  97. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/migrations/003_html_pagination.sql +0 -0
  98. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/migrations/__init__.py +0 -0
  99. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/migrations/runner.py +0 -0
  100. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/parser.py +0 -0
  101. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/py.typed +0 -0
  102. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/claude_code_log/renderer_timings.py +0 -0
  103. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/assistant/assistant.json +0 -0
  104. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/assistant/assistant.jsonl +0 -0
  105. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/assistant/assistant_sidechain.json +0 -0
  106. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/assistant/assistant_sidechain.jsonl +0 -0
  107. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/assistant/thinking.json +0 -0
  108. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/assistant/thinking.jsonl +0 -0
  109. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/system/file_history_snapshot.json +0 -0
  110. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/system/file_history_snapshot.jsonl +0 -0
  111. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/system/queue_operation.json +0 -0
  112. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/system/queue_operation.jsonl +0 -0
  113. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/system/summary.json +0 -0
  114. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/system/summary.jsonl +0 -0
  115. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/system/system_info.json +0 -0
  116. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/system/system_info.jsonl +0 -0
  117. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/AskUserQuestion-tool_result.json +0 -0
  118. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/AskUserQuestion-tool_result.jsonl +0 -0
  119. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/AskUserQuestion-tool_result_error.json +0 -0
  120. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/AskUserQuestion-tool_result_error.jsonl +0 -0
  121. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/AskUserQuestion-tool_use.json +0 -0
  122. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/AskUserQuestion-tool_use.jsonl +0 -0
  123. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Bash-tool_result.json +0 -0
  124. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Bash-tool_result.jsonl +0 -0
  125. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Bash-tool_result_error.json +0 -0
  126. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Bash-tool_result_error.jsonl +0 -0
  127. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Bash-tool_use.json +0 -0
  128. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Bash-tool_use.jsonl +0 -0
  129. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/BashOutput-tool_result.json +0 -0
  130. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/BashOutput-tool_result.jsonl +0 -0
  131. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/BashOutput-tool_use.json +0 -0
  132. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/BashOutput-tool_use.jsonl +0 -0
  133. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Edit-tool_result.json +0 -0
  134. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Edit-tool_result.jsonl +0 -0
  135. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Edit-tool_result_error.json +0 -0
  136. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Edit-tool_result_error.jsonl +0 -0
  137. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Edit-tool_use.json +0 -0
  138. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Edit-tool_use.jsonl +0 -0
  139. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/ExitPlanMode-tool_result.json +0 -0
  140. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/ExitPlanMode-tool_result.jsonl +0 -0
  141. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/ExitPlanMode-tool_result_error.json +0 -0
  142. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/ExitPlanMode-tool_result_error.jsonl +0 -0
  143. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/ExitPlanMode-tool_use.json +0 -0
  144. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/ExitPlanMode-tool_use.jsonl +0 -0
  145. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Glob-tool_result.json +0 -0
  146. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Glob-tool_result.jsonl +0 -0
  147. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Glob-tool_use.json +0 -0
  148. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Glob-tool_use.jsonl +0 -0
  149. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Grep-tool_result.json +0 -0
  150. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Grep-tool_result.jsonl +0 -0
  151. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Grep-tool_use.json +0 -0
  152. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Grep-tool_use.jsonl +0 -0
  153. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/KillShell-tool_result.json +0 -0
  154. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/KillShell-tool_result.jsonl +0 -0
  155. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/KillShell-tool_result_error.json +0 -0
  156. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/KillShell-tool_result_error.jsonl +0 -0
  157. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/KillShell-tool_use.json +0 -0
  158. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/KillShell-tool_use.jsonl +0 -0
  159. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/LS-tool_result.json +0 -0
  160. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/LS-tool_result.jsonl +0 -0
  161. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/LS-tool_use.json +0 -0
  162. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/LS-tool_use.jsonl +0 -0
  163. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/MultiEdit-tool_result.json +0 -0
  164. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/MultiEdit-tool_result.jsonl +0 -0
  165. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/MultiEdit-tool_result_error.json +0 -0
  166. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/MultiEdit-tool_result_error.jsonl +0 -0
  167. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/MultiEdit-tool_use.json +0 -0
  168. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/MultiEdit-tool_use.jsonl +0 -0
  169. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Read-tool_result.json +0 -0
  170. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Read-tool_result.jsonl +0 -0
  171. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Read-tool_result_error.json +0 -0
  172. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Read-tool_result_error.jsonl +0 -0
  173. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Read-tool_use.json +0 -0
  174. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Read-tool_use.jsonl +0 -0
  175. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Task-tool_result.json +0 -0
  176. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Task-tool_result.jsonl +0 -0
  177. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Task-tool_use.json +0 -0
  178. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Task-tool_use.jsonl +0 -0
  179. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/TodoWrite-tool_result.json +0 -0
  180. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/TodoWrite-tool_result.jsonl +0 -0
  181. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/TodoWrite-tool_use.json +0 -0
  182. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/TodoWrite-tool_use.jsonl +0 -0
  183. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/WebFetch-tool_result.json +0 -0
  184. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/WebFetch-tool_result.jsonl +0 -0
  185. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/WebFetch-tool_use.json +0 -0
  186. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/WebFetch-tool_use.jsonl +0 -0
  187. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/WebSearch-tool_result.json +0 -0
  188. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/WebSearch-tool_result.jsonl +0 -0
  189. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/WebSearch-tool_use.json +0 -0
  190. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/WebSearch-tool_use.jsonl +0 -0
  191. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Write-tool_result.json +0 -0
  192. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Write-tool_result.jsonl +0 -0
  193. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Write-tool_result_error.json +0 -0
  194. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Write-tool_result_error.jsonl +0 -0
  195. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Write-tool_use.json +0 -0
  196. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/Write-tool_use.jsonl +0 -0
  197. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/exit_plan_mode-tool_result.json +0 -0
  198. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/exit_plan_mode-tool_result.jsonl +0 -0
  199. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/exit_plan_mode-tool_use.json +0 -0
  200. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/tools/exit_plan_mode-tool_use.jsonl +0 -0
  201. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/user/bash_input.json +0 -0
  202. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/user/bash_input.jsonl +0 -0
  203. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/user/bash_output.json +0 -0
  204. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/user/bash_output.jsonl +0 -0
  205. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/user/command_output.json +0 -0
  206. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/user/command_output.jsonl +0 -0
  207. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/user/image.json +0 -0
  208. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/user/image.jsonl +0 -0
  209. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/user/user.json +0 -0
  210. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/user/user.jsonl +0 -0
  211. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/user/user_command.json +0 -0
  212. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/user/user_command.jsonl +0 -0
  213. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/user/user_sidechain.json +0 -0
  214. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/user/user_sidechain.jsonl +0 -0
  215. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/user/user_slash_command.json +0 -0
  216. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/dev-docs/messages/user/user_slash_command.jsonl +0 -0
  217. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/mise.toml +0 -0
  218. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/stubs/pygments/__init__.pyi +0 -0
  219. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/stubs/pygments/formatter.pyi +0 -0
  220. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/stubs/pygments/formatters/__init__.pyi +0 -0
  221. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/stubs/pygments/lexer.pyi +0 -0
  222. {claude_code_log-1.1.1 → claude_code_log-1.3.0}/stubs/pygments/lexers/__init__.pyi +0 -0
  223. {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 -n auto -m "not (tui or browser)" -v
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 -n auto -m "not (tui or browser or benchmark)" --cov=claude_code_log --cov-report=xml --cov-report=html --cov-report=term
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 -n auto -m tui --cov=claude_code_log --cov-append --cov-report=xml --cov-report=html --cov-report=term
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 -n auto -m browser --cov=claude_code_log --cov-append --cov-report=xml --cov-report=html --cov-report=term
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
- **Always use `-n auto` for parallel test execution:**
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 -n auto -m "not (tui or browser)" -v
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 -n auto -m tui
63
+ # or: uv run pytest -m tui
62
64
 
63
65
  # Browser tests
64
66
  just test-browser
65
- # or: uv run pytest -n auto -m browser
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 -n auto -m "not (tui or browser)" -v -x`).
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
- For detailed architecture documentation, see:
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 -n auto -m "not (tui or browser)" -v
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 -n auto test/test_snapshot_html.py -v
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
- uv run pytest -n auto test/test_snapshot_html.py --snapshot-update
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 -n auto --cov=claude_code_log --cov-report=html --cov-report=term
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
- For detailed architecture documentation, see [dev-docs/rendering-architecture.md](dev-docs/rendering-architecture.md).
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.1.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