@bifos/dooray-cli 0.15.0 → 0.16.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 +131 -659
- package/dist/index.js +243 -89
- package/package.json +1 -1
- package/skills/dooray-cli/SKILL.md +204 -47
- package/skills/dooray-cli/references/comment.md +21 -17
- package/skills/dooray-cli/references/common.md +22 -20
- package/skills/dooray-cli/references/mention-link.md +49 -73
- package/skills/dooray-cli/references/post.md +76 -149
- package/skills/dooray-cli/references/wiki.md +32 -64
- package/skills/dooray-cli/references/workflow.md +24 -63
- package/skills/dooray-cli/references/intent-map.md +0 -92
|
@@ -1,218 +1,145 @@
|
|
|
1
1
|
# post
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
대상 지정 방법(`--id` / `--url` / positional URL)은 [SKILL.md](../SKILL.md) 에 있다. 여기에는 post 고유 동작만 둔다.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## postId 를 업무 번호 자리에 넣지 않는다
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
아래 16개 명령은 4가지 입력을 모두 받는다:
|
|
10
|
-
`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`.
|
|
7
|
+
`post create --json` 의 `.id` 는 19자리 internal postId 다. 업무 번호(`#42`)가 아니다.
|
|
8
|
+
번호 자리에 넣으면 안내 에러가 난다. 후속 명령에는 `--id` 를 쓴다.
|
|
11
9
|
|
|
12
10
|
```bash
|
|
13
|
-
|
|
14
|
-
dooray post get
|
|
11
|
+
POST_ID=$(dooray post create <project> --title "..." --json | jq -r '.id')
|
|
12
|
+
dooray post get --id "$POST_ID" # 올바름
|
|
13
|
+
dooray post comment add --id "$POST_ID" --body "댓글" # 올바름
|
|
14
|
+
dooray post get <project> "$POST_ID" # 에러
|
|
15
|
+
```
|
|
15
16
|
|
|
16
|
-
|
|
17
|
-
# 지원 형식 3종 모두 동일하게 작동
|
|
18
|
-
dooray post get https://x.dooray.com/task/to/<postId>
|
|
19
|
-
dooray post get https://x.dooray.com/task/<projectId>/<postId>
|
|
20
|
-
dooray post get https://x.dooray.com/project/tasks/<postId>
|
|
17
|
+
`--id` 와 `--url` 을 함께 주면 에러다. positional 인자와 `--id`/`--url` 을 섞어도 에러다.
|
|
21
18
|
|
|
22
|
-
|
|
23
|
-
dooray post get --id <postId>
|
|
19
|
+
## URL 이나 `--id` 모드에서는 sub-id 를 옵션으로 준다
|
|
24
20
|
|
|
25
|
-
|
|
26
|
-
dooray post get --url https://x.dooray.com/task/to/<postId>
|
|
27
|
-
```
|
|
21
|
+
positional 모드에서 세 번째 인자였던 값이 옵션으로 바뀐다.
|
|
28
22
|
|
|
29
|
-
> ⚠️ **`post create` 결과 `.id` 는 internal postId (19자리 숫자)입니다.**
|
|
30
|
-
> 이 숫자를 `<project> <업무번호>` 의 번호 자리에 넣으면 안내 에러가 발생합니다.
|
|
31
|
-
> 후속 조회·수정·댓글은 반드시 **`--id <postId>`** 를 사용하세요.
|
|
32
|
-
>
|
|
33
|
-
> ```bash
|
|
34
|
-
> POST_ID=$(dooray post create <project> --title "..." --json | jq -r '.id')
|
|
35
|
-
> dooray post get --id "$POST_ID" # ✅ --id 사용
|
|
36
|
-
> dooray post comment add --id "$POST_ID" --body "댓글" # ✅ --id 사용
|
|
37
|
-
> # dooray post get <project> "$POST_ID" # ❌ 안내 에러 발생
|
|
38
|
-
> ```
|
|
39
|
-
|
|
40
|
-
**우선순위 / 충돌 규칙**: `--id`+`--url` 동시 지정 → 에러.
|
|
41
|
-
`--id`/`--url`+positional 동시 지정 → 에러.
|
|
42
|
-
URL/`--id`/`--url` 모드는 standalone API(`getPost(postId)`)로 resolve 단계를 단축.
|
|
43
|
-
|
|
44
|
-
**sub-id 옵션화** (URL/`--id`/`--url` 모드에서 필수):
|
|
45
23
|
```bash
|
|
46
|
-
# comment edit/delete: --comment-id
|
|
47
24
|
dooray post comment edit --url <url> --comment-id <commentId> --body "..."
|
|
48
25
|
dooray post comment delete --url <url> --comment-id <commentId>
|
|
49
|
-
|
|
50
|
-
# file download/delete: --file-id
|
|
51
26
|
dooray post file download --url <url> --file-id <fileId> -o ./downloads
|
|
52
27
|
dooray post file delete --url <url> --file-id <fileId>
|
|
53
|
-
|
|
54
|
-
# file upload: --file (로컬 경로)
|
|
55
28
|
dooray post file upload --url <url> --file ./report.pdf
|
|
56
29
|
```
|
|
57
30
|
|
|
58
|
-
기존 positional
|
|
31
|
+
기존 positional 형태(`comment edit <project> <number> <comment-id>`)는 그대로 쓸 수 있다.
|
|
32
|
+
|
|
33
|
+
## 삭제 안전 확인
|
|
59
34
|
|
|
60
|
-
|
|
35
|
+
다음 업무 삭제 명령은 같은 안전 확인 정책을 따른다.
|
|
36
|
+
|
|
37
|
+
- `dooray post comment delete`
|
|
38
|
+
- `dooray post file delete`
|
|
39
|
+
- `dooray post comment file delete`
|
|
40
|
+
|
|
41
|
+
TTY 확인, non-TTY 실행, `-y`와 `--yes` 사용법은 [SKILL.md](../SKILL.md#삭제-명령의-확인-동작)를 따른다.
|
|
42
|
+
|
|
43
|
+
## 업무 생성
|
|
61
44
|
|
|
62
45
|
```bash
|
|
63
46
|
dooray post create <project> \
|
|
64
47
|
--title "제목" \
|
|
65
48
|
--body "본문 마크다운" \
|
|
66
|
-
--to "
|
|
67
|
-
--cc "
|
|
68
|
-
--
|
|
49
|
+
--to "김철수" --to "이영희" \
|
|
50
|
+
--cc "참조자" \
|
|
51
|
+
--cc-group dev-team \
|
|
52
|
+
--priority normal \
|
|
69
53
|
--due-date "2026-04-30T18:00:00+09:00" \
|
|
70
|
-
--tag "버그" --tag "긴급" \
|
|
71
|
-
--parent "<project>/337" \
|
|
72
|
-
--workflow "진행 중" \
|
|
54
|
+
--tag "버그" --tag "긴급" \
|
|
55
|
+
--parent "<project>/337" \
|
|
56
|
+
--workflow "진행 중" \
|
|
73
57
|
--milestone "Sprint 12"
|
|
74
58
|
```
|
|
75
59
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
> 자동화 스크립트에서 워크플로우 적용 여부를 보장해야 하면 stderr를 별도 점검할 것.
|
|
84
|
-
|
|
85
|
-
### 업무 수정 (non-interactive)
|
|
86
|
-
|
|
87
|
-
```bash
|
|
88
|
-
# 제목만 변경
|
|
89
|
-
dooray post edit <project> <number> --title "새 제목"
|
|
60
|
+
| 옵션 | 받는 값 |
|
|
61
|
+
| --- | --- |
|
|
62
|
+
| `--priority` | `highest` / `high` / `normal` / `low` / `lowest` |
|
|
63
|
+
| `--due-date` | ISO 8601 |
|
|
64
|
+
| `--parent` | `<project>/<number>` 또는 raw postId |
|
|
65
|
+
| `--workflow` | 이름 또는 class (`registered` / `working` / `closed`). 부분일치가 모호하면 후보와 함께 에러 |
|
|
66
|
+
| `--tag` | 반복 지정. mandatory 태그 그룹은 클라이언트가 미리 검증한다 |
|
|
90
67
|
|
|
91
|
-
|
|
92
|
-
dooray post edit <project> <number> --body "새 본문"
|
|
68
|
+
`--body` 와 `--body-file` 은 함께 쓸 수 없다.
|
|
93
69
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
```
|
|
70
|
+
**`--workflow` 는 생성 후 별도 호출이다.** 설정에 실패해도 업무는 이미 만들어졌으므로
|
|
71
|
+
stderr 에 경고만 나가고 **종료 코드는 0** 이다. 워크플로우 적용을 보장해야 하면 stderr 를 따로 확인한다.
|
|
97
72
|
|
|
98
|
-
|
|
73
|
+
## 참조자와 담당자 변경
|
|
99
74
|
|
|
100
75
|
```bash
|
|
101
|
-
# 기존
|
|
102
|
-
dooray post edit <project> <number> --cc-
|
|
103
|
-
|
|
104
|
-
# 기존 참조자 전부 비우고 신규 멤버만
|
|
105
|
-
dooray post edit <project> <number> --cc-clear --cc 홍길동
|
|
106
|
-
|
|
107
|
-
# 담당자(to)도 동일 패턴: --to / --to-group / --to-clear
|
|
76
|
+
dooray post edit <project> <number> --cc-group dev-team # 기존 유지 + 추가 (중복 제거)
|
|
77
|
+
dooray post edit <project> <number> --cc-clear --cc 홍길동 # 기존 비우고 신규만
|
|
108
78
|
dooray post edit <project> <number> --to 김철수 --to-group qa-team
|
|
109
79
|
```
|
|
110
80
|
|
|
111
|
-
dry-run 으로
|
|
81
|
+
`--dry-run --json` 으로 API 호출 없이 결과를 먼저 볼 수 있다.
|
|
112
82
|
|
|
113
83
|
```bash
|
|
114
|
-
dooray post edit --id "$POST_ID" --cc-group qa-team --dry-run --json
|
|
115
|
-
| jq '.users.cc'
|
|
84
|
+
dooray post edit --id "$POST_ID" --cc-group qa-team --dry-run --json | jq '.users.cc'
|
|
116
85
|
```
|
|
117
86
|
|
|
118
|
-
|
|
87
|
+
참조자·담당자 옵션만 지정하면 `$EDITOR`를 열지 않고 기존 제목·본문·태그를 보존한 채 참여자만 바꾼다.
|
|
119
88
|
|
|
89
|
+
## 본문 수정은 전체 교체다 — 첨부가 사라질 수 있다
|
|
120
90
|
|
|
121
|
-
|
|
91
|
+
`post edit` 와 `post comment edit` 는 본문을 통째로 바꾼다.
|
|
92
|
+
새 본문에 기존 첨부의 이미지 마크다운(``)이나 일반 링크(`[](/files/<id>)`)가 없으면 확인을 요청하고,
|
|
93
|
+
TTY 가 아니면 중단된다.
|
|
122
94
|
|
|
123
|
-
|
|
95
|
+
첨부를 지키려면 기존 본문에서 reference 를 먼저 뽑아 새 본문에 포함한다.
|
|
124
96
|
|
|
125
|
-
|
|
97
|
+
```bash
|
|
98
|
+
# post edit 전
|
|
99
|
+
dooray post get <project> <number> --json | jq -r '.body.content' | grep -oE '!?\[[^]]*\]\(/files/[^)]+\)'
|
|
126
100
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
추출한 markdown reference 를 새 본문에 그대로 포함하여 전달
|
|
131
|
-
2. **명시적 제거**: attachment 가 더 이상 필요 없다고 판단하면 `--no-confirm` 으로 진행. 누락이 의도한 결과임을 명시
|
|
101
|
+
# post comment edit 전
|
|
102
|
+
dooray post comment get <project> <number> <comment-id> --json | jq -r '.body.content'
|
|
103
|
+
```
|
|
132
104
|
|
|
133
|
-
|
|
105
|
+
첨부를 정말 떼려는 것이면 `--no-confirm` 으로 진행한다.
|
|
134
106
|
|
|
135
|
-
|
|
107
|
+
`comment file list`는 댓글 조회 API가 노출한 첨부만 보여주므로 웹 UI에서 직접 첨부한 파일을 놓칠 수 있다.
|
|
108
|
+
목록이 비어 있으면 `post file list`로 업무 전체 첨부를 확인한다.
|
|
136
109
|
|
|
137
|
-
이름이
|
|
110
|
+
## 이름이 겹칠 때
|
|
111
|
+
|
|
112
|
+
`--cc 홍길동` 이 모호하다는 에러가 나면 이메일이나 memberId 로 지정한다.
|
|
138
113
|
|
|
139
114
|
```bash
|
|
140
|
-
# 1) 이메일로 우회
|
|
141
115
|
dooray post edit --id "$POST_ID" --cc user.specific@example.com
|
|
142
116
|
|
|
143
|
-
# 2) 사전에 member search 로 ID 확보 후 직접
|
|
144
117
|
MEMBER_ID=$(dooray member search 홍길동 --json | jq -r '.[] | select(.externalEmailAddress=="user.specific@example.com") | .id')
|
|
145
118
|
dooray post edit --id "$POST_ID" --cc "$MEMBER_ID"
|
|
146
119
|
```
|
|
147
120
|
|
|
148
|
-
`--to
|
|
149
|
-
- `^\d{15,}$` — memberId 직접 사용
|
|
150
|
-
- 이메일 정규형 — searchMembers exact
|
|
151
|
-
- 그 외 — 이름 부분일치
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
---
|
|
155
|
-
|
|
156
|
-
## 신규 업무 생성 후 그룹 cc 첨부
|
|
157
|
-
|
|
158
|
-
자동화 패턴:
|
|
159
|
-
1. audit 리포트 분석
|
|
160
|
-
2. 신규 업무 생성
|
|
161
|
-
3. 후속으로 특정 그룹을 참조에 추가
|
|
162
|
-
|
|
163
|
-
```bash
|
|
164
|
-
# 1. 신규 업무 생성 (그룹 cc 포함)
|
|
165
|
-
POST_ID=$(dooray post create <project> \
|
|
166
|
-
--title "주간 audit 리포트" \
|
|
167
|
-
--body-file ./report.md \
|
|
168
|
-
--cc-group dev-team \
|
|
169
|
-
--json | jq -r '.id')
|
|
170
|
-
|
|
171
|
-
# 2. (필요 시) 후속으로 cc 추가
|
|
172
|
-
dooray post edit --id "$POST_ID" --cc-group qa-team
|
|
173
|
-
```
|
|
121
|
+
`--cc`, `--to`, `--mention` 이 같은 규칙으로 값을 해석한다.
|
|
174
122
|
|
|
175
|
-
|
|
123
|
+
- 15자리 이상 숫자 → memberId 로 그대로 사용
|
|
124
|
+
- 이메일 형태 → exact 매칭
|
|
125
|
+
- 그 외 → 이름 부분일치
|
|
176
126
|
|
|
177
|
-
##
|
|
127
|
+
## 부모 업무 지정
|
|
178
128
|
|
|
179
129
|
```bash
|
|
180
|
-
# 1. 자식 업무 생성 (parent 모르고)
|
|
181
130
|
CHILD_ID=$(dooray post create <project> --title "subtask A" --json | jq -r '.id')
|
|
182
|
-
|
|
183
|
-
# 2. 부모 결정 후 후속 지정
|
|
184
131
|
dooray post edit --id "$CHILD_ID" --title "subtask A" --parent <project>/<parent-number>
|
|
185
132
|
```
|
|
186
133
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
---
|
|
190
|
-
|
|
191
|
-
## 태그 사후 분류 자동화
|
|
192
|
-
|
|
193
|
-
분류 분석 결과를 받아 태그를 재분류하는 자동화는 단독 호출 패턴이 효율적:
|
|
194
|
-
|
|
195
|
-
```bash
|
|
196
|
-
# 분석 스크립트가 분류한 태그 이름을 cli 로 적용 — body fetch 불요
|
|
197
|
-
POST_ID=$(...)
|
|
198
|
-
CATEGORY=$(...)
|
|
199
|
-
dooray post edit --id "$POST_ID" --tag "분류: $CATEGORY"
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
태그만 변경하는 시나리오에서 `--title` / `--body` 강제 없음.
|
|
203
|
-
mandatory 그룹은 친절한 에러 메시지로 안내.
|
|
134
|
+
`--parent` 를 쓸 때 `--title` 이 필수다. 제목을 바꾸지 않으려면 원래 제목을 그대로 넣는다.
|
|
135
|
+
parent 해제는 API 가 지원하지 않아 CLI 로 할 수 없다 — 웹 UI 에서 처리한다.
|
|
204
136
|
|
|
205
|
-
|
|
137
|
+
## 태그만 바꾸기
|
|
206
138
|
|
|
207
|
-
|
|
139
|
+
`--title` 이나 `--body` 없이 태그 옵션만으로 호출할 수 있다. 기존 본문은 자동으로 다시 전송된다.
|
|
208
140
|
|
|
209
141
|
```bash
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
echo "$RESULT" | jq -r '.succeeded[].path'
|
|
214
|
-
# exit code 1 이 설정되어 있으면 실패 있는 상태
|
|
142
|
+
dooray post edit --id "$POST_ID" --tag "분류: 성능"
|
|
143
|
+
dooray post edit --id "$POST_ID" --tag-clear --tag "재분류"
|
|
144
|
+
dooray post edit --id "$POST_ID" --tag-remove "긴급"
|
|
215
145
|
```
|
|
216
|
-
|
|
217
|
-
---
|
|
218
|
-
|
|
@@ -1,95 +1,63 @@
|
|
|
1
1
|
# wiki
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
## 페이지 계층 훑기
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
`wiki tree --json` 은 flat 배열이고 `wiki pages --json` 과 같은 스키마다.
|
|
6
|
+
`parentPageId` 로 계층을 조립하므로 두 명령의 파싱 코드를 공유할 수 있다.
|
|
7
|
+
`wiki pages` 는 root 만 주고, 전체 계층이 필요하면 `wiki tree` 를 쓴다.
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
# 1. 위키 페이지 목록
|
|
11
|
-
dooray wiki pages <project> --json
|
|
12
|
-
# → [{ "id": "<pageId>", "subject": "설계 문서", ... }]
|
|
13
|
-
|
|
14
|
-
# 2. 페이지 내용 조회
|
|
15
|
-
dooray wiki page get <project> <pageId> --json
|
|
16
|
-
|
|
17
|
-
# 3. 전체 계층을 트리로 훑기 (--json 은 flat 배열 — wiki pages 와 동일 스키마로 파싱)
|
|
18
10
|
dooray wiki tree <project> --json
|
|
11
|
+
dooray wiki tree <project> --depth 2 # 깊이 상한
|
|
19
12
|
```
|
|
20
13
|
|
|
14
|
+
## 인라인 이미지는 본문에 자동 삽입되지 않는다
|
|
21
15
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
**스킬 파일 팀 공유**: 팀 위키에 스킬 파일 (예: `SKILL.md`) 을 `wiki page file upload` 로 첨부 → 팀원이 `wiki page file download-all` 로 일괄 받아 `~/.claude/skills/` 에 그대로 설치.
|
|
16
|
+
`--type inline_image` 로 올려도 본문은 바뀌지 않는다.
|
|
17
|
+
`--json` 의 `markdownSnippet` 을 받아 본문에 직접 넣어야 화면에 보인다.
|
|
25
18
|
|
|
26
19
|
```bash
|
|
27
|
-
# 업로드 (일반 첨부)
|
|
28
|
-
dooray wiki page file upload <project> <page-id> --file ~/.claude/skills/my-skill/SKILL.md
|
|
29
|
-
|
|
30
|
-
# 팀원 쪽에서 일괄 다운로드
|
|
31
|
-
dooray wiki page file download-all <project> <page-id> -o ~/.claude/skills/my-skill/
|
|
32
|
-
|
|
33
|
-
# 첨부 목록 확인 (type 컬럼: general / inline_image)
|
|
34
|
-
dooray wiki page file list <project> <page-id>
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
### 위키 페이지 인라인 이미지 업로드 후 본문 자동 삽입
|
|
39
|
-
|
|
40
|
-
`--type inline_image` 로 업로드 시 `--json` 응답에 `markdownSnippet` 필드가 포함됩니다.
|
|
41
|
-
jq 로 추출해 본문에 바로 삽입하는 자동화가 가능합니다.
|
|
42
|
-
|
|
43
|
-
```bash
|
|
44
|
-
# 1. 인라인 이미지 업로드 — --json 으로 markdownSnippet 추출
|
|
45
20
|
SNIPPET=$(dooray wiki page file upload <project> <page-id> \
|
|
46
|
-
--file ./diagram.png --type inline_image --json
|
|
47
|
-
|
|
48
|
-
# SNIPPET = ""
|
|
21
|
+
--file ./diagram.png --type inline_image --json | jq -r '.markdownSnippet')
|
|
22
|
+
# → ""
|
|
49
23
|
|
|
50
|
-
# 2. 기존 본문 조회
|
|
51
24
|
CURRENT_BODY=$(dooray wiki page get <project> <page-id> --json | jq -r '.body.content')
|
|
52
|
-
|
|
53
|
-
# 3. snippet 을 본문 끝에 추가해 업데이트
|
|
54
|
-
NEW_BODY="${CURRENT_BODY}
|
|
25
|
+
dooray wiki page edit <project> <page-id> --body "${CURRENT_BODY}
|
|
55
26
|
|
|
56
27
|
${SNIPPET}"
|
|
57
|
-
dooray wiki page edit <project> <page-id> --body "$NEW_BODY"
|
|
58
28
|
```
|
|
59
29
|
|
|
60
|
-
|
|
30
|
+
기존 본문을 먼저 받아 뒤에 이어 붙인다 — `--body` 는 전체 교체이므로 snippet 만 넣으면 본문이 사라진다.
|
|
61
31
|
|
|
32
|
+
## 첨부 일괄 내려받기
|
|
62
33
|
|
|
63
|
-
|
|
34
|
+
```bash
|
|
35
|
+
dooray wiki page file download-all <project> <page-id> -o <dir>
|
|
36
|
+
dooray wiki page file list <project> <page-id> # type 컬럼으로 general 과 inline_image 구분
|
|
37
|
+
```
|
|
64
38
|
|
|
65
|
-
|
|
39
|
+
`list` 는 general 첨부와 inline 이미지를 합쳐 보여준다.
|
|
66
40
|
|
|
67
|
-
|
|
68
|
-
# 결정사항 댓글 추가
|
|
69
|
-
dooray wiki page comment add <project> <page-id> --body "결정: 배포일 2026-06-01 확정"
|
|
41
|
+
## 삭제 안전 확인
|
|
70
42
|
|
|
71
|
-
|
|
72
|
-
dooray wiki page comment list <project> <page-id> --latest 20
|
|
43
|
+
다음 위키 삭제 명령은 같은 안전 확인 정책을 따른다.
|
|
73
44
|
|
|
74
|
-
|
|
75
|
-
dooray wiki page
|
|
76
|
-
|
|
45
|
+
- `dooray wiki page delete`
|
|
46
|
+
- `dooray wiki page file delete`
|
|
47
|
+
- `dooray wiki page comment delete`
|
|
77
48
|
|
|
78
|
-
|
|
49
|
+
TTY 확인, non-TTY 실행, `-y`와 `--yes` 사용법은 [SKILL.md](../SKILL.md#삭제-명령의-확인-동작)를 따른다.
|
|
79
50
|
|
|
80
|
-
|
|
51
|
+
## 페이지 삭제
|
|
81
52
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
dooray wiki page delete <project> <page-id>
|
|
53
|
+
`wiki page delete` 는 Dooray 가 공식 문서화하지 않은 endpoint 를 쓴다.
|
|
54
|
+
동작은 확인했지만 서버 정책이 바뀌면 깨질 수 있으니, 대량 삭제 전에 한 건으로 먼저 확인한다.
|
|
85
55
|
|
|
86
|
-
|
|
87
|
-
dooray wiki page delete https://<tenant>.dooray.com/wiki/...
|
|
56
|
+
빈 제목·본문으로 덮는 soft delete 우회는 쓰지 않는다 — 페이지가 트리에 남아 혼란을 준다.
|
|
88
57
|
|
|
89
|
-
|
|
90
|
-
dooray wiki page delete --id <pageId> --project <project>
|
|
58
|
+
하위 페이지가 있는 페이지를 지우면 하위는 삭제한 페이지의 부모 아래로 재부착된다. orphan 은 생기지 않는다.
|
|
91
59
|
|
|
92
|
-
|
|
93
|
-
dooray wiki page delete <project> <page-id> -y
|
|
94
|
-
```
|
|
60
|
+
## 위키 페이지 이동은 불가능하다
|
|
95
61
|
|
|
62
|
+
`parentPageId` 를 바꾸는 이동은 API 로 할 수 없다. 수정 요청이 `parentPageId` 를 무시하고 전용 endpoint 도 없다.
|
|
63
|
+
사용자가 이동을 요청하면 웹 UI 를 안내한다.
|
|
@@ -1,99 +1,61 @@
|
|
|
1
1
|
# workflow
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
## 모르는 값을 먼저 찾는 순서
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
| 모르는 것 | 먼저 실행 |
|
|
6
|
+
| --- | --- |
|
|
7
|
+
| 개인 프로젝트 ("내 프로젝트" 언급) | `dooray project list --type private --json` |
|
|
8
|
+
| 프로젝트 코드 | `dooray project list --search <keyword>` |
|
|
9
|
+
| 업무 번호 | `dooray post search <project> "<keyword>"` |
|
|
10
|
+
| 워크플로우 이름 | `dooray project workflows <project>` |
|
|
11
|
+
| 프로젝트 안의 멤버 이름 | `dooray member list <project>` 또는 `dooray project members <project>` |
|
|
12
|
+
| organization 전체 멤버 | `dooray member search <keyword>` — 옵션은 [common.md](common.md) |
|
|
6
13
|
|
|
7
|
-
|
|
8
|
-
2. **프로젝트 코드를 모르면** → `dooray project list --search <keyword>` 로 먼저 찾기
|
|
9
|
-
3. **업무 번호를 모르면** → `dooray post search <project> "<keyword>"` 로 검색
|
|
10
|
-
4. **워크플로우 이름을 모르면** → `dooray project workflows <project>` 로 확인
|
|
11
|
-
5. **멤버 이름을 모르면** → `dooray member list <project>` (또는 `dooray project members <project>`) 로 확인
|
|
12
|
-
6. **org 전체 멤버를 찾으려면** → `dooray member search <keyword>` (이름), `--email <addr>`, `--user-code <code>` 중 하나 사용
|
|
13
|
-
7. **결과를 다음 액션에 사용하려면** → `--json` 플래그로 구조화된 데이터 획득
|
|
14
|
+
## 체이닝
|
|
14
15
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
## 체이닝 예시
|
|
19
|
-
|
|
20
|
-
### 업무 찾아서 완료 처리
|
|
21
|
-
|
|
22
|
-
```bash
|
|
23
|
-
# 1. 업무 검색으로 번호 확인
|
|
24
|
-
dooray post search <project> "graceful shutdown" --json
|
|
25
|
-
# → [{ "number": 42, "subject": "graceful shutdown 구현", ... }]
|
|
26
|
-
|
|
27
|
-
# 2. 완료 처리
|
|
28
|
-
dooray post done <project> 42
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
### 프로젝트 찾아서 업무 생성
|
|
16
|
+
### 프로젝트를 찾아 업무 생성
|
|
33
17
|
|
|
34
18
|
```bash
|
|
35
|
-
# 1. 프로젝트 코드 확인
|
|
36
19
|
dooray project list --search "AI서비스" --json
|
|
37
|
-
# → [{ "code": "
|
|
20
|
+
# → [{ "code": "<project>", ... }]
|
|
38
21
|
|
|
39
|
-
|
|
40
|
-
dooray post create ai-service-dev \
|
|
22
|
+
dooray post create <project> \
|
|
41
23
|
--title "주간보고 2026-W14" \
|
|
42
24
|
--body "## 이번 주 성과\n- 항목1\n- 항목2" \
|
|
43
25
|
--to "김철수"
|
|
44
26
|
```
|
|
45
27
|
|
|
28
|
+
### 댓글에 스크린샷 첨부
|
|
46
29
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
```bash
|
|
50
|
-
# 1. 업무 조회
|
|
51
|
-
dooray post get <project> 42 --json
|
|
52
|
-
|
|
53
|
-
# 2. 댓글 추가
|
|
54
|
-
dooray post comment add <project> 42 --body "진행 상황 업데이트: 80% 완료"
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
### 시나리오 — 댓글에 스크린샷 자동 첨부
|
|
59
|
-
|
|
60
|
-
스크립트가 스크린샷을 댓글에 삽입하거나, 에이전트가 결과 파일을 첨부 댓글로 보고할 때 사용.
|
|
61
|
-
Dooray REST API 가 댓글 전용 attachment endpoint 를 미지원하므로 내부적으로 post-level files API + 댓글 본문 PUT 합성으로 동작한다.
|
|
30
|
+
댓글 첨부는 두 단계로 나뉜다 — 댓글을 먼저 만들고 그 ID 로 파일을 올린다.
|
|
62
31
|
|
|
63
32
|
```bash
|
|
64
|
-
# 1. 댓글을 먼저 만든다 (텍스트만, --json 으로 commentId 획득)
|
|
65
33
|
COMMENT_ID=$(dooray post comment add <project> <post-num> --body "스크린샷 보고:" --json | jq -r '.id')
|
|
66
|
-
|
|
67
|
-
# 2. 그 댓글에 파일을 첨부 (post-level 업로드 + 댓글 본문 markdown 자동 추가)
|
|
68
34
|
dooray post comment file upload <project> <post-num> "$COMMENT_ID" ./screenshot.png
|
|
69
35
|
```
|
|
70
36
|
|
|
37
|
+
업로드하면 이미지 확장자는 이미지 마크다운으로, 그 외 파일은 일반 링크로 댓글 본문에 붙는다.
|
|
71
38
|
|
|
72
|
-
###
|
|
39
|
+
### 배포 알림 메신저 전송
|
|
73
40
|
|
|
74
|
-
|
|
75
|
-
전송은 API 토큰 소유자 명의로 나가며, 본문은 plain text 만 지원한다.
|
|
41
|
+
전송은 API 토큰 소유자 명의로 나가고 본문은 plain text 만 된다.
|
|
76
42
|
|
|
77
43
|
```bash
|
|
78
|
-
#
|
|
44
|
+
# DM — --to 는 ID 나 이메일만 받는다 (이름 불가)
|
|
79
45
|
dooray messenger send --to "user@example.com" --body "배포가 완료되었습니다 (v1.2.3)."
|
|
80
46
|
|
|
81
|
-
#
|
|
47
|
+
# 대화방 — channelId 또는 자신이 속한 방 이름
|
|
82
48
|
dooray messenger channel-send --channel "배포 알림방" --body-file ./release-note.md
|
|
83
49
|
|
|
84
|
-
#
|
|
50
|
+
# 후속 처리에 쓸 log id 가 필요하면
|
|
85
51
|
dooray messenger send --to <memberId> --body "..." --json
|
|
86
52
|
```
|
|
87
53
|
|
|
88
|
-
|
|
89
|
-
---
|
|
90
|
-
|
|
91
54
|
## 정형 task 자동화
|
|
92
55
|
|
|
93
|
-
매주 같은 형식의
|
|
56
|
+
매주 같은 형식의 업무를 만들 때는 템플릿에 제목만 덮어쓴다.
|
|
94
57
|
|
|
95
58
|
```bash
|
|
96
|
-
# 매주 월요일 실행되는 cron — "주간 릴리스 체크" 템플릿으로 자동 생성
|
|
97
59
|
TODAY=$(date +%Y-%m-%d)
|
|
98
60
|
POST_ID=$(dooray post create <project> \
|
|
99
61
|
--template "주간 릴리스 체크" \
|
|
@@ -101,6 +63,5 @@ POST_ID=$(dooray post create <project> \
|
|
|
101
63
|
--json | jq -r '.id')
|
|
102
64
|
```
|
|
103
65
|
|
|
104
|
-
템플릿 본문의 `${year}
|
|
105
|
-
사용자 정의 변수는
|
|
106
|
-
|
|
66
|
+
템플릿 본문의 `${year}`, `${month}` 같은 매크로는 Dooray 가 치환한다.
|
|
67
|
+
사용자 정의 변수는 지원하지 않으므로 필요하면 받은 본문을 직접 치환한다.
|