From e4bf69833fa9a4dd81671ba65e36180927a04523 Mon Sep 17 00:00:00 2001 From: jinmingyang <2214962083@qq.com> Date: Mon, 26 Jan 2026 21:39:11 +0800 Subject: [PATCH 1/7] chore: remove obsolete VibeSync configuration files and update changelog links --- .vibe-sync.json | 13 ------------- cli/.vibe-sync.json | 12 ------------ website/content/en/_meta.ts | 2 +- website/content/zh/_meta.ts | 2 +- 4 files changed, 2 insertions(+), 27 deletions(-) delete mode 100644 .vibe-sync.json delete mode 100644 cli/.vibe-sync.json diff --git a/.vibe-sync.json b/.vibe-sync.json deleted file mode 100644 index c3cdf74..0000000 --- a/.vibe-sync.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "version": "1.0.0", - "level": "project", - "source_tool": "claude-code", - "target_tools": ["codex", "cursor", "opencode"], - "sync_config": { - "skills": true, - "mcp": true, - "agents": false, - "commands": true - }, - "use_symlinks_for_skills": true -} diff --git a/cli/.vibe-sync.json b/cli/.vibe-sync.json deleted file mode 100644 index f24025c..0000000 --- a/cli/.vibe-sync.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "version": "1.0.0", - "level": "project", - "source_tool": "claude-code", - "target_tools": ["codex", "cursor", "opencode"], - "sync_config": { - "skills": true, - "mcp": true, - "agents": false, - "commands": true - } -} diff --git a/website/content/en/_meta.ts b/website/content/en/_meta.ts index d9f0b81..70ec68b 100644 --- a/website/content/en/_meta.ts +++ b/website/content/en/_meta.ts @@ -35,7 +35,7 @@ export default { }, changelog: { title: "Changelog", - href: "https://github.com/nicepkg/vsync/blob/main/CHANGELOG.md", + href: "https://github.com/nicepkg/vsync/blob/main/cli/CHANGELOG.md", }, release: { title: "Release", diff --git a/website/content/zh/_meta.ts b/website/content/zh/_meta.ts index 923a129..5f45b04 100644 --- a/website/content/zh/_meta.ts +++ b/website/content/zh/_meta.ts @@ -35,7 +35,7 @@ export default { }, changelog: { title: "更新日志", - href: "https://github.com/nicepkg/vsync/blob/main/CHANGELOG.md", + href: "https://github.com/nicepkg/vsync/blob/main/cli/CHANGELOG.md", }, release: { title: "发布", From c6b436762fffe6dd8ff14840a002766827a3ec9f Mon Sep 17 00:00:00 2001 From: jinmingyang <2214962083@qq.com> Date: Mon, 26 Jan 2026 21:53:30 +0800 Subject: [PATCH 2/7] chore: update package references to @nicepkg/vsync and release version 1.0.9 --- .changeset/four-dogs-fold08.md | 5 ----- .changeset/four-dogs-fold09.md | 5 +++++ .github/workflows/preview-package.yml | 2 +- README.md | 4 ++-- README_cn.md | 4 ++-- cli/package.json | 2 +- package.json | 4 ++-- scripts/release-publish.sh | 2 +- website/content/en/docs/advanced-features.mdx | 4 ++-- website/content/en/docs/getting-started.mdx | 4 ++-- website/content/en/docs/index.mdx | 2 +- website/content/en/docs/quick-reference.mdx | 2 +- website/content/zh/docs/advanced-features.mdx | 4 ++-- website/content/zh/docs/getting-started.mdx | 4 ++-- website/content/zh/docs/index.mdx | 2 +- website/content/zh/docs/quick-reference.mdx | 2 +- website/src/components/home/landing-page.tsx | 2 +- 17 files changed, 27 insertions(+), 27 deletions(-) delete mode 100644 .changeset/four-dogs-fold08.md create mode 100644 .changeset/four-dogs-fold09.md diff --git a/.changeset/four-dogs-fold08.md b/.changeset/four-dogs-fold08.md deleted file mode 100644 index 679117a..0000000 --- a/.changeset/four-dogs-fold08.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"vsync": patch ---- - -release first version 08 diff --git a/.changeset/four-dogs-fold09.md b/.changeset/four-dogs-fold09.md new file mode 100644 index 0000000..2d34ddc --- /dev/null +++ b/.changeset/four-dogs-fold09.md @@ -0,0 +1,5 @@ +--- +"@nicepkg/vsync": patch +--- + +release first version 09 diff --git a/.github/workflows/preview-package.yml b/.github/workflows/preview-package.yml index 7d03150..25e2122 100644 --- a/.github/workflows/preview-package.yml +++ b/.github/workflows/preview-package.yml @@ -24,7 +24,7 @@ jobs: matrix: package: # When you add a new package, add a new line here - - name: "vsync" + - name: "@nicepkg/vsync" dir: "cli" display: "vsync (CLI)" # - name: "core" diff --git a/README.md b/README.md index 2ee6a0f..ca47a7d 100644 --- a/README.md +++ b/README.md @@ -117,10 +117,10 @@ flowchart TD ```bash # Option 1: Run directly with npx (no installation needed) -npx vsync +npx @nicepkg/vsync # Option 2: Install globally with npm -npm install -g vsync +npm install -g @nicepkg/vsync # Verify installation vsync --version diff --git a/README_cn.md b/README_cn.md index 0968e7c..20ca577 100644 --- a/README_cn.md +++ b/README_cn.md @@ -117,10 +117,10 @@ flowchart TD ```bash # 方式 1: 使用 npx 直接运行 (无需安装) -npx vsync +npx @nicepkg/vsync # 方式 2: 使用 npm 全局安装 -npm install -g vsync +npm install -g @nicepkg/vsync # 验证安装 vsync --version diff --git a/cli/package.json b/cli/package.json index b44bd45..ecf90c9 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,5 +1,5 @@ { - "name": "vsync", + "name": "@nicepkg/vsync", "version": "1.0.4", "description": "CLI for vsync - AI coding tool config synchronizer", "type": "module", diff --git a/package.json b/package.json index b877774..ead1c38 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,8 @@ "build:website": "pnpm --filter website build", "start:website": "pnpm --filter website start", "start:static-website": "pnpm --filter website start:static", - "dev:cli": "pnpm --filter vsync dev", - "build:cli": "pnpm --filter vsync build", + "dev:cli": "pnpm --filter @nicepkg/vsync dev", + "build:cli": "pnpm --filter @nicepkg/vsync build", "test": "pnpm -r run test", "test:coverage": "pnpm -r run test:coverage", "lint": "pnpm -r run lint", diff --git a/scripts/release-publish.sh b/scripts/release-publish.sh index 463ecd6..25d06b0 100644 --- a/scripts/release-publish.sh +++ b/scripts/release-publish.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash set -euo pipefail -pnpm --filter vsync run build +pnpm --filter @nicepkg/vsync run build pnpm ci:publish pnpm changeset tag diff --git a/website/content/en/docs/advanced-features.mdx b/website/content/en/docs/advanced-features.mdx index f569381..3d79ed8 100644 --- a/website/content/en/docs/advanced-features.mdx +++ b/website/content/en/docs/advanced-features.mdx @@ -332,7 +332,7 @@ jobs: node-version: '18' - name: Sync configs - run: npx vsync sync --yes + run: npx @nicepkg/vsync sync --yes env: # Add any required environment variables GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -349,7 +349,7 @@ Automatically sync before commits: # Check if .vsync.json exists if [ -f .vsync.json ]; then echo "Running vsync..." - npx vsync sync --yes + npx @nicepkg/vsync sync --yes # Add synced files to commit git add .cursor/ .opencode/ .codex/ diff --git a/website/content/en/docs/getting-started.mdx b/website/content/en/docs/getting-started.mdx index f903072..d0e5d35 100644 --- a/website/content/en/docs/getting-started.mdx +++ b/website/content/en/docs/getting-started.mdx @@ -16,13 +16,13 @@ vsync can be used without installation via `npx`, or installed globally for conv No installation needed—just run: ```bash -npx vsync +npx @nicepkg/vsync ``` ### Option 2: Global Installation ```bash -npm install -g vsync +npm install -g @nicepkg/vsync ``` Verify the installation: diff --git a/website/content/en/docs/index.mdx b/website/content/en/docs/index.mdx index 33f35e9..30def32 100644 --- a/website/content/en/docs/index.mdx +++ b/website/content/en/docs/index.mdx @@ -78,7 +78,7 @@ Native support for English and Chinese (中文). ```bash # Install -npm install -g vsync +npm install -g @nicepkg/vsync # Initialize vsync init diff --git a/website/content/en/docs/quick-reference.mdx b/website/content/en/docs/quick-reference.mdx index 2a5fb11..30090f2 100644 --- a/website/content/en/docs/quick-reference.mdx +++ b/website/content/en/docs/quick-reference.mdx @@ -294,7 +294,7 @@ vsync sync ```bash # GitHub Actions - name: Sync configs - run: npx vsync sync --yes + run: npx @nicepkg/vsync sync --yes ``` **[Learn more →](../advanced-features#cicd-integration)** diff --git a/website/content/zh/docs/advanced-features.mdx b/website/content/zh/docs/advanced-features.mdx index 6c4c644..7748b5b 100644 --- a/website/content/zh/docs/advanced-features.mdx +++ b/website/content/zh/docs/advanced-features.mdx @@ -332,7 +332,7 @@ jobs: node-version: '18' - name: Sync configs - run: npx vsync sync --yes + run: npx @nicepkg/vsync sync --yes env: # 添加任何所需的环境变量 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -349,7 +349,7 @@ jobs: # 检查 .vsync.json 是否存在 if [ -f .vsync.json ]; then echo "Running vsync..." - npx vsync sync --yes + npx @nicepkg/vsync sync --yes # 将同步的文件添加到提交 git add .cursor/ .opencode/ .codex/ diff --git a/website/content/zh/docs/getting-started.mdx b/website/content/zh/docs/getting-started.mdx index 6380a5a..2ee6ad6 100644 --- a/website/content/zh/docs/getting-started.mdx +++ b/website/content/zh/docs/getting-started.mdx @@ -16,13 +16,13 @@ vsync 可以通过 `npx` 直接使用无需安装,也可以全局安装以便 无需安装——直接运行: ```bash -npx vsync +npx @nicepkg/vsync ``` ### 方式 2:全局安装 ```bash -npm install -g vsync +npm install -g @nicepkg/vsync ``` 验证安装: diff --git a/website/content/zh/docs/index.mdx b/website/content/zh/docs/index.mdx index 2b46bcd..56190dd 100644 --- a/website/content/zh/docs/index.mdx +++ b/website/content/zh/docs/index.mdx @@ -78,7 +78,7 @@ vsync 管理以下配置类型: ```bash # 安装 -npm install -g vsync +npm install -g @nicepkg/vsync # 初始化 vsync init diff --git a/website/content/zh/docs/quick-reference.mdx b/website/content/zh/docs/quick-reference.mdx index feced50..0301f70 100644 --- a/website/content/zh/docs/quick-reference.mdx +++ b/website/content/zh/docs/quick-reference.mdx @@ -294,7 +294,7 @@ vsync sync ```bash # GitHub Actions - name: Sync configs - run: npx vsync sync --yes + run: npx @nicepkg/vsync sync --yes ``` **[了解更多 →](../advanced-features#cicd-integration)** diff --git a/website/src/components/home/landing-page.tsx b/website/src/components/home/landing-page.tsx index 8f23a2a..2f8b5f5 100644 --- a/website/src/components/home/landing-page.tsx +++ b/website/src/components/home/landing-page.tsx @@ -272,7 +272,7 @@ export function LandingPage({ lang }: { lang: "en" | "zh" }) {
$ - npx vsync sync + npx @nicepkg/vsync sync
From 70b0ef1c9746d20acc2fde23c48df1f24610b90d Mon Sep 17 00:00:00 2001 From: jinmingyang <2214962083@qq.com> Date: Mon, 26 Jan 2026 22:08:46 +0800 Subject: [PATCH 3/7] chore: update package.json with repository details, author information, and keywords --- cli/package.json | 49 ++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 45 insertions(+), 4 deletions(-) diff --git a/cli/package.json b/cli/package.json index d9a0e52..48f5b3c 100644 --- a/cli/package.json +++ b/cli/package.json @@ -3,6 +3,51 @@ "version": "1.0.5", "description": "CLI for vsync - AI coding tool config synchronizer", "type": "module", + "repository": { + "type": "git", + "url": "git+https://github.com/nicepkg/vsync.git" + }, + "homepage": "https://github.com/nicepkg/vsync#readme", + "bugs": { + "url": "https://github.com/nicepkg/vsync/issues" + }, + "license": "MIT", + "keywords": [ + "ai", + "ai-coding", + "ai-tools", + "ai-assistant", + "claude", + "claude-code", + "cursor", + "opencode", + "codex", + "mcp", + "mcp-server", + "mcp-servers", + "config", + "config-sync", + "configuration", + "sync", + "synchronize", + "cli", + "devtools", + "developer-tools", + "productivity", + "skills", + "agents", + "commands", + "ide", + "vscode", + "copilot", + "coding-assistant", + "automation" + ], + "author": { + "name": "Jinming Yang", + "email": "2214962083@qq.com", + "url": "https://github.com/2214962083" + }, "publishConfig": { "access": "public" }, @@ -49,9 +94,5 @@ "typescript-eslint": "^8.53.1", "vitest": "^4.0.18", "zod": "^4.3.6" - }, - "engines": { - "node": ">=24.0.0", - "pnpm": ">=10.0.0" } } From c160cd4d9faa45f7225de2a3479b109939bc17c2 Mon Sep 17 00:00:00 2001 From: jinmingyang <2214962083@qq.com> Date: Mon, 26 Jan 2026 22:12:12 +0800 Subject: [PATCH 4/7] chore: update package.json description to clarify functionality of the CLI tool --- cli/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/package.json b/cli/package.json index 48f5b3c..34c67bc 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,7 +1,7 @@ { "name": "@nicepkg/vsync", "version": "1.0.5", - "description": "CLI for vsync - AI coding tool config synchronizer", + "description": "Sync MCP servers, Skills, Agents & Commands across Claude Code, Cursor, OpenCode, Codex. One config, all tools.", "type": "module", "repository": { "type": "git", From aaa18d284370510c81203e2b02fcb2a02f93ead1 Mon Sep 17 00:00:00 2001 From: jinmingyang <2214962083@qq.com> Date: Mon, 26 Jan 2026 22:20:33 +0800 Subject: [PATCH 5/7] chore: remove obsolete changeset for version 10 --- .changeset/four-dogs-fold10.md | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 .changeset/four-dogs-fold10.md diff --git a/.changeset/four-dogs-fold10.md b/.changeset/four-dogs-fold10.md deleted file mode 100644 index fd0af82..0000000 --- a/.changeset/four-dogs-fold10.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@nicepkg/vsync": patch ---- - -release first version 10 From 72de450ba8f5541b2490f265bbfd6f3bfdb2b687 Mon Sep 17 00:00:00 2001 From: jinmingyang <2214962083@qq.com> Date: Mon, 26 Jan 2026 22:37:51 +0800 Subject: [PATCH 6/7] feat: add isMainModule function to determine if the current module is the main entry point --- cli/src/index.ts | 22 +++++++++++++++- cli/src/utils/config-initializer.ts | 4 +-- cli/test/index.test.ts | 39 ++++++++++++++++++++++++++++- 3 files changed, 61 insertions(+), 4 deletions(-) diff --git a/cli/src/index.ts b/cli/src/index.ts index 7bcfd50..699c8c5 100644 --- a/cli/src/index.ts +++ b/cli/src/index.ts @@ -7,14 +7,34 @@ * Single source of truth → Compile to multiple formats → Diff-based sync */ +import { realpathSync } from "node:fs"; +import { resolve } from "node:path"; +import { fileURLToPath } from "node:url"; import { runCLI } from "./cli-setup.js"; export async function main(): Promise { await runCLI(); } +export function isMainModule( + argvPath: string | undefined, + moduleUrl: string, +): boolean { + if (!argvPath) { + return false; + } + + try { + const argvRealPath = realpathSync(resolve(argvPath)); + const moduleRealPath = realpathSync(fileURLToPath(moduleUrl)); + return argvRealPath === moduleRealPath; + } catch { + return false; + } +} + // Run CLI if this is the main module -if (import.meta.url === `file://${process.argv[1]}`) { +if (isMainModule(process.argv[1], import.meta.url)) { main().catch((error) => { console.error("Fatal error:", error); process.exit(1); diff --git a/cli/src/utils/config-initializer.ts b/cli/src/utils/config-initializer.ts index 43e593a..71030ca 100644 --- a/cli/src/utils/config-initializer.ts +++ b/cli/src/utils/config-initializer.ts @@ -47,11 +47,11 @@ export async function ensureLanguageConfig(): Promise { message: "Choose your preferred language / 选择你的语言偏好:", choices: [ { - name: `English (detected: ${systemLang === "en" ? "✓" : "×"})`, + name: `English`, value: "en", }, { - name: `中文 (detected: ${systemLang === "zh" ? "✓" : "×"})`, + name: `中文`, value: "zh", }, ], diff --git a/cli/test/index.test.ts b/cli/test/index.test.ts index b76e5b2..b0511fc 100644 --- a/cli/test/index.test.ts +++ b/cli/test/index.test.ts @@ -1,5 +1,9 @@ import { describe, it, expect } from "vitest"; -import { main } from "@src/index.js"; +import { mkdtemp, rm, symlink, writeFile } from "node:fs/promises"; +import { tmpdir } from "node:os"; +import { join, relative } from "node:path"; +import { pathToFileURL } from "node:url"; +import { isMainModule, main } from "@src/index.js"; describe("CLI Entry Point", () => { it("should export main function", () => { @@ -10,4 +14,37 @@ describe("CLI Entry Point", () => { it("should be async function", () => { expect(main.constructor.name).toBe("AsyncFunction"); }); + + it("detects main module with relative argv path", async () => { + const dir = await mkdtemp(join(tmpdir(), "vsync-index-")); + const filePath = join(dir, "index.js"); + await writeFile(filePath, "console.log('test');"); + + try { + const metaUrl = pathToFileURL(filePath).href; + const argvPath = relative(process.cwd(), filePath); + expect(isMainModule(argvPath, metaUrl)).toBe(true); + } finally { + await rm(dir, { recursive: true, force: true }); + } + }); + + it("detects main module when argv is a symlink", async () => { + const dir = await mkdtemp(join(tmpdir(), "vsync-index-")); + const filePath = join(dir, "index.js"); + const linkPath = join(dir, "index-link.js"); + await writeFile(filePath, "console.log('test');"); + await symlink(filePath, linkPath); + + try { + const metaUrl = pathToFileURL(filePath).href; + expect(isMainModule(linkPath, metaUrl)).toBe(true); + } finally { + await rm(dir, { recursive: true, force: true }); + } + }); + + it("returns false when argv is missing", () => { + expect(isMainModule(undefined, "file:///tmp/index.js")).toBe(false); + }); }); From aeff2699246202a75c515e68d4400a7885345383 Mon Sep 17 00:00:00 2001 From: jinmingyang <2214962083@qq.com> Date: Mon, 26 Jan 2026 22:38:19 +0800 Subject: [PATCH 7/7] fix: resolve CLI functionality issue --- .changeset/short-coins-push.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/short-coins-push.md diff --git a/.changeset/short-coins-push.md b/.changeset/short-coins-push.md new file mode 100644 index 0000000..c1b6e28 --- /dev/null +++ b/.changeset/short-coins-push.md @@ -0,0 +1,5 @@ +--- +"@nicepkg/vsync": patch +--- + +fix cli not working