@bifos/dooray-cli 0.5.3 → 0.6.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/README.md +178 -33
- package/dist/index.js +1315 -231
- package/package.json +2 -2
- package/skills/dooray-cli/SKILL.md +120 -17
package/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# dooray-cli
|
|
2
2
|
|
|
3
|
+
[](https://github.com/jon890/dooray-cli/actions/workflows/ci.yml)
|
|
4
|
+
|
|
3
5
|
NHN Dooray REST API를 래핑한 CLI 도구입니다. 터미널과 AI 에이전트 환경에서 Dooray 업무를 관리할 수 있습니다.
|
|
4
6
|
|
|
5
7
|
> A CLI tool wrapping the NHN Dooray REST API. Manage Dooray tasks from your terminal or AI agent workflows.
|
|
@@ -37,33 +39,45 @@ dooray doctor
|
|
|
37
39
|
dooray project list # 프로젝트 목록 (기본: public)
|
|
38
40
|
dooray project list --search ocr # 코드로 검색
|
|
39
41
|
dooray project list --type private # 개인 프로젝트 목록
|
|
40
|
-
dooray project members
|
|
41
|
-
dooray project workflows
|
|
42
|
+
dooray project members <project> # 멤버 목록
|
|
43
|
+
dooray project workflows <project> # 워크플로우 목록
|
|
44
|
+
dooray project groups <project> # 멤버 그룹 목록 (ID / Code)
|
|
45
|
+
dooray project tags <project> # 태그 목록 (ID / Color / Name / Group / Mandatory)
|
|
42
46
|
```
|
|
43
47
|
|
|
48
|
+
> **태그 캐시 갱신**: 이전 버전에서 캐시한 태그가 색상 없이 표시되면 `dooray cache clear` 실행 후 다시 조회하세요.
|
|
49
|
+
|
|
44
50
|
### 멤버
|
|
45
51
|
|
|
46
52
|
```bash
|
|
47
|
-
dooray member list
|
|
48
|
-
dooray member get <organizationMemberId>
|
|
53
|
+
dooray member list <project> # 프로젝트 멤버 목록 (이름·organizationMemberId)
|
|
54
|
+
dooray member get <organizationMemberId> # 멤버 상세 (cache 우회, ADR-021)
|
|
55
|
+
|
|
56
|
+
# organization 전체 멤버 검색
|
|
57
|
+
dooray member search 홍길동 # 이름 검색
|
|
58
|
+
dooray member search --email user@example.com # 이메일 (정확히 일치)
|
|
59
|
+
dooray member search --user-code abc # 사번 like 검색
|
|
60
|
+
dooray member search --user-code-exact abc123 # 사번 exact match
|
|
61
|
+
dooray member search 김 --size 50 --page 1 # 페이지네이션
|
|
49
62
|
```
|
|
50
63
|
|
|
51
64
|
### 업무
|
|
52
65
|
|
|
53
66
|
```bash
|
|
54
|
-
dooray post list
|
|
55
|
-
dooray post search
|
|
56
|
-
dooray post get
|
|
57
|
-
dooray post get
|
|
67
|
+
dooray post list <project> # 업무 목록 (최신순)
|
|
68
|
+
dooray post search <project> "키워드" # 제목 검색
|
|
69
|
+
dooray post get <project> 42 # 업무 상세
|
|
70
|
+
dooray post get <project> 42 --json # JSON 출력
|
|
58
71
|
```
|
|
59
72
|
|
|
60
|
-
#### 업무 식별 방식 (post 하위
|
|
73
|
+
#### 업무 식별 방식 (post 하위 16개 명령 공통)
|
|
61
74
|
|
|
62
75
|
| 방식 | 예시 |
|
|
63
76
|
|---|---|
|
|
64
|
-
| `<project> <number>` | `dooray post get
|
|
65
|
-
| Dooray URL positional | `dooray post get https://x.dooray.com/task/to
|
|
66
|
-
|
|
|
77
|
+
| `<project> <number>` | `dooray post get <project> 42` |
|
|
78
|
+
| Dooray URL positional (`/task/to/<postId>`) | `dooray post get https://x.dooray.com/task/to/<postId>` |
|
|
79
|
+
| Dooray URL positional (브라우저 주소창 복사본) | `dooray post get https://x.dooray.com/task/<projectId>/<postId>` |
|
|
80
|
+
| `--id <postId>` | `dooray post get --id <postId>` |
|
|
67
81
|
| `--url <url>` | `dooray post get --url https://x.dooray.com/task/to/...` |
|
|
68
82
|
|
|
69
83
|
대상: `post get`/`edit`/`done`/`workflow`, `post comment list`/`add`/`edit`/`delete`, `post file list`/`upload`/`download`/`download-all`/`delete`. AI 에이전트는 사용자 메시지의 Dooray URL을 그대로 첫 인자로 전달하면 가장 빠르다 (ADR-020).
|
|
@@ -71,66 +85,125 @@ dooray post get tc-ocr 42 --json # JSON 출력
|
|
|
71
85
|
### 업무 생성
|
|
72
86
|
|
|
73
87
|
```bash
|
|
74
|
-
dooray post create
|
|
88
|
+
dooray post create <project> \
|
|
75
89
|
--title "업무 제목" \
|
|
76
90
|
--body "본문 마크다운" \
|
|
77
91
|
--to "담당자이름" \
|
|
78
92
|
--priority normal
|
|
79
93
|
|
|
80
94
|
# 본문을 파일에서 읽기 (--body와 --body-file은 동시 사용 불가)
|
|
81
|
-
dooray post create
|
|
95
|
+
dooray post create <project> --title "업무 제목" --body-file ./content.md
|
|
82
96
|
|
|
83
97
|
# 메타 옵션: --tag(반복) / --parent / --workflow / --milestone
|
|
84
|
-
dooray post create
|
|
98
|
+
dooray post create <project> \
|
|
85
99
|
--title "업무 제목" --body "본문" --to "담당자이름" \
|
|
86
100
|
--tag "버그" --tag "긴급" \
|
|
87
|
-
--parent "
|
|
101
|
+
--parent "<project>/337" \
|
|
88
102
|
--workflow "진행 중" \
|
|
89
103
|
--milestone "Sprint 12"
|
|
90
104
|
```
|
|
91
105
|
|
|
92
|
-
> mandatory-tag 정책 프로젝트(예:
|
|
106
|
+
> mandatory-tag 정책 프로젝트(예: `<project>`)에서는 mandatory 그룹마다 1개 이상 `--tag`로 지정해야 한다. 누락 시 클라이언트가 사전 검증으로 후보 목록과 함께 에러 출력.
|
|
93
107
|
|
|
94
108
|
### 업무 수정
|
|
95
109
|
|
|
96
110
|
```bash
|
|
97
111
|
# 대화형 ($EDITOR)
|
|
98
|
-
dooray post edit
|
|
112
|
+
dooray post edit <project> 42
|
|
99
113
|
|
|
100
114
|
# 비대화형 (AI 에이전트 친화)
|
|
101
|
-
dooray post edit
|
|
115
|
+
dooray post edit <project> 42 --title "새 제목" --body "새 본문"
|
|
102
116
|
|
|
103
117
|
# 본문을 파일에서 읽기
|
|
104
|
-
dooray post edit
|
|
118
|
+
dooray post edit <project> 42 --body-file ./updated.md
|
|
105
119
|
```
|
|
106
120
|
|
|
107
121
|
### 댓글
|
|
108
122
|
|
|
109
123
|
```bash
|
|
110
|
-
dooray post comment list
|
|
111
|
-
dooray post comment add
|
|
112
|
-
dooray post comment add
|
|
124
|
+
dooray post comment list <project> 42
|
|
125
|
+
dooray post comment add <project> 42 --body "댓글 내용"
|
|
126
|
+
dooray post comment add <project> 42 --body-file ./comment.md
|
|
113
127
|
```
|
|
114
128
|
|
|
115
129
|
> table 출력의 Creator 컬럼은 프로젝트 멤버 캐시로 자동 enrich되며, `--json`은 raw 응답을 유지한다 (ADR-021).
|
|
116
130
|
|
|
131
|
+
#### 멘션 (comment add / comment edit)
|
|
132
|
+
|
|
133
|
+
`--mention <name>` (반복), `--mention-group <code>` (반복)으로 본문 앞에 멘션 마크업을 자동 prepend한다.
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
# 멤버 멘션 1명
|
|
137
|
+
dooray post comment add P 1 --mention 홍길동 --body "확인 부탁드립니다"
|
|
138
|
+
|
|
139
|
+
# 여러 명
|
|
140
|
+
dooray post comment add P 1 --mention 홍길동 --mention 김철수 --body "..."
|
|
141
|
+
|
|
142
|
+
# 그룹 멘션
|
|
143
|
+
dooray post comment add P 1 --mention-group 개발 --body "검토 요청"
|
|
144
|
+
|
|
145
|
+
# 멤버 + 그룹 혼합
|
|
146
|
+
dooray post comment add P 1 \
|
|
147
|
+
--mention 홍길동 \
|
|
148
|
+
--mention-group 개발 \
|
|
149
|
+
--body "검토 부탁드립니다"
|
|
150
|
+
|
|
151
|
+
# comment edit에도 동일 옵션 사용 가능
|
|
152
|
+
dooray post comment edit P 1 <commentId> --mention 홍길동 --body "수정 내용"
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
> 이전 버전 캐시는 orgId가 없으므로 첫 호출 시 자동 갱신됩니다 (또는 `dooray cache clear`).
|
|
156
|
+
|
|
157
|
+
#### comment list 필터 옵션
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
# 최신 5개 (desc 정렬)
|
|
161
|
+
dooray post comment list <project> 42 --latest 5
|
|
162
|
+
|
|
163
|
+
# 특정 시간 이후 댓글만
|
|
164
|
+
dooray post comment list <project> 42 --since 2026-04-27
|
|
165
|
+
|
|
166
|
+
# 작성자 이름으로 필터 (부분일치)
|
|
167
|
+
dooray post comment list <project> 42 --from-author 홍길동
|
|
168
|
+
|
|
169
|
+
# 오름차순 / 내림차순 정렬
|
|
170
|
+
dooray post comment list <project> 42 --sort asc
|
|
171
|
+
dooray post comment list <project> 42 --sort desc
|
|
172
|
+
dooray post comment list <project> 42 --reverse # --sort desc alias
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
#### comment latest
|
|
176
|
+
|
|
177
|
+
최신 댓글 1개(또는 N개)를 빠르게 조회한다.
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
# 최신 댓글 1개
|
|
181
|
+
dooray post comment latest <project> 42
|
|
182
|
+
|
|
183
|
+
# 최신 3개
|
|
184
|
+
dooray post comment latest <project> 42 -n 3
|
|
185
|
+
|
|
186
|
+
# URL로도 가능
|
|
187
|
+
dooray post comment latest --url <dooray-url>
|
|
188
|
+
```
|
|
189
|
+
|
|
117
190
|
### 상태 변경
|
|
118
191
|
|
|
119
192
|
```bash
|
|
120
|
-
dooray post done
|
|
121
|
-
dooray post workflow
|
|
193
|
+
dooray post done <project> 42 # 완료 처리
|
|
194
|
+
dooray post workflow <project> 42 "진행 중" # 워크플로우 변경
|
|
122
195
|
```
|
|
123
196
|
|
|
124
197
|
### 위키
|
|
125
198
|
|
|
126
199
|
```bash
|
|
127
200
|
dooray wiki list # 위키 목록
|
|
128
|
-
dooray wiki pages
|
|
129
|
-
dooray wiki page get
|
|
130
|
-
dooray wiki page create
|
|
131
|
-
dooray wiki page edit
|
|
132
|
-
dooray wiki page edit
|
|
133
|
-
dooray wiki page edit
|
|
201
|
+
dooray wiki pages <project> # 페이지 목록
|
|
202
|
+
dooray wiki page get <project> <page-id> # 페이지 상세
|
|
203
|
+
dooray wiki page create <project> --title "..." [--parent <page-id>] [--body "..." | --body-file <path>]
|
|
204
|
+
dooray wiki page edit <project> <page-id> --title "새 제목" # 제목만 (비대화형)
|
|
205
|
+
dooray wiki page edit <project> <page-id> --body "..." | --body-file <path> # 본문만 (비대화형)
|
|
206
|
+
dooray wiki page edit <project> <page-id> # $EDITOR (플래그 없을 때)
|
|
134
207
|
```
|
|
135
208
|
|
|
136
209
|
### 메일
|
|
@@ -190,6 +263,28 @@ dooray post comment edit --url <url> --comment-id <commentId> --body "..."
|
|
|
190
263
|
dooray post comment delete --url <url> --comment-id <commentId>
|
|
191
264
|
```
|
|
192
265
|
|
|
266
|
+
### 댓글 첨부 파일 (`post comment file *`)
|
|
267
|
+
|
|
268
|
+
자동화로 댓글에 인라인 이미지 / 파일을 삽입할 때 사용. 4 명령 (list/upload/download/delete) 모두 `<project> <post-number> <comment-id>` 또는 `--id <postId> --comment-id <logId>` / `--url <url> --comment-id <logId>` 패턴 지원 (ADR-020).
|
|
269
|
+
|
|
270
|
+
```bash
|
|
271
|
+
# 첨부 목록
|
|
272
|
+
dooray post comment file list <project> <post-num> <comment-id>
|
|
273
|
+
|
|
274
|
+
# 업로드 (post-level files API 로 업로드 + 댓글 본문에 markdown reference append)
|
|
275
|
+
dooray post comment file upload <project> <post-num> <comment-id> ./screenshot.png
|
|
276
|
+
|
|
277
|
+
# 다운로드 (post-level 파일과 동일 — UX 일관성 wrapper)
|
|
278
|
+
dooray post comment file download <project> <post-num> <comment-id> <file-id> --out ./out.png
|
|
279
|
+
|
|
280
|
+
# 삭제 (댓글 본문 markdown 제거 + post-level 파일 삭제, --yes 로 confirm 생략)
|
|
281
|
+
dooray post comment file delete <project> <post-num> <comment-id> <file-id> --yes
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
> Dooray REST API 가 댓글 전용 attachment endpoint 를 제공하지 않아 내부적으로
|
|
285
|
+
> post-level files API 와 댓글 본문 PUT 의 합성으로 동작 (ADR-024). 단일 명령
|
|
286
|
+
> = 단일 파일 — 다중 파일은 호출자가 반복 호출.
|
|
287
|
+
|
|
193
288
|
## 출력 모드
|
|
194
289
|
|
|
195
290
|
| 플래그 | 설명 | 용도 |
|
|
@@ -200,8 +295,8 @@ dooray post comment delete --url <url> --comment-id <commentId>
|
|
|
200
295
|
|
|
201
296
|
```bash
|
|
202
297
|
# 파이프라인 예시
|
|
203
|
-
dooray post list
|
|
204
|
-
dooray post list
|
|
298
|
+
dooray post list <project> --json | jq '.[] | select(.priority == "high")'
|
|
299
|
+
dooray post list <project> --quiet | xargs -I{} dooray post done <project> {}
|
|
205
300
|
```
|
|
206
301
|
|
|
207
302
|
## AI 에이전트 연동
|
|
@@ -213,6 +308,28 @@ dooray post list tc-ocr --quiet | xargs -I{} dooray post done tc-ocr {}
|
|
|
213
308
|
cp -r skills/dooray-cli ~/.claude/skills/
|
|
214
309
|
```
|
|
215
310
|
|
|
311
|
+
## 피드백 (GitHub Issue 등록)
|
|
312
|
+
|
|
313
|
+
`dooray feedback` 명령으로 GitHub issue를 직접 등록할 수 있습니다 (`gh` CLI 위임).
|
|
314
|
+
|
|
315
|
+
```bash
|
|
316
|
+
# 인터랙티브 (제목/본문/라벨 대화형 입력)
|
|
317
|
+
dooray feedback
|
|
318
|
+
|
|
319
|
+
# 논인터랙티브
|
|
320
|
+
dooray feedback --title "버그 제목" --body "재현 방법"
|
|
321
|
+
|
|
322
|
+
# --last 모드 (직전 에러 자동 첨부)
|
|
323
|
+
dooray config set track-last-run true # 1회만, opt-in
|
|
324
|
+
dooray feedback --last # 직전 명령 + 에러 자동 첨부 + $EDITOR로 의견 추가
|
|
325
|
+
dooray feedback --last --title "재현" --body "추가 설명" --dry-run # 미리보기
|
|
326
|
+
|
|
327
|
+
# 미리보기 (gh 호출 없이 본문 확인)
|
|
328
|
+
dooray feedback --dry-run
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
> **개인정보 보호 (ADR-023)**: `--last` 모드에서 argv는 `--api-key`/`--token`/`Authorization` 등 시크릿 패턴을 자동 마스킹 후 저장합니다. cwd/env는 미저장.
|
|
332
|
+
|
|
216
333
|
## 캐시
|
|
217
334
|
|
|
218
335
|
프로젝트, 멤버, 워크플로우, 위키 정보는 `~/.dooray/cache/`에 캐시됩니다.
|
|
@@ -242,6 +359,34 @@ pnpm link --global
|
|
|
242
359
|
dooray --help
|
|
243
360
|
```
|
|
244
361
|
|
|
362
|
+
## GitHub Actions
|
|
363
|
+
|
|
364
|
+
이 레포는 두 개의 워크플로를 사용합니다:
|
|
365
|
+
|
|
366
|
+
### CI (`.github/workflows/ci.yml`)
|
|
367
|
+
- 트리거: `main` 으로 push, `main` 대상 PR
|
|
368
|
+
- 동작: `pnpm install --frozen-lockfile` → `pnpm test` → `pnpm build` (Node 18, ubuntu-latest)
|
|
369
|
+
- 별도 secret 불필요
|
|
370
|
+
|
|
371
|
+
### Claude code review (`.github/workflows/claude-code-review.yml`)
|
|
372
|
+
- 트리거: PR opened, PR 댓글에 `/review` 포함
|
|
373
|
+
- 동작: 4 병렬 specialist 에이전트 (TypeScript / Conventions / Security / Architecture) 가 인라인 리뷰 + 요약 댓글 1개 게시
|
|
374
|
+
- 필요 secret: `CLAUDE_CODE_OAUTH_TOKEN`
|
|
375
|
+
|
|
376
|
+
#### Secret 셋업
|
|
377
|
+
|
|
378
|
+
1. https://github.com/jon890/dooray-cli/settings/secrets/actions 접속
|
|
379
|
+
2. `New repository secret` → 이름 `CLAUDE_CODE_OAUTH_TOKEN` + 값 (Anthropic 에서 발급한 OAuth 토큰)
|
|
380
|
+
3. PR 을 열거나 PR 댓글에 `/review` 작성하면 자동 실행
|
|
381
|
+
|
|
382
|
+
#### 비용 / 토큰
|
|
383
|
+
|
|
384
|
+
각 PR 당 4 specialist 가 모두 `haiku` 모델로 동작 — 평균 PR 1건 당 수십 센트 수준. PR 자동 트리거 비활성화하려면 `claude-code-review.yml` 의 `if:` 조건에서 `github.event_name == 'pull_request'` 분기를 제거하고 `/review` 댓글 트리거만 남길 수 있음.
|
|
385
|
+
|
|
386
|
+
#### Fork PR 제한
|
|
387
|
+
|
|
388
|
+
GitHub Actions 정책상 fork 에서 열린 PR 은 `secrets.CLAUDE_CODE_OAUTH_TOKEN` 에 접근 못 해 **자동 리뷰가 silent 하게 skip** 된다. fork 기여자가 리뷰를 받으려면 maintainer 가 PR 댓글에 `/review` 를 작성하여 base repo 컨텍스트로 워크플로를 트리거해야 한다.
|
|
389
|
+
|
|
245
390
|
## 라이센스
|
|
246
391
|
|
|
247
392
|
[MIT](LICENSE)
|