sh-ui-cli 0.45.0 → 0.45.2
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/data/changelog/versions.json +24 -0
- package/package.json +1 -1
- package/src/mcp-init.mjs +13 -5
- package/src/mcp.mjs +22 -5
|
@@ -2,6 +2,30 @@
|
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$description": "sh-ui 릴리즈 노트 단일 소스. docs(React)와 showcase(Flutter)가 함께 읽는다. 새 릴리즈마다 맨 앞에 추가.",
|
|
4
4
|
"versions": [
|
|
5
|
+
{
|
|
6
|
+
"version": "0.45.2",
|
|
7
|
+
"date": "2026-04-30",
|
|
8
|
+
"title": "추가 하드코딩 제거 — release URL · MCP 패키지명 동적 파생",
|
|
9
|
+
"type": "patch",
|
|
10
|
+
"highlights": [
|
|
11
|
+
"**`scripts/release.mjs` 의 GitHub URL 동적화** — `cli/package.json` 의 `repository.url` 에서 base URL 추출 (`.git` suffix + `git+` prefix 정리) 후 `${base}/releases/tag/v${ver}` 빌드. owner/repo 이름이 바뀌면 cli/package.json 한 곳만 갱신하면 따라옴.",
|
|
12
|
+
"**MCP 서버의 cli 패키지명 동적 읽기** — `mcp-init.mjs` 의 `SH_UI_ENTRY.args` 와 `mcp.mjs` 의 `SERVER_INSTRUCTIONS`/tool description 안 `npx <cli> create ...` 예시가 모두 `package.json` 의 `name` 에서 동적 보간. cli 가 rename 되어도 자동 동기화.",
|
|
13
|
+
"기능 변경 0 — drift 위험만 추가 제거. v0.45.1 의 mcp.mjs version 동적 읽기 + `pnpm release` 에 이은 후속 정리."
|
|
14
|
+
],
|
|
15
|
+
"url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.45.2"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"version": "0.45.1",
|
|
19
|
+
"date": "2026-04-30",
|
|
20
|
+
"title": "릴리즈 자동화 — `pnpm release` 명령 + mcp.mjs 동적 버전",
|
|
21
|
+
"type": "patch",
|
|
22
|
+
"highlights": [
|
|
23
|
+
"**`pnpm release <patch|minor|major|X.Y.Z>` 명령 신설** — packages/cli/package.json 의 version 갱신 + packages/changelog/versions.json 에 placeholder 엔트리 prepend 를 한 번에 처리. 매 릴리즈 6단계 수작업 → highlights 채우기 + git/PR/merge/tag 6 명령으로 단순화. 거꾸로 가는 버전·중복 엔트리·잘못된 형식 인자는 모두 거부.",
|
|
24
|
+
"**MCP 서버 버전 동적 읽기** — `packages/cli/src/mcp.mjs` 가 시작 시점에 package.json 의 version 을 읽도록 변경. 하드코딩된 `version: \"X.Y.Z\"` 문자열 제거 — 매 릴리즈마다 손으로 갱신할 필요 영구 사라짐 (실제로 v0.45.0 출고 시 거의 빠뜨릴 뻔한 drift 위험을 잡은 변경).",
|
|
25
|
+
"기능 변경 0 — 릴리즈 워크플로 신뢰성만 향상."
|
|
26
|
+
],
|
|
27
|
+
"url": "https://github.com/sanghyeonKim0201/sh-ui/releases/tag/v0.45.1"
|
|
28
|
+
},
|
|
5
29
|
{
|
|
6
30
|
"version": "0.45.0",
|
|
7
31
|
"date": "2026-04-30",
|
package/package.json
CHANGED
package/src/mcp-init.mjs
CHANGED
|
@@ -19,10 +19,18 @@ import { homedir, platform as osPlatform } from "node:os";
|
|
|
19
19
|
|
|
20
20
|
const CLIENTS = ["claude-code", "cursor", "claude-desktop"];
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
/**
|
|
23
|
+
* `npx -y <cliName> mcp` 형태의 MCP 엔트리 빌더.
|
|
24
|
+
* 패키지명을 package.json 에서 동적으로 읽어 cli rename 시에도 자동 따라감.
|
|
25
|
+
*/
|
|
26
|
+
async function buildShUiEntry() {
|
|
27
|
+
const pkgUrl = new URL("../package.json", import.meta.url);
|
|
28
|
+
const pkg = JSON.parse(await readFile(pkgUrl, "utf8"));
|
|
29
|
+
return {
|
|
30
|
+
command: "npx",
|
|
31
|
+
args: ["-y", pkg.name, "mcp"],
|
|
32
|
+
};
|
|
33
|
+
}
|
|
26
34
|
|
|
27
35
|
/** 클라이언트·스코프별 설정 파일 절대 경로. */
|
|
28
36
|
function resolveConfigPath(client, scope, cwd) {
|
|
@@ -115,7 +123,7 @@ export async function mcpInit({ cwd, args }) {
|
|
|
115
123
|
}
|
|
116
124
|
|
|
117
125
|
const before = config.mcpServers["sh-ui"];
|
|
118
|
-
config.mcpServers["sh-ui"] =
|
|
126
|
+
config.mcpServers["sh-ui"] = await buildShUiEntry();
|
|
119
127
|
|
|
120
128
|
await mkdir(dirname(configPath), { recursive: true });
|
|
121
129
|
await writeFile(configPath, JSON.stringify(config, null, 2) + "\n", "utf8");
|
package/src/mcp.mjs
CHANGED
|
@@ -120,7 +120,22 @@ function resolveCwd(input) {
|
|
|
120
120
|
return input?.cwd ? resolve(input.cwd) : process.cwd();
|
|
121
121
|
}
|
|
122
122
|
|
|
123
|
-
|
|
123
|
+
/**
|
|
124
|
+
* 하드코딩 제거 — packages/cli/package.json 에서 version + name 을 시작 시점에 읽어 그대로 사용.
|
|
125
|
+
* mcp.mjs 가 src/ 에 있고 package.json 은 그 상위 (../package.json) 라 상대 URL 로 해석.
|
|
126
|
+
* 출고 모드 (data/ 번들) 에서도 동일 경로 (src/mcp.mjs ↔ package.json) 라 그대로 동작.
|
|
127
|
+
*
|
|
128
|
+
* version: McpServer 식별자 — 클라이언트가 캐시·진단용으로 표시
|
|
129
|
+
* name: SERVER_INSTRUCTIONS 의 `npx <cli> ...` 예시에 보간 — cli rename 시 자동 따라감
|
|
130
|
+
*/
|
|
131
|
+
async function readPackageMeta() {
|
|
132
|
+
const pkgUrl = new URL("../package.json", import.meta.url);
|
|
133
|
+
const pkg = JSON.parse(await readFile(pkgUrl, "utf8"));
|
|
134
|
+
return { version: pkg.version, name: pkg.name };
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
function buildServerInstructions(cliName) {
|
|
138
|
+
return `sh-ui — Base UI 위에 빌드된 React/Flutter 디자인 시스템.
|
|
124
139
|
|
|
125
140
|
## 새 프로젝트를 만드는 경우
|
|
126
141
|
|
|
@@ -131,7 +146,7 @@ const SERVER_INSTRUCTIONS = `sh-ui — Base UI 위에 빌드된 React/Flutter
|
|
|
131
146
|
- 인터랙티브 프롬프트 없이 한 번에 스캐폴드 + 토큰 + sh-ui.config.json 생성
|
|
132
147
|
|
|
133
148
|
**2차 — Bash** (사용자가 직접 셸에서 돌리고 싶다고 명시할 때만):
|
|
134
|
-
npx
|
|
149
|
+
npx ${cliName} create my-app --platform next --structure standalone --yes
|
|
135
150
|
|
|
136
151
|
\`create-next-app\` + \`sh_ui_init\` 조합은 **쓰지 말 것** — 위 두 경로가 더 짧고 sh-ui 관용에 맞다.
|
|
137
152
|
|
|
@@ -149,13 +164,15 @@ const SERVER_INSTRUCTIONS = `sh-ui — Base UI 위에 빌드된 React/Flutter
|
|
|
149
164
|
- \`sh_ui_add_component\` / \`sh_ui_remove_component\` — 설치/삭제
|
|
150
165
|
- \`sh_ui_get_changelog\` — 최근 변경 내역
|
|
151
166
|
`;
|
|
167
|
+
}
|
|
152
168
|
|
|
153
169
|
export async function startMcpServer() {
|
|
170
|
+
const { version, name: cliName } = await readPackageMeta();
|
|
154
171
|
const server = new McpServer(
|
|
155
|
-
{ name: "sh-ui", version
|
|
172
|
+
{ name: "sh-ui", version },
|
|
156
173
|
{
|
|
157
174
|
capabilities: { tools: {} },
|
|
158
|
-
instructions:
|
|
175
|
+
instructions: buildServerInstructions(cliName),
|
|
159
176
|
},
|
|
160
177
|
);
|
|
161
178
|
|
|
@@ -175,7 +192,7 @@ export async function startMcpServer() {
|
|
|
175
192
|
{
|
|
176
193
|
description:
|
|
177
194
|
"빈 폴더에 sh-ui 프로젝트 스캐폴드 — Next.js (standalone/monorepo) 또는 Flutter. " +
|
|
178
|
-
|
|
195
|
+
`FSD 폴더 구조 + 토큰 + sh-ui.config.json 일괄 생성. 사용자가 '새 프로젝트' / '빈 폴더' / '스캐폴드부터' 류 요청을 하면 이 툴 사용 (Bash 로 npx ${cliName} create 직접 호출보다 우선).`,
|
|
179
196
|
inputSchema: {
|
|
180
197
|
name: z.string().min(1)
|
|
181
198
|
.describe("프로젝트 디렉토리 이름. 예: my-app"),
|