@bifos/dooray-cli 0.11.0 → 0.13.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 CHANGED
@@ -50,7 +50,7 @@ dooray project members <project> # 멤버 목록
50
50
  dooray project workflows <project> # 워크플로우 목록
51
51
  dooray project groups <project> # 멤버 그룹 목록 (ID / Code)
52
52
  dooray project tags <project> # 태그 목록 (ID / Color / Name / Group / Mandatory)
53
- dooray project templates <project> # 템플릿 목록 (ID / Template Name, ADR-027)
53
+ dooray project templates <project> # 템플릿 목록 (ID / Template Name)
54
54
  ```
55
55
 
56
56
  > **태그 캐시 갱신**: 이전 버전에서 캐시한 태그가 색상 없이 표시되면 `dooray cache clear` 실행 후 다시 조회하세요.
@@ -59,7 +59,7 @@ dooray project templates <project> # 템플릿 목록 (ID / Template Na
59
59
 
60
60
  ```bash
61
61
  dooray member list <project> # 프로젝트 멤버 목록 (이름·organizationMemberId)
62
- dooray member get <organizationMemberId> # 멤버 상세 (cache 우회, ADR-021)
62
+ dooray member get <organizationMemberId> # 멤버 상세 (cache 우회)
63
63
 
64
64
  # organization 전체 멤버 검색
65
65
  dooray member search 홍길동 # 이름 검색
@@ -83,15 +83,20 @@ dooray post get <project> 42 --json # JSON 출력
83
83
  | 방식 | 예시 |
84
84
  |---|---|
85
85
  | `<project> <number>` | `dooray post get <project> 42` |
86
- | Dooray URL positional (`/task/to/<postId>`) | `dooray post get https://x.dooray.com/task/to/<postId>` |
87
- | Dooray URL positional (브라우저 주소창 복사본) | `dooray post get https://x.dooray.com/task/<projectId>/<postId>` |
86
+ | Dooray URL positional | `dooray post get https://x.dooray.com/task/to/<postId>` |
88
87
  | `--id <postId>` | `dooray post get --id <postId>` |
89
- | `--url <url>` | `dooray post get --url https://x.dooray.com/task/to/...` |
88
+ | `--url <url>` | `dooray post get --url https://x.dooray.com/task/to/<postId>` |
89
+
90
+ 지원 URL 형식 3종 (positional 첫 인자 / `--url` 공통):
91
+
92
+ - `https://*.dooray.com/task/to/<postId>`
93
+ - `https://*.dooray.com/task/<projectId>/<postId>` — 브라우저 주소창 복사본
94
+ - `https://*.dooray.com/project/tasks/<postId>` — 프로젝트 업무 목록에서 열기
90
95
 
91
96
  대상: `post get`/`edit`/`done`/`workflow`, `post comment list`/`add`/`edit`/`delete`, `post file list`/`upload`/`download`/`download-all`/`delete`.
92
- AI 에이전트는 사용자 메시지의 Dooray URL을 그대로 첫 인자로 전달하면 가장 빠르다 (ADR-020).
97
+ AI 에이전트는 사용자 메시지의 Dooray URL을 그대로 첫 인자로 전달하면 가장 빠르다.
93
98
 
