viewcc 1.0.0
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.
- package/LICENSE +21 -0
- package/README.md +160 -0
- package/bin/claude-viz.js +9 -0
- package/dist/assets/index-BQSevtzO.js +110 -0
- package/dist/assets/index-lL8g_3Ei.css +1 -0
- package/dist/data/graph-data.json +388 -0
- package/dist/index.html +23 -0
- package/lib/cli.d.ts +3 -0
- package/lib/cli.d.ts.map +1 -0
- package/lib/cli.js +132 -0
- package/lib/cli.js.map +1 -0
- package/lib/scanner.d.ts +15 -0
- package/lib/scanner.d.ts.map +1 -0
- package/lib/scanner.js +330 -0
- package/lib/scanner.js.map +1 -0
- package/lib/server.d.ts +12 -0
- package/lib/server.d.ts.map +1 -0
- package/lib/server.js +79 -0
- package/lib/server.js.map +1 -0
- package/lib/utils.d.ts +15 -0
- package/lib/utils.d.ts.map +1 -0
- package/lib/utils.js +67 -0
- package/lib/utils.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,388 @@
|
|
|
1
|
+
{
|
|
2
|
+
"nodes": [
|
|
3
|
+
{
|
|
4
|
+
"id": "agent:yaml-header-inserter",
|
|
5
|
+
"type": "agent",
|
|
6
|
+
"name": "yaml-header-inserter",
|
|
7
|
+
"description": "YAML 헤더가 누락된 마크다운 파일을 분석하고 적절한 YAML front matter를 삽입합니다. md파일에 YAML 헤더 추가가 필요할 때 사용하세요.",
|
|
8
|
+
"tools": [
|
|
9
|
+
"Read",
|
|
10
|
+
"Edit",
|
|
11
|
+
"Grep",
|
|
12
|
+
"Glob",
|
|
13
|
+
"Bash"
|
|
14
|
+
],
|
|
15
|
+
"model": "inherit",
|
|
16
|
+
"subagents": [],
|
|
17
|
+
"skills": [],
|
|
18
|
+
"filePath": ".claude/agents/yaml-header-inserter.md",
|
|
19
|
+
"systemPrompt": "You are an expert at analyzing markdown files and generating appropriate YAML front matter for an Obsidian knowledge management vault.\n\n## Context\n\nThis vault belongs to a solopreneur/founder focused on AI tools and content creation. Content is primarily in Korean with some English. The vault uses a Zettelkasten-inspired organization system.\n\n## YAML Front Matter Format\n\nUse this exact format for all files:\n\n```yaml\n---\ntitle: [문서 제목 또는 인물 이름]\ndate: YYYY-MM-DD\ntags:\n - [카테고리 태그]\n - [세부 태그]\nsum..."
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": "agent:problem-definition-analyzer",
|
|
23
|
+
"type": "agent",
|
|
24
|
+
"name": "problem-definition-analyzer",
|
|
25
|
+
"description": "프로젝트 폴더를 분석하여 문제정의 프레임워크에 맞게 정리하고 \"문제정의.md\" 파일을 생성합니다. 사용자가 \"문제정의 작성해줘\", \"문제정의 분석해줘\" 등 프로젝트의 사업성/문제정의 분석을 요청할 때 사용합니다.",
|
|
26
|
+
"tools": [
|
|
27
|
+
"Glob",
|
|
28
|
+
"Grep",
|
|
29
|
+
"Read",
|
|
30
|
+
"Write"
|
|
31
|
+
],
|
|
32
|
+
"model": "sonnet",
|
|
33
|
+
"subagents": [],
|
|
34
|
+
"skills": [],
|
|
35
|
+
"filePath": ".claude/agents/problem-definition-analyzer.md",
|
|
36
|
+
"systemPrompt": "You are a startup problem definition analyst. Your role is to analyze project documents and create a structured problem definition document based on the 8-question framework.\n\n## 실행 프로세스\n\n1. **폴더 경로 확인**: 사용자가 지정한 프로젝트 폴더 경로 파악\n2. **문서 수집**: Glob으로 폴더 내 모든 .md 파일 검색, Read로 내용 읽기\n3. **프레임워크 분석**: 수집된 내용을 8개 질문에 맞게 분석\n4. **파일 생성**: Write로 \"문제정의.md\" 파일을 해당 폴더에 생성\n\n## 출력 파일 형식\n\n**중요: 각 섹션의 헤딩은 반드시 원래 질문을 그대로 사용할 것!**\n\n```markdown\n---\ntitle: [프로젝트명] 문제정의\ndate: YYYY-MM-DD\ntags:\n - 문제정의\n - 프로젝트\n - [..."
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"id": "agent:recording-processor",
|
|
40
|
+
"type": "agent",
|
|
41
|
+
"name": "recording-processor",
|
|
42
|
+
"description": "녹음 파일을 처리하여 옵시디언 노트로 변환하는 에이전트. \"녹음 파일 처리해줘\", \"녹음파일을 정리해줘\", \"회의록 만들어줘\" 등의 요청 시 사용. 오디오 STT → 내용 분석 → 노트 생성 → 00_Inbox 저장.",
|
|
43
|
+
"tools": [
|
|
44
|
+
"Read",
|
|
45
|
+
"Write",
|
|
46
|
+
"Bash",
|
|
47
|
+
"Glob",
|
|
48
|
+
"AskUserQuestion"
|
|
49
|
+
],
|
|
50
|
+
"model": "sonnet",
|
|
51
|
+
"subagents": [],
|
|
52
|
+
"skills": [
|
|
53
|
+
"audio-transcriber",
|
|
54
|
+
"meeting-summarizer"
|
|
55
|
+
],
|
|
56
|
+
"filePath": ".claude/agents/recording-processor.md",
|
|
57
|
+
"systemPrompt": "# Recording Processor - 녹음 파일 처리 에이전트\n\n녹음 폴더(`/Users/inkeun/Documents/00_녹음파일/`)의 오디오 파일을 처리하여 옵시디언 노트로 변환하는 에이전트입니다.\n\n## 역할\n\n1. **파일 스캔**: 오늘 또는 최근 녹음 파일 확인\n2. **STT 변환**: 오디오 → 텍스트 (OpenAI Whisper)\n3. **내용 분석**: 참석자, 주제, 액션 아이템 추출 (Claude Sonnet)\n4. **노트 생성**: 구조화된 마크다운 생성\n5. **파일 이동**: 00_Inbox에 저장, 원본은 처리완료 폴더로\n\n## 실행 원칙\n\n**중요**: 이 에이전트는 Phase 1부터 Phase 7까지 **모든 단계를 완료**해야 합니다. 중간에 종료하거나 사용자에게 제어권을 넘기면 안 됩니다. 각 Phase는 순차적으로 실행되며, 사용자 입력이 필요한 경우 **AskUserQuestion 도구를 사용**하여 응답을 받은 후 계속 진행합니다...."
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"id": "agent:knowledge-orchestrator",
|
|
61
|
+
"type": "agent",
|
|
62
|
+
"name": "knowledge-orchestrator",
|
|
63
|
+
"description": "개인 지식 베이스 질의 총괄 에이전트. 사용자의 자연어 질문을 해석하여 온톨로지 엔진을 통해 인물, 프로젝트, 미팅 정보를 검색하고 종합 응답. 사용 시점: (1) \"[인물명]에 대해 알려줘\" (2) \"[인물명]과 나눈 대화\" (3) \"앤틀러 소속 인물\" (4) \"최근 미팅 목록\" (5) \"진행 중인 프로젝트\" (6) \"[프로젝트명] 관련 정보\" (7) 인물 간 관계나 미팅/프로젝트 기록 질의",
|
|
64
|
+
"tools": [
|
|
65
|
+
"Read",
|
|
66
|
+
"Bash",
|
|
67
|
+
"Glob",
|
|
68
|
+
"Grep"
|
|
69
|
+
],
|
|
70
|
+
"model": "sonnet",
|
|
71
|
+
"subagents": [],
|
|
72
|
+
"skills": [
|
|
73
|
+
"ontology-query",
|
|
74
|
+
"ontology-sync"
|
|
75
|
+
],
|
|
76
|
+
"filePath": ".claude/agents/knowledge-orchestrator.md",
|
|
77
|
+
"systemPrompt": "# Knowledge Orchestrator - 개인 지식 베이스 총괄 에이전트\n\n사용자의 자연어 질의를 해석하여 온톨로지 엔진(RDF/SPARQL)을 통해 인물, 프로젝트, 미팅 정보를 검색하고 종합 응답합니다.\n\n## 역할\n\n### 주요 사용 케이스\n\n**1. 사용자 질의 응답 (Query Mode)**\n- 사용자의 자연어 질문 분석\n- 적절한 프리셋 쿼리 또는 커스텀 SPARQL 선택\n- 여러 쿼리 결과를 사용자 친화적으로 정리\n- 필요시 원본 파일 읽어서 상세 정보 제공\n\n**2. 볼트 정리 후 동기화 (Sync Mode)**\n- vault-organizer에서 Phase 6으로 호출됨\n- ontology-sync 스킬을 실행하여 knowledge.ttl 갱신\n- 인물사전, 프로젝트, 미팅 정보를 RDF 트리플로 변환\n- 변환 결과 통계 보고 (Person, Project, Meeting 개수)\n\n## 워크플로우\n\n### Sync Mode (볼트 정리 후 호출)\n\nvault-..."
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"id": "agent:person-directory-updater",
|
|
81
|
+
"type": "agent",
|
|
82
|
+
"name": "person-directory-updater",
|
|
83
|
+
"description": "인물사전(04_Networking/00_인물사전/) 업데이트 에이전트. 사용 시점: (1) \"인물사전 업데이트해줘\" (2) \"새로운 인물 추가해줘\" (3) \"최근 파일에서 인물 정보 추출해줘\" (4) 최근 추가된 미팅/커피챗 기록에서 인물 정보를 인물사전에 반영할 때",
|
|
84
|
+
"tools": [
|
|
85
|
+
"Read",
|
|
86
|
+
"Write",
|
|
87
|
+
"Edit",
|
|
88
|
+
"Grep",
|
|
89
|
+
"Glob",
|
|
90
|
+
"Bash"
|
|
91
|
+
],
|
|
92
|
+
"model": "sonnet",
|
|
93
|
+
"subagents": [],
|
|
94
|
+
"skills": [],
|
|
95
|
+
"filePath": ".claude/agents/person-directory-updater.md",
|
|
96
|
+
"systemPrompt": "# 인물사전 업데이트 에이전트\n\n최근 추가/수정된 파일에서 인물 정보를 추출하여 인물사전을 업데이트하는 에이전트.\n\n## 작업 순서\n\n### 1. 인물 관련 최근 파일 찾기\n\n```bash\npython .claude/skills/recent-files-finder/scripts/find_recent_files.py -e .md --person\n```\n\n### 2. 각 파일 분석 및 인물 정보 추출\n\n파일을 읽고 다음 정보를 추출:\n- **이름**: 파일명 또는 본문에서 추출\n- **소속**: 회사명, 직함\n- **만난 맥락**: 커피챗, 미팅, 면접, 링크드인 대화 등\n- **주요 내용**: 대화 요약, 인사이트\n- **연락처**: 이메일, 전화번호, LinkedIn URL (있는 경우)\n- **후속 조치**: Action items\n\n### 3. 인물사전 업데이트\n\n#### 파일 위치\n`04_Networking/00_인물사전/`\n\n#### 파일명 규칙\n`[이름]_[소속].md`\n-..."
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"id": "agent:visualizer-launcher",
|
|
100
|
+
"type": "agent",
|
|
101
|
+
"name": "visualizer-launcher",
|
|
102
|
+
"description": "에이전트-스킬 관계 그래프를 생성하고 웹 서버를 실행하여 시각화합니다. \"에이전트 구조 보여줘\", \"시각화 실행해줘\" 등의 요청 시 사용.",
|
|
103
|
+
"tools": [
|
|
104
|
+
"Bash",
|
|
105
|
+
"Read"
|
|
106
|
+
],
|
|
107
|
+
"model": "haiku",
|
|
108
|
+
"subagents": [],
|
|
109
|
+
"skills": [
|
|
110
|
+
"agent-skill-visualizer"
|
|
111
|
+
],
|
|
112
|
+
"filePath": ".claude/agents/visualizer-launcher.md",
|
|
113
|
+
"systemPrompt": "# Visualizer Launcher - 에이전트 시각화 실행\n\nagent-skill-visualizer를 자동으로 실행하여 에이전트와 스킬 관계를 웹 브라우저에서 시각화합니다.\n\n## 역할\n\n1. **그래프 데이터 생성**: 프로젝트 스캔하여 JSON 생성\n2. **SSE 서버 시작**: 실시간 스트리밍 백엔드 (port 3001)\n3. **웹앱 실행**: React 개발 서버 (port 5174)\n4. **브라우저 열기**: 자동으로 시각화 페이지 오픈\n\n## 실행 워크플로우\n\n### Phase 1: 환경 확인\n\n먼저 필요한 파일과 의존성 확인:\n\n```bash\n# 1. 스킬 디렉토리 확인\nls -la .claude/skills/agent-skill-visualizer/\n\n# 2. Python 가상환경 확인 (SSE 서버용)\ntest -f .venv/bin/python && echo \"✓ Python venv exists\" || echo \"✗ venv not found\"\n\n# ..."
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"id": "agent:vault-organizer",
|
|
117
|
+
"type": "agent",
|
|
118
|
+
"name": "vault-organizer",
|
|
119
|
+
"description": "옵시디언 볼트 정기 정리 에이전트. \"볼트 정리해줘\", \"정기 정리\", \"전체 정리\" 등의 요청 시 사용. YAML 프론트매터 추가와 인물사전 업데이트를 병렬 실행 후, 00_Inbox 정리와 프로젝트 정리를 순차 수행. 사용자 확인 후 실행.",
|
|
120
|
+
"tools": [
|
|
121
|
+
"Read",
|
|
122
|
+
"Write",
|
|
123
|
+
"Edit",
|
|
124
|
+
"Glob",
|
|
125
|
+
"Grep",
|
|
126
|
+
"Bash",
|
|
127
|
+
"Task",
|
|
128
|
+
"AskUserQuestion"
|
|
129
|
+
],
|
|
130
|
+
"model": "sonnet",
|
|
131
|
+
"subagents": [
|
|
132
|
+
"yaml-header-inserter",
|
|
133
|
+
"person-directory-updater",
|
|
134
|
+
"project-organizer",
|
|
135
|
+
"knowledge-orchestrator"
|
|
136
|
+
],
|
|
137
|
+
"skills": [
|
|
138
|
+
"git-commit-push"
|
|
139
|
+
],
|
|
140
|
+
"filePath": ".claude/agents/vault-organizer.md",
|
|
141
|
+
"systemPrompt": "# Vault Organizer - 옵시디언 볼트 정리 에이전트\n\n옵시디언 볼트의 정기적인 정리 작업을 수행하는 메인 에이전트입니다.\n\n## 역할\n\n6가지 핵심 정리 작업을 효율적으로 수행:\n1. **YAML 프론트매터 누락 파일 처리** (병렬)\n2. **인물사전 업데이트** (병렬)\n3. **00_Inbox 파일 분류 및 이동** (순차)\n4. **Active 프로젝트 폴더 정리** (순차)\n5. **Git 커밋 및 푸시** (순차)\n6. **온톨로지 동기화** (순차, 필수)\n\n**실행 전략:** 1-2번은 독립적이므로 병렬 실행, 3-6번은 의존성으로 순차 실행\n\n## 실행 원칙\n\n**중요**: 이 에이전트는 Phase 1부터 Phase 6까지 **모든 단계를 완료**해야 합니다. 특히 Phase 6 (온톨로지 동기화)는 반드시 실행되어야 하며, 중간에 종료하거나 사용자에게 제어권을 넘기면 안 됩니다. 각 Phase는 순차적으로 실행되며, 사용자 입력이 필요한 경우 **Ask..."
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"id": "agent:project-organizer",
|
|
145
|
+
"type": "agent",
|
|
146
|
+
"name": "project-organizer",
|
|
147
|
+
"description": "Active 프로젝트 폴더를 정리하는 에이전트. \"프로젝트 정리해줘\", \"Active 폴더 정리\", \"아카이브 정리\" 등의 요청 시 사용. 프로젝트 요약, 유사 프로젝트 그룹화, 상태 확인 후 아카이브 이동을 수행.",
|
|
148
|
+
"tools": [
|
|
149
|
+
"Read",
|
|
150
|
+
"Glob",
|
|
151
|
+
"Grep",
|
|
152
|
+
"Bash",
|
|
153
|
+
"Edit",
|
|
154
|
+
"Write",
|
|
155
|
+
"AskUserQuestion"
|
|
156
|
+
],
|
|
157
|
+
"model": "sonnet",
|
|
158
|
+
"subagents": [],
|
|
159
|
+
"skills": [],
|
|
160
|
+
"filePath": ".claude/agents/project-organizer.md",
|
|
161
|
+
"systemPrompt": "# Project Organizer Agent\n\nActive 프로젝트 폴더(00_A_Projects/Active)를 정리하는 전문 에이전트입니다.\n\n## 핵심 경로\n\n- **Active 프로젝트**: `00_A_Projects/Active/`\n- **아카이브**: `90_Archives/`\n\n## 실행 워크플로우\n\n### 1단계: 프로젝트 스캔 및 요약\n\n```bash\nls -la \"00_A_Projects/Active/\"\n```\n\n각 프로젝트 폴더/파일에 대해:\n- 폴더명에서 날짜, 주제 파악\n- 내부 파일 목록 확인 (ls)\n- 주요 파일 내용 스캔 (README, todo, 첫 번째 md 파일)\n- 최근 수정일 확인\n\n### 2단계: 분석 결과 테이블 작성\n\n| 프로젝트 | 요약 | 최근수정 | 추천상태 | 유사그룹 |\n|---------|------|---------|---------|---------|\n| 폴더명 | 한줄요약 | N일전 | 진행/완료/중단 | 그룹명 |\n\n#..."
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"id": "skill:audio-transcriber",
|
|
165
|
+
"type": "skill",
|
|
166
|
+
"name": "audio-transcriber",
|
|
167
|
+
"description": "OpenAI Whisper API를 사용하여 오디오 파일을 텍스트로 변환합니다. m4a, WAV 등 다양한 포맷 지원.",
|
|
168
|
+
"triggers": [
|
|
169
|
+
"\"녹음 파일 변환해줘\"",
|
|
170
|
+
"\"오디오를 텍스트로 만들어줘\"",
|
|
171
|
+
"\"STT 해줘\""
|
|
172
|
+
],
|
|
173
|
+
"filePath": ".claude/skills/audio-transcriber/SKILL.md",
|
|
174
|
+
"hasScripts": true,
|
|
175
|
+
"hasWebapp": false
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"id": "skill:ontology-sync",
|
|
179
|
+
"type": "skill",
|
|
180
|
+
"name": "ontology-sync",
|
|
181
|
+
"description": "Obsidian 볼트를 RDF/TTL 온톨로지로 변환하는 스킬. 인물사전, 프로젝트, 미팅 정보를 추출하여 knowledge.ttl 파일 생성. vault-organizer의 정리 작업 후 자동 호출되어 지식 베이스 동기화.",
|
|
182
|
+
"triggers": [],
|
|
183
|
+
"filePath": ".claude/skills/ontology-sync/SKILL.md",
|
|
184
|
+
"hasScripts": true,
|
|
185
|
+
"hasWebapp": false
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
"id": "skill:recent-files-finder",
|
|
189
|
+
"type": "skill",
|
|
190
|
+
"name": "recent-files-finder",
|
|
191
|
+
"description": "Git status 기반으로 최근 추가/수정된 파일을 찾는 스킬. 사용 시점: (1) \"최근 추가된 파일 찾아줘\" (2) \"새로 만든 파일 목록\" (3) \"수정된 파일 확인\" (4) \"인물 관련 새 파일 찾기\" (5) 인물사전 업데이트 전 대상 파일 파악 시",
|
|
192
|
+
"triggers": [],
|
|
193
|
+
"filePath": ".claude/skills/recent-files-finder/SKILL.md",
|
|
194
|
+
"hasScripts": true,
|
|
195
|
+
"hasWebapp": false
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
"id": "skill:slash-command-creator",
|
|
199
|
+
"type": "skill",
|
|
200
|
+
"name": "slash-command-creator",
|
|
201
|
+
"description": "Guide for creating Claude Code slash commands. Use when the user wants to create a new slash command, update an existing slash command, or asks about slash command syntax, frontmatter options, or best practices.",
|
|
202
|
+
"triggers": [],
|
|
203
|
+
"filePath": ".claude/skills/slash-command-creator/SKILL.md",
|
|
204
|
+
"hasScripts": true,
|
|
205
|
+
"hasWebapp": false
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
"id": "skill:ontology-engine",
|
|
209
|
+
"type": "skill",
|
|
210
|
+
"name": "ontology-engine",
|
|
211
|
+
"description": "Obsidian 볼트를 인물/프로젝트 중심 RDF/TTL 온톨로지로 변환하고 SPARQL 질의를 수행하는 개인 지식 엔진. 사용 시점: (1) \"[인물명]에 대해 알려줘/설명해줘\" (2) \"[인물명]과 나눈 대화 보여줘\" (3) \"앤틀러 소속 인물 찾아줘\" (4) \"인물사전에서 [키워드] 검색\" (5) \"최근 미팅 목록\" (6) \"진행 중인 프로젝트 보여줘\" (7) \"[프로젝트명] 관련 정보\" (8) \"챗봇 관련 프로젝트 찾아줘\" (9) 인물 간 관계나 미팅/프로젝트 기록을 구조적으로 질의할 때.",
|
|
212
|
+
"triggers": [],
|
|
213
|
+
"filePath": ".claude/skills/ontology-engine/SKILL.md",
|
|
214
|
+
"hasScripts": true,
|
|
215
|
+
"hasWebapp": false
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
"id": "skill:subagent-creator",
|
|
219
|
+
"type": "skill",
|
|
220
|
+
"name": "subagent-creator",
|
|
221
|
+
"description": "Create specialized Claude Code sub-agents with custom system prompts and tool configurations. Use when users ask to create a new sub-agent, custom agent, specialized assistant, or want to configure task-specific AI workflows for Claude Code.",
|
|
222
|
+
"triggers": [],
|
|
223
|
+
"filePath": ".claude/skills/subagent-creator/SKILL.md",
|
|
224
|
+
"hasScripts": false,
|
|
225
|
+
"hasWebapp": false
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
"id": "skill:skill-creator",
|
|
229
|
+
"type": "skill",
|
|
230
|
+
"name": "skill-creator",
|
|
231
|
+
"description": "Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Claude's capabilities with specialized knowledge, workflows, or tool integrations.",
|
|
232
|
+
"triggers": [],
|
|
233
|
+
"filePath": ".claude/skills/skill-creator/SKILL.md",
|
|
234
|
+
"hasScripts": true,
|
|
235
|
+
"hasWebapp": false
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
"id": "skill:git-commit-push",
|
|
239
|
+
"type": "skill",
|
|
240
|
+
"name": "git-commit-push",
|
|
241
|
+
"description": "Git 변경사항을 분석하여 요약 커밋 메시지를 작성하고 커밋/푸시를 수행합니다. 사용 시점: (1) \"커밋해줘\" (2) \"푸시해줘\" (3) \"백업해줘\" (4) \"변경사항 커밋하고 푸시\" (5) 작업 완료 후 저장이 필요할 때",
|
|
242
|
+
"triggers": [],
|
|
243
|
+
"filePath": ".claude/skills/git-commit-push/SKILL.md",
|
|
244
|
+
"hasScripts": false,
|
|
245
|
+
"hasWebapp": false
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
"id": "skill:hook-creator",
|
|
249
|
+
"type": "skill",
|
|
250
|
+
"name": "hook-creator",
|
|
251
|
+
"description": "Create and configure Claude Code hooks for customizing agent behavior. Use when the user wants to (1) create a new hook, (2) configure automatic formatting, logging, or notifications, (3) add file protection or custom permissions, (4) set up pre/post tool execution actions, or (5) asks about hook events like PreToolUse, PostToolUse, Notification, etc.",
|
|
252
|
+
"triggers": [],
|
|
253
|
+
"filePath": ".claude/skills/hook-creator/SKILL.md",
|
|
254
|
+
"hasScripts": false,
|
|
255
|
+
"hasWebapp": false
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
"id": "skill:meeting-summarizer",
|
|
259
|
+
"type": "skill",
|
|
260
|
+
"name": "meeting-summarizer",
|
|
261
|
+
"description": "녹음 또는 회의 텍스트를 분석하여 요약, 참석자, 주요 주제, 액션 아이템을 추출합니다. Claude Sonnet 활용.",
|
|
262
|
+
"triggers": [
|
|
263
|
+
"\"회의록 정리해줘\"",
|
|
264
|
+
"\"녹음 내용 요약해줘\"",
|
|
265
|
+
"\"미팅 노트 만들어줘\""
|
|
266
|
+
],
|
|
267
|
+
"filePath": ".claude/skills/meeting-summarizer/SKILL.md",
|
|
268
|
+
"hasScripts": false,
|
|
269
|
+
"hasWebapp": false
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
"id": "skill:agent-skill-visualizer",
|
|
273
|
+
"type": "skill",
|
|
274
|
+
"name": "agent-skill-visualizer",
|
|
275
|
+
"description": "Claude Code 프로젝트의 에이전트와 스킬 관계를 D3.js 노드 그래프로 시각화합니다. 에이전트-스킬 의존성을 파악하고 구조를 탐색할 때 사용하세요.",
|
|
276
|
+
"triggers": [
|
|
277
|
+
"\"에이전트 구조 보여줘\"",
|
|
278
|
+
"\"스킬 의존성 확인해줘\"",
|
|
279
|
+
"\"에이전트와 스킬 관계 시각화해줘\"",
|
|
280
|
+
"\"프로젝트 구조 그래프로 보고 싶어\""
|
|
281
|
+
],
|
|
282
|
+
"filePath": ".claude/skills/agent-skill-visualizer/SKILL.md",
|
|
283
|
+
"hasScripts": true,
|
|
284
|
+
"hasWebapp": true
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
"id": "skill:ontology-query",
|
|
288
|
+
"type": "skill",
|
|
289
|
+
"name": "ontology-query",
|
|
290
|
+
"description": "TTL 온톨로지에 SPARQL 질의를 수행하는 스킬. 인물, 프로젝트, 미팅 정보를 검색하고 knowledge-orchestrator가 호출.",
|
|
291
|
+
"triggers": [],
|
|
292
|
+
"filePath": ".claude/skills/ontology-query/SKILL.md",
|
|
293
|
+
"hasScripts": true,
|
|
294
|
+
"hasWebapp": false
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
"id": "skill:yaml-header-finder",
|
|
298
|
+
"type": "skill",
|
|
299
|
+
"name": "yaml-header-finder",
|
|
300
|
+
"description": "YAML 헤더가 누락된 마크다운 파일을 찾습니다. md파일에서 YAML front matter가 없는 파일을 검색하거나, yaml-header-inserter 서브에이전트 실행 전에 대상 파일을 파악할 때 사용하세요.",
|
|
301
|
+
"triggers": [],
|
|
302
|
+
"filePath": ".claude/skills/yaml-header-finder/SKILL.md",
|
|
303
|
+
"hasScripts": true,
|
|
304
|
+
"hasWebapp": false
|
|
305
|
+
}
|
|
306
|
+
],
|
|
307
|
+
"edges": [
|
|
308
|
+
{
|
|
309
|
+
"source": "agent:recording-processor",
|
|
310
|
+
"target": "skill:audio-transcriber",
|
|
311
|
+
"type": "uses"
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
"source": "agent:recording-processor",
|
|
315
|
+
"target": "skill:meeting-summarizer",
|
|
316
|
+
"type": "uses"
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
"source": "agent:knowledge-orchestrator",
|
|
320
|
+
"target": "skill:ontology-query",
|
|
321
|
+
"type": "uses"
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
"source": "agent:knowledge-orchestrator",
|
|
325
|
+
"target": "skill:ontology-sync",
|
|
326
|
+
"type": "uses"
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
"source": "agent:visualizer-launcher",
|
|
330
|
+
"target": "skill:agent-skill-visualizer",
|
|
331
|
+
"type": "uses"
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
"source": "agent:vault-organizer",
|
|
335
|
+
"target": "agent:yaml-header-inserter",
|
|
336
|
+
"type": "calls"
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
"source": "agent:vault-organizer",
|
|
340
|
+
"target": "agent:person-directory-updater",
|
|
341
|
+
"type": "calls"
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
"source": "agent:vault-organizer",
|
|
345
|
+
"target": "agent:project-organizer",
|
|
346
|
+
"type": "calls"
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
"source": "agent:vault-organizer",
|
|
350
|
+
"target": "agent:knowledge-orchestrator",
|
|
351
|
+
"type": "calls"
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
"source": "agent:vault-organizer",
|
|
355
|
+
"target": "skill:git-commit-push",
|
|
356
|
+
"type": "uses"
|
|
357
|
+
},
|
|
358
|
+
{
|
|
359
|
+
"source": "agent:yaml-header-inserter",
|
|
360
|
+
"target": "skill:yaml-header-finder",
|
|
361
|
+
"type": "uses"
|
|
362
|
+
},
|
|
363
|
+
{
|
|
364
|
+
"source": "agent:knowledge-orchestrator",
|
|
365
|
+
"target": "skill:ontology-engine",
|
|
366
|
+
"type": "uses"
|
|
367
|
+
},
|
|
368
|
+
{
|
|
369
|
+
"source": "agent:person-directory-updater",
|
|
370
|
+
"target": "skill:recent-files-finder",
|
|
371
|
+
"type": "uses"
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
"source": "agent:vault-organizer",
|
|
375
|
+
"target": "skill:ontology-sync",
|
|
376
|
+
"type": "uses"
|
|
377
|
+
}
|
|
378
|
+
],
|
|
379
|
+
"metadata": {
|
|
380
|
+
"generatedAt": "2026-01-03T13:11:44.066792",
|
|
381
|
+
"projectPath": "/Users/inkeun/projects/obsidian",
|
|
382
|
+
"projectName": "obsidian",
|
|
383
|
+
"agentCount": 8,
|
|
384
|
+
"skillCount": 13,
|
|
385
|
+
"commandCount": 0,
|
|
386
|
+
"edgeCount": 14
|
|
387
|
+
}
|
|
388
|
+
}
|
package/dist/index.html
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="ko">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>🔗</text></svg>" />
|
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
|
+
<title>Agent-Skill Visualizer</title>
|
|
8
|
+
<style>
|
|
9
|
+
html, body, #root {
|
|
10
|
+
width: 100%;
|
|
11
|
+
height: 100%;
|
|
12
|
+
margin: 0;
|
|
13
|
+
padding: 0;
|
|
14
|
+
overflow: hidden;
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
<script type="module" crossorigin src="./assets/index-BQSevtzO.js"></script>
|
|
18
|
+
<link rel="stylesheet" crossorigin href="./assets/index-lL8g_3Ei.css">
|
|
19
|
+
</head>
|
|
20
|
+
<body>
|
|
21
|
+
<div id="root"></div>
|
|
22
|
+
</body>
|
|
23
|
+
</html>
|
package/lib/cli.d.ts
ADDED
package/lib/cli.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAuBA,wBAAsB,GAAG,kBA6HxB"}
|
package/lib/cli.js
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
import open from 'open';
|
|
6
|
+
import { fileURLToPath } from 'url';
|
|
7
|
+
import { scanProject } from './scanner.js';
|
|
8
|
+
import { startServer } from './server.js';
|
|
9
|
+
import { validateClaudeProject, findAvailablePort, ensureVisualizerDir } from './utils.js';
|
|
10
|
+
const DEFAULT_PORT = 3000;
|
|
11
|
+
const VISUALIZER_DIR = '.claude/visualizer';
|
|
12
|
+
const DATA_FILE = 'graph-data.json';
|
|
13
|
+
// Get __dirname equivalent in ESM
|
|
14
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
15
|
+
const __dirname = path.dirname(__filename);
|
|
16
|
+
export async function run() {
|
|
17
|
+
const program = new Command();
|
|
18
|
+
program
|
|
19
|
+
.name('viewcc')
|
|
20
|
+
.description('Interactive visualization for Claude Code projects')
|
|
21
|
+
.version('1.0.0')
|
|
22
|
+
.option('-p, --port <number>', 'Server port (default: 3000)', '3000')
|
|
23
|
+
.option('--no-open', "Don't open browser automatically")
|
|
24
|
+
.option('--no-scan', 'Skip scanning, use existing data')
|
|
25
|
+
.option('-v, --verbose', 'Verbose logging')
|
|
26
|
+
.parse(process.argv);
|
|
27
|
+
const options = program.opts();
|
|
28
|
+
const cwd = process.cwd();
|
|
29
|
+
try {
|
|
30
|
+
// 1. Validate Claude Code project
|
|
31
|
+
if (options.verbose) {
|
|
32
|
+
console.log(chalk.dim('Checking for .claude directory...'));
|
|
33
|
+
}
|
|
34
|
+
const isValid = await validateClaudeProject(cwd);
|
|
35
|
+
if (!isValid) {
|
|
36
|
+
console.error(chalk.red('✗ No .claude directory found'));
|
|
37
|
+
console.error(chalk.yellow(' Run this command from a Claude Code project root'));
|
|
38
|
+
console.error(chalk.yellow(' Or run "claude init" to create a new project'));
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
console.log(chalk.green('✓ Claude Code project detected'));
|
|
42
|
+
// 2. Setup visualizer directory
|
|
43
|
+
const vizDir = path.join(cwd, VISUALIZER_DIR);
|
|
44
|
+
await ensureVisualizerDir(vizDir);
|
|
45
|
+
if (options.verbose) {
|
|
46
|
+
console.log(chalk.dim(`Created ${VISUALIZER_DIR}/`));
|
|
47
|
+
}
|
|
48
|
+
// 3. Scan project (unless --no-scan)
|
|
49
|
+
const dataPath = path.join(vizDir, DATA_FILE);
|
|
50
|
+
if (options.scan !== false) {
|
|
51
|
+
console.log(chalk.blue('📊 Scanning project structure...'));
|
|
52
|
+
const stats = await scanProject(cwd, dataPath);
|
|
53
|
+
console.log(chalk.green('✓ Scan complete'));
|
|
54
|
+
console.log(chalk.dim(` Agents: ${stats.agentCount}`));
|
|
55
|
+
console.log(chalk.dim(` Skills: ${stats.skillCount}`));
|
|
56
|
+
console.log(chalk.dim(` Commands: ${stats.commandCount}`));
|
|
57
|
+
console.log(chalk.dim(` Edges: ${stats.edgeCount}`));
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
console.log(chalk.yellow('⊘ Skipping scan (using existing data)'));
|
|
61
|
+
}
|
|
62
|
+
// 4. Find available port
|
|
63
|
+
const requestedPort = parseInt(options.port);
|
|
64
|
+
const port = await findAvailablePort(requestedPort);
|
|
65
|
+
if (port !== requestedPort) {
|
|
66
|
+
console.log(chalk.yellow(`⚠ Port ${requestedPort} in use, using ${port} instead`));
|
|
67
|
+
}
|
|
68
|
+
// 5. Start server
|
|
69
|
+
console.log(chalk.blue('🚀 Starting server...'));
|
|
70
|
+
// Find dist directory (relative to this compiled file in lib/)
|
|
71
|
+
const distDir = path.join(__dirname, '..', 'dist');
|
|
72
|
+
const server = await startServer({
|
|
73
|
+
port,
|
|
74
|
+
projectRoot: cwd,
|
|
75
|
+
distDir,
|
|
76
|
+
dataPath
|
|
77
|
+
});
|
|
78
|
+
const url = `http://localhost:${port}`;
|
|
79
|
+
console.log(chalk.green('✓ Server running'));
|
|
80
|
+
// 6. Open browser
|
|
81
|
+
if (options.open !== false) {
|
|
82
|
+
console.log(chalk.blue('🌐 Opening browser...'));
|
|
83
|
+
try {
|
|
84
|
+
await open(url);
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
console.log(chalk.yellow('⚠ Could not open browser automatically'));
|
|
88
|
+
console.log(chalk.dim(` Please open ${url} manually`));
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// 7. Show success message
|
|
92
|
+
console.log('');
|
|
93
|
+
console.log(chalk.green.bold('✨ Claude Code Visualizer is ready!'));
|
|
94
|
+
console.log('');
|
|
95
|
+
console.log(` ${chalk.cyan.bold(url)}`);
|
|
96
|
+
console.log('');
|
|
97
|
+
console.log(chalk.dim(' Controls:'));
|
|
98
|
+
console.log(chalk.dim(' • Click nodes to view details'));
|
|
99
|
+
console.log(chalk.dim(' • Drag to pan, scroll to zoom'));
|
|
100
|
+
console.log(chalk.dim(' • Use search to filter nodes'));
|
|
101
|
+
console.log('');
|
|
102
|
+
console.log(` Press ${chalk.yellow('Ctrl+C')} to stop`);
|
|
103
|
+
console.log('');
|
|
104
|
+
// 8. Graceful shutdown
|
|
105
|
+
const shutdown = async () => {
|
|
106
|
+
console.log('');
|
|
107
|
+
console.log(chalk.blue('👋 Shutting down...'));
|
|
108
|
+
await new Promise((resolve) => {
|
|
109
|
+
server.close(() => {
|
|
110
|
+
console.log(chalk.green('✓ Server stopped'));
|
|
111
|
+
resolve();
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
process.exit(0);
|
|
115
|
+
};
|
|
116
|
+
process.on('SIGINT', shutdown);
|
|
117
|
+
process.on('SIGTERM', shutdown);
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
console.error('');
|
|
121
|
+
console.error(chalk.red.bold('✗ Error:'), error.message);
|
|
122
|
+
if (options.verbose && error.stack) {
|
|
123
|
+
console.error(chalk.dim(error.stack));
|
|
124
|
+
}
|
|
125
|
+
process.exit(1);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// Execute if run directly
|
|
129
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
130
|
+
run();
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=cli.js.map
|
package/lib/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/lib/scanner.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
interface GraphMetadata {
|
|
2
|
+
generatedAt: string;
|
|
3
|
+
projectPath: string;
|
|
4
|
+
projectName: string;
|
|
5
|
+
agentCount: number;
|
|
6
|
+
skillCount: number;
|
|
7
|
+
commandCount: number;
|
|
8
|
+
edgeCount: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Scan a Claude Code project and generate graph data
|
|
12
|
+
*/
|
|
13
|
+
export declare function scanProject(projectPath: string, outputPath: string): Promise<GraphMetadata>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAsCA,UAAU,aAAa;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAoVD;;GAEG;AACH,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC,CA2CxB"}
|