@bifos/dooray-cli 0.18.0 → 0.19.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 +41 -3
- package/dist/index.js +1027 -381
- package/package.json +4 -1
- package/skills/dooray-cli/SKILL.md +13 -5
- package/skills/dooray-cli/references/common.md +10 -1
- package/skills/dooray-cli/references/post.md +4 -2
- package/skills/dooray-cli/references/wiki.md +78 -7
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bifos/dooray-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.19.0",
|
|
4
4
|
"description": "CLI tool for Dooray project management — AI agent & terminal friendly",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"dooray",
|
|
@@ -32,8 +32,11 @@
|
|
|
32
32
|
"scripts": {
|
|
33
33
|
"build": "tsup",
|
|
34
34
|
"dev": "tsup --watch",
|
|
35
|
+
"api:inventory": "node scripts/api-endpoint-inventory.mjs",
|
|
35
36
|
"test": "vitest run",
|
|
36
37
|
"test:watch": "vitest",
|
|
38
|
+
"check:pii": "node scripts/check-pii.mjs",
|
|
39
|
+
"check:refs": "node scripts/check-public-refs.mjs",
|
|
37
40
|
"verify:package": "node scripts/verify-package.mjs"
|
|
38
41
|
},
|
|
39
42
|
"license": "MIT",
|
|
@@ -21,10 +21,10 @@ NHN Dooray REST API 를 래핑한 CLI 다. 이 파일은 라우터이므로, 작
|
|
|
21
21
|
## 대상 지정 방법
|
|
22
22
|
|
|
23
23
|
`post get`/`edit`/`done`/`workflow`, `post comment` 전체, `post file` 전체, `post comment file` 전체,
|
|
24
|
-
`wiki page file` 과 `wiki page comment` 전체, 그리고 `wiki page delete` 가 네 가지 형태를 모두 받는다.
|
|
24
|
+
`wiki page get`, `wiki page file` 과 `wiki page comment` 전체, 그리고 `wiki page delete` 가 네 가지 형태를 모두 받는다.
|
|
25
25
|
|
|
26
26
|
- `<project> <number>` — 업무는 번호, 위키는 `<project> <page-id>`
|
|
27
|
-
- `--id <postId>` / `--id <pageId>` — 위키는 `--project`
|
|
27
|
+
- `--id <postId>` / `--id <pageId>` — 위키는 `--project` 없이도 조회된다. 함께 주면 wikiId 를 해석하는 호출을 한 번 아낀다
|
|
28
28
|
- `--url <url>`
|
|
29
29
|
- 첫 인자에 Dooray URL 을 직접
|
|
30
30
|
|
|
@@ -96,7 +96,9 @@ NHN Dooray REST API 를 래핑한 CLI 다. 이 파일은 라우터이므로, 작
|
|
|
96
96
|
| 개인 프로젝트 목록 | `dooray project list --type private` |
|
|
97
97
|
| 프로젝트 멤버 보기 | `dooray project members <project>` 또는 `dooray member list <project>` |
|
|
98
98
|
| 프로젝트 멤버 그룹 목록 | `dooray project groups <project>` |
|
|
99
|
-
| 프로젝트 태그 목록 | `dooray project tags <project>` |
|
|
99
|
+
| 프로젝트 태그 목록 | `dooray project tags <project>` — 프로젝트 코드가 `list`·`create`·`group` 과 같으면 `dooray project tags list <project>` |
|
|
100
|
+
| 태그 만들기 | `dooray project tags create <project> --name "<그룹>:<태그>" [--color <hex>]` — 그룹명 생략 가능 |
|
|
101
|
+
| 태그 그룹 속성 변경 | `dooray project tags group <project> "<그룹>" [--mandatory] [--select-one]` — 해제는 `--no-` 접두 |
|
|
100
102
|
| 프로젝트 템플릿 목록 | `dooray project templates <project>` |
|
|
101
103
|
| 멤버 상세 | `dooray member get <organizationMemberId>` (캐시 우회) |
|
|
102
104
|
| organization 전체 멤버 검색 | `dooray member search <keyword>` — 옵션은 [common.md](references/common.md) |
|
|
@@ -143,6 +145,9 @@ NHN Dooray REST API 를 래핑한 CLI 다. 이 파일은 라우터이므로, 작
|
|
|
143
145
|
| 댓글 수정 | `dooray post comment edit <project> <number> <comment-id> --body "..."` |
|
|
144
146
|
| 댓글 삭제 | `dooray post comment delete <project> <number> <comment-id>` — 확인 있음, `-y`/`--yes`로 생략 |
|
|
145
147
|
|
|
148
|
+
내부 ID 를 positional 자리에 넣으면 입력 오류가 나지만, 그 오류가 `--id` 를 쓴 완성 명령을 그대로 보여준다.
|
|
149
|
+
그 줄을 그대로 복사해 실행하면 되고, 자동화는 오류 출력을 읽어 재시도할 수 있다.
|
|
150
|
+
|
|
146
151
|
## 업무 첨부
|
|
147
152
|
|
|
148
153
|
`--json` 출력 스키마는 [post.md](references/post.md) 를 읽는다.
|
|
@@ -172,14 +177,17 @@ NHN Dooray REST API 를 래핑한 CLI 다. 이 파일은 라우터이므로, 작
|
|
|
172
177
|
|
|
173
178
|
| 의도 | 커맨드 |
|
|
174
179
|
| --- | --- |
|
|
175
|
-
| 위키 목록 | `dooray wiki list` |
|
|
180
|
+
| 위키 목록 | `dooray wiki list` — `ID`, `Name`, `Project`, `Type` 네 열을 낸다. 이름은 `--search` 로 찾는다 |
|
|
181
|
+
| 이름으로 위키 찾기 | `dooray wiki list --search <keyword>` — 이름 부분 일치, 대소문자 무시, 전체 목록에서 찾는다 |
|
|
176
182
|
| 페이지 목록 | `dooray wiki pages <project>` |
|
|
177
183
|
| 페이지 트리 | `dooray wiki tree <project>` (`--depth N` 으로 상한, `--json` 은 flat) |
|
|
178
|
-
| 페이지 상세 | `dooray wiki page get <project> <page-id>` |
|
|
184
|
+
| 페이지 상세 | `dooray wiki page get --id <page-id>` — project 없이 조회된다. `<project> <page-id>` 와 `--url` 도 받는다 |
|
|
185
|
+
| 페이지 ID 로 바로 조회 | `wiki page file`, `wiki page comment`, `wiki page delete` 도 `--id` 만으로 동작한다 |
|
|
179
186
|
| 페이지 생성 | `dooray wiki page create <project> --title "..." [--parent <page-id>] [--body "..."]` — `--parent` 를 생략하면 위키 home 아래에 만든다 |
|
|
180
187
|
| 페이지 제목 수정 | `dooray wiki page edit <project> <page-id> --title "..."` |
|
|
181
188
|
| 페이지 본문 수정 | `dooray wiki page edit <project> <page-id> --body "..."` 또는 `--body-file ./new.md` |
|
|
182
189
|
| 페이지 에디터로 수정 | `dooray wiki page edit <project> <page-id>` — 플래그가 없으면 `$EDITOR` 가 열린다 |
|
|
190
|
+
| 페이지 이동 | `dooray wiki page move <project> <page-id> --parent <parent-page-id>` — `--parent` 는 필수다. 하위 페이지는 기본으로 함께 이동하고, `--no-children` 으로 페이지 하나만 옮긴다. `--to-wiki <project-or-wiki-id>` 로 다른 위키로 옮기며, `--first` 와 `--before <page-id>` 로 형제 사이 정렬을 바꾼다 |
|
|
183
191
|
| 페이지 삭제 | `dooray wiki page delete <project> <page-id>` — 확인 있음, `-y`/`--yes`로 생략. 하위 페이지는 삭제한 페이지의 부모 아래로 재부착되어 orphan 이 생기지 않는다 |
|
|
184
192
|
| 첨부 목록 | `dooray wiki page file list <project> <page-id>` — general 과 inline 을 합쳐 보여준다 |
|
|
185
193
|
| 첨부 업로드 | `dooray wiki page file upload <project> <page-id> --file <path> [--type inline_image]` |
|
|
@@ -89,9 +89,11 @@ CLI로 처리 **불가능한** 작업. 아래 항목을 요청받으면 웹 UI
|
|
|
89
89
|
|
|
90
90
|
| 작업 | 대체 경로 | 근거 |
|
|
91
91
|
|---|---|---|
|
|
92
|
-
| 위키 페이지 이동 (상위 페이지 변경) | 웹 UI (`https://{tenant}.dooray.com/wiki/...`) | Dooray REST API 미지원 |
|
|
93
92
|
| 프로젝트 삭제 | 웹 UI (admin 페이지) | API 미지원 |
|
|
94
93
|
|
|
94
|
+
위키 페이지 이동은 `wiki page move` 로 처리한다.
|
|
95
|
+
자세한 내용은 [위키 페이지 이동 사용법](wiki.md#위키-페이지-이동-사용법)을 참고한다.
|
|
96
|
+
|
|
95
97
|
|
|
96
98
|
---
|
|
97
99
|
|
|
@@ -153,3 +155,10 @@ AI agent 가 `member=me` 응답에 없는 프로젝트의 업무를 다뤄야
|
|
|
153
155
|
```bash
|
|
154
156
|
dooray cache clear # 전체 캐시 삭제 (다음 실행 시 자동 갱신)
|
|
155
157
|
```
|
|
158
|
+
|
|
159
|
+
지울 캐시가 없어도 종료 코드 0 으로 끝난다. 삭제에 실패하면 종료 코드 5 로 끝나므로
|
|
160
|
+
성공 메시지를 확인하지 말고 종료 코드로 판단한다.
|
|
161
|
+
|
|
162
|
+
`api-key` 나 `base-url` 을 바꾸면 캐시가 함께 비워진다.
|
|
163
|
+
캐시는 계정과 접속 환경별로 나뉘지 않아서, 비우지 않으면 이전 계정의 프로젝트와 멤버가 남아 잘못 매칭된다.
|
|
164
|
+
같은 값을 다시 설정하는 경우와 지울 캐시가 없는 경우에는 비우지 않고 안내도 나오지 않는다.
|
|
@@ -86,7 +86,7 @@ dooray post edit --id "$POST_ID" --cc-group qa-team --dry-run --json | jq '.user
|
|
|
86
86
|
|
|
87
87
|
참조자·담당자 옵션만 지정하면 `$EDITOR`를 열지 않고 기존 제목·본문·태그를 보존한 채 참여자만 바꾼다.
|
|
88
88
|
|
|
89
|
-
## 본문
|
|
89
|
+
## 본문 전체 교체와 첨부 손실 주의
|
|
90
90
|
|
|
91
91
|
`post edit` 와 `post comment edit` 는 본문을 통째로 바꾼다.
|
|
92
92
|
새 본문에 기존 첨부의 이미지 마크다운(``)이나 일반 링크(`[](/files/<id>)`)가 없으면 확인을 요청하고,
|
|
@@ -152,7 +152,9 @@ dooray post edit --id "$CHILD_ID" --title "subtask A" --parent <project>/<parent
|
|
|
152
152
|
```
|
|
153
153
|
|
|
154
154
|
`--parent` 를 쓸 때 `--title` 이 필수다. 제목을 바꾸지 않으려면 원래 제목을 그대로 넣는다.
|
|
155
|
-
parent 해제는 API 가 지원하지 않아 CLI 로 할 수
|
|
155
|
+
parent 해제는 API 가 지원하지 않아 CLI 로 할 수 없다. 웹 UI 에서 처리한다.
|
|
156
|
+
계층 구조는 두 단계를 넘지 못한다. 상위업무를 가진 하위업무를 상위 업무로 설정할 수 없고,
|
|
157
|
+
그 조건에서 `--parent` 를 쓰면 실패한다.
|
|
156
158
|
|
|
157
159
|
## 태그만 바꾸기
|
|
158
160
|
|
|
@@ -1,5 +1,46 @@
|
|
|
1
1
|
# wiki
|
|
2
2
|
|
|
3
|
+
## 페이지 ID 만 알 때
|
|
4
|
+
|
|
5
|
+
**project 를 찾을 필요가 없다.** `--id` 하나로 조회한다.
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
dooray wiki page get --id <page-id>
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
같은 방식이 `wiki page` 하위 명령 전체에 통한다.
|
|
12
|
+
`wiki page file`, `wiki page comment`, `wiki page delete` 도 `--id` 만으로 동작한다.
|
|
13
|
+
|
|
14
|
+
`--project` 는 선택이다. 함께 주면 wikiId 를 해석하는 호출을 한 번 아낀다.
|
|
15
|
+
반복 실행하는 자동화라면 함께 주는 편이 빠르다.
|
|
16
|
+
|
|
17
|
+
위키를 이름으로 찾아야 하는 경우는 다음 절에서 다룬다.
|
|
18
|
+
|
|
19
|
+
## 위키를 이름으로 찾는다
|
|
20
|
+
|
|
21
|
+
페이지 ID 를 모르고 위키 자체를 찾아야 할 때, 또는 그 위키의 페이지 목록이나 트리를 보려 할 때 쓴다.
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
dooray wiki list --search <위키 이름 일부> # Project 열의 값이 다음 명령의 project 인자다
|
|
25
|
+
dooray wiki pages <project>
|
|
26
|
+
dooray wiki tree <project>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
- `--search` 는 이름을 대소문자 무시 부분 일치로 찾는다. 이름의 대소문자를 가정하지 않아도 된다.
|
|
30
|
+
- `--search` 는 전체 목록에서 찾으므로 `--page` 와 `--size` 를 무시한다.
|
|
31
|
+
- `--json` 은 서버 응답을 그대로 내므로 project 코드가 없다.
|
|
32
|
+
자동화는 `project.id` 를 그대로 project 자리에 넣을 수 있다.
|
|
33
|
+
|
|
34
|
+
## 위키 본문 링크의 앞 숫자는 project 가 아니다
|
|
35
|
+
|
|
36
|
+
위키 본문의 페이지 링크는 `dooray://<orgId>/pages/<pageId>` 형태다.
|
|
37
|
+
앞 숫자는 orgId 이고 project 도 위키 ID 도 아니다.
|
|
38
|
+
그 값을 project 자리에 넣으면 `프로젝트에 위키가 없습니다` 로 끝난다.
|
|
39
|
+
|
|
40
|
+
pageId 는 뒤 숫자다. 그것만 떼어 `--id` 에 넣으면 된다.
|
|
41
|
+
|
|
42
|
+
브라우저 주소창의 `https://<tenant>.dooray.com/wiki/<wikiId>/<pageId>` 형태는 `--url` 로 그대로 넣을 수 있다.
|
|
43
|
+
|
|
3
44
|
## 페이지 계층 훑기
|
|
4
45
|
|
|
5
46
|
`wiki tree --json` 은 flat 배열이고 `wiki pages --json` 과 같은 스키마다.
|
|
@@ -27,7 +68,7 @@ dooray wiki page edit <project> <page-id> --body "${CURRENT_BODY}
|
|
|
27
68
|
${SNIPPET}"
|
|
28
69
|
```
|
|
29
70
|
|
|
30
|
-
기존 본문을 먼저 받아 뒤에 이어
|
|
71
|
+
기존 본문을 먼저 받아 뒤에 이어 붙인다. `--body` 는 전체 교체이므로 snippet 만 넣으면 본문이 사라진다.
|
|
31
72
|
|
|
32
73
|
## 첨부 일괄 내려받기
|
|
33
74
|
|
|
@@ -50,14 +91,44 @@ TTY 확인, non-TTY 실행, `-y`와 `--yes` 사용법은 [SKILL.md](../SKILL.md#
|
|
|
50
91
|
|
|
51
92
|
## 페이지 삭제
|
|
52
93
|
|
|
53
|
-
`wiki page delete` 는
|
|
54
|
-
|
|
94
|
+
`wiki page delete` 는 `DELETE /wiki/v1/wikis/{wiki-id}/pages/{page-id}` 를 쓴다.
|
|
95
|
+
공식 API 문서에 있는 endpoint 다.
|
|
55
96
|
|
|
56
|
-
빈 제목·본문으로 덮는 soft delete 우회는 쓰지
|
|
97
|
+
빈 제목·본문으로 덮는 soft delete 우회는 쓰지 않는다. 페이지가 트리에 남아 혼란을 준다.
|
|
57
98
|
|
|
58
99
|
하위 페이지가 있는 페이지를 지우면 하위는 삭제한 페이지의 부모 아래로 재부착된다. orphan 은 생기지 않는다.
|
|
59
100
|
|
|
60
|
-
## 위키 페이지
|
|
101
|
+
## 위키 페이지 이동 사용법
|
|
102
|
+
|
|
103
|
+
`wiki page move` 는 `POST /wiki/v1/wikis/{wiki-id}/pages/{page-id}/move` 를 쓴다.
|
|
104
|
+
공식 API 문서에 있는 endpoint 다.
|
|
105
|
+
|
|
106
|
+
페이지를 옮길 때는 새 부모 페이지를 `--parent` 로 반드시 지정한다.
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
dooray wiki page move <project> <page-id> --parent <parent-page-id>
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
`--id <page-id>` 로 페이지를 직접 지정할 수 있다.
|
|
113
|
+
`--project <project>` 를 함께 주면 CLI 가 wikiId 해석 호출을 줄인다.
|
|
114
|
+
`--project` 는 선택이다.
|
|
115
|
+
|
|
116
|
+
하위 페이지는 기본으로 함께 이동한다.
|
|
117
|
+
페이지 하나만 옮기려면 `--no-children` 을 붙인다.
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
dooray wiki page move --id <page-id> --parent <parent-page-id> --no-children
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
형제 사이 정렬은 `--first` 또는 `--before <page-id>` 로 바꾼다.
|
|
124
|
+
다른 위키로 옮길 때는 `--to-wiki <project-or-wiki-id>` 를 붙인다.
|
|
125
|
+
값에는 프로젝트 코드나 위키 ID 를 줄 수 있다.
|
|
126
|
+
대상 위키에 권한이 없으면 명령은 오류로 끝난다.
|
|
127
|
+
|
|
128
|
+
이동 명령에는 삭제 명령처럼 실행 전 확인 절차가 없다.
|
|
129
|
+
|
|
130
|
+
페이지를 지우고 다시 만드는 방식은 쓰지 않는다.
|
|
131
|
+
첨부와 인라인 이미지, 댓글, 페이지 ID 가 사라진다.
|
|
61
132
|
|
|
62
|
-
`
|
|
63
|
-
|
|
133
|
+
`wiki page edit` 은 부모를 바꾸지 못한다.
|
|
134
|
+
수정 요청에 부모 필드를 넣어도 해당 필드는 무시된다.
|