@roottale/cms-mcp 0.45.0 → 0.46.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/CHANGELOG.md +6 -0
- package/dist/index.js +1 -1
- package/docs/collections.md +39 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @roottale/cms-mcp
|
|
2
2
|
|
|
3
|
+
## 0.46.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 69f7d52: 콘텐츠 유형(Collection)에 **주소 없는 유형**(`basePath: ""`)을 지원합니다(ADR-0060). 강사·리뷰처럼 페이지 안에서 불러와 쓰는 콘텐츠는 이제 라우트 없이 운영할 수 있습니다 — `resolvePostUrl`/`resolvePostPath`는 이런 유형의 글에 항상 `null`을 반환하고, `validateCollections`는 basePath 형식·중복 검사를 건너뜁니다(여러 개 공존 허용). 외부 사이트는 posts API의 `collectionKey` 필터로 내용만 가져다 페이지 안에서 렌더하면 됩니다(`RootTaleBlogList`를 임베디드로 쓸 때는 자체 `postHref` 제공 권장). 소속 판정(`resolvePostCollection`)은 영향 없음 — key만으로 소속이 성립합니다. 기존 유형(basePath 있는 유형)은 동작 변화가 없습니다.
|
|
8
|
+
|
|
3
9
|
## 0.45.0
|
|
4
10
|
|
|
5
11
|
### Patch Changes
|
package/dist/index.js
CHANGED
|
@@ -801,7 +801,7 @@ function registerTools(server) {
|
|
|
801
801
|
}
|
|
802
802
|
|
|
803
803
|
// src/server.ts
|
|
804
|
-
var VERSION = true ? "0.
|
|
804
|
+
var VERSION = true ? "0.46.0" : "dev";
|
|
805
805
|
var SERVER_INSTRUCTIONS = `
|
|
806
806
|
roottale-cms-mcp\uB294 RootTale CMS\uB97C \uC678\uBD80 \uC0AC\uC774\uD2B8(\uC8FC\uB85C Next.js)\uC5D0 \uC5F0\uB3D9\uD558\uACE0
|
|
807
807
|
\uAE00\xB7\uC378\uB124\uC77C\xB7\uBCF8\uBB38 \uC774\uBBF8\uC9C0\uB97C \uC790\uB3D9\uD654\uD558\uAE30 \uC704\uD55C \uBB38\uC11C\xB7\uC608\uC2DC \uCF54\uB4DC\xB7API tool\uC744 \uC81C\uACF5\uD569\uB2C8\uB2E4.
|
package/docs/collections.md
CHANGED
|
@@ -42,6 +42,38 @@ description: 같은 글 풀을 공지 게시판(/notice)·블로그(/blog) 등
|
|
|
42
42
|
- **같은 글이 두 섹션에 안 뜸**: 공지 글을 `/blog/개강안내`로 열면 404, 반대도 404(가드).
|
|
43
43
|
- **섹션(`collection_key`)이 없는 글**은 sitemap·상세 라우트에서 제외됩니다.
|
|
44
44
|
|
|
45
|
+
## 주소 없는 유형 (`base_path: ""`) — 페이지 안에서만 쓰는 콘텐츠
|
|
46
|
+
|
|
47
|
+
강사·리뷰처럼 **독립된 URL이 없고 홈페이지의 다른 페이지 안에서 불러와 쓰는**
|
|
48
|
+
콘텐츠는 섹션의 **주소 경로를 비워두면** 됩니다. `base_path`가 빈 문자열이면:
|
|
49
|
+
|
|
50
|
+
- `resolvePostUrl`/`resolvePostPath` (cms-core) 가 이 섹션 글에 대해 항상
|
|
51
|
+
**`null`** 을 반환 — `detail: false`(목록 전용) 여부와 무관합니다.
|
|
52
|
+
- 라우트·sitemap·feed·`/{basePath}/categories/{slug}` 아카이브를 **일절
|
|
53
|
+
파생하지 않습니다**. `createSitemapIndex`/`createFeedRoute` 등 route 팩토리에
|
|
54
|
+
넘겨도 이 섹션의 글은 조용히 빠집니다(에러 아님).
|
|
55
|
+
- 소속 판정(`resolvePostCollection`)은 영향 없습니다 — 글은 여전히 이 섹션에
|
|
56
|
+
속하고, 글쓰기 화면의 "어디에 올릴까요?" 에도 그대로 나타납니다. **주소와
|
|
57
|
+
소속은 별개**입니다.
|
|
58
|
+
- 외부 사이트는 이 유형의 내용을 **posts API의 `collectionKey` 필터**
|
|
59
|
+
(`fetchPosts({ collectionKey: "instructors" })`)로 가져와 원하는 페이지 안에서
|
|
60
|
+
직접 렌더합니다. `RootTaleBlogList` 를 이 유형에 임베디드로 쓸 때는 자체
|
|
61
|
+
`postHref` 를 제공하세요 — 컴포넌트의 기본 링크 로직은 이 유형의 글에 목록
|
|
62
|
+
페이지 폴백조차 만들지 않습니다(목록 페이지 자체가 없으므로).
|
|
63
|
+
|
|
64
|
+
```ts
|
|
65
|
+
export const COLLECTIONS: RouteCollection[] = [
|
|
66
|
+
{ key: "blog", basePath: "/blog", categories: ["column", "news"], feed: true, archives: true },
|
|
67
|
+
// 주소 없음 — 강사 소개는 /about 페이지 안에서 fetchPosts 로 불러와 렌더.
|
|
68
|
+
{ key: "instructors", basePath: "", categories: [] },
|
|
69
|
+
];
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
어드민 "콘텐츠 유형" 편집기에서는 **주소 경로 칸을 비워두면** 됩니다 — 비우면
|
|
73
|
+
자동으로 RSS 피드·카테고리 모음·공유 미리보기 이미지·글별 상세 페이지 토글이
|
|
74
|
+
꺼지고 비활성화됩니다(주소가 없으니 의미가 없는 기능들). 카드에는 "주소 없음"
|
|
75
|
+
표시가 붙습니다.
|
|
76
|
+
|
|
45
77
|
## 목록 전용 유형 (`detail: false`) — 상세 페이지 없음
|
|
46
78
|
|
|
47
79
|
글별 상세 라우트를 만들지 않고 **목록 화면에서만 보여주는** 섹션을 만들 수 있습니다.
|
|
@@ -97,7 +129,7 @@ export const COLLECTIONS: RouteCollection[] = [
|
|
|
97
129
|
|---|---|
|
|
98
130
|
| key | 안정 식별자 (`notice`, `blog`) — 사이트 코드와 맞물리므로 보통 고정 |
|
|
99
131
|
| 라벨 | 메뉴·작성 화면 표시 이름 (공지/블로그) |
|
|
100
|
-
| basePath | URL 앞부분 (`/notice`, `/blog`) |
|
|
132
|
+
| basePath | URL 앞부분 (`/notice`, `/blog`). **비워두면 주소 없는 유형** — 아래 "주소 없는 유형" 참고 |
|
|
101
133
|
| feed / archives / og | RSS 포함 / 주제 아카이브 / 동적 OG |
|
|
102
134
|
| 글별 상세 페이지 (`detail`) | 기본 켜짐. 끄면 목록 전용(상세 URL 없음) — 아래 "목록 전용 유형" 참고 |
|
|
103
135
|
| 순서 | 메뉴·표시 순서 |
|
|
@@ -360,4 +392,9 @@ basePath를 **코드 수정 없이 어드민에서 자유롭게** 바꾸고 싶
|
|
|
360
392
|
basePath로 접근하세요. basePath를 바꿨다면 사이트에 그 라우트 파일이 있는지 확인.
|
|
361
393
|
- **주제 아카이브가 비어요** → 그 주제(카테고리)가 섹션의 `categories`(주제 목록)에 있고
|
|
362
394
|
`archives`가 켜져 있는지 확인.
|
|
363
|
-
- **sitemap에 글이 빠졌어요** → 그 글에 섹션이
|
|
395
|
+
- **sitemap에 글이 빠졌어요** → 그 글에 섹션이 없거나, 소속 섹션의 `base_path`가
|
|
396
|
+
빈 값(주소 없는 유형)이면 의도적으로 제외됩니다.
|
|
397
|
+
- **`RootTaleBlogList` 카드를 눌렀는데 이상한 곳으로 가요** → 그 글의 섹션이
|
|
398
|
+
주소 없는 유형이면 목록 페이지가 없어 기본 링크 로직이 레거시 `/blog/{slug}`
|
|
399
|
+
로 폴백합니다. 이 유형은 `RootTaleBlogList` 로 임베디드 렌더하지 말고
|
|
400
|
+
`fetchPosts({ collectionKey })` 로 직접 페이지에 꽂아 쓰세요.
|