@bifos/dooray-cli 0.3.1 → 0.5.2
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 +30 -8
- package/dist/index.js +474 -250
- package/package.json +3 -1
- package/skills/dooray-cli/SKILL.md +224 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bifos/dooray-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.2",
|
|
4
4
|
"description": "CLI tool for Dooray project management — AI agent & terminal friendly",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"dooray",
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
},
|
|
23
23
|
"files": [
|
|
24
24
|
"dist",
|
|
25
|
+
"skills",
|
|
25
26
|
"README.md"
|
|
26
27
|
],
|
|
27
28
|
"engines": {
|
|
@@ -33,6 +34,7 @@
|
|
|
33
34
|
},
|
|
34
35
|
"license": "MIT",
|
|
35
36
|
"dependencies": {
|
|
37
|
+
"@inquirer/prompts": "^8.3.2",
|
|
36
38
|
"chalk": "^5.6.2",
|
|
37
39
|
"cli-table3": "^0.6.5",
|
|
38
40
|
"commander": "^14.0.3",
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dooray-cli
|
|
3
|
+
description: Dooray 업무 관리 CLI. 프로젝트/업무/댓글/위키 조회·생성·수정. AI 에이전트가 두레이 업무를 자동화할 때 사용.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# dooray-cli
|
|
7
|
+
|
|
8
|
+
NHN Dooray REST API를 래핑한 CLI 도구. 업무 조회, 생성, 수정, 댓글, 위키 등을 터미널에서 수행한다.
|
|
9
|
+
|
|
10
|
+
## 설치
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
npm install -g @bifos/dooray-cli
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## 초기 설정
|
|
17
|
+
|
|
18
|
+
대화형 마법사로 한 번에 설정:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
dooray setup # API endpoint 선택, API key 입력, 메일 설정까지 대화형으로 진행
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
또는 개별 수동 설정:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
dooray config set base-url https://api.dooray.com
|
|
28
|
+
dooray config set api-key <YOUR_API_TOKEN> # https://{org}.dooray.com/setting/api/token
|
|
29
|
+
dooray doctor # 설정 검증
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## 출력 모드
|
|
33
|
+
|
|
34
|
+
| 플래그 | 설명 | 용도 |
|
|
35
|
+
|--------|------|------|
|
|
36
|
+
| (없음) | 사람이 읽기 좋은 테이블 | 기본 |
|
|
37
|
+
| `--json` | JSON 출력 (stdout) | 파싱, 체이닝 |
|
|
38
|
+
| `--quiet` | ID만 출력 | 스크립팅 |
|
|
39
|
+
|
|
40
|
+
**AI 에이전트는 `--json`을 사용하여 구조화된 데이터를 파싱하라.**
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 의도 → 커맨드 매핑
|
|
45
|
+
|
|
46
|
+
자연어 요청을 커맨드로 변환할 때 아래 표를 참고한다.
|
|
47
|
+
|
|
48
|
+
| 의도 | 커맨드 |
|
|
49
|
+
|------|--------|
|
|
50
|
+
| 초기 설정 (대화형) | `dooray setup` |
|
|
51
|
+
| 프로젝트 찾기 | `dooray project list --search <keyword>` |
|
|
52
|
+
| 개인 프로젝트 목록 | `dooray project list --type private` |
|
|
53
|
+
| 프로젝트 멤버 보기 | `dooray project members <project>` |
|
|
54
|
+
| 업무 목록 조회 | `dooray post list <project>` |
|
|
55
|
+
| 업무 검색 | `dooray post search <project> "<keyword>"` |
|
|
56
|
+
| 업무 상세 보기 | `dooray post get <project> <number>` |
|
|
57
|
+
| 업무 생성 | `dooray post create <project> --title "..." --body "..."` 또는 `--body-file <path>` (`--body`와 `--body-file`은 동시 사용 불가) |
|
|
58
|
+
| 업무 제목/본문 수정 | `dooray post edit <project> <number> --title "..." --body "..."` 또는 `--body-file <path>` |
|
|
59
|
+
| 업무 완료 처리 | `dooray post done <project> <number>` |
|
|
60
|
+
| 업무 워크플로우 변경 | `dooray post workflow <project> <number> <workflow>` |
|
|
61
|
+
| 댓글 조회 | `dooray post comment list <project> <number>` |
|
|
62
|
+
| 댓글 추가 | `dooray post comment add <project> <number> --body "..."` 또는 `--body-file <path>` |
|
|
63
|
+
| 댓글 수정 | `dooray post comment edit <project> <number> <comment-id> --body "..."` 또는 `--body-file <path>` |
|
|
64
|
+
| 댓글 삭제 | `dooray post comment delete <project> <number> <comment-id>` |
|
|
65
|
+
| 위키 목록 | `dooray wiki list` |
|
|
66
|
+
| 위키 페이지 목록 | `dooray wiki pages <project>` |
|
|
67
|
+
| 위키 페이지 상세 | `dooray wiki page get <project> <page-id>` |
|
|
68
|
+
| 위키 페이지 생성 | `dooray wiki page create <project> --title "..." [--parent <page-id>] [--body "..."]` (--parent 생략 시 위키 home 페이지 아래 생성) |
|
|
69
|
+
| 위키 페이지 수정 (제목) | `dooray wiki page edit <project> <page-id> --title "..."` |
|
|
70
|
+
| 위키 페이지 수정 (본문) | `dooray wiki page edit <project> <page-id> --body "..."` 또는 `--body-file ./new.md` |
|
|
71
|
+
| 위키 페이지 수정 (에디터) | `dooray wiki page edit <project> <page-id>` (플래그 없으면 $EDITOR 열림) |
|
|
72
|
+
| 메일 목록 조회 | `dooray mail list` |
|
|
73
|
+
| 안읽은 메일 | `dooray mail list --unread` |
|
|
74
|
+
| 메일 제목 검색 | `dooray mail list --search "<keyword>"` |
|
|
75
|
+
| 메일 상세 | `dooray mail get <uid>` |
|
|
76
|
+
| 메일 발송 | `dooray mail send --to "..." --subject "..." --body "..."` |
|
|
77
|
+
| 메일 답장 | `dooray mail reply <uid> --body "..."` |
|
|
78
|
+
| 첨부파일 목록 | `dooray post file list <project> <number>` |
|
|
79
|
+
| 첨부파일 다운로드 | `dooray post file download <project> <number> <file-id>` |
|
|
80
|
+
| 전체 첨부파일 다운로드 | `dooray post file download-all <project> <number>` |
|
|
81
|
+
| 첨부파일 업로드 | `dooray post file upload <project> <number> <file-path>` |
|
|
82
|
+
| 첨부파일 삭제 | `dooray post file delete <project> <number> <file-id>` |
|
|
83
|
+
|
|
84
|
+
> **제목 옵션 네이밍**: `post` 와 `wiki page` 모두 `--title` 표준. `post`의 `--subject`는 deprecated alias로 당분간 동작하되, 새 코드에서는 `--title` 사용을 권장.
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## 제약사항 (Dooray API 한계)
|
|
89
|
+
|
|
90
|
+
CLI로 처리 **불가능한** 작업. 아래 항목을 요청받으면 웹 UI 사용을 안내할 것.
|
|
91
|
+
|
|
92
|
+
| 작업 | 대체 경로 | 근거 |
|
|
93
|
+
|---|---|---|
|
|
94
|
+
| 위키 페이지 **삭제** | 웹 UI (`https://{tenant}.dooray.com/wiki/...`) | Dooray REST API에 해당 엔드포인트 없음 (위키 댓글·첨부파일 삭제는 있지만 페이지 자체는 없음, `docs/dooray-api-reference.md` §7 참조) |
|
|
95
|
+
| 프로젝트 삭제 | 웹 UI (admin 페이지) | API 미지원 |
|
|
96
|
+
|
|
97
|
+
위키 페이지를 잘못 만든 경우(테스트/중복) **soft delete(빈 제목·본문) 우회 금지** — 페이지가 트리에 남아 사용자 혼란 유발.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## 워크플로우 판단 기준
|
|
102
|
+
|
|
103
|
+
1. **"내 프로젝트", "개인 프로젝트" 언급 시** → `dooray project list --type private --json` 으로 개인 프로젝트 먼저 조회
|
|
104
|
+
2. **프로젝트 코드를 모르면** → `dooray project list --search <keyword>` 로 먼저 찾기
|
|
105
|
+
3. **업무 번호를 모르면** → `dooray post search <project> "<keyword>"` 로 검색
|
|
106
|
+
4. **워크플로우 이름을 모르면** → `dooray project workflows <project>` 로 확인
|
|
107
|
+
5. **멤버 이름을 모르면** → `dooray project members <project>` 로 확인
|
|
108
|
+
6. **결과를 다음 액션에 사용하려면** → `--json` 플래그로 구조화된 데이터 획득
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## 체이닝 예시
|
|
113
|
+
|
|
114
|
+
### 업무 찾아서 완료 처리
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
# 1. 업무 검색으로 번호 확인
|
|
118
|
+
dooray post search tc-ocr "graceful shutdown" --json
|
|
119
|
+
# → [{ "number": 42, "subject": "graceful shutdown 구현", ... }]
|
|
120
|
+
|
|
121
|
+
# 2. 완료 처리
|
|
122
|
+
dooray post done tc-ocr 42
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### 프로젝트 찾아서 업무 생성
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
# 1. 프로젝트 코드 확인
|
|
129
|
+
dooray project list --search "AI서비스" --json
|
|
130
|
+
# → [{ "code": "ai-service-dev", ... }]
|
|
131
|
+
|
|
132
|
+
# 2. 업무 생성
|
|
133
|
+
dooray post create ai-service-dev \
|
|
134
|
+
--title "주간보고 2026-W14" \
|
|
135
|
+
--body "## 이번 주 성과\n- 항목1\n- 항목2" \
|
|
136
|
+
--to "김철수"
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### 업무 상세 조회 후 댓글 추가
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
# 1. 업무 조회
|
|
143
|
+
dooray post get tc-ocr 42 --json
|
|
144
|
+
|
|
145
|
+
# 2. 댓글 추가
|
|
146
|
+
dooray post comment add tc-ocr 42 --body "진행 상황 업데이트: 80% 완료"
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### 위키 페이지 조회
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
# 1. 위키 페이지 목록
|
|
153
|
+
dooray wiki pages tc-ocr --json
|
|
154
|
+
# → [{ "id": "3052841366755571094", "subject": "설계 문서", ... }]
|
|
155
|
+
|
|
156
|
+
# 2. 페이지 내용 조회
|
|
157
|
+
dooray wiki page get tc-ocr 3052841366755571094 --json
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## 커맨드 상세
|
|
163
|
+
|
|
164
|
+
### 업무 생성 (non-interactive)
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
dooray post create <project> \
|
|
168
|
+
--title "제목" \
|
|
169
|
+
--body "본문 마크다운" \
|
|
170
|
+
--to "담당자이름" \ # 여러 명: --to "김철수" --to "이영희"
|
|
171
|
+
--cc "참조자이름" \
|
|
172
|
+
--priority normal \ # highest, high, normal, low, lowest
|
|
173
|
+
--due-date "2026-04-30T18:00:00+09:00"
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
본문이 길면 파일로 (`--body`와 `--body-file`은 함께 사용 불가):
|
|
177
|
+
```bash
|
|
178
|
+
dooray post create <project> --title "제목" --body-file ./content.md
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### 업무 수정 (non-interactive)
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
# 제목만 변경
|
|
185
|
+
dooray post edit <project> <number> --title "새 제목"
|
|
186
|
+
|
|
187
|
+
# 본문만 변경
|
|
188
|
+
dooray post edit <project> <number> --body "새 본문"
|
|
189
|
+
|
|
190
|
+
# 제목 + 본문 동시 변경
|
|
191
|
+
dooray post edit <project> <number> --title "새 제목" --body-file ./updated.md
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### 댓글 추가 (non-interactive)
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
dooray post comment add <project> <number> --body "댓글 내용"
|
|
198
|
+
dooray post comment add <project> <number> --body-file ./comment.md
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## 에러 핸들링
|
|
204
|
+
|
|
205
|
+
CLI 에러 발생 시 복구 방법:
|
|
206
|
+
|
|
207
|
+
| 에러 메시지 | 원인 | 복구 방법 |
|
|
208
|
+
|------------|------|-----------|
|
|
209
|
+
| `프로젝트를 찾을 수 없습니다: xxx` | 프로젝트 코드/ID 오류 | `dooray project list --search "xxx"` 로 정확한 코드 확인 |
|
|
210
|
+
| `복수의 멤버가 매칭됩니다: "김"` | 이름이 모호함 | 에러 메시지의 후보 목록에서 정확한 이름으로 재시도 |
|
|
211
|
+
| `멤버를 찾을 수 없습니다: xxx` | 해당 프로젝트에 멤버 없음 | `dooray project members <project>` 로 멤버 목록 확인 |
|
|
212
|
+
| `워크플로우를 찾을 수 없습니다: xxx` | 워크플로우 이름 오류 | `dooray project workflows <project>` 로 확인 |
|
|
213
|
+
| `API 호출 실패 (401)` | API 키 만료/오류 | `dooray doctor` 로 설정 검증 |
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## 캐시
|
|
218
|
+
|
|
219
|
+
프로젝트, 멤버, 워크플로우, 위키 정보는 `~/.dooray/cache/`에 캐시된다.
|
|
220
|
+
캐시가 오래된 것 같으면:
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
dooray cache clear # 전체 캐시 삭제 (다음 실행 시 자동 갱신)
|
|
224
|
+
```
|