@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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bifos/dooray-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "CLI tool for Dooray project management — AI agent & terminal friendly",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"dooray",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"README.md"
|
|
27
27
|
],
|
|
28
28
|
"engines": {
|
|
29
|
-
"node": ">=
|
|
29
|
+
"node": ">=20"
|
|
30
30
|
},
|
|
31
31
|
"scripts": {
|
|
32
32
|
"build": "tsup",
|
|
@@ -45,7 +45,7 @@ dooray doctor # 설정 검증
|
|
|
45
45
|
|
|
46
46
|
자연어 요청을 커맨드로 변환할 때 아래 표를 참고한다.
|
|
47
47
|
|
|
48
|
-
> **공통 (post 하위
|
|
48
|
+
> **공통 (post 하위 16개 명령)**: `post get`/`edit`/`done`/`workflow`, `post comment list`/`add`/`edit`/`delete`, `post file list`/`upload`/`download`/`download-all`/`delete`, `post comment file list`/`upload`/`download`/`delete`는 `<project> <number>` 외에도 `--id <postId>`, `--url <url>`, 또는 첫 인자에 Dooray URL(`https://*.dooray.com/task/to/<postId>` 또는 브라우저 주소창 복사본 `https://*.dooray.com/task/<projectId>/<postId>`)을 직접 받는다. **사용자가 URL을 줬으면 그대로 첫 인자로 전달**하는 것이 가장 빠른 경로 (resolve 단계 단축, ADR-020).
|
|
49
49
|
|
|
50
50
|
| 의도 | 커맨드 |
|
|
51
51
|
|------|--------|
|
|
@@ -53,7 +53,10 @@ dooray doctor # 설정 검증
|
|
|
53
53
|
| 프로젝트 찾기 | `dooray project list --search <keyword>` |
|
|
54
54
|
| 개인 프로젝트 목록 | `dooray project list --type private` |
|
|
55
55
|
| 프로젝트 멤버 보기 | `dooray project members <project>` 또는 `dooray member list <project>` (이름·organizationMemberId) |
|
|
56
|
+
| 프로젝트 멤버 그룹 목록 | `dooray project groups <project>` (ID / Code) |
|
|
57
|
+
| 프로젝트 태그 목록 | `dooray project tags <project>` (ID / Color / Name / Group / Mandatory) |
|
|
56
58
|
| 멤버 상세 (organizationMemberId) | `dooray member get <organizationMemberId>` (cache 우회, ADR-021) |
|
|
59
|
+
| organization 전체 멤버 검색 | `dooray member search <keyword>` (이름 기본), `--email`(이메일 exact), `--user-code`(사번 like), `--user-code-exact`(사번 exact), `--page`/`--size` |
|
|
57
60
|
| 업무 목록 조회 | `dooray post list <project>` |
|
|
58
61
|
| 업무 검색 | `dooray post search <project> "<keyword>"` |
|
|
59
62
|
| 업무 상세 보기 | `dooray post get <project> <number>` |
|
|
@@ -61,7 +64,8 @@ dooray doctor # 설정 검증
|
|
|
61
64
|
| 업무 제목/본문 수정 | `dooray post edit <project> <number> --title "..." --body "..."` 또는 `--body-file <path>` |
|
|
62
65
|
| 업무 완료 처리 | `dooray post done <project> <number>` |
|
|
63
66
|
| 업무 워크플로우 변경 | `dooray post workflow <project> <number> <workflow>` |
|
|
64
|
-
| 댓글 조회 | `dooray post comment list <project> <number>`
|
|
67
|
+
| 댓글 조회 | `dooray post comment list <project> <number>` — `--sort asc\|desc`, `--reverse`, `--latest <n>`, `--since <iso>`, `--from-author <name>` 필터 지원. table 출력은 Creator 이름 자동 채움, `--json`은 raw 유지 (ADR-021) |
|
|
68
|
+
| 최신 댓글 조회 | `dooray post comment latest <project> <number>` — 최신 댓글 1개 빠른 조회. `-n <N>`으로 N개 지정 |
|
|
65
69
|
| 댓글 추가 | `dooray post comment add <project> <number> --body "..."` 또는 `--body-file <path>` |
|
|
66
70
|
| 댓글 수정 | `dooray post comment edit <project> <number> <comment-id> --body "..."` 또는 `--body-file <path>` |
|
|
67
71
|
| 댓글 삭제 | `dooray post comment delete <project> <number> <comment-id>` |
|
|
@@ -83,6 +87,10 @@ dooray doctor # 설정 검증
|
|
|
83
87
|
| 전체 첨부파일 다운로드 | `dooray post file download-all <project> <number>` |
|
|
84
88
|
| 첨부파일 업로드 | `dooray post file upload <project> <number> <file-path>` |
|
|
85
89
|
| 첨부파일 삭제 | `dooray post file delete <project> <number> <file-id>` |
|
|
90
|
+
| 댓글 첨부 목록 | `dooray post comment file list <project> <number> <comment-id>` |
|
|
91
|
+
| 댓글 파일 업로드 | `dooray post comment file upload <project> <number> <comment-id> <path>` |
|
|
92
|
+
| 댓글 파일 다운로드 | `dooray post comment file download <project> <number> <comment-id> <file-id>` |
|
|
93
|
+
| 댓글 파일 삭제 | `dooray post comment file delete <project> <number> <comment-id> <file-id> --yes` |
|
|
86
94
|
|
|
87
95
|
> **제목 옵션 네이밍**: `post` 와 `wiki page` 모두 `--title` 표준. `post`의 `--subject`는 deprecated alias로 당분간 동작하되, 새 코드에서는 `--title` 사용을 권장.
|
|
88
96
|
|
|
@@ -108,7 +116,8 @@ CLI로 처리 **불가능한** 작업. 아래 항목을 요청받으면 웹 UI
|
|
|
108
116
|
3. **업무 번호를 모르면** → `dooray post search <project> "<keyword>"` 로 검색
|
|
109
117
|
4. **워크플로우 이름을 모르면** → `dooray project workflows <project>` 로 확인
|
|
110
118
|
5. **멤버 이름을 모르면** → `dooray member list <project>` (또는 `dooray project members <project>`) 로 확인
|
|
111
|
-
6.
|
|
119
|
+
6. **org 전체 멤버를 찾으려면** → `dooray member search <keyword>` (이름), `--email <addr>`, `--user-code <code>` 중 하나 사용
|
|
120
|
+
7. **결과를 다음 액션에 사용하려면** → `--json` 플래그로 구조화된 데이터 획득
|
|
112
121
|
|
|
113
122
|
---
|
|
114
123
|
|
|
@@ -118,11 +127,11 @@ CLI로 처리 **불가능한** 작업. 아래 항목을 요청받으면 웹 UI
|
|
|
118
127
|
|
|
119
128
|
```bash
|
|
120
129
|
# 1. 업무 검색으로 번호 확인
|
|
121
|
-
dooray post search
|
|
130
|
+
dooray post search <project> "graceful shutdown" --json
|
|
122
131
|
# → [{ "number": 42, "subject": "graceful shutdown 구현", ... }]
|
|
123
132
|
|
|
124
133
|
# 2. 완료 처리
|
|
125
|
-
dooray post done
|
|
134
|
+
dooray post done <project> 42
|
|
126
135
|
```
|
|
127
136
|
|
|
128
137
|
### 프로젝트 찾아서 업무 생성
|
|
@@ -143,43 +152,55 @@ dooray post create ai-service-dev \
|
|
|
143
152
|
|
|
144
153
|
```bash
|
|
145
154
|
# 1. 업무 조회
|
|
146
|
-
dooray post get
|
|
155
|
+
dooray post get <project> 42 --json
|
|
147
156
|
|
|
148
157
|
# 2. 댓글 추가
|
|
149
|
-
dooray post comment add
|
|
158
|
+
dooray post comment add <project> 42 --body "진행 상황 업데이트: 80% 완료"
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### 시나리오 — 댓글에 스크린샷 자동 첨부
|
|
162
|
+
|
|
163
|
+
스크립트가 스크린샷을 댓글에 삽입하거나, 에이전트가 결과 파일을 첨부 댓글로 보고할 때 사용. Dooray REST API 가 댓글 전용 attachment endpoint 를 미지원하므로 내부적으로 post-level files API + 댓글 본문 PUT 합성으로 동작 (ADR-024).
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
# 1. 댓글을 먼저 만든다 (텍스트만, --json 으로 commentId 획득)
|
|
167
|
+
COMMENT_ID=$(dooray post comment add <project> <post-num> --body "스크린샷 보고:" --json | jq -r '.id')
|
|
168
|
+
|
|
169
|
+
# 2. 그 댓글에 파일을 첨부 (post-level 업로드 + 댓글 본문 markdown 자동 추가)
|
|
170
|
+
dooray post comment file upload <project> <post-num> "$COMMENT_ID" ./screenshot.png
|
|
150
171
|
```
|
|
151
172
|
|
|
152
173
|
### 위키 페이지 조회
|
|
153
174
|
|
|
154
175
|
```bash
|
|
155
176
|
# 1. 위키 페이지 목록
|
|
156
|
-
dooray wiki pages
|
|
157
|
-
# → [{ "id": "
|
|
177
|
+
dooray wiki pages <project> --json
|
|
178
|
+
# → [{ "id": "<pageId>", "subject": "설계 문서", ... }]
|
|
158
179
|
|
|
159
180
|
# 2. 페이지 내용 조회
|
|
160
|
-
dooray wiki page get
|
|
181
|
+
dooray wiki page get <project> <pageId> --json
|
|
161
182
|
```
|
|
162
183
|
|
|
163
184
|
---
|
|
164
185
|
|
|
165
186
|
## 커맨드 상세
|
|
166
187
|
|
|
167
|
-
### 업무 식별 방식 (post 하위
|
|
188
|
+
### 업무 식별 방식 (post 하위 16개 명령 공통, ADR-020)
|
|
168
189
|
|
|
169
|
-
`post get`/`edit`/`done`/`workflow`, `post comment list`/`add`/`edit`/`delete`, `post file list`/`upload`/`download`/`download-all`/`delete`는 4가지 입력을 모두 받는다:
|
|
190
|
+
`post get`/`edit`/`done`/`workflow`, `post comment list`/`add`/`edit`/`delete`, `post file list`/`upload`/`download`/`download-all`/`delete`, `post comment file list`/`upload`/`download`/`delete`는 4가지 입력을 모두 받는다:
|
|
170
191
|
|
|
171
192
|
```bash
|
|
172
193
|
# (1) 기존 positional — 가장 익숙한 형태
|
|
173
|
-
dooray post get
|
|
194
|
+
dooray post get <project> 42
|
|
174
195
|
|
|
175
196
|
# (2) Dooray URL을 첫 인자로 — 사용자 메시지에서 URL을 그대로 복사할 때 최적
|
|
176
|
-
dooray post get https://x.dooray.com/task/to
|
|
197
|
+
dooray post get https://x.dooray.com/task/to/<postId>
|
|
177
198
|
|
|
178
199
|
# (3) --id <postId>
|
|
179
|
-
dooray post get --id
|
|
200
|
+
dooray post get --id <postId>
|
|
180
201
|
|
|
181
202
|
# (4) --url <url>
|
|
182
|
-
dooray post get --url https://x.dooray.com/task/to
|
|
203
|
+
dooray post get --url https://x.dooray.com/task/to/<postId>
|
|
183
204
|
```
|
|
184
205
|
|
|
185
206
|
**우선순위 / 충돌 규칙**: `--id`+`--url` 동시 지정 → 에러. `--id`/`--url`+positional 동시 지정 → 에러. URL/`--id`/`--url` 모드는 standalone API(`getPost(postId)`)로 resolve 단계를 단축.
|
|
@@ -211,7 +232,7 @@ dooray post create <project> \
|
|
|
211
232
|
--priority normal \ # highest, high, normal, low, lowest
|
|
212
233
|
--due-date "2026-04-30T18:00:00+09:00" \
|
|
213
234
|
--tag "버그" --tag "긴급" \ # 반복 지정. mandatory 그룹은 클라이언트 사전 검증
|
|
214
|
-
--parent "
|
|
235
|
+
--parent "<project>/337" \ # "code/number" 또는 raw postId 두 형태만 허용
|
|
215
236
|
--workflow "진행 중" \ # 이름 또는 class (registered/working/closed). 부분일치 모호 시 후보 + 에러
|
|
216
237
|
--milestone "Sprint 12"
|
|
217
238
|
```
|
|
@@ -243,8 +264,90 @@ dooray post comment add <project> <number> --body "댓글 내용"
|
|
|
243
264
|
dooray post comment add <project> <number> --body-file ./comment.md
|
|
244
265
|
```
|
|
245
266
|
|
|
267
|
+
### 댓글 목록 필터 (non-interactive)
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
# 최신 5개
|
|
271
|
+
dooray post comment list <project> <number> --latest 5
|
|
272
|
+
# 특정 날짜 이후
|
|
273
|
+
dooray post comment list <project> <number> --since 2026-04-27
|
|
274
|
+
# 작성자 필터
|
|
275
|
+
dooray post comment list <project> <number> --from-author 홍길동
|
|
276
|
+
# 최신 댓글 1개 빠른 조회
|
|
277
|
+
dooray post comment latest <project> <number>
|
|
278
|
+
```
|
|
279
|
+
|
|
246
280
|
---
|
|
247
281
|
|
|
282
|
+
## 멘션 자동 작성 (post comment add/edit)
|
|
283
|
+
|
|
284
|
+
`--mention <name>` (반복) 또는 `--mention-group <code>` (반복)으로 본문 앞에 멘션 마크업을 자동 prepend한다. 아래 "Dooray 마크다운 링크 형식" 섹션의 URL 형식을 자동 출력한다.
|
|
285
|
+
|
|
286
|
+
```bash
|
|
287
|
+
dooray post comment add P 1 --mention 홍길동 --mention-group 개발 --body "..."
|
|
288
|
+
# 결과 본문: [@홍길동](dooray://orgId/members/m1 "member") [@P/개발](dooray://orgId/member-groups/g1) ...
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
- 이름 부분일치 지원 (모호하면 에러 + 후보 목록 출력)
|
|
292
|
+
- 멤버 먼저, 그룹 다음 순서 고정
|
|
293
|
+
- comment edit에도 동일 옵션 사용 (`$EDITOR` 모드에서는 EDITOR 진입 전에 prepend)
|
|
294
|
+
|
|
295
|
+
## Dooray 마크다운 링크 형식 (멤버·그룹·업무 멘션)
|
|
296
|
+
|
|
297
|
+
댓글/본문 작성 시 다음 형식으로 마크업하면 Dooray 앱이 인식해 inline 멘션·navigation으로 렌더링한다. ID는 본인 환경 값으로 채워 사용 — `dooray member get` / `project groups` / `post get` 등으로 조회.
|
|
298
|
+
|
|
299
|
+
### 멤버 멘션
|
|
300
|
+
```markdown
|
|
301
|
+
[@본인이름](dooray://{orgId}/members/{memberId} "me")
|
|
302
|
+
[@타인이름](dooray://{orgId}/members/{memberId} "member")
|
|
303
|
+
```
|
|
304
|
+
- title 속성: 본인은 `"me"`, 타인은 `"member"`
|
|
305
|
+
- URL: `dooray://{orgId}/members/{memberId}`
|
|
306
|
+
|
|
307
|
+
### 그룹 멘션 (member-group)
|
|
308
|
+
```markdown
|
|
309
|
+
[@projectCode/그룹명](dooray://{orgId}/member-groups/{groupId})
|
|
310
|
+
```
|
|
311
|
+
- **`projects/{projectId}/` 경로 포함하지 않음** (직관과 반대 — 흔한 실수)
|
|
312
|
+
- title 속성 **없음**
|
|
313
|
+
- URL: `dooray://{orgId}/member-groups/{groupId}`
|
|
314
|
+
|
|
315
|
+
### 업무(task) 링크
|
|
316
|
+
```markdown
|
|
317
|
+
[projectCode/{number} {subject}](dooray://{orgId}/tasks/{postId} "registered")
|
|
318
|
+
```
|
|
319
|
+
- 표시 텍스트: `{project}/{number} {subject}`
|
|
320
|
+
- URL: `dooray://{orgId}/tasks/{postId}`
|
|
321
|
+
- title: workflow class — `registered` / `working` / `closed` / `backlog`
|
|
322
|
+
- 클릭 시 외부 브라우저 안 열고 Dooray 앱 내부 navigation + workflow 상태 표시
|
|
323
|
+
|
|
324
|
+
### 필요 ID 조회 명령
|
|
325
|
+
|
|
326
|
+
| ID | 조회 |
|
|
327
|
+
|---|---|
|
|
328
|
+
| `orgId` | Dooray 앱/웹 URL에서 추출 (`https://{org}.dooray.com/...`의 도메인 + 별도 확인 필요) |
|
|
329
|
+
| `memberId` | `dooray member get <id>`, `dooray member search <name>`, `--email <addr>`, `--user-code <code>` 등으로 검색 |
|
|
330
|
+
| `groupId` | `dooray project groups <project>` |
|
|
331
|
+
| `postId` | `dooray post get <project> <number> --json` 의 `id` 필드 |
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
335
|
+
## 피드백 (GitHub Issue 등록)
|
|
336
|
+
|
|
337
|
+
`dooray feedback` 명령으로 dooray-cli GitHub issue를 직접 등록한다 (`gh` CLI 위임).
|
|
338
|
+
|
|
339
|
+
```bash
|
|
340
|
+
# 논인터랙티브 (non-interactive — 에이전트 자동화용)
|
|
341
|
+
dooray feedback --title "버그 제목" --body "재현 방법" --label "bug"
|
|
342
|
+
|
|
343
|
+
# --last 모드 (직전 에러 자동 첨부 — track-last-run 활성화 필요)
|
|
344
|
+
dooray config set track-last-run true
|
|
345
|
+
dooray feedback --last --title "에러 제목" --body "추가 설명" --dry-run # 미리보기
|
|
346
|
+
dooray feedback --last --title "에러 제목" --body "추가 설명" # 실제 등록
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
> **참고**: `--last` 모드는 `trackLastRun: true` (ADR-023 opt-in)가 설정된 경우에만 직전 실패 명령이 자동 기록됨. argv는 시크릿 패턴(`--api-key`/`--token`/`Authorization`) 마스킹 후 저장.
|
|
350
|
+
|
|
248
351
|
## 에러 핸들링
|
|
249
352
|
|
|
250
353
|
CLI 에러 발생 시 복구 방법:
|