Initial commit

This commit is contained in:
Zhongwei Li
2025-11-29 18:20:02 +08:00
commit cb4eca34d3
6 changed files with 532 additions and 0 deletions

View File

@@ -0,0 +1,11 @@
{
"name": "session-reporter-plugin",
"description": "Generate HTML reports to visualize work sessions including conversation history, code changes, and execution results",
"version": "1.0.0",
"author": {
"name": "Stefan Cho"
},
"skills": [
"./skills"
]
}

3
README.md Normal file
View File

@@ -0,0 +1,3 @@
# session-reporter-plugin
Generate HTML reports to visualize work sessions including conversation history, code changes, and execution results

53
plugin.lock.json Normal file
View File

@@ -0,0 +1,53 @@
{
"$schema": "internal://schemas/plugin.lock.v1.json",
"pluginId": "gh:devstefancho/claude-plugins:session-reporter-plugin",
"normalized": {
"repo": null,
"ref": "refs/tags/v20251128.0",
"commit": "0aea82b0b0cdccb511c9ef9b128aed07491944f6",
"treeHash": "dc7118120bc59bf4f369e4724379de52d4278f6b9384d4dddad6a0696d6c7c75",
"generatedAt": "2025-11-28T10:16:21.267388Z",
"toolVersion": "publish_plugins.py@0.2.0"
},
"origin": {
"remote": "git@github.com:zhongweili/42plugin-data.git",
"branch": "master",
"commit": "aa1497ed0949fd50e99e70d6324a29c5b34f9390",
"repoRoot": "/Users/zhongweili/projects/openmind/42plugin-data"
},
"manifest": {
"name": "session-reporter-plugin",
"description": "Generate HTML reports to visualize work sessions including conversation history, code changes, and execution results",
"version": "1.0.0"
},
"content": {
"files": [
{
"path": "README.md",
"sha256": "acbfa73ebfebaf601d11fc2e0c5c7f62c346914a6b274cab8fccb342c0f83e90"
},
{
"path": ".claude-plugin/plugin.json",
"sha256": "3062dc64adfa898649bfb2ef732cddad349bf68ccfcb127e9fa8e5698680fbcc"
},
{
"path": "skills/session-reporter/reference.md",
"sha256": "3e1df9ff1f8769186bbd4c58965ca2d080e6db841366f189a41655539dc2aabd"
},
{
"path": "skills/session-reporter/SKILL.md",
"sha256": "a8fd2ab30add7855119ccf19567f050cab68b875a3df5ef494e2fc54107abd41"
},
{
"path": "skills/session-reporter/templates/report.html",
"sha256": "2a0c5575822568a5f79b0e44325f25aadfbed6f6f6b384bb5bd4a7aa563aad77"
}
],
"dirSha256": "dc7118120bc59bf4f369e4724379de52d4278f6b9384d4dddad6a0696d6c7c75"
},
"security": {
"scannedAt": null,
"scannerVersion": null,
"flags": []
}
}

View File