94
- **projectId 직접 입력** (Issue #78, ADR-030):
99
+ **projectId 직접 입력**:
95
100
 
96
101
  `member=me` 응답에 없는 프로젝트 (다른 팀 / 권한만 있는 프로젝트) 도 projectId (15+자리 numeric) 를 직접 입력하면 자동으로 cache 우회.
97
102
 
@@ -131,7 +136,18 @@ dooray post create <project> \
131
136
  > mandatory-tag 정책 프로젝트(예: `<project>`)에서는 mandatory 그룹마다 1개 이상 `--tag`로 지정해야 한다.
132
137
  > 누락 시 클라이언트가 사전 검증으로 후보 목록과 함께 에러 출력.
133
138
 
134
- #### 템플릿 기반 정형 task (ADR-027)
139
+ > **`post create` 출력의 `.id` 는 internal postId (19자리 숫자)입니다.**
140
+ > 이 ID 로 후속 조회·수정·댓글 작업을 할 때는 **`--id <postId>`** 를 사용하세요.
141
+ > `<project> <업무번호>` 의 번호 자리에 postId 를 넣으면 안내 에러가 발생합니다.
142
+ >
143
+ > ```bash
144
+ > # 생성 후 바로 조회하는 패턴
145
+ > POST_ID=$(dooray post create <project> --title "..." --json | jq -r '.id')
146
+ > dooray post get --id "$POST_ID"
147
+ > dooray post comment add --id "$POST_ID" --body "첫 댓글"
148
+ > ```
149
+
150
+ #### 템플릿 기반 정형 task
135
151
 
136
152
  ```bash
137
153
  # 프로젝트의 템플릿 목록
@@ -182,7 +198,7 @@ dooray post comment add <project> 42 --body "댓글 내용"
182
198
  dooray post comment add <project> 42 --body-file ./comment.md
183
199
  ```
184
200
 
185
- > table 출력의 Creator 컬럼은 프로젝트 멤버 캐시로 자동 enrich되며, `--json`은 raw 응답을 유지한다 (ADR-021).
201
+ > table 출력의 Creator 컬럼은 프로젝트 멤버 캐시로 자동 enrich되며, `--json`은 raw 응답을 유지한다.
186
202
 
187
203
  #### 멘션·내부 링크 자동 삽입
188
204
 
@@ -206,7 +222,7 @@ dooray post comment add <project> <post-number> --body "..." --link-task <projec
206
222
  > `--mention` / `--mention-group` / `--link-task` / `--dry-run` 은 `post create`, `post edit`, `post comment add`, `post comment edit` 4 명령 모두 지원.
207
223
  > 이전 버전 캐시는 orgId가 없으므로 첫 호출 시 자동 갱신됩니다 (또는 `dooray cache clear`).
208
224
 
209
- #### 참조자(cc) / 담당자(to) 변경 (ADR-025)
225
+ #### 참조자(cc) / 담당자(to) 변경
210
226
 
211
227
  ```bash
212
228
  # 멤버/그룹 추가 (기존 참조자 유지 + dedupe)
@@ -225,7 +241,7 @@ interactive ($EDITOR) 모드에서는 위 6개 옵션이 무시되고 stderr 경
225
241
  `post edit --dry-run --json` 사용 시 출력에 `users: { to, cc }` 가 포함되어 API 호출 없이 변경 결과 미리보기 가능.
226
242
  `post create --dry-run` 은 본문만 출력하며 `users` 는 포함하지 않음.
227
243
 
228
- **그룹 cc / mention 사용 예 (Issue #76 fix)**:
244
+ **그룹 cc / mention 사용 예**:
229
245
 
230
246
  ```bash
231
247
  # code 부분일치
@@ -246,7 +262,7 @@ dooray post edit <project> <post-number> --cc-group dev-team --dry-run --json |
246
262
  # 출력 예: [{ "type": "group", "group": { "projectMemberGroupId": "...", "members": [] } }, ...]
247
263
  ```
248
264
 
249
- #### 생성 후 태그 변경 (Issue #66)
265
+ #### 생성 후 태그 변경
250
266
 
251
267
  ```bash
252
268
  # 기존 태그 유지 + 신규 추가 (dedupe)
@@ -260,7 +276,7 @@ dooray post edit --id <postId> --tag-remove "<group>: <name>"
260
276
  ```
261
277
 
262
278
  `--title` / `--body` 없이 단독 호출 가능 — 기존 본문은 자동 재전송.
263
- mandatory tag 그룹은 `post create` 와 동일하게 사전 검증 (ADR-019).
279
+ mandatory tag 그룹은 `post create` 와 동일하게 사전 검증.
264
280
 
265
281
  #### 상위 업무 변경 (`--parent`)
266
282
 
@@ -277,7 +293,7 @@ dooray post edit --id <postId> --title "<원제목>" --parent <other-parent-post
277
293
 
278
294
  interactive ($EDITOR) 모드에서 `--parent` 사용 시 무시 + stderr 경고.
279
295
  **parent 만 단독 변경하려면 `--title "<원제목>"` 동반 필요** — `post edit` 는 본문 변경(`--title`/`--body`) 동반 시에만 non-interactive 분기로 들어감.
280
- parent 변경은 그 분기 안에서만 수행됨. (Issue #60)
296
+ parent 변경은 그 분기 안에서만 수행됨.
281
297
 
282
298
  `--dry-run --json` 출력의 `parentChange` 필드는 **사용자 입력 원문 그대로** (`<project>/<number>` 또는 raw postId).
283
299
  resolver 처리 전 미리보기 값이며 실제 호출 대상 `postId` 가 아님.
@@ -285,7 +301,7 @@ dry-run 은 API 미호출 원칙을 유지해 `resolvePostRef` 도 건너뜀.
285
301
 
286
302
  #### `--to` / `--cc` / `--mention` 입력 형식 (자동 분기)
287
303
 
288
- 이름 외에도 이메일 / organizationMemberId 직접 입력 가능 — **동명이인 우회 + ID 직접 입력** (Issue #58):
304
+ 이름 외에도 이메일 / organizationMemberId 직접 입력 가능 — **동명이인 우회 + ID 직접 입력**:
289
305
 
290
306
  ```bash
291
307
  # 이름 (이전부터 지원, 부분일치)
@@ -367,9 +383,13 @@ dooray wiki page create <project> --title "..." [--parent <page-id>] [--body "..
367
383
  dooray wiki page edit <project> <page-id> --title "새 제목" # 제목만 (비대화형)
368
384
  dooray wiki page edit <project> <page-id> --body "..." | --body-file <path> # 본문만 (비대화형)
369
385
  dooray wiki page edit <project> <page-id> # $EDITOR (플래그 없을 때)
386
+ dooray wiki page delete <project> <page-id> # 삭제 (y/N 확인)
387
+ dooray wiki page delete <project> <page-id> --yes # 확인 없이 삭제 (자동화용)
370
388
  ```
371
389
 
372
- #### 위키 페이지 첨부파일 (Issue #70)
390
+ 하위 페이지가 있는 페이지를 삭제하면 하위 페이지는 상위 페이지로 재부착된다 (사라지지 않음).
391
+
392
+ #### 위키 페이지 첨부파일
373
393
 
374
394
  post 의 `post file` 명령군과 동일 패턴 — `<project> <page-id>` 외에도 `--id`/`--url`/positional URL 지원.
375
395
 
@@ -399,7 +419,7 @@ dooray wiki page file list "https://<tenant>.dooray.com/wiki/<wikiId>/<pageId>"
399
419
  dooray wiki page file upload --id <pageId> --project <project> --file ./README.md
400
420
  ```
401
421
 
402
- `--json` 옵션으로 자동화 파이프라인에서 동일 parse 코드를 사용할 수 있습니다 (ADR-031):
422
+ `--json` 옵션으로 자동화 파이프라인에서 동일 parse 코드를 사용할 수 있습니다:
403
423
 
404
424
  ```bash
405
425
  # download — { outputPath, fileName, size }
@@ -411,15 +431,30 @@ dooray wiki page file download-all <project> <page-id> -o ./ --json | jq '.faile
411
431
  # delete — { fileId, status: "deleted" }
412
432
  dooray wiki page file delete <project> <page-id> --file-id <id> --json
413
433
 
414
- # upload — res.result raw (--quiet 는 id 만)
434
+ # upload (general) — res.result raw (--quiet 는 id 만)
415
435
  dooray wiki page file upload <project> <page-id> --file ./report.pdf --json
436
+
437
+ # upload (inline_image) — res.result + markdownSnippet 필드 추가
438
+ dooray wiki page file upload <project> <page-id> --file ./diagram.png --type inline_image --json
439
+ # 출력 예:
440
+ # {
441
+ # "id": "<id>",
442
+ # "attachFileId": "<attachFileId>",
443
+ # "name": "diagram.png",
444
+ # "size": 12345,
445
+ # "type": "inline_image",
446
+ # "markdownSnippet": "![diagram.png](/wikis/<wikiId>/files/<attachFileId>)"
447
+ # }
448
+
449
+ # 자동화: markdownSnippet 을 jq 로 추출해 본문에 삽입
450
+ SNIPPET=$(dooray wiki page file upload <project> <page-id> --file ./diagram.png --type inline_image --json | jq -r '.markdownSnippet')
416
451
  ```
417
452
 
418
453
  **주의**:
419
454
  - `upload` 시 multipart 필드 순서 (`type` → `file`) 가 중요.
420
- 클라이언트가 자동으로 강제 (ADR-029 참조)
455
+ 클라이언트가 자동으로 강제
421
456
  - `inline_image` 로 올린 파일은 본문에 markdown 으로 박혀야 위키에서 보임.
422
- upload stdout snippet복사해서 `dooray wiki page edit` 으로 본문에 직접 추가
457
+ `--json``markdownSnippet`복사하거나 jq 로 추출해 `dooray wiki page edit` 본문에 직접 추가
423
458
  - `delete` 는 confirm 없이 즉시 삭제 (실수 방지 책임은 호출자)
424
459
 
425
460
  #### 위키 페이지 댓글
@@ -484,6 +519,28 @@ dooray mail send --to "a@b.com" --subject "HTML 메일" --body "<h1>Hello</h1>"
484
519
  dooray mail reply <uid> --body "답장 내용"
485
520
  ```
486
521
 
522
+ ### 메신저
523
+
524
+ Dooray 메신저로 1:1 다이렉트 메시지 또는 대화방 메시지를 보낼 수 있습니다.
525
+ 전송은 API 토큰 소유자 명의로 나갑니다.
526
+
527
+ ```bash
528
+ # 1:1 다이렉트 메시지 (받는 사람은 organizationMemberId 또는 이메일)
529
+ dooray messenger send --to "user@example.com" --body "배포 완료했습니다."
530
+ dooray messenger send --to <memberId> --body-file ./message.md
531
+
532
+ # 대화방 메시지 (channelId 또는 대화방 이름)
533
+ dooray messenger channel-send --channel "배포 알림방" --body "빌드 성공"
534
+ dooray messenger channel-send --channel <channelId> --body-file - # stdin
535
+
536
+ # --body 없이 실행하면 $EDITOR 로 본문을 작성
537
+ dooray messenger send --to "user@example.com"
538
+ ```
539
+
540
+ - `--to`는 이름 검색을 지원하지 않습니다. organizationMemberId 또는 이메일만 입력하세요.
541
+ - `--channel`은 채널 ID 또는 자신이 속한 대화방 이름(부분일치)으로 지정할 수 있습니다.
542
+ 이름이 겹치는 대화방이 여러 개면 후보 목록이 함께 출력됩니다.
543
+
487
544
  ### 첨부파일
488
545
 
489
546
  업무에 파일을 첨부하거나, 첨부된 파일을 다운로드할 수 있습니다.
@@ -506,7 +563,7 @@ dooray post file upload <project> <number> ./report.pdf
506
563
  dooray post file delete <project> <number> <file-id>
507
564
  ```
508
565
 
509
- 자동화 스크립트에서 `--json` 옵션으로 구조화된 출력을 파이프로 가공할 수 있습니다 (ADR-031):
566
+ 자동화 스크립트에서 `--json` 옵션으로 구조화된 출력을 파이프로 가공할 수 있습니다:
510
567
 
511
568
  ```bash
512
569
  # download — { outputPath, fileName, size }
@@ -537,7 +594,7 @@ dooray post comment delete --url <url> --comment-id <commentId>
537
594
  ### 댓글 첨부 파일 (`post comment file *`)
538
595
 
539
596
  자동화로 댓글에 인라인 이미지 / 파일을 삽입할 때 사용.
540
- 4 명령 (list/upload/download/delete) 모두 `<project> <post-number> <comment-id>` 또는 `--id <postId> --comment-id <logId>` / `--url <url> --comment-id <logId>` 패턴 지원 (ADR-020).
597
+ 4 명령 (list/upload/download/delete) 모두 `<project> <post-number> <comment-id>` 또는 `--id <postId> --comment-id <logId>` / `--url <url> --comment-id <logId>` 패턴 지원.
541
598
 
542
599
  ```bash
543
600
  # 첨부 목록
@@ -554,7 +611,7 @@ dooray post comment file delete <project> <post-num> <comment-id> <file-id> --ye
554
611
  ```
555
612
 
556
613
  > Dooray REST API 가 댓글 전용 attachment endpoint 를 제공하지 않아 내부적으로
557
- > post-level files API 와 댓글 본문 PUT 의 합성으로 동작 (ADR-024). 단일 명령
614
+ > post-level files API 와 댓글 본문 PUT 의 합성으로 동작한다. 단일 명령
558
615
  > = 단일 파일 — 다중 파일은 호출자가 반복 호출.
559
616
 
560
617
  ## 출력 모드
@@ -601,7 +658,7 @@ dooray feedback --last --title "재현" --body "추가 설명" --dry-run # 미
601
658
  dooray feedback --dry-run
602
659
  ```
603
660
 
604
- > **개인정보 보호 (ADR-023)**: `--last` 모드에서 argv는 `--api-key`/`--token`/`Authorization` 등 시크릿 패턴을 자동 마스킹 후 저장합니다. cwd/env는 미저장.
661
+ > **개인정보 보호**: `--last` 모드에서 argv는 `--api-key`/`--token`/`Authorization` 등 시크릿 패턴을 자동 마스킹 후 저장합니다. cwd/env는 미저장.
605
662
 
606
663
  ## 캐시
607
664