@milcho0604/velog-mcp 0.4.2 → 0.5.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.ko.md +41 -3
- package/README.md +37 -3
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/series.d.ts +47 -0
- package/dist/series.js +109 -0
- package/dist/series.js.map +1 -0
- package/dist/thumbnail.d.ts +63 -0
- package/dist/thumbnail.js +139 -0
- package/dist/thumbnail.js.map +1 -0
- package/dist/tools/drafts.js +63 -19
- package/dist/tools/drafts.js.map +1 -1
- package/dist/tools/publish.js +57 -17
- package/dist/tools/publish.js.map +1 -1
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
package/README.ko.md
CHANGED
|
@@ -63,7 +63,7 @@ npm 에 올려뒀으니 클론할 것 없이 MCP 클라이언트가 `npx` 로
|
|
|
63
63
|
|
|
64
64
|
```bash
|
|
65
65
|
claude mcp add velog -e VELOG_REFRESH_TOKEN=여기에_토큰 \
|
|
66
|
-
-- npx -y @milcho0604/velog-mcp@0.
|
|
66
|
+
-- npx -y @milcho0604/velog-mcp@0.5.0
|
|
67
67
|
```
|
|
68
68
|
|
|
69
69
|
이 방식은 토큰이 클라이언트 설정 파일에 남는다. 위의 플러그인 방식은 키체인에 넣는다.
|
|
@@ -85,7 +85,7 @@ MCP 클라이언트 설정 파일(`claude_desktop_config.json`, `.mcp.json` 등)
|
|
|
85
85
|
"mcpServers": {
|
|
86
86
|
"velog": {
|
|
87
87
|
"command": "npx",
|
|
88
|
-
"args": ["-y", "@milcho0604/velog-mcp@0.
|
|
88
|
+
"args": ["-y", "@milcho0604/velog-mcp@0.5.0"],
|
|
89
89
|
"env": {
|
|
90
90
|
"VELOG_REFRESH_TOKEN": "여기에 토큰"
|
|
91
91
|
}
|
|
@@ -98,7 +98,7 @@ Claude Code CLI 라면:
|
|
|
98
98
|
|
|
99
99
|
```bash
|
|
100
100
|
claude mcp add velog -e VELOG_REFRESH_TOKEN=여기에_토큰 \
|
|
101
|
-
-- npx -y @milcho0604/velog-mcp@0.
|
|
101
|
+
-- npx -y @milcho0604/velog-mcp@0.5.0
|
|
102
102
|
```
|
|
103
103
|
|
|
104
104
|
로컬 체크아웃으로 돌리려면 command 를
|
|
@@ -230,6 +230,44 @@ if (count >= 10) {
|
|
|
230
230
|
> `velog_update_draft` 는 생략하면 초기화하고, `velog_update_post` 는 유지한다.
|
|
231
231
|
> 의도한 비대칭이고 이유는 [docs/tools.md](docs/tools.md) 에 있다.
|
|
232
232
|
|
|
233
|
+
#### 썸네일 자동 채움
|
|
234
|
+
|
|
235
|
+
`thumbnail` 을 생략하면 **본문 첫 이미지**를 썸네일로 쓴다. 목록·공유 카드가 글자만
|
|
236
|
+
나오는 걸 막기 위해서다. 무엇을 넣었는지는 결과에 항상 표시하고, 후보가 여럿이면
|
|
237
|
+
나머지도 함께 보여준다.
|
|
238
|
+
|
|
239
|
+
| `thumbnail` 값 | 동작 |
|
|
240
|
+
| --- | --- |
|
|
241
|
+
| 생략 | 본문 첫 이미지로 자동 설정 |
|
|
242
|
+
| URL | 그대로 사용 |
|
|
243
|
+
| `null` | **자동 채움 끄기** — 일부러 비워 두는 경우 |
|
|
244
|
+
|
|
245
|
+
코드블록·인라인코드 안의 이미지는 후보에서 **제외**한다(예제로 적어둔 마크다운이
|
|
246
|
+
썸네일이 되면 안 되므로). `velog_update_post` 는 **기존 썸네일이 있으면 덮지 않는다** —
|
|
247
|
+
제목만 고쳤는데 목록 카드가 바뀌는 일이 없도록 한 것이고, 이때 `null` 은 "채우지 마라"이지
|
|
248
|
+
"지워라"가 아니다.
|
|
249
|
+
|
|
250
|
+
#### 시리즈 — 이름으로 한 번에
|
|
251
|
+
|
|
252
|
+
`series_name` 에 **이름**을 주면 저장 **전에** 내 시리즈에서 찾아 **같은 요청에 실어 보낸다**.
|
|
253
|
+
글쓰기와 시리즈 등록이 한 번의 호출로 끝난다. id 는 사람도 AI 도 모르기 때문에 이름을 받는다.
|
|
254
|
+
|
|
255
|
+
```
|
|
256
|
+
series_name: "PostgreSQL" ← 대소문자·앞뒤 공백은 무시하고 찾는다
|
|
257
|
+
series_id: "e53810ca-..." ← id 를 알면 이쪽이 우선
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
⚠️ **못 찾으면 글을 저장하지 않는다.** 조용히 시리즈 없이 저장하면 들어간 줄 알기 때문이다.
|
|
261
|
+
이때 있는 시리즈 목록을 함께 알려준다.
|
|
262
|
+
|
|
263
|
+
`series_name`·`series_id` 를 둘 다 생략하면 저장 뒤 결과에 **내 시리즈 목록**을 붙여준다.
|
|
264
|
+
이 조회가 실패해도 글은 이미 저장된 뒤이므로 **저장을 실패시키지 않는다**(취소도 삼킨다 —
|
|
265
|
+
여기서 실패로 보고하면 재시도 때 글이 두 번 생긴다).
|
|
266
|
+
|
|
267
|
+
> ⚠️ 벨로그 API 로는 **시리즈를 만들 수 없다.** 뮤테이션에 시리즈 관련이 하나도 없고
|
|
268
|
+
> `WritePostInput` 도 `series_id` 만 받는다. 새 시리즈는 벨로그 웹에서 한 번 만들면
|
|
269
|
+
> 그 뒤부터 이 도구로 붙일 수 있다.
|
|
270
|
+
|
|
233
271
|
`username` 을 받는 도구 중 `velog_list_drafts`·`velog_blog_stats`·
|
|
234
272
|
`velog_export_posts`·`velog_search_posts` 는 생략하면 **내 계정**을 쓴다.
|
|
235
273
|
|
package/README.md
CHANGED
|
@@ -68,7 +68,7 @@ Published on npm, so nothing to clone — your MCP client runs it via `npx`. See
|
|
|
68
68
|
|
|
69
69
|
```bash
|
|
70
70
|
claude mcp add velog -e VELOG_REFRESH_TOKEN=your_refresh_token \
|
|
71
|
-
-- npx -y @milcho0604/velog-mcp@0.
|
|
71
|
+
-- npx -y @milcho0604/velog-mcp@0.5.0
|
|
72
72
|
```
|
|
73
73
|
|
|
74
74
|
The token stays in your client's config file here. The plugin route above puts it in
|
|
@@ -91,7 +91,7 @@ Add this to your MCP client config (`claude_desktop_config.json`, `.mcp.json`,
|
|
|
91
91
|
"mcpServers": {
|
|
92
92
|
"velog": {
|
|
93
93
|
"command": "npx",
|
|
94
|
-
"args": ["-y", "@milcho0604/velog-mcp@0.
|
|
94
|
+
"args": ["-y", "@milcho0604/velog-mcp@0.5.0"],
|
|
95
95
|
"env": {
|
|
96
96
|
"VELOG_REFRESH_TOKEN": "your_refresh_token"
|
|
97
97
|
}
|
|
@@ -104,7 +104,7 @@ With the Claude Code CLI:
|
|
|
104
104
|
|
|
105
105
|
```bash
|
|
106
106
|
claude mcp add velog -e VELOG_REFRESH_TOKEN=your_refresh_token \
|
|
107
|
-
-- npx -y @milcho0604/velog-mcp@0.
|
|
107
|
+
-- npx -y @milcho0604/velog-mcp@0.5.0
|
|
108
108
|
```
|
|
109
109
|
|
|
110
110
|
To run a local checkout instead, swap the command for
|
|
@@ -242,6 +242,40 @@ Full reasoning: [docs/security.md](docs/security.md)
|
|
|
242
242
|
> `velog_update_draft` resets what you omit; `velog_update_post` preserves it.
|
|
243
243
|
> The asymmetry is deliberate — see [docs/tools.md](docs/tools.md).
|
|
244
244
|
|
|
245
|
+
#### Automatic thumbnail
|
|
246
|
+
|
|
247
|
+
Omit `thumbnail` and the **first image in the body** becomes the thumbnail, so list and
|
|
248
|
+
share cards aren't text-only. What was chosen is always reported back, along with the
|
|
249
|
+
other candidates when there is more than one.
|
|
250
|
+
|
|
251
|
+
| `thumbnail` | Behaviour |
|
|
252
|
+
| --- | --- |
|
|
253
|
+
| omitted | first image in the body |
|
|
254
|
+
| a URL | used as given |
|
|
255
|
+
| `null` | **opt out** — leave it empty on purpose |
|
|
256
|
+
|
|
257
|
+
Images inside code fences and inline code are excluded, so a markdown example never
|
|
258
|
+
becomes your thumbnail. `velog_update_post` **never replaces an existing thumbnail** —
|
|
259
|
+
editing a title should not change the card. There, `null` means "don't fill it in",
|
|
260
|
+
not "delete it".
|
|
261
|
+
|
|
262
|
+
#### Series — by name, in one call
|
|
263
|
+
|
|
264
|
+
Pass `series_name` and the server resolves it **before** saving, then sends the id in the
|
|
265
|
+
**same request** — writing and filing happen in one call. Names are matched ignoring case
|
|
266
|
+
and surrounding whitespace; `series_id` wins if you know it.
|
|
267
|
+
|
|
268
|
+
⚠️ **If the name isn't found, nothing is written** — saving without the series would look
|
|
269
|
+
like it worked. The available series are listed in the error.
|
|
270
|
+
|
|
271
|
+
Omit both and the result carries **your series list**. That lookup never fails the write
|
|
272
|
+
(cancellation included — reporting failure after a successful save makes retries duplicate
|
|
273
|
+
the post).
|
|
274
|
+
|
|
275
|
+
> ⚠️ The velog API cannot **create** a series — there is no series mutation, and
|
|
276
|
+
> `WritePostInput` only accepts `series_id`. Create one on velog once, then this
|
|
277
|
+
> server can attach posts to it.
|
|
278
|
+
|
|
245
279
|
Tools that take a `username` — `velog_list_drafts`, `velog_blog_stats`,
|
|
246
280
|
`velog_export_posts`, `velog_search_posts` — fall back to your own account when you
|
|
247
281
|
omit it.
|
package/dist/index.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
|
10
10
|
import { type Capabilities } from './capabilities.ts';
|
|
11
11
|
import { VelogClient } from './client.ts';
|
|
12
12
|
export declare const SERVER_NAME = "velog-mcp";
|
|
13
|
-
export declare const SERVER_VERSION = "0.
|
|
13
|
+
export declare const SERVER_VERSION = "0.5.0";
|
|
14
14
|
export declare function createServer(client: VelogClient, capabilities?: Capabilities): McpServer;
|
|
15
15
|
/**
|
|
16
16
|
* 크롬이 있어야만 되는 도구들.
|
package/dist/index.js
CHANGED
|
@@ -28,7 +28,7 @@ import { registerImageTools } from "./tools/images.js";
|
|
|
28
28
|
export const SERVER_NAME = 'velog-mcp';
|
|
29
29
|
// ⚠️ 이 값은 네 곳이 함께 움직인다 — package.json / plugin.json / .mcp.json 의
|
|
30
30
|
// npx 핀 / 여기. 어긋나면 P8 테스트가 잡는다. 손으로 맞추지 말고 테스트를 믿을 것.
|
|
31
|
-
export const SERVER_VERSION = '0.
|
|
31
|
+
export const SERVER_VERSION = '0.5.0';
|
|
32
32
|
export function createServer(client, capabilities = { publicPublish: false, editProfile: false }) {
|
|
33
33
|
const server = new McpServer({ name: SERVER_NAME, version: SERVER_VERSION }, {
|
|
34
34
|
instructions: [
|
package/dist/series.d.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 시리즈 힌트 — `series_id` 를 안 준 글에 "어디에 넣을 수 있는지" 알려준다.
|
|
3
|
+
*
|
|
4
|
+
* ★★ 벨로그 API 는 시리즈를 **만들 수 없다.** 2026-08-13 인트로스펙션으로 확인:
|
|
5
|
+
* 뮤테이션 23개 중 시리즈 관련이 0개이고, `WritePostInput` 도 `series_id` 만
|
|
6
|
+
* 받는다(이름으로 만들어 붙이는 입력이 없다). 조회(`seriesList`)만 열려 있다.
|
|
7
|
+
* 그래서 "없으면 만든다"는 불가능하고, **"없으면 알려준다"**가 최선이다.
|
|
8
|
+
* 새 시리즈는 벨로그 웹에서 한 번 만들면 그 뒤부터 이 도구가 붙일 수 있다.
|
|
9
|
+
*
|
|
10
|
+
* ★ 이 모듈의 실패는 **글쓰기를 막지 않는다.** 힌트를 못 만든 것뿐인데 저장이
|
|
11
|
+
* 실패하면 배보다 배꼽이다. 호출부는 반드시 실패를 삼켜야 한다.
|
|
12
|
+
*/
|
|
13
|
+
import type { VelogClient } from './client.ts';
|
|
14
|
+
/**
|
|
15
|
+
* 시리즈 **이름**을 id 로 바꾼다. ★ 저장(mutation) **전에** 부른다.
|
|
16
|
+
*
|
|
17
|
+
* ★★ 왜 이름을 받나 — id 는 사람도 AI 도 모른다. 이름만 받을 수 있으면
|
|
18
|
+
* "저장하면서 시리즈에 넣기"가 **한 번의 호출로** 끝난다. 예전엔
|
|
19
|
+
* 저장 → 목록 받기 → 다시 붙이기로 **세 번**이었다.
|
|
20
|
+
*
|
|
21
|
+
* ★ 못 찾으면 **던진다.** 이 시점엔 아직 아무것도 안 썼으므로 던지는 게 안전하고,
|
|
22
|
+
* 조용히 시리즈 없이 저장하면 사용자는 들어간 줄 안다. 벨로그 API 로는 시리즈를
|
|
23
|
+
* 만들 수 없으므로(뮤테이션 없음) 목록을 함께 보여주고 사람이 정하게 한다.
|
|
24
|
+
*/
|
|
25
|
+
export declare function resolveSeriesId(client: VelogClient, username: string, seriesName: string, toolName: string, signal?: AbortSignal): Promise<string>;
|
|
26
|
+
/**
|
|
27
|
+
* 내 시리즈 목록을 사람이 읽을 안내문으로 만든다.
|
|
28
|
+
*
|
|
29
|
+
* @param requested 호출자가 준 series_id. 있으면 힌트를 만들지 않는다.
|
|
30
|
+
* @returns 결과 메시지에 이어붙일 문자열. 붙일 말이 없으면 빈 문자열.
|
|
31
|
+
*/
|
|
32
|
+
export declare function describeSeriesOptions(client: VelogClient, username: string, requested: string | undefined, signal?: AbortSignal): Promise<string>;
|
|
33
|
+
/**
|
|
34
|
+
* 힌트를 만들되 **어떤 경우에도 던지지 않는다.**
|
|
35
|
+
*
|
|
36
|
+
* ★★ 이 함수는 **글이 이미 저장된 뒤에만** 불린다. 그래서 취소조차 삼킨다.
|
|
37
|
+
* 여기서 던지면 저장이 끝난 호출이 '실패'로 보고되고, 사용자는 안 써진 줄 알고
|
|
38
|
+
* 다시 부른다 → **글이 두 번 생긴다.** 취소를 존중하는 것보다 중복 생성을
|
|
39
|
+
* 막는 게 크다. 취소는 mutation **전·중**에 이미 걸러진다.
|
|
40
|
+
* (코덱스 교차검증에서 잡혔다: mutation 성공 후 취소 시 wrote=true 인데
|
|
41
|
+
* 최종 Promise 가 rejected 였다.)
|
|
42
|
+
*
|
|
43
|
+
* ★ username 을 **함수로 받는 이유** — 예전엔 `resolveMyUsername()` 을 인자
|
|
44
|
+
* 위치에서 await 했는데, 그러면 **이 try 밖에서** 평가되어 그 조회가 실패하면
|
|
45
|
+
* 똑같이 도구 호출이 통째로 실패했다. 안에서 부른다.
|
|
46
|
+
*/
|
|
47
|
+
export declare function seriesHintSafely(client: VelogClient, resolveUsername: () => string | Promise<string>, requested: string | undefined, signal?: AbortSignal): Promise<string>;
|
package/dist/series.js
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 시리즈 힌트 — `series_id` 를 안 준 글에 "어디에 넣을 수 있는지" 알려준다.
|
|
3
|
+
*
|
|
4
|
+
* ★★ 벨로그 API 는 시리즈를 **만들 수 없다.** 2026-08-13 인트로스펙션으로 확인:
|
|
5
|
+
* 뮤테이션 23개 중 시리즈 관련이 0개이고, `WritePostInput` 도 `series_id` 만
|
|
6
|
+
* 받는다(이름으로 만들어 붙이는 입력이 없다). 조회(`seriesList`)만 열려 있다.
|
|
7
|
+
* 그래서 "없으면 만든다"는 불가능하고, **"없으면 알려준다"**가 최선이다.
|
|
8
|
+
* 새 시리즈는 벨로그 웹에서 한 번 만들면 그 뒤부터 이 도구가 붙일 수 있다.
|
|
9
|
+
*
|
|
10
|
+
* ★ 이 모듈의 실패는 **글쓰기를 막지 않는다.** 힌트를 못 만든 것뿐인데 저장이
|
|
11
|
+
* 실패하면 배보다 배꼽이다. 호출부는 반드시 실패를 삼켜야 한다.
|
|
12
|
+
*/
|
|
13
|
+
const QUERY_SERIES_LIST = `
|
|
14
|
+
query SeriesListHint($input: GetSeriesListInput!) {
|
|
15
|
+
seriesList(input: $input) { id name posts_count }
|
|
16
|
+
}
|
|
17
|
+
`;
|
|
18
|
+
/** 힌트에 보여줄 최대 개수. 시리즈가 수십 개인 사람도 있다. */
|
|
19
|
+
const MAX_SHOWN = 12;
|
|
20
|
+
/** 목록을 사람이 고를 수 있게 줄로 만든다. */
|
|
21
|
+
function listLines(list) {
|
|
22
|
+
const shown = list
|
|
23
|
+
.slice(0, MAX_SHOWN)
|
|
24
|
+
.map((s) => ` - ${s.name ?? '(이름 없음)'} (${s.posts_count ?? 0}편) — \`${s.id}\``)
|
|
25
|
+
.join('\n');
|
|
26
|
+
return list.length > MAX_SHOWN ? `${shown}\n … 외 ${list.length - MAX_SHOWN}개` : shown;
|
|
27
|
+
}
|
|
28
|
+
/** 비교용 정규화 — 앞뒤 공백·대소문자·연속 공백 차이는 무시한다. */
|
|
29
|
+
function norm(name) {
|
|
30
|
+
return name.trim().toLowerCase().replace(/\s+/g, ' ');
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 시리즈 **이름**을 id 로 바꾼다. ★ 저장(mutation) **전에** 부른다.
|
|
34
|
+
*
|
|
35
|
+
* ★★ 왜 이름을 받나 — id 는 사람도 AI 도 모른다. 이름만 받을 수 있으면
|
|
36
|
+
* "저장하면서 시리즈에 넣기"가 **한 번의 호출로** 끝난다. 예전엔
|
|
37
|
+
* 저장 → 목록 받기 → 다시 붙이기로 **세 번**이었다.
|
|
38
|
+
*
|
|
39
|
+
* ★ 못 찾으면 **던진다.** 이 시점엔 아직 아무것도 안 썼으므로 던지는 게 안전하고,
|
|
40
|
+
* 조용히 시리즈 없이 저장하면 사용자는 들어간 줄 안다. 벨로그 API 로는 시리즈를
|
|
41
|
+
* 만들 수 없으므로(뮤테이션 없음) 목록을 함께 보여주고 사람이 정하게 한다.
|
|
42
|
+
*/
|
|
43
|
+
export async function resolveSeriesId(client, username, seriesName, toolName, signal) {
|
|
44
|
+
const data = await client.request(QUERY_SERIES_LIST, { input: { username } }, { signal });
|
|
45
|
+
const list = data.seriesList ?? [];
|
|
46
|
+
const want = norm(seriesName);
|
|
47
|
+
const hit = list.filter((s) => typeof s.name === 'string' && norm(s.name) === want);
|
|
48
|
+
if (hit.length === 1) {
|
|
49
|
+
const id = hit[0]?.id;
|
|
50
|
+
if (id)
|
|
51
|
+
return id;
|
|
52
|
+
}
|
|
53
|
+
if (hit.length > 1) {
|
|
54
|
+
throw new Error(`${toolName}: "${seriesName}" 과 이름이 같은 시리즈가 ${hit.length}개입니다. ` +
|
|
55
|
+
`series_id 로 직접 지정하세요.\n${listLines(hit)}`);
|
|
56
|
+
}
|
|
57
|
+
throw new Error(`${toolName}: "${seriesName}" 시리즈를 찾지 못했습니다. **글은 저장하지 않았습니다.**\n` +
|
|
58
|
+
(list.length === 0
|
|
59
|
+
? ' 아직 만든 시리즈가 없습니다.'
|
|
60
|
+
: ` 있는 시리즈:\n${listLines(list)}`) +
|
|
61
|
+
'\n ⚠️ 벨로그 API 로는 시리즈를 **만들 수 없습니다**(조회만 열려 있습니다). ' +
|
|
62
|
+
'벨로그 웹에서 만든 뒤 다시 시도하거나, 위 목록의 이름을 쓰세요.');
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* 내 시리즈 목록을 사람이 읽을 안내문으로 만든다.
|
|
66
|
+
*
|
|
67
|
+
* @param requested 호출자가 준 series_id. 있으면 힌트를 만들지 않는다.
|
|
68
|
+
* @returns 결과 메시지에 이어붙일 문자열. 붙일 말이 없으면 빈 문자열.
|
|
69
|
+
*/
|
|
70
|
+
export async function describeSeriesOptions(client, username, requested, signal) {
|
|
71
|
+
// 이미 지정했으면 참견하지 않는다.
|
|
72
|
+
if (requested !== undefined && requested !== '')
|
|
73
|
+
return '';
|
|
74
|
+
const data = await client.request(QUERY_SERIES_LIST, { input: { username } }, { signal });
|
|
75
|
+
const list = data.seriesList ?? [];
|
|
76
|
+
if (list.length === 0) {
|
|
77
|
+
return ('\n\n📚 시리즈에 넣지 않았습니다. 아직 만든 시리즈가 없습니다.\n' +
|
|
78
|
+
' ⚠️ 벨로그 API 로는 시리즈를 **만들 수 없습니다**(조회만 열려 있습니다). ' +
|
|
79
|
+
'벨로그 웹에서 시리즈를 한 번 만들면 그 뒤부터 이 도구로 붙일 수 있습니다.');
|
|
80
|
+
}
|
|
81
|
+
return ('\n\n📚 시리즈에 넣지 않았습니다. 넣으려면 **series_name** 에 아래 이름 중 하나를 주세요' +
|
|
82
|
+
'(다음부터는 저장과 동시에 붙습니다).\n' +
|
|
83
|
+
`${listLines(list)}\n` +
|
|
84
|
+
' 맞는 시리즈가 없으면 벨로그 웹에서 새로 만드세요 — API 로는 만들 수 없습니다.');
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* 힌트를 만들되 **어떤 경우에도 던지지 않는다.**
|
|
88
|
+
*
|
|
89
|
+
* ★★ 이 함수는 **글이 이미 저장된 뒤에만** 불린다. 그래서 취소조차 삼킨다.
|
|
90
|
+
* 여기서 던지면 저장이 끝난 호출이 '실패'로 보고되고, 사용자는 안 써진 줄 알고
|
|
91
|
+
* 다시 부른다 → **글이 두 번 생긴다.** 취소를 존중하는 것보다 중복 생성을
|
|
92
|
+
* 막는 게 크다. 취소는 mutation **전·중**에 이미 걸러진다.
|
|
93
|
+
* (코덱스 교차검증에서 잡혔다: mutation 성공 후 취소 시 wrote=true 인데
|
|
94
|
+
* 최종 Promise 가 rejected 였다.)
|
|
95
|
+
*
|
|
96
|
+
* ★ username 을 **함수로 받는 이유** — 예전엔 `resolveMyUsername()` 을 인자
|
|
97
|
+
* 위치에서 await 했는데, 그러면 **이 try 밖에서** 평가되어 그 조회가 실패하면
|
|
98
|
+
* 똑같이 도구 호출이 통째로 실패했다. 안에서 부른다.
|
|
99
|
+
*/
|
|
100
|
+
export async function seriesHintSafely(client, resolveUsername, requested, signal) {
|
|
101
|
+
try {
|
|
102
|
+
const username = await resolveUsername();
|
|
103
|
+
return await describeSeriesOptions(client, username, requested, signal);
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return '';
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=series.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"series.js","sourceRoot":"","sources":["../src/series.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 썸네일 자동 채움 — 본문에 이미 있는 이미지를 목록 카드에 쓴다.
|
|
3
|
+
*
|
|
4
|
+
* ★ 왜 있는가 — 썸네일이 없으면 글 목록·공유 카드가 글자만 나온다. 그런데
|
|
5
|
+
* 본문에 그림을 넣은 사람은 이미 쓸 만한 이미지를 가지고 있다. 한 번 더
|
|
6
|
+
* 지정하게 만들 이유가 없다.
|
|
7
|
+
*
|
|
8
|
+
* ★★ 이 모듈은 **본문을 고치지 않는다.** 읽기만 한다. 반환값은 '무엇을 쓸지'와
|
|
9
|
+
* '왜 그렇게 정했는지'뿐이고, 실제 적용은 호출부가 한다.
|
|
10
|
+
*/
|
|
11
|
+
/** 한 번의 결정 결과. `url` 이 undefined 면 채우지 않는다. */
|
|
12
|
+
export interface ThumbnailChoice {
|
|
13
|
+
/** 실제로 보낼 값. 채우지 않기로 했으면 undefined. */
|
|
14
|
+
readonly url: string | undefined;
|
|
15
|
+
/** 본문에서 찾은 후보 전부 (중복 제거, 등장 순서). */
|
|
16
|
+
readonly candidates: readonly string[];
|
|
17
|
+
/** 왜 이렇게 정했나. 결과 메시지를 만들 때 쓴다. */
|
|
18
|
+
readonly reason: 'explicit' | 'opted-out' | 'auto' | 'none';
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* 마크다운 본문에서 이미지 URL 을 등장 순서대로 뽑는다.
|
|
22
|
+
*
|
|
23
|
+
* 다루는 형태:
|
|
24
|
+
* - `` · ``
|
|
25
|
+
* - `<img src="url">` (HTML 을 섞어 쓰는 사람이 많다)
|
|
26
|
+
*
|
|
27
|
+
* ⚠️ 코드블록 안의 이미지는 **제외한다.** 예제로 적어둔 마크다운이 썸네일이
|
|
28
|
+
* 되어버리면 황당하다. 펜스(``` 또는 ~~~)와 인라인 코드(`...`)를 먼저 지운다.
|
|
29
|
+
*/
|
|
30
|
+
export declare function extractImageUrls(body: string): string[];
|
|
31
|
+
/**
|
|
32
|
+
* 무엇을 썸네일로 쓸지 정한다.
|
|
33
|
+
*
|
|
34
|
+
* 우선순위:
|
|
35
|
+
* 1. 호출자가 준 값 → 그대로 쓴다 (`explicit`)
|
|
36
|
+
* 2. 호출자가 **끄겠다고** 명시 → 안 쓴다 (`opted-out`)
|
|
37
|
+
* 3. 본문 첫 이미지 → 자동 (`auto`)
|
|
38
|
+
* 4. 본문에 이미지가 없음 → 안 쓴다 (`none`)
|
|
39
|
+
*
|
|
40
|
+
* ★ 끄는 방법을 둔 이유 — 이 도구는 나만 쓰는 게 아니다. 썸네일을 **일부러**
|
|
41
|
+
* 비워 두는 사람이 있고, 자동 채움이 그 의도를 조용히 덮으면 안 된다.
|
|
42
|
+
* 빈 문자열이나 null 을 주면 "비워 둬라"로 읽는다.
|
|
43
|
+
*/
|
|
44
|
+
export declare function chooseThumbnail(requested: string | null | undefined, body: string): ThumbnailChoice;
|
|
45
|
+
/**
|
|
46
|
+
* 병합 수정(velog_update_post)용. 생성과 규칙이 다르다.
|
|
47
|
+
*
|
|
48
|
+
* ★★ **기존 썸네일이 최우선이다.** 이미 붙어 있는 그림을 본문 첫 이미지로
|
|
49
|
+
* 갈아치우면, 제목만 고치려던 사람이 목록 카드가 바뀌는 걸 당한다.
|
|
50
|
+
* 자동 채움은 **비어 있을 때만** 한다.
|
|
51
|
+
*
|
|
52
|
+
* ⚠️ `null` 을 줘도 **기존 썸네일을 지우지 않는다.** 여기서 null 은 "자동으로
|
|
53
|
+
* 채우지 마라"이지 "지워라"가 아니다. 지우는 건 되돌리기 어려운데 그 의도를
|
|
54
|
+
* null 하나로 단정할 수 없다 — 지우려면 벨로그에서 직접 하는 게 맞다.
|
|
55
|
+
*/
|
|
56
|
+
export declare function chooseThumbnailForUpdate(requested: string | null | undefined, existing: string | null | undefined, body: string): ThumbnailChoice;
|
|
57
|
+
/**
|
|
58
|
+
* 결과 메시지에 붙일 안내. 붙일 말이 없으면 빈 문자열.
|
|
59
|
+
*
|
|
60
|
+
* ★ 조용히 하지 않는다. 자동으로 넣었으면 **넣었다고 말한다.** 내가 시키지 않은
|
|
61
|
+
* 변경이 결과에 안 보이면 그게 사고다.
|
|
62
|
+
*/
|
|
63
|
+
export declare function describeThumbnail(choice: ThumbnailChoice): string;
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 썸네일 자동 채움 — 본문에 이미 있는 이미지를 목록 카드에 쓴다.
|
|
3
|
+
*
|
|
4
|
+
* ★ 왜 있는가 — 썸네일이 없으면 글 목록·공유 카드가 글자만 나온다. 그런데
|
|
5
|
+
* 본문에 그림을 넣은 사람은 이미 쓸 만한 이미지를 가지고 있다. 한 번 더
|
|
6
|
+
* 지정하게 만들 이유가 없다.
|
|
7
|
+
*
|
|
8
|
+
* ★★ 이 모듈은 **본문을 고치지 않는다.** 읽기만 한다. 반환값은 '무엇을 쓸지'와
|
|
9
|
+
* '왜 그렇게 정했는지'뿐이고, 실제 적용은 호출부가 한다.
|
|
10
|
+
*/
|
|
11
|
+
import { isSafeImageUrl } from "./slug.js";
|
|
12
|
+
/** 문자 개수. 괄호 균형 검사에만 쓴다. */
|
|
13
|
+
function countOf(text, ch) {
|
|
14
|
+
let n = 0;
|
|
15
|
+
for (const c of text)
|
|
16
|
+
if (c === ch)
|
|
17
|
+
n++;
|
|
18
|
+
return n;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* 마크다운 본문에서 이미지 URL 을 등장 순서대로 뽑는다.
|
|
22
|
+
*
|
|
23
|
+
* 다루는 형태:
|
|
24
|
+
* - `` · ``
|
|
25
|
+
* - `<img src="url">` (HTML 을 섞어 쓰는 사람이 많다)
|
|
26
|
+
*
|
|
27
|
+
* ⚠️ 코드블록 안의 이미지는 **제외한다.** 예제로 적어둔 마크다운이 썸네일이
|
|
28
|
+
* 되어버리면 황당하다. 펜스(``` 또는 ~~~)와 인라인 코드(`...`)를 먼저 지운다.
|
|
29
|
+
*/
|
|
30
|
+
export function extractImageUrls(body) {
|
|
31
|
+
// ★ 지우는 순서가 중요하다. 펜스를 먼저 지워야 그 안의 백틱이 인라인 코드로
|
|
32
|
+
// 잘못 짝지어지지 않는다.
|
|
33
|
+
const withoutCode = body
|
|
34
|
+
.replace(/^[ \t]*(`{3,}|~{3,})[\s\S]*?^[ \t]*\1[ \t]*$/gm, '')
|
|
35
|
+
.replace(/`[^`\n]*`/g, '');
|
|
36
|
+
const found = [];
|
|
37
|
+
const push = (raw) => {
|
|
38
|
+
if (!raw)
|
|
39
|
+
return;
|
|
40
|
+
// 마크다운은 URL 뒤에 제목을 붙일 수 있다: (url "제목")
|
|
41
|
+
const url = raw.trim().split(/\s+/)[0]?.replace(/^<|>$/g, '');
|
|
42
|
+
if (!url || !isSafeImageUrl(url))
|
|
43
|
+
return;
|
|
44
|
+
// ★★ 괄호가 안 맞으면 **버린다.** `.png)` 는 `)` 에서 끊겨
|
|
45
|
+
// `https://x/y(1` 이 잡히는데, 이것도 https 라 URL 검사를 통과한다.
|
|
46
|
+
// 그대로 두면 **깨진 주소가 조용히 썸네일이 된다** — 아무도 모르게 목록
|
|
47
|
+
// 카드만 깨진다. 애매하면 넣지 않는 쪽이 맞다.
|
|
48
|
+
if (countOf(url, '(') !== countOf(url, ')'))
|
|
49
|
+
return;
|
|
50
|
+
if (!found.includes(url))
|
|
51
|
+
found.push(url);
|
|
52
|
+
};
|
|
53
|
+
// alt 안의 대괄호 한 겹까지 허용한다: `![도표[1]](url)`
|
|
54
|
+
for (const m of withoutCode.matchAll(/!\[(?:[^[\]]|\[[^\]]*\])*\]\(([^)]+)\)/g))
|
|
55
|
+
push(m[1]);
|
|
56
|
+
for (const m of withoutCode.matchAll(/<img\b[^>]*?\ssrc\s*=\s*["']([^"']+)["']/gi)) {
|
|
57
|
+
push(m[1]);
|
|
58
|
+
}
|
|
59
|
+
return found;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* 무엇을 썸네일로 쓸지 정한다.
|
|
63
|
+
*
|
|
64
|
+
* 우선순위:
|
|
65
|
+
* 1. 호출자가 준 값 → 그대로 쓴다 (`explicit`)
|
|
66
|
+
* 2. 호출자가 **끄겠다고** 명시 → 안 쓴다 (`opted-out`)
|
|
67
|
+
* 3. 본문 첫 이미지 → 자동 (`auto`)
|
|
68
|
+
* 4. 본문에 이미지가 없음 → 안 쓴다 (`none`)
|
|
69
|
+
*
|
|
70
|
+
* ★ 끄는 방법을 둔 이유 — 이 도구는 나만 쓰는 게 아니다. 썸네일을 **일부러**
|
|
71
|
+
* 비워 두는 사람이 있고, 자동 채움이 그 의도를 조용히 덮으면 안 된다.
|
|
72
|
+
* 빈 문자열이나 null 을 주면 "비워 둬라"로 읽는다.
|
|
73
|
+
*/
|
|
74
|
+
export function chooseThumbnail(requested, body) {
|
|
75
|
+
const candidates = extractImageUrls(body);
|
|
76
|
+
if (typeof requested === 'string' && requested.trim() !== '') {
|
|
77
|
+
return { url: requested, candidates, reason: 'explicit' };
|
|
78
|
+
}
|
|
79
|
+
// ★ null 과 빈 문자열은 "자동으로 넣지 마라"는 뜻이다. undefined(미지정)와
|
|
80
|
+
// 구분해야 한다 — 미지정은 "알아서 해달라"이고 이건 명시적 거부다.
|
|
81
|
+
if (requested !== undefined) {
|
|
82
|
+
return { url: undefined, candidates, reason: 'opted-out' };
|
|
83
|
+
}
|
|
84
|
+
const first = candidates[0];
|
|
85
|
+
if (first === undefined)
|
|
86
|
+
return { url: undefined, candidates, reason: 'none' };
|
|
87
|
+
return { url: first, candidates, reason: 'auto' };
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* 병합 수정(velog_update_post)용. 생성과 규칙이 다르다.
|
|
91
|
+
*
|
|
92
|
+
* ★★ **기존 썸네일이 최우선이다.** 이미 붙어 있는 그림을 본문 첫 이미지로
|
|
93
|
+
* 갈아치우면, 제목만 고치려던 사람이 목록 카드가 바뀌는 걸 당한다.
|
|
94
|
+
* 자동 채움은 **비어 있을 때만** 한다.
|
|
95
|
+
*
|
|
96
|
+
* ⚠️ `null` 을 줘도 **기존 썸네일을 지우지 않는다.** 여기서 null 은 "자동으로
|
|
97
|
+
* 채우지 마라"이지 "지워라"가 아니다. 지우는 건 되돌리기 어려운데 그 의도를
|
|
98
|
+
* null 하나로 단정할 수 없다 — 지우려면 벨로그에서 직접 하는 게 맞다.
|
|
99
|
+
*/
|
|
100
|
+
export function chooseThumbnailForUpdate(requested, existing, body) {
|
|
101
|
+
if (typeof requested === 'string' && requested.trim() !== '') {
|
|
102
|
+
return { url: requested, candidates: extractImageUrls(body), reason: 'explicit' };
|
|
103
|
+
}
|
|
104
|
+
// ★★ 생략하면 **기존 값을 그대로 잇는다. 비어 있어도 마찬가지다.**
|
|
105
|
+
// 예전엔 기존이 비었을 때 본문 첫 이미지로 채웠는데, 이 도구는 문서에
|
|
106
|
+
// "생략한 필드는 유지된다"고 약속해 뒀다. 제목만 고치려던 호출이 **일부러
|
|
107
|
+
// 비워 둔 썸네일을 채워버리는** 건 그 약속을 깨는 것이다.
|
|
108
|
+
// 자동 채움은 새로 쓰는 경로(create/publish)에만 둔다.
|
|
109
|
+
// (코덱스 교차검증에서 잡혔다.)
|
|
110
|
+
return { url: existing ?? undefined, candidates: [], reason: 'explicit' };
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* 결과 메시지에 붙일 안내. 붙일 말이 없으면 빈 문자열.
|
|
114
|
+
*
|
|
115
|
+
* ★ 조용히 하지 않는다. 자동으로 넣었으면 **넣었다고 말한다.** 내가 시키지 않은
|
|
116
|
+
* 변경이 결과에 안 보이면 그게 사고다.
|
|
117
|
+
*/
|
|
118
|
+
export function describeThumbnail(choice) {
|
|
119
|
+
if (choice.reason === 'auto') {
|
|
120
|
+
const others = choice.candidates.length - 1;
|
|
121
|
+
const head = `\n\n🖼️ 썸네일을 본문 첫 이미지로 **자동 설정**했습니다.\n ${choice.url}`;
|
|
122
|
+
if (others <= 0)
|
|
123
|
+
return head;
|
|
124
|
+
const list = choice.candidates
|
|
125
|
+
.slice(1, 6)
|
|
126
|
+
.map((u, i) => ` ${i + 2}. ${u}`)
|
|
127
|
+
.join('\n');
|
|
128
|
+
const more = others > 5 ? `\n … 외 ${others - 5}개` : '';
|
|
129
|
+
return (`${head}\n\n 본문에 이미지가 ${choice.candidates.length}개 있습니다. ` +
|
|
130
|
+
`다른 걸 쓰려면 thumbnail 에 아래 중 하나를 주세요.\n${list}${more}`);
|
|
131
|
+
}
|
|
132
|
+
if (choice.reason === 'none') {
|
|
133
|
+
return ('\n\n💡 썸네일이 없습니다. 본문에 이미지가 없어 자동으로 채우지 못했습니다 — ' +
|
|
134
|
+
'목록·공유 카드에 그림이 필요하면 thumbnail 에 이미지 URL 을 주거나 ' +
|
|
135
|
+
'velog_render_diagram / velog_upload_image 로 하나 만들어 붙이세요.');
|
|
136
|
+
}
|
|
137
|
+
return '';
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=thumbnail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thumbnail.js","sourceRoot":"","sources":["../src/thumbnail.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/drafts.js
CHANGED
|
@@ -16,6 +16,8 @@ import { resolveMyUsername } from "../me.js";
|
|
|
16
16
|
import { assertOwned, assertOwnsSeries } from "../ownership.js";
|
|
17
17
|
import { READ_ONLY } from "./posts.js";
|
|
18
18
|
import { serializeWrite } from "../serial.js";
|
|
19
|
+
import { chooseThumbnail, describeThumbnail } from "../thumbnail.js";
|
|
20
|
+
import { seriesHintSafely, resolveSeriesId } from "../series.js";
|
|
19
21
|
/**
|
|
20
22
|
* ★ 발행 차단 지점. 이 값은 파라미터가 아니라 상수다.
|
|
21
23
|
* true = 임시저장(남에게 보이지 않음), false = 발행(되돌릴 수 없음).
|
|
@@ -37,6 +39,22 @@ const QUERY_POST_STATE = `
|
|
|
37
39
|
post(input: $input) { id title is_temp meta user { username } }
|
|
38
40
|
}
|
|
39
41
|
`;
|
|
42
|
+
/**
|
|
43
|
+
* 썸네일 입력 — 세 상태를 구분해야 한다.
|
|
44
|
+
*
|
|
45
|
+
* 미지정(undefined) → 본문 첫 이미지로 **자동** 채운다
|
|
46
|
+
* URL → 그대로 쓴다
|
|
47
|
+
* `null` / `""` → **자동 채움을 끈다** (일부러 비워 두는 사람의 의도를 지킨다)
|
|
48
|
+
*
|
|
49
|
+
* ★ nullable 을 뺐다가는 "끄는 방법"이 사라진다. 그러면 자동 채움이 강제가 된다.
|
|
50
|
+
*/
|
|
51
|
+
const THUMBNAIL_FIELD = z
|
|
52
|
+
.string()
|
|
53
|
+
.refine((v) => v === '' || isSafeImageUrl(v), 'http(s) 이미지 URL 만 허용합니다')
|
|
54
|
+
.nullable()
|
|
55
|
+
.optional()
|
|
56
|
+
.describe('썸네일 이미지 URL (http/https). 생략하면 본문 첫 이미지로 자동 설정한다. ' +
|
|
57
|
+
'자동 설정을 원하지 않으면 null 을 준다');
|
|
40
58
|
/** 벨로그가 정말 임시저장으로 받았는지 응답으로 확인한다. */
|
|
41
59
|
function assertStayedDraft(post) {
|
|
42
60
|
if (post.is_temp !== true) {
|
|
@@ -71,23 +89,31 @@ export function registerDraftTools(server, client) {
|
|
|
71
89
|
body: z.string().min(1).describe('본문 (마크다운)'),
|
|
72
90
|
tags: z.array(z.string()).default([]).describe('태그 목록'),
|
|
73
91
|
url_slug: z.string().optional().describe('생략하면 제목에서 생성'),
|
|
74
|
-
thumbnail:
|
|
75
|
-
.string()
|
|
76
|
-
.refine(isSafeImageUrl, 'http(s) 이미지 URL 만 허용합니다')
|
|
77
|
-
.optional()
|
|
78
|
-
.describe('썸네일 이미지 URL (http/https 만)'),
|
|
92
|
+
thumbnail: THUMBNAIL_FIELD,
|
|
79
93
|
series_id: z
|
|
80
94
|
.string()
|
|
81
95
|
.optional()
|
|
82
96
|
.describe('소속시킬 시리즈 id. ★ 벨로그는 임시저장 단계에서 이걸 무시한다 — ' +
|
|
83
|
-
'초안 생성 후 velog_update_draft 로 다시 지정해야 실제로
|
|
97
|
+
'초안 생성 후 velog_update_draft 로 다시 지정해야 실제로 붙는다. ' +
|
|
98
|
+
'생략하면 결과에 내 시리즈 목록을 함께 돌려준다'),
|
|
99
|
+
series_name: z
|
|
100
|
+
.string()
|
|
101
|
+
.min(1)
|
|
102
|
+
.optional()
|
|
103
|
+
.describe('시리즈 **이름**(id 대신). 저장 전에 내 시리즈에서 찾는다. ' +
|
|
104
|
+
'못 찾으면 저장하지 않고 목록을 알려준다'),
|
|
84
105
|
},
|
|
85
106
|
// 되돌릴 수 있는 쓰기다 — 비공개 초안이므로 파괴적이지 않다.
|
|
86
107
|
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false },
|
|
87
|
-
}, async ({ title, body, tags, url_slug, thumbnail, series_id }, extra) =>
|
|
108
|
+
}, async ({ title, body, tags, url_slug, thumbnail, series_id: rawSeriesId, series_name }, extra) =>
|
|
88
109
|
// ★ 같은 대상에 대한 쓰기는 줄을 세운다 — 이유는 src/serial.ts
|
|
89
110
|
serializeWrite('post:new', async () => {
|
|
90
111
|
client.requireAuth('velog_create_draft');
|
|
112
|
+
let series_id = rawSeriesId?.trim() || undefined;
|
|
113
|
+
// ★ 이름을 id 로. **저장 전에** 한다 — 못 찾으면 아무것도 안 쓴 채 멈춘다.
|
|
114
|
+
if (series_name !== undefined && series_id === undefined) {
|
|
115
|
+
series_id = await resolveSeriesId(client, await resolveMyUsername(client, extra.signal), series_name, 'velog_create_draft', extra.signal);
|
|
116
|
+
}
|
|
91
117
|
if (series_id)
|
|
92
118
|
await assertOwnsSeries(client, series_id, 'velog_create_draft');
|
|
93
119
|
// ★ 초안은 is_private:true 라 벨로그 계수(is_private:false 만 셈)에
|
|
@@ -100,8 +126,10 @@ export function registerDraftTools(server, client) {
|
|
|
100
126
|
meta: {},
|
|
101
127
|
...DRAFT_ONLY, // ★ 마지막에 펼쳐서 위 값들이 덮어쓸 수 없게 한다
|
|
102
128
|
};
|
|
103
|
-
|
|
104
|
-
|
|
129
|
+
// ★ 본문에 그림이 있으면 썸네일로 쓴다. 결정 근거는 아래에서 그대로 알린다.
|
|
130
|
+
const thumb = chooseThumbnail(thumbnail, body);
|
|
131
|
+
if (thumb.url)
|
|
132
|
+
input['thumbnail'] = thumb.url;
|
|
105
133
|
if (series_id)
|
|
106
134
|
input['series_id'] = series_id;
|
|
107
135
|
// mutate 는 재시도하지 않는다 — 응답 유실 시 초안이 중복 생성된다.
|
|
@@ -116,8 +144,10 @@ export function registerDraftTools(server, client) {
|
|
|
116
144
|
? '\n\n⚠️ 시리즈는 **적용되지 않았습니다.** 벨로그가 임시저장 생성 단계에서는' +
|
|
117
145
|
' series_id 를 무시합니다. 방금 만든 초안 id 로 velog_update_draft 를' +
|
|
118
146
|
' 한 번 호출하면 그때 실제로 붙습니다.'
|
|
119
|
-
:
|
|
120
|
-
|
|
147
|
+
: // ★ 힌트 조회가 실패해도 저장은 이미 끝났다 — 전부 삼킨다.
|
|
148
|
+
await seriesHintSafely(client, async () => data.writePost.user?.username ??
|
|
149
|
+
(await resolveMyUsername(client, extra.signal)), series_id, extra.signal);
|
|
150
|
+
return textResult(draftResult(data.writePost, '저장') + describeThumbnail(thumb) + seriesNote);
|
|
121
151
|
}));
|
|
122
152
|
server.registerTool('velog_update_draft', {
|
|
123
153
|
title: '벨로그 초안 수정',
|
|
@@ -133,16 +163,19 @@ export function registerDraftTools(server, client) {
|
|
|
133
163
|
body: z.string().min(1).describe('본문 전체 (마크다운). 부분 수정이 아니라 교체다'),
|
|
134
164
|
tags: z.array(z.string()).default([]),
|
|
135
165
|
url_slug: z.string().optional(),
|
|
136
|
-
thumbnail:
|
|
137
|
-
.string()
|
|
138
|
-
.refine(isSafeImageUrl, 'http(s) 이미지 URL 만 허용합니다')
|
|
139
|
-
.optional(),
|
|
166
|
+
thumbnail: THUMBNAIL_FIELD,
|
|
140
167
|
series_id: z.string().optional(),
|
|
168
|
+
series_name: z
|
|
169
|
+
.string()
|
|
170
|
+
.min(1)
|
|
171
|
+
.optional()
|
|
172
|
+
.describe('시리즈 **이름**(id 대신). 저장 전에 내 시리즈에서 찾는다. ' +
|
|
173
|
+
'못 찾으면 저장하지 않고 목록을 알려준다'),
|
|
141
174
|
},
|
|
142
175
|
// ★ destructive 가 맞다. 생략 필드가 보존되지 않고 초기화된다 —
|
|
143
176
|
// MCP 명세상 destructiveHint:false 는 '추가만 한다'는 뜻이라 거짓이 된다.
|
|
144
177
|
annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: true },
|
|
145
|
-
}, async ({ id, title, body, tags, url_slug, thumbnail, series_id }, extra) =>
|
|
178
|
+
}, async ({ id, title, body, tags, url_slug, thumbnail, series_id: rawSeriesId, series_name }, extra) =>
|
|
146
179
|
// ★ 같은 대상에 대한 쓰기는 줄을 세운다 — 이유는 src/serial.ts
|
|
147
180
|
serializeWrite(`post:${id}`, async () => {
|
|
148
181
|
client.requireAuth('velog_update_draft');
|
|
@@ -155,6 +188,10 @@ export function registerDraftTools(server, client) {
|
|
|
155
188
|
throw new Error(`id=${id} 인 글을 찾지 못했습니다. velog_list_drafts 로 id 를 확인하세요.`);
|
|
156
189
|
}
|
|
157
190
|
await assertOwned(client, before.post, 'velog_update_draft');
|
|
191
|
+
let series_id = rawSeriesId?.trim() || undefined;
|
|
192
|
+
if (series_name !== undefined && series_id === undefined) {
|
|
193
|
+
series_id = await resolveSeriesId(client, before.post.user?.username ?? (await resolveMyUsername(client, extra.signal)), series_name, 'velog_update_draft', extra.signal);
|
|
194
|
+
}
|
|
158
195
|
if (series_id)
|
|
159
196
|
await assertOwnsSeries(client, series_id, 'velog_update_draft');
|
|
160
197
|
if (before.post.is_temp !== true) {
|
|
@@ -173,8 +210,9 @@ export function registerDraftTools(server, client) {
|
|
|
173
210
|
meta: before.post.meta ?? {},
|
|
174
211
|
...DRAFT_ONLY,
|
|
175
212
|
};
|
|
176
|
-
|
|
177
|
-
|
|
213
|
+
const thumb = chooseThumbnail(thumbnail, body);
|
|
214
|
+
if (thumb.url)
|
|
215
|
+
input['thumbnail'] = thumb.url;
|
|
178
216
|
if (series_id)
|
|
179
217
|
input['series_id'] = series_id;
|
|
180
218
|
const data = await client.mutate(MUTATION_EDIT_POST, { input }, { signal: extra.signal });
|
|
@@ -198,7 +236,13 @@ export function registerDraftTools(server, client) {
|
|
|
198
236
|
// ★ data.editPost 는 '갱신 전' 객체다(공식 서버가 그렇게 반환한다).
|
|
199
237
|
// 그걸로 문구를 만들면 제목을 바꿔도 옛 제목이 표시된다.
|
|
200
238
|
// 이미 재조회했으므로 그 결과를 얹는다.
|
|
201
|
-
|
|
239
|
+
// ★ 초안 수정은 series_id 가 실제로 먹는 경로다(생성과 달리). 그래서
|
|
240
|
+
// 여기서는 "안 넣었으면 무엇에 넣을 수 있는지"를 알리는 값이 크다.
|
|
241
|
+
const ownerName = before.post.user?.username;
|
|
242
|
+
const seriesNote = await seriesHintSafely(client, async () => ownerName ?? (await resolveMyUsername(client, extra.signal)), series_id, extra.signal);
|
|
243
|
+
return textResult(draftResult({ ...data.editPost, title: after.post.title ?? data.editPost.title ?? null }, '수정') +
|
|
244
|
+
describeThumbnail(thumb) +
|
|
245
|
+
seriesNote);
|
|
202
246
|
}));
|
|
203
247
|
server.registerTool('velog_list_drafts', {
|
|
204
248
|
title: '내 초안 목록',
|
package/dist/tools/drafts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drafts.js","sourceRoot":"","sources":["../../src/tools/drafts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEhE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"drafts.js","sourceRoot":"","sources":["../../src/tools/drafts.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/publish.js
CHANGED
|
@@ -14,6 +14,9 @@ import { textResult } from "../format.js";
|
|
|
14
14
|
import { toUrlSlug, isSafeImageUrl } from "../slug.js";
|
|
15
15
|
import { assertOwned, assertOwnsSeries } from "../ownership.js";
|
|
16
16
|
import { serializeWrite } from "../serial.js";
|
|
17
|
+
import { chooseThumbnail, chooseThumbnailForUpdate, describeThumbnail, } from "../thumbnail.js";
|
|
18
|
+
import { seriesHintSafely, resolveSeriesId } from "../series.js";
|
|
19
|
+
import { resolveMyUsername } from "../me.js";
|
|
17
20
|
const MUTATION_WRITE_POST = `
|
|
18
21
|
mutation PublishPost($input: WritePostInput!) {
|
|
19
22
|
writePost(input: $input) { id title url_slug is_temp is_private user { username } }
|
|
@@ -33,6 +36,17 @@ const QUERY_POST_FULL = `
|
|
|
33
36
|
}
|
|
34
37
|
}
|
|
35
38
|
`;
|
|
39
|
+
/**
|
|
40
|
+
* 썸네일 입력 — 세 상태를 구분한다 (drafts.ts 와 같은 규약).
|
|
41
|
+
* 미지정 → 본문 첫 이미지로 자동 / URL → 그대로 / null·"" → 자동 채움 끄기
|
|
42
|
+
*/
|
|
43
|
+
const THUMBNAIL_FIELD = z
|
|
44
|
+
.string()
|
|
45
|
+
.refine((v) => v === '' || isSafeImageUrl(v), 'http(s) 이미지 URL 만 허용합니다')
|
|
46
|
+
.nullable()
|
|
47
|
+
.optional()
|
|
48
|
+
.describe('썸네일 이미지 URL (http/https). 생략하면 본문 첫 이미지로 자동 설정한다. ' +
|
|
49
|
+
'자동 설정을 원하지 않으면 null 을 준다');
|
|
36
50
|
function resultLines(post, verb) {
|
|
37
51
|
const username = post.user?.username;
|
|
38
52
|
const url = username && post.url_slug
|
|
@@ -211,11 +225,14 @@ export function registerPublishTools(server, client, capabilities, limiter) {
|
|
|
211
225
|
body: z.string().min(1).describe('본문 (마크다운)'),
|
|
212
226
|
tags: z.array(z.string()).default([]),
|
|
213
227
|
url_slug: z.string().optional().describe('생략하면 제목에서 생성'),
|
|
214
|
-
thumbnail:
|
|
215
|
-
.string()
|
|
216
|
-
.refine(isSafeImageUrl, 'http(s) 이미지 URL 만 허용합니다')
|
|
217
|
-
.optional(),
|
|
228
|
+
thumbnail: THUMBNAIL_FIELD,
|
|
218
229
|
series_id: z.string().optional(),
|
|
230
|
+
series_name: z
|
|
231
|
+
.string()
|
|
232
|
+
.min(1)
|
|
233
|
+
.optional()
|
|
234
|
+
.describe('시리즈 **이름**(id 대신). 저장 전에 내 시리즈에서 찾아 같은 요청에 실어 보낸다 — ' +
|
|
235
|
+
'한 번의 호출로 시리즈까지 붙는다. 못 찾으면 저장하지 않고 목록을 알려준다'),
|
|
219
236
|
...visibilityField,
|
|
220
237
|
},
|
|
221
238
|
// 공개 발행은 되돌릴 수 없다(RSS·검색·메일). destructive 로 표시한다.
|
|
@@ -224,8 +241,13 @@ export function registerPublishTools(server, client, capabilities, limiter) {
|
|
|
224
241
|
// ★ 같은 대상에 대한 쓰기는 줄을 세운다 — 이유는 src/serial.ts
|
|
225
242
|
serializeWrite('post:new', async () => {
|
|
226
243
|
client.requireAuth('velog_publish_post');
|
|
227
|
-
const { title, body, tags, url_slug, thumbnail,
|
|
244
|
+
const { title, body, tags, url_slug, thumbnail, series_name } = args;
|
|
245
|
+
let series_id = args.series_id?.trim() || undefined;
|
|
228
246
|
const isPrivate = resolvePrivacy(args.is_private);
|
|
247
|
+
// ★ 이름을 id 로 바꾼다. **저장 전에** 한다 — 못 찾으면 아무것도 안 쓴 채 멈춘다.
|
|
248
|
+
if (series_name !== undefined && series_id === undefined) {
|
|
249
|
+
series_id = await resolveSeriesId(client, await resolveMyUsername(client, extra.signal), series_name, 'velog_publish_post', extra.signal);
|
|
250
|
+
}
|
|
229
251
|
if (series_id)
|
|
230
252
|
await assertOwnsSeries(client, series_id, 'velog_publish_post');
|
|
231
253
|
// ★ 상한은 '검증을 다 통과한 뒤' 소비한다. 앞에 두면 잘못된 입력으로
|
|
@@ -241,12 +263,15 @@ export function registerPublishTools(server, client, capabilities, limiter) {
|
|
|
241
263
|
is_private: isPrivate,
|
|
242
264
|
meta: {},
|
|
243
265
|
};
|
|
244
|
-
|
|
245
|
-
|
|
266
|
+
const thumb = chooseThumbnail(thumbnail, body);
|
|
267
|
+
if (thumb.url)
|
|
268
|
+
input['thumbnail'] = thumb.url;
|
|
246
269
|
if (series_id)
|
|
247
270
|
input['series_id'] = series_id;
|
|
248
271
|
const data = await client.mutate(MUTATION_WRITE_POST, { input }, { signal: extra.signal });
|
|
249
|
-
|
|
272
|
+
// ★ 힌트 조회가 실패해도 발행은 이미 끝났다 — 삼킨다(취소만 올린다).
|
|
273
|
+
const seriesNote = await seriesHintSafely(client, async () => data.writePost.user?.username ?? (await resolveMyUsername(client, extra.signal)), series_id, extra.signal);
|
|
274
|
+
return textResult(resultLines(data.writePost, '발행') + describeThumbnail(thumb) + seriesNote);
|
|
250
275
|
}));
|
|
251
276
|
server.registerTool('velog_publish_draft', {
|
|
252
277
|
title: '초안 발행',
|
|
@@ -362,11 +387,14 @@ export function registerPublishTools(server, client, capabilities, limiter) {
|
|
|
362
387
|
body: z.string().min(1).optional().describe('생략하면 기존 본문 유지'),
|
|
363
388
|
tags: z.array(z.string()).optional().describe('생략하면 기존 태그 유지'),
|
|
364
389
|
url_slug: z.string().optional().describe('생략하면 기존 주소 유지'),
|
|
365
|
-
thumbnail:
|
|
366
|
-
.string()
|
|
367
|
-
.refine(isSafeImageUrl, 'http(s) 이미지 URL 만 허용합니다')
|
|
368
|
-
.optional(),
|
|
390
|
+
thumbnail: THUMBNAIL_FIELD,
|
|
369
391
|
series_id: z.string().optional(),
|
|
392
|
+
series_name: z
|
|
393
|
+
.string()
|
|
394
|
+
.min(1)
|
|
395
|
+
.optional()
|
|
396
|
+
.describe('시리즈 **이름**(id 대신). 저장 전에 내 시리즈에서 찾아 같은 요청에 실어 보낸다 — ' +
|
|
397
|
+
'한 번의 호출로 시리즈까지 붙는다. 못 찾으면 저장하지 않고 목록을 알려준다'),
|
|
370
398
|
...visibilityFieldForUpdate,
|
|
371
399
|
},
|
|
372
400
|
// 생략 필드는 보존하지만 넘긴 필드는 덮어쓴다. MCP 명세상 false 는
|
|
@@ -376,7 +404,12 @@ export function registerPublishTools(server, client, capabilities, limiter) {
|
|
|
376
404
|
// ★ 같은 대상에 대한 쓰기는 줄을 세운다 — 이유는 src/serial.ts
|
|
377
405
|
serializeWrite(`post:${args.id}`, async () => {
|
|
378
406
|
client.requireAuth('velog_update_post');
|
|
379
|
-
const { id, title, body, tags, url_slug, thumbnail
|
|
407
|
+
const { id, title, body, tags, url_slug, thumbnail } = args;
|
|
408
|
+
// ★ 빈 문자열은 '미지정'으로 읽는다. 예전엔 `'' ?? post.series?.id` 가
|
|
409
|
+
// `''` 로 평가돼 기존 시리즈가 전송에서 빠졌고, 전체교체형 editPost 가
|
|
410
|
+
// **연결을 끊었다.** 끊고 싶으면 벨로그에서 직접 할 일이다.
|
|
411
|
+
let series_id = args.series_id?.trim() || undefined;
|
|
412
|
+
const { series_name } = args;
|
|
380
413
|
// ★ 병합 수정. 기존 값을 읽어 생략 필드를 채운다 — 초안 도구에서
|
|
381
414
|
// '생략하면 초기화'가 사고를 부른다는 걸 확인했으므로 이쪽은 보존한다.
|
|
382
415
|
const current = await client.request(QUERY_POST_FULL, { input: { id } });
|
|
@@ -393,6 +426,10 @@ export function registerPublishTools(server, client, capabilities, limiter) {
|
|
|
393
426
|
throw new Error(`id=${id} 의 발행 상태를 확인할 수 없거나 임시저장 글입니다 ` +
|
|
394
427
|
`(is_temp=${post.is_temp}). 초안 수정은 velog_update_draft 를 쓰세요.`);
|
|
395
428
|
}
|
|
429
|
+
// ★ 이름을 id 로 바꾼다. **저장 전에** 한다 — 못 찾으면 아무것도 안 쓴 채 멈춘다.
|
|
430
|
+
if (series_name !== undefined && series_id === undefined) {
|
|
431
|
+
series_id = await resolveSeriesId(client, post.user?.username ?? (await resolveMyUsername(client, extra.signal)), series_name, 'velog_update_post', extra.signal);
|
|
432
|
+
}
|
|
396
433
|
if (series_id)
|
|
397
434
|
await assertOwnsSeries(client, series_id, 'velog_update_post');
|
|
398
435
|
// ★★ 공개 범위는 **기존 값을 잇는다.** 게이트가 꺼져 있어도 마찬가지다.
|
|
@@ -439,9 +476,10 @@ export function registerPublishTools(server, client, capabilities, limiter) {
|
|
|
439
476
|
// ★ meta 를 {} 로 보내면 short_description 등이 지워진다. 기존 값 유지.
|
|
440
477
|
meta: post.meta ?? {},
|
|
441
478
|
};
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
479
|
+
// ★ 병합 수정이라 기존 썸네일이 우선이다 — 규칙은 thumbnail.ts 참고.
|
|
480
|
+
const thumb = chooseThumbnailForUpdate(thumbnail, post.thumbnail, body ?? post.body ?? '');
|
|
481
|
+
if (thumb.url)
|
|
482
|
+
input['thumbnail'] = thumb.url;
|
|
445
483
|
const nextSeries = series_id ?? post.series?.id;
|
|
446
484
|
if (nextSeries)
|
|
447
485
|
input['series_id'] = nextSeries;
|
|
@@ -451,7 +489,9 @@ export function registerPublishTools(server, client, capabilities, limiter) {
|
|
|
451
489
|
is_private: isPrivate,
|
|
452
490
|
content: input,
|
|
453
491
|
});
|
|
454
|
-
|
|
492
|
+
// ★ 이미 시리즈에 들어 있으면(nextSeries) 참견하지 않는다.
|
|
493
|
+
const seriesNote = await seriesHintSafely(client, async () => post.user?.username ?? (await resolveMyUsername(client, extra.signal)), nextSeries, extra.signal);
|
|
494
|
+
return textResult(resultLines(after, '수정') + describeThumbnail(thumb) + seriesNote);
|
|
455
495
|
}));
|
|
456
496
|
}
|
|
457
497
|
//# sourceMappingURL=publish.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/tools/publish.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/tools/publish.ts"],"names":[],"mappings":"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"}
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@milcho0604/velog-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@milcho0604/velog-mcp",
|
|
9
|
-
"version": "0.
|
|
9
|
+
"version": "0.5.0",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
package/package.json
CHANGED