@bifos/dooray-cli 0.5.4 → 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 +151 -43
- package/dist/index.js +780 -108
- package/package.json +2 -2
- package/skills/dooray-cli/SKILL.md +64 -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
|
|------|--------|
|
|
@@ -56,6 +56,7 @@ dooray doctor # 설정 검증
|
|
|
56
56
|
| 프로젝트 멤버 그룹 목록 | `dooray project groups <project>` (ID / Code) |
|
|
57
57
|
| 프로젝트 태그 목록 | `dooray project tags <project>` (ID / Color / Name / Group / Mandatory) |
|
|
58
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` |
|
|
59
60
|
| 업무 목록 조회 | `dooray post list <project>` |
|
|
60
61
|
| 업무 검색 | `dooray post search <project> "<keyword>"` |
|
|
61
62
|
| 업무 상세 보기 | `dooray post get <project> <number>` |
|
|
@@ -86,6 +87,10 @@ dooray doctor # 설정 검증
|
|
|
86
87
|
| 전체 첨부파일 다운로드 | `dooray post file download-all <project> <number>` |
|
|
87
88
|
| 첨부파일 업로드 | `dooray post file upload <project> <number> <file-path>` |
|
|
88
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` |
|
|
89
94
|
|
|
90
95
|
> **제목 옵션 네이밍**: `post` 와 `wiki page` 모두 `--title` 표준. `post`의 `--subject`는 deprecated alias로 당분간 동작하되, 새 코드에서는 `--title` 사용을 권장.
|
|
91
96
|
|
|
@@ -111,7 +116,8 @@ CLI로 처리 **불가능한** 작업. 아래 항목을 요청받으면 웹 UI
|
|
|
111
116
|
3. **업무 번호를 모르면** → `dooray post search <project> "<keyword>"` 로 검색
|
|
112
117
|
4. **워크플로우 이름을 모르면** → `dooray project workflows <project>` 로 확인
|
|
113
118
|
5. **멤버 이름을 모르면** → `dooray member list <project>` (또는 `dooray project members <project>`) 로 확인
|
|
114
|
-
6.
|
|
119
|
+
6. **org 전체 멤버를 찾으려면** → `dooray member search <keyword>` (이름), `--email <addr>`, `--user-code <code>` 중 하나 사용
|
|
120
|
+
7. **결과를 다음 액션에 사용하려면** → `--json` 플래그로 구조화된 데이터 획득
|
|
115
121
|
|
|
116
122
|
---
|
|
117
123
|
|
|
@@ -121,11 +127,11 @@ CLI로 처리 **불가능한** 작업. 아래 항목을 요청받으면 웹 UI
|
|
|
121
127
|
|
|
122
128
|
```bash
|
|
123
129
|
# 1. 업무 검색으로 번호 확인
|
|
124
|
-
dooray post search
|
|
130
|
+
dooray post search <project> "graceful shutdown" --json
|
|
125
131
|
# → [{ "number": 42, "subject": "graceful shutdown 구현", ... }]
|
|
126
132
|
|
|
127
133
|
# 2. 완료 처리
|
|
128
|
-
dooray post done
|
|
134
|
+
dooray post done <project> 42
|
|
129
135
|
```
|
|
130
136
|
|
|
131
137
|
### 프로젝트 찾아서 업무 생성
|
|
@@ -146,43 +152,55 @@ dooray post create ai-service-dev \
|
|
|
146
152
|
|
|
147
153
|
```bash
|
|
148
154
|
# 1. 업무 조회
|
|
149
|
-
dooray post get
|
|
155
|
+
dooray post get <project> 42 --json
|
|
150
156
|
|
|
151
157
|
# 2. 댓글 추가
|
|
152
|
-
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
|
|
153
171
|
```
|
|
154
172
|
|
|
155
173
|
### 위키 페이지 조회
|
|
156
174
|
|
|
157
175
|
```bash
|
|
158
176
|
# 1. 위키 페이지 목록
|
|
159
|
-
dooray wiki pages
|
|
160
|
-
# → [{ "id": "
|
|
177
|
+
dooray wiki pages <project> --json
|
|
178
|
+
# → [{ "id": "<pageId>", "subject": "설계 문서", ... }]
|
|
161
179
|
|
|
162
180
|
# 2. 페이지 내용 조회
|
|
163
|
-
dooray wiki page get
|
|
181
|
+
dooray wiki page get <project> <pageId> --json
|
|
164
182
|
```
|
|
165
183
|
|
|
166
184
|
---
|
|
167
185
|
|
|
168
186
|
## 커맨드 상세
|
|
169
187
|
|
|
170
|
-
### 업무 식별 방식 (post 하위
|
|
188
|
+
### 업무 식별 방식 (post 하위 16개 명령 공통, ADR-020)
|
|
171
189
|
|
|
172
|
-
`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가지 입력을 모두 받는다:
|
|
173
191
|
|
|
174
192
|
```bash
|
|
175
193
|
# (1) 기존 positional — 가장 익숙한 형태
|
|
176
|
-
dooray post get
|
|
194
|
+
dooray post get <project> 42
|
|
177
195
|
|
|
178
196
|
# (2) Dooray URL을 첫 인자로 — 사용자 메시지에서 URL을 그대로 복사할 때 최적
|
|
179
|
-
dooray post get https://x.dooray.com/task/to
|
|
197
|
+
dooray post get https://x.dooray.com/task/to/<postId>
|
|
180
198
|
|
|
181
199
|
# (3) --id <postId>
|
|
182
|
-
dooray post get --id
|
|
200
|
+
dooray post get --id <postId>
|
|
183
201
|
|
|
184
202
|
# (4) --url <url>
|
|
185
|
-
dooray post get --url https://x.dooray.com/task/to
|
|
203
|
+
dooray post get --url https://x.dooray.com/task/to/<postId>
|
|
186
204
|
```
|
|
187
205
|
|
|
188
206
|
**우선순위 / 충돌 규칙**: `--id`+`--url` 동시 지정 → 에러. `--id`/`--url`+positional 동시 지정 → 에러. URL/`--id`/`--url` 모드는 standalone API(`getPost(postId)`)로 resolve 단계를 단축.
|
|
@@ -214,7 +232,7 @@ dooray post create <project> \
|
|
|
214
232
|
--priority normal \ # highest, high, normal, low, lowest
|
|
215
233
|
--due-date "2026-04-30T18:00:00+09:00" \
|
|
216
234
|
--tag "버그" --tag "긴급" \ # 반복 지정. mandatory 그룹은 클라이언트 사전 검증
|
|
217
|
-
--parent "
|
|
235
|
+
--parent "<project>/337" \ # "code/number" 또는 raw postId 두 형태만 허용
|
|
218
236
|
--workflow "진행 중" \ # 이름 또는 class (registered/working/closed). 부분일치 모호 시 후보 + 에러
|
|
219
237
|
--milestone "Sprint 12"
|
|
220
238
|
```
|
|
@@ -261,6 +279,19 @@ dooray post comment latest <project> <number>
|
|
|
261
279
|
|
|
262
280
|
---
|
|
263
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
|
+
|
|
264
295
|
## Dooray 마크다운 링크 형식 (멤버·그룹·업무 멘션)
|
|
265
296
|
|
|
266
297
|
댓글/본문 작성 시 다음 형식으로 마크업하면 Dooray 앱이 인식해 inline 멘션·navigation으로 렌더링한다. ID는 본인 환경 값으로 채워 사용 — `dooray member get` / `project groups` / `post get` 등으로 조회.
|
|
@@ -295,12 +326,28 @@ dooray post comment latest <project> <number>
|
|
|
295
326
|
| ID | 조회 |
|
|
296
327
|
|---|---|
|
|
297
328
|
| `orgId` | Dooray 앱/웹 URL에서 추출 (`https://{org}.dooray.com/...`의 도메인 + 별도 확인 필요) |
|
|
298
|
-
| `memberId` | `dooray member get <id
|
|
329
|
+
| `memberId` | `dooray member get <id>`, `dooray member search <name>`, `--email <addr>`, `--user-code <code>` 등으로 검색 |
|
|
299
330
|
| `groupId` | `dooray project groups <project>` |
|
|
300
331
|
| `postId` | `dooray post get <project> <number> --json` 의 `id` 필드 |
|
|
301
332
|
|
|
302
333
|
---
|
|
303
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
|
+
|
|
304
351
|
## 에러 핸들링
|
|
305
352
|
|
|
306
353
|
CLI 에러 발생 시 복구 방법:
|