Initial commit
This commit is contained in:
11
.claude-plugin/plugin.json
Normal file
11
.claude-plugin/plugin.json
Normal 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
3
README.md
Normal 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
53
plugin.lock.json
Normal 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": []
|
||||
}
|
||||
}
|
||||
114
skills/session-reporter/SKILL.md
Normal file
114
skills/session-reporter/SKILL.md
Normal 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
|
||||
44
skills/session-reporter/reference.md
Normal file
44
skills/session-reporter/reference.md
Normal 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) 사용
|
||||
307
skills/session-reporter/templates/report.html
Normal file
307
skills/session-reporter/templates/report.html
Normal 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>
|
||||
Reference in New Issue
Block a user