docuking-mcp 2.0.0 → 2.0.1
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/README.md +35 -74
- package/index.js +75 -63
- package/package.json +1 -1
- package/DEPLOY_TASK.md +0 -33
package/README.md
CHANGED
|
@@ -1,29 +1,23 @@
|
|
|
1
|
-
#
|
|
1
|
+
# docuking-mcp
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
AI가 문서를 Push/Pull 할 수 있게 해주는 MCP 서버
|
|
4
4
|
|
|
5
5
|
## 설치
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
npx
|
|
8
|
+
npx docuking-mcp
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
## MCP 설정
|
|
12
12
|
|
|
13
|
-
### Claude Code
|
|
14
|
-
|
|
15
|
-
`~/.claude.json` 또는 프로젝트의 `.claude/settings.json`에 추가:
|
|
13
|
+
### Claude Code
|
|
16
14
|
|
|
17
15
|
```json
|
|
18
16
|
{
|
|
19
17
|
"mcpServers": {
|
|
20
|
-
"
|
|
18
|
+
"docuking": {
|
|
21
19
|
"command": "npx",
|
|
22
|
-
"args": ["
|
|
23
|
-
"env": {
|
|
24
|
-
"DOCUREPO_API_KEY": "sk_xxx",
|
|
25
|
-
"DOCUREPO_REPOS": "{\"C:/my-project\":\"project-uuid\"}"
|
|
26
|
-
}
|
|
20
|
+
"args": ["-y", "docuking-mcp"]
|
|
27
21
|
}
|
|
28
22
|
}
|
|
29
23
|
}
|
|
@@ -36,13 +30,9 @@ npx docurepo-mcp
|
|
|
36
30
|
```json
|
|
37
31
|
{
|
|
38
32
|
"mcpServers": {
|
|
39
|
-
"
|
|
33
|
+
"docuking": {
|
|
40
34
|
"command": "npx",
|
|
41
|
-
"args": ["
|
|
42
|
-
"env": {
|
|
43
|
-
"DOCUREPO_API_KEY": "sk_xxx",
|
|
44
|
-
"DOCUREPO_REPOS": "{\"C:/my-project\":\"project-uuid\"}"
|
|
45
|
-
}
|
|
35
|
+
"args": ["-y", "docuking-mcp"]
|
|
46
36
|
}
|
|
47
37
|
}
|
|
48
38
|
}
|
|
@@ -50,68 +40,39 @@ npx docurepo-mcp
|
|
|
50
40
|
|
|
51
41
|
## 도구
|
|
52
42
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
프로젝트를 DocuRepo에 연결합니다.
|
|
56
|
-
|
|
57
|
-
```
|
|
58
|
-
docurepo_init(projectId, localPath)
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
- Z_DocuRepo/ 폴더 생성
|
|
62
|
-
- 레포 매핑 추가 안내
|
|
63
|
-
|
|
64
|
-
### docurepo_push
|
|
65
|
-
|
|
66
|
-
Z_DocuRepo/ 폴더의 문서를 서버에 업로드합니다.
|
|
67
|
-
|
|
68
|
-
```
|
|
69
|
-
docurepo_push(localPath, [filePath])
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
- "피터해" 요청 시 사용
|
|
73
|
-
- filePath 생략 시 전체 동기화
|
|
74
|
-
|
|
75
|
-
### docurepo_pull
|
|
76
|
-
|
|
77
|
-
서버에서 문서를 다운로드합니다.
|
|
78
|
-
|
|
79
|
-
```
|
|
80
|
-
docurepo_pull(localPath, [filePath])
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
- "피터에서 가져와" 요청 시 사용
|
|
84
|
-
- filePath 생략 시 전체 동기화
|
|
85
|
-
|
|
86
|
-
### docurepo_list
|
|
87
|
-
|
|
88
|
-
서버에 저장된 파일 목록을 조회합니다.
|
|
89
|
-
|
|
90
|
-
```
|
|
91
|
-
docurepo_list(localPath)
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
## 환경변수
|
|
95
|
-
|
|
96
|
-
| 변수 | 설명 |
|
|
43
|
+
| 도구 | 설명 |
|
|
97
44
|
|------|------|
|
|
98
|
-
|
|
|
99
|
-
|
|
|
100
|
-
|
|
|
101
|
-
|
|
102
|
-
|
|
45
|
+
| docuking_init | 프로젝트 연결, yy_All_Docu/ 및 zz_ai_* 폴더 생성 |
|
|
46
|
+
| docuking_push | yy_All_Docu/ → 서버 업로드 |
|
|
47
|
+
| docuking_pull | 서버 → yy_All_Docu/ 다운로드 |
|
|
48
|
+
| docuking_status | 동기화 상태 확인 |
|
|
49
|
+
| docuking_list | 서버 파일 목록 조회 |
|
|
50
|
+
| docuking_log | 커밋 히스토리 조회 |
|
|
51
|
+
| docuking_diff | 버전 간 차이 비교 |
|
|
52
|
+
| docuking_rollback | 특정 커밋으로 롤백 |
|
|
53
|
+
| docuking_talk | AI 대화록 저장 (zz_ai_Talk/) |
|
|
54
|
+
| docuking_plan | 작업 계획 관리 (zzz_ai_Plan/) |
|
|
55
|
+
| docuking_done | 작업 완료 처리 |
|
|
56
|
+
| docuking_todo | 킹투두 관리 (zz_ai_Todo/) |
|
|
57
|
+
|
|
58
|
+
## 폴더 구조
|
|
103
59
|
|
|
104
60
|
```
|
|
105
61
|
프로젝트/
|
|
106
|
-
├──
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
└── 뭐든지/
|
|
62
|
+
├── yy_All_Docu/ ← 동기화 대상 (Push/Pull)
|
|
63
|
+
│ └── yy_Coworker_{이름}/ ← 협업자 작업 폴더
|
|
64
|
+
├── zz_ai_Talk/ ← AI 대화록 (로컬 전용)
|
|
65
|
+
├── zz_ai_Todo/ ← AI 투두 (로컬 전용)
|
|
66
|
+
└── zzz_ai_Plan/ ← AI 플랜 (로컬 전용)
|
|
112
67
|
```
|
|
113
68
|
|
|
114
|
-
|
|
69
|
+
**접두사 규칙:**
|
|
70
|
+
- `yy_*`: 동기화 대상
|
|
71
|
+
- `zz_*`: 로컬 전용 (Push 제외)
|
|
72
|
+
|
|
73
|
+
## 웹사이트
|
|
74
|
+
|
|
75
|
+
https://docuking.ai
|
|
115
76
|
|
|
116
77
|
## 라이센스
|
|
117
78
|
|
package/index.js
CHANGED
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
* 폴더 구조:
|
|
9
9
|
* - yy_All_Docu/ : 킹폴더와 동기화 (Push/Pull 대상)
|
|
10
10
|
* - yy_All_Docu/yy_{이름}/ : 협업자 폴더 (동기화 대상)
|
|
11
|
-
* -
|
|
12
|
-
* -
|
|
13
|
-
* -
|
|
11
|
+
* - zz_ai_Talk/ : AI 대화록 (로컬 전용, 킹톡)
|
|
12
|
+
* - zz_ai_Todo/ : AI 투두 (로컬 전용, 킹투두)
|
|
13
|
+
* - zzz_ai_Plan/ : AI 플랜 (로컬 전용, 킹플랜)
|
|
14
14
|
*
|
|
15
15
|
* 접두사 규칙:
|
|
16
16
|
* - yy_* : 동기화 대상 (Push/Pull)
|
|
@@ -141,7 +141,7 @@ docuking_done({
|
|
|
141
141
|
### 절대 규칙
|
|
142
142
|
- **작업 시작 전 반드시 \`docuking_plan\` 호출**
|
|
143
143
|
- **작업 완료 후 반드시 \`docuking_done\` 호출**
|
|
144
|
-
- 결과는 \`
|
|
144
|
+
- 결과는 \`zzz_ai_Plan/\`에 자동 저장됨 (로컬 전용)
|
|
145
145
|
`;
|
|
146
146
|
|
|
147
147
|
try {
|
|
@@ -423,7 +423,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
423
423
|
},
|
|
424
424
|
{
|
|
425
425
|
name: 'docuking_talk',
|
|
426
|
-
description: '의미 있는 대화 내용을
|
|
426
|
+
description: '의미 있는 대화 내용을 zz_ai_Talk/ 폴더에 기록합니다 (로컬 전용, 킹톡). AI가 중요한 논의/결정이라고 판단하거나, 사용자가 "이거 기록해줘"라고 요청할 때 사용.',
|
|
427
427
|
inputSchema: {
|
|
428
428
|
type: 'object',
|
|
429
429
|
properties: {
|
|
@@ -450,7 +450,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
450
450
|
},
|
|
451
451
|
{
|
|
452
452
|
name: 'docuking_plan',
|
|
453
|
-
description: '작업 계획 문서를
|
|
453
|
+
description: '작업 계획 문서를 zzz_ai_Plan/ 폴더에 생성/업데이트합니다 (로컬 전용, 킹플랜). 작업 시작 시 계획을 작성하고, 진행하면서 결과를 upsert합니다.',
|
|
454
454
|
inputSchema: {
|
|
455
455
|
type: 'object',
|
|
456
456
|
properties: {
|
|
@@ -519,7 +519,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
519
519
|
},
|
|
520
520
|
{
|
|
521
521
|
name: 'docuking_todo',
|
|
522
|
-
description: `킹투두(King Todo) - 프로젝트 공식 할일을
|
|
522
|
+
description: `킹투두(King Todo) - 프로젝트 공식 할일을 zz_ai_Todo/z_King_Todo.md에 관리합니다 (로컬 전용).
|
|
523
523
|
|
|
524
524
|
**AI 내장 TodoWrite와 다름!** 킹투두는 웹에 동기화되고 팀과 공유됩니다.
|
|
525
525
|
|
|
@@ -593,7 +593,7 @@ DocuKing은 문서 버전 관리 시스템입니다. Git이 코드를 관리하
|
|
|
593
593
|
- **로컬**: 사용자의 yy_All_Docu/ 폴더 (동기화 대상)
|
|
594
594
|
- **웹탐색기**: DocuKing 서버의 파일 저장소 (킹폴더)
|
|
595
595
|
- **캔버스**: 선택된 파일을 시각화하는 작업 공간
|
|
596
|
-
- **AI 작업 폴더**:
|
|
596
|
+
- **AI 작업 폴더**: zz_ai_Talk/, zz_ai_Todo/, zzz_ai_Plan/ (로컬 전용)
|
|
597
597
|
|
|
598
598
|
작동 방식: 로컬 yy_All_Docu/ → Push → 킹폴더 → 캔버스에서 시각화
|
|
599
599
|
|
|
@@ -628,9 +628,9 @@ DocuKing 문서 폴더는 git에서 제외해야 합니다. 코드는 git으로,
|
|
|
628
628
|
\`\`\`gitignore
|
|
629
629
|
# DocuKing 문서 폴더 (문서는 DocuKing으로 관리)
|
|
630
630
|
yy_All_Docu/
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
631
|
+
zz_ai_Talk/
|
|
632
|
+
zz_ai_Todo/
|
|
633
|
+
zzz_ai_Plan/
|
|
634
634
|
\`\`\`
|
|
635
635
|
|
|
636
636
|
**왜 gitignore에 등록해야 하나요?**
|
|
@@ -666,12 +666,12 @@ zz_AI_Plan/
|
|
|
666
666
|
특정 커밋으로 되돌립니다. (웹 탐색기에서 사용 가능)
|
|
667
667
|
|
|
668
668
|
### 9. docuking_talk
|
|
669
|
-
의미 있는 대화 내용을 \`
|
|
669
|
+
의미 있는 대화 내용을 \`zz_ai_Talk/\` 폴더에 기록합니다 (로컬 전용, 킹톡).
|
|
670
670
|
- AI가 중요한 논의/결정이라고 판단할 때
|
|
671
671
|
- 사용자가 "이거 기록해줘"라고 요청할 때
|
|
672
672
|
|
|
673
673
|
### 10. docuking_plan
|
|
674
|
-
작업 계획을 \`
|
|
674
|
+
작업 계획을 \`zzz_ai_Plan/\` 폴더에 생성/업데이트합니다 (로컬 전용, 킹플랜).
|
|
675
675
|
- 작업 시작 시 계획 생성
|
|
676
676
|
- 진행하면서 단계별 결과 upsert
|
|
677
677
|
- planId로 기존 계획 찾아서 업데이트
|
|
@@ -743,7 +743,7 @@ DocuKing에는 **오너(Owner)**와 **참여자(Co-worker)** 두 가지 권한
|
|
|
743
743
|
|
|
744
744
|
**예시:**
|
|
745
745
|
\`\`\`
|
|
746
|
-
|
|
746
|
+
yy_All_Docu/
|
|
747
747
|
├── 정책/
|
|
748
748
|
│ └── README.md ← 오너가 작성
|
|
749
749
|
├── 기획/
|
|
@@ -757,7 +757,7 @@ z_DocuKing/
|
|
|
757
757
|
**특징:**
|
|
758
758
|
- 프로젝트에 초대받아 참여한 사람
|
|
759
759
|
- **읽기**: 전체 문서 Pull 가능 (오너의 문서도 볼 수 있음)
|
|
760
|
-
- **쓰기**: 자신의 폴더(\`
|
|
760
|
+
- **쓰기**: 자신의 폴더(\`yy_All_Docu/yy_Coworker_{이름}/\`)에만 Push 가능
|
|
761
761
|
- API Key: \`sk_cw_\`로 시작
|
|
762
762
|
- 프로젝트 설정 변경 불가능
|
|
763
763
|
|
|
@@ -766,36 +766,39 @@ z_DocuKing/
|
|
|
766
766
|
2. MCP 설정 (한 번만)
|
|
767
767
|
3. 프로젝트 연결 (\`docuking_init\`)
|
|
768
768
|
4. Pull로 오너의 문서 가져오기 (\`docuking_pull\`)
|
|
769
|
-
5. 내 폴더에 문서 작성 (\`
|
|
769
|
+
5. 내 폴더에 문서 작성 (\`yy_All_Docu/yy_Coworker_{이름}/\`)
|
|
770
770
|
6. Push (\`docuking_push\`)
|
|
771
771
|
|
|
772
|
-
**폴더
|
|
772
|
+
**폴더 구조:**
|
|
773
773
|
\`\`\`
|
|
774
774
|
프로젝트/
|
|
775
|
-
├── src/
|
|
776
|
-
├──
|
|
775
|
+
├── src/ ← 소스 코드 (git 관리)
|
|
776
|
+
├── yy_All_Docu/ ← 동기화 대상 (Push/Pull)
|
|
777
777
|
│ ├── 정책/
|
|
778
|
-
│ │ └── README.md
|
|
779
|
-
│
|
|
780
|
-
│
|
|
781
|
-
└──
|
|
782
|
-
|
|
783
|
-
|
|
778
|
+
│ │ └── README.md ← 오너의 파일 (읽기만 가능)
|
|
779
|
+
│ ├── 기획/
|
|
780
|
+
│ │ └── 요구사항.md ← 오너의 파일 (읽기만 가능)
|
|
781
|
+
│ └── yy_Coworker_김개발/ ← 참여자 "김개발"의 폴더
|
|
782
|
+
│ ├── 제안서.md ← 여기에만 Push 가능
|
|
783
|
+
│ └── 수정안.md ← 여기에만 Push 가능
|
|
784
|
+
├── zz_ai_Talk/ ← AI 대화록 (로컬 전용)
|
|
785
|
+
├── zz_ai_Todo/ ← AI 투두 (로컬 전용)
|
|
786
|
+
└── zzz_ai_Plan/ ← AI 플랜 (로컬 전용)
|
|
784
787
|
\`\`\`
|
|
785
788
|
|
|
786
789
|
**중요 규칙:**
|
|
787
|
-
- 코워커 폴더(\`
|
|
788
|
-
- 참여자는 Pull로
|
|
790
|
+
- 코워커 폴더(\`yy_Coworker_{이름}/\`)는 yy_All_Docu/ 안에 생성됨
|
|
791
|
+
- 참여자는 Pull로 yy_All_Docu/ 폴더의 오너 문서를 볼 수 있음
|
|
789
792
|
- 참여자는 자신의 폴더에만 Push 가능
|
|
790
793
|
- \`docuking_status\`로 현재 권한과 작업 폴더 확인 가능
|
|
791
794
|
|
|
792
795
|
**참여자가 오너의 파일을 수정하고 싶을 때:**
|
|
793
|
-
1. Pull로 오너의 파일을 로컬에 가져옴 (
|
|
796
|
+
1. Pull로 오너의 파일을 로컬에 가져옴 (yy_All_Docu/에 저장됨)
|
|
794
797
|
2. 내용을 참고하여 자신의 폴더에 수정 제안 작성
|
|
795
|
-
- 예: \`
|
|
798
|
+
- 예: \`yy_All_Docu/yy_Coworker_김개발/정책_README_수정제안.md\`로 작성 후 Push
|
|
796
799
|
|
|
797
800
|
**AI가 참여자에게 안내해야 할 내용:**
|
|
798
|
-
- 참여자의 작업 폴더는 \`
|
|
801
|
+
- 참여자의 작업 폴더는 \`yy_All_Docu/yy_Coworker_{이름}/\`
|
|
799
802
|
- 오너의 파일을 직접 수정할 수 없으므로, 제안서 형태로 작성하도록 안내
|
|
800
803
|
|
|
801
804
|
## AI 응답 가이드 (중요!)
|
|
@@ -849,7 +852,7 @@ Push 완료! 총 10개 파일 중 3개 업로드, 6개 스킵(변경 없음), 1
|
|
|
849
852
|
### 핵심 원칙 (AI 행동 지침)
|
|
850
853
|
|
|
851
854
|
1. **프로젝트 = 폴더**: 하나의 폴더가 하나의 프로젝트
|
|
852
|
-
2. **각 폴더마다
|
|
855
|
+
2. **각 폴더마다 yy_All_Docu/ 생성**: 여러 폴더를 각각 연결 가능
|
|
853
856
|
3. **현재 열려있는 폴더 기준**: 명령어는 현재 작업 중인 폴더에 적용
|
|
854
857
|
4. **커밋 메시지 필수**: push 시 반드시 message 파라미터 포함
|
|
855
858
|
5. **변경 없는 파일 자동 스킵**: 해시 비교로 변경 감지, 스킵된 파일은 결과에 명시
|
|
@@ -879,7 +882,7 @@ AI: (결정이 내려졌으므로 docuking_talk 호출)
|
|
|
879
882
|
})
|
|
880
883
|
\`\`\`
|
|
881
884
|
|
|
882
|
-
**저장 위치:** \`
|
|
885
|
+
**저장 위치:** \`zz_ai_Talk/YYYY-MM-DD_HHMM__제목.md\` (플랫 구조, 로컬 전용)
|
|
883
886
|
|
|
884
887
|
### 작업 계획 관리 (docuking_plan, docuking_done)
|
|
885
888
|
|
|
@@ -930,7 +933,7 @@ AI: docuking_done({
|
|
|
930
933
|
})
|
|
931
934
|
\`\`\`
|
|
932
935
|
|
|
933
|
-
**저장 위치:** \`
|
|
936
|
+
**저장 위치:** \`zzz_ai_Plan/YYYY-MM-DD_HHMM__제목__planId.md\` (플랫 구조, 로컬 전용)
|
|
934
937
|
|
|
935
938
|
**핵심 가치:**
|
|
936
939
|
- AI 세션이 끊겨도 (컴팩션, 세션 종료) 다음 AI가 계획 문서를 보고 이어서 작업 가능
|
|
@@ -985,7 +988,7 @@ AI: docuking_done({
|
|
|
985
988
|
2. 프로젝트 ID, 이름, API 키 확인 (사용자가 제공하거나 요청)
|
|
986
989
|
3. \`docuking_init(projectId, projectName, apiKey, localPath)\` 호출
|
|
987
990
|
4. 연결 완료 메시지 전달:
|
|
988
|
-
- "DocuKing 연결 완료! 📁
|
|
991
|
+
- "DocuKing 연결 완료! 📁 yy_All_Docu/ 폴더가 생성되었습니다."
|
|
989
992
|
- "이제 'DocuKing에 올려줘' 명령을 사용할 수 있습니다."
|
|
990
993
|
|
|
991
994
|
**⚠️ 매우 중요:**
|
|
@@ -998,28 +1001,28 @@ AI: docuking_done({
|
|
|
998
1001
|
**핵심 개념:**
|
|
999
1002
|
- **프로젝트 = 하나의 폴더**
|
|
1000
1003
|
- 한 컴퓨터에서 여러 폴더를 각각 다른 DocuKing 프로젝트와 연결 가능
|
|
1001
|
-
- 각 폴더마다 \`
|
|
1004
|
+
- 각 폴더마다 \`yy_All_Docu/\` 폴더가 독립적으로 생성됨
|
|
1002
1005
|
|
|
1003
1006
|
**예시:**
|
|
1004
1007
|
\`\`\`
|
|
1005
1008
|
C:\\Projects\\MyApp\\
|
|
1006
1009
|
├── src/
|
|
1007
1010
|
├── package.json
|
|
1008
|
-
|
|
1011
|
+
├── yy_All_Docu/ ← 프로젝트 A와 연결 (동기화)
|
|
1012
|
+
├── zz_ai_Talk/ ← AI 대화록 (로컬 전용)
|
|
1013
|
+
├── zz_ai_Todo/ ← AI 투두 (로컬 전용)
|
|
1014
|
+
└── zzz_ai_Plan/ ← AI 플랜 (로컬 전용)
|
|
1009
1015
|
|
|
1010
1016
|
C:\\Projects\\MyWebsite\\
|
|
1011
1017
|
├── pages/
|
|
1012
1018
|
├── components/
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
D:\\Work\\ClientProject\\
|
|
1016
|
-
├── docs/
|
|
1017
|
-
└── z_DocuKing/ ← 프로젝트 C와 연결
|
|
1019
|
+
├── yy_All_Docu/ ← 프로젝트 B와 연결
|
|
1020
|
+
└── zz_ai_*/ ← 로컬 전용 폴더들
|
|
1018
1021
|
\`\`\`
|
|
1019
1022
|
|
|
1020
1023
|
**AI가 해야 할 일:**
|
|
1021
1024
|
- 각 폴더에서 \`docuking_init\`을 호출하면 해당 폴더만 연결됨
|
|
1022
|
-
- 다른 폴더로 이동하면 해당 폴더의 \`
|
|
1025
|
+
- 다른 폴더로 이동하면 해당 폴더의 \`yy_All_Docu/\`가 사용됨
|
|
1023
1026
|
- 여러 프로젝트를 동시에 관리할 수 있음을 인지하고, 현재 작업 중인 폴더 기준으로 동작
|
|
1024
1027
|
|
|
1025
1028
|
**고급: DOCUKING_REPOS 환경변수 (선택사항)**
|
|
@@ -1136,12 +1139,21 @@ docuking_init 호출 시 apiKey 파라미터를 포함해주세요.`,
|
|
|
1136
1139
|
fs.mkdirSync(mainFolderPath, { recursive: true });
|
|
1137
1140
|
}
|
|
1138
1141
|
|
|
1142
|
+
// zz_ai_* 폴더도 함께 생성 (로컬 전용)
|
|
1143
|
+
const aiFolders = ['zz_ai_Talk', 'zz_ai_Todo', 'zzz_ai_Plan'];
|
|
1144
|
+
for (const folder of aiFolders) {
|
|
1145
|
+
const folderPath = path.join(localPath, folder);
|
|
1146
|
+
if (!fs.existsSync(folderPath)) {
|
|
1147
|
+
fs.mkdirSync(folderPath, { recursive: true });
|
|
1148
|
+
}
|
|
1149
|
+
}
|
|
1150
|
+
|
|
1139
1151
|
let coworkerFolderName = null;
|
|
1140
1152
|
let coworkerFolderPath = null;
|
|
1141
1153
|
|
|
1142
1154
|
if (isCoworker) {
|
|
1143
|
-
// 협업자: yy_All_Docu/
|
|
1144
|
-
coworkerFolderName = `
|
|
1155
|
+
// 협업자: yy_All_Docu/yy_Coworker_{이름}/ 폴더 추가 생성
|
|
1156
|
+
coworkerFolderName = `yy_Coworker_${coworkerName}`;
|
|
1145
1157
|
coworkerFolderPath = path.join(mainFolderPath, coworkerFolderName);
|
|
1146
1158
|
if (!fs.existsSync(coworkerFolderPath)) {
|
|
1147
1159
|
fs.mkdirSync(coworkerFolderPath, { recursive: true });
|
|
@@ -1193,9 +1205,9 @@ docuking_init 호출 시 apiKey 파라미터를 포함해주세요.`,
|
|
|
1193
1205
|
|
|
1194
1206
|
폴더 구조:
|
|
1195
1207
|
- yy_All_Docu/ : 동기화 대상 (킹폴더)
|
|
1196
|
-
-
|
|
1197
|
-
-
|
|
1198
|
-
-
|
|
1208
|
+
- zz_ai_Talk/ : AI 대화록 (로컬 전용, 킹톡)
|
|
1209
|
+
- zz_ai_Todo/ : AI 투두 (로컬 전용, 킹투두)
|
|
1210
|
+
- zzz_ai_Plan/ : AI 플랜 (로컬 전용, 킹플랜)`,
|
|
1199
1211
|
},
|
|
1200
1212
|
],
|
|
1201
1213
|
};
|
|
@@ -1255,15 +1267,15 @@ Git처럼 무엇을 변경했는지 명확히 작성해주세요.
|
|
|
1255
1267
|
const coworkerMatch = apiKey.match(/^sk_[a-f0-9]+_cw_([^_]+)_/);
|
|
1256
1268
|
const isCoworker = !!coworkerMatch;
|
|
1257
1269
|
const coworkerName = coworkerMatch ? coworkerMatch[1] : null;
|
|
1258
|
-
const coworkerFolderName = isCoworker ? `
|
|
1270
|
+
const coworkerFolderName = isCoworker ? `yy_Coworker_${coworkerName}` : null;
|
|
1259
1271
|
|
|
1260
|
-
// 작업 폴더 결정: 모두 yy_All_Docu/ 사용, 협업자는 yy_All_Docu/
|
|
1272
|
+
// 작업 폴더 결정: 모두 yy_All_Docu/ 사용, 협업자는 yy_All_Docu/yy_Coworker_{이름}/ 에서 작업
|
|
1261
1273
|
const mainFolderPath = path.join(localPath, 'yy_All_Docu');
|
|
1262
1274
|
let workingPath;
|
|
1263
1275
|
let serverPathPrefix = ''; // 서버에 저장될 때 경로 접두사
|
|
1264
1276
|
|
|
1265
1277
|
if (isCoworker) {
|
|
1266
|
-
// 협업자: yy_All_Docu/
|
|
1278
|
+
// 협업자: yy_All_Docu/yy_Coworker_{이름}/ 폴더에서 Push
|
|
1267
1279
|
workingPath = path.join(mainFolderPath, coworkerFolderName);
|
|
1268
1280
|
serverPathPrefix = `${coworkerFolderName}/`;
|
|
1269
1281
|
|
|
@@ -1308,7 +1320,7 @@ docuking_init을 먼저 실행하세요.`,
|
|
|
1308
1320
|
};
|
|
1309
1321
|
}
|
|
1310
1322
|
|
|
1311
|
-
// 서버 경로: 코워커는
|
|
1323
|
+
// 서버 경로: 코워커는 yy_Coworker_{이름}/파일경로, 오너는 파일경로
|
|
1312
1324
|
const serverFilePath = serverPathPrefix + filePath;
|
|
1313
1325
|
filesToPush.push({ path: filePath, serverPath: serverFilePath, fullPath, fileType });
|
|
1314
1326
|
}
|
|
@@ -1475,7 +1487,7 @@ docuking_init을 먼저 실행하세요.`,
|
|
|
1475
1487
|
},
|
|
1476
1488
|
body: JSON.stringify({
|
|
1477
1489
|
projectId,
|
|
1478
|
-
path: file.serverPath, // 서버 경로 (코워커는
|
|
1490
|
+
path: file.serverPath, // 서버 경로 (코워커는 yy_Coworker_{이름}/파일경로)
|
|
1479
1491
|
content,
|
|
1480
1492
|
encoding, // 'utf-8' 또는 'base64'
|
|
1481
1493
|
message, // 커밋 메시지
|
|
@@ -2057,7 +2069,7 @@ async function handleStatus(args) {
|
|
|
2057
2069
|
const coworkerMatch = apiKey.match(/^sk_[a-f0-9]+_cw_([^_]+)_/);
|
|
2058
2070
|
const isCoworker = !!coworkerMatch;
|
|
2059
2071
|
const coworkerName = coworkerMatch ? coworkerMatch[1] : null;
|
|
2060
|
-
const coworkerFolderName = isCoworker ? `
|
|
2072
|
+
const coworkerFolderName = isCoworker ? `yy_Coworker_${coworkerName}` : null;
|
|
2061
2073
|
|
|
2062
2074
|
// 권한 정보 구성
|
|
2063
2075
|
let permissionInfo = '';
|
|
@@ -2252,8 +2264,8 @@ function generatePlanId() {
|
|
|
2252
2264
|
async function handleTodo(args) {
|
|
2253
2265
|
const { localPath, action, todo, todoId } = args;
|
|
2254
2266
|
|
|
2255
|
-
//
|
|
2256
|
-
const todoBasePath = path.join(localPath, '
|
|
2267
|
+
// zz_ai_Todo 폴더 경로 (로컬 전용, 킹투두)
|
|
2268
|
+
const todoBasePath = path.join(localPath, 'zz_ai_Todo');
|
|
2257
2269
|
const todoFilePath = path.join(todoBasePath, 'z_King_Todo.md');
|
|
2258
2270
|
|
|
2259
2271
|
// 폴더 생성
|
|
@@ -2414,7 +2426,7 @@ async function handleTodo(args) {
|
|
|
2414
2426
|
text: `📋 킹투두 미결: 없음
|
|
2415
2427
|
|
|
2416
2428
|
✅ 완료: ${completedCount}개
|
|
2417
|
-
📁 전체 기록:
|
|
2429
|
+
📁 전체 기록: zz_ai_Todo/z_King_Todo.md`,
|
|
2418
2430
|
}],
|
|
2419
2431
|
};
|
|
2420
2432
|
}
|
|
@@ -2429,7 +2441,7 @@ async function handleTodo(args) {
|
|
|
2429
2441
|
${listText}
|
|
2430
2442
|
|
|
2431
2443
|
✅ 완료: ${completedCount}개
|
|
2432
|
-
📁 전체 기록:
|
|
2444
|
+
📁 전체 기록: zz_ai_Todo/z_King_Todo.md`,
|
|
2433
2445
|
}],
|
|
2434
2446
|
};
|
|
2435
2447
|
}
|
|
@@ -2443,8 +2455,8 @@ ${listText}
|
|
|
2443
2455
|
async function handleTalk(args) {
|
|
2444
2456
|
const { localPath, title, content, tags = [] } = args;
|
|
2445
2457
|
|
|
2446
|
-
//
|
|
2447
|
-
const talkBasePath = path.join(localPath, '
|
|
2458
|
+
// zz_ai_Talk 폴더 경로 (로컬 전용, 킹톡)
|
|
2459
|
+
const talkBasePath = path.join(localPath, 'zz_ai_Talk');
|
|
2448
2460
|
|
|
2449
2461
|
// 날짜 기반 파일명 생성
|
|
2450
2462
|
const { fileName, timestamp } = generateDateFileName(title);
|
|
@@ -2496,8 +2508,8 @@ ${content}
|
|
|
2496
2508
|
async function handlePlan(args) {
|
|
2497
2509
|
const { localPath, planId, title, goal, steps = [], notes } = args;
|
|
2498
2510
|
|
|
2499
|
-
//
|
|
2500
|
-
const planBasePath = path.join(localPath, '
|
|
2511
|
+
// zzz_ai_Plan 폴더 경로 (로컬 전용, 킹플랜)
|
|
2512
|
+
const planBasePath = path.join(localPath, 'zzz_ai_Plan');
|
|
2501
2513
|
|
|
2502
2514
|
// 기존 계획 업데이트 또는 새 계획 생성
|
|
2503
2515
|
let targetPlanId = planId;
|
|
@@ -2646,8 +2658,8 @@ function findPlanFiles(basePath, planId) {
|
|
|
2646
2658
|
async function handleDone(args) {
|
|
2647
2659
|
const { localPath, planId, summary, artifacts = [] } = args;
|
|
2648
2660
|
|
|
2649
|
-
//
|
|
2650
|
-
const planBasePath = path.join(localPath, '
|
|
2661
|
+
// zzz_ai_Plan 폴더 경로 (로컬 전용, 킹플랜)
|
|
2662
|
+
const planBasePath = path.join(localPath, 'zzz_ai_Plan');
|
|
2651
2663
|
|
|
2652
2664
|
// 계획 파일 찾기
|
|
2653
2665
|
const planFiles = findPlanFiles(planBasePath, planId);
|
package/package.json
CHANGED
package/DEPLOY_TASK.md
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
# MCP 패키지 배포 작업지시
|
|
2
|
-
|
|
3
|
-
## 작업 개요
|
|
4
|
-
docurepo-mcp 패키지 v1.0.5를 npm에 배포
|
|
5
|
-
|
|
6
|
-
## 변경 사항
|
|
7
|
-
- Push 시 Sync 상태 API 호출 추가
|
|
8
|
-
- 시작: `POST /projects/:id/sync/start` (totalFiles 전달)
|
|
9
|
-
- 진행: `POST /projects/:id/sync/progress` (5개마다)
|
|
10
|
-
- 완료: `POST /projects/:id/sync/complete`
|
|
11
|
-
|
|
12
|
-
## 배포 절차
|
|
13
|
-
|
|
14
|
-
### 1. npm 로그인 확인
|
|
15
|
-
```bash
|
|
16
|
-
cd c:\2025_Project\docurepo\docurepo-mcp
|
|
17
|
-
npm whoami
|
|
18
|
-
```
|
|
19
|
-
- 로그인 안되어 있으면: `npm login`
|
|
20
|
-
|
|
21
|
-
### 2. 패키지 배포
|
|
22
|
-
```bash
|
|
23
|
-
npm publish
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
### 3. 배포 확인
|
|
27
|
-
```bash
|
|
28
|
-
npm view docurepo-mcp version
|
|
29
|
-
```
|
|
30
|
-
- 1.0.5가 나오면 성공
|
|
31
|
-
|
|
32
|
-
## 완료 후
|
|
33
|
-
- 사용자가 `npx docurepo-mcp` 재실행하면 새 버전 적용됨
|