@@ -0,0 +1,114 @@
---
name: session-reporter
description: Generate HTML file to view work session. Use when user asks to view content as HTML (e.g., 'HTML로 보여줘', 'HTML 파일로 만들어줘', 'view as HTML', 'export to HTML', 'HTML로 저장').
allowed-tools: Write, Bash, AskUserQuestion
---
# Session Reporter
Generate an HTML file that visualizes your current work session, including conversation history, code changes, and execution results. The HTML file is automatically opened in your default browser.
## Instructions
Follow these steps to generate a session report:
### 1. Ask User for Report Scope
Use the AskUserQuestion tool to determine what content to include:
```
Question: "어떤 범위의 세션 내용을 HTML로 만들까요?"
Options:
- "마지막 작업만" (Last activity only - most recent task/conversation)
- "전체 세션" (Full session - entire conversation from start)
- "커스텀 선택" (Custom - ask user to specify what to include)
```
### 2. Collect Session Information
Based on the user's choice, gather the following information:
- **작업 요약 (Work Summary)**:
- Files modified
- Key decisions made
- Major changes implemented
- **대화 내용 (Conversation)**:
- User questions and requests
- Claude's responses
- Important clarifications
- **코드 변경사항 (Code Changes)**:
- Modified files with diffs or before/after comparisons
- New files created
- Files deleted
- **실행 결과 (Execution Results)**:
- Test results
- Build output
- Error messages
- Command outputs
### 3. Generate HTML File
Use the template at `templates/report.html` to create the HTML file:
1. Read the template file
2. Replace placeholders with actual session data:
- `{{TITLE}}` - Report title (e.g., "Session Report - 2025-11-15")
- `{{TIMESTAMP}}` - Generation timestamp
- `{{SUMMARY}}` - Work summary section
- `{{CONVERSATION}}` - Conversation content
- `{{CHANGES}}` - Code changes section
- `{{RESULTS}}` - Execution results section
3. Save to `/tmp/session-report-{timestamp}.html`
- Use format: `session-report-YYYYMMDD-HHMMSS.html`
- Example: `session-report-20251115-143022.html`
### 4. Open in Browser
After generating the HTML file:
1. Use Bash tool to open the file:
```bash
open /tmp/session-report-{timestamp}.html
```
2. Provide the file:// path to the user:
```
file:///tmp/session-report-{timestamp}.html
```
### 5. Inform User
Tell the user:
- HTML 파일이 생성되었고 브라우저에서 열렸습니다
- The file path for future reference
- The file is temporary and will be cleaned up on system restart
## Examples
### Example 1: Last Activity Only
```
User: HTML로 보여줘
Claude: [Uses AskUserQuestion to confirm scope]
User: 마지막 작업만
Claude: [Generates HTML with recent changes only, opens in browser]
```
### Example 2: Full Session
```
User: 전체 세션 내용을 HTML 파일로 만들어줘
Claude: [Uses AskUserQuestion to confirm]
User: 전체 세션
Claude: [Generates comprehensive HTML with all conversation and changes]
```
## Tips
- Keep HTML styling simple and clean for easy reading
- Include proper syntax highlighting for code blocks using `<pre><code>` tags
- Add section navigation for longer reports
- Make the HTML print-friendly for documentation purposes
- Use semantic HTML elements for better accessibility

View File

@@ -0,0 +1,44 @@
# Session Reporter - Reference
## Overview
HTML 파일로 작업 세션을 시각화하여 브라우저에서 볼 수 있습니다.
## Trigger Keywords
**Korean**: "HTML로 보여줘", "HTML 파일로 만들어줘", "HTML로 저장"
**English**: "view as HTML", "export to HTML", "show in HTML"
## Report Scope Options
1. **마지막 작업만** - 최근 작업 내용만
2. **전체 세션** - 처음부터 모든 대화/변경사항
3. **커스텀 선택** - 원하는 내용만 선택
## File Location
```
/tmp/session-report-YYYYMMDD-HHMMSS.html
```
⚠️ `/tmp` 파일은 시스템 재시작시 삭제됩니다.
## Template Customization
템플릿 위치: `.claude/skills/session-reporter/templates/report.html`
### Placeholders
- `{{TITLE}}` - 리포트 제목
- `{{TIMESTAMP}}` - 생성 시간
- `{{SUMMARY}}` - 작업 요약
- `{{CONVERSATION}}` - 대화 내용
- `{{CHANGES}}` - 코드 변경사항
- `{{RESULTS}}` - 실행 결과
- `{{FILE_PATH}}` - 파일 경로
## Tips
- **공유 전 확인**: 민감한 정보(API 키, 비밀번호) 제거
- **영구 저장**: 중요한 리포트는 다른 위치에 복사
- **PDF 변환**: 브라우저의 인쇄 기능(Cmd+P) 사용

View File

@@ -0,0 +1,307 @@
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{TITLE}}</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
line-height: 1.6;
color: #333;
background-color: #f5f5f5;
padding: 20px;
}
.container {
max-width: 1200px;
margin: 0 auto;
background-color: white;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
border-radius: 8px;
overflow: hidden;
}
header {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
padding: 40px;
text-align: center;
}
header h1 {
font-size: 2em;
margin-bottom: 10px;
}
header .timestamp {
font-size: 0.9em;
opacity: 0.9;
}
nav {
background-color: #f8f9fa;
padding: 15px 40px;
border-bottom: 1px solid #e0e0e0;
position: sticky;
top: 0;
z-index: 100;
}
nav a {
color: #667eea;
text-decoration: none;
margin-right: 20px;
font-weight: 500;
transition: color 0.2s;
}
nav a:hover {
color: #764ba2;
}
.content {
padding: 40px;
}
section {
margin-bottom: 50px;
padding-bottom: 30px;
border-bottom: 2px solid #f0f0f0;
}
section:last-child {
border-bottom: none;
}
h2 {
color: #667eea;
font-size: 1.8em;
margin-bottom: 20px;
padding-bottom: 10px;
border-bottom: 3px solid #667eea;
}
h3 {
color: #555;
font-size: 1.3em;
margin-top: 25px;
margin-bottom: 15px;
}
.summary-item {
background-color: #f8f9fa;
padding: 15px 20px;
margin-bottom: 10px;
border-left: 4px solid #667eea;
border-radius: 4px;
}
.conversation-block {
margin-bottom: 20px;
}
.user-message {
background-color: #e3f2fd;
padding: 15px 20px;
border-radius: 8px;
margin-bottom: 10px;
border-left: 4px solid #2196f3;
}
.assistant-message {
background-color: #f3e5f5;
padding: 15px 20px;
border-radius: 8px;
margin-bottom: 10px;
border-left: 4px solid #9c27b0;
}
.message-label {
font-weight: 600;
margin-bottom: 8px;
font-size: 0.9em;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.user-message .message-label {
color: #1976d2;
}
.assistant-message .message-label {
color: #7b1fa2;
}
.code-change {
background-color: #f8f9fa;
padding: 20px;
margin-bottom: 20px;
border-radius: 8px;
border: 1px solid #e0e0e0;
}
.file-path {
font-family: 'Courier New', monospace;
font-weight: 600;
color: #667eea;
margin-bottom: 10px;
font-size: 0.95em;
}
pre {
background-color: #2d2d2d;
color: #f8f8f2;
padding: 20px;
border-radius: 6px;
overflow-x: auto;
font-family: 'Courier New', Courier, monospace;
font-size: 0.9em;
line-height: 1.5;
margin-top: 10px;
}
code {
font-family: 'Courier New', Courier, monospace;
}
.execution-result {
background-color: #f8f9fa;
padding: 20px;
margin-bottom: 20px;
border-radius: 8px;
border-left: 4px solid #4caf50;
}
.result-success {
border-left-color: #4caf50;
}
.result-error {
border-left-color: #f44336;
}
.result-label {
font-weight: 600;
margin-bottom: 10px;
font-size: 0.95em;
}
.result-success .result-label {
color: #2e7d32;
}
.result-error .result-label {
color: #c62828;
}
ul, ol {
margin-left: 25px;
margin-bottom: 15px;
}
li {
margin-bottom: 8px;
}
footer {
background-color: #f8f9fa;
padding: 20px 40px;
text-align: center;
color: #777;
font-size: 0.9em;
border-top: 1px solid #e0e0e0;
}
@media print {
body {
background-color: white;
padding: 0;
}
.container {
box-shadow: none;
}
nav {
display: none;
}
section {
page-break-inside: avoid;
}
}
@media (max-width: 768px) {
body {
padding: 10px;
}
header {
padding: 20px;
}
.content {
padding: 20px;
}
nav {
padding: 10px 20px;
}
nav a {
display: block;
margin: 5px 0;
}
}
</style>
</head>
<body>
<div class="container">
<header>
<h1>{{TITLE}}</h1>
<p class="timestamp">생성 시간: {{TIMESTAMP}}</p>
</header>
<nav>
<a href="#summary">작업 요약</a>
<a href="#conversation">대화 내용</a>
<a href="#changes">코드 변경사항</a>
<a href="#results">실행 결과</a>
</nav>
<div class="content">
<section id="summary">
<h2>📋 작업 요약</h2>
{{SUMMARY}}
</section>
<section id="conversation">
<h2>💬 대화 내용</h2>
{{CONVERSATION}}
</section>
<section id="changes">
<h2>📝 코드 변경사항</h2>
{{CHANGES}}
</section>
<section id="results">
<h2>✅ 실행 결과</h2>
{{RESULTS}}
</section>
</div>
<footer>
<p>Generated by Claude Code Session Reporter</p>
<p>File: {{FILE_PATH}}</p>
</footer>
</div>
</body>
</html>