@bifos/dooray-cli 0.5.2 → 0.5.4
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 +76 -0
- package/dist/index.js +1219 -130
- package/package.json +6 -3
- package/skills/dooray-cli/SKILL.md +106 -5
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bifos/dooray-cli",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.4",
|
|
4
4
|
"description": "CLI tool for Dooray project management — AI agent & terminal friendly",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"dooray",
|
|
@@ -30,7 +30,9 @@
|
|
|
30
30
|
},
|
|
31
31
|
"scripts": {
|
|
32
32
|
"build": "tsup",
|
|
33
|
-
"dev": "tsup --watch"
|
|
33
|
+
"dev": "tsup --watch",
|
|
34
|
+
"test": "vitest run",
|
|
35
|
+
"test:watch": "vitest"
|
|
34
36
|
},
|
|
35
37
|
"license": "MIT",
|
|
36
38
|
"dependencies": {
|
|
@@ -53,6 +55,7 @@
|
|
|
53
55
|
"@types/nodemailer": "^7.0.11",
|
|
54
56
|
"@types/tmp": "^0.2.6",
|
|
55
57
|
"tsup": "^8.5.1",
|
|
56
|
-
"typescript": "^6.0.2"
|
|
58
|
+
"typescript": "^6.0.2",
|
|
59
|
+
"vitest": "^4.1.5"
|
|
57
60
|
}
|
|
58
61
|
}
|
|
@@ -45,20 +45,26 @@ dooray doctor # 설정 검증
|
|
|
45
45
|
|
|
46
46
|
자연어 요청을 커맨드로 변환할 때 아래 표를 참고한다.
|
|
47
47
|
|
|
48
|
+
> **공통 (post 하위 12개 명령)**: `post get`/`edit`/`done`/`workflow`, `post comment list`/`add`/`edit`/`delete`, `post file list`/`upload`/`download`/`download-all`/`delete`는 `<project> <number>` 외에도 `--id <postId>`, `--url <url>`, 또는 첫 인자에 Dooray URL(`https://*.dooray.com/task/to/<postId>`)을 직접 받는다. **사용자가 URL을 줬으면 그대로 첫 인자로 전달**하는 것이 가장 빠른 경로 (resolve 단계 단축, ADR-020).
|
|
49
|
+
|
|
48
50
|
| 의도 | 커맨드 |
|
|
49
51
|
|------|--------|
|
|
50
52
|
| 초기 설정 (대화형) | `dooray setup` |
|
|
51
53
|
| 프로젝트 찾기 | `dooray project list --search <keyword>` |
|
|
52
54
|
| 개인 프로젝트 목록 | `dooray project list --type private` |
|
|
53
|
-
| 프로젝트 멤버 보기 | `dooray project members <project>` |
|
|
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) |
|
|
58
|
+
| 멤버 상세 (organizationMemberId) | `dooray member get <organizationMemberId>` (cache 우회, ADR-021) |
|
|
54
59
|
| 업무 목록 조회 | `dooray post list <project>` |
|
|
55
60
|
| 업무 검색 | `dooray post search <project> "<keyword>"` |
|
|
56
61
|
| 업무 상세 보기 | `dooray post get <project> <number>` |
|
|
57
|
-
| 업무 생성 | `dooray post create <project> --title "..." --body "..."` 또는 `--body-file <path>` (`--body`와 `--body-file`은 동시 사용
|
|
62
|
+
| 업무 생성 | `dooray post create <project> --title "..." --body "..."` 또는 `--body-file <path>` (`--body`와 `--body-file`은 동시 사용 불가, `--tag`/`--parent`/`--workflow`/`--milestone` 지원) |
|
|
58
63
|
| 업무 제목/본문 수정 | `dooray post edit <project> <number> --title "..." --body "..."` 또는 `--body-file <path>` |
|
|
59
64
|
| 업무 완료 처리 | `dooray post done <project> <number>` |
|
|
60
65
|
| 업무 워크플로우 변경 | `dooray post workflow <project> <number> <workflow>` |
|
|
61
|
-
| 댓글 조회 | `dooray post comment list <project> <number>` |
|
|
66
|
+
| 댓글 조회 | `dooray post comment list <project> <number>` — `--sort asc\|desc`, `--reverse`, `--latest <n>`, `--since <iso>`, `--from-author <name>` 필터 지원. table 출력은 Creator 이름 자동 채움, `--json`은 raw 유지 (ADR-021) |
|
|
67
|
+
| 최신 댓글 조회 | `dooray post comment latest <project> <number>` — 최신 댓글 1개 빠른 조회. `-n <N>`으로 N개 지정 |
|
|
62
68
|
| 댓글 추가 | `dooray post comment add <project> <number> --body "..."` 또는 `--body-file <path>` |
|
|
63
69
|
| 댓글 수정 | `dooray post comment edit <project> <number> <comment-id> --body "..."` 또는 `--body-file <path>` |
|
|
64
70
|
| 댓글 삭제 | `dooray post comment delete <project> <number> <comment-id>` |
|
|
@@ -104,7 +110,7 @@ CLI로 처리 **불가능한** 작업. 아래 항목을 요청받으면 웹 UI
|
|
|
104
110
|
2. **프로젝트 코드를 모르면** → `dooray project list --search <keyword>` 로 먼저 찾기
|
|
105
111
|
3. **업무 번호를 모르면** → `dooray post search <project> "<keyword>"` 로 검색
|
|
106
112
|
4. **워크플로우 이름을 모르면** → `dooray project workflows <project>` 로 확인
|
|
107
|
-
5. **멤버 이름을 모르면** → `dooray project members <project>` 로 확인
|
|
113
|
+
5. **멤버 이름을 모르면** → `dooray member list <project>` (또는 `dooray project members <project>`) 로 확인
|
|
108
114
|
6. **결과를 다음 액션에 사용하려면** → `--json` 플래그로 구조화된 데이터 획득
|
|
109
115
|
|
|
110
116
|
---
|
|
@@ -161,6 +167,42 @@ dooray wiki page get tc-ocr 3052841366755571094 --json
|
|
|
161
167
|
|
|
162
168
|
## 커맨드 상세
|
|
163
169
|
|
|
170
|
+
### 업무 식별 방식 (post 하위 12개 명령 공통, ADR-020)
|
|
171
|
+
|
|
172
|
+
`post get`/`edit`/`done`/`workflow`, `post comment list`/`add`/`edit`/`delete`, `post file list`/`upload`/`download`/`download-all`/`delete`는 4가지 입력을 모두 받는다:
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
# (1) 기존 positional — 가장 익숙한 형태
|
|
176
|
+
dooray post get tc-ocr 42
|
|
177
|
+
|
|
178
|
+
# (2) Dooray URL을 첫 인자로 — 사용자 메시지에서 URL을 그대로 복사할 때 최적
|
|
179
|
+
dooray post get https://x.dooray.com/task/to/4319587406666362045
|
|
180
|
+
|
|
181
|
+
# (3) --id <postId>
|
|
182
|
+
dooray post get --id 4319587406666362045
|
|
183
|
+
|
|
184
|
+
# (4) --url <url>
|
|
185
|
+
dooray post get --url https://x.dooray.com/task/to/4319587406666362045
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
**우선순위 / 충돌 규칙**: `--id`+`--url` 동시 지정 → 에러. `--id`/`--url`+positional 동시 지정 → 에러. URL/`--id`/`--url` 모드는 standalone API(`getPost(postId)`)로 resolve 단계를 단축.
|
|
189
|
+
|
|
190
|
+
**sub-id 옵션화** (URL/`--id`/`--url` 모드에서 필수):
|
|
191
|
+
```bash
|
|
192
|
+
# comment edit/delete: --comment-id
|
|
193
|
+
dooray post comment edit --url <url> --comment-id <commentId> --body "..."
|
|
194
|
+
dooray post comment delete --url <url> --comment-id <commentId>
|
|
195
|
+
|
|
196
|
+
# file download/delete: --file-id
|
|
197
|
+
dooray post file download --url <url> --file-id <fileId> -o ./downloads
|
|
198
|
+
dooray post file delete --url <url> --file-id <fileId>
|
|
199
|
+
|
|
200
|
+
# file upload: --file (로컬 경로)
|
|
201
|
+
dooray post file upload --url <url> --file ./report.pdf
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
기존 positional 3-arg(`comment edit <project> <number> <comment-id>`, `file upload <project> <number> <path>`)는 그대로 유지.
|
|
205
|
+
|
|
164
206
|
### 업무 생성 (non-interactive)
|
|
165
207
|
|
|
166
208
|
```bash
|
|
@@ -170,7 +212,11 @@ dooray post create <project> \
|
|
|
170
212
|
--to "담당자이름" \ # 여러 명: --to "김철수" --to "이영희"
|
|
171
213
|
--cc "참조자이름" \
|
|
172
214
|
--priority normal \ # highest, high, normal, low, lowest
|
|
173
|
-
--due-date "2026-04-30T18:00:00+09:00"
|
|
215
|
+
--due-date "2026-04-30T18:00:00+09:00" \
|
|
216
|
+
--tag "버그" --tag "긴급" \ # 반복 지정. mandatory 그룹은 클라이언트 사전 검증
|
|
217
|
+
--parent "tc-ocr/337" \ # "code/number" 또는 raw postId 두 형태만 허용
|
|
218
|
+
--workflow "진행 중" \ # 이름 또는 class (registered/working/closed). 부분일치 모호 시 후보 + 에러
|
|
219
|
+
--milestone "Sprint 12"
|
|
174
220
|
```
|
|
175
221
|
|
|
176
222
|
본문이 길면 파일로 (`--body`와 `--body-file`은 함께 사용 불가):
|
|
@@ -178,6 +224,8 @@ dooray post create <project> \
|
|
|
178
224
|
dooray post create <project> --title "제목" --body-file ./content.md
|
|
179
225
|
```
|
|
180
226
|
|
|
227
|
+
> **`--workflow` 동작 주의**: 워크플로우 설정은 post 생성 *후속* 호출이므로, 워크플로우 resolve/설정에 실패해도 stderr 경고만 출력되고 **exit code는 0** (post는 이미 생성됨). 자동화 스크립트에서 워크플로우 적용 여부를 보장해야 하면 stderr를 별도 점검할 것.
|
|
228
|
+
|
|
181
229
|
### 업무 수정 (non-interactive)
|
|
182
230
|
|
|
183
231
|
```bash
|
|
@@ -198,6 +246,59 @@ dooray post comment add <project> <number> --body "댓글 내용"
|
|
|
198
246
|
dooray post comment add <project> <number> --body-file ./comment.md
|
|
199
247
|
```
|
|
200
248
|
|
|
249
|
+
### 댓글 목록 필터 (non-interactive)
|
|
250
|
+
|
|
251
|
+
```bash
|
|
252
|
+
# 최신 5개
|
|
253
|
+
dooray post comment list <project> <number> --latest 5
|
|
254
|
+
# 특정 날짜 이후
|
|
255
|
+
dooray post comment list <project> <number> --since 2026-04-27
|
|
256
|
+
# 작성자 필터
|
|
257
|
+
dooray post comment list <project> <number> --from-author 홍길동
|
|
258
|
+
# 최신 댓글 1개 빠른 조회
|
|
259
|
+
dooray post comment latest <project> <number>
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
---
|
|
263
|
+
|
|
264
|
+
## Dooray 마크다운 링크 형식 (멤버·그룹·업무 멘션)
|
|
265
|
+
|
|
266
|
+
댓글/본문 작성 시 다음 형식으로 마크업하면 Dooray 앱이 인식해 inline 멘션·navigation으로 렌더링한다. ID는 본인 환경 값으로 채워 사용 — `dooray member get` / `project groups` / `post get` 등으로 조회.
|
|
267
|
+
|
|
268
|
+
### 멤버 멘션
|
|
269
|
+
```markdown
|
|
270
|
+
[@본인이름](dooray://{orgId}/members/{memberId} "me")
|
|
271
|
+
[@타인이름](dooray://{orgId}/members/{memberId} "member")
|
|
272
|
+
```
|
|
273
|
+
- title 속성: 본인은 `"me"`, 타인은 `"member"`
|
|
274
|
+
- URL: `dooray://{orgId}/members/{memberId}`
|
|
275
|
+
|
|
276
|
+
### 그룹 멘션 (member-group)
|
|
277
|
+
```markdown
|
|
278
|
+
[@projectCode/그룹명](dooray://{orgId}/member-groups/{groupId})
|
|
279
|
+
```
|
|
280
|
+
- **`projects/{projectId}/` 경로 포함하지 않음** (직관과 반대 — 흔한 실수)
|
|
281
|
+
- title 속성 **없음**
|
|
282
|
+
- URL: `dooray://{orgId}/member-groups/{groupId}`
|
|
283
|
+
|
|
284
|
+
### 업무(task) 링크
|
|
285
|
+
```markdown
|
|
286
|
+
[projectCode/{number} {subject}](dooray://{orgId}/tasks/{postId} "registered")
|
|
287
|
+
```
|
|
288
|
+
- 표시 텍스트: `{project}/{number} {subject}`
|
|
289
|
+
- URL: `dooray://{orgId}/tasks/{postId}`
|
|
290
|
+
- title: workflow class — `registered` / `working` / `closed` / `backlog`
|
|
291
|
+
- 클릭 시 외부 브라우저 안 열고 Dooray 앱 내부 navigation + workflow 상태 표시
|
|
292
|
+
|
|
293
|
+
### 필요 ID 조회 명령
|
|
294
|
+
|
|
295
|
+
| ID | 조회 |
|
|
296
|
+
|---|---|
|
|
297
|
+
| `orgId` | Dooray 앱/웹 URL에서 추출 (`https://{org}.dooray.com/...`의 도메인 + 별도 확인 필요) |
|
|
298
|
+
| `memberId` | `dooray member get <id>` 또는 `dooray project members <project>` |
|
|
299
|
+
| `groupId` | `dooray project groups <project>` |
|
|
300
|
+
| `postId` | `dooray post get <project> <number> --json` 의 `id` 필드 |
|
|
301
|
+
|
|
201
302
|
---
|
|
202
303
|
|
|
203
304
|
## 에러 핸들링
|