@taejung3852/project-scaffold 0.1.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/.hooks/convention-check.sh +79 -0
- package/.hooks/devlog-auto.sh +55 -0
- package/.obsidian-template/appearance.json +6 -0
- package/.obsidian-template/core-plugins.json +20 -0
- package/.obsidian-template/graph.json +22 -0
- package/.obsidian-template/snippets/folder-colors.css +55 -0
- package/AGENT.md +55 -0
- package/README.kr.md +247 -0
- package/README.md +247 -0
- package/SOUL.md +54 -0
- package/THIRD_PARTY_NOTICES.md +14 -0
- package/bin/project-scaffold.js +122 -0
- package/lib/agents-registry.js +197 -0
- package/lib/agents.js +203 -0
- package/lib/install.js +342 -0
- package/package.json +33 -0
- package/skills/brief/SKILL.md +63 -0
- package/skills/brief/agents/openai.yaml +4 -0
- package/skills/brief/references/dashboard.md +140 -0
- package/skills/brief/references/handoff.md +130 -0
- package/skills/brief/references/report.md +163 -0
- package/skills/review/SKILL.md +123 -0
- package/skills/review/agents/openai.yaml +4 -0
- package/skills/wiki/SKILL.md +73 -0
- package/skills/wiki/agents/openai.yaml +4 -0
- package/skills/wiki/references/ambiguity-check.md +16 -0
- package/skills/wiki/references/capture.md +119 -0
- package/skills/wiki/references/clear-path.md +82 -0
- package/skills/wiki/references/devlog.md +111 -0
- package/skills/wiki/references/ingest.md +118 -0
- package/skills/wiki/references/lint.md +83 -0
- package/skills/wiki/references/query.md +81 -0
- package/skills/wiki/references/setup.md +397 -0
- package/skills/wiki/references/unclear-path.md +51 -0
- package/templates/gitignore +14 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# brief dashboard — 프로젝트 대시보드
|
|
2
|
+
|
|
3
|
+
프로젝트 현황을 markdown → terminal → web UI 순으로 렌더링한다.
|
|
4
|
+
wiki/의 devlog, conventions, decisions 데이터를 읽어 자동으로 생성한다.
|
|
5
|
+
|
|
6
|
+
## 목차
|
|
7
|
+
|
|
8
|
+
- 렌더 모드
|
|
9
|
+
- 데이터 수집
|
|
10
|
+
- 대시보드 구성
|
|
11
|
+
- markdown·terminal·web 렌더링
|
|
12
|
+
- TODO 관리와 갱신 규칙
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## Step 0 — 렌더 모드 확인
|
|
16
|
+
|
|
17
|
+
`/brief dashboard` 실행 시 모드를 확인한다:
|
|
18
|
+
|
|
19
|
+
| 모드 | 트리거 | 설명 |
|
|
20
|
+
|---|---|---|
|
|
21
|
+
| **markdown** | `/brief dashboard` 또는 `/brief dashboard md` | wiki/dashboard.md 갱신 |
|
|
22
|
+
| **terminal** | `/brief dashboard term` | 터미널에 컬러 출력 |
|
|
23
|
+
| **web** | `/brief dashboard web` | browser로 HTML 열기 |
|
|
24
|
+
|
|
25
|
+
인자가 없으면 markdown 모드 기본값.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Step 1 — 데이터 수집
|
|
30
|
+
|
|
31
|
+
다음 파일들을 읽어 데이터를 수집한다:
|
|
32
|
+
|
|
33
|
+
| 데이터 | 소스 |
|
|
34
|
+
|---|---|
|
|
35
|
+
| 오늘 할 일 | `wiki/dashboard.md` 의 TODO 섹션 (있으면) |
|
|
36
|
+
| 최근 devlog | `raw/dev-logs/` 최신 3개 파일 |
|
|
37
|
+
| 마일스톤 진행도 | `wiki/conventions/01-project-overview.md` 의 마일스톤 |
|
|
38
|
+
| 미해결 결정 | `raw/decisions/` 중 `ingest_status: "⏳ pending"` |
|
|
39
|
+
| wiki 건강 | `wiki/log.md` 최신 lint 결과 (있으면) |
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Step 2 — 대시보드 구성
|
|
44
|
+
|
|
45
|
+
대시보드는 다음 섹션으로 구성된다:
|
|
46
|
+
|
|
47
|
+
```text
|
|
48
|
+
## 📋 오늘 할 일
|
|
49
|
+
- [ ] 항목 1
|
|
50
|
+
- [ ] 항목 2
|
|
51
|
+
|
|
52
|
+
## 📈 마일스톤 진행도
|
|
53
|
+
| 마일스톤 | 상태 | 진행도 |
|
|
54
|
+
|---|---|---|
|
|
55
|
+
| MVP | 진행 중 | 60% |
|
|
56
|
+
|
|
57
|
+
## 📝 최근 devlog (최신 3개)
|
|
58
|
+
- YYYY-MM-DD: 요약 한 줄
|
|
59
|
+
|
|
60
|
+
## ⚠️ 주의 필요
|
|
61
|
+
- 미처리 결정: n개
|
|
62
|
+
- wiki 모순: n개 (있으면)
|
|
63
|
+
|
|
64
|
+
## 🔗 빠른 링크
|
|
65
|
+
- [[wiki/index.md]] | [[wiki/log.md]] | [[wiki/conventions/]]
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Step 3 — 렌더링
|
|
71
|
+
|
|
72
|
+
### markdown 모드
|
|
73
|
+
|
|
74
|
+
`wiki/dashboard.md`를 갱신한다.
|
|
75
|
+
|
|
76
|
+
```yaml
|
|
77
|
+
---
|
|
78
|
+
title: Dashboard
|
|
79
|
+
updated: YYYY-MM-DD HH:MM
|
|
80
|
+
---
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
기존 파일이 없으면 생성. 있으면 전체 갱신.
|
|
84
|
+
|
|
85
|
+
### terminal 모드
|
|
86
|
+
|
|
87
|
+
ANSI 컬러 코드로 터미널에 직접 출력한다:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
echo -e "\033[1;34m📋 오늘 할 일\033[0m"
|
|
91
|
+
# ... 섹션별 출력
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
명세서 형식 사용 (bold, color, separator lines).
|
|
95
|
+
|
|
96
|
+
### web 모드
|
|
97
|
+
|
|
98
|
+
`wiki/dashboard.html`을 생성하고 브라우저로 연다:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
open wiki/dashboard.html # macOS
|
|
102
|
+
xdg-open wiki/dashboard.html # Linux
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
HTML은 간단한 인라인 CSS 포함. 외부 CDN 의존 없음.
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## 갱신 시점
|
|
110
|
+
|
|
111
|
+
`.hooks/devlog-auto.sh`는 커밋 후 `raw/dev-logs/`만 갱신한다. dashboard는 사용자가 현황을 요청하거나 `/brief dashboard`를 실행할 때 최신 wiki와 raw를 읽어 갱신한다.
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## 오늘 할 일 관리
|
|
116
|
+
|
|
117
|
+
사용자가 TODO를 추가하려면:
|
|
118
|
+
|
|
119
|
+
> `/brief dashboard add [항목]`
|
|
120
|
+
|
|
121
|
+
`wiki/dashboard.md`의 TODO 섹션에 항목을 추가한다.
|
|
122
|
+
|
|
123
|
+
완료 처리:
|
|
124
|
+
|
|
125
|
+
> `/brief dashboard done [번호]`
|
|
126
|
+
|
|
127
|
+
`[ ]` → `[x]` 로 변경. 완료된 항목은 다음 갱신 시 devlog에 자동 기록.
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## 규칙
|
|
132
|
+
|
|
133
|
+
| 항목 | 규칙 |
|
|
134
|
+
|---|---|
|
|
135
|
+
| 기본 모드 | markdown. terminal·web은 명시적 요청 시만 |
|
|
136
|
+
| 입력 데이터 | wiki/ 와 raw/ 는 읽기 전용 |
|
|
137
|
+
| 출력 파일 | markdown 모드에서 `wiki/dashboard.md` 생성·전체 갱신 허용 |
|
|
138
|
+
| 갱신 | `/brief dashboard` 또는 현황 브리핑 요청 시 실행 |
|
|
139
|
+
| HTML 생성 | 외부 CDN 없음. 인라인 CSS만 |
|
|
140
|
+
| 이전 대시보드 | 갱신 시 덮어씀. 버전 관리는 git에 위임 |
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# brief handoff — 세션 인계
|
|
2
|
+
|
|
3
|
+
지금까지의 대화와 작업 컨텍스트를 압축해 저장하고, 다음 세션(또는 다른 에이전트)이 그대로 이어받을 수 있게 한다.
|
|
4
|
+
`/clear`나 새 세션 시작으로 컨텍스트가 끊겨도 처음부터 다시 설명할 필요가 없다.
|
|
5
|
+
|
|
6
|
+
## 목차
|
|
7
|
+
|
|
8
|
+
- 모드 결정
|
|
9
|
+
- save: 대화·git 컨텍스트 저장
|
|
10
|
+
- load: 최근 인계 복원
|
|
11
|
+
- list: 저장본 탐색
|
|
12
|
+
- clean: 확인 후 오래된 인계 삭제
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## Step 0 — 모드 결정
|
|
16
|
+
|
|
17
|
+
`/brief handoff` 실행 시 모드를 확인한다.
|
|
18
|
+
|
|
19
|
+
| 모드 | 트리거 | 동작 |
|
|
20
|
+
|---|---|---|
|
|
21
|
+
| `save` | `/brief handoff save [다음 세션 목표]` 또는 세션 종료 의도 표현 시 | 현재까지 대화·작업 압축 저장 |
|
|
22
|
+
| `load` | `/brief handoff load` | 가장 최근 저장본 복원 |
|
|
23
|
+
| `list` | `/brief handoff list` | 저장된 인계 목록 표시 |
|
|
24
|
+
| `clean` | `/brief handoff clean [N일]` | N일(기본 30일) 이상 지난 저장본 삭제 |
|
|
25
|
+
|
|
26
|
+
인자가 없으면 묻는다:
|
|
27
|
+
|
|
28
|
+
> "세션을 저장할까(save), 이전 세션을 불러올까(load)?"
|
|
29
|
+
|
|
30
|
+
인자로 텍스트가 주어지면(`/brief handoff save 다음엔 인증 모듈 테스트 작성`) 다음 세션이 무엇에 집중할지에 대한 설명으로 간주하고, 문서 내용을 그 목표에 맞춰 작성한다.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Step 1 — save
|
|
35
|
+
|
|
36
|
+
### 1-1. 대화 요약
|
|
37
|
+
|
|
38
|
+
지금까지의 대화에서 다음을 정리한다:
|
|
39
|
+
|
|
40
|
+
- 무엇을 하려고 시작했는지
|
|
41
|
+
- 무엇을 완료했는지
|
|
42
|
+
- 진행 중이던 작업과 그 상태
|
|
43
|
+
- 막힌 부분·미해결 질문
|
|
44
|
+
- 다음 세션이 집중할 목표 (인자로 받았으면 그걸 우선, 없으면 자연스러운 다음 단계 추론)
|
|
45
|
+
|
|
46
|
+
**이미 다른 산출물(PR, 커밋, 결정 문서, 이슈, diff)에 적혀 있는 내용은 다시 풀어 쓰지 않는다.** 경로나 URL로 참조한다.
|
|
47
|
+
|
|
48
|
+
### 1-2. git 컨텍스트 (보조 정보)
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
git branch --show-current
|
|
52
|
+
git log -5 --oneline
|
|
53
|
+
git status --short
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### 1-3. 추천 스킬
|
|
57
|
+
|
|
58
|
+
다음 세션에서 바로 실행하면 좋을 스킬을 1~3개 제안한다 (예: `raw/`에 pending 파일이 있으면 `/wiki ingest`, PR 올리기 직전이면 `/review`).
|
|
59
|
+
|
|
60
|
+
### 1-4. 민감 정보 검열
|
|
61
|
+
|
|
62
|
+
API 키, 토큰, 비밀번호, 개인정보 등이 대화나 git 출력에 포함돼 있으면 `[REDACTED]`로 가린다.
|
|
63
|
+
|
|
64
|
+
### 1-5. 저장
|
|
65
|
+
|
|
66
|
+
`raw/handoffs/YYYY-MM-DD_HHmm.md` 에 저장한다:
|
|
67
|
+
|
|
68
|
+
```markdown
|
|
69
|
+
---
|
|
70
|
+
date: YYYY-MM-DD HH:mm
|
|
71
|
+
branch: [브랜치명]
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## 다음 세션 목표
|
|
75
|
+
[인자로 받은 목표, 없으면 추론한 다음 단계]
|
|
76
|
+
|
|
77
|
+
## 지금까지
|
|
78
|
+
[무엇을 하려 했고, 무엇을 완료했는지]
|
|
79
|
+
|
|
80
|
+
## 진행 중 / 막힌 부분
|
|
81
|
+
[미완료 작업, 미해결 질문]
|
|
82
|
+
|
|
83
|
+
## 관련 산출물
|
|
84
|
+
- [PR/커밋/문서 경로나 URL — 내용 중복 금지, 참조만]
|
|
85
|
+
|
|
86
|
+
## 추천 스킬
|
|
87
|
+
- `/스킬명` — [이유]
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
> 이 파일은 `ingest_status` 필드를 쓰지 않는다 — `/wiki ingest` 대상이 아니다. 세션 운영 기록일 뿐 wiki에 통합할 지식이 아니다.
|
|
91
|
+
|
|
92
|
+
저장 후 채팅에 같은 내용을 요약해 출력한다.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Step 2 — load
|
|
97
|
+
|
|
98
|
+
`raw/handoffs/` 에서 가장 최근 파일을 읽는다 (날짜가 인자로 주어지면 해당 파일).
|
|
99
|
+
|
|
100
|
+
읽은 내용을 그대로 정리해 출력하고, 저장 시점 이후 git 상태가 달라졌으면 알려준다:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
git status --short
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
> "저장 시점 이후 변경된 파일이 있어: [목록]"
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Step 3 — list
|
|
111
|
+
|
|
112
|
+
`raw/handoffs/` 파일들을 날짜 역순으로, 각 파일의 "다음 세션 목표" 한 줄과 함께 나열한다.
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Step 4 — clean
|
|
117
|
+
|
|
118
|
+
기본 30일(인자로 지정 시 해당 일수) 이상 지난 파일 목록을 보여주고 삭제 확인을 받는다. **확인 없이 삭제하지 않는다.**
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## 규칙
|
|
123
|
+
|
|
124
|
+
| 항목 | 규칙 |
|
|
125
|
+
|---|---|
|
|
126
|
+
| 저장 위치 | `raw/handoffs/` — `/wiki ingest` 대상 아님 (`ingest_status` 필드 생략) |
|
|
127
|
+
| 중복 금지 | PR·커밋·결정 문서에 이미 있는 내용은 재서술하지 않고 경로/URL로만 참조 |
|
|
128
|
+
| 민감 정보 | API 키·토큰·개인정보는 저장 전 반드시 검열 |
|
|
129
|
+
| load 시 git 상태 비교 | 저장 시점과 달라진 게 있으면 반드시 알림 |
|
|
130
|
+
| 삭제(clean) | 항상 사용자 확인 후 진행 |
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
# brief report — 목적별 리포트 생성
|
|
2
|
+
|
|
3
|
+
회의·인터뷰·스프린트 등의 내용을 받아 목적에 맞는 문서를 생성한다.
|
|
4
|
+
|
|
5
|
+
## 목차
|
|
6
|
+
|
|
7
|
+
- 리포트 타입과 원본 수집
|
|
8
|
+
- 내부용·팀 공유용 출력 선택
|
|
9
|
+
- 회의·인터뷰·ADR·스프린트 포맷
|
|
10
|
+
- 저장 경로와 작성 규칙
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
## Step 0 — 리포트 타입 선택
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
1) 회의록 — 팀 정기 회의, 기획 회의
|
|
17
|
+
2) 인터뷰 리포트 — 사용자·고객·팀원 딥인터뷰
|
|
18
|
+
3) ADR — Architecture Decision Record, 기술 결정 문서
|
|
19
|
+
4) 스프린트 요약 — 스프린트 회고·계획
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
인자로 타입이 명시된 경우(`/brief report 인터뷰`) 바로 해당 타입으로 진행한다.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Step 1 — 원본 내용 수집
|
|
27
|
+
|
|
28
|
+
**인자가 파일 경로인 경우:** 해당 파일을 읽는다.
|
|
29
|
+
|
|
30
|
+
**인자가 없거나 타입만 있는 경우:**
|
|
31
|
+
|
|
32
|
+
> "리포트로 만들 내용을 붙여넣어 주세요. 완료되면 END 입력."
|
|
33
|
+
|
|
34
|
+
붙여넣은 내용을 그대로 사용한다. 내용을 수정하거나 요약하지 않는다.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Step 2 — 출력 모드 선택
|
|
39
|
+
|
|
40
|
+
> "어떤 용도로 만들까요?
|
|
41
|
+
> 1) 내 파악용 — 상세 인사이트·의문점·주관적 해석 포함
|
|
42
|
+
> 2) 팀 공유용 — 결정사항·액션아이템·담당자 중심의 공유 문서
|
|
43
|
+
> 3) 둘 다 — 두 버전 동시 생성"
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Step 3 — 리포트 생성
|
|
48
|
+
|
|
49
|
+
### 내 파악용 포맷
|
|
50
|
+
|
|
51
|
+
```markdown
|
|
52
|
+
# [제목] — 내부 메모 (YYYY-MM-DD)
|
|
53
|
+
|
|
54
|
+
## 1분 요약
|
|
55
|
+
(핵심 3줄 이내)
|
|
56
|
+
|
|
57
|
+
## 상세 내용
|
|
58
|
+
### 논의된 주제들
|
|
59
|
+
(항목별 정리)
|
|
60
|
+
|
|
61
|
+
### 내 해석 & 인사이트
|
|
62
|
+
- 이 결정이 [X]에 미치는 영향:
|
|
63
|
+
- 확인이 더 필요한 사항:
|
|
64
|
+
- 아직 해결 안 된 의문:
|
|
65
|
+
|
|
66
|
+
### 주목할 인용
|
|
67
|
+
> "..." — [발화자]
|
|
68
|
+
|
|
69
|
+
## 다음에 알아볼 것들
|
|
70
|
+
- [ ] ...
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### 팀 공유용 포맷
|
|
74
|
+
|
|
75
|
+
```markdown
|
|
76
|
+
# [제목] (YYYY-MM-DD)
|
|
77
|
+
|
|
78
|
+
**참석자:** ...
|
|
79
|
+
**작성자:** ...
|
|
80
|
+
|
|
81
|
+
## 결정사항
|
|
82
|
+
| # | 결정 내용 | 배경 |
|
|
83
|
+
|---|---|---|
|
|
84
|
+
| 1 | | |
|
|
85
|
+
|
|
86
|
+
## 액션아이템
|
|
87
|
+
| 항목 | 담당자 | 기한 |
|
|
88
|
+
|---|---|---|
|
|
89
|
+
| | | |
|
|
90
|
+
|
|
91
|
+
## 논의 요약
|
|
92
|
+
(회의 흐름 중심으로 간결하게)
|
|
93
|
+
|
|
94
|
+
## 다음 미팅
|
|
95
|
+
- 일시:
|
|
96
|
+
- 안건:
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### ADR 포맷 (타입 3 선택 시)
|
|
100
|
+
|
|
101
|
+
```markdown
|
|
102
|
+
# ADR-NNN: [제목]
|
|
103
|
+
|
|
104
|
+
**상태:** proposed | accepted | deprecated
|
|
105
|
+
**날짜:** YYYY-MM-DD
|
|
106
|
+
**결정자:** ...
|
|
107
|
+
|
|
108
|
+
## 맥락
|
|
109
|
+
(이 결정이 필요했던 배경·제약·문제)
|
|
110
|
+
|
|
111
|
+
## 결정
|
|
112
|
+
(우리가 선택한 것과 이유)
|
|
113
|
+
|
|
114
|
+
## 결과
|
|
115
|
+
**긍정적:**
|
|
116
|
+
**부정적:**
|
|
117
|
+
**중립적·트레이드오프:**
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### 스프린트 요약 포맷 (타입 4 선택 시)
|
|
121
|
+
|
|
122
|
+
```markdown
|
|
123
|
+
# 스프린트 [N] 요약 (YYYY-MM-DD ~ YYYY-MM-DD)
|
|
124
|
+
|
|
125
|
+
## 완료
|
|
126
|
+
- [x] ...
|
|
127
|
+
|
|
128
|
+
## 미완료 & 이유
|
|
129
|
+
- [ ] ... — 이유:
|
|
130
|
+
|
|
131
|
+
## 회고
|
|
132
|
+
**잘 된 것:**
|
|
133
|
+
**개선할 것:**
|
|
134
|
+
|
|
135
|
+
## 다음 스프린트 목표
|
|
136
|
+
1. ...
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## Step 4 — 저장 및 출력
|
|
142
|
+
|
|
143
|
+
| 용도 | 저장 경로 |
|
|
144
|
+
|---|---|
|
|
145
|
+
| 내 파악용 | `wiki/meetings/YYYY-MM-DD_[slug]_internal.md` |
|
|
146
|
+
| 팀 공유용 | `wiki/meetings/YYYY-MM-DD_[slug]_shared.md` |
|
|
147
|
+
|
|
148
|
+
저장 후:
|
|
149
|
+
- 저장 경로 출력
|
|
150
|
+
- **팀 공유용**은 마크다운 블록으로도 바로 출력 (Slack·Notion에 복붙 가능하도록)
|
|
151
|
+
- **둘 다**인 경우 두 파일 모두 저장 후 공유용만 블록 출력
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## 규칙
|
|
156
|
+
|
|
157
|
+
| 항목 | 규칙 |
|
|
158
|
+
|---|---|
|
|
159
|
+
| 원본 내용 | 수정·삭제 금지. 리포트는 재구성이지 편집이 아님 |
|
|
160
|
+
| 사실 vs 해석 | 내 파악용에서만 해석 허용. 팀 공유용은 사실과 결정만 |
|
|
161
|
+
| 담당자 불명확 시 | `TBD`로 표시하고 괄호에 후보 명시 |
|
|
162
|
+
| 기한 불명확 시 | `미정`으로 표시 (임의 날짜 생성 금지) |
|
|
163
|
+
| ADR 번호 | `wiki/meetings/` 내 기존 ADR 파일 수 + 1로 자동 부여 |
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: review
|
|
3
|
+
description: "프로젝트 변경사항을 wiki/conventions 기준으로 검토한다. 정적 분석과 LLM 맥락 판단을 결합해 네이밍, 아키텍처, 테스트, 에러 처리, 보안 위반을 찾는다. 코드 리뷰, PR 준비, 컨벤션 검증, 변경사항 품질 점검 시 사용."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /review — 컨벤션 기반 변경사항 검토
|
|
7
|
+
|
|
8
|
+
LLM 기반 리뷰 + 정적 분석 도구를 조합해서 코드를 검증한다.
|
|
9
|
+
wiki/conventions/의 팀 규칙을 기준으로 판단한다.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Step 0 — 대상 결정
|
|
14
|
+
|
|
15
|
+
**인자가 있으면**: 해당 파일·디렉토리를 대상으로 한다.
|
|
16
|
+
|
|
17
|
+
**인자가 없으면**: 변경된 파일 목록을 확인한다.
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
{ git diff --name-only HEAD; git ls-files --others --exclude-standard; } | sort -u
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
- 파일이 있으면 해당 목록으로 진행
|
|
24
|
+
- 파일이 없으면: "변경된 파일이 없습니다. 파일 경로를 직접 지정해주세요."
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Step 1 — 컨벤션 로드
|
|
29
|
+
|
|
30
|
+
`wiki/conventions/`에서 코드 관련 페이지를 읽는다:
|
|
31
|
+
|
|
32
|
+
우선순위:
|
|
33
|
+
1. `wiki/conventions/03-naming.md` — 네이밍 규칙
|
|
34
|
+
2. `wiki/conventions/05-architecture.md` — 아키텍처 규칙
|
|
35
|
+
3. `wiki/conventions/06-tdd.md` — TDD 규칙 (테스트 파일 확인)
|
|
36
|
+
4. `wiki/conventions/11-error-handling.md` — 에러 핸들링
|
|
37
|
+
5. `wiki/conventions/12-security.md` — 보안 규칙
|
|
38
|
+
|
|
39
|
+
> wiki/conventions/ 가 없으면: "/wiki setup으로 먼저 컨벤션을 정의해주세요." 안내 후 종료.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Step 2 — 정적 분석 실행
|
|
44
|
+
|
|
45
|
+
`wiki/conventions/02-tech-stack.md`에서 기술 스택 확인 후 해당 도구를 실행한다.
|
|
46
|
+
|
|
47
|
+
| 스택 | 도구 | 명령 |
|
|
48
|
+
|---|---|---|
|
|
49
|
+
| Python | pylint | `pylint [파일]` |
|
|
50
|
+
| Python | mypy | `mypy [파일]` |
|
|
51
|
+
| JavaScript/TypeScript | eslint | `npx eslint [파일]` |
|
|
52
|
+
| Java | checkstyle | `checkstyle [파일]` |
|
|
53
|
+
|
|
54
|
+
도구가 설치되지 않은 경우: 조용히 건너뛰지 않는다. 설치 명령어를 안내하고 설치할지 물어본다.
|
|
55
|
+
- 설치를 원하면: 안내한 명령어로 설치 후 그 도구로 검증을 이어간다
|
|
56
|
+
- 원치 않으면: 그 도구만 "미설치(스킵)"로 표시하고 나머지는 계속 진행
|
|
57
|
+
|
|
58
|
+
결과를 저장해두고 Step 3에서 함께 활용한다.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Step 3 — LLM 기반 리뷰
|
|
63
|
+
|
|
64
|
+
로드한 컨벤션을 기준으로 대상 코드를 읽고 다음 항목을 점검한다:
|
|
65
|
+
|
|
66
|
+
| 항목 | 점검 내용 |
|
|
67
|
+
|---|---|
|
|
68
|
+
| **네이밍** | 규칙과 다른 변수명·함수명·클래스명 |
|
|
69
|
+
| **아키텍처** | 레이어 간 의존성 방향 위반, 금지된 직접 접근 |
|
|
70
|
+
| **TDD** | 기능 코드에 대응하는 테스트 파일 누락 |
|
|
71
|
+
| **에러 핸들링** | 나쁜 예외 처리 (bare except, 무시, 무분별한 print) |
|
|
72
|
+
| **보안** | 하드코딩된 시크릿, 검증 없는 외부 입력 처리 |
|
|
73
|
+
| **컨벤션 추가** | wiki/conventions/에 있는 기타 규칙 |
|
|
74
|
+
|
|
75
|
+
LLM 리뷰는 정적 분석이 잡지 못하는 **맥락적 판단**에 집중한다.
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Step 4 — 통합 리포트
|
|
80
|
+
|
|
81
|
+
정적 분석 + LLM 리뷰 결과를 합쳐 하나의 리포트로 제시한다:
|
|
82
|
+
|
|
83
|
+
```text
|
|
84
|
+
## /review 결과 — YYYY-MM-DD
|
|
85
|
+
|
|
86
|
+
### 🔴 위반 (즉시 수정)
|
|
87
|
+
- [naming] src/api/userHandler.py:23 — 함수명 `GetUser`는 PascalCase. snake_case 사용 필요
|
|
88
|
+
> 컨벤션: wiki/conventions/03-naming.md
|
|
89
|
+
- [security] src/db/connect.py:5 — DB 비밀번호 하드코딩
|
|
90
|
+
> 컨벤션: wiki/conventions/12-security.md
|
|
91
|
+
|
|
92
|
+
### 🟡 개선 권장
|
|
93
|
+
- [tdd] src/services/payment.py — 대응 테스트 파일 없음
|
|
94
|
+
- [error-handling] src/utils/parser.py:41 — bare except 사용
|
|
95
|
+
|
|
96
|
+
### 🟢 정적 분석 결과
|
|
97
|
+
pylint: 8.2/10 (경고 3개)
|
|
98
|
+
mypy: 에러 없음
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Step 5 — HITL 확인 (HIGH 위반 시)
|
|
104
|
+
|
|
105
|
+
🔴 위반이 있으면:
|
|
106
|
+
|
|
107
|
+
> "위반 사항이 있습니다. 수정 후 다시 실행하거나, 예외로 처리할 항목을 알려주세요.
|
|
108
|
+
> 코드 병합 전에 수정을 권장합니다."
|
|
109
|
+
|
|
110
|
+
- 수정 제안을 원하면 각 항목에 대해 수정 코드를 제안한다
|
|
111
|
+
- 예외 처리 시: `wiki/conventions/`에 예외 규칙 추가 여부를 확인한다
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## 규칙
|
|
116
|
+
|
|
117
|
+
| 항목 | 규칙 |
|
|
118
|
+
|---|---|
|
|
119
|
+
| 컨벤션 기준 | wiki/conventions/ 없으면 실행 불가 |
|
|
120
|
+
| 정적 도구 | 미설치 시 설치 명령어 안내 + 설치 여부 확인. 동의 없이 임의 설치 금지 |
|
|
121
|
+
| 자동 수정 | 금지. 제안만 함 |
|
|
122
|
+
| HITL | 🔴 위반 시 반드시 사람 확인 |
|
|
123
|
+
| wiki 업데이트 | 예외 인정 시 conventions에 기록 |
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wiki
|
|
3
|
+
description: "프로젝트 LLM Wiki의 전체 수명주기를 관리한다. 프로젝트 초기 설정과 컨벤션 인터뷰, 회의·결정·devlog 캡처, raw 소스 ingest, 프로젝트 맥락 query, wiki 품질 lint를 수행한다. 새 프로젝트 설정, 프로젝트 성격·과거 결정·진행 흐름 파악, 기록 저장, 지식 반영, wiki 정합성 점검이 필요할 때 사용."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /wiki — 프로젝트 지식 수명주기
|
|
7
|
+
|
|
8
|
+
사용자가 세부 명령을 기억하지 않아도 의도에 따라 모드를 선택한다. 명시된 모드가 있으면 그대로 사용한다.
|
|
9
|
+
|
|
10
|
+
## 사용자 호출 UX
|
|
11
|
+
|
|
12
|
+
자연어 요청에서 목적이 명확하면 바로 처리한다.
|
|
13
|
+
|
|
14
|
+
- “왜 이 구조를 선택했지?” → query
|
|
15
|
+
- “이 결정을 기록해줘” → capture
|
|
16
|
+
- “오늘 작업을 개발 기록으로 남겨줘” → devlog
|
|
17
|
+
|
|
18
|
+
사용자가 **`/wiki`만 단독으로 호출하면**, 컨벤션 존재 여부, pending raw, 현재 대화를 확인해 가장 적절한 행동을 추천한다.
|
|
19
|
+
|
|
20
|
+
```text
|
|
21
|
+
아직 프로젝트 컨벤션이 없어서 "프로젝트 초기 설정"을 먼저 하는 게 좋아 보여요.
|
|
22
|
+
|
|
23
|
+
1. 프로젝트 초기 설정하기 ← 추천
|
|
24
|
+
2. 프로젝트에 관해 질문하기
|
|
25
|
+
3. 회의·결정 기록하기
|
|
26
|
+
4. 오늘 작업 기록하기
|
|
27
|
+
5. 쌓인 원본을 wiki에 반영하기
|
|
28
|
+
6. wiki 상태 점검하기
|
|
29
|
+
|
|
30
|
+
어떤 걸 할까요? 번호나 원하는 내용을 말해줘도 됩니다.
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
추천 규칙:
|
|
34
|
+
|
|
35
|
+
1. 컨벤션이 없으면 초기 설정
|
|
36
|
+
2. pending raw가 있고 작업 마무리 맥락이면 wiki 반영
|
|
37
|
+
3. 질문형 요청이면 프로젝트 질의
|
|
38
|
+
4. 회의·결정이 언급되면 기록
|
|
39
|
+
5. 세션 종료 맥락이면 devlog
|
|
40
|
+
6. 그 외에는 프로젝트 질의를 기본 추천
|
|
41
|
+
|
|
42
|
+
이미 목적이 명확한 요청에는 메뉴를 보여주지 않는다.
|
|
43
|
+
|
|
44
|
+
## 내부 모드 라우팅
|
|
45
|
+
|
|
46
|
+
| 모드 | 대표 의도 | 읽을 참조 |
|
|
47
|
+
|---|---|---|
|
|
48
|
+
| `setup` | 프로젝트 최초 설정, 컨벤션 재정의 | `references/setup.md` + ambiguity 참조 3개 |
|
|
49
|
+
| `capture` | 회의·결정 원문 보존 | `references/capture.md` |
|
|
50
|
+
| `devlog` | 현재 세션 개발 기록 생성 | `references/devlog.md` |
|
|
51
|
+
| `ingest` | pending raw 소스를 wiki에 반영 | `references/ingest.md` |
|
|
52
|
+
| `query` | 프로젝트 성격·결정·기록·진행 상황에 답변 | `references/query.md` |
|
|
53
|
+
| `lint` | 깨진 링크·고아 페이지·모순·stale 정보 점검 | `references/lint.md` |
|
|
54
|
+
|
|
55
|
+
인자가 없으면 사용자 요청에서 모드를 추론한다. 결과가 둘 이상이면 딱 하나의 짧은 질문으로 확인한다.
|
|
56
|
+
|
|
57
|
+
## 공통 원칙
|
|
58
|
+
|
|
59
|
+
- `raw/`는 사람의 원본이다. ingest 상태 필드 외 본문을 수정하지 않는다.
|
|
60
|
+
- `wiki/`는 에이전트가 유지하는 구조화된 지식이다. 사실과 해석을 구분하고 근거를 wikilink로 남긴다.
|
|
61
|
+
- 기존 페이지 갱신을 새 페이지 생성보다 먼저 검토한다.
|
|
62
|
+
- 모순은 한쪽을 지우지 말고 양쪽 출처를 `> ⚠️ 모순` 블록으로 보존한다.
|
|
63
|
+
- 의미 있는 변경 뒤 `wiki/index.md`와 `wiki/log.md`를 동기화한다.
|
|
64
|
+
- Graphify가 설치되어 있고 wiki가 바뀌었으면 `graphify update wiki/`를 실행한다.
|
|
65
|
+
- 사용자가 단순히 프로젝트에 관해 질문하면 명시적 `/wiki query`가 없어도 query 모드로 처리한다.
|
|
66
|
+
|
|
67
|
+
## setup 추가 참조
|
|
68
|
+
|
|
69
|
+
setup 모드에서는 다음을 함께 읽는다.
|
|
70
|
+
|
|
71
|
+
- `references/ambiguity-check.md` — 답변 라우팅
|
|
72
|
+
- `references/clear-path.md` — 명확한 답변 처리
|
|
73
|
+
- `references/unclear-path.md` — 미결정 항목의 기본값·TBD 처리
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# ambiguity-check — Intent Routing 진입점
|
|
2
|
+
|
|
3
|
+
`wiki setup` 인터뷰의 모든 서브 질문에 적용하는 라우팅 규칙.
|
|
4
|
+
질문을 던지기 **전** 아래 3-way routing으로 처리 경로를 결정한다.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Routing 테이블
|
|
9
|
+
|
|
10
|
+
| 분류 | 조건 | 참조 |
|
|
11
|
+
|---|---|---|
|
|
12
|
+
| **CLEAR** | 원하는 결과가 명확, 열린 항목은 선호·트레이드오프뿐 | `references/clear-path.md` |
|
|
13
|
+
| **UNCLEAR** | 결과 자체가 모호하거나 아직 미결정 | `references/unclear-path.md` |
|
|
14
|
+
| **FENCE** | CLEAR/UNCLEAR 구분 불명확 | CLEAR로 처리 + 딱 하나의 질문만 |
|
|
15
|
+
|
|
16
|
+
> CLEAR/UNCLEAR 경계가 애매할 때만 **FENCE**로 분류한다. 진짜 미결정 항목은 UNCLEAR 경로에 남긴다.
|