From 090915559926120d79a7c71b042582cc8a6746f0 Mon Sep 17 00:00:00 2001 From: jinmingyang <2214962083@qq.com> Date: Mon, 26 Jan 2026 21:06:36 +0800 Subject: [PATCH 1/3] refactor: rename vibe-sync to vsync across the project --- .changeset/config.json | 5 +- .changeset/four-dogs-fold07.md | 2 +- .claude/commands/create-task.md | 2 +- .claude/commands/do-task.md | 24 +-- .github/ISSUE_TEMPLATE/bug_report.md | 10 +- .github/ISSUE_TEMPLATE/config.yml | 4 +- .github/ISSUE_TEMPLATE/feature_request.md | 2 +- .github/workflows/deploy-website.yml | 4 +- .github/workflows/preview-package.yml | 10 +- .gitignore | 6 +- .vibe-sync.json | 13 ++ .vscode/i18n-ally-custom-framework.yml | 2 +- CLAUDE.md | 6 +- CONTRIBUTING.md | 38 ++--- README.md | 126 +++++++------- README_cn.md | 158 +++++++++--------- TASKS.md | 44 ++--- cli/CHANGELOG.md | 10 +- cli/docs/BENCHMARKS.md | 51 ++++-- cli/package.json | 6 +- cli/scripts/benchmark-performance.ts | 4 +- cli/src/adapters/registry.ts | 2 +- cli/src/cli-setup.ts | 4 +- cli/src/commands/clean.ts | 2 +- cli/src/commands/import.ts | 2 +- cli/src/commands/init.ts | 8 +- cli/src/commands/list.ts | 2 +- cli/src/commands/plan.ts | 2 +- cli/src/commands/status.ts | 4 +- cli/src/commands/sync.ts | 4 +- cli/src/core/config-manager.ts | 12 +- cli/src/core/manifest-manager.ts | 4 +- cli/src/core/rollback.ts | 2 +- cli/src/core/symlink-sync.ts | 4 +- cli/src/index.ts | 2 +- cli/src/locales/en.json | 14 +- cli/src/locales/zh.json | 14 +- cli/src/types/config.ts | 16 +- cli/src/types/manifest.ts | 4 +- cli/src/types/models.ts | 2 +- cli/src/types/plan.ts | 2 +- cli/src/utils/config-initializer.ts | 10 +- cli/src/utils/error-formatter.ts | 12 +- cli/src/utils/errors.ts | 4 +- cli/test/adapters/claude-code.test.ts | 2 +- cli/test/adapters/opencode.test.ts | 2 +- cli/test/cli-setup.test.ts | 6 +- cli/test/commands/import.test.ts | 20 +-- cli/test/commands/init.test.ts | 10 +- cli/test/commands/plan.test.ts | 4 +- cli/test/commands/status.test.ts | 8 +- cli/test/commands/sync-symlink.test.ts | 2 +- cli/test/commands/sync.test.ts | 16 +- cli/test/core/config-manager.test.ts | 29 ++-- cli/test/core/manifest-manager.test.ts | 10 +- cli/test/core/rollback.test.ts | 8 +- cli/test/core/symlink-rollback.test.ts | 6 +- cli/test/e2e/basic-workflow.test.ts | 14 +- cli/test/integration/full-sync-flow.test.ts | 12 +- cli/test/types/config.test.ts | 4 +- cli/test/utils/error-formatter.test.ts | 16 +- cli/test/utils/i18n.test.ts | 2 +- docs/config.md | 10 +- docs/prd.md | 111 ++++++------ package.json | 12 +- scripts/release-publish.sh | 2 +- website/content/en/_meta.ts | 4 +- website/content/en/contributing.mdx | 30 ++-- website/content/en/docs/advanced-features.mdx | 62 +++---- website/content/en/docs/cli-commands.mdx | 96 +++++------ website/content/en/docs/configuration.mdx | 20 +-- website/content/en/docs/core-concepts.mdx | 38 ++--- website/content/en/docs/faq.mdx | 74 ++++---- website/content/en/docs/getting-started.mdx | 50 +++--- website/content/en/docs/index.mdx | 22 +-- website/content/en/docs/quick-reference.mdx | 108 ++++++------ website/content/en/index.mdx | 2 +- website/content/zh/_meta.ts | 4 +- website/content/zh/contributing.mdx | 30 ++-- website/content/zh/docs/advanced-features.mdx | 62 +++---- website/content/zh/docs/cli-commands.mdx | 96 +++++------ website/content/zh/docs/configuration.mdx | 20 +-- website/content/zh/docs/core-concepts.mdx | 38 ++--- website/content/zh/docs/faq.mdx | 74 ++++---- website/content/zh/docs/getting-started.mdx | 50 +++--- website/content/zh/docs/index.mdx | 22 +-- website/content/zh/docs/quick-reference.mdx | 108 ++++++------ website/content/zh/index.mdx | 2 +- website/src/components/home/hero-3d.tsx | 2 +- website/src/components/home/landing-page.tsx | 27 ++- website/src/lib/site-info.ts | 6 +- 91 files changed, 1008 insertions(+), 1004 deletions(-) create mode 100644 .vibe-sync.json diff --git a/.changeset/config.json b/.changeset/config.json index 1398040..169d2f4 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -1,9 +1,6 @@ { "$schema": "https://unpkg.com/@changesets/config/schema.json", - "changelog": [ - "@changesets/changelog-github", - { "repo": "nicepkg/vibe-sync" } - ], + "changelog": ["@changesets/changelog-github", { "repo": "nicepkg/vsync" }], "commit": false, "access": "public", "baseBranch": "main", diff --git a/.changeset/four-dogs-fold07.md b/.changeset/four-dogs-fold07.md index 5608aa4..8c388b4 100644 --- a/.changeset/four-dogs-fold07.md +++ b/.changeset/four-dogs-fold07.md @@ -1,5 +1,5 @@ --- -"vibe-sync": patch +"vsync": patch --- release first version 07 diff --git a/.claude/commands/create-task.md b/.claude/commands/create-task.md index e134b7f..732593e 100644 --- a/.claude/commands/create-task.md +++ b/.claude/commands/create-task.md @@ -3,7 +3,7 @@ description: Create new task for feature or bugfix argument-hint: "[feature|bugfix|refactor] description" --- -# Create Task - vibe-sync +# Create Task - vsync Create a new task in `TASKS.md` for a feature, bugfix, or refactoring work. diff --git a/.claude/commands/do-task.md b/.claude/commands/do-task.md index 35ece4e..f4c89e8 100644 --- a/.claude/commands/do-task.md +++ b/.claude/commands/do-task.md @@ -1,11 +1,11 @@ --- -description: Execute tasks from TASKS.md following vibe-sync specifications +description: Execute tasks from TASKS.md following vsync specifications argument-hint: [phase-task or "next"] --- -# Do Task - vibe-sync +# Do Task - vsync -Execute development tasks from `TASKS.md` following vibe-sync project specifications and TDD workflow. +Execute development tasks from `TASKS.md` following vsync project specifications and TDD workflow. ## Current Context @@ -175,7 +175,7 @@ spinner.succeed("Done"); - MCP servers require user confirmation on first sync - Show command, env vars, URL before approval -- Update whitelist in .vibe-sync.json +- Update whitelist in .vsync.json **Phase 6 (Testing)**: @@ -189,15 +189,15 @@ spinner.succeed("Done"); src/ ├── cli/ # CLI commands (Phase 4) │ ├── commands/ -│ │ ├── init.ts # vibe-sync init -│ │ ├── sync.ts # vibe-sync sync -│ │ ├── plan.ts # vibe-sync plan -│ │ ├── status.ts # vibe-sync status -│ │ ├── list.ts # vibe-sync list -│ │ └── clean.ts # vibe-sync clean +│ │ ├── init.ts # vsync init +│ │ ├── sync.ts # vsync sync +│ │ ├── plan.ts # vsync plan +│ │ ├── status.ts # vsync status +│ │ ├── list.ts # vsync list +│ │ └── clean.ts # vsync clean │ └── index.ts # Commander setup ├── core/ # Core logic (Phase 1, 3, 5) -│ ├── config-manager.ts # Load/save .vibe-sync.json +│ ├── config-manager.ts # Load/save .vsync.json │ ├── manifest-manager.ts # Manifest CRUD │ ├── diff.ts # Diff calculator │ ├── planner.ts # Plan generator @@ -352,4 +352,4 @@ pnpm build # Build project --- -**Let's build vibe-sync with TDD and precision! 🚀** +**Let's build vsync with TDD and precision! 🚀** diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 66d9602..2317711 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,6 +1,6 @@ --- name: Bug Report -about: Report a bug to help us improve vibe-sync +about: Report a bug to help us improve vsync title: "[Bug] " labels: bug assignees: "" @@ -12,8 +12,8 @@ A clear and concise description of what the bug is. ## Steps to Reproduce -1. Run command: `vibe-sync ...` -2. Configuration: `.vibe-sync.json` settings +1. Run command: `vsync ...` +2. Configuration: `.vsync.json` settings 3. See error ## Expected Behavior @@ -27,7 +27,7 @@ What actually happened? ## Environment - OS: [e.g., macOS 14.0, Windows 11, Ubuntu 22.04] -- vibe-sync Version: [e.g., 1.0.0] +- vsync Version: [e.g., 1.0.0] - Source Tool: [e.g., Claude Code] - Target Tools: [e.g., Cursor, OpenCode] - Node.js Version: [e.g., 20.0.0] @@ -35,7 +35,7 @@ What actually happened? ## Configuration ```json -// Your .vibe-sync.json (remove sensitive info) +// Your .vsync.json (remove sensitive info) { "source_tool": "...", "target_tools": [...] diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index ad7fd73..c584ccb 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,8 +1,8 @@ blank_issues_enabled: false contact_links: - name: Documentation - url: https://vibe-sync.xiaominglab.com/docs + url: https://vsync.xiaominglab.com/docs about: Check the documentation for answers to common questions - name: Discussions - url: https://github.com/nicepkg/vibe-sync/discussions + url: https://github.com/nicepkg/vsync/discussions about: Ask questions and discuss ideas with the community diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index e328e3d..4832a02 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,6 +1,6 @@ --- name: Feature Request -about: Suggest an idea for vibe-sync +about: Suggest an idea for vsync title: "[Feature] " labels: enhancement assignees: "" diff --git a/.github/workflows/deploy-website.yml b/.github/workflows/deploy-website.yml index 6a724a3..20ff898 100644 --- a/.github/workflows/deploy-website.yml +++ b/.github/workflows/deploy-website.yml @@ -22,8 +22,8 @@ concurrency: env: # Project Configuration - Update these values for your project - PROJECT_NAME: 'vibe-sync' - SITE_DOMAIN: 'vibe-sync.xiaominglab.com' + PROJECT_NAME: 'vsync' + SITE_DOMAIN: 'vsync.xiaominglab.com' WEBSITE_DIR: 'website' BUILD_OUTPUT_DIR: 'website/out' BUILD_COMMAND: 'pnpm build:website' diff --git a/.github/workflows/preview-package.yml b/.github/workflows/preview-package.yml index 28970f5..7d03150 100644 --- a/.github/workflows/preview-package.yml +++ b/.github/workflows/preview-package.yml @@ -24,12 +24,12 @@ jobs: matrix: package: # When you add a new package, add a new line here - - name: "vibe-sync" + - name: "vsync" dir: "cli" - display: "vibe-sync (CLI)" + display: "vsync (CLI)" # - name: "core" # dir: "core" - # display: "vibe-sync (core)" + # display: "vsync (core)" steps: - name: Checkout @@ -107,8 +107,8 @@ jobs: ### ✅ Quick verification (CLI) \`\`\`bash - vibe-sync --version - vibe-sync --help + vsync --version + vsync --help \`\`\` ### 🔎 Raw publish output (for troubleshooting) diff --git a/.gitignore b/.gitignore index 767fc6c..ac8ab12 100644 --- a/.gitignore +++ b/.gitignore @@ -130,8 +130,8 @@ logs/ **/.vitepress/.temp MARKETING.md # ==================== -# vibe-sync +# vsync # ==================== -.vibe-sync.json -.vibe-sync-cache/ +.vsync.json +.vsync-cache/ .opencode/ diff --git a/.vibe-sync.json b/.vibe-sync.json new file mode 100644 index 0000000..c3cdf74 --- /dev/null +++ b/.vibe-sync.json @@ -0,0 +1,13 @@ +{ + "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/.vscode/i18n-ally-custom-framework.yml b/.vscode/i18n-ally-custom-framework.yml index 0a5dcc7..78cdf05 100644 --- a/.vscode/i18n-ally-custom-framework.yml +++ b/.vscode/i18n-ally-custom-framework.yml @@ -1,5 +1,5 @@ # i18n-ally Custom Framework Configuration -# For vibe-sync custom i18n implementation +# For vsync custom i18n implementation # Supported language file types languageIds: diff --git a/CLAUDE.md b/CLAUDE.md index acfac36..9f86453 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,4 +1,4 @@ -# vibe-sync - AI Coding Tool Config Synchronizer +# vsync - AI Coding Tool Config Synchronizer **Single source of truth → Compile to multiple formats → Diff-based sync** @@ -185,7 +185,7 @@ These commands auto-read TASKS.md, PRD, and guide TDD workflow. **Architecture**: pnpm monorepo ``` -vibe-sync/ # Project root +vsync/ # Project root ├── pnpm-workspace.yaml # Workspace config (root level) ├── cli/ # CLI workspace package │ ├── package.json # CLI dependencies @@ -256,7 +256,7 @@ vibe-sync/ # Project root ```bash # Project structure -vibe-sync/ +vsync/ ├── pnpm-workspace.yaml # Root level └── cli/ # Work here! ├── package.json diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ecb3ffc..a9e14c9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,4 +1,4 @@ -# Contributing to vibe-sync +# Contributing to vsync Thank you for your interest in contributing! This document provides guidelines and instructions for contributing. @@ -10,13 +10,13 @@ Please read and follow our [Code of Conduct](CODE_OF_CONDUCT.md). ### Reporting Bugs -1. Check if the bug has already been reported in [Issues](https://github.com/nicepkg/vibe-sync/issues) +1. Check if the bug has already been reported in [Issues](https://github.com/nicepkg/vsync/issues) 2. If not, create a new issue using the bug report template 3. Provide as much detail as possible ### Suggesting Features -1. Check if the feature has already been suggested in [Issues](https://github.com/nicepkg/vibe-sync/issues) +1. Check if the feature has already been suggested in [Issues](https://github.com/nicepkg/vsync/issues) 2. If not, create a new issue using the feature request template 3. Explain the use case and benefits @@ -34,8 +34,8 @@ Please read and follow our [Code of Conduct](CODE_OF_CONDUCT.md). ```bash # Clone the repository -git clone https://github.com/nicepkg/vibe-sync.git -cd vibe-sync +git clone https://github.com/nicepkg/vsync.git +cd vsync # Install dependencies pnpm install @@ -60,19 +60,19 @@ We follow the [Angular Commit Convention](https://github.com/angular/angular/blo ### Types -| Type | Description | -|------|-------------| -| `feat` | A new feature | -| `fix` | A bug fix | -| `docs` | Documentation only changes | -| `style` | Changes that do not affect the meaning of the code | -| `refactor` | A code change that neither fixes a bug nor adds a feature | -| `perf` | A code change that improves performance | -| `test` | Adding missing tests or correcting existing tests | -| `build` | Changes that affect the build system or external dependencies | -| `ci` | Changes to CI configuration files and scripts | -| `chore` | Other changes that don't modify src or test files | -| `revert` | Reverts a previous commit | +| Type | Description | +| ---------- | ------------------------------------------------------------- | +| `feat` | A new feature | +| `fix` | A bug fix | +| `docs` | Documentation only changes | +| `style` | Changes that do not affect the meaning of the code | +| `refactor` | A code change that neither fixes a bug nor adds a feature | +| `perf` | A code change that improves performance | +| `test` | Adding missing tests or correcting existing tests | +| `build` | Changes that affect the build system or external dependencies | +| `ci` | Changes to CI configuration files and scripts | +| `chore` | Other changes that don't modify src or test files | +| `revert` | Reverts a previous commit | ### Scopes (optional) @@ -104,4 +104,4 @@ refactor: simplify authentication logic ## Questions? -Feel free to open a [Discussion](https://github.com/nicepkg/vibe-sync/discussions) if you have any questions. +Feel free to open a [Discussion](https://github.com/nicepkg/vsync/discussions) if you have any questions. diff --git a/README.md b/README.md index 40f3d1f..2ee6a0f 100644 --- a/README.md +++ b/README.md @@ -2,14 +2,14 @@ -# vibe-sync +# vsync ### **One config. Many AI tools. Zero pain.** -[![GitHub stars](https://img.shields.io/github/stars/nicepkg/vibe-sync?style=social)](https://github.com/nicepkg/vibe-sync) +[![GitHub stars](https://img.shields.io/github/stars/nicepkg/vsync?style=social)](https://github.com/nicepkg/vsync) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) -[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/nicepkg/vibe-sync/pulls) -[![Tests](https://img.shields.io/badge/tests-612%20passing-brightgreen)](https://github.com/nicepkg/vibe-sync) +[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/nicepkg/vsync/pulls) +[![Tests](https://img.shields.io/badge/tests-612%20passing-brightgreen)](https://github.com/nicepkg/vsync) [简体中文](./README_cn.md) | English @@ -23,15 +23,15 @@ **One-command config sync for AI vibe coding tools** Managing Skills, MCP servers, Agents & Commands across multiple AI coding tools is a nightmare. -Each tool has its own directories and formats. vibe-sync solves this with one simple command. +Each tool has its own directories and formats. vsync solves this with one simple command. -[Get Started](#-quick-start) · [Features](#-features) · [Documentation](https://vibe-sync.xiaominglab.com) +[Get Started](#-quick-start) · [Features](#-features) · [Documentation](https://vsync.xiaominglab.com) --- -## ✨ Why vibe-sync? +## ✨ Why vsync? **The Problem**: You love using multiple AI vibe coding tools (Claude Code, Cursor, OpenCode, Codex...), but each tool has: @@ -41,11 +41,11 @@ Each tool has its own directories and formats. vibe-sync solves this with one si Managing configurations across tools becomes a nightmare, especially for teams. -**The Solution**: vibe-sync gives you one command to sync everything. Pick one tool as your source of truth, and all others stay perfectly in sync. +**The Solution**: vsync gives you one command to sync everything. Pick one tool as your source of truth, and all others stay perfectly in sync. ### The Problem We Solve -| 😫 Without vibe-sync | 🎉 With vibe-sync | +| 😫 Without vsync | 🎉 With vsync | | :------------------------------------------------------------------- | :----------------------------------------------------------- | | 📋 Manually copy configs between multiple vibe coding tools | ⚡ One command syncs everything automatically | | 📂 Different directories for Skills/Agents/Commands/MCP in each tool | 🎯 One command maps to all correct paths | @@ -71,7 +71,7 @@ Managing configurations across tools becomes a nightmare, especially for teams. ```mermaid flowchart TD - A[Pick Source Tool
Your source of truth] --> B[vibe-sync reads configs
Skills, MCP, Agents, Commands] + A[Pick Source Tool
Your source of truth] --> B[vsync reads configs
Skills, MCP, Agents, Commands] B --> C[Compare with targets
Calculate differences] C --> D[Show you the plan
What will change] D --> E{Your approval} @@ -85,7 +85,7 @@ flowchart TD style E fill:#fff9c4 ``` -**The magic**: Edit configs in ONE tool → Run `vibe-sync sync` → ALL tools stay in sync +**The magic**: Edit configs in ONE tool → Run `vsync sync` → ALL tools stay in sync --- @@ -100,7 +100,7 @@ flowchart TD | **Prune Mode** | Strict mirroring with deletions | ✅ v1.0 | | **Atomic Writes** | All-or-nothing file operations | ✅ v1.0 | | **Manifest Tracking** | Hash-based change detection | ✅ v1.0 | -| **User Layer** | Global configs (~/.vibe-sync.json) | ✅ v1.1 | +| **User Layer** | Global configs (~/.vsync.json) | ✅ v1.1 | | **Agents Sync** | Custom AI agents | ✅ v1.1 | | **Commands Sync** | Quick commands | ✅ v1.1 | | **Codex Support** | Full Codex integration (TOML format) | ✅ v1.1 | @@ -117,29 +117,29 @@ flowchart TD ```bash # Option 1: Run directly with npx (no installation needed) -npx vibe-sync +npx vsync # Option 2: Install globally with npm -npm install -g vibe-sync +npm install -g vsync # Verify installation -vibe-sync --version +vsync --version ``` ### Initialize ```bash # Project-level configuration -vibe-sync init +vsync init # User-level (global) configuration -vibe-sync init --user +vsync init --user ``` **Interactive prompts:** ``` -🚀 Welcome to vibe-sync! +🚀 Welcome to vsync! ✔ Detecting existing tools... ✔ Detected: claude-code, cursor @@ -161,20 +161,20 @@ vibe-sync init --user ✔ Cache directory created ✔ Manifest initialized -✅ Setup complete! Run vibe-sync sync to start syncing +✅ Setup complete! Run vsync sync to start syncing ``` ### Sync Your Configs ```bash # Safe mode (default: no deletions) -vibe-sync sync +vsync sync # Preview changes without applying -vibe-sync sync --dry-run +vsync sync --dry-run # Strict mirroring (deletes extra items in targets) -vibe-sync sync --prune +vsync sync --prune ``` **Example output:** @@ -207,8 +207,8 @@ cursor: ```bash # New team member joins, already has Claude Code setup cd my-project -vibe-sync init # Choose Claude Code as source, Cursor & OpenCode as targets -vibe-sync sync # Boom! All tools configured in seconds +vsync init # Choose Claude Code as source, Cursor & OpenCode as targets +vsync sync # Boom! All tools configured in seconds # Their entire AI coding environment is now in sync with the team ``` @@ -217,8 +217,8 @@ vibe-sync sync # Boom! All tools configured in seconds ```bash # Set up your global personal configs once -vibe-sync init --user # Configure which tools to sync -vibe-sync sync --user # Sync your personal Skills, MCP servers, Agents globally +vsync init --user # Configure which tools to sync +vsync sync --user # Sync your personal Skills, MCP servers, Agents globally # Now ALL your tools share the same user-level configs # Works across all your projects automatically @@ -228,9 +228,9 @@ vibe-sync sync --user # Sync your personal Skills, MCP servers, Agents globally ```bash # Moving from Cursor to Claude Code? -vibe-sync init # Choose Cursor as SOURCE (the reference/standard) +vsync init # Choose Cursor as SOURCE (the reference/standard) # Choose Claude Code as TARGET (will pull from source) -vibe-sync sync # All your skills, MCP servers, agents migrated instantly +vsync sync # All your skills, MCP servers, agents migrated instantly # SOURCE = Your standard reference (everything syncs FROM here) # TARGET = Will match the source (everything syncs TO here) @@ -244,25 +244,25 @@ vibe-sync sync # All your skills, MCP servers, agents migrated instantly ```bash # Initialize configuration -vibe-sync init [--user] +vsync init [--user] # Sync configurations -vibe-sync sync [--user] [--dry-run] [--prune] +vsync sync [--user] [--dry-run] [--prune] # View sync plan without executing -vibe-sync plan [--user] +vsync plan [--user] # Check sync status -vibe-sync status [--user] +vsync status [--user] # List configurations -vibe-sync list [skills|mcp] [--user] +vsync list [skills|mcp] [--user] # Clean configs from targets -vibe-sync clean [name] [--user] [--from-source] +vsync clean [name] [--user] [--from-source] # Import from another project -vibe-sync import [--user] +vsync import [--user] ``` ### Example Workflows @@ -274,47 +274,47 @@ vibe-sync import [--user] vim ~/.claude/skills/my-skill/SKILL.md # Sync to all target tools -vibe-sync sync +vsync sync ``` **2. Preview changes before applying:** ```bash -vibe-sync plan +vsync plan # Review the plan -vibe-sync sync +vsync sync ``` **3. Strict mirror mode (delete outdated configs):** ```bash -vibe-sync sync --prune +vsync sync --prune ``` **4. Clean up a skill from all targets:** ```bash # From targets only (source unchanged) -vibe-sync clean skill/old-skill +vsync clean skill/old-skill # From source AND all targets (dangerous!) -vibe-sync clean skill/old-skill --from-source +vsync clean skill/old-skill --from-source ``` **5. Import configs from another project:** ```bash -vibe-sync import ../other-project +vsync import ../other-project ``` --- ## 📋 Configuration -### .vibe-sync.json +### .vsync.json -**Project-level:** `/.vibe-sync.json` -**User-level:** `~/.vibe-sync.json` +**Project-level:** `/.vsync.json` +**User-level:** `~/.vsync.json` ```json { @@ -339,9 +339,9 @@ vibe-sync import ../other-project - `use_symlinks_for_skills`: Use symlinks instead of copying (saves disk space) - `language`: CLI language - `"en"` or `"zh"` (user-level only) -### Config Format Differences (Why You Need vibe-sync) +### Config Format Differences (Why You Need vsync) -Each vibe coding tool uses different formats AND different directory structures. vibe-sync handles all the complexity: +Each vibe coding tool uses different formats AND different directory structures. vsync handles all the complexity: **Directory Structure Differences**: | Config Type | Claude Code | Cursor | OpenCode | Codex | @@ -359,14 +359,14 @@ Each vibe coding tool uses different formats AND different directory structures. | **Env Var Syntax** | `${VAR}` | `${env:VAR}` | `{env:VAR}` | No interpolation | | **Type Field** | Not required | Not required | **Required** (`local`/`remote`) | Required | -**Without vibe-sync**: +**Without vsync**: - ❌ Manually copy files between different directories - ❌ Remember which tool uses which path - ❌ Convert environment variable syntax by hand - ❌ Often break configs or forget required fields -**With vibe-sync**: +**With vsync**: - ✅ One command → auto-syncs to all tools - ✅ Automatic format conversion @@ -399,7 +399,7 @@ Each vibe coding tool uses different formats AND different directory structures. - ❌ **Never deletes** ```bash -vibe-sync sync +vsync sync ``` ### Prune Mode @@ -411,7 +411,7 @@ vibe-sync sync - ⚠️ **Deletes items not in source** ```bash -vibe-sync sync --prune +vsync sync --prune ``` **Use when:** You want strict mirroring (e.g., cleaning up old configs) @@ -421,29 +421,29 @@ vibe-sync sync --prune **Q: Which tool should I use as the source?** A: We recommend **Claude Code** as it has the most complete feature set. However, you can use any tool as your source. -**Q: Will vibe-sync overwrite my existing configs?** +**Q: Will vsync overwrite my existing configs?** A: By default, **Safe Mode** only creates and updates—it never deletes. Use `--prune` if you want strict mirroring. **Q: What happens if I edit configs directly in target tools?** A: Changes in target tools will be overwritten on the next sync. The SOURCE is your reference standard—everything syncs FROM the source. Always edit in your source tool, or use `import` to pull changes from another project. **Q: How do I switch my source tool?** -A: Run `vibe-sync init` again and choose a different source. Then sync to update all targets. +A: Run `vsync init` again and choose a different source. Then sync to update all targets. **Q: Does it work with monorepos?** -A: Yes! Each project can have its own `.vibe-sync.json`. User-level configs (`~/.vibe-sync.json`) work globally. +A: Yes! Each project can have its own `.vsync.json`. User-level configs (`~/.vsync.json`) work globally. -**Q: Is it safe to commit `.vibe-sync.json` to git?** +**Q: Is it safe to commit `.vsync.json` to git?** A: Yes! The config file contains no secrets—only tool names and sync preferences. MCP configs with secrets should use environment variables. **Q: Can I sync in both directions?** -A: vibe-sync is one-directional (source → targets). To switch directions, re-run `init` and choose a different source tool. +A: vsync is one-directional (source → targets). To switch directions, re-run `init` and choose a different source tool. **Q: What's the difference between project-level and user-level?** A: -- **Project-level** (`.vibe-sync.json`): Team configs, checked into git -- **User-level** (`~/.vibe-sync.json`): Personal global configs, not shared +- **Project-level** (`.vsync.json`): Team configs, checked into git +- **User-level** (`~/.vsync.json`): Personal global configs, not shared --- @@ -464,8 +464,8 @@ Want to contribute? See [CONTRIBUTING.md](./CONTRIBUTING.md) for development set ### Contributors - - + + --- @@ -484,7 +484,7 @@ Want to contribute? See [CONTRIBUTING.md](./CONTRIBUTING.md) for development set ### v1.1 ✅ Released -- [x] User-level configs (~/.vibe-sync.json) +- [x] User-level configs (~/.vsync.json) - [x] Agents sync (custom AI agents) - [x] Commands sync (quick commands) - [x] Full Codex support (TOML format) @@ -525,8 +525,8 @@ MIT © [nicepkg](https://github.com/nicepkg) **If this project helped you, please consider giving it a ⭐** - - GitHub stars + + GitHub stars Made with ❤️ by [nicepkg](https://github.com/nicepkg) diff --git a/README_cn.md b/README_cn.md index f8c7cad..0968e7c 100644 --- a/README_cn.md +++ b/README_cn.md @@ -2,14 +2,14 @@ -# vibe-sync +# vsync ### **一处配置,多个 AI 工具同步,不再折腾** -[![GitHub stars](https://img.shields.io/github/stars/nicepkg/vibe-sync?style=social)](https://github.com/nicepkg/vibe-sync) +[![GitHub stars](https://img.shields.io/github/stars/nicepkg/vsync?style=social)](https://github.com/nicepkg/vsync) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) -[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/nicepkg/vibe-sync/pulls) -[![Tests](https://img.shields.io/badge/测试-612%20通过-brightgreen)](https://github.com/nicepkg/vibe-sync) +[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/nicepkg/vsync/pulls) +[![Tests](https://img.shields.io/badge/测试-612%20通过-brightgreen)](https://github.com/nicepkg/vsync) 简体中文 | [English](./README.md) @@ -23,15 +23,15 @@ **AI 氛围编程工具配置一键同步** 在多个 AI 编程工具间管理 Skills、MCP servers、Agents 和 Commands 是噩梦。 -每个工具都有自己的目录和格式。vibe-sync 用一条命令解决这个问题。 +每个工具都有自己的目录和格式。vsync 用一条命令解决这个问题。 -[立即开始](#-快速开始) · [功能特性](#-功能特性) · [文档](https://vibe-sync.xiaominglab.com) +[立即开始](#-快速开始) · [功能特性](#-功能特性) · [文档](https://vsync.xiaominglab.com) --- -## ✨ 为什么选择 vibe-sync? +## ✨ 为什么选择 vsync? **问题所在**: 你喜欢使用多个 AI 氛围编程工具 (Claude Code、Cursor、OpenCode、Codex...),但每个工具都有: @@ -41,11 +41,11 @@ 跨工具管理配置变成了噩梦,对团队来说更是如此。 -**解决方案**: vibe-sync 给你一条命令同步一切。选择一个工具作为标准参考,其他工具完美保持同步。 +**解决方案**: vsync 给你一条命令同步一切。选择一个工具作为标准参考,其他工具完美保持同步。 ### 我们解决的痛点 -| 😫 没有 vibe-sync | 🎉 有了 vibe-sync | +| 😫 没有 vsync | 🎉 有了 vsync | | :---------------------------------------------------- | :---------------------------------------------- | | 📋 在多个氛围编程工具之间手动复制配置 | ⚡ 一条命令自动同步所有内容 | | 📂 不同工具的 Skills/Agents/Commands/MCP 目录各不相同 | 🎯 一条命令映射到所有正确路径 | @@ -71,7 +71,7 @@ ```mermaid flowchart TD - A[选择源工具
你的标准参考] --> B[vibe-sync 读取配置
Skills, MCP, Agents, Commands] + A[选择源工具
你的标准参考] --> B[vsync 读取配置
Skills, MCP, Agents, Commands] B --> C[与目标工具对比
计算差异] C --> D[显示同步计划
将要发生什么变更] D --> E{需要你的批准} @@ -85,29 +85,29 @@ flowchart TD style E fill:#fff9c4 ``` -**魔法之处**: 在一个工具中编辑 → 运行 `vibe-sync sync` → 所有工具保持同步 +**魔法之处**: 在一个工具中编辑 → 运行 `vsync sync` → 所有工具保持同步 --- ## 🎯 功能特性 -| 功能 | 说明 | 状态 | -| :---------------- | :--------------------------- | :------ | -| **Skills 同步** | 跨工具同步 Agent Skills | ✅ v1.0 | -| **MCP 同步** | 带安全检查的 MCP 服务器同步 | ✅ v1.0 | -| **差异计划** | 应用前预览变更 | ✅ v1.0 | -| **Safe 模式** | 仅添加和更新,不删除 | ✅ v1.0 | -| **Prune 模式** | 严格镜像,包含删除 | ✅ v1.0 | -| **原子写入** | 全有或全无的文件操作 | ✅ v1.0 | -| **Manifest 追踪** | 基于哈希的变更检测 | ✅ v1.0 | -| **User 层** | 全局配置 (~/.vibe-sync.json) | ✅ v1.1 | -| **Agents 同步** | 自定义 AI 代理 | ✅ v1.1 | -| **Commands 同步** | 快捷命令 | ✅ v1.1 | -| **Codex 支持** | 完整 Codex 集成 (TOML 格式) | ✅ v1.1 | -| **多语言支持** | 中文和英文 CLI 输出 | ✅ v1.2 | -| **性能优化** | 并行操作、智能缓存 | ✅ v1.2 | -| **符号链接** | 符号链接支持 | ✅ v1.2 | -| **导入/导出** | 项目间共享配置 | ✅ v1.1 | +| 功能 | 说明 | 状态 | +| :---------------- | :-------------------------- | :------ | +| **Skills 同步** | 跨工具同步 Agent Skills | ✅ v1.0 | +| **MCP 同步** | 带安全检查的 MCP 服务器同步 | ✅ v1.0 | +| **差异计划** | 应用前预览变更 | ✅ v1.0 | +| **Safe 模式** | 仅添加和更新,不删除 | ✅ v1.0 | +| **Prune 模式** | 严格镜像,包含删除 | ✅ v1.0 | +| **原子写入** | 全有或全无的文件操作 | ✅ v1.0 | +| **Manifest 追踪** | 基于哈希的变更检测 | ✅ v1.0 | +| **User 层** | 全局配置 (~/.vsync.json) | ✅ v1.1 | +| **Agents 同步** | 自定义 AI 代理 | ✅ v1.1 | +| **Commands 同步** | 快捷命令 | ✅ v1.1 | +| **Codex 支持** | 完整 Codex 集成 (TOML 格式) | ✅ v1.1 | +| **多语言支持** | 中文和英文 CLI 输出 | ✅ v1.2 | +| **性能优化** | 并行操作、智能缓存 | ✅ v1.2 | +| **符号链接** | 符号链接支持 | ✅ v1.2 | +| **导入/导出** | 项目间共享配置 | ✅ v1.1 | --- @@ -117,29 +117,29 @@ flowchart TD ```bash # 方式 1: 使用 npx 直接运行 (无需安装) -npx vibe-sync +npx vsync # 方式 2: 使用 npm 全局安装 -npm install -g vibe-sync +npm install -g vsync # 验证安装 -vibe-sync --version +vsync --version ``` ### 初始化 ```bash # 项目级配置 -vibe-sync init +vsync init # 用户级(全局)配置 -vibe-sync init --user +vsync init --user ``` **交互式提示:** ``` -🚀 欢迎使用 vibe-sync! +🚀 欢迎使用 vsync! ✔ 正在检测现有工具... ✔ 检测到: claude-code, cursor @@ -161,20 +161,20 @@ vibe-sync init --user ✔ 缓存目录已创建 ✔ Manifest 已初始化 -✅ 设置完成! 运行 vibe-sync sync 开始同步 +✅ 设置完成! 运行 vsync sync 开始同步 ``` ### 同步配置 ```bash # Safe 模式 (默认: 不删除) -vibe-sync sync +vsync sync # 预览变更但不应用 -vibe-sync sync --dry-run +vsync sync --dry-run # 严格镜像 (删除目标中的多余项) -vibe-sync sync --prune +vsync sync --prune ``` **示例输出:** @@ -207,8 +207,8 @@ cursor: ```bash # 新团队成员加入,已经设置好 Claude Code cd my-project -vibe-sync init # 选择 Claude Code 作为源,Cursor 和 OpenCode 作为目标 -vibe-sync sync # 瞬间完成! 所有工具在几秒内配置完成 +vsync init # 选择 Claude Code 作为源,Cursor 和 OpenCode 作为目标 +vsync sync # 瞬间完成! 所有工具在几秒内配置完成 # 他们的整个 AI 编程环境现在与团队同步 ``` @@ -217,8 +217,8 @@ vibe-sync sync # 瞬间完成! 所有工具在几秒内配置完成 ```bash # 一次性设置你的全局个人配置 -vibe-sync init --user # 配置要同步哪些工具 -vibe-sync sync --user # 全局同步你的个人 Skills、MCP servers、Agents +vsync init --user # 配置要同步哪些工具 +vsync sync --user # 全局同步你的个人 Skills、MCP servers、Agents # 现在所有工具共享相同的用户级别配置 # 在你所有项目中自动生效 @@ -228,9 +228,9 @@ vibe-sync sync --user # 全局同步你的个人 Skills、MCP servers、Agents ```bash # 从 Cursor 迁移到 Claude Code? -vibe-sync init # 选择 Cursor 作为 SOURCE (源/参考标准) +vsync init # 选择 Cursor 作为 SOURCE (源/参考标准) # 选择 Claude Code 作为 TARGET (目标会从源拉取配置) -vibe-sync sync # 所有 skills、MCP servers、agents 瞬间迁移完成 +vsync sync # 所有 skills、MCP servers、agents 瞬间迁移完成 # SOURCE (源) = 你的标准参考 (所有内容从这里同步) # TARGET (目标) = 会匹配源的内容 (所有内容同步到这里) @@ -244,25 +244,25 @@ vibe-sync sync # 所有 skills、MCP servers、agents 瞬间迁移完成 ```bash # 初始化配置 -vibe-sync init [--user] +vsync init [--user] # 同步配置 -vibe-sync sync [--user] [--dry-run] [--prune] +vsync sync [--user] [--dry-run] [--prune] # 查看同步计划但不执行 -vibe-sync plan [--user] +vsync plan [--user] # 检查同步状态 -vibe-sync status [--user] +vsync status [--user] # 列出配置 -vibe-sync list [skills|mcp] [--user] +vsync list [skills|mcp] [--user] # 从目标清理配置 -vibe-sync clean [name] [--user] [--from-source] +vsync clean [name] [--user] [--from-source] # 从其他项目导入 -vibe-sync import [--user] +vsync import [--user] ``` ### 示例工作流 @@ -274,47 +274,47 @@ vibe-sync import [--user] vim ~/.claude/skills/my-skill/SKILL.md # 同步到所有目标工具 -vibe-sync sync +vsync sync ``` **2. 应用前预览变更:** ```bash -vibe-sync plan +vsync plan # 查看计划 -vibe-sync sync +vsync sync ``` **3. 严格镜像模式 (删除过期配置):** ```bash -vibe-sync sync --prune +vsync sync --prune ``` **4. 清理一个 skill:** ```bash # 仅从目标清理 (源不变) -vibe-sync clean skill/old-skill +vsync clean skill/old-skill # 从源和所有目标删除 (危险!) -vibe-sync clean skill/old-skill --from-source +vsync clean skill/old-skill --from-source ``` **5. 从其他项目导入配置:** ```bash -vibe-sync import ../other-project +vsync import ../other-project ``` --- ## 📋 配置文件 -### .vibe-sync.json +### .vsync.json -**项目级:** `/.vibe-sync.json` -**用户级:** `~/.vibe-sync.json` +**项目级:** `/.vsync.json` +**用户级:** `~/.vsync.json` ```json { @@ -339,9 +339,9 @@ vibe-sync import ../other-project - `use_symlinks_for_skills`: 使用符号链接而非复制 (节省磁盘空间) - `language`: CLI 语言 - `"en"` 或 `"zh"` (仅用户级) -### 配置格式差异 (为什么需要 vibe-sync) +### 配置格式差异 (为什么需要 vsync) -每个氛围编程工具使用不同的格式和目录结构。vibe-sync 处理所有复杂性: +每个氛围编程工具使用不同的格式和目录结构。vsync 处理所有复杂性: **目录结构差异**: | 配置类型 | Claude Code | Cursor | OpenCode | Codex | @@ -359,14 +359,14 @@ vibe-sync import ../other-project | **环境变量语法** | `${VAR}` | `${env:VAR}` | `{env:VAR}` | 不支持插值 | | **Type 字段** | 不需要 | 不需要 | **必需** (`local`/`remote`) | 必需 | -**没有 vibe-sync**: +**没有 vsync**: - ❌ 手动在不同目录之间复制文件 - ❌ 记住哪个工具使用哪个路径 - ❌ 手动转换环境变量语法 - ❌ 经常破坏配置或忘记必需字段 -**有了 vibe-sync**: +**有了 vsync**: - ✅ 一条命令 → 自动同步到所有工具 - ✅ 自动格式转换 @@ -399,7 +399,7 @@ vibe-sync import ../other-project - ❌ **从不删除** ```bash -vibe-sync sync +vsync sync ``` ### Prune 模式 @@ -411,7 +411,7 @@ vibe-sync sync - ⚠️ **删除源中没有的项** ```bash -vibe-sync sync --prune +vsync sync --prune ``` **使用场景:** 需要严格镜像时 (例如清理旧配置) @@ -421,29 +421,29 @@ vibe-sync sync --prune **问: 应该使用哪个工具作为源?** 答: 我们推荐使用 **Claude Code**,因为它的功能最完整。不过,你可以使用任何工具作为源。 -**问: vibe-sync 会覆盖我现有的配置吗?** +**问: vsync 会覆盖我现有的配置吗?** 答: 默认情况下,**Safe 模式**只创建和更新——从不删除。如果需要严格镜像,使用 `--prune`。 **问: 如果我直接在目标工具中编辑配置会怎样?** 答: 目标工具中的更改会在下次同步时被覆盖。SOURCE (源) 是你的参考标准——所有内容都从源同步。请始终在源工具中编辑,或使用 `import` 从其他项目拉取更改。 **问: 如何切换源工具?** -答: 重新运行 `vibe-sync init` 并选择不同的源。然后同步以更新所有目标。 +答: 重新运行 `vsync init` 并选择不同的源。然后同步以更新所有目标。 **问: 支持 monorepo 吗?** -答: 是的! 每个项目可以有自己的 `.vibe-sync.json`。用户层配置 (`~/.vibe-sync.json`) 全局生效。 +答: 是的! 每个项目可以有自己的 `.vsync.json`。用户层配置 (`~/.vsync.json`) 全局生效。 -**问: 可以将 `.vibe-sync.json` 提交到 git 吗?** +**问: 可以将 `.vsync.json` 提交到 git 吗?** 答: 可以! 配置文件不包含机密——只有工具名称和同步偏好。包含机密的 MCP 配置应使用环境变量。 **问: 可以双向同步吗?** -答: vibe-sync 是单向的 (源 → 目标)。要切换方向,重新运行 `init` 并选择不同的源工具。 +答: vsync 是单向的 (源 → 目标)。要切换方向,重新运行 `init` 并选择不同的源工具。 **问: 项目层和用户层有什么区别?** 答: -- **项目层** (`.vibe-sync.json`): 团队配置,提交到 git -- **用户层** (`~/.vibe-sync.json`): 个人全局配置,不共享 +- **项目层** (`.vsync.json`): 团队配置,提交到 git +- **用户层** (`~/.vsync.json`): 个人全局配置,不共享 --- @@ -464,8 +464,8 @@ vibe-sync sync --prune ### 贡献者 - - + + --- @@ -484,7 +484,7 @@ vibe-sync sync --prune ### v1.1 ✅ 已发布 -- [x] User 层配置 (~/.vibe-sync.json) +- [x] User 层配置 (~/.vsync.json) - [x] Agents 同步 (自定义 AI 代理) - [x] Commands 同步 (快捷命令) - [x] 完整 Codex 支持 (TOML 格式) @@ -525,8 +525,8 @@ MIT © [nicepkg](https://github.com/nicepkg) **如果这个项目对你有帮助,请考虑给它一个 ⭐** - - GitHub stars + + GitHub stars 用 ❤️ 制作 by [nicepkg](https://github.com/nicepkg) diff --git a/TASKS.md b/TASKS.md index 3e7c783..5ce30dc 100644 --- a/TASKS.md +++ b/TASKS.md @@ -1,7 +1,7 @@ -# vibe-sync Implementation Tasks +# vsync Implementation Tasks **Version**: 3.1.0 -**Project**: vibe-sync - AI Coding Tool Config Synchronizer +**Project**: vsync - AI Coding Tool Config Synchronizer **Timeline**: 15-23 days (including v1.2 features) **Last Updated**: 2026-01-25 @@ -9,7 +9,7 @@ ## 📋 Task Overview -This document tracks all implementation tasks for vibe-sync MVP. Each phase must be completed sequentially. Mark completed tasks with `[x]`. +This document tracks all implementation tasks for vsync MVP. Each phase must be completed sequentially. Mark completed tasks with `[x]`. **Current Status**: 🟢 Phase 10 Complete (Multi-language Support - all sub-phases complete) **Next Phase**: All core phases complete! 🎉 @@ -47,7 +47,7 @@ This document tracks all implementation tasks for vibe-sync MVP. Each phase must - [x] `mock-fs` - File system mocking - [x] Set up directory structure ``` - vibe-sync/ # Project root + vsync/ # Project root ├── pnpm-workspace.yaml # Workspace config (root level) └── cli/ # CLI workspace ├── package.json @@ -65,7 +65,7 @@ This document tracks all implementation tasks for vibe-sync MVP. Each phase must ### 1.2 Core Type Definitions - [x] Define `cli/src/types/config.ts` - - [x] `VibeConfig` interface (`.vibe-sync.json` structure) + - [x] `VibeConfig` interface (`.vsync.json` structure) - [x] `SyncMode` type (`"safe" | "prune"`) - [x] `ToolName` type (`"claude-code" | "cursor" | "opencode"`) - [x] `ConfigLevel` type (`"project" | "user"`) @@ -84,7 +84,7 @@ This document tracks all implementation tasks for vibe-sync MVP. Each phase must ### 1.3 Configuration Management - [x] Implement `cli/src/core/config-manager.ts` - - [x] `loadConfig(level)` - Load `.vibe-sync.json` + - [x] `loadConfig(level)` - Load `.vsync.json` - [x] `saveConfig(config, level)` - Save configuration - [x] `validateConfig(config)` - Validate schema - [x] `getConfigPath(level)` - Resolve config file path @@ -277,7 +277,7 @@ This document tracks all implementation tasks for vibe-sync MVP. Each phase must - [x] Version flag (`--version`) - [x] Help text -### 4.2 `vibe-sync init` Command +### 4.2 `vsync init` Command - [x] Implement `cli/src/commands/init.ts` - [x] Detect existing tools (check for `.claude/`, `.cursor/`, `.opencode/`) @@ -285,13 +285,13 @@ This document tracks all implementation tasks for vibe-sync MVP. Each phase must - [x] Multi-select: Which tools do you use? - [x] Select: Which tool is the source? - [x] Multi-select: What to sync? (Skills, MCP) - - [x] Generate `.vibe-sync.json` - - [x] Create `.vibe-sync-cache/` directory + - [x] Generate `.vsync.json` + - [x] Create `.vsync-cache/` directory - [x] Initialize empty manifest.json - [x] Support `--user` flag for global config - [x] Add user-friendly output with chalk + ora -### 4.3 `vibe-sync sync` Command +### 4.3 `vsync sync` Command - [x] Implement `cli/src/commands/sync.ts` - [x] Read configuration @@ -311,7 +311,7 @@ This document tracks all implementation tasks for vibe-sync MVP. Each phase must - [x] Add progress indicators with ora - [x] Add error recovery (rollback on failure) -### 4.4 `vibe-sync plan` Command +### 4.4 `vsync plan` Command - [x] Implement `cli/src/commands/plan.ts` - [x] Same as `sync --dry-run` but with detailed output @@ -319,7 +319,7 @@ This document tracks all implementation tasks for vibe-sync MVP. Each phase must - [x] Show operation reasons - [x] No confirmation prompt -### 4.5 `vibe-sync status` Command +### 4.5 `vsync status` Command - [x] Implement `cli/src/commands/status.ts` - [x] Read configuration @@ -332,7 +332,7 @@ This document tracks all implementation tasks for vibe-sync MVP. Each phase must - [x] Check for pending changes - [x] Support `--user` flag -### 4.6 `vibe-sync list` Command +### 4.6 `vsync list` Command - [x] Implement `cli/src/commands/list.ts` - [x] `list skills` - Show all skills with hash, description, synced targets @@ -340,7 +340,7 @@ This document tracks all implementation tasks for vibe-sync MVP. Each phase must - [x] Table format output - [x] Support `--user` flag -### 4.7 `vibe-sync clean` Command +### 4.7 `vsync clean` Command - [x] Implement `cli/src/commands/clean.ts` - [x] Interactive mode: multi-select items to remove @@ -777,7 +777,7 @@ This document tracks all implementation tasks for vibe-sync MVP. Each phase must **Goal**: Support Chinese and English languages for all CLI output -**Background**: Make vibe-sync accessible to Chinese-speaking developers. Detect or prompt for language preference on first run, store in user-level config. +**Background**: Make vsync accessible to Chinese-speaking developers. Detect or prompt for language preference on first run, store in user-level config. ### 10.1 i18n Infrastructure ✅ @@ -829,10 +829,10 @@ This document tracks all implementation tasks for vibe-sync MVP. Each phase must - [x] Integration with existing `detectSystemLanguage()` from Phase 10.1 - [x] Uses existing `loadConfig()` and `saveConfig()` from config-manager - [x] Add language prompt (first run only) - - [x] Check if `~/.vibe-sync.json` exists via `shouldPromptForLanguage()` + - [x] Check if `~/.vsync.json` exists via `shouldPromptForLanguage()` - [x] If not, prompt: "Choose language / 选择语言:" (English first per linter) - [x] Options: "English" / "中文" - - [x] Save choice to `~/.vibe-sync.json` with minimal config + - [x] Save choice to `~/.vsync.json` with minimal config - [x] Falls back to system language if prompt is skipped - [x] Added 14 comprehensive tests - [x] `shouldPromptForLanguage()` - Config existence checks @@ -884,7 +884,7 @@ This document tracks all implementation tasks for vibe-sync MVP. Each phase must }, "commands": { "init": { - "welcome": "🚀 Welcome to vibe-sync!", + "welcome": "🚀 Welcome to vsync!", "selectTools": "Which AI coding tools do you use?", "selectSource": "Which tool should be the configuration source?" }, @@ -895,7 +895,7 @@ This document tracks all implementation tasks for vibe-sync MVP. Each phase must } }, "errors": { - "configNotFound": "Configuration file not found. Run 'vibe-sync init' first.", + "configNotFound": "Configuration file not found. Run 'vsync init' first.", "invalidConfig": "Invalid configuration: {message}" } } @@ -912,7 +912,7 @@ This document tracks all implementation tasks for vibe-sync MVP. Each phase must }, "commands": { "init": { - "welcome": "🚀 欢迎使用 vibe-sync!", + "welcome": "🚀 欢迎使用 vsync!", "selectTools": "您使用哪些 AI 编程工具?", "selectSource": "哪个工具应作为配置源?" }, @@ -923,7 +923,7 @@ This document tracks all implementation tasks for vibe-sync MVP. Each phase must } }, "errors": { - "configNotFound": "未找到配置文件。请先运行 'vibe-sync init'。", + "configNotFound": "未找到配置文件。请先运行 'vsync init'。", "invalidConfig": "无效的配置:{message}" } } @@ -947,7 +947,7 @@ This document tracks all implementation tasks for vibe-sync MVP. Each phase must - [x] Update README.md - [x] Chinese version already exists (README_cn.md) - [x] Document language configuration - - [x] Show how to change language (saved in ~/.vibe-sync.json) + - [x] Show how to change language (saved in ~/.vsync.json) - [ ] Update help text (future enhancement) - [ ] Add `--lang` flag to override language (deferred to future version) diff --git a/cli/CHANGELOG.md b/cli/CHANGELOG.md index 4c94850..e184c3c 100644 --- a/cli/CHANGELOG.md +++ b/cli/CHANGELOG.md @@ -1,25 +1,25 @@ -# vibe-sync +# vsync ## 1.0.4 ### Patch Changes -- [#10](https://github.com/nicepkg/vibe-sync/pull/10) [`63604c1`](https://github.com/nicepkg/vibe-sync/commit/63604c1250efe9b4e39712e6178ff71852736945) Thanks [@2214962083](https://github.com/2214962083)! - release first version 06 +- [#10](https://github.com/nicepkg/vsync/pull/10) [`63604c1`](https://github.com/nicepkg/vsync/commit/63604c1250efe9b4e39712e6178ff71852736945) Thanks [@2214962083](https://github.com/2214962083)! - release first version 06 ## 1.0.3 ### Patch Changes -- [#8](https://github.com/nicepkg/vibe-sync/pull/8) [`83f3082`](https://github.com/nicepkg/vibe-sync/commit/83f308251c4afa649d4ed1fe785315f89ac9ba2f) Thanks [@2214962083](https://github.com/2214962083)! - release first version 05 +- [#8](https://github.com/nicepkg/vsync/pull/8) [`83f3082`](https://github.com/nicepkg/vsync/commit/83f308251c4afa649d4ed1fe785315f89ac9ba2f) Thanks [@2214962083](https://github.com/2214962083)! - release first version 05 ## 1.0.2 ### Patch Changes -- [#6](https://github.com/nicepkg/vibe-sync/pull/6) [`8da5e12`](https://github.com/nicepkg/vibe-sync/commit/8da5e121708595544db269575fba06e02444c378) Thanks [@2214962083](https://github.com/2214962083)! - first version 04 +- [#6](https://github.com/nicepkg/vsync/pull/6) [`8da5e12`](https://github.com/nicepkg/vsync/commit/8da5e121708595544db269575fba06e02444c378) Thanks [@2214962083](https://github.com/2214962083)! - first version 04 ## 1.0.1 ### Patch Changes -- [#4](https://github.com/nicepkg/vibe-sync/pull/4) [`f6b7442`](https://github.com/nicepkg/vibe-sync/commit/f6b74428b6ce2b0ca1a5ce2f707b81ff70ea86be) Thanks [@2214962083](https://github.com/2214962083)! - first version 03 +- [#4](https://github.com/nicepkg/vsync/pull/4) [`f6b7442`](https://github.com/nicepkg/vsync/commit/f6b74428b6ce2b0ca1a5ce2f707b81ff70ea86be) Thanks [@2214962083](https://github.com/2214962083)! - first version 03 diff --git a/cli/docs/BENCHMARKS.md b/cli/docs/BENCHMARKS.md index 029c214..f85560d 100644 --- a/cli/docs/BENCHMARKS.md +++ b/cli/docs/BENCHMARKS.md @@ -1,6 +1,6 @@ -# vibe-sync Performance Benchmarks +# vsync Performance Benchmarks -This document contains performance measurement results for vibe-sync optimization features. +This document contains performance measurement results for vsync optimization features. ## Methodology @@ -23,13 +23,14 @@ Benchmarks were conducted using the `scripts/benchmark-performance.ts` script, w **Test Scenario**: Syncing 50 skills to 2 target tools -| Metric | Sequential (Baseline) | Parallel (Optimized) | Improvement | -|--------|----------------------|----------------------|-------------| -| Duration | 337.50ms | 264.75ms | **21.6% faster** | -| Throughput | 296 items/sec | 378 items/sec | **1.27x speedup** | -| Time Saved | - | 72.75ms | - | +| Metric | Sequential (Baseline) | Parallel (Optimized) | Improvement | +| ---------- | --------------------- | -------------------- | ----------------- | +| Duration | 337.50ms | 264.75ms | **21.6% faster** | +| Throughput | 296 items/sec | 378 items/sec | **1.27x speedup** | +| Time Saved | - | 72.75ms | - | **Analysis**: + - Parallel sync achieves a **1.27x speedup** by executing target writes concurrently - With 2 targets, we get ~28% of theoretical 2x maximum (limited by I/O bottlenecks) - For larger projects with more targets, speedup scales proportionally @@ -39,12 +40,13 @@ Benchmarks were conducted using the `scripts/benchmark-performance.ts` script, w **Test Scenario**: Reading 50 skills twice -| Metric | First Read | Second Read | Result | -|--------|-----------|-------------|--------| -| Duration | 5.30ms | 6.10ms | Similar | -| Memory Delta | -1.45MB | -1.43MB | Similar | +| Metric | First Read | Second Read | Result | +| ------------ | ---------- | ----------- | ------- | +| Duration | 5.30ms | 6.10ms | Similar | +| Memory Delta | -1.45MB | -1.43MB | Similar | **Analysis**: + - OS file system caching provides baseline performance - Both reads are fast (~5-6ms for 50 skills) - Memory usage shows GC effects rather than caching overhead @@ -57,13 +59,14 @@ Benchmarks were conducted using the `scripts/benchmark-performance.ts` script, w Based on the parallel sync results, expected performance for different configurations: | Skills | Targets | Sequential Time | Parallel Time | Speedup | -|--------|---------|----------------|---------------|---------| -| 50 | 2 | 338ms | 265ms | 1.27x | -| 100 | 2 | ~676ms | ~530ms | 1.27x | -| 50 | 3 | ~507ms | ~338ms | 1.50x | -| 100 | 3 | ~1014ms | ~676ms | 1.50x | +| ------ | ------- | --------------- | ------------- | ------- | +| 50 | 2 | 338ms | 265ms | 1.27x | +| 100 | 2 | ~676ms | ~530ms | 1.27x | +| 50 | 3 | ~507ms | ~338ms | 1.50x | +| 100 | 3 | ~1014ms | ~676ms | 1.50x | **Note**: Actual results may vary based on: + - File system performance - Skill sizes and complexity - System resources and load @@ -91,11 +94,13 @@ Based on the parallel sync results, expected performance for different configura **Location**: `src/core/parallel-sync.ts` **Mechanism**: + - Uses `Promise.allSettled()` for concurrent execution - Independent writes to each target tool - Fail-safe: Continues other syncs if one fails **Benefits**: + - **21.6% faster** for 2 targets - Scales with number of targets - No code changes required (automatic) @@ -105,11 +110,13 @@ Based on the parallel sync results, expected performance for different configura **Location**: `src/core/incremental-reader.ts`, `src/core/file-cache.ts` **Mechanism**: + - Tracks file metadata (mtime, size) - Skips unchanged files on subsequent syncs -- Persists cache to `.vibe-sync/cache/file-cache.json` +- Persists cache to `.vsync/cache/file-cache.json` **Benefits**: + - Useful for large projects with frequent syncs - Reduces I/O on unchanged files - Cross-session optimization @@ -121,15 +128,18 @@ Based on the parallel sync results, expected performance for different configura **Location**: `src/core/symlink-manager.ts` **Mechanism**: + - Creates symlinks instead of copying skill files - Single source of truth for skills directory **Benefits**: + - **Instant sync** for skills (symlink creation is ~1ms) - Saves disk space - Real-time updates across all tools **Trade-offs**: + - Requires `use_symlinks_for_skills: true` in config - Not supported by all systems/tools - MCP servers still copied (cannot be symlinked) @@ -137,16 +147,19 @@ Based on the parallel sync results, expected performance for different configura ## Recommendations ### For Small Projects (< 20 skills) + - Default configuration works well - Parallel sync provides minor improvement - Consider symlinks if frequently editing skills ### For Medium Projects (20-100 skills) + - Parallel sync provides noticeable improvement - Incremental sync reduces repeated work - Symlinks recommended if supported ### For Large Projects (> 100 skills) + - **Enable symlinks** for maximum performance - Parallel sync essential for multi-target setups - Incremental reader reduces I/O significantly @@ -161,6 +174,7 @@ pnpm tsx scripts/benchmark-performance.ts ``` The script will: + 1. Create temporary test fixtures 2. Measure parallel sync performance 3. Measure file cache performance @@ -181,9 +195,10 @@ Potential areas for further improvement: ## Conclusion -vibe-sync achieves **21.6% performance improvement** through parallel sync optimization. Combined with symlink support and incremental reading, the tool provides excellent performance for projects of all sizes. +vsync achieves **21.6% performance improvement** through parallel sync optimization. Combined with symlink support and incremental reading, the tool provides excellent performance for projects of all sizes. For maximum performance: + - Use symlinks for skills - Sync to multiple targets in parallel (automatic) - Run frequent small syncs instead of infrequent large ones diff --git a/cli/package.json b/cli/package.json index 2b0be57..c334ad0 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,13 +1,13 @@ { - "name": "vibe-sync", + "name": "vsync", "version": "1.0.4", - "description": "CLI for vibe-sync - AI coding tool config synchronizer", + "description": "CLI for vsync - AI coding tool config synchronizer", "type": "module", "publishConfig": { "access": "public" }, "bin": { - "vibe-sync": "./dist/index.js" + "vsync": "./dist/index.js" }, "files": [ "dist" diff --git a/cli/scripts/benchmark-performance.ts b/cli/scripts/benchmark-performance.ts index 39a82b9..7ce53ba 100644 --- a/cli/scripts/benchmark-performance.ts +++ b/cli/scripts/benchmark-performance.ts @@ -36,7 +36,7 @@ async function createTestFixtures(): Promise<{ }> { const tempDir = path.join( tmpdir(), - `vibe-sync-bench-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`, + `vsync-bench-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`, ); await fs.mkdir(tempDir, { recursive: true }); @@ -231,7 +231,7 @@ async function benchmarkIncrementalSync(): Promise<{ * Run all benchmarks and generate report */ async function runBenchmarks(): Promise { - console.log("🚀 vibe-sync Performance Benchmarks"); + console.log("🚀 vsync Performance Benchmarks"); console.log("=".repeat(80)); const results: Array<{ diff --git a/cli/src/adapters/registry.ts b/cli/src/adapters/registry.ts index cafdb30..07d151f 100644 --- a/cli/src/adapters/registry.ts +++ b/cli/src/adapters/registry.ts @@ -213,7 +213,7 @@ registerCoreAdapters(); * @example * ```typescript * // In a plugin package - * import { registerAdapter } from 'vibe-sync'; + * import { registerAdapter } from 'vsync'; * * class MyCustomAdapter extends BaseAdapter { * static readonly TOOL_NAME = "my-tool"; diff --git a/cli/src/cli-setup.ts b/cli/src/cli-setup.ts index 8e31c93..3c0443d 100644 --- a/cli/src/cli-setup.ts +++ b/cli/src/cli-setup.ts @@ -32,7 +32,7 @@ export function createCLI(): Command { const program = new Command(); program - .name("vibe-sync") + .name("vsync") .description( "AI Coding Tool Config Synchronizer\n" + "Single source of truth → Compile to multiple formats → Diff-based sync", @@ -57,7 +57,7 @@ export function createCLI(): Command { } if (err.code === "commander.unknownCommand") { console.error(`\nError: Unknown command '${err.message}'`); - console.error("Run 'vibe-sync --help' to see available commands\n"); + console.error("Run 'vsync --help' to see available commands\n"); process.exit(1); } throw err; diff --git a/cli/src/commands/clean.ts b/cli/src/commands/clean.ts index 40c0c8e..b9a9209 100644 --- a/cli/src/commands/clean.ts +++ b/cli/src/commands/clean.ts @@ -1,5 +1,5 @@ /** - * vibe-sync clean command + * vsync clean command * Remove items from target tools (and optionally from source) */ diff --git a/cli/src/commands/import.ts b/cli/src/commands/import.ts index 4bcb5f0..5e3e818 100644 --- a/cli/src/commands/import.ts +++ b/cli/src/commands/import.ts @@ -1,5 +1,5 @@ /** - * vibe-sync import command + * vsync import command * Import configurations from another project */ diff --git a/cli/src/commands/init.ts b/cli/src/commands/init.ts index fe4ccd7..f2ff988 100644 --- a/cli/src/commands/init.ts +++ b/cli/src/commands/init.ts @@ -1,6 +1,6 @@ /** - * vibe-sync init command - * Initialize vibe-sync configuration + * vsync init command + * Initialize vsync configuration */ import { access } from "node:fs/promises"; @@ -50,7 +50,7 @@ export async function detectTools(projectDir: string): Promise { } /** - * Generate vibe-sync configuration from user selections + * Generate vsync configuration from user selections * * @param options - User selections * @returns Generated config @@ -209,7 +209,7 @@ async function initCommand(options: { user?: boolean }): Promise { console.log( chalk.green( - `\n✅ ${t("commands.init.complete", { command: chalk.bold("vibe-sync sync") })}\n`, + `\n✅ ${t("commands.init.complete", { command: chalk.bold("vsync sync") })}\n`, ), ); } catch (error) { diff --git a/cli/src/commands/list.ts b/cli/src/commands/list.ts index c89656c..863a15b 100644 --- a/cli/src/commands/list.ts +++ b/cli/src/commands/list.ts @@ -1,5 +1,5 @@ /** - * vibe-sync list command + * vsync list command * List all synced items (skills or MCP servers) */ diff --git a/cli/src/commands/plan.ts b/cli/src/commands/plan.ts index 485e37e..50f9387 100644 --- a/cli/src/commands/plan.ts +++ b/cli/src/commands/plan.ts @@ -1,5 +1,5 @@ /** - * vibe-sync plan command + * vsync plan command * Show sync plan without executing */ diff --git a/cli/src/commands/status.ts b/cli/src/commands/status.ts index 965aefc..e4ef70b 100644 --- a/cli/src/commands/status.ts +++ b/cli/src/commands/status.ts @@ -1,5 +1,5 @@ /** - * vibe-sync status command + * vsync status command * Display sync status and configuration info */ @@ -115,7 +115,7 @@ export function formatStatus(data: StatusData): string { lines.push( chalk.cyan(`${t("commands.status.configuration")}: `) + - (data.config.level === "user" ? "~/.vibe-sync.json" : ".vibe-sync.json"), + (data.config.level === "user" ? "~/.vsync.json" : ".vsync.json"), ); // Show manifest path relative to home directory diff --git a/cli/src/commands/sync.ts b/cli/src/commands/sync.ts index 973c128..a866192 100644 --- a/cli/src/commands/sync.ts +++ b/cli/src/commands/sync.ts @@ -1,5 +1,5 @@ /** - * vibe-sync sync command + * vsync sync command * Synchronize configurations across tools */ @@ -148,7 +148,7 @@ export function detectFirstTimeSkillsSync(manifest: Manifest): boolean { * Determine if we should prompt user about symlink usage * Only prompt on first sync when use_symlinks_for_skills is undefined * - * @param config - vibe-sync configuration + * @param config - vsync configuration * @param manifest - Current manifest * @param targetTools - Target tools to sync to * @returns True if should prompt for symlink preference diff --git a/cli/src/core/config-manager.ts b/cli/src/core/config-manager.ts index bfcf478..8d7fb34 100644 --- a/cli/src/core/config-manager.ts +++ b/cli/src/core/config-manager.ts @@ -1,5 +1,5 @@ /** - * Configuration manager for .vibe-sync.json + * Configuration manager for .vsync.json * Pure config operations (no UI logic) * * Separation of Concerns: @@ -40,10 +40,10 @@ export function getConfigPath( ): string { if (level === "project") { const dir = projectDir ?? cwd(); - return join(dir, ".vibe-sync.json"); + return join(dir, ".vsync.json"); } else { const dir = userDir ?? homedir(); - return join(dir, ".vibe-sync.json"); + return join(dir, ".vsync.json"); } } @@ -78,7 +78,7 @@ export async function loadConfig( if (error instanceof Error) { if ("code" in error && error.code === "ENOENT") { throw new Error( - `Configuration file not found: ${configPath}. Run 'vibe-sync init' first.`, + `Configuration file not found: ${configPath}. Run 'vsync init' first.`, ); } throw error; @@ -229,9 +229,7 @@ export async function loadMergedConfig( // If neither exists, throw error if (!userConfig && !projectConfig) { - throw new Error( - "No configuration found. Run 'vibe-sync init' to create one.", - ); + throw new Error("No configuration found. Run 'vsync init' to create one."); } return mergeConfigs(userConfig, projectConfig); diff --git a/cli/src/core/manifest-manager.ts b/cli/src/core/manifest-manager.ts index 0e412c3..5184abe 100644 --- a/cli/src/core/manifest-manager.ts +++ b/cli/src/core/manifest-manager.ts @@ -1,5 +1,5 @@ /** - * Manifest manager for ~/.vibe-sync/cache//manifest.json + * Manifest manager for ~/.vsync/cache//manifest.json * Tracks sync state and hashes for all configuration items */ @@ -32,7 +32,7 @@ export function getProjectCacheDir(projectDir?: string): string { realDir = dir; } const hash = createHash("sha256").update(realDir).digest("hex").slice(0, 16); - return join(homedir(), ".vibe-sync", "cache", hash); + return join(homedir(), ".vsync", "cache", hash); } /** diff --git a/cli/src/core/rollback.ts b/cli/src/core/rollback.ts index 9e077c6..e57ae79 100644 --- a/cli/src/core/rollback.ts +++ b/cli/src/core/rollback.ts @@ -56,7 +56,7 @@ export async function createBackup(filePath: string): Promise { // Create backup file in same directory const dir = dirname(filePath); const file = basename(filePath); - const backupFileName = `.vibe-sync-backup-${Date.now()}-${file}`; + const backupFileName = `.vsync-backup-${Date.now()}-${file}`; const backupPath = join(dir, backupFileName); // Ensure backup directory exists diff --git a/cli/src/core/symlink-sync.ts b/cli/src/core/symlink-sync.ts index 3191b16..450a1c4 100644 --- a/cli/src/core/symlink-sync.ts +++ b/cli/src/core/symlink-sync.ts @@ -52,7 +52,7 @@ export interface DirectoryBackupInfo { /** * Check if symlinks should be used based on configuration * - * @param config - vibe-sync configuration + * @param config - vsync configuration * @returns True if symlinks should be used */ export function shouldUseSymlinks(config: VibeConfig): boolean { @@ -199,7 +199,7 @@ export async function createDirectoryBackup( // Create backup directory in parent directory const parentDir = dirname(dirPath); const dirName = basename(dirPath); - const backupDirName = `.vibe-sync-backup-${Date.now()}-${dirName}`; + const backupDirName = `.vsync-backup-${Date.now()}-${dirName}`; const backupPath = join(parentDir, backupDirName); // Copy directory recursively diff --git a/cli/src/index.ts b/cli/src/index.ts index dd6b831..7bcfd50 100644 --- a/cli/src/index.ts +++ b/cli/src/index.ts @@ -1,7 +1,7 @@ #!/usr/bin/env node /** - * vibe-sync CLI Entry Point + * vsync CLI Entry Point * * AI Coding Tool Config Synchronizer * Single source of truth → Compile to multiple formats → Diff-based sync diff --git a/cli/src/locales/en.json b/cli/src/locales/en.json index dfb9f30..b4277a0 100644 --- a/cli/src/locales/en.json +++ b/cli/src/locales/en.json @@ -10,8 +10,8 @@ }, "commands": { "init": { - "welcome": "🎯 vibe-sync initialization", - "description": "Initialize vibe-sync configuration", + "welcome": "🎯 vsync initialization", + "description": "Initialize vsync configuration", "detectingTools": "Detecting installed tools...", "detectedTools": "Detected tools: {tools}", "selectTools": "Which tools do you want to sync?", @@ -24,7 +24,7 @@ "agentsChoiceInit": "Agents", "commandsChoiceInit": "Commands", "creatingConfig": "Creating configuration...", - "configCreated": "Created .vibe-sync.json", + "configCreated": "Created .vsync.json", "complete": "Initialization complete! Run {command} to start syncing.", "userLevelOption": "Create user-level config instead of project-level" }, @@ -96,7 +96,7 @@ "hash": "Hash", "oldHash": "Old", "newHash": "New", - "applyHint": "Run `vibe-sync sync` to apply this plan" + "applyHint": "Run `vsync sync` to apply this plan" }, "status": { "description": "Show sync status and configuration info", @@ -124,7 +124,7 @@ "pendingChanges": "Pending changes detected", "allUpToDate": "All targets up-to-date", "noChanges": "No pending changes", - "runPlanToSee": "Run `vibe-sync plan` to see sync plan", + "runPlanToSee": "Run `vsync plan` to see sync plan", "timeJustNow": "just now", "timeMinutesAgo": "{minutes} minute{plural} ago", "timeHoursAgo": "{hours} hour{plural} ago", @@ -229,13 +229,13 @@ "agentsImported": "Agents: {imported} imported, {skipped} skipped", "commandsImported": "Commands: {imported} imported, {skipped} skipped", "syncNowPrompt": "Sync to target tools now?", - "syncHint": "Run 'vibe-sync sync' to sync configurations", + "syncHint": "Run 'vsync sync' to sync configurations", "failed": "Import failed", "errors": "Errors:" } }, "errors": { - "configNotFound": "Configuration file not found. Run 'vibe-sync init' first.", + "configNotFound": "Configuration file not found. Run 'vsync init' first.", "invalidConfig": "Invalid configuration: {message}", "readFailed": "Failed to read {item}: {error}", "writeFailed": "Failed to write {item}: {error}", diff --git a/cli/src/locales/zh.json b/cli/src/locales/zh.json index c627103..b95d0d7 100644 --- a/cli/src/locales/zh.json +++ b/cli/src/locales/zh.json @@ -10,8 +10,8 @@ }, "commands": { "init": { - "welcome": "🎯 vibe-sync 初始化", - "description": "初始化 vibe-sync 配置", + "welcome": "🎯 vsync 初始化", + "description": "初始化 vsync 配置", "detectingTools": "正在检测已安装的工具...", "detectedTools": "检测到的工具: {tools}", "selectTools": "您想同步哪些工具?", @@ -24,7 +24,7 @@ "agentsChoiceInit": "代理", "commandsChoiceInit": "命令", "creatingConfig": "正在创建配置...", - "configCreated": "已创建 .vibe-sync.json", + "configCreated": "已创建 .vsync.json", "complete": "初始化完成! 运行 {command} 开始同步。", "userLevelOption": "创建用户级配置而不是项目级配置" }, @@ -96,7 +96,7 @@ "hash": "哈希", "oldHash": "旧值", "newHash": "新值", - "applyHint": "运行 `vibe-sync sync` 来应用此计划" + "applyHint": "运行 `vsync sync` 来应用此计划" }, "status": { "description": "显示同步状态和配置信息", @@ -124,7 +124,7 @@ "pendingChanges": "检测到待处理的更改", "allUpToDate": "所有目标都是最新的", "noChanges": "没有待处理的更改", - "runPlanToSee": "运行 `vibe-sync plan` 查看同步计划", + "runPlanToSee": "运行 `vsync plan` 查看同步计划", "timeJustNow": "刚刚", "timeMinutesAgo": "{minutes} 分钟{plural}前", "timeHoursAgo": "{hours} 小时{plural}前", @@ -229,13 +229,13 @@ "agentsImported": "代理: {imported} 个已导入, {skipped} 个已跳过", "commandsImported": "命令: {imported} 个已导入, {skipped} 个已跳过", "syncNowPrompt": "现在同步到目标工具?", - "syncHint": "运行 'vibe-sync sync' 来同步配置", + "syncHint": "运行 'vsync sync' 来同步配置", "failed": "导入失败", "errors": "错误:" } }, "errors": { - "configNotFound": "未找到配置文件。请先运行 'vibe-sync init'。", + "configNotFound": "未找到配置文件。请先运行 'vsync init'。", "invalidConfig": "无效的配置: {message}", "readFailed": "读取 {item} 失败: {error}", "writeFailed": "写入 {item} 失败: {error}", diff --git a/cli/src/types/config.ts b/cli/src/types/config.ts index 8cba563..6f17fa4 100644 --- a/cli/src/types/config.ts +++ b/cli/src/types/config.ts @@ -1,6 +1,6 @@ /** - * Configuration type definitions for vibe-sync - * Defines the structure of .vibe-sync.json + * Configuration type definitions for vsync + * Defines the structure of .vsync.json */ import { z } from "zod"; @@ -14,7 +14,7 @@ export type SyncMode = "safe" | "prune"; /** * Supported AI coding tools - * These are the core adapters included with vibe-sync. + * These are the core adapters included with vsync. * Third-party adapters can register dynamically via registerAdapter() * * Note: This list must be kept in sync with registered core adapters. @@ -24,8 +24,8 @@ export type ToolName = "claude-code" | "cursor" | "opencode" | "codex"; /** * Configuration level - * - project: Project-specific config (.vibe-sync.json) - * - user: Global user config (~/.vibe-sync.json) + * - project: Project-specific config (.vsync.json) + * - user: Global user config (~/.vsync.json) */ export type ConfigLevel = "project" | "user"; @@ -44,8 +44,8 @@ export interface SyncConfig { } /** - * Main vibe-sync configuration - * Stored in .vibe-sync.json (project) or ~/.vibe-sync.json (user) + * Main vsync configuration + * Stored in .vsync.json (project) or ~/.vsync.json (user) */ export interface VibeConfig { /** JSON schema URL (optional) */ @@ -71,7 +71,7 @@ export interface VibeConfig { use_symlinks_for_skills?: boolean; /** * User interface language preference - * Only applicable for user-level config (~/.vibe-sync.json) + * Only applicable for user-level config (~/.vsync.json) * Defaults to system language if not set * @since v1.2 */ diff --git a/cli/src/types/manifest.ts b/cli/src/types/manifest.ts index 5df81d0..6dea16d 100644 --- a/cli/src/types/manifest.ts +++ b/cli/src/types/manifest.ts @@ -1,7 +1,7 @@ /** - * Manifest type definitions for vibe-sync + * Manifest type definitions for vsync * Tracks sync status and hashes for all items - * Stored in ~/.vibe-sync/cache//manifest.json + * Stored in ~/.vsync/cache//manifest.json */ import type { ToolName } from "./config.js"; diff --git a/cli/src/types/models.ts b/cli/src/types/models.ts index e4b93a3..0fd2df3 100644 --- a/cli/src/types/models.ts +++ b/cli/src/types/models.ts @@ -1,5 +1,5 @@ /** - * Data model type definitions for vibe-sync + * Data model type definitions for vsync * Defines Skills, Agents, and MCP Server structures */ diff --git a/cli/src/types/plan.ts b/cli/src/types/plan.ts index 2efa35c..42e9703 100644 --- a/cli/src/types/plan.ts +++ b/cli/src/types/plan.ts @@ -1,5 +1,5 @@ /** - * Sync plan type definitions for vibe-sync + * Sync plan type definitions for vsync * Defines the structure of diff results and sync plans */ diff --git a/cli/src/utils/config-initializer.ts b/cli/src/utils/config-initializer.ts index 893519e..d147594 100644 --- a/cli/src/utils/config-initializer.ts +++ b/cli/src/utils/config-initializer.ts @@ -70,9 +70,7 @@ export async function ensureLanguageConfig(): Promise { language, }; await saveConfig(minimalConfig, "user", homedir()); - console.log( - chalk.gray(`\n✓ Language preference saved to ~/.vibe-sync.json\n`), - ); + console.log(chalk.gray(`\n✓ Language preference saved to ~/.vsync.json\n`)); } await setLanguage(language); @@ -130,7 +128,7 @@ export async function ensureConfig( ]); if (!shouldInit) { - console.log(chalk.gray("\n💡 Run 'vibe-sync init' later.\n")); + console.log(chalk.gray("\n💡 Run 'vsync init' later.\n")); process.exit(0); } @@ -154,7 +152,7 @@ export async function ensureConfig( ]); if (!shouldInit) { - console.log(chalk.gray("\n💡 Run 'vibe-sync init' later.\n")); + console.log(chalk.gray("\n💡 Run 'vsync init' later.\n")); process.exit(0); } @@ -169,7 +167,7 @@ async function runInitFlow( projectDir: string, isUserLevel: boolean, ): Promise { - console.log(chalk.bold("\n🚀 Let's set up vibe-sync!\n")); + console.log(chalk.bold("\n🚀 Let's set up vsync!\n")); const { detectTools, diff --git a/cli/src/utils/error-formatter.ts b/cli/src/utils/error-formatter.ts index d630674..1979373 100644 --- a/cli/src/utils/error-formatter.ts +++ b/cli/src/utils/error-formatter.ts @@ -126,20 +126,20 @@ export function createConfigError( switch (type) { case "notFound": - message = `Configuration file not found: ${details.filePath || ".vibe-sync.json"}`; - suggestion = "Run 'vibe-sync init' to create a new configuration file."; + message = `Configuration file not found: ${details.filePath || ".vsync.json"}`; + suggestion = "Run 'vsync init' to create a new configuration file."; break; case "invalid": message = `Invalid configuration: ${details.reason || "Unknown error"}`; suggestion = - "Check your .vibe-sync.json file for syntax errors or missing required fields."; + "Check your .vsync.json file for syntax errors or missing required fields."; break; case "corrupt": message = `Configuration file is corrupted: ${details.reason || "Unable to parse"}`; suggestion = - "Backup your config and run 'vibe-sync init' to create a fresh configuration."; + "Backup your config and run 'vsync init' to create a fresh configuration."; break; } @@ -247,7 +247,7 @@ export function createSyncError( case "noTargets": message = "No target tools configured for synchronization"; suggestion = - "Add target tools to your .vibe-sync.json configuration (target_tools array)."; + "Add target tools to your .vsync.json configuration (target_tools array)."; break; case "toolNotFound": @@ -261,7 +261,7 @@ export function createSyncError( message += `\n Expected: ${details.expected}\n Actual: ${details.actual}`; } suggestion = - "The item may have been modified outside of vibe-sync. Run 'vibe-sync sync' to update."; + "The item may have been modified outside of vsync. Run 'vsync sync' to update."; break; case "syncFailed": diff --git a/cli/src/utils/errors.ts b/cli/src/utils/errors.ts index 5b8706a..bf1c1b1 100644 --- a/cli/src/utils/errors.ts +++ b/cli/src/utils/errors.ts @@ -1,5 +1,5 @@ /** - * Custom error types for vibe-sync + * Custom error types for vsync * * Error Handling Strategy: * - WARNING: Log and continue (e.g., invalid config entry) @@ -21,7 +21,7 @@ export enum ErrorSeverity { } /** - * Base error class for vibe-sync + * Base error class for vsync * Provides consistent error handling with severity classification */ export class SyncError extends Error { diff --git a/cli/test/adapters/claude-code.test.ts b/cli/test/adapters/claude-code.test.ts index 3da395e..2bf954d 100644 --- a/cli/test/adapters/claude-code.test.ts +++ b/cli/test/adapters/claude-code.test.ts @@ -5,7 +5,7 @@ import { ClaudeCodeAdapter } from "@src/adapters/claude-code.js"; import type { MCPServer } from "@src/types/models.js"; import * as fileOps from "@src/utils/file-ops.js"; -const testRoot = path.join(path.parse(process.cwd()).root, "vibe-sync-test"); +const testRoot = path.join(path.parse(process.cwd()).root, "vsync-test"); const homeDir = path.join(testRoot, "home", "user"); describe("ClaudeCodeAdapter", () => { diff --git a/cli/test/adapters/opencode.test.ts b/cli/test/adapters/opencode.test.ts index 1f1def0..ec0cc21 100644 --- a/cli/test/adapters/opencode.test.ts +++ b/cli/test/adapters/opencode.test.ts @@ -6,7 +6,7 @@ import { describe, it, expect, beforeEach, afterEach } from "vitest"; import { OpenCodeAdapter } from "@src/adapters/opencode.js"; import type { Skill, MCPServer, Agent, Command } from "@src/types/models.js"; -const testRoot = path.join(path.parse(process.cwd()).root, "vibe-sync-test"); +const testRoot = path.join(path.parse(process.cwd()).root, "vsync-test"); const homeDir = path.join(testRoot, "home", "user"); describe("OpenCodeAdapter", () => { diff --git a/cli/test/cli-setup.test.ts b/cli/test/cli-setup.test.ts index a7ea5a6..34acd0f 100644 --- a/cli/test/cli-setup.test.ts +++ b/cli/test/cli-setup.test.ts @@ -28,7 +28,7 @@ describe("CLI Framework", () => { it("should set correct program name", () => { const program = createCLI(); - expect(program.name()).toBe("vibe-sync"); + expect(program.name()).toBe("vsync"); }); it("should set program description", () => { @@ -103,7 +103,7 @@ describe("CLI Framework", () => { const program = createCLI(); const helpText = program.helpInformation(); - expect(helpText).toContain("vibe-sync"); + expect(helpText).toContain("vsync"); expect(helpText).toContain("Commands:"); }); }); @@ -114,7 +114,7 @@ describe("CLI Framework", () => { // Simulate error by parsing invalid args try { - await program.parseAsync(["node", "vibe-sync", "nonexistent"], { + await program.parseAsync(["node", "vsync", "nonexistent"], { from: "user", }); } catch (error) { diff --git a/cli/test/commands/import.test.ts b/cli/test/commands/import.test.ts index a5ec01d..7f351cd 100644 --- a/cli/test/commands/import.test.ts +++ b/cli/test/commands/import.test.ts @@ -30,7 +30,7 @@ describe("Import Command", () => { ".mcp.json": JSON.stringify({ mcpServers: {}, }), - ".vibe-sync.json": JSON.stringify({ + ".vsync.json": JSON.stringify({ version: "1.0.0", level: "project", source_tool: "claude-code", @@ -120,7 +120,7 @@ describe("Import Command", () => { skills: {}, }, ".mcp.json": JSON.stringify({ mcpServers: {} }), - ".vibe-sync.json": JSON.stringify({ + ".vsync.json": JSON.stringify({ version: "1.0.0", level: "project", source_tool: "claude-code", @@ -168,7 +168,7 @@ describe("Import Command", () => { "/target-project": { ".claude": {}, ".mcp.json": JSON.stringify({ mcpServers: {} }), - ".vibe-sync.json": JSON.stringify({ + ".vsync.json": JSON.stringify({ version: "1.0.0", level: "project", source_tool: "claude-code", @@ -233,7 +233,7 @@ describe("Import Command", () => { ".mcp.json": JSON.stringify({ mcpServers: {}, }), - ".vibe-sync.json": JSON.stringify({ + ".vsync.json": JSON.stringify({ version: "1.0.0", level: "project", source_tool: "claude-code", @@ -288,7 +288,7 @@ describe("Import Command", () => { }, }, }, - ".vibe-sync.json": JSON.stringify({ + ".vsync.json": JSON.stringify({ version: "1.0.0", level: "project", source_tool: "claude-code", @@ -363,7 +363,7 @@ Skill content`, skills: {}, }, ".mcp.json": JSON.stringify({ mcpServers: {} }), - ".vibe-sync.json": JSON.stringify({ + ".vsync.json": JSON.stringify({ version: "1.0.0", level: "project", source_tool: "claude-code", @@ -426,7 +426,7 @@ Skill content`, ".mcp.json": JSON.stringify({ mcpServers: {}, }), - ".vibe-sync.json": JSON.stringify({ + ".vsync.json": JSON.stringify({ version: "1.0.0", level: "project", source_tool: "claude-code", @@ -477,7 +477,7 @@ Skill content`, skills: {}, }, "mcp.json": JSON.stringify({ mcpServers: {} }), - ".vibe-sync.json": JSON.stringify({ + ".vsync.json": JSON.stringify({ version: "1.0.0", level: "project", source_tool: "cursor", @@ -524,7 +524,7 @@ Skill content`, skills: {}, }, "opencode.jsonc": JSON.stringify({ mcp: {} }), - ".vibe-sync.json": JSON.stringify({ + ".vsync.json": JSON.stringify({ version: "1.0.0", level: "project", source_tool: "opencode", @@ -570,7 +570,7 @@ Skill content`, ".claude": { skills: {}, }, - ".vibe-sync.json": JSON.stringify({ + ".vsync.json": JSON.stringify({ version: "1.0.0", level: "project", source_tool: "claude-code", diff --git a/cli/test/commands/init.test.ts b/cli/test/commands/init.test.ts index c714ae3..746340e 100644 --- a/cli/test/commands/init.test.ts +++ b/cli/test/commands/init.test.ts @@ -6,7 +6,7 @@ import { describe, it, expect, beforeEach, afterEach, vi } from "vitest"; import "@src/commands/init.js"; import type { VibeConfig, ToolName } from "@src/types/config.js"; -const testRoot = path.join(path.parse(process.cwd()).root, "vibe-sync-test"); +const testRoot = path.join(path.parse(process.cwd()).root, "vsync-test"); const homeDir = path.join(testRoot, "home", "user"); describe("Init Command", () => { @@ -124,7 +124,7 @@ describe("Init Command", () => { }); describe("File Creation", () => { - it("should create .vibe-sync.json with correct content", async () => { + it("should create .vsync.json with correct content", async () => { const config: VibeConfig = { version: "1.0.0", level: "project", @@ -140,7 +140,7 @@ describe("Init Command", () => { m.saveConfig(config, "/project"), ); - const content = await readFile("/project/.vibe-sync.json", "utf-8"); + const content = await readFile("/project/.vsync.json", "utf-8"); const parsed = JSON.parse(content); expect(parsed.source_tool).toBe("claude-code"); @@ -163,7 +163,7 @@ describe("Init Command", () => { m.saveConfig(config, "/project"), ); - const content = await readFile("/project/.vibe-sync.json", "utf-8"); + const content = await readFile("/project/.vsync.json", "utf-8"); expect(content).toContain("\n"); expect(content).toContain(" "); }); @@ -187,7 +187,7 @@ describe("Init Command", () => { ); const content = await readFile( - path.join(homeDir, ".vibe-sync.json"), + path.join(homeDir, ".vsync.json"), "utf-8", ); const parsed = JSON.parse(content); diff --git a/cli/test/commands/plan.test.ts b/cli/test/commands/plan.test.ts index aead014..95762e1 100644 --- a/cli/test/commands/plan.test.ts +++ b/cli/test/commands/plan.test.ts @@ -36,7 +36,7 @@ describe("Plan Command", () => { expect(output).toContain("skill/test-skill"); expect(output).toContain("Does not exist in target"); expect(output).toContain("abc123def456"); - expect(output).toContain("vibe-sync sync"); + expect(output).toContain("vsync sync"); }); it("should format plan with UPDATE operations showing hash changes", () => { @@ -159,7 +159,7 @@ describe("Plan Command", () => { const output = formatDetailedPlan(plan); - expect(output).toContain("vibe-sync sync"); + expect(output).toContain("vsync sync"); }); it("should handle multiple targets in plan", () => { diff --git a/cli/test/commands/status.test.ts b/cli/test/commands/status.test.ts index 016ca54..b532c92 100644 --- a/cli/test/commands/status.test.ts +++ b/cli/test/commands/status.test.ts @@ -149,7 +149,7 @@ describe("Status Command", () => { }); expect(output).toContain("Pending changes detected"); - expect(output).toContain("vibe-sync plan"); + expect(output).toContain("vsync plan"); }); it("should handle never-synced state", () => { @@ -180,9 +180,9 @@ describe("Status Command", () => { }); expect(output).toContain("Configuration:"); - expect(output).toContain(".vibe-sync.json"); + expect(output).toContain(".vsync.json"); expect(output).toContain("Manifest:"); - expect(output).toContain(".vibe-sync"); + expect(output).toContain(".vsync"); expect(output).toContain("cache"); expect(output).toContain("manifest.json"); }); @@ -211,7 +211,7 @@ describe("Status Command", () => { }); expect(userOutput).toContain("(User)"); - expect(userOutput).toContain("~/.vibe-sync.json"); + expect(userOutput).toContain("~/.vsync.json"); }); it("should display multiple target tools correctly", () => { diff --git a/cli/test/commands/sync-symlink.test.ts b/cli/test/commands/sync-symlink.test.ts index f215a2e..09bc358 100644 --- a/cli/test/commands/sync-symlink.test.ts +++ b/cli/test/commands/sync-symlink.test.ts @@ -7,7 +7,7 @@ import type { SyncPlan } from "@src/types/plan.js"; describe("Sync Command - Symlink Support", () => { beforeEach(() => { mockFs({ - "/project/.vibe-sync.json": JSON.stringify({ + "/project/.vsync.json": JSON.stringify({ version: "3.0.0", level: "project", source_tool: "claude-code", diff --git a/cli/test/commands/sync.test.ts b/cli/test/commands/sync.test.ts index 3cf4f99..3738e6e 100644 --- a/cli/test/commands/sync.test.ts +++ b/cli/test/commands/sync.test.ts @@ -65,12 +65,12 @@ describe("Sync Command", () => { const mockFsConfig: any = { [TEST_HOME]: { // Add user-level config with language to avoid prompts - ".vibe-sync.json": JSON.stringify({ + ".vsync.json": JSON.stringify({ version: "1.0.0", level: "user", language: "en", }), - ".vibe-sync": { + ".vsync": { cache: { [PROJECT_HASH]: { "manifest.json": JSON.stringify({ @@ -83,7 +83,7 @@ describe("Sync Command", () => { }, }, [TEST_PROJECT]: { - ".vibe-sync.json": JSON.stringify(sampleConfig), + ".vsync.json": JSON.stringify(sampleConfig), ".claude": { skills: { "test-skill": { @@ -297,7 +297,7 @@ describe("Sync Command", () => { const manifestPath = join( TEST_HOME, - ".vibe-sync", + ".vsync", "cache", PROJECT_HASH, "manifest.json", @@ -324,7 +324,7 @@ describe("Sync Command", () => { mockFs({ "/invalid": { - ".vibe-sync.json": JSON.stringify(invalidConfig), + ".vsync.json": JSON.stringify(invalidConfig), // No .claude directory - adapters should return empty arrays }, }); @@ -344,12 +344,12 @@ describe("Sync Command", () => { const mockFsConfig: any = { [TEST_HOME]: { // Add user-level config with language to avoid prompts - ".vibe-sync.json": JSON.stringify({ + ".vsync.json": JSON.stringify({ version: "1.0.0", level: "user", language: "en", }), - ".vibe-sync": { + ".vsync": { cache: { [PROJECT_HASH]: { "manifest.json": "{ invalid json", @@ -358,7 +358,7 @@ describe("Sync Command", () => { }, }, [TEST_PROJECT]: { - ".vibe-sync.json": JSON.stringify(sampleConfig), + ".vsync.json": JSON.stringify(sampleConfig), ".claude": { skills: {}, }, diff --git a/cli/test/core/config-manager.test.ts b/cli/test/core/config-manager.test.ts index 2b28a81..4136434 100644 --- a/cli/test/core/config-manager.test.ts +++ b/cli/test/core/config-manager.test.ts @@ -13,14 +13,14 @@ import { import type { VibeConfig } from "@src/types/config.js"; import { isSamePath } from "../utils/path.js"; -const testRoot = path.join(path.parse(process.cwd()).root, "vibe-sync-test"); +const testRoot = path.join(path.parse(process.cwd()).root, "vsync-test"); const homeDir = path.join(testRoot, "home", "user"); describe("Config Manager", () => { beforeEach(() => { mockFs({ "/project": { - ".vibe-sync.json": JSON.stringify({ + ".vsync.json": JSON.stringify({ version: "3.0.0", level: "project", source_tool: "claude-code", @@ -32,7 +32,7 @@ describe("Config Manager", () => { }), }, [homeDir]: { - ".vibe-sync.json": JSON.stringify({ + ".vsync.json": JSON.stringify({ version: "3.0.0", level: "user", source_tool: "cursor", @@ -54,16 +54,16 @@ describe("Config Manager", () => { describe("getConfigPath", () => { it("should return project config path", () => { const configPath = getConfigPath("project", "/project"); - expect( - isSamePath(configPath, path.join("/project", ".vibe-sync.json")), - ).toBe(true); + expect(isSamePath(configPath, path.join("/project", ".vsync.json"))).toBe( + true, + ); }); it("should return user config path", () => { const configPath = getConfigPath("user", undefined, homeDir); - expect( - isSamePath(configPath, path.join(homeDir, ".vibe-sync.json")), - ).toBe(true); + expect(isSamePath(configPath, path.join(homeDir, ".vsync.json"))).toBe( + true, + ); }); }); @@ -91,7 +91,7 @@ describe("Config Manager", () => { it("should throw error for invalid JSON", async () => { mockFs({ "/bad": { - ".vibe-sync.json": "{ invalid json", + ".vsync.json": "{ invalid json", }, }); @@ -114,7 +114,7 @@ describe("Config Manager", () => { await saveConfig(config, "project", "/empty"); - const saved = await readFile("/empty/.vibe-sync.json", "utf-8"); + const saved = await readFile("/empty/.vsync.json", "utf-8"); const parsed = JSON.parse(saved); expect(parsed.version).toBe("3.0.0"); @@ -135,10 +135,7 @@ describe("Config Manager", () => { await saveConfig(config, "user", "/empty", homeDir); - const saved = await readFile( - path.join(homeDir, ".vibe-sync.json"), - "utf-8", - ); + const saved = await readFile(path.join(homeDir, ".vsync.json"), "utf-8"); const parsed = JSON.parse(saved); expect(parsed.level).toBe("user"); @@ -158,7 +155,7 @@ describe("Config Manager", () => { await saveConfig(config, "project", "/empty"); - const saved = await readFile("/empty/.vibe-sync.json", "utf-8"); + const saved = await readFile("/empty/.vsync.json", "utf-8"); expect(saved).toContain("\n"); expect(saved).toContain(" "); }); diff --git a/cli/test/core/manifest-manager.test.ts b/cli/test/core/manifest-manager.test.ts index 218fdae..00f57ea 100644 --- a/cli/test/core/manifest-manager.test.ts +++ b/cli/test/core/manifest-manager.test.ts @@ -67,7 +67,7 @@ describe("Manifest Manager", () => { beforeEach(() => { const mockFsConfig: any = { [TEST_HOME]: { - ".vibe-sync": { + ".vsync": { cache: { [PROJECT_HASH]: { "manifest.json": JSON.stringify(sampleManifest), @@ -92,7 +92,7 @@ describe("Manifest Manager", () => { const path = getManifestPath(TEST_PROJECT); const expected = join( TEST_HOME, - ".vibe-sync", + ".vsync", "cache", PROJECT_HASH, "manifest.json", @@ -129,7 +129,7 @@ describe("Manifest Manager", () => { it("should handle corrupted manifest gracefully", async () => { mockFs({ "/bad": { - ".vibe-sync-cache": { + ".vsync-cache": { "manifest.json": "{ invalid json", }, }, @@ -152,7 +152,7 @@ describe("Manifest Manager", () => { const savedPath = join( TEST_HOME, - ".vibe-sync", + ".vsync", "cache", EMPTY_HASH, "manifest.json", @@ -169,7 +169,7 @@ describe("Manifest Manager", () => { const savedPath = join( TEST_HOME, - ".vibe-sync", + ".vsync", "cache", EMPTY_HASH, "manifest.json", diff --git a/cli/test/core/rollback.test.ts b/cli/test/core/rollback.test.ts index 31fc9d4..5b508aa 100644 --- a/cli/test/core/rollback.test.ts +++ b/cli/test/core/rollback.test.ts @@ -45,7 +45,7 @@ describe("Rollback Mechanism", () => { const backup = await createBackup(filePath); expect(isSamePath(backup.originalPath, filePath)).toBe(true); - expect(backup.backupPath).toContain(".vibe-sync-backup"); + expect(backup.backupPath).toContain(".vsync-backup"); expect(backup.timestamp).toBeTruthy(); // Verify backup file exists and has correct content @@ -62,7 +62,7 @@ describe("Rollback Mechanism", () => { expect( isSamePath(path.dirname(backup.backupPath), path.dirname(filePath)), ).toBe(true); - expect(backup.backupPath).toContain(".vibe-sync-backup"); + expect(backup.backupPath).toContain(".vsync-backup"); }); it("should handle non-existent file gracefully", async () => { @@ -159,7 +159,7 @@ describe("Rollback Mechanism", () => { const backup: BackupInfo = { originalPath: filePath, - backupPath: "/project/.cursor/.vibe-sync-backup-deleted.md", + backupPath: "/project/.cursor/.vsync-backup-deleted.md", existed: true, timestamp: new Date().toISOString(), }; @@ -218,7 +218,7 @@ describe("Rollback Mechanism", () => { it("should handle non-existent backup gracefully", async () => { const backup: BackupInfo = { originalPath: "/project/file.txt", - backupPath: "/project/.vibe-sync-backup-nonexistent", + backupPath: "/project/.vsync-backup-nonexistent", existed: false, timestamp: new Date().toISOString(), }; diff --git a/cli/test/core/symlink-rollback.test.ts b/cli/test/core/symlink-rollback.test.ts index b5553a5..dee1b9c 100644 --- a/cli/test/core/symlink-rollback.test.ts +++ b/cli/test/core/symlink-rollback.test.ts @@ -40,7 +40,7 @@ describe("Symlink Rollback Support", () => { const backup = await createDirectoryBackup("/target/skills"); expect(isSamePath(backup.originalPath, "/target/skills")).toBe(true); - expect(backup.backupPath).toMatch(/\.vibe-sync-backup-\d+-skills$/); + expect(backup.backupPath).toMatch(/\.vsync-backup-\d+-skills$/); expect(backup.existed).toBe(true); expect(backup.timestamp).toBeTruthy(); @@ -158,7 +158,7 @@ describe("Symlink Rollback Support", () => { it("should handle missing backup gracefully", async () => { const backup: DirectoryBackupInfo = { originalPath: "/target/skills", - backupPath: "/target/.vibe-sync-backup-123-skills", + backupPath: "/target/.vsync-backup-123-skills", existed: true, timestamp: new Date().toISOString(), }; @@ -202,7 +202,7 @@ describe("Symlink Rollback Support", () => { it("should handle already deleted backup gracefully", async () => { const backup: DirectoryBackupInfo = { originalPath: "/target/skills", - backupPath: "/target/.vibe-sync-backup-123-skills", + backupPath: "/target/.vsync-backup-123-skills", existed: true, timestamp: new Date().toISOString(), }; diff --git a/cli/test/e2e/basic-workflow.test.ts b/cli/test/e2e/basic-workflow.test.ts index 2b1366d..a6b9fdb 100644 --- a/cli/test/e2e/basic-workflow.test.ts +++ b/cli/test/e2e/basic-workflow.test.ts @@ -41,7 +41,7 @@ class E2ETestHelper { static async createTempProject(): Promise { const tempDir = path.join( tmpdir(), - `vibe-sync-e2e-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`, + `vsync-e2e-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`, ); await fs.mkdir(tempDir, { recursive: true }); return tempDir; @@ -189,7 +189,7 @@ class E2ETestFixture { } /** - * Initialize vibe-sync configuration + * Initialize vsync configuration */ async initVibeSync( source: ToolName, @@ -319,10 +319,7 @@ describe("Basic E2E Workflows", () => { process.chdir(testDir); // Create minimal user config to avoid language prompts - const userConfigPath = path.join( - process.env.HOME || "~", - ".vibe-sync.json", - ); + const userConfigPath = path.join(process.env.HOME || "~", ".vsync.json"); try { await fs.writeFile( userConfigPath, @@ -342,10 +339,7 @@ describe("Basic E2E Workflows", () => { await E2ETestHelper.cleanupTempProject(testDir); // Cleanup user config file - const userConfigPath = path.join( - process.env.HOME || "~", - ".vibe-sync.json", - ); + const userConfigPath = path.join(process.env.HOME || "~", ".vsync.json"); try { await fs.unlink(userConfigPath); } catch { diff --git a/cli/test/integration/full-sync-flow.test.ts b/cli/test/integration/full-sync-flow.test.ts index 4422309..91ae5f8 100644 --- a/cli/test/integration/full-sync-flow.test.ts +++ b/cli/test/integration/full-sync-flow.test.ts @@ -41,7 +41,7 @@ describe("Full Sync Flow Integration", () => { originalCwd = process.cwd(); // Create temporary test directory - testDir = await fs.mkdtemp(path.join(tmpdir(), "vibe-sync-test-")); + testDir = await fs.mkdtemp(path.join(tmpdir(), "vsync-test-")); claudeDir = path.join(testDir, ".claude"); cursorDir = path.join(testDir, ".cursor"); opencodeDir = path.join(testDir, ".opencode"); @@ -64,10 +64,7 @@ describe("Full Sync Flow Integration", () => { await fs.mkdir(cacheDir, { recursive: true }); // Create minimal user config to avoid language prompts - const userConfigPath = path.join( - process.env.HOME || "~", - ".vibe-sync.json", - ); + const userConfigPath = path.join(process.env.HOME || "~", ".vsync.json"); try { await fs.writeFile( userConfigPath, @@ -100,10 +97,7 @@ describe("Full Sync Flow Integration", () => { } // Cleanup user config file - const userConfigPath = path.join( - process.env.HOME || "~", - ".vibe-sync.json", - ); + const userConfigPath = path.join(process.env.HOME || "~", ".vsync.json"); try { await fs.unlink(userConfigPath); } catch { diff --git a/cli/test/types/config.test.ts b/cli/test/types/config.test.ts index b9694d5..3ed260b 100644 --- a/cli/test/types/config.test.ts +++ b/cli/test/types/config.test.ts @@ -65,7 +65,7 @@ describe("Config Types", () => { it("should allow optional schema field", () => { const config: VibeConfig = { - $schema: "https://vibe-sync.dev/schema.json", + $schema: "https://vsync.dev/schema.json", version: "3.0.0", level: "project", source_tool: "claude-code", @@ -76,7 +76,7 @@ describe("Config Types", () => { }, }; - expect(config.$schema).toBe("https://vibe-sync.dev/schema.json"); + expect(config.$schema).toBe("https://vsync.dev/schema.json"); }); it("should support symlink configuration for skills", () => { diff --git a/cli/test/utils/error-formatter.test.ts b/cli/test/utils/error-formatter.test.ts index 8cd6c85..9156fba 100644 --- a/cli/test/utils/error-formatter.test.ts +++ b/cli/test/utils/error-formatter.test.ts @@ -31,10 +31,10 @@ describe("Error Formatter", () => { it("should include suggestion when provided", () => { const error = new Error("Config invalid"); const formatted = formatError(error, { - suggestion: "Run 'vibe-sync init' first", + suggestion: "Run 'vsync init' first", }); - expect(formatted).toContain("Run 'vibe-sync init' first"); + expect(formatted).toContain("Run 'vsync init' first"); }); it("should format non-Error objects", () => { @@ -47,20 +47,20 @@ describe("Error Formatter", () => { describe("createConfigError", () => { it("should create config not found error", () => { const error = createConfigError("notFound", { - filePath: ".vibe-sync.json", + filePath: ".vsync.json", }); - expect(error.message).toContain(".vibe-sync.json"); + expect(error.message).toContain(".vsync.json"); expect(error.message).toContain("not found"); expect(error.category).toBe(ErrorCategory.CONFIG); }); it("should suggest running init for missing config", () => { const error = createConfigError("notFound", { - filePath: ".vibe-sync.json", + filePath: ".vsync.json", }); - expect(error.suggestion).toContain("vibe-sync init"); + expect(error.suggestion).toContain("vsync init"); }); it("should create invalid config error", () => { @@ -185,7 +185,7 @@ describe("Error Formatter", () => { describe("FormattedError properties", () => { it("should have category property", () => { const error = createConfigError("notFound", { - filePath: ".vibe-sync.json", + filePath: ".vsync.json", }); expect(error.category).toBe(ErrorCategory.CONFIG); @@ -193,7 +193,7 @@ describe("Error Formatter", () => { it("should have suggestion property", () => { const error = createConfigError("notFound", { - filePath: ".vibe-sync.json", + filePath: ".vsync.json", }); expect(error.suggestion).toBeTruthy(); diff --git a/cli/test/utils/i18n.test.ts b/cli/test/utils/i18n.test.ts index a5cc945..b16e397 100644 --- a/cli/test/utils/i18n.test.ts +++ b/cli/test/utils/i18n.test.ts @@ -96,7 +96,7 @@ describe("i18n Utilities", () => { it("should translate nested key", () => { const translation = t("commands.init.welcome"); - expect(translation).toBe("🎯 vibe-sync initialization"); + expect(translation).toBe("🎯 vsync initialization"); }); it("should interpolate single parameter", () => { diff --git a/docs/config.md b/docs/config.md index cd8e899..bce2cb8 100644 --- a/docs/config.md +++ b/docs/config.md @@ -4,16 +4,16 @@ ## Basic Info -- **Project Name**: vibe-sync -- **Repo Name**: vibe-sync +- **Project Name**: vsync +- **Repo Name**: vsync - **Slogan (EN)**: One config. Many AI tools. Zero pain. - **Slogan (ZH)**: 一处配置,多个 AI 工具同步,不再折腾。 -- **Domain**: vibe-sync.xiaominglab.com +- **Domain**: vsync.xiaominglab.com ## GitHub - **Username**: nicepkg -- **Repo**: https://github.com/nicepkg/vibe-sync +- **Repo**: https://github.com/nicepkg/vsync ## Author @@ -35,7 +35,7 @@ ## Notes -vibe-sync syncs AI coding tool configs using a single source of truth. +vsync syncs AI coding tool configs using a single source of truth. Core objects: diff --git a/docs/prd.md b/docs/prd.md index ef14d08..4907b10 100644 --- a/docs/prd.md +++ b/docs/prd.md @@ -1,4 +1,4 @@ -# vibe-sync - AI 氛围编程工具配置同步器 +# vsync - AI 氛围编程工具配置同步器 **版本**: 1.0.0 (当前实施版本: v1.2) **日期**: 2026-01-25 @@ -40,7 +40,7 @@ **问题**: 多个 AI 氛围编程工具 (Claude Code、Cursor、OpenCode、Codex) 各有各的目录结构和配置格式,跨工具管理 Skills、MCP、Agents、Commands 成为噩梦。 -**解决方案**: vibe-sync 提供一条命令同步一切。选一个工具作为源 (source of truth),其他工具自动保持同步。 +**解决方案**: vsync 提供一条命令同步一切。选一个工具作为源 (source of truth),其他工具自动保持同步。 **核心价值**: @@ -342,10 +342,11 @@ enabled = true # optional | **环境变量格式** | `${X}` | ❌ 不支持 | `${env:X}` + 5 个固定的 | `{env:X}` | **关键差异**: + - OpenCode 的 MCP 字段名是 `mcp` 而不是 `mcpServers` (最容易出错!) - OpenCode 必须指定 `type` 字段 (`"local"` 或 `"remote"`) - Codex 使用 TOML 格式,字段名是 `mcp_servers` (下划线) -- 环境变量语法各不相同,vibe-sync 自动转换: +- 环境变量语法各不相同,vsync 自动转换: - Claude Code: `${VAR}` → Cursor: `${env:VAR}` → OpenCode: `{env:VAR}` - Codex 不支持插值,直接写值 @@ -357,16 +358,16 @@ enabled = true # optional ```bash # Project 层(默认) -vibe-sync sync # 操作当前项目 .vibe-sync.json +vsync sync # 操作当前项目 .vsync.json # User 层(全局) -vibe-sync sync --user # 操作 ~/.vibe-sync.json +vsync sync --user # 操作 ~/.vsync.json ``` ### 3.2 配置文件结构 -**Project 层**: `/.vibe-sync.json` -**User 层**: `~/.vibe-sync.json` +**Project 层**: `/.vsync.json` +**User 层**: `~/.vsync.json` ```json { @@ -400,7 +401,7 @@ vibe-sync sync --user # 操作 ~/.vibe-sync.json ### 3.3 Manifest 文件 -**位置**: `.vibe-sync-cache/manifest.json` +**位置**: `.vsync-cache/manifest.json` **作用**: @@ -450,25 +451,25 @@ vibe-sync sync --user # 操作 ~/.vibe-sync.json ### 4.1 命令概览 ```bash -vibe-sync init [--user] # 初始化配置 -vibe-sync sync [--user] [--dry-run] [--prune] # 同步配置 -vibe-sync import [--user] # 从其他项目导入 -vibe-sync clean [name] [--user] # 清理目标工具配置 -vibe-sync status [--user] # 查看同步状态 -vibe-sync list [type] [--user] # 列出配置 -vibe-sync plan [--user] # 查看同步计划(不执行) +vsync init [--user] # 初始化配置 +vsync sync [--user] [--dry-run] [--prune] # 同步配置 +vsync import [--user] # 从其他项目导入 +vsync clean [name] [--user] # 清理目标工具配置 +vsync status [--user] # 查看同步状态 +vsync list [type] [--user] # 列出配置 +vsync plan [--user] # 查看同步计划(不执行) ``` -### 4.2 `vibe-sync init` - 初始化 +### 4.2 `vsync init` - 初始化 -**触发时机**: 用户主动运行或任何命令找不到 `.vibe-sync.json` 时 +**触发时机**: 用户主动运行或任何命令找不到 `.vsync.json` 时 **交互流程** (基于实际代码): ```bash -$ vibe-sync init +$ vsync init -🚀 Welcome to vibe-sync! +🚀 Welcome to vsync! ✔ Detecting existing tools... ✔ Detected: claude-code, cursor @@ -490,7 +491,7 @@ $ vibe-sync init ✔ Cache directory created ✔ Manifest initialized -✅ Setup complete! Run vibe-sync sync to start syncing +✅ Setup complete! Run vsync sync to start syncing ``` **关键特性**: @@ -501,7 +502,7 @@ $ vibe-sync init - 选择要同步的配置类型 - 创建配置文件、缓存目录、manifest -### 4.3 `vibe-sync sync` - 同步配置 +### 4.3 `vsync sync` - 同步配置 **核心功能**: 从配置源读取 → 计算差异 → 生成计划 → 执行同步 @@ -509,22 +510,22 @@ $ vibe-sync init ```bash # Project 层同步(默认 safe 模式) -vibe-sync sync +vsync sync # Prune 模式(严格镜像,会删除目标多余项) -vibe-sync sync --prune +vsync sync --prune # Dry Run(仅显示计划,不执行) -vibe-sync sync --dry-run +vsync sync --dry-run # User 层同步 -vibe-sync sync --user +vsync sync --user ``` #### 输出示例(Safe 模式) ```bash -$ vibe-sync sync +$ vsync sync 📖 Reading source (claude-code)... ✓ Found 3 skills @@ -575,7 +576,7 @@ opencode: #### 输出示例(Prune 模式) ```bash -$ vibe-sync sync --prune +$ vsync sync --prune 📖 Reading source (claude-code)... ✓ Found 2 skills @@ -619,7 +620,7 @@ opencode: ✓ Sync completed in 0.8s ``` -### 4.4 `vibe-sync clean` - 清理目标配置 +### 4.4 `vsync clean` - 清理目标配置 **功能**: 从目标工具移除配置(**不动配置源**) @@ -627,22 +628,22 @@ opencode: ```bash # 删除单个配置 -vibe-sync clean skill/old-skill +vsync clean skill/old-skill # 交互式批量选择 -vibe-sync clean +vsync clean # 从配置源和所有目标删除(危险!) -vibe-sync clean skill/old-skill --from-source +vsync clean skill/old-skill --from-source # User 层清理 -vibe-sync clean --user +vsync clean --user ``` #### 单个删除示例 ```bash -$ vibe-sync clean skill/old-skill +$ vsync clean skill/old-skill ⚠️ This will remove from target tools only (source unchanged) @@ -664,7 +665,7 @@ Source (claude-code) will NOT be affected. #### 从配置源删除示例(危险操作) ```bash -$ vibe-sync clean skill/old-skill --from-source +$ vsync clean skill/old-skill --from-source ⚠️⚠️⚠️ DANGER ZONE ⚠️⚠️⚠️ @@ -691,7 +692,7 @@ Will delete from: #### 批量删除示例 ```bash -$ vibe-sync clean +$ vsync clean ? What type do you want to clean? ❯ Skills @@ -718,10 +719,10 @@ Selected items (1): ✓ Cleanup completed ``` -### 4.5 `vibe-sync import` - 导入配置 +### 4.5 `vsync import` - 导入配置 ```bash -$ vibe-sync import ../other-project +$ vsync import ../other-project Scanning ../other-project... @@ -765,12 +766,12 @@ Processing: # 进入正常 sync 流程... ``` -### 4.6 `vibe-sync plan` - 查看同步计划 +### 4.6 `vsync plan` - 查看同步计划 **功能**: 显示详细的同步计划(相当于 `sync --dry-run`) ```bash -$ vibe-sync plan +$ vsync plan 📖 Reading source (claude-code)... ✓ Found 3 skills @@ -806,13 +807,13 @@ cursor: ────────────────────────────────────────────────────────── -Run `vibe-sync sync` to apply this plan +Run `vsync sync` to apply this plan ``` -### 4.7 `vibe-sync status` - 查看状态 +### 4.7 `vsync status` - 查看状态 ```bash -$ vibe-sync status +$ vsync status Configuration Status (Project) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ @@ -820,8 +821,8 @@ Configuration Status (Project) Source Tool: claude-code Target Tools: cursor, opencode Last Sync: 2026-01-24 10:30:00 (2 hours ago) -Configuration: .vibe-sync.json -Manifest: .vibe-sync-cache/manifest.json +Configuration: .vsync.json +Manifest: .vsync-cache/manifest.json Synced Items: Skills: 3 items @@ -836,13 +837,13 @@ Health: ✓ All targets up-to-date ✓ No pending changes -Run `vibe-sync plan` to see sync plan +Run `vsync plan` to see sync plan ``` -### 4.8 `vibe-sync list` - 列出配置 +### 4.8 `vsync list` - 列出配置 ```bash -$ vibe-sync list skills +$ vsync list skills Skills (3 items) - Source: claude-code ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ @@ -862,10 +863,10 @@ Skills (3 items) - Source: claude-code ### 5.1 两种同步模式 -| 模式 | 命令 | CREATE | UPDATE | DELETE | 适用场景 | -| --------- | ------------------------ | ------ | ------ | ------ | ---------------- | -| **Safe** | `vibe-sync sync` | ✅ | ✅ | ❌ | 日常同步(默认) | -| **Prune** | `vibe-sync sync --prune` | ✅ | ✅ | ✅ | 严格镜像 | +| 模式 | 命令 | CREATE | UPDATE | DELETE | 适用场景 | +| --------- | -------------------- | ------ | ------ | ------ | ---------------- | +| **Safe** | `vsync sync` | ✅ | ✅ | ❌ | 日常同步(默认) | +| **Prune** | `vsync sync --prune` | ✅ | ✅ | ✅ | 严格镜像 | ### 5.2 原子化写入 @@ -1279,7 +1280,7 @@ async function updateManifest( manifest.last_sync = now; await atomicWrite( - ".vibe-sync-cache/manifest.json", + ".vsync-cache/manifest.json", JSON.stringify(manifest, null, 2), ); } @@ -1311,7 +1312,7 @@ async function updateManifest( **新增功能**: -- ✅ User 层配置 (~/.vibe-sync.json) +- ✅ User 层配置 (~/.vsync.json) - ✅ Agents 同步 - ✅ Commands 同步 - ✅ Codex 支持 (TOML 格式) @@ -1389,7 +1390,7 @@ async function updateManifest( ### 9.1 核心价值 -**vibe-sync 解决的核心问题**: +**vsync 解决的核心问题**: 多个 AI 氛围编程工具 (Claude Code, Cursor, OpenCode, Codex) 各有各的配置目录和文件格式,导致: @@ -1398,7 +1399,7 @@ async function updateManifest( - 团队协作时配置不一致 - 管理多个工具成本高 -**vibe-sync 的解决方案**: +**vsync 的解决方案**: 一条命令同步所有工具: diff --git a/package.json b/package.json index 1d6c827..b877774 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,12 @@ { - "name": "vibe-sync-repo", + "name": "vsync-repo", "version": "1.0.1", "private": true, "type": "module", - "description": "vibe-sync - One config. Many AI tools. Zero pain.", + "description": "vsync - One config. Many AI tools. Zero pain.", "repository": { "type": "git", - "url": "https://github.com/nicepkg/vibe-sync.git" + "url": "https://github.com/nicepkg/vsync.git" }, "license": "MIT", "scripts": { @@ -14,14 +14,14 @@ "build:website": "pnpm --filter website build", "start:website": "pnpm --filter website start", "start:static-website": "pnpm --filter website start:static", - "dev:cli": "pnpm --filter vibe-sync dev", - "build:cli": "pnpm --filter vibe-sync build", + "dev:cli": "pnpm --filter vsync dev", + "build:cli": "pnpm --filter vsync build", "test": "pnpm -r run test", "test:coverage": "pnpm -r run test:coverage", "lint": "pnpm -r run lint", "lint:fix": "pnpm -r run lint:fix", "typecheck": "pnpm -r run typecheck", - "clean": "rm -rf node_modules vibe-sync/node_modules website/node_modules website/.next", + "clean": "rm -rf node_modules vsync/node_modules website/node_modules website/.next", "prepare": "husky", "changeset": "changeset", "version-packages": "changeset version && pnpm install --lockfile-only", diff --git a/scripts/release-publish.sh b/scripts/release-publish.sh index 9f5ac8d..463ecd6 100644 --- a/scripts/release-publish.sh +++ b/scripts/release-publish.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash set -euo pipefail -pnpm --filter vibe-sync run build +pnpm --filter vsync run build pnpm ci:publish pnpm changeset tag diff --git a/website/content/en/_meta.ts b/website/content/en/_meta.ts index edfe926..d9f0b81 100644 --- a/website/content/en/_meta.ts +++ b/website/content/en/_meta.ts @@ -35,11 +35,11 @@ export default { }, changelog: { title: "Changelog", - href: "https://github.com/nicepkg/vibe-sync/blob/main/CHANGELOG.md", + href: "https://github.com/nicepkg/vsync/blob/main/CHANGELOG.md", }, release: { title: "Release", - href: `https://github.com/nicepkg/vibe-sync/releases`, + href: `https://github.com/nicepkg/vsync/releases`, }, }, }, diff --git a/website/content/en/contributing.mdx b/website/content/en/contributing.mdx index 278b718..5805a5e 100644 --- a/website/content/en/contributing.mdx +++ b/website/content/en/contributing.mdx @@ -1,21 +1,21 @@ --- title: Contributing -description: Contribute to vibe-sync development. Learn setup, TDD workflow, code standards, adding tool adapters, PR process, and development guidelines. TypeScript, pnpm monorepo, 612 tests. +description: Contribute to vsync development. Learn setup, TDD workflow, code standards, adding tool adapters, PR process, and development guidelines. TypeScript, pnpm monorepo, 612 tests. --- # Contributing -Thank you for your interest in contributing to vibe-sync! This guide will help you get started. +Thank you for your interest in contributing to vsync! This guide will help you get started. ## Ways to Contribute ### ⭐ Star the Repository -The simplest way to support the project is to [star it on GitHub](https://github.com/nicepkg/vibe-sync). This helps others discover the tool. +The simplest way to support the project is to [star it on GitHub](https://github.com/nicepkg/vsync). This helps others discover the tool. ### 🐛 Report Bugs -Found a bug? [Open an issue](https://github.com/nicepkg/vibe-sync/issues/new) with: +Found a bug? [Open an issue](https://github.com/nicepkg/vsync/issues/new) with: - Clear description of the problem - Steps to reproduce - Expected vs actual behavior @@ -23,7 +23,7 @@ Found a bug? [Open an issue](https://github.com/nicepkg/vibe-sync/issues/new) wi ### 💡 Suggest Features -Have an idea? [Open a feature request](https://github.com/nicepkg/vibe-sync/issues/new) describing: +Have an idea? [Open a feature request](https://github.com/nicepkg/vsync/issues/new) describing: - The problem you're trying to solve - Your proposed solution - Use cases and benefits @@ -54,8 +54,8 @@ Documentation improvements are valuable: ### Clone the Repository ```bash -git clone https://github.com/nicepkg/vibe-sync.git -cd vibe-sync +git clone https://github.com/nicepkg/vsync.git +cd vsync ``` ### Install Dependencies @@ -71,10 +71,10 @@ pnpm install ### Project Structure -vibe-sync uses a pnpm monorepo: +vsync uses a pnpm monorepo: ``` -vibe-sync/ +vsync/ ├── pnpm-workspace.yaml # Workspace config ├── cli/ # CLI workspace package │ ├── package.json # CLI dependencies @@ -123,15 +123,15 @@ pnpm lint cd cli npm link -# Now you can run vibe-sync globally -vibe-sync --version +# Now you can run vsync globally +vsync --version ``` --- ## Development Workflow -vibe-sync follows a **Test-Driven Development (TDD)** approach: +vsync follows a **Test-Driven Development (TDD)** approach: ### 1. Read Current Task @@ -575,8 +575,8 @@ export function myFunction(paramName: string): string { Need help contributing? -- **Discussions**: [GitHub Discussions](https://github.com/nicepkg/vibe-sync/discussions) -- **Issues**: [Ask on GitHub](https://github.com/nicepkg/vibe-sync/issues) +- **Discussions**: [GitHub Discussions](https://github.com/nicepkg/vsync/discussions) +- **Issues**: [Ask on GitHub](https://github.com/nicepkg/vsync/issues) - **Email**: 2214962083@qq.com --- @@ -604,4 +604,4 @@ Contributors are recognized in: - Release notes - GitHub contributors graph -Thank you for making vibe-sync better! 🎉 +Thank you for making vsync better! 🎉 diff --git a/website/content/en/docs/advanced-features.mdx b/website/content/en/docs/advanced-features.mdx index c9a7ee3..f569381 100644 --- a/website/content/en/docs/advanced-features.mdx +++ b/website/content/en/docs/advanced-features.mdx @@ -1,15 +1,15 @@ --- title: Advanced Features -description: Master advanced vibe-sync features - symlink support for Skills, performance optimization (hash-based detection, parallel ops), multi-language CLI (en/zh), rollback safety, and CI/CD integration. +description: Master advanced vsync features - symlink support for Skills, performance optimization (hash-based detection, parallel ops), multi-language CLI (en/zh), rollback safety, and CI/CD integration. --- # Advanced Features -Explore advanced features and optimization techniques in vibe-sync. +Explore advanced features and optimization techniques in vsync. ## Symlink Support (v1.2+) -vibe-sync can use symbolic links for Skills directories instead of copying files, providing instant updates and significant disk space savings. +vsync can use symbolic links for Skills directories instead of copying files, providing instant updates and significant disk space savings. ### How Symlinks Work @@ -32,7 +32,7 @@ When symlinks are enabled: #### During First Sync -On your first `vibe-sync sync`, you'll be prompted: +On your first `vsync sync`, you'll be prompted: ``` ? How would you like to sync Skills? @@ -40,11 +40,11 @@ On your first `vibe-sync sync`, you'll be prompted: Copy files (traditional - independent copies) ``` -Your choice is saved in `.vibe-sync.json`. +Your choice is saved in `.vsync.json`. #### Manual Configuration -Edit `.vibe-sync.json`: +Edit `.vsync.json`: ```json { @@ -71,20 +71,20 @@ You can change the setting anytime: ```bash # 1. Edit config -vim .vibe-sync.json +vim .vsync.json # Change "use_symlinks_for_skills" to true/false # 2. Re-sync to apply -vibe-sync sync +vsync sync ``` -vibe-sync will handle the conversion automatically, replacing symlinks with copies or vice versa. +vsync will handle the conversion automatically, replacing symlinks with copies or vice versa. --- ## Performance Optimization -vibe-sync is optimized for speed and efficiency. +vsync is optimized for speed and efficiency. ### Hash-Based Change Detection @@ -146,13 +146,13 @@ All writes use atomic operations: ## Multi-Language CLI (v1.2+) -vibe-sync supports English and Chinese (中文) interfaces. +vsync supports English and Chinese (中文) interfaces. ### Setting Language #### User-Level (Global) -Edit `~/.vibe-sync.json`: +Edit `~/.vsync.json`: ```json { @@ -164,7 +164,7 @@ Edit `~/.vibe-sync.json`: ```bash export VIBE_SYNC_LANG=zh -vibe-sync sync +vsync sync ``` ### Supported Languages @@ -214,10 +214,10 @@ For complex setups, use multiple configs: ```bash # Project has its own config cd ~/my-project -vibe-sync sync +vsync sync # User has global config -vibe-sync sync --user +vsync sync --user ``` Both layers can coexist—project configs don't override user configs. @@ -228,10 +228,10 @@ Need to import from a different tool temporarily? ```bash # 1. Import from Cursor to current source -vibe-sync import /path/to/cursor/project +vsync import /path/to/cursor/project # 2. Sync to targets -vibe-sync sync +vsync sync ``` Your source tool remains unchanged; you're just importing new items. @@ -268,7 +268,7 @@ Your source tool remains unchanged; you're just importing new items. ### Cross-Tool Variable Syntax -vibe-sync automatically converts between tools: +vsync automatically converts between tools: | Source (Claude Code) | Target (Cursor) | Target (OpenCode) | |:--------------------|:----------------|:------------------| @@ -318,7 +318,7 @@ on: push: paths: - '.claude/**' - - '.vibe-sync.json' + - '.vsync.json' jobs: sync: @@ -332,7 +332,7 @@ jobs: node-version: '18' - name: Sync configs - run: npx vibe-sync sync --yes + run: npx vsync sync --yes env: # Add any required environment variables GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -346,10 +346,10 @@ Automatically sync before commits: #!/bin/bash # .git/hooks/pre-commit -# Check if .vibe-sync.json exists -if [ -f .vibe-sync.json ]; then - echo "Running vibe-sync..." - npx vibe-sync sync --yes +# Check if .vsync.json exists +if [ -f .vsync.json ]; then + echo "Running vsync..." + npx vsync sync --yes # Add synced files to commit git add .cursor/ .opencode/ .codex/ @@ -364,7 +364,7 @@ Planned feature for automatic syncing on file changes: ```bash # Auto-sync when source configs change -vibe-sync watch +vsync watch ``` This will monitor source directories and trigger syncs automatically. @@ -379,13 +379,13 @@ Set environment variable: ```bash export VIBE_SYNC_DEBUG=1 -vibe-sync sync +vsync sync ``` ### Verbose Output ```bash -vibe-sync sync --verbose +vsync sync --verbose ``` ### Check Manifest @@ -393,7 +393,7 @@ vibe-sync sync --verbose Inspect the manifest to see sync state: ```bash -cat .vibe-sync-cache/manifest.json | jq +cat .vsync-cache/manifest.json | jq ``` --- @@ -428,7 +428,7 @@ cat .vibe-sync-cache/manifest.json | jq ```bash # Project uses Claude Code + Cursor cd ~/project-a -cat .vibe-sync.json +cat .vsync.json { "source_tool": "claude-code", "target_tools": ["cursor"] @@ -436,7 +436,7 @@ cat .vibe-sync.json # Another project uses Cursor + OpenCode cd ~/project-b -cat .vibe-sync.json +cat .vsync.json { "source_tool": "cursor", "target_tools": ["opencode"] @@ -448,5 +448,5 @@ cat .vibe-sync.json ## Next Steps - Check the [FAQ](../faq) for common questions -- Read about [Contributing](../../contributing) to vibe-sync +- Read about [Contributing](../../contributing) to vsync - Explore [Configuration](../configuration) details diff --git a/website/content/en/docs/cli-commands.mdx b/website/content/en/docs/cli-commands.mdx index f6146f1..6aaefd2 100644 --- a/website/content/en/docs/cli-commands.mdx +++ b/website/content/en/docs/cli-commands.mdx @@ -1,16 +1,16 @@ --- title: CLI Commands -description: Complete CLI reference for vibe-sync. All 7 commands with options and examples - init, sync, plan, status, list, clean, import. Learn safe/prune modes, dry-run, and automation flags. +description: Complete CLI reference for vsync. All 7 commands with options and examples - init, sync, plan, status, list, clean, import. Learn safe/prune modes, dry-run, and automation flags. --- # CLI Commands -Complete reference for all vibe-sync commands with examples and options. +Complete reference for all vsync commands with examples and options. ## Command Overview ```bash -vibe-sync [options] +vsync [options] ``` Available commands: @@ -31,17 +31,17 @@ Global options: ## init -Initialize vibe-sync configuration for project or user level. +Initialize vsync configuration for project or user level. ### Usage ```bash -vibe-sync init [options] +vsync init [options] ``` ### Options -- `--user` - Create user-level config (~/.vibe-sync.json) +- `--user` - Create user-level config (~/.vsync.json) ### Interactive Prompts @@ -53,9 +53,9 @@ vibe-sync init [options] ### Example ```bash -$ vibe-sync init +$ vsync init -🚀 Welcome to vibe-sync! +🚀 Welcome to vsync! ✔ Detecting existing tools... ✔ Detected: claude-code, cursor @@ -77,14 +77,14 @@ $ vibe-sync init ✔ Cache directory created ✔ Manifest initialized -✅ Setup complete! Run vibe-sync sync to start syncing +✅ Setup complete! Run vsync sync to start syncing ``` ### What Gets Created -- `.vibe-sync.json` - Configuration file -- `.vibe-sync-cache/` - Cache directory -- `.vibe-sync-cache/manifest.json` - Sync tracking manifest +- `.vsync.json` - Configuration file +- `.vsync-cache/` - Cache directory +- `.vsync-cache/manifest.json` - Sync tracking manifest --- @@ -95,7 +95,7 @@ Synchronize configurations from source to target tools. ### Usage ```bash -vibe-sync sync [options] +vsync sync [options] ``` ### Options @@ -112,7 +112,7 @@ vibe-sync sync [options] Only creates and updates—never deletes. ```bash -vibe-sync sync +vsync sync ``` **Output Example**: @@ -144,7 +144,7 @@ cursor: Strict mirroring—deletes items not in source. ```bash -vibe-sync sync --prune +vsync sync --prune ``` **Warning**: Items in targets but not in source will be deleted! @@ -153,21 +153,21 @@ vibe-sync sync --prune ```bash # Preview changes -vibe-sync sync --dry-run +vsync sync --dry-run # Sync with strict mirroring -vibe-sync sync --prune +vsync sync --prune # Sync user-level configs -vibe-sync sync --user +vsync sync --user # Skip confirmation (useful for automation) -vibe-sync sync -y +vsync sync -y ``` ### First-Time Symlink Prompt -On the first sync, vibe-sync will ask about symlink usage for Skills: +On the first sync, vsync will ask about symlink usage for Skills: ``` ? How would you like to sync Skills? @@ -186,7 +186,7 @@ Preview the sync plan without executing any changes. ### Usage ```bash -vibe-sync plan [options] +vsync plan [options] ``` ### Options @@ -196,7 +196,7 @@ vibe-sync plan [options] ### Example ```bash -$ vibe-sync plan +$ vsync plan 📖 Reading source (claude-code)... ✓ Found 3 skills @@ -222,7 +222,7 @@ cursor: • skill/api-conventions Reason: Hash unchanged -Run `vibe-sync sync` to apply this plan +Run `vsync sync` to apply this plan ``` --- @@ -234,7 +234,7 @@ Check the current sync status and configuration. ### Usage ```bash -vibe-sync status [options] +vsync status [options] ``` ### Options @@ -244,7 +244,7 @@ vibe-sync status [options] ### Example ```bash -$ vibe-sync status +$ vsync status Configuration Status (Project) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ @@ -252,8 +252,8 @@ Configuration Status (Project) Source Tool: claude-code Target Tools: cursor, opencode Last Sync: 2026-01-24 10:30:00 (2 hours ago) -Configuration: .vibe-sync.json -Manifest: .vibe-sync-cache/manifest.json +Configuration: .vsync.json +Manifest: .vsync-cache/manifest.json Synced Items: Skills: 3 items @@ -268,7 +268,7 @@ Health: ✓ All targets up-to-date ✓ No pending changes -Run `vibe-sync plan` to see sync plan +Run `vsync plan` to see sync plan ``` --- @@ -280,7 +280,7 @@ List all synced configurations from the source tool. ### Usage ```bash -vibe-sync list [type] [options] +vsync list [type] [options] ``` ### Arguments @@ -295,19 +295,19 @@ vibe-sync list [type] [options] ```bash # List all configs -vibe-sync list +vsync list # List only skills -vibe-sync list skills +vsync list skills # List user-level MCP servers -vibe-sync list mcp --user +vsync list mcp --user ``` ### Output Example ```bash -$ vibe-sync list skills +$ vsync list skills Skills (3 items) - Source: claude-code ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ @@ -330,7 +330,7 @@ Remove configurations from target tools (and optionally from source). ### Usage ```bash -vibe-sync clean [item] [options] +vsync clean [item] [options] ``` ### Arguments @@ -350,7 +350,7 @@ vibe-sync clean [item] [options] Default behavior—source unchanged. ```bash -vibe-sync clean skill/old-skill +vsync clean skill/old-skill ``` **Output**: @@ -373,7 +373,7 @@ Source (claude-code) will NOT be affected. **Warning**: This is destructive and cannot be undone! ```bash -vibe-sync clean skill/old-skill --from-source +vsync clean skill/old-skill --from-source ``` **Output**: @@ -399,7 +399,7 @@ Will delete from: Run without arguments for interactive selection: ```bash -$ vibe-sync clean +$ vsync clean ? What type do you want to clean? ❯ Skills @@ -427,7 +427,7 @@ Import configurations from another project. ### Usage ```bash -vibe-sync import [options] +vsync import [options] ``` ### Arguments @@ -441,7 +441,7 @@ vibe-sync import [options] ### Example ```bash -$ vibe-sync import ../other-project +$ vsync import ../other-project Scanning ../other-project... @@ -494,40 +494,40 @@ Processing: vim ~/.claude/skills/my-skill/SKILL.md # 2. Sync to targets -vibe-sync sync +vsync sync ``` ### Preview Before Applying ```bash # 1. Check what would change -vibe-sync plan +vsync plan # 2. If satisfied, apply -vibe-sync sync +vsync sync ``` ### Clean Up Old Configs ```bash # Safe cleanup (targets only) -vibe-sync clean skill/old-skill +vsync clean skill/old-skill # Strict mirror mode -vibe-sync sync --prune +vsync sync --prune ``` ### Import from Another Project ```bash -vibe-sync import ../other-project +vsync import ../other-project ``` ### Automation with --yes ```bash # In CI/CD pipelines -vibe-sync sync --yes +vsync sync --yes ``` --- @@ -541,10 +541,10 @@ vibe-sync sync --yes ```bash # General help -vibe-sync --help +vsync --help # Command-specific help -vibe-sync sync --help +vsync sync --help ``` ## Next Steps diff --git a/website/content/en/docs/configuration.mdx b/website/content/en/docs/configuration.mdx index e9737ee..0754c27 100644 --- a/website/content/en/docs/configuration.mdx +++ b/website/content/en/docs/configuration.mdx @@ -1,18 +1,18 @@ --- title: Configuration -description: Complete configuration guide for vibe-sync. Learn .vibe-sync.json structure, tool-specific formats (JSON, TOML, JSONC), MCP differences, environment variable syntax for Claude Code, Cursor, OpenCode, and Codex. +description: Complete configuration guide for vsync. Learn .vsync.json structure, tool-specific formats (JSON, TOML, JSONC), MCP differences, environment variable syntax for Claude Code, Cursor, OpenCode, and Codex. --- # Configuration -Learn how to configure vibe-sync and understand the format differences between AI coding tools. +Learn how to configure vsync and understand the format differences between AI coding tools. ## Config File Structure -vibe-sync uses `.vibe-sync.json` for configuration: +vsync uses `.vsync.json` for configuration: -- **Project-level**: `/.vibe-sync.json` -- **User-level**: `~/.vibe-sync.json` +- **Project-level**: `/.vsync.json` +- **User-level**: `~/.vsync.json` ### Example Configuration @@ -235,18 +235,18 @@ Instructions and prompts for the AI agent... ## Why Format Conversion Matters -Without vibe-sync, migrating configs between tools requires: +Without vsync, migrating configs between tools requires: 1. **Manual format conversion**: JSON → TOML → JSONC 2. **Environment variable rewriting**: `${VAR}` → `${env:VAR}` → `{env:VAR}` 3. **Structure changes**: `mcpServers` → `mcp` → `mcp_servers` 4. **Required field additions**: Adding `type` for OpenCode -**With vibe-sync**, all this happens automatically! 🎉 +**With vsync**, all this happens automatically! 🎉 ## Manifest File -vibe-sync maintains a manifest at `.vibe-sync-cache/manifest.json`: +vsync maintains a manifest at `.vsync-cache/manifest.json`: ```json { @@ -316,8 +316,8 @@ Always use variable references, never hardcode: ### 4. Version Control **Commit to git**: -- `.vibe-sync.json` (safe, no secrets) -- `.vibe-sync-cache/` (optional, helps with performance) +- `.vsync.json` (safe, no secrets) +- `.vsync-cache/` (optional, helps with performance) **Keep out of git**: - Tool-specific config files with credentials diff --git a/website/content/en/docs/core-concepts.mdx b/website/content/en/docs/core-concepts.mdx index 5e040a0..334b3f1 100644 --- a/website/content/en/docs/core-concepts.mdx +++ b/website/content/en/docs/core-concepts.mdx @@ -1,19 +1,19 @@ --- title: Core Concepts -description: Master vibe-sync architecture - learn sync modes (safe vs prune), configuration layers (project vs user), manifest system, atomic operations, and how environment variables are preserved safely. +description: Master vsync architecture - learn sync modes (safe vs prune), configuration layers (project vs user), manifest system, atomic operations, and how environment variables are preserved safely. --- # Core Concepts -Learn the fundamental concepts that power vibe-sync. +Learn the fundamental concepts that power vsync. -## How vibe-sync Works +## How vsync Works -vibe-sync follows a simple but powerful workflow: +vsync follows a simple but powerful workflow: ```mermaid flowchart TD - A[Pick Source Tool
Your source of truth] --> B[vibe-sync reads configs
Skills, MCP, Agents, Commands] + A[Pick Source Tool
Your source of truth] --> B[vsync reads configs
Skills, MCP, Agents, Commands] B --> C[Compare with targets
Calculate differences] C --> D[Show you the plan
What will change] D --> E{Your approval} @@ -29,7 +29,7 @@ flowchart TD ### The Process -1. **Read Source**: vibe-sync reads configuration from your chosen source tool +1. **Read Source**: vsync reads configuration from your chosen source tool 2. **Normalize**: Converts tool-specific formats to a unified data model 3. **Calculate Diff**: Compares source with targets using 3-way diff (source, target, manifest) 4. **Generate Plan**: Creates a detailed sync plan showing all operations @@ -40,7 +40,7 @@ flowchart TD ## Source of Truth Concept -vibe-sync uses a **unidirectional sync model**: +vsync uses a **unidirectional sync model**: - **Source Tool**: Your reference standard—where you edit configurations - **Target Tools**: They sync FROM the source—changes here will be overwritten @@ -59,11 +59,11 @@ Claude Code (Source) → Cursor (Target) ## Configuration Layers -vibe-sync supports two configuration layers: +vsync supports two configuration layers: ### Project Layer (Default) -Located at: `/.vibe-sync.json` +Located at: `/.vsync.json` **Use for**: - Team-shared configurations @@ -71,13 +71,13 @@ Located at: `/.vibe-sync.json` - Checked into version control ```bash -vibe-sync init # Create project config -vibe-sync sync # Sync project configs +vsync init # Create project config +vsync sync # Sync project configs ``` ### User Layer (Global) -Located at: `~/.vibe-sync.json` +Located at: `~/.vsync.json` **Use for**: - Personal global configurations @@ -85,13 +85,13 @@ Located at: `~/.vibe-sync.json` - Not shared with team ```bash -vibe-sync init --user # Create user config -vibe-sync sync --user # Sync user configs +vsync init --user # Create user config +vsync sync --user # Sync user configs ``` ## Sync Modes -vibe-sync offers two sync modes to handle different scenarios: +vsync offers two sync modes to handle different scenarios: ### Safe Mode (Default) @@ -103,7 +103,7 @@ vibe-sync offers two sync modes to handle different scenarios: **When to use**: Daily syncing, team environments, when you want conservative behavior ```bash -vibe-sync sync +vsync sync ``` **Example**: @@ -124,7 +124,7 @@ Result: skill-a, skill-b, skill-c, skill-old (old one kept) **When to use**: Cleaning up old configs, strict mirroring, when you want exact replicas ```bash -vibe-sync sync --prune +vsync sync --prune ``` **Example**: @@ -137,7 +137,7 @@ Result: skill-a, skill-b, skill-c (old one removed) ## The Manifest System -vibe-sync uses a manifest file (`.vibe-sync-cache/manifest.json`) to track sync state. +vsync uses a manifest file (`.vsync-cache/manifest.json`) to track sync state. ### What the Manifest Does @@ -185,7 +185,7 @@ This ensures your configs are never left in a corrupted state, even if the proce ## Environment Variable Preservation -vibe-sync **never expands** environment variables—it preserves the syntax: +vsync **never expands** environment variables—it preserves the syntax: ```json // Source (Claude Code) diff --git a/website/content/en/docs/faq.mdx b/website/content/en/docs/faq.mdx index 7dfc5a8..4d7b1f0 100644 --- a/website/content/en/docs/faq.mdx +++ b/website/content/en/docs/faq.mdx @@ -1,11 +1,11 @@ --- title: FAQ -description: Frequently asked questions about vibe-sync. Get answers on choosing source tools, config overwriting, monorepo support, environment variables, migration, troubleshooting, and performance. +description: Frequently asked questions about vsync. Get answers on choosing source tools, config overwriting, monorepo support, environment variables, migration, troubleshooting, and performance. --- # Frequently Asked Questions -Common questions and answers about using vibe-sync. +Common questions and answers about using vsync. ## General Questions @@ -23,7 +23,7 @@ However, you can use any supported tool as your source. The choice depends on: - Which tool has the most complete setup currently - Team preferences and workflow -### Will vibe-sync overwrite my existing configs? +### Will vsync overwrite my existing configs? By default, **Safe Mode** only creates and updates—it never deletes. Your existing configs in target tools will be updated to match the source, but nothing is removed unless you use `--prune` mode. @@ -31,7 +31,7 @@ By default, **Safe Mode** only creates and updates—it never deletes. Your exis ### What happens if I edit configs directly in target tools? -Changes in target tools will be **overwritten** on the next sync. vibe-sync uses a unidirectional sync model: +Changes in target tools will be **overwritten** on the next sync. vsync uses a unidirectional sync model: ``` Source (Your edits) → Targets (Auto-updated) @@ -44,7 +44,7 @@ Source (Your edits) → Targets (Auto-updated) Simply re-run the init command: ```bash -vibe-sync init +vsync init # Choose a different source tool ``` @@ -52,20 +52,20 @@ Then sync to update all targets with the new source. ### Does it work with monorepos? -**Yes!** Each project can have its own `.vibe-sync.json`. User-level configs (`~/.vibe-sync.json`) work globally across all projects. +**Yes!** Each project can have its own `.vsync.json`. User-level configs (`~/.vsync.json`) work globally across all projects. Example structure: ``` monorepo/ ├── packages/ │ ├── frontend/ -│ │ └── .vibe-sync.json # Frontend-specific config +│ │ └── .vsync.json # Frontend-specific config │ └── backend/ -│ └── .vibe-sync.json # Backend-specific config -└── .vibe-sync.json # Monorepo root config +│ └── .vsync.json # Backend-specific config +└── .vsync.json # Monorepo root config ``` -### Is it safe to commit `.vibe-sync.json` to git? +### Is it safe to commit `.vsync.json` to git? **Yes!** The config file contains: - Tool names @@ -76,10 +76,10 @@ MCP configs with secrets should use environment variables like `${API_KEY}`, whi ### Can I sync in both directions? -No, vibe-sync is **unidirectional** (source → targets). This is intentional to maintain a clear source of truth. +No, vsync is **unidirectional** (source → targets). This is intentional to maintain a clear source of truth. To switch directions: -1. Run `vibe-sync init` +1. Run `vsync init` 2. Choose a different source tool 3. Sync to update targets @@ -89,12 +89,12 @@ To switch directions: ### What's the difference between project-level and user-level? -**Project-Level** (`.vibe-sync.json`): +**Project-Level** (`.vsync.json`): - Team configs shared via git - Project-specific Skills and integrations - Scoped to one project directory -**User-Level** (`~/.vibe-sync.json`): +**User-Level** (`~/.vsync.json`): - Personal global configs - Works across all projects - Not shared with team @@ -106,10 +106,10 @@ Yes! They operate independently: ```bash # Sync project configs -vibe-sync sync +vsync sync # Sync user configs -vibe-sync sync --user +vsync sync --user ``` Project configs don't override user configs—they're separate layers. @@ -150,20 +150,20 @@ Result: A, B, C (D is deleted) Use the `plan` command to see a detailed preview: ```bash -vibe-sync plan +vsync plan ``` Or use `--dry-run` with sync: ```bash -vibe-sync sync --dry-run +vsync sync --dry-run ``` Both show exactly what will be created, updated, deleted, or skipped. ### Can I review changes before they're applied? -Yes! By default, `vibe-sync sync` shows a plan and asks for confirmation: +Yes! By default, `vsync sync` shows a plan and asks for confirmation: ``` 📋 Sync Plan (Safe Mode) @@ -192,11 +192,11 @@ Each tool has its own variable interpolation syntax: | OpenCode | `{env:VAR}` | `{env:API_KEY}` | | Codex | No interpolation | Direct values only | -vibe-sync automatically converts between these formats. +vsync automatically converts between these formats. -### Will vibe-sync expose my secrets? +### Will vsync expose my secrets? -**No!** vibe-sync: +**No!** vsync: - Never expands environment variables - Preserves variable references as-is - Only converts syntax between formats @@ -263,7 +263,7 @@ Both are synced similarly, but Agents have limited tool support. ### Can I sync Cursor Rules? -Cursor Rules (`.cursorrules` files) are currently **not supported**. vibe-sync focuses on: +Cursor Rules (`.cursorrules` files) are currently **not supported**. vsync focuses on: - Skills - MCP servers - Agents @@ -277,10 +277,10 @@ Future versions may add Rules support based on demand. ### "Config file not found" Error -**Solution**: Run `vibe-sync init` to create configuration. +**Solution**: Run `vsync init` to create configuration. ```bash -vibe-sync init +vsync init ``` ### "Permission denied" Errors @@ -302,7 +302,7 @@ vibe-sync init ```bash mkdir -p ~/.cursor -vibe-sync init +vsync init ``` ### Sync Hangs or Times Out @@ -342,8 +342,8 @@ cat .codex/config.toml ### How do I migrate from manual config management? 1. Choose your most complete tool as source -2. Run `vibe-sync init` and select that tool -3. Run `vibe-sync sync` to populate targets +2. Run `vsync init` and select that tool +3. Run `vsync sync` to populate targets 4. Verify configs in target tools 5. Start editing only in source tool going forward @@ -353,25 +353,25 @@ Yes, use the `import` command: ```bash cd new-project -vibe-sync import ../old-project +vsync import ../old-project ``` This copies configs from the old project to your source tool, then you can sync to targets. ### What about migrating from other sync tools? -vibe-sync doesn't directly import from other sync tools, but you can: +vsync doesn't directly import from other sync tools, but you can: 1. Manually copy configs to one of the supported tools 2. Use that tool as source -3. Initialize vibe-sync +3. Initialize vsync 4. Sync to other tools --- ## Performance Questions -### How fast is vibe-sync? +### How fast is vsync? Typical sync times: - First sync: 1-3 seconds (copying files) @@ -384,9 +384,9 @@ Performance depends on: - Disk speed - Number of target tools -### Does vibe-sync cache anything? +### Does vsync cache anything? -Yes! The manifest (`.vibe-sync-cache/manifest.json`) acts as a cache: +Yes! The manifest (`.vsync-cache/manifest.json`) acts as a cache: - Stores SHA256 hashes of all items - Enables fast change detection - Allows incremental syncs @@ -394,7 +394,7 @@ Yes! The manifest (`.vibe-sync-cache/manifest.json`) acts as a cache: ### Can I speed up syncs? 1. **Enable symlinks**: `"use_symlinks_for_skills": true` -2. **Commit manifest**: Include `.vibe-sync-cache/` in git +2. **Commit manifest**: Include `.vsync-cache/` in git 3. **Use selective sync**: Only sync what you need 4. **Use --yes flag**: Skip confirmation prompts @@ -402,6 +402,6 @@ Yes! The manifest (`.vibe-sync-cache/manifest.json`) acts as a cache: ## Still Have Questions? -- **GitHub Issues**: [Ask a question](https://github.com/nicepkg/vibe-sync/issues/new) +- **GitHub Issues**: [Ask a question](https://github.com/nicepkg/vsync/issues/new) - **Documentation**: Browse other docs sections -- **CLI Help**: Run `vibe-sync --help` +- **CLI Help**: Run `vsync --help` diff --git a/website/content/en/docs/getting-started.mdx b/website/content/en/docs/getting-started.mdx index 89a1d0b..f903072 100644 --- a/website/content/en/docs/getting-started.mdx +++ b/website/content/en/docs/getting-started.mdx @@ -1,34 +1,34 @@ --- title: Getting Started -description: Install vibe-sync in 2 minutes. Learn how to initialize configuration, sync AI coding tools (Claude Code, Cursor, OpenCode, Codex), and handle common setup scenarios. +description: Install vsync in 2 minutes. Learn how to initialize configuration, sync AI coding tools (Claude Code, Cursor, OpenCode, Codex), and handle common setup scenarios. --- # Getting Started -Get up and running with vibe-sync in just a few minutes. +Get up and running with vsync in just a few minutes. ## Installation -vibe-sync can be used without installation via `npx`, or installed globally for convenience. +vsync can be used without installation via `npx`, or installed globally for convenience. ### Option 1: Run with npx (Recommended) No installation needed—just run: ```bash -npx vibe-sync +npx vsync ``` ### Option 2: Global Installation ```bash -npm install -g vibe-sync +npm install -g vsync ``` Verify the installation: ```bash -vibe-sync --version +vsync --version ``` ## Quick Start @@ -38,13 +38,13 @@ vibe-sync --version Navigate to your project directory and run: ```bash -vibe-sync init +vsync init ``` For global user-level configuration: ```bash -vibe-sync init --user +vsync init --user ``` > 💡 **Tip**: Learn more about [project vs user levels](../core-concepts#configuration-layers) in Core Concepts. @@ -54,7 +54,7 @@ vibe-sync init --user The CLI will guide you through the setup process: ``` -🚀 Welcome to vibe-sync! +🚀 Welcome to vsync! ✔ Detecting existing tools... ✔ Detected: claude-code, cursor @@ -76,7 +76,7 @@ The CLI will guide you through the setup process: ✔ Cache directory created ✔ Manifest initialized -✅ Setup complete! Run vibe-sync sync to start syncing +✅ Setup complete! Run vsync sync to start syncing ``` > 📚 **Learn more**: See [Configuration](../configuration) for detailed config options. @@ -87,20 +87,20 @@ Once initialized, sync your configurations: ```bash # Safe mode (default: no deletions) -vibe-sync sync +vsync sync # Preview changes without applying -vibe-sync sync --dry-run +vsync sync --dry-run # Strict mirroring (deletes extra items in targets) -vibe-sync sync --prune +vsync sync --prune ``` > 🔍 **Details**: Understand [sync modes](../core-concepts#sync-modes) in Core Concepts. ## Understanding the Output -When you run `vibe-sync sync`, you'll see a detailed plan: +When you run `vsync sync`, you'll see a detailed plan: ``` 📖 Reading source (claude-code)... @@ -128,7 +128,7 @@ cursor: ## Next Steps -Now that you've installed and initialized vibe-sync: +Now that you've installed and initialized vsync: 1. **Learn the Concepts**: Understand [Core Concepts](../core-concepts) like sync modes and layers 2. **Configure Tools**: Explore [Configuration](../configuration) options for each tool @@ -144,8 +144,8 @@ New team member joins with Claude Code already set up: ```bash cd my-project -vibe-sync init # Choose Claude Code as source, Cursor & OpenCode as targets -vibe-sync sync # All tools configured instantly! +vsync init # Choose Claude Code as source, Cursor & OpenCode as targets +vsync sync # All tools configured instantly! ``` ### User-Level Config Sync @@ -153,8 +153,8 @@ vibe-sync sync # All tools configured instantly! Set up global personal configs once, use everywhere: ```bash -vibe-sync init --user # Configure which tools to sync -vibe-sync sync --user # Sync personal Skills, MCP servers globally +vsync init --user # Configure which tools to sync +vsync sync --user # Sync personal Skills, MCP servers globally ``` > 💡 **Related**: Learn about [configuration layers](../core-concepts#configuration-layers). @@ -164,9 +164,9 @@ vibe-sync sync --user # Sync personal Skills, MCP servers globally Moving from Cursor to Claude Code: ```bash -vibe-sync init # Choose Cursor as SOURCE (reference standard) +vsync init # Choose Cursor as SOURCE (reference standard) # Choose Claude Code as TARGET (will pull from source) -vibe-sync sync # All configs migrated instantly! +vsync sync # All configs migrated instantly! ``` > 📖 **More info**: See [FAQ - Migration Questions](../faq#migration-questions). @@ -175,7 +175,7 @@ vibe-sync sync # All configs migrated instantly! ### Config File Not Found -If you see "Config file not found", run `vibe-sync init` first to create the configuration. +If you see "Config file not found", run `vsync init` first to create the configuration. ### Tool Not Detected @@ -189,8 +189,8 @@ On macOS/Linux, you may need to grant permissions for file operations. Check tha ## Getting Help -- Run `vibe-sync --help` for command overview -- Run `vibe-sync --help` for specific command help +- Run `vsync --help` for command overview +- Run `vsync --help` for specific command help - Check the [FAQ](../faq) for common questions - Use the [Quick Reference](../quick-reference) for command examples -- Open an issue on [GitHub](https://github.com/nicepkg/vibe-sync/issues) +- Open an issue on [GitHub](https://github.com/nicepkg/vsync/issues) diff --git a/website/content/en/docs/index.mdx b/website/content/en/docs/index.mdx index 37c75c0..33f35e9 100644 --- a/website/content/en/docs/index.mdx +++ b/website/content/en/docs/index.mdx @@ -1,15 +1,15 @@ --- title: Documentation -description: Complete guide to vibe-sync - sync AI coding tool configs (Claude Code, Cursor, OpenCode, Codex) with one command. Learn installation, configuration, CLI commands, and advanced features. +description: Complete guide to vsync - sync AI coding tool configs (Claude Code, Cursor, OpenCode, Codex) with one command. Learn installation, configuration, CLI commands, and advanced features. --- # Documentation -Welcome to the vibe-sync documentation! Here you'll find everything you need to sync your AI coding tool configurations effortlessly. +Welcome to the vsync documentation! Here you'll find everything you need to sync your AI coding tool configurations effortlessly. -## What is vibe-sync? +## What is vsync? -**vibe-sync** is a powerful CLI tool that synchronizes configuration files across multiple AI coding tools (Claude Code, Cursor, OpenCode, and Codex). It provides: +**vsync** is a powerful CLI tool that synchronizes configuration files across multiple AI coding tools (Claude Code, Cursor, OpenCode, and Codex). It provides: - **Single Source of Truth**: Choose one tool as your reference, others sync automatically - **Smart Format Conversion**: Handles JSON ↔ TOML ↔ JSONC conversions @@ -37,7 +37,7 @@ Welcome to the vibe-sync documentation! Here you'll find everything you need to ## Supported AI Tools -vibe-sync supports synchronization for the following AI coding tools: +vsync supports synchronization for the following AI coding tools: | Tool | Support Level | Config Format | Special Features | |:-----|:-------------|:--------------|:----------------| @@ -48,7 +48,7 @@ vibe-sync supports synchronization for the following AI coding tools: ## What Gets Synced? -vibe-sync manages the following configuration types: +vsync manages the following configuration types: - **Skills**: Reusable agent skill templates - **MCP Servers**: Model Context Protocol integrations @@ -78,19 +78,19 @@ Native support for English and Chinese (中文). ```bash # Install -npm install -g vibe-sync +npm install -g vsync # Initialize -vibe-sync init +vsync init # Sync -vibe-sync sync +vsync sync ``` ## Getting Help -- **GitHub Issues**: [Report bugs or request features](https://github.com/nicepkg/vibe-sync/issues) -- **CLI Help**: Run `vibe-sync --help` or `vibe-sync --help` +- **GitHub Issues**: [Report bugs or request features](https://github.com/nicepkg/vsync/issues) +- **CLI Help**: Run `vsync --help` or `vsync --help` - **Contributing**: Check out the [Contributing Guide](../../contributing) Ready to get started? Head over to [Getting Started](../getting-started)! diff --git a/website/content/en/docs/quick-reference.mdx b/website/content/en/docs/quick-reference.mdx index 2453f53..2a5fb11 100644 --- a/website/content/en/docs/quick-reference.mdx +++ b/website/content/en/docs/quick-reference.mdx @@ -1,11 +1,11 @@ --- title: Quick Reference -description: Quick reference guide and cheat sheet for vibe-sync commands, options, and common usage patterns. Copy-paste ready examples for daily workflows. +description: Quick reference guide and cheat sheet for vsync commands, options, and common usage patterns. Copy-paste ready examples for daily workflows. --- # Quick Reference -Quick reference guide and cheat sheet for vibe-sync commands and common patterns. +Quick reference guide and cheat sheet for vsync commands and common patterns. ## Commands Overview @@ -25,12 +25,12 @@ Quick reference guide and cheat sheet for vibe-sync commands and common patterns ```bash # Project-level setup -vibe-sync init -vibe-sync sync +vsync init +vsync sync # User-level setup -vibe-sync init --user -vibe-sync sync --user +vsync init --user +vsync sync --user ``` **[Learn more →](../getting-started)** @@ -42,30 +42,30 @@ vibe-sync sync --user vim ~/.claude/skills/my-skill/SKILL.md # 2. Sync to targets -vibe-sync sync +vsync sync ``` ### Preview Before Sync ```bash # Check what will change -vibe-sync plan +vsync plan # Or use dry-run -vibe-sync sync --dry-run +vsync sync --dry-run # If satisfied, apply -vibe-sync sync +vsync sync ``` ### Cleanup Old Configs ```bash # Safe: Remove from targets only -vibe-sync clean skill/old-skill +vsync clean skill/old-skill # Strict mirroring (deletes extras) -vibe-sync sync --prune +vsync sync --prune ``` **[Learn more →](../cli-commands#clean)** @@ -75,7 +75,7 @@ vibe-sync sync --prune ### Safe Mode (Default) ```bash -vibe-sync sync +vsync sync ``` - ✅ Creates new items @@ -87,7 +87,7 @@ vibe-sync sync ### Prune Mode ```bash -vibe-sync sync --prune +vsync sync --prune ``` - ✅ Creates new items @@ -102,8 +102,8 @@ vibe-sync sync --prune ```bash # Default behavior -vibe-sync init # Creates .vibe-sync.json -vibe-sync sync # Syncs project configs +vsync init # Creates .vsync.json +vsync sync # Syncs project configs ``` **Use for**: Team configs, project-specific integrations @@ -112,8 +112,8 @@ vibe-sync sync # Syncs project configs ```bash # Add --user flag -vibe-sync init --user # Creates ~/.vibe-sync.json -vibe-sync sync --user # Syncs global configs +vsync init --user # Creates ~/.vsync.json +vsync sync --user # Syncs global configs ``` **Use for**: Personal preferences, global skills @@ -126,84 +126,84 @@ vibe-sync sync --user # Syncs global configs ```bash # Project config -vibe-sync init +vsync init # User config -vibe-sync init --user +vsync init --user ``` ### sync ```bash # Safe sync -vibe-sync sync +vsync sync # Prune mode -vibe-sync sync --prune +vsync sync --prune # Dry run -vibe-sync sync --dry-run +vsync sync --dry-run # User-level -vibe-sync sync --user +vsync sync --user # Skip confirmation -vibe-sync sync -y +vsync sync -y ``` ### plan ```bash # Preview changes -vibe-sync plan +vsync plan # User-level plan -vibe-sync plan --user +vsync plan --user ``` ### status ```bash # Check sync status -vibe-sync status +vsync status # User-level status -vibe-sync status --user +vsync status --user ``` ### list ```bash # List all -vibe-sync list +vsync list # List skills -vibe-sync list skills +vsync list skills # List MCP servers -vibe-sync list mcp +vsync list mcp # User-level -vibe-sync list --user +vsync list --user ``` ### clean ```bash # Remove single item from targets -vibe-sync clean skill/old-skill +vsync clean skill/old-skill # Interactive selection -vibe-sync clean +vsync clean # Delete from source too (DANGEROUS!) -vibe-sync clean skill/old-skill --from-source +vsync clean skill/old-skill --from-source # User-level -vibe-sync clean --user +vsync clean --user # Skip confirmation -vibe-sync clean skill/old-skill -y +vsync clean skill/old-skill -y ``` **[Learn more →](../cli-commands#clean)** @@ -212,15 +212,15 @@ vibe-sync clean skill/old-skill -y ```bash # Import from another project -vibe-sync import ../other-project +vsync import ../other-project # Import to user-level -vibe-sync import ../other-project --user +vsync import ../other-project --user ``` ## Config File Quick Reference -### .vibe-sync.json +### .vsync.json ```json { @@ -280,13 +280,13 @@ vibe-sync import ../other-project --user ```bash # 1. Commit config to git -git add .vibe-sync.json -git commit -m "feat: add vibe-sync config" +git add .vsync.json +git commit -m "feat: add vsync config" # 2. Team members clone and sync git clone cd -vibe-sync sync +vsync sync ``` ### CI/CD Integration @@ -294,7 +294,7 @@ vibe-sync sync ```bash # GitHub Actions - name: Sync configs - run: npx vibe-sync sync --yes + run: npx vsync sync --yes ``` **[Learn more →](../advanced-features#cicd-integration)** @@ -303,13 +303,13 @@ vibe-sync sync ```bash # 1. Import from old project -vibe-sync import ../old-project +vsync import ../old-project # 2. Review plan -vibe-sync plan +vsync plan # 3. Sync to targets -vibe-sync sync +vsync sync ``` **[Learn more →](../faq#migration-questions)** @@ -325,13 +325,13 @@ vibe-sync sync ```bash # General help -vibe-sync --help +vsync --help # Command help -vibe-sync sync --help +vsync sync --help # Version -vibe-sync --version +vsync --version ``` ## Common Issues @@ -349,7 +349,7 @@ ls -la ~/.cursor/ ```bash # Solution: Initialize first -vibe-sync init +vsync init ``` ### Tool Not Detected @@ -357,7 +357,7 @@ vibe-sync init ```bash # Solution: Create tool directory mkdir -p ~/.cursor -vibe-sync init +vsync init ``` **[More troubleshooting →](../faq#troubleshooting)** @@ -365,7 +365,7 @@ vibe-sync init ## Related Resources - **[Getting Started](../getting-started)** - Detailed installation guide -- **[Core Concepts](../core-concepts)** - Understanding vibe-sync +- **[Core Concepts](../core-concepts)** - Understanding vsync - **[CLI Commands](../cli-commands)** - Full command reference - **[Configuration](../configuration)** - Config file details - **[Advanced Features](../advanced-features)** - Symlinks, performance diff --git a/website/content/en/index.mdx b/website/content/en/index.mdx index bf14e34..ff23ef5 100644 --- a/website/content/en/index.mdx +++ b/website/content/en/index.mdx @@ -1,5 +1,5 @@ --- -title: vibe-sync - One config. Many AI tools. Zero pain. +title: vsync - One config. Many AI tools. Zero pain. layout: full search: false sidebar: false diff --git a/website/content/zh/_meta.ts b/website/content/zh/_meta.ts index 69c7d0a..923a129 100644 --- a/website/content/zh/_meta.ts +++ b/website/content/zh/_meta.ts @@ -35,11 +35,11 @@ export default { }, changelog: { title: "更新日志", - href: "https://github.com/nicepkg/vibe-sync/blob/main/CHANGELOG.md", + href: "https://github.com/nicepkg/vsync/blob/main/CHANGELOG.md", }, release: { title: "发布", - href: `https://github.com/nicepkg/vibe-sync/releases`, + href: `https://github.com/nicepkg/vsync/releases`, }, }, }, diff --git a/website/content/zh/contributing.mdx b/website/content/zh/contributing.mdx index d8ba8d4..da6fa76 100644 --- a/website/content/zh/contributing.mdx +++ b/website/content/zh/contributing.mdx @@ -1,21 +1,21 @@ --- title: 贡献指南 -description: 为 vibe-sync 开发做贡献。学习设置、TDD 工作流、代码标准、添加工具适配器、PR 流程和开发指南。TypeScript、pnpm monorepo、612 个测试。 +description: 为 vsync 开发做贡献。学习设置、TDD 工作流、代码标准、添加工具适配器、PR 流程和开发指南。TypeScript、pnpm monorepo、612 个测试。 --- # 贡献指南 -感谢您对贡献 vibe-sync 的兴趣!本指南将帮助您开始。 +感谢您对贡献 vsync 的兴趣!本指南将帮助您开始。 ## 贡献方式 ### ⭐ Star 仓库 -支持项目的最简单方式是在 [GitHub 上 star 它](https://github.com/nicepkg/vibe-sync)。这有助于其他人发现这个工具。 +支持项目的最简单方式是在 [GitHub 上 star 它](https://github.com/nicepkg/vsync)。这有助于其他人发现这个工具。 ### 🐛 报告 Bug -发现了 bug?[提交 issue](https://github.com/nicepkg/vibe-sync/issues/new),包含: +发现了 bug?[提交 issue](https://github.com/nicepkg/vsync/issues/new),包含: - 问题的清晰描述 - 重现步骤 - 期望 vs 实际行为 @@ -23,7 +23,7 @@ description: 为 vibe-sync 开发做贡献。学习设置、TDD 工作流、代 ### 💡 建议功能 -有想法?[提交功能请求](https://github.com/nicepkg/vibe-sync/issues/new),描述: +有想法?[提交功能请求](https://github.com/nicepkg/vsync/issues/new),描述: - 您试图解决的问题 - 您提议的解决方案 - 用例和好处 @@ -54,8 +54,8 @@ description: 为 vibe-sync 开发做贡献。学习设置、TDD 工作流、代 ### 克隆仓库 ```bash -git clone https://github.com/nicepkg/vibe-sync.git -cd vibe-sync +git clone https://github.com/nicepkg/vsync.git +cd vsync ``` ### 安装依赖 @@ -71,10 +71,10 @@ pnpm install ### 项目结构 -vibe-sync 使用 pnpm monorepo: +vsync 使用 pnpm monorepo: ``` -vibe-sync/ +vsync/ ├── pnpm-workspace.yaml # Workspace 配置 ├── cli/ # CLI workspace 包 │ ├── package.json # CLI 依赖 @@ -123,15 +123,15 @@ pnpm lint cd cli npm link -# 现在您可以全局运行 vibe-sync -vibe-sync --version +# 现在您可以全局运行 vsync +vsync --version ``` --- ## 开发工作流 -vibe-sync 遵循**测试驱动开发(TDD)**方法: +vsync 遵循**测试驱动开发(TDD)**方法: ### 1. 读取当前任务 @@ -575,8 +575,8 @@ export function myFunction(paramName: string): string { 需要贡献帮助? -- **讨论**:[GitHub Discussions](https://github.com/nicepkg/vibe-sync/discussions) -- **Issues**:[在 GitHub 上提问](https://github.com/nicepkg/vibe-sync/issues) +- **讨论**:[GitHub Discussions](https://github.com/nicepkg/vsync/discussions) +- **Issues**:[在 GitHub 上提问](https://github.com/nicepkg/vsync/issues) - **Email**:2214962083@qq.com --- @@ -604,4 +604,4 @@ export function myFunction(paramName: string): string { - 发布说明 - GitHub 贡献者图表 -感谢您让 vibe-sync 变得更好!🎉 +感谢您让 vsync 变得更好!🎉 diff --git a/website/content/zh/docs/advanced-features.mdx b/website/content/zh/docs/advanced-features.mdx index ba3c8d6..6c4c644 100644 --- a/website/content/zh/docs/advanced-features.mdx +++ b/website/content/zh/docs/advanced-features.mdx @@ -1,15 +1,15 @@ --- title: 高级功能 -description: 掌握 vibe-sync 高级功能 - Skills 的 symlink 支持、性能优化(基于哈希的检测、并行操作)、多语言 CLI(en/zh)、回滚安全和 CI/CD 集成。 +description: 掌握 vsync 高级功能 - Skills 的 symlink 支持、性能优化(基于哈希的检测、并行操作)、多语言 CLI(en/zh)、回滚安全和 CI/CD 集成。 --- # 高级功能 -探索 vibe-sync 中的高级功能和优化技术。 +探索 vsync 中的高级功能和优化技术。 ## Symlink 支持 (v1.2+) -vibe-sync 可以为 Skills 目录使用符号链接而不是复制文件,提供即时更新和显著的磁盘空间节省。 +vsync 可以为 Skills 目录使用符号链接而不是复制文件,提供即时更新和显著的磁盘空间节省。 ### Symlinks 如何工作 @@ -32,7 +32,7 @@ vibe-sync 可以为 Skills 目录使用符号链接而不是复制文件,提 #### 在首次同步期间 -在首次 `vibe-sync sync` 时,您会收到提示: +在首次 `vsync sync` 时,您会收到提示: ``` ? 您想如何同步 Skills? @@ -40,11 +40,11 @@ vibe-sync 可以为 Skills 目录使用符号链接而不是复制文件,提 复制文件(传统 - 独立副本) ``` -您的选择将保存在 `.vibe-sync.json` 中。 +您的选择将保存在 `.vsync.json` 中。 #### 手动配置 -编辑 `.vibe-sync.json`: +编辑 `.vsync.json`: ```json { @@ -71,20 +71,20 @@ vibe-sync 可以为 Skills 目录使用符号链接而不是复制文件,提 ```bash # 1. 编辑配置 -vim .vibe-sync.json +vim .vsync.json # 将 "use_symlinks_for_skills" 更改为 true/false # 2. 重新同步以应用 -vibe-sync sync +vsync sync ``` -vibe-sync 将自动处理转换,将符号链接替换为副本或反之亦然。 +vsync 将自动处理转换,将符号链接替换为副本或反之亦然。 --- ## 性能优化 -vibe-sync 针对速度和效率进行了优化。 +vsync 针对速度和效率进行了优化。 ### 基于哈希的变更检测 @@ -146,13 +146,13 @@ manifest 充当缓存: ## 多语言 CLI (v1.2+) -vibe-sync 支持英文和中文界面。 +vsync 支持英文和中文界面。 ### 设置语言 #### User 层级(全局) -编辑 `~/.vibe-sync.json`: +编辑 `~/.vsync.json`: ```json { @@ -164,7 +164,7 @@ vibe-sync 支持英文和中文界面。 ```bash export VIBE_SYNC_LANG=zh -vibe-sync sync +vsync sync ``` ### 支持的语言 @@ -214,10 +214,10 @@ vibe-sync sync ```bash # 项目有自己的配置 cd ~/my-project -vibe-sync sync +vsync sync # 用户有全局配置 -vibe-sync sync --user +vsync sync --user ``` 两个层级可以共存——项目配置不会覆盖用户配置。 @@ -228,10 +228,10 @@ vibe-sync sync --user ```bash # 1. 从 Cursor 导入到当前源 -vibe-sync import /path/to/cursor/project +vsync import /path/to/cursor/project # 2. 同步到目标 -vibe-sync sync +vsync sync ``` 您的源工具保持不变;您只是导入新项目。 @@ -268,7 +268,7 @@ vibe-sync sync ### 跨工具变量语法 -vibe-sync 自动在工具之间转换: +vsync 自动在工具之间转换: | 源 (Claude Code) | 目标 (Cursor) | 目标 (OpenCode) | |:--------------------|:----------------|:------------------| @@ -318,7 +318,7 @@ on: push: paths: - '.claude/**' - - '.vibe-sync.json' + - '.vsync.json' jobs: sync: @@ -332,7 +332,7 @@ jobs: node-version: '18' - name: Sync configs - run: npx vibe-sync sync --yes + run: npx vsync sync --yes env: # 添加任何所需的环境变量 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -346,10 +346,10 @@ jobs: #!/bin/bash # .git/hooks/pre-commit -# 检查 .vibe-sync.json 是否存在 -if [ -f .vibe-sync.json ]; then - echo "Running vibe-sync..." - npx vibe-sync sync --yes +# 检查 .vsync.json 是否存在 +if [ -f .vsync.json ]; then + echo "Running vsync..." + npx vsync sync --yes # 将同步的文件添加到提交 git add .cursor/ .opencode/ .codex/ @@ -364,7 +364,7 @@ fi ```bash # 当源配置更改时自动同步 -vibe-sync watch +vsync watch ``` 这将监控源目录并自动触发同步。 @@ -379,13 +379,13 @@ vibe-sync watch ```bash export VIBE_SYNC_DEBUG=1 -vibe-sync sync +vsync sync ``` ### 详细输出 ```bash -vibe-sync sync --verbose +vsync sync --verbose ``` ### 检查 Manifest @@ -393,7 +393,7 @@ vibe-sync sync --verbose 检查 manifest 以查看同步状态: ```bash -cat .vibe-sync-cache/manifest.json | jq +cat .vsync-cache/manifest.json | jq ``` --- @@ -428,7 +428,7 @@ cat .vibe-sync-cache/manifest.json | jq ```bash # 项目使用 Claude Code + Cursor cd ~/project-a -cat .vibe-sync.json +cat .vsync.json { "source_tool": "claude-code", "target_tools": ["cursor"] @@ -436,7 +436,7 @@ cat .vibe-sync.json # 另一个项目使用 Cursor + OpenCode cd ~/project-b -cat .vibe-sync.json +cat .vsync.json { "source_tool": "cursor", "target_tools": ["opencode"] @@ -448,5 +448,5 @@ cat .vibe-sync.json ## 下一步 - 查看 [FAQ](../faq) 了解常见问题 -- 阅读关于[贡献](../../contributing)到 vibe-sync +- 阅读关于[贡献](../../contributing)到 vsync - 探索[配置](../configuration)详情 diff --git a/website/content/zh/docs/cli-commands.mdx b/website/content/zh/docs/cli-commands.mdx index 732c30f..313c963 100644 --- a/website/content/zh/docs/cli-commands.mdx +++ b/website/content/zh/docs/cli-commands.mdx @@ -1,16 +1,16 @@ --- title: CLI 命令 -description: vibe-sync 完整 CLI 参考。所有 7 个命令及选项和示例 - init、sync、plan、status、list、clean、import。学习 safe/prune 模式、dry-run 和自动化标志。 +description: vsync 完整 CLI 参考。所有 7 个命令及选项和示例 - init、sync、plan、status、list、clean、import。学习 safe/prune 模式、dry-run 和自动化标志。 --- # CLI 命令 -所有 vibe-sync 命令的完整参考,包含示例和选项。 +所有 vsync 命令的完整参考,包含示例和选项。 ## 命令概览 ```bash -vibe-sync [options] +vsync [options] ``` 可用命令: @@ -31,17 +31,17 @@ vibe-sync [options] ## init -为 project 或 user 层级初始化 vibe-sync 配置。 +为 project 或 user 层级初始化 vsync 配置。 ### 用法 ```bash -vibe-sync init [options] +vsync init [options] ``` ### 选项 -- `--user` - 创建用户级配置 (~/.vibe-sync.json) +- `--user` - 创建用户级配置 (~/.vsync.json) ### 交互式提示 @@ -53,9 +53,9 @@ vibe-sync init [options] ### 示例 ```bash -$ vibe-sync init +$ vsync init -🚀 欢迎使用 vibe-sync! +🚀 欢迎使用 vsync! ✔ 检测现有工具... ✔ 已检测到: claude-code, cursor @@ -77,14 +77,14 @@ $ vibe-sync init ✔ 缓存目录已创建 ✔ Manifest 已初始化 -✅ 设置完成!运行 vibe-sync sync 开始同步 +✅ 设置完成!运行 vsync sync 开始同步 ``` ### 创建的内容 -- `.vibe-sync.json` - 配置文件 -- `.vibe-sync-cache/` - 缓存目录 -- `.vibe-sync-cache/manifest.json` - 同步跟踪 manifest +- `.vsync.json` - 配置文件 +- `.vsync-cache/` - 缓存目录 +- `.vsync-cache/manifest.json` - 同步跟踪 manifest --- @@ -95,7 +95,7 @@ $ vibe-sync init ### 用法 ```bash -vibe-sync sync [options] +vsync sync [options] ``` ### 选项 @@ -112,7 +112,7 @@ vibe-sync sync [options] 只创建和更新——从不删除。 ```bash -vibe-sync sync +vsync sync ``` **输出示例**: @@ -144,7 +144,7 @@ cursor: 严格镜像——删除源中不存在的项。 ```bash -vibe-sync sync --prune +vsync sync --prune ``` **警告**:目标中存在但源中不存在的项将被删除! @@ -153,21 +153,21 @@ vibe-sync sync --prune ```bash # 预览更改 -vibe-sync sync --dry-run +vsync sync --dry-run # 使用严格镜像同步 -vibe-sync sync --prune +vsync sync --prune # 同步用户级配置 -vibe-sync sync --user +vsync sync --user # 跳过确认(用于自动化) -vibe-sync sync -y +vsync sync -y ``` ### 首次 Symlink 提示 -在首次同步时,vibe-sync 会询问关于 Skills 的 symlink 使用: +在首次同步时,vsync 会询问关于 Skills 的 symlink 使用: ``` ? 您想如何同步 Skills? @@ -186,7 +186,7 @@ vibe-sync sync -y ### 用法 ```bash -vibe-sync plan [options] +vsync plan [options] ``` ### 选项 @@ -196,7 +196,7 @@ vibe-sync plan [options] ### 示例 ```bash -$ vibe-sync plan +$ vsync plan 📖 正在读取源配置 (claude-code)... ✓ 找到 3 个技能 @@ -222,7 +222,7 @@ cursor: • skill/api-conventions 原因: 哈希值未更改 -运行 `vibe-sync sync` 应用此计划 +运行 `vsync sync` 应用此计划 ``` --- @@ -234,7 +234,7 @@ cursor: ### 用法 ```bash -vibe-sync status [options] +vsync status [options] ``` ### 选项 @@ -244,7 +244,7 @@ vibe-sync status [options] ### 示例 ```bash -$ vibe-sync status +$ vsync status 配置状态 (Project) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ @@ -252,8 +252,8 @@ $ vibe-sync status 源工具: claude-code 目标工具: cursor, opencode 最后同步: 2026-01-24 10:30:00 (2小时前) -配置文件: .vibe-sync.json -Manifest: .vibe-sync-cache/manifest.json +配置文件: .vsync.json +Manifest: .vsync-cache/manifest.json 已同步项: Skills: 3 项 @@ -268,7 +268,7 @@ Manifest: .vibe-sync-cache/manifest.json ✓ 所有目标都是最新的 ✓ 没有待处理的更改 -运行 `vibe-sync plan` 查看同步计划 +运行 `vsync plan` 查看同步计划 ``` --- @@ -280,7 +280,7 @@ Manifest: .vibe-sync-cache/manifest.json ### 用法 ```bash -vibe-sync list [type] [options] +vsync list [type] [options] ``` ### 参数 @@ -295,19 +295,19 @@ vibe-sync list [type] [options] ```bash # 列出所有配置 -vibe-sync list +vsync list # 仅列出 skills -vibe-sync list skills +vsync list skills # 列出用户级 MCP 服务器 -vibe-sync list mcp --user +vsync list mcp --user ``` ### 输出示例 ```bash -$ vibe-sync list skills +$ vsync list skills Skills (3 项) - 源: claude-code ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ @@ -330,7 +330,7 @@ Skills (3 项) - 源: claude-code ### 用法 ```bash -vibe-sync clean [item] [options] +vsync clean [item] [options] ``` ### 参数 @@ -350,7 +350,7 @@ vibe-sync clean [item] [options] 默认行为——源不变。 ```bash -vibe-sync clean skill/old-skill +vsync clean skill/old-skill ``` **输出**: @@ -373,7 +373,7 @@ vibe-sync clean skill/old-skill **警告**:这是破坏性操作,无法撤销! ```bash -vibe-sync clean skill/old-skill --from-source +vsync clean skill/old-skill --from-source ``` **输出**: @@ -399,7 +399,7 @@ vibe-sync clean skill/old-skill --from-source 不带参数运行以交互式选择: ```bash -$ vibe-sync clean +$ vsync clean ? 您想清理什么类型? ❯ Skills @@ -427,7 +427,7 @@ $ vibe-sync clean ### 用法 ```bash -vibe-sync import [options] +vsync import [options] ``` ### 参数 @@ -441,7 +441,7 @@ vibe-sync import [options] ### 示例 ```bash -$ vibe-sync import ../other-project +$ vsync import ../other-project 扫描 ../other-project... @@ -494,40 +494,40 @@ $ vibe-sync import ../other-project vim ~/.claude/skills/my-skill/SKILL.md # 2. 同步到目标 -vibe-sync sync +vsync sync ``` ### 应用前预览 ```bash # 1. 检查将要更改什么 -vibe-sync plan +vsync plan # 2. 如果满意,应用 -vibe-sync sync +vsync sync ``` ### 清理旧配置 ```bash # 安全清理(仅目标) -vibe-sync clean skill/old-skill +vsync clean skill/old-skill # 严格镜像模式 -vibe-sync sync --prune +vsync sync --prune ``` ### 从另一个项目导入 ```bash -vibe-sync import ../other-project +vsync import ../other-project ``` ### 使用 --yes 自动化 ```bash # 在 CI/CD 管道中 -vibe-sync sync --yes +vsync sync --yes ``` --- @@ -541,10 +541,10 @@ vibe-sync sync --yes ```bash # 一般帮助 -vibe-sync --help +vsync --help # 特定命令帮助 -vibe-sync sync --help +vsync sync --help ``` ## 下一步 diff --git a/website/content/zh/docs/configuration.mdx b/website/content/zh/docs/configuration.mdx index 57bd16c..852116d 100644 --- a/website/content/zh/docs/configuration.mdx +++ b/website/content/zh/docs/configuration.mdx @@ -1,18 +1,18 @@ --- title: 配置指南 -description: vibe-sync 完整配置指南。学习 .vibe-sync.json 结构、工具特定格式(JSON、TOML、JSONC)、MCP 差异、Claude Code、Cursor、OpenCode 和 Codex 的环境变量语法。 +description: vsync 完整配置指南。学习 .vsync.json 结构、工具特定格式(JSON、TOML、JSONC)、MCP 差异、Claude Code、Cursor、OpenCode 和 Codex 的环境变量语法。 --- # 配置指南 -了解如何配置 vibe-sync 以及 AI 氛围编程工具之间的格式差异。 +了解如何配置 vsync 以及 AI 氛围编程工具之间的格式差异。 ## 配置文件结构 -vibe-sync 使用 `.vibe-sync.json` 进行配置: +vsync 使用 `.vsync.json` 进行配置: -- **Project 层**:`/.vibe-sync.json` -- **User 层**:`~/.vibe-sync.json` +- **Project 层**:`/.vsync.json` +- **User 层**:`~/.vsync.json` ### 配置示例 @@ -235,18 +235,18 @@ AI 代理的指令和提示... ## 为什么格式转换很重要 -如果没有 vibe-sync,在工具之间迁移配置需要: +如果没有 vsync,在工具之间迁移配置需要: 1. **手动格式转换**:JSON → TOML → JSONC 2. **环境变量重写**:`${VAR}` → `${env:VAR}` → `{env:VAR}` 3. **结构更改**:`mcpServers` → `mcp` → `mcp_servers` 4. **必需字段添加**:为 OpenCode 添加 `type` -**使用 vibe-sync**,这一切都会自动发生!🎉 +**使用 vsync**,这一切都会自动发生!🎉 ## Manifest 文件 -vibe-sync 在 `.vibe-sync-cache/manifest.json` 维护 manifest: +vsync 在 `.vsync-cache/manifest.json` 维护 manifest: ```json { @@ -316,8 +316,8 @@ vibe-sync 在 `.vibe-sync-cache/manifest.json` 维护 manifest: ### 4. 版本控制 **提交到 git**: -- `.vibe-sync.json`(安全,无密钥) -- `.vibe-sync-cache/`(可选,有助于性能) +- `.vsync.json`(安全,无密钥) +- `.vsync-cache/`(可选,有助于性能) **不要提交到 git**: - 带凭证的工具特定配置文件 diff --git a/website/content/zh/docs/core-concepts.mdx b/website/content/zh/docs/core-concepts.mdx index da95d9d..a86a0c2 100644 --- a/website/content/zh/docs/core-concepts.mdx +++ b/website/content/zh/docs/core-concepts.mdx @@ -1,19 +1,19 @@ --- title: 核心概念 -description: 掌握 vibe-sync 架构 - 学习同步模式(safe vs prune)、配置层级(project vs user)、manifest 系统、原子操作,以及如何安全地保留环境变量。 +description: 掌握 vsync 架构 - 学习同步模式(safe vs prune)、配置层级(project vs user)、manifest 系统、原子操作,以及如何安全地保留环境变量。 --- # 核心概念 -了解驱动 vibe-sync 的基本概念。 +了解驱动 vsync 的基本概念。 -## vibe-sync 如何工作 +## vsync 如何工作 -vibe-sync 遵循简单但强大的工作流程: +vsync 遵循简单但强大的工作流程: ```mermaid flowchart TD - A[选择源工具
您的配置源] --> B[vibe-sync 读取配置
Skills, MCP, Agents, Commands] + A[选择源工具
您的配置源] --> B[vsync 读取配置
Skills, MCP, Agents, Commands] B --> C[与目标比较
计算差异] C --> D[显示计划
将要更改的内容] D --> E{您的批准} @@ -29,7 +29,7 @@ flowchart TD ### 工作流程 -1. **读取源**:vibe-sync 从您选择的源工具读取配置 +1. **读取源**:vsync 从您选择的源工具读取配置 2. **标准化**:将工具特定格式转换为统一数据模型 3. **计算差异**:使用 3-way diff(源、目标、manifest)比较源和目标 4. **生成计划**:创建详细的同步计划,显示所有操作 @@ -40,7 +40,7 @@ flowchart TD ## Source of Truth 概念 -vibe-sync 使用**单向同步模型**: +vsync 使用**单向同步模型**: - **Source Tool(源工具)**:您的参考标准——您编辑配置的地方 - **Target Tools(目标工具)**:它们从源同步——这里的更改将被覆盖 @@ -59,11 +59,11 @@ Claude Code (Source) → Cursor (Target) ## 配置层级 -vibe-sync 支持两个配置层级: +vsync 支持两个配置层级: ### Project 层(默认) -位置:`/.vibe-sync.json` +位置:`/.vsync.json` **用于**: - 团队共享配置 @@ -71,13 +71,13 @@ vibe-sync 支持两个配置层级: - 提交到版本控制 ```bash -vibe-sync init # 创建项目配置 -vibe-sync sync # 同步项目配置 +vsync init # 创建项目配置 +vsync sync # 同步项目配置 ``` ### User 层(全局) -位置:`~/.vibe-sync.json` +位置:`~/.vsync.json` **用于**: - 个人全局配置 @@ -85,13 +85,13 @@ vibe-sync sync # 同步项目配置 - 不与团队共享 ```bash -vibe-sync init --user # 创建用户配置 -vibe-sync sync --user # 同步用户配置 +vsync init --user # 创建用户配置 +vsync sync --user # 同步用户配置 ``` ## 同步模式 -vibe-sync 提供两种同步模式来处理不同场景: +vsync 提供两种同步模式来处理不同场景: ### Safe 模式(默认) @@ -103,7 +103,7 @@ vibe-sync 提供两种同步模式来处理不同场景: **何时使用**:日常同步、团队环境、希望保守行为时 ```bash -vibe-sync sync +vsync sync ``` **示例**: @@ -124,7 +124,7 @@ vibe-sync sync **何时使用**:清理旧配置、严格镜像、希望精确复制时 ```bash -vibe-sync sync --prune +vsync sync --prune ``` **示例**: @@ -137,7 +137,7 @@ vibe-sync sync --prune ## Manifest 系统 -vibe-sync 使用 manifest 文件(`.vibe-sync-cache/manifest.json`)来跟踪同步状态。 +vsync 使用 manifest 文件(`.vsync-cache/manifest.json`)来跟踪同步状态。 ### Manifest 的作用 @@ -185,7 +185,7 @@ vibe-sync 使用 manifest 文件(`.vibe-sync-cache/manifest.json`)来跟踪 ## 环境变量保留 -vibe-sync **从不展开**环境变量——它保留语法: +vsync **从不展开**环境变量——它保留语法: ```json // 源(Claude Code) diff --git a/website/content/zh/docs/faq.mdx b/website/content/zh/docs/faq.mdx index a52e777..ef69094 100644 --- a/website/content/zh/docs/faq.mdx +++ b/website/content/zh/docs/faq.mdx @@ -1,11 +1,11 @@ --- title: 常见问题 -description: 关于 vibe-sync 的常见问题。获取有关选择源工具、配置覆盖、monorepo 支持、环境变量、迁移、故障排除和性能的答案。 +description: 关于 vsync 的常见问题。获取有关选择源工具、配置覆盖、monorepo 支持、环境变量、迁移、故障排除和性能的答案。 --- # 常见问题 -关于使用 vibe-sync 的常见问题和解答。 +关于使用 vsync 的常见问题和解答。 ## 一般问题 @@ -23,7 +23,7 @@ description: 关于 vibe-sync 的常见问题。获取有关选择源工具、 - 哪个工具目前有最完整的设置 - 团队偏好和工作流程 -### vibe-sync 会覆盖我现有的配置吗? +### vsync 会覆盖我现有的配置吗? 默认情况下,**Safe 模式**只创建和更新——从不删除。您的目标工具中的现有配置将更新以匹配源,但除非使用 `--prune` 模式,否则不会删除任何内容。 @@ -31,7 +31,7 @@ description: 关于 vibe-sync 的常见问题。获取有关选择源工具、 ### 如果我直接在目标工具中编辑配置会怎样? -目标工具中的更改将在下次同步时**被覆盖**。vibe-sync 使用单向同步模型: +目标工具中的更改将在下次同步时**被覆盖**。vsync 使用单向同步模型: ``` Source(您的编辑) → Targets(自动更新) @@ -44,7 +44,7 @@ Source(您的编辑) → Targets(自动更新) 只需重新运行 init 命令: ```bash -vibe-sync init +vsync init # 选择不同的源工具 ``` @@ -52,20 +52,20 @@ vibe-sync init ### 它支持 monorepos 吗? -**是的!**每个项目可以有自己的 `.vibe-sync.json`。用户级配置(`~/.vibe-sync.json`)在所有项目中全局工作。 +**是的!**每个项目可以有自己的 `.vsync.json`。用户级配置(`~/.vsync.json`)在所有项目中全局工作。 示例结构: ``` monorepo/ ├── packages/ │ ├── frontend/ -│ │ └── .vibe-sync.json # 前端特定配置 +│ │ └── .vsync.json # 前端特定配置 │ └── backend/ -│ └── .vibe-sync.json # 后端特定配置 -└── .vibe-sync.json # Monorepo 根配置 +│ └── .vsync.json # 后端特定配置 +└── .vsync.json # Monorepo 根配置 ``` -### 将 `.vibe-sync.json` 提交到 git 安全吗? +### 将 `.vsync.json` 提交到 git 安全吗? **是的!**配置文件包含: - 工具名称 @@ -76,10 +76,10 @@ monorepo/ ### 我可以双向同步吗? -不,vibe-sync 是**单向的**(源 → 目标)。这是故意的,以维护清晰的配置源。 +不,vsync 是**单向的**(源 → 目标)。这是故意的,以维护清晰的配置源。 要切换方向: -1. 运行 `vibe-sync init` +1. 运行 `vsync init` 2. 选择不同的源工具 3. 同步以更新目标 @@ -89,12 +89,12 @@ monorepo/ ### Project 层级和 User 层级有什么区别? -**Project 层级** (`.vibe-sync.json`): +**Project 层级** (`.vsync.json`): - 通过 git 共享的团队配置 - 项目特定的 Skills 和集成 - 范围限定到一个项目目录 -**User 层级** (`~/.vibe-sync.json`): +**User 层级** (`~/.vsync.json`): - 个人全局配置 - 在所有项目中工作 - 不与团队共享 @@ -106,10 +106,10 @@ monorepo/ ```bash # 同步项目配置 -vibe-sync sync +vsync sync # 同步用户配置 -vibe-sync sync --user +vsync sync --user ``` 项目配置不会覆盖用户配置——它们是独立的层级。 @@ -150,20 +150,20 @@ vibe-sync sync --user 使用 `plan` 命令查看详细预览: ```bash -vibe-sync plan +vsync plan ``` 或使用 `--dry-run` 与 sync: ```bash -vibe-sync sync --dry-run +vsync sync --dry-run ``` 两者都会准确显示将被创建、更新、删除或跳过的内容。 ### 我可以在应用更改之前查看吗? -是的!默认情况下,`vibe-sync sync` 会显示计划并请求确认: +是的!默认情况下,`vsync sync` 会显示计划并请求确认: ``` 📋 同步计划 (Safe 模式) @@ -192,11 +192,11 @@ cursor: | OpenCode | `{env:VAR}` | `{env:API_KEY}` | | Codex | 无插值 | 仅直接值 | -vibe-sync 自动在这些格式之间转换。 +vsync 自动在这些格式之间转换。 -### vibe-sync 会暴露我的密钥吗? +### vsync 会暴露我的密钥吗? -**不会!** vibe-sync: +**不会!** vsync: - 从不展开环境变量 - 原样保留变量引用 - 仅在格式之间转换语法 @@ -263,7 +263,7 @@ my-skill/ ### 我可以同步 Cursor Rules 吗? -Cursor Rules(`.cursorrules` 文件)目前**不支持**。vibe-sync 专注于: +Cursor Rules(`.cursorrules` 文件)目前**不支持**。vsync 专注于: - Skills - MCP 服务器 - Agents @@ -277,10 +277,10 @@ Cursor Rules(`.cursorrules` 文件)目前**不支持**。vibe-sync 专注于 ### "找不到配置文件" 错误 -**解决方案**:运行 `vibe-sync init` 创建配置。 +**解决方案**:运行 `vsync init` 创建配置。 ```bash -vibe-sync init +vsync init ``` ### "权限被拒绝" 错误 @@ -302,7 +302,7 @@ vibe-sync init ```bash mkdir -p ~/.cursor -vibe-sync init +vsync init ``` ### 同步挂起或超时 @@ -342,8 +342,8 @@ cat .codex/config.toml ### 如何从手动配置管理迁移? 1. 选择您最完整的工具作为源 -2. 运行 `vibe-sync init` 并选择该工具 -3. 运行 `vibe-sync sync` 填充目标 +2. 运行 `vsync init` 并选择该工具 +3. 运行 `vsync sync` 填充目标 4. 验证目标工具中的配置 5. 今后开始只在源工具中编辑 @@ -353,25 +353,25 @@ cat .codex/config.toml ```bash cd new-project -vibe-sync import ../old-project +vsync import ../old-project ``` 这会将配置从旧项目复制到您的源工具,然后您可以同步到目标。 ### 从其他同步工具迁移呢? -vibe-sync 不直接从其他同步工具导入,但您可以: +vsync 不直接从其他同步工具导入,但您可以: 1. 手动将配置复制到支持的工具之一 2. 使用该工具作为源 -3. 初始化 vibe-sync +3. 初始化 vsync 4. 同步到其他工具 --- ## 性能问题 -### vibe-sync 有多快? +### vsync 有多快? 典型同步时间: - 首次同步:1-3 秒(复制文件) @@ -384,9 +384,9 @@ vibe-sync 不直接从其他同步工具导入,但您可以: - 磁盘速度 - 目标工具数量 -### vibe-sync 缓存什么吗? +### vsync 缓存什么吗? -是的!manifest(`.vibe-sync-cache/manifest.json`)充当缓存: +是的!manifest(`.vsync-cache/manifest.json`)充当缓存: - 存储所有项的 SHA256 哈希值 - 启用快速变更检测 - 允许增量同步 @@ -394,7 +394,7 @@ vibe-sync 不直接从其他同步工具导入,但您可以: ### 我如何加快同步? 1. **启用符号链接**:`"use_symlinks_for_skills": true` -2. **提交 manifest**:在 git 中包含 `.vibe-sync-cache/` +2. **提交 manifest**:在 git 中包含 `.vsync-cache/` 3. **使用选择性同步**:只同步您需要的 4. **使用 --yes 标志**:跳过确认提示 @@ -402,6 +402,6 @@ vibe-sync 不直接从其他同步工具导入,但您可以: ## 还有问题? -- **GitHub Issues**:[提问](https://github.com/nicepkg/vibe-sync/issues/new) +- **GitHub Issues**:[提问](https://github.com/nicepkg/vsync/issues/new) - **文档**:浏览其他文档部分 -- **CLI 帮助**:运行 `vibe-sync --help` +- **CLI 帮助**:运行 `vsync --help` diff --git a/website/content/zh/docs/getting-started.mdx b/website/content/zh/docs/getting-started.mdx index 4d7b5f4..6380a5a 100644 --- a/website/content/zh/docs/getting-started.mdx +++ b/website/content/zh/docs/getting-started.mdx @@ -1,34 +1,34 @@ --- title: 快速开始 -description: 2 分钟安装 vibe-sync。学习如何初始化配置、同步 AI 氛围编程工具(Claude Code、Cursor、OpenCode、Codex)以及处理常见设置场景。 +description: 2 分钟安装 vsync。学习如何初始化配置、同步 AI 氛围编程工具(Claude Code、Cursor、OpenCode、Codex)以及处理常见设置场景。 --- # 快速开始 -只需几分钟即可开始使用 vibe-sync。 +只需几分钟即可开始使用 vsync。 ## 安装 -vibe-sync 可以通过 `npx` 直接使用无需安装,也可以全局安装以便使用。 +vsync 可以通过 `npx` 直接使用无需安装,也可以全局安装以便使用。 ### 方式 1:使用 npx 运行(推荐) 无需安装——直接运行: ```bash -npx vibe-sync +npx vsync ``` ### 方式 2:全局安装 ```bash -npm install -g vibe-sync +npm install -g vsync ``` 验证安装: ```bash -vibe-sync --version +vsync --version ``` ## 快速开始 @@ -38,13 +38,13 @@ vibe-sync --version 导航到您的项目目录并运行: ```bash -vibe-sync init +vsync init ``` 对于全局用户级配置: ```bash -vibe-sync init --user +vsync init --user ``` > 💡 **提示**:在核心概念中了解更多关于[项目层与用户层](../core-concepts#configuration-layers)的信息。 @@ -54,7 +54,7 @@ vibe-sync init --user CLI 将引导您完成设置过程: ``` -🚀 欢迎使用 vibe-sync! +🚀 欢迎使用 vsync! ✔ 检测现有工具... ✔ 已检测到: claude-code, cursor @@ -76,7 +76,7 @@ CLI 将引导您完成设置过程: ✔ 缓存目录已创建 ✔ Manifest 已初始化 -✅ 设置完成!运行 vibe-sync sync 开始同步 +✅ 设置完成!运行 vsync sync 开始同步 ``` > 📚 **了解更多**:查看[配置指南](../configuration)了解详细配置选项。 @@ -87,20 +87,20 @@ CLI 将引导您完成设置过程: ```bash # Safe 模式(默认:不删除) -vibe-sync sync +vsync sync # 预览更改而不应用 -vibe-sync sync --dry-run +vsync sync --dry-run # 严格镜像(删除目标中的额外项) -vibe-sync sync --prune +vsync sync --prune ``` > 🔍 **详情**:在核心概念中理解[同步模式](../core-concepts#sync-modes)。 ## 理解输出 -当您运行 `vibe-sync sync` 时,您将看到详细的计划: +当您运行 `vsync sync` 时,您将看到详细的计划: ``` 📖 正在读取源配置 (claude-code)... @@ -128,7 +128,7 @@ cursor: ## 下一步 -现在您已经安装并初始化了 vibe-sync: +现在您已经安装并初始化了 vsync: 1. **学习概念**:理解[核心概念](../core-concepts),如同步模式和层级 2. **配置工具**:探索每个工具的[配置](../configuration)选项 @@ -144,8 +144,8 @@ cursor: ```bash cd my-project -vibe-sync init # 选择 Claude Code 作为源,Cursor 和 OpenCode 作为目标 -vibe-sync sync # 所有工具立即配置完成! +vsync init # 选择 Claude Code 作为源,Cursor 和 OpenCode 作为目标 +vsync sync # 所有工具立即配置完成! ``` ### 用户级配置同步 @@ -153,8 +153,8 @@ vibe-sync sync # 所有工具立即配置完成! 一次设置全局个人配置,随处使用: ```bash -vibe-sync init --user # 配置要同步哪些工具 -vibe-sync sync --user # 全局同步个人 Skills、MCP 服务器 +vsync init --user # 配置要同步哪些工具 +vsync sync --user # 全局同步个人 Skills、MCP 服务器 ``` > 💡 **相关**:了解[配置层级](../core-concepts#configuration-layers)。 @@ -164,9 +164,9 @@ vibe-sync sync --user # 全局同步个人 Skills、MCP 服务器 从 Cursor 迁移到 Claude Code: ```bash -vibe-sync init # 选择 Cursor 作为 SOURCE(参考标准) +vsync init # 选择 Cursor 作为 SOURCE(参考标准) # 选择 Claude Code 作为 TARGET(将从源同步) -vibe-sync sync # 所有配置立即迁移! +vsync sync # 所有配置立即迁移! ``` > 📖 **更多信息**:查看 [FAQ - 迁移问题](../faq#migration-questions)。 @@ -175,7 +175,7 @@ vibe-sync sync # 所有配置立即迁移! ### 找不到配置文件 -如果您看到"找不到配置文件",请先运行 `vibe-sync init` 创建配置。 +如果您看到"找不到配置文件",请先运行 `vsync init` 创建配置。 ### 未检测到工具 @@ -189,8 +189,8 @@ vibe-sync sync # 所有配置立即迁移! ## 获取帮助 -- 运行 `vibe-sync --help` 获取命令概览 -- 运行 `vibe-sync --help` 获取特定命令帮助 +- 运行 `vsync --help` 获取命令概览 +- 运行 `vsync --help` 获取特定命令帮助 - 查看 [FAQ](../faq) 了解常见问题 - 使用[快速参考](../quick-reference)获取命令示例 -- 在 [GitHub](https://github.com/nicepkg/vibe-sync/issues) 上提交 issue +- 在 [GitHub](https://github.com/nicepkg/vsync/issues) 上提交 issue diff --git a/website/content/zh/docs/index.mdx b/website/content/zh/docs/index.mdx index e3cc383..2b46bcd 100644 --- a/website/content/zh/docs/index.mdx +++ b/website/content/zh/docs/index.mdx @@ -1,15 +1,15 @@ --- title: 文档 -description: vibe-sync 完整指南 - 一条命令同步 AI 氛围编程工具 (Claude Code、Cursor、OpenCode、Codex) 配置。学习安装、配置、CLI 命令和高级功能。 +description: vsync 完整指南 - 一条命令同步 AI 氛围编程工具 (Claude Code、Cursor、OpenCode、Codex) 配置。学习安装、配置、CLI 命令和高级功能。 --- # 文档 -欢迎来到 vibe-sync 文档!在这里您可以找到轻松同步 AI 氛围编程工具配置所需的一切信息。 +欢迎来到 vsync 文档!在这里您可以找到轻松同步 AI 氛围编程工具配置所需的一切信息。 -## 什么是 vibe-sync? +## 什么是 vsync? -**vibe-sync** 是一个强大的 CLI 工具,用于在多个 AI 氛围编程工具(Claude Code、Cursor、OpenCode 和 Codex)之间同步配置文件。它提供: +**vsync** 是一个强大的 CLI 工具,用于在多个 AI 氛围编程工具(Claude Code、Cursor、OpenCode 和 Codex)之间同步配置文件。它提供: - **单一配置源**:选择一个工具作为参考标准,其他工具自动保持同步 - **智能格式转换**:处理 JSON ↔ TOML ↔ JSONC 转换 @@ -37,7 +37,7 @@ description: vibe-sync 完整指南 - 一条命令同步 AI 氛围编程工具 ( ## 支持的 AI 工具 -vibe-sync 支持以下 AI 氛围编程工具的同步: +vsync 支持以下 AI 氛围编程工具的同步: | 工具 | 支持级别 | 配置格式 | 特殊功能 | |:-----|:-------------|:--------------|:----------------| @@ -48,7 +48,7 @@ vibe-sync 支持以下 AI 氛围编程工具的同步: ## 同步什么配置? -vibe-sync 管理以下配置类型: +vsync 管理以下配置类型: - **Skills**:可复用的 Agent 技能模板 - **MCP Servers**:Model Context Protocol 集成 @@ -78,19 +78,19 @@ vibe-sync 管理以下配置类型: ```bash # 安装 -npm install -g vibe-sync +npm install -g vsync # 初始化 -vibe-sync init +vsync init # 同步 -vibe-sync sync +vsync sync ``` ## 获取帮助 -- **GitHub Issues**:[报告 bug 或请求功能](https://github.com/nicepkg/vibe-sync/issues) -- **CLI 帮助**:运行 `vibe-sync --help` 或 `vibe-sync --help` +- **GitHub Issues**:[报告 bug 或请求功能](https://github.com/nicepkg/vsync/issues) +- **CLI 帮助**:运行 `vsync --help` 或 `vsync --help` - **贡献**:查看[贡献指南](../../contributing) 准备好开始了吗?前往[快速开始](../getting-started)! diff --git a/website/content/zh/docs/quick-reference.mdx b/website/content/zh/docs/quick-reference.mdx index ce7d803..feced50 100644 --- a/website/content/zh/docs/quick-reference.mdx +++ b/website/content/zh/docs/quick-reference.mdx @@ -1,11 +1,11 @@ --- title: 快速参考 -description: vibe-sync 命令、选项和常用模式的快速参考指南和速查表。可复制粘贴的日常工作流示例。 +description: vsync 命令、选项和常用模式的快速参考指南和速查表。可复制粘贴的日常工作流示例。 --- # 快速参考 -vibe-sync 命令和常用模式的快速参考指南和速查表。 +vsync 命令和常用模式的快速参考指南和速查表。 ## 命令概览 @@ -25,12 +25,12 @@ vibe-sync 命令和常用模式的快速参考指南和速查表。 ```bash # Project 层级设置 -vibe-sync init -vibe-sync sync +vsync init +vsync sync # User 层级设置 -vibe-sync init --user -vibe-sync sync --user +vsync init --user +vsync sync --user ``` **[了解更多 →](../getting-started)** @@ -42,30 +42,30 @@ vibe-sync sync --user vim ~/.claude/skills/my-skill/SKILL.md # 2. 同步到目标 -vibe-sync sync +vsync sync ``` ### 同步前预览 ```bash # 检查将要更改什么 -vibe-sync plan +vsync plan # 或使用 dry-run -vibe-sync sync --dry-run +vsync sync --dry-run # 如果满意,应用 -vibe-sync sync +vsync sync ``` ### 清理旧配置 ```bash # 安全: 仅从目标移除 -vibe-sync clean skill/old-skill +vsync clean skill/old-skill # 严格镜像(删除额外项) -vibe-sync sync --prune +vsync sync --prune ``` **[了解更多 →](../cli-commands#clean)** @@ -75,7 +75,7 @@ vibe-sync sync --prune ### Safe 模式(默认) ```bash -vibe-sync sync +vsync sync ``` - ✅ 创建新项 @@ -87,7 +87,7 @@ vibe-sync sync ### Prune 模式 ```bash -vibe-sync sync --prune +vsync sync --prune ``` - ✅ 创建新项 @@ -102,8 +102,8 @@ vibe-sync sync --prune ```bash # 默认行为 -vibe-sync init # 创建 .vibe-sync.json -vibe-sync sync # 同步项目配置 +vsync init # 创建 .vsync.json +vsync sync # 同步项目配置 ``` **用于**: 团队配置、项目特定集成 @@ -112,8 +112,8 @@ vibe-sync sync # 同步项目配置 ```bash # 添加 --user 标志 -vibe-sync init --user # 创建 ~/.vibe-sync.json -vibe-sync sync --user # 同步全局配置 +vsync init --user # 创建 ~/.vsync.json +vsync sync --user # 同步全局配置 ``` **用于**: 个人偏好、全局技能 @@ -126,84 +126,84 @@ vibe-sync sync --user # 同步全局配置 ```bash # 项目配置 -vibe-sync init +vsync init # 用户配置 -vibe-sync init --user +vsync init --user ``` ### sync ```bash # Safe 同步 -vibe-sync sync +vsync sync # Prune 模式 -vibe-sync sync --prune +vsync sync --prune # Dry run -vibe-sync sync --dry-run +vsync sync --dry-run # 用户级 -vibe-sync sync --user +vsync sync --user # 跳过确认 -vibe-sync sync -y +vsync sync -y ``` ### plan ```bash # 预览更改 -vibe-sync plan +vsync plan # 用户级计划 -vibe-sync plan --user +vsync plan --user ``` ### status ```bash # 检查同步状态 -vibe-sync status +vsync status # 用户级状态 -vibe-sync status --user +vsync status --user ``` ### list ```bash # 列出所有 -vibe-sync list +vsync list # 列出 skills -vibe-sync list skills +vsync list skills # 列出 MCP 服务器 -vibe-sync list mcp +vsync list mcp # 用户级 -vibe-sync list --user +vsync list --user ``` ### clean ```bash # 从目标移除单个项 -vibe-sync clean skill/old-skill +vsync clean skill/old-skill # 交互式选择 -vibe-sync clean +vsync clean # 也从源删除(危险!) -vibe-sync clean skill/old-skill --from-source +vsync clean skill/old-skill --from-source # 用户级 -vibe-sync clean --user +vsync clean --user # 跳过确认 -vibe-sync clean skill/old-skill -y +vsync clean skill/old-skill -y ``` **[了解更多 →](../cli-commands#clean)** @@ -212,15 +212,15 @@ vibe-sync clean skill/old-skill -y ```bash # 从另一个项目导入 -vibe-sync import ../other-project +vsync import ../other-project # 导入到用户级 -vibe-sync import ../other-project --user +vsync import ../other-project --user ``` ## 配置文件快速参考 -### .vibe-sync.json +### .vsync.json ```json { @@ -280,13 +280,13 @@ vibe-sync import ../other-project --user ```bash # 1. 提交配置到 git -git add .vibe-sync.json -git commit -m "feat: add vibe-sync config" +git add .vsync.json +git commit -m "feat: add vsync config" # 2. 团队成员克隆并同步 git clone cd -vibe-sync sync +vsync sync ``` ### CI/CD 集成 @@ -294,7 +294,7 @@ vibe-sync sync ```bash # GitHub Actions - name: Sync configs - run: npx vibe-sync sync --yes + run: npx vsync sync --yes ``` **[了解更多 →](../advanced-features#cicd-integration)** @@ -303,13 +303,13 @@ vibe-sync sync ```bash # 1. 从旧项目导入 -vibe-sync import ../old-project +vsync import ../old-project # 2. 查看计划 -vibe-sync plan +vsync plan # 3. 同步到目标 -vibe-sync sync +vsync sync ``` **[了解更多 →](../faq#migration-questions)** @@ -325,13 +325,13 @@ vibe-sync sync ```bash # 一般帮助 -vibe-sync --help +vsync --help # 命令帮助 -vibe-sync sync --help +vsync sync --help # 版本 -vibe-sync --version +vsync --version ``` ## 常见问题 @@ -349,7 +349,7 @@ ls -la ~/.cursor/ ```bash # 解决方案: 先初始化 -vibe-sync init +vsync init ``` ### 未检测到工具 @@ -357,7 +357,7 @@ vibe-sync init ```bash # 解决方案: 创建工具目录 mkdir -p ~/.cursor -vibe-sync init +vsync init ``` **[更多故障排除 →](../faq#troubleshooting)** @@ -365,7 +365,7 @@ vibe-sync init ## 相关资源 - **[快速开始](../getting-started)** - 详细安装指南 -- **[核心概念](../core-concepts)** - 理解 vibe-sync +- **[核心概念](../core-concepts)** - 理解 vsync - **[CLI 命令](../cli-commands)** - 完整命令参考 - **[配置指南](../configuration)** - 配置文件详情 - **[高级功能](../advanced-features)** - Symlinks、性能 diff --git a/website/content/zh/index.mdx b/website/content/zh/index.mdx index 8a58606..6c292d2 100644 --- a/website/content/zh/index.mdx +++ b/website/content/zh/index.mdx @@ -1,5 +1,5 @@ --- -title: vibe-sync - 一处配置,多个 AI 工具同步,不再折腾。 +title: vsync - 一处配置,多个 AI 工具同步,不再折腾。 layout: full search: false sidebar: false diff --git a/website/src/components/home/hero-3d.tsx b/website/src/components/home/hero-3d.tsx index d64c2b7..76c8302 100644 --- a/website/src/components/home/hero-3d.tsx +++ b/website/src/components/home/hero-3d.tsx @@ -1,7 +1,7 @@ /* eslint-disable react-hooks/purity */ /** * ============================================================================= - * vibe-sync 3D Hero - "The Pulse of Truth" + * vsync 3D Hero - "The Pulse of Truth" * ============================================================================= * Visualizing the synchronization process: * 1. Source pulses (The Truth) diff --git a/website/src/components/home/landing-page.tsx b/website/src/components/home/landing-page.tsx index 0345aa1..5af6564 100644 --- a/website/src/components/home/landing-page.tsx +++ b/website/src/components/home/landing-page.tsx @@ -43,7 +43,7 @@ const Hero3D = dynamic(() => import("./hero-3d").then((mod) => mod.Hero3D), { }); // ============================================================================= -// vibe-sync Features - Core capabilities of the configuration sync tool +// vsync Features - Core capabilities of the configuration sync tool // ============================================================================= const workflows = [ { @@ -115,7 +115,7 @@ const workflows = [ ]; // ============================================================================= -// vibe-sync Pain Points - Before/After comparison showing the value proposition +// vsync Pain Points - Before/After comparison showing the value proposition // ============================================================================= const problems = [ { @@ -125,8 +125,8 @@ const problems = [ zh: "在多个氛围编程工具间管理配置 - 不同目录、不同格式、无尽的手动复制", }, gain: { - en: "One command syncs everything. vibe-sync handles all format conversions automatically.", - zh: "一条命令同步所有内容。vibe-sync 自动处理所有格式转换。", + en: "One command syncs everything. vsync handles all format conversions automatically.", + zh: "一条命令同步所有内容。vsync 自动处理所有格式转换。", }, }, { @@ -136,8 +136,8 @@ const problems = [ zh: "Claude Code 用 ${VAR},Cursor 需要 ${env:VAR},OpenCode 要求 {env:VAR}。迁移后 MCP servers 就崩了。", }, gain: { - en: "vibe-sync automatically converts env var syntax for each tool. No more broken MCP servers.", - zh: "vibe-sync 为每个工具自动转换环境变量语法。不再有坏掉的 MCP servers。", + en: "vsync automatically converts env var syntax for each tool. No more broken MCP servers.", + zh: "vsync 为每个工具自动转换环境变量语法。不再有坏掉的 MCP servers。", }, }, { @@ -187,16 +187,15 @@ export function LandingPage({ lang }: { lang: "en" | "zh" }) { : "一处配置,多个 AI 工具同步,不再折腾。", desc: lang === "en" - ? "Each vibe coding tool (Claude Code, Cursor, OpenCode, Codex) has its own directories and formats. Skills, MCP servers, Agents, Commands - they're all different. vibe-sync keeps everything in sync automatically. No more manual copying, no more broken configs." - : "每个氛围编程工具(Claude Code、Cursor、OpenCode、Codex)都有自己的目录和格式。Skills、MCP servers、Agents、Commands - 都不一样。vibe-sync 自动保持所有内容同步。不再手动复制,不再有坏掉的配置。", + ? "Each vibe coding tool (Claude Code, Cursor, OpenCode, Codex) has its own directories and formats. Skills, MCP servers, Agents, Commands - they're all different. vsync keeps everything in sync automatically. No more manual copying, no more broken configs." + : "每个氛围编程工具(Claude Code、Cursor、OpenCode、Codex)都有自己的目录和格式。Skills、MCP servers、Agents、Commands - 都不一样。vsync 自动保持所有内容同步。不再手动复制,不再有坏掉的配置。", getStarted: lang === "en" ? "Get Started" : "开始使用", viewGithub: lang === "en" ? "Star on GitHub" : "Star on GitHub", }, problem: { - title: - lang === "en" ? "Before & After vibe-sync" : "使用 vibe-sync 前后对比", - without: lang === "en" ? "Without vibe-sync" : "没有 vibe-sync", - with: lang === "en" ? "With vibe-sync" : "有了 vibe-sync", + title: lang === "en" ? "Before & After vsync" : "使用 vsync 前后对比", + without: lang === "en" ? "Without vsync" : "没有 vsync", + with: lang === "en" ? "With vsync" : "有了 vsync", }, workflows: { title: lang === "en" ? "Core Features" : "核心特性", @@ -273,9 +272,7 @@ export function LandingPage({ lang }: { lang: "en" | "zh" }) {
$ - - npx vibe-sync sync - + npx vsync sync
diff --git a/website/src/lib/site-info.ts b/website/src/lib/site-info.ts index dd0f650..a2c0dc7 100644 --- a/website/src/lib/site-info.ts +++ b/website/src/lib/site-info.ts @@ -28,16 +28,16 @@ // ---------- Basic Site Config ---------- export const siteConfig = { - name: "vibe-sync", + name: "vsync", description: "One config. Many AI tools. Zero pain.", - url: "https://vibe-sync.xiaominglab.com", + url: "https://vsync.xiaominglab.com", locale: "en_US", }; // ---------- GitHub Config ---------- export const githubConfig = { username: "nicepkg", - repo: "vibe-sync", + repo: "vsync", get url() { return `https://github.com/${this.username}/${this.repo}`; }, From 58bc89fd5b37191c30629e62551ec3afb5ffba6b Mon Sep 17 00:00:00 2001 From: jinmingyang <2214962083@qq.com> Date: Mon, 26 Jan 2026 21:10:44 +0800 Subject: [PATCH 2/3] refactor: update VibeConfig to VSyncConfig across the codebase --- .claude/commands/do-task.md | 2 +- .vscode/settings.json | 2 +- TASKS.md | 6 +- cli/src/commands/init.ts | 8 +-- cli/src/commands/status.ts | 4 +- cli/src/commands/sync.ts | 12 ++-- cli/src/core/config-manager.ts | 28 ++++---- cli/src/core/symlink-sync.ts | 4 +- cli/src/types/config.ts | 4 +- cli/src/utils/config-initializer.ts | 8 +-- cli/src/utils/sync-ui.ts | 4 +- cli/test/commands/init.test.ts | 8 +-- cli/test/commands/status.test.ts | 8 +-- cli/test/commands/sync-symlink-prompt.test.ts | 16 ++--- cli/test/commands/sync-symlink.test.ts | 12 ++-- cli/test/commands/sync.test.ts | 6 +- cli/test/core/config-manager.test.ts | 68 +++++++++---------- cli/test/core/symlink-sync.test.ts | 8 +-- cli/test/e2e/basic-workflow.test.ts | 32 ++++----- cli/test/integration/full-sync-flow.test.ts | 20 +++--- cli/test/types/config.test.ts | 20 +++--- website/src/components/home/landing-page.tsx | 2 +- 22 files changed, 141 insertions(+), 141 deletions(-) diff --git a/.claude/commands/do-task.md b/.claude/commands/do-task.md index f4c89e8..b3421f0 100644 --- a/.claude/commands/do-task.md +++ b/.claude/commands/do-task.md @@ -210,7 +210,7 @@ src/ │ ├── opencode.ts # Target adapter │ └── registry.ts # Adapter factory ├── types/ # TypeScript types (Phase 1) -│ ├── config.ts # VibeConfig, SyncMode, etc. +│ ├── config.ts # VSyncConfig, SyncMode, etc. │ ├── models.ts # Skill, MCPServer, etc. │ ├── manifest.ts # Manifest types │ └── plan.ts # SyncPlan, DiffResult, etc. diff --git a/.vscode/settings.json b/.vscode/settings.json index 5639e27..3d54339 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -99,7 +99,7 @@ "[mdx]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, - "cSpell.words": ["MCPO", "opencode"], + "cSpell.words": ["MCPO", "opencode", "vsync"], // i18n-ally Configuration for CLI workspace "i18n-ally.localesPaths": ["cli/src/locales"], diff --git a/TASKS.md b/TASKS.md index 5ce30dc..ba1e75a 100644 --- a/TASKS.md +++ b/TASKS.md @@ -65,7 +65,7 @@ This document tracks all implementation tasks for vsync MVP. Each phase must be ### 1.2 Core Type Definitions - [x] Define `cli/src/types/config.ts` - - [x] `VibeConfig` interface (`.vsync.json` structure) + - [x] `VSyncConfig` interface (`.vsync.json` structure) - [x] `SyncMode` type (`"safe" | "prune"`) - [x] `ToolName` type (`"claude-code" | "cursor" | "opencode"`) - [x] `ConfigLevel` type (`"project" | "user"`) @@ -660,7 +660,7 @@ This document tracks all implementation tasks for vsync MVP. Each phase must be ### 9.1 Configuration Extension ✅ - [x] Extend `cli/src/types/config.ts` - - [x] Add `use_symlinks_for_skills?: boolean` to `VibeConfig` + - [x] Add `use_symlinks_for_skills?: boolean` to `VSyncConfig` - [x] ~~Add `symlink_source?: ToolName`~~ (Not needed - use `source_tool` instead) - [x] Update schema validation in `cli/src/core/config-manager.ts` - [x] Update `mergeConfigs()` to handle symlink configuration @@ -810,7 +810,7 @@ This document tracks all implementation tasks for vsync MVP. Each phase must be ### 10.2 Configuration Extension ✅ - [x] Extend user-level config - - [x] Add `language?: 'en' | 'zh'` to user-level `VibeConfig` + - [x] Add `language?: 'en' | 'zh'` to user-level `VSyncConfig` - [x] Update `cli/src/core/config-manager.ts` - [x] Validate language field in `validateConfig()` - [x] Merge language preference in `mergeConfigs()` (from user config only) diff --git a/cli/src/commands/init.ts b/cli/src/commands/init.ts index f2ff988..17ae11f 100644 --- a/cli/src/commands/init.ts +++ b/cli/src/commands/init.ts @@ -12,7 +12,7 @@ import inquirer from "inquirer"; import ora from "ora"; import { getAllConfigDirs, getToolChoices } from "@src/adapters/registry.js"; import { saveConfig as saveConfigToFile } from "@src/core/config-manager.js"; -import type { ToolName, VibeConfig, ConfigLevel } from "@src/types/config.js"; +import type { ToolName, VSyncConfig, ConfigLevel } from "@src/types/config.js"; import { t } from "@src/utils/i18n.js"; /** @@ -57,7 +57,7 @@ export async function detectTools(projectDir: string): Promise { */ export async function generateConfig( options: ConfigOptions, -): Promise { +): Promise { // Validate inputs if (options.tools.length === 0) { throw new Error("At least one tool must be selected"); @@ -74,7 +74,7 @@ export async function generateConfig( // Build config const level: ConfigLevel = options.isUserLevel ? "user" : "project"; - const config: VibeConfig = { + const config: VSyncConfig = { version: "1.0.0", level, source_tool: options.source, @@ -98,7 +98,7 @@ export async function generateConfig( * @param dir - Directory to save config in (project dir or user home dir based on config.level) */ export async function saveConfig( - config: VibeConfig, + config: VSyncConfig, dir: string, ): Promise { // Pass dir as both projectDir and userDir since this function doesn't diff --git a/cli/src/commands/status.ts b/cli/src/commands/status.ts index e4ef70b..5f5bd24 100644 --- a/cli/src/commands/status.ts +++ b/cli/src/commands/status.ts @@ -10,7 +10,7 @@ import chalk from "chalk"; import { Command } from "commander"; import ora from "ora"; import { loadManifest, getManifestPath } from "@src/core/manifest-manager.js"; -import type { VibeConfig } from "@src/types/config.js"; +import type { VSyncConfig } from "@src/types/config.js"; import type { Manifest } from "@src/types/manifest.js"; import { ensureConfig } from "@src/utils/config-initializer.js"; import { t } from "@src/utils/i18n.js"; @@ -30,7 +30,7 @@ const TIME_THRESHOLDS = { * Status display data */ export interface StatusData { - config: VibeConfig; + config: VSyncConfig; manifest: Manifest; skillCount: number; mcpCount: number; diff --git a/cli/src/commands/sync.ts b/cli/src/commands/sync.ts index a866192..c2344aa 100644 --- a/cli/src/commands/sync.ts +++ b/cli/src/commands/sync.ts @@ -36,7 +36,7 @@ import type { ConfigLevel, SyncMode, ToolName, - VibeConfig, + VSyncConfig, } from "@src/types/config.js"; import type { Manifest, ItemType } from "@src/types/manifest.js"; import type { @@ -154,7 +154,7 @@ export function detectFirstTimeSkillsSync(manifest: Manifest): boolean { * @returns True if should prompt for symlink preference */ export function shouldPromptForSymlinks( - config: VibeConfig, + config: VSyncConfig, manifest: Manifest, targetTools: ToolName[], ): boolean { @@ -325,7 +325,7 @@ export async function calculateSyncDiff( targetTools: ToolName[], manifest: Manifest, mode: SyncMode, - syncConfig: VibeConfig["sync_config"], + syncConfig: VSyncConfig["sync_config"], projectDir: string, level: ConfigLevel, ): Promise { @@ -529,7 +529,7 @@ export async function updateManifestAfterSync( * @param projectDir - Project directory */ export async function syncWithSymlinks( - config: VibeConfig, + config: VSyncConfig, plan: SyncPlan, projectDir: string, ): Promise { @@ -598,7 +598,7 @@ export async function syncWithSymlinks( * Updates config with user's choice and saves */ async function promptForSymlinkUsage( - config: VibeConfig, + config: VSyncConfig, projectDir: string, ): Promise { const useSymlinks = await SyncUI.promptForSymlinkUsage(config); @@ -617,7 +617,7 @@ async function promptForSymlinkUsage( interface SyncContext { projectDir: string; mode: SyncMode; - config: VibeConfig; + config: VSyncConfig; sourceData: SourceData; manifest: Manifest; } diff --git a/cli/src/core/config-manager.ts b/cli/src/core/config-manager.ts index 8d7fb34..0bd76e7 100644 --- a/cli/src/core/config-manager.ts +++ b/cli/src/core/config-manager.ts @@ -13,8 +13,8 @@ import { join } from "node:path"; import { cwd } from "node:process"; import { ZodError, type ZodIssue } from "zod"; import { getAvailableTools } from "@src/adapters/registry.js"; -import type { VibeConfig, ConfigLevel } from "@src/types/config.js"; -import { createVibeConfigSchema } from "@src/types/config.js"; +import type { VSyncConfig, ConfigLevel } from "@src/types/config.js"; +import { createVSyncConfigSchema } from "@src/types/config.js"; import { atomicWrite } from "@src/utils/atomic-write.js"; /** @@ -60,12 +60,12 @@ export async function loadConfig( level: ConfigLevel, projectDir?: string, userDir?: string, -): Promise { +): Promise { const configPath = getConfigPath(level, projectDir, userDir); try { const content = await readFile(configPath, "utf-8"); - const config = JSON.parse(content) as VibeConfig; + const config = JSON.parse(content) as VSyncConfig; // Validate loaded config const validation = validateConfig(config); @@ -97,7 +97,7 @@ export async function loadConfig( * @param userDir - User home directory (optional) */ export async function saveConfig( - config: VibeConfig, + config: VSyncConfig, level: ConfigLevel, projectDir?: string, userDir?: string, @@ -128,9 +128,9 @@ export async function saveConfig( * @throws Error if both configs are undefined */ export function mergeConfigs( - userConfig?: VibeConfig, - projectConfig?: VibeConfig, -): VibeConfig { + userConfig?: VSyncConfig, + projectConfig?: VSyncConfig, +): VSyncConfig { if (!userConfig && !projectConfig) { throw new Error("At least one config must be provided"); } @@ -140,7 +140,7 @@ export function mergeConfigs( if (!projectConfig) return userConfig; // Merge with project taking precedence - const merged: VibeConfig = { + const merged: VSyncConfig = { version: projectConfig.version || userConfig.version, level: projectConfig.level, // Always use project level when merging }; @@ -209,9 +209,9 @@ export function mergeConfigs( export async function loadMergedConfig( projectDir: string, userDir?: string, -): Promise { - let userConfig: VibeConfig | undefined; - let projectConfig: VibeConfig | undefined; +): Promise { + let userConfig: VSyncConfig | undefined; + let projectConfig: VSyncConfig | undefined; // Try to load user config try { @@ -296,13 +296,13 @@ function extractZodErrors(issues: ZodIssue[]): string[] { * @param config - Configuration to validate * @returns Validation result with errors if any */ -export function validateConfig(config: VibeConfig): ValidationResult { +export function validateConfig(config: VSyncConfig): ValidationResult { try { // Get valid tools from registry (dynamic validation) const validTools = getAvailableTools(); // Create schema with current valid tools - const schema = createVibeConfigSchema(validTools); + const schema = createVSyncConfigSchema(validTools); // Validate config schema.parse(config); diff --git a/cli/src/core/symlink-sync.ts b/cli/src/core/symlink-sync.ts index 450a1c4..34a574d 100644 --- a/cli/src/core/symlink-sync.ts +++ b/cli/src/core/symlink-sync.ts @@ -19,7 +19,7 @@ import { access, } from "node:fs/promises"; import { join, dirname, basename } from "node:path"; -import type { VibeConfig } from "@src/types/config.js"; +import type { VSyncConfig } from "@src/types/config.js"; import { isSymlink, createSymlink, @@ -55,7 +55,7 @@ export interface DirectoryBackupInfo { * @param config - vsync configuration * @returns True if symlinks should be used */ -export function shouldUseSymlinks(config: VibeConfig): boolean { +export function shouldUseSymlinks(config: VSyncConfig): boolean { return config.use_symlinks_for_skills === true; } diff --git a/cli/src/types/config.ts b/cli/src/types/config.ts index 6f17fa4..c2d331e 100644 --- a/cli/src/types/config.ts +++ b/cli/src/types/config.ts @@ -47,7 +47,7 @@ export interface SyncConfig { * Main vsync configuration * Stored in .vsync.json (project) or ~/.vsync.json (user) */ -export interface VibeConfig { +export interface VSyncConfig { /** JSON schema URL (optional) */ $schema?: string; /** Config version */ @@ -178,7 +178,7 @@ export function createUserConfigSchema(validTools: string[]) { * Create complete config schema * Uses union to support both project-level and user-level configs */ -export function createVibeConfigSchema(validTools: string[]) { +export function createVSyncConfigSchema(validTools: string[]) { return z.union([ createProjectConfigSchema(validTools), createUserConfigSchema(validTools), diff --git a/cli/src/utils/config-initializer.ts b/cli/src/utils/config-initializer.ts index d147594..43e593a 100644 --- a/cli/src/utils/config-initializer.ts +++ b/cli/src/utils/config-initializer.ts @@ -16,7 +16,7 @@ import { saveConfig, type RequiredConfigField, } from "@src/core/config-manager.js"; -import type { VibeConfig } from "@src/types/config.js"; +import type { VSyncConfig } from "@src/types/config.js"; import { detectSystemLanguage, setLanguage, @@ -64,7 +64,7 @@ export async function ensureLanguageConfig(): Promise { existingConfig.language = language; await saveConfig(existingConfig, "user", homedir()); } catch { - const minimalConfig: VibeConfig = { + const minimalConfig: VSyncConfig = { version: "1.0.0", level: "user", language, @@ -89,7 +89,7 @@ export async function ensureConfig( projectDir: string, isUserLevel: boolean, options?: EnsureConfigOptions, -): Promise { +): Promise { await ensureLanguageConfig(); const level = isUserLevel ? "user" : "project"; @@ -166,7 +166,7 @@ export async function ensureConfig( async function runInitFlow( projectDir: string, isUserLevel: boolean, -): Promise { +): Promise { console.log(chalk.bold("\n🚀 Let's set up vsync!\n")); const { diff --git a/cli/src/utils/sync-ui.ts b/cli/src/utils/sync-ui.ts index 33c1f2b..9aa2fd5 100644 --- a/cli/src/utils/sync-ui.ts +++ b/cli/src/utils/sync-ui.ts @@ -8,7 +8,7 @@ import chalk from "chalk"; import inquirer from "inquirer"; import ora, { type Ora } from "ora"; import { formatPlan } from "@src/core/planner.js"; -import type { VibeConfig } from "@src/types/config.js"; +import type { VSyncConfig } from "@src/types/config.js"; import type { SyncPlan } from "@src/types/plan.js"; import { t } from "@src/utils/i18n.js"; @@ -236,7 +236,7 @@ export class SyncUI { * Prompt for symlink usage (first-time setup) * Returns the user's choice and updates config */ - static async promptForSymlinkUsage(config: VibeConfig): Promise { + static async promptForSymlinkUsage(config: VSyncConfig): Promise { // Display info console.log(chalk.cyan(t("commands.sync.symlinkPromptTitle"))); console.log( diff --git a/cli/test/commands/init.test.ts b/cli/test/commands/init.test.ts index 746340e..2e0a7d2 100644 --- a/cli/test/commands/init.test.ts +++ b/cli/test/commands/init.test.ts @@ -4,7 +4,7 @@ import mockFs from "mock-fs"; import { describe, it, expect, beforeEach, afterEach, vi } from "vitest"; // Import for module side-effects (needed for dynamic imports in tests) import "@src/commands/init.js"; -import type { VibeConfig, ToolName } from "@src/types/config.js"; +import type { VSyncConfig, ToolName } from "@src/types/config.js"; const testRoot = path.join(path.parse(process.cwd()).root, "vsync-test"); const homeDir = path.join(testRoot, "home", "user"); @@ -125,7 +125,7 @@ describe("Init Command", () => { describe("File Creation", () => { it("should create .vsync.json with correct content", async () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "1.0.0", level: "project", source_tool: "claude-code", @@ -148,7 +148,7 @@ describe("Init Command", () => { }); it("should format JSON with indentation", async () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "1.0.0", level: "project", source_tool: "claude-code", @@ -171,7 +171,7 @@ describe("Init Command", () => { describe("User-level Config", () => { it("should save to user config directory when --user flag", async () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "1.0.0", level: "user", source_tool: "claude-code", diff --git a/cli/test/commands/status.test.ts b/cli/test/commands/status.test.ts index b532c92..78fe338 100644 --- a/cli/test/commands/status.test.ts +++ b/cli/test/commands/status.test.ts @@ -1,6 +1,6 @@ import { describe, it, expect, vi } from "vitest"; import { formatStatus } from "@src/commands/status.js"; -import type { VibeConfig } from "@src/types/config.js"; +import type { VSyncConfig } from "@src/types/config.js"; import type { Manifest } from "@src/types/manifest.js"; // Cross-platform test home @@ -13,7 +13,7 @@ vi.mock("node:os", () => ({ })); describe("Status Command", () => { - const sampleConfig: VibeConfig = { + const sampleConfig: VSyncConfig = { version: "1.0.0", level: "project", source_tool: "claude-code", @@ -198,7 +198,7 @@ describe("Status Command", () => { expect(projectOutput).toContain("(Project)"); - const userConfig: VibeConfig = { + const userConfig: VSyncConfig = { ...sampleConfig, level: "user", }; @@ -215,7 +215,7 @@ describe("Status Command", () => { }); it("should display multiple target tools correctly", () => { - const multiTargetConfig: VibeConfig = { + const multiTargetConfig: VSyncConfig = { ...sampleConfig, target_tools: ["cursor", "opencode"], }; diff --git a/cli/test/commands/sync-symlink-prompt.test.ts b/cli/test/commands/sync-symlink-prompt.test.ts index a377120..4d45dc0 100644 --- a/cli/test/commands/sync-symlink-prompt.test.ts +++ b/cli/test/commands/sync-symlink-prompt.test.ts @@ -8,7 +8,7 @@ import { detectFirstTimeSkillsSync, shouldPromptForSymlinks, } from "@src/commands/sync.js"; -import type { VibeConfig } from "@src/types/config.js"; +import type { VSyncConfig } from "@src/types/config.js"; import type { Manifest } from "@src/types/manifest.js"; describe("Symlink Detection & Prompt", () => { @@ -113,7 +113,7 @@ describe("Symlink Detection & Prompt", () => { }); it("should return false when use_symlinks_for_skills is already set to true", () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "1.0.0", source_tool: "claude-code", target_tools: ["cursor"], @@ -127,7 +127,7 @@ describe("Symlink Detection & Prompt", () => { }); it("should return false when use_symlinks_for_skills is already set to false", () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "1.0.0", source_tool: "claude-code", target_tools: ["cursor"], @@ -141,7 +141,7 @@ describe("Symlink Detection & Prompt", () => { }); it("should return true when use_symlinks_for_skills is undefined and this is first sync", () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "1.0.0", source_tool: "claude-code", target_tools: ["cursor"], @@ -155,7 +155,7 @@ describe("Symlink Detection & Prompt", () => { }); it("should return false when use_symlinks_for_skills is undefined but not first sync", () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "1.0.0", source_tool: "claude-code", target_tools: ["cursor"], @@ -185,7 +185,7 @@ describe("Symlink Detection & Prompt", () => { }); it("should return false when skills are not in sync config", () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "1.0.0", source_tool: "claude-code", target_tools: ["cursor"], @@ -199,7 +199,7 @@ describe("Symlink Detection & Prompt", () => { }); it("should return false when no target tools specified", () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "1.0.0", source_tool: "claude-code", target_tools: [], @@ -213,7 +213,7 @@ describe("Symlink Detection & Prompt", () => { }); it("should return true for multiple target tools on first sync", () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "1.0.0", source_tool: "claude-code", target_tools: ["cursor", "opencode"], diff --git a/cli/test/commands/sync-symlink.test.ts b/cli/test/commands/sync-symlink.test.ts index 09bc358..daef699 100644 --- a/cli/test/commands/sync-symlink.test.ts +++ b/cli/test/commands/sync-symlink.test.ts @@ -1,7 +1,7 @@ import mockFs from "mock-fs"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; import { executeSyncPlan, syncWithSymlinks } from "@src/commands/sync.js"; -import type { VibeConfig } from "@src/types/config.js"; +import type { VSyncConfig } from "@src/types/config.js"; import type { SyncPlan } from "@src/types/plan.js"; describe("Sync Command - Symlink Support", () => { @@ -34,7 +34,7 @@ describe("Sync Command - Symlink Support", () => { describe("syncWithSymlinks", () => { it("should setup symlinks when use_symlinks_for_skills is true", async () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "3.0.0", level: "project", source_tool: "claude-code", @@ -66,7 +66,7 @@ describe("Sync Command - Symlink Support", () => { }); it("should skip symlink setup when use_symlinks_for_skills is false", async () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "3.0.0", level: "project", source_tool: "claude-code", @@ -98,7 +98,7 @@ describe("Sync Command - Symlink Support", () => { }); it("should skip symlink setup when use_symlinks_for_skills is undefined", async () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "3.0.0", level: "project", source_tool: "claude-code", @@ -137,7 +137,7 @@ describe("Sync Command - Symlink Support", () => { "/project/.opencode": {}, }); - const config: VibeConfig = { + const config: VSyncConfig = { version: "3.0.0", level: "project", source_tool: "claude-code", @@ -179,7 +179,7 @@ describe("Sync Command - Symlink Support", () => { }); it("should handle symlink creation errors gracefully", async () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "3.0.0", level: "project", source_tool: "claude-code", diff --git a/cli/test/commands/sync.test.ts b/cli/test/commands/sync.test.ts index 3738e6e..79b6066 100644 --- a/cli/test/commands/sync.test.ts +++ b/cli/test/commands/sync.test.ts @@ -10,7 +10,7 @@ import { syncCommand, updateManifestAfterSync, } from "@src/commands/sync.js"; -import type { VibeConfig, ToolName } from "@src/types/config.js"; +import type { VSyncConfig, ToolName } from "@src/types/config.js"; import { ensureConfig } from "@src/utils/config-initializer.js"; // Cross-platform test paths @@ -50,7 +50,7 @@ vi.mock("@src/utils/config-initializer.js", async () => { }); describe("Sync Command", () => { - const sampleConfig: VibeConfig = { + const sampleConfig: VSyncConfig = { version: "1.0.0", level: "project", source_tool: "claude-code", @@ -311,7 +311,7 @@ describe("Sync Command", () => { describe("Error Handling", () => { it("should handle missing source directory gracefully", async () => { - const invalidConfig: VibeConfig = { + const invalidConfig: VSyncConfig = { version: "1.0.0", level: "project", source_tool: "claude-code", diff --git a/cli/test/core/config-manager.test.ts b/cli/test/core/config-manager.test.ts index 4136434..b0bf9f5 100644 --- a/cli/test/core/config-manager.test.ts +++ b/cli/test/core/config-manager.test.ts @@ -10,7 +10,7 @@ import { mergeConfigs, loadMergedConfig, } from "@src/core/config-manager.js"; -import type { VibeConfig } from "@src/types/config.js"; +import type { VSyncConfig } from "@src/types/config.js"; import { isSamePath } from "../utils/path.js"; const testRoot = path.join(path.parse(process.cwd()).root, "vsync-test"); @@ -101,7 +101,7 @@ describe("Config Manager", () => { describe("saveConfig", () => { it("should save project-level config", async () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "3.0.0", level: "project", source_tool: "claude-code", @@ -122,7 +122,7 @@ describe("Config Manager", () => { }); it("should save user-level config", async () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "3.0.0", level: "user", source_tool: "cursor", @@ -142,7 +142,7 @@ describe("Config Manager", () => { }); it("should format JSON with indentation", async () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "3.0.0", level: "project", source_tool: "claude-code", @@ -163,7 +163,7 @@ describe("Config Manager", () => { describe("validateConfig", () => { it("should validate correct config", () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "3.0.0", level: "project", source_tool: "claude-code", @@ -185,7 +185,7 @@ describe("Config Manager", () => { source_tool: "claude-code", target_tools: ["cursor"], sync_config: { skills: true, mcp: true }, - } as VibeConfig; + } as VSyncConfig; const result = validateConfig(config); expect(result.valid).toBe(false); @@ -193,7 +193,7 @@ describe("Config Manager", () => { }); it("should reject invalid tool names", () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "3.0.0", level: "project", // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -207,7 +207,7 @@ describe("Config Manager", () => { }); it("should reject empty target_tools", () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "3.0.0", level: "project", source_tool: "claude-code", @@ -220,7 +220,7 @@ describe("Config Manager", () => { }); it("should reject source_tool in target_tools", () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "3.0.0", level: "project", source_tool: "claude-code", @@ -233,7 +233,7 @@ describe("Config Manager", () => { }); it("should require at least one sync type enabled", () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "3.0.0", level: "project", source_tool: "claude-code", @@ -246,7 +246,7 @@ describe("Config Manager", () => { }); it("should accept valid symlink configuration", () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "3.0.0", level: "project", source_tool: "claude-code", @@ -260,7 +260,7 @@ describe("Config Manager", () => { }); it("should accept config without symlink fields (backwards compatible)", () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "3.0.0", level: "project", source_tool: "claude-code", @@ -290,7 +290,7 @@ describe("Config Manager", () => { }); it("should accept valid language preference", () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "3.0.0", level: "user", source_tool: "claude-code", @@ -304,7 +304,7 @@ describe("Config Manager", () => { }); it("should accept config without language (backwards compatible)", () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "3.0.0", level: "user", source_tool: "claude-code", @@ -349,7 +349,7 @@ describe("Config Manager", () => { describe("mergeConfigs", () => { it("should merge user and project configs with project taking precedence", () => { - const userConfig: VibeConfig = { + const userConfig: VSyncConfig = { version: "3.0.0", level: "user", source_tool: "cursor", @@ -360,7 +360,7 @@ describe("Config Manager", () => { }, }; - const projectConfig: VibeConfig = { + const projectConfig: VSyncConfig = { version: "3.0.0", level: "project", source_tool: "claude-code", @@ -382,7 +382,7 @@ describe("Config Manager", () => { }); it("should use user config when project config is undefined", () => { - const userConfig: VibeConfig = { + const userConfig: VSyncConfig = { version: "3.0.0", level: "user", source_tool: "cursor", @@ -403,7 +403,7 @@ describe("Config Manager", () => { }); it("should use project config when user config is undefined", () => { - const projectConfig: VibeConfig = { + const projectConfig: VSyncConfig = { version: "3.0.0", level: "project", source_tool: "claude-code", @@ -422,7 +422,7 @@ describe("Config Manager", () => { }); it("should preserve last_sync from most recent config", () => { - const userConfig: VibeConfig = { + const userConfig: VSyncConfig = { version: "3.0.0", level: "user", source_tool: "cursor", @@ -431,7 +431,7 @@ describe("Config Manager", () => { last_sync: "2026-01-20T10:00:00Z", }; - const projectConfig: VibeConfig = { + const projectConfig: VSyncConfig = { version: "3.0.0", level: "project", source_tool: "claude-code", @@ -447,7 +447,7 @@ describe("Config Manager", () => { }); it("should merge target_tools arrays from both configs", () => { - const userConfig: VibeConfig = { + const userConfig: VSyncConfig = { version: "3.0.0", level: "user", source_tool: "claude-code", @@ -455,7 +455,7 @@ describe("Config Manager", () => { sync_config: { skills: true, mcp: true }, }; - const projectConfig: VibeConfig = { + const projectConfig: VSyncConfig = { version: "3.0.0", level: "project", source_tool: "claude-code", @@ -476,7 +476,7 @@ describe("Config Manager", () => { }); it("should merge symlink configuration with project taking precedence", () => { - const userConfig: VibeConfig = { + const userConfig: VSyncConfig = { version: "3.0.0", level: "user", source_tool: "claude-code", @@ -485,7 +485,7 @@ describe("Config Manager", () => { use_symlinks_for_skills: true, }; - const projectConfig: VibeConfig = { + const projectConfig: VSyncConfig = { version: "3.0.0", level: "project", source_tool: "claude-code", @@ -501,7 +501,7 @@ describe("Config Manager", () => { }); it("should inherit symlink configuration from user config if project doesn't have it", () => { - const userConfig: VibeConfig = { + const userConfig: VSyncConfig = { version: "3.0.0", level: "user", source_tool: "claude-code", @@ -510,7 +510,7 @@ describe("Config Manager", () => { use_symlinks_for_skills: true, }; - const projectConfig: VibeConfig = { + const projectConfig: VSyncConfig = { version: "3.0.0", level: "project", source_tool: "claude-code", @@ -525,7 +525,7 @@ describe("Config Manager", () => { }); it("should preserve language preference from user config", () => { - const userConfig: VibeConfig = { + const userConfig: VSyncConfig = { version: "3.0.0", level: "user", source_tool: "claude-code", @@ -534,7 +534,7 @@ describe("Config Manager", () => { language: "zh", }; - const projectConfig: VibeConfig = { + const projectConfig: VSyncConfig = { version: "3.0.0", level: "project", source_tool: "claude-code", @@ -549,7 +549,7 @@ describe("Config Manager", () => { }); it("should not have language if neither config has it", () => { - const userConfig: VibeConfig = { + const userConfig: VSyncConfig = { version: "3.0.0", level: "user", source_tool: "claude-code", @@ -557,7 +557,7 @@ describe("Config Manager", () => { sync_config: { skills: true, mcp: true }, }; - const projectConfig: VibeConfig = { + const projectConfig: VSyncConfig = { version: "3.0.0", level: "project", source_tool: "claude-code", @@ -571,7 +571,7 @@ describe("Config Manager", () => { }); it("should merge agents and commands config fields (not drop them)", () => { - const userConfig: VibeConfig = { + const userConfig: VSyncConfig = { version: "3.0.0", level: "user", source_tool: "claude-code", @@ -584,7 +584,7 @@ describe("Config Manager", () => { }, }; - const projectConfig: VibeConfig = { + const projectConfig: VSyncConfig = { version: "3.0.0", level: "project", source_tool: "claude-code", @@ -607,7 +607,7 @@ describe("Config Manager", () => { }); it("should default agents and commands to true if not specified", () => { - const userConfig: VibeConfig = { + const userConfig: VSyncConfig = { version: "3.0.0", level: "user", source_tool: "claude-code", @@ -619,7 +619,7 @@ describe("Config Manager", () => { }, }; - const projectConfig: VibeConfig = { + const projectConfig: VSyncConfig = { version: "3.0.0", level: "project", source_tool: "claude-code", diff --git a/cli/test/core/symlink-sync.test.ts b/cli/test/core/symlink-sync.test.ts index affd0da..0576989 100644 --- a/cli/test/core/symlink-sync.test.ts +++ b/cli/test/core/symlink-sync.test.ts @@ -5,7 +5,7 @@ import { shouldUseSymlinks, validateSymlinkSetup, } from "@src/core/symlink-sync.js"; -import type { VibeConfig } from "@src/types/config.js"; +import type { VSyncConfig } from "@src/types/config.js"; describe("Symlink Sync", () => { beforeEach(() => { @@ -30,7 +30,7 @@ describe("Symlink Sync", () => { describe("shouldUseSymlinks", () => { it("should return true when use_symlinks_for_skills is enabled", () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "3.0.0", level: "project", source_tool: "claude-code", @@ -44,7 +44,7 @@ describe("Symlink Sync", () => { }); it("should return false when use_symlinks_for_skills is disabled", () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "3.0.0", level: "project", source_tool: "claude-code", @@ -58,7 +58,7 @@ describe("Symlink Sync", () => { }); it("should return false when use_symlinks_for_skills is undefined", () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "3.0.0", level: "project", source_tool: "claude-code", diff --git a/cli/test/e2e/basic-workflow.test.ts b/cli/test/e2e/basic-workflow.test.ts index a6b9fdb..5d1ee21 100644 --- a/cli/test/e2e/basic-workflow.test.ts +++ b/cli/test/e2e/basic-workflow.test.ts @@ -191,7 +191,7 @@ class E2ETestFixture { /** * Initialize vsync configuration */ - async initVibeSync( + async initVSync( source: ToolName, targets: ToolName[], options?: { @@ -351,7 +351,7 @@ describe("Basic E2E Workflows", () => { it("should sync from Claude Code to Cursor", async () => { // Arrange await fixture.createSkill("demo", "---\nname: demo\n---\n# Demo Skill\n"); - await fixture.initVibeSync("claude-code", ["cursor"]); + await fixture.initVSync("claude-code", ["cursor"]); // Act await syncCommand({ yes: true }); @@ -365,7 +365,7 @@ describe("Basic E2E Workflows", () => { it("should sync to multiple targets in parallel", async () => { // Arrange await fixture.createSkill("demo"); - await fixture.initVibeSync("claude-code", ["cursor", "opencode"]); + await fixture.initVSync("claude-code", ["cursor", "opencode"]); // Act await syncCommand({ yes: true }); @@ -384,7 +384,7 @@ describe("Basic E2E Workflows", () => { it("should delete orphaned items", async () => { // Arrange - setup and first sync await fixture.createSkill("demo"); - await fixture.initVibeSync("claude-code", ["cursor"]); + await fixture.initVSync("claude-code", ["cursor"]); await syncCommand({ yes: true }); const skillPath = E2ETestHelper.getSkillPath(testDir, "cursor", "demo"); @@ -405,7 +405,7 @@ describe("Basic E2E Workflows", () => { it("should create symlinks when enabled", async () => { // Arrange await fixture.createSkill("demo"); - await fixture.initVibeSync("claude-code", ["cursor"], { + await fixture.initVSync("claude-code", ["cursor"], { useSymlinks: true, }); @@ -421,7 +421,7 @@ describe("Basic E2E Workflows", () => { it("should point to source skills directory", async () => { // Arrange await fixture.createSkill("demo"); - await fixture.initVibeSync("claude-code", ["cursor"], { + await fixture.initVSync("claude-code", ["cursor"], { useSymlinks: true, }); @@ -450,7 +450,7 @@ describe("Basic E2E Workflows", () => { it("should allow accessing files through symlink", async () => { // Arrange await fixture.createSkill("demo", "---\nname: demo\n---\n# Symlinked!"); - await fixture.initVibeSync("claude-code", ["cursor"], { + await fixture.initVSync("claude-code", ["cursor"], { useSymlinks: true, }); @@ -470,7 +470,7 @@ describe("Basic E2E Workflows", () => { it("should reflect source changes immediately", async () => { // Arrange - setup symlink await fixture.createSkill("demo", "---\nname: demo\n---\n# Original"); - await fixture.initVibeSync("claude-code", ["cursor"], { + await fixture.initVSync("claude-code", ["cursor"], { useSymlinks: true, }); await syncCommand({ yes: true }); @@ -501,7 +501,7 @@ describe("Basic E2E Workflows", () => { it("should work with multiple targets", async () => { // Arrange await fixture.createSkill("demo"); - await fixture.initVibeSync("claude-code", ["cursor", "opencode"], { + await fixture.initVSync("claude-code", ["cursor", "opencode"], { useSymlinks: true, }); @@ -541,7 +541,7 @@ describe("Basic E2E Workflows", () => { command: "npx", args: ["-y", "@modelcontextprotocol/server-memory"], }); - await fixture.initVibeSync("claude-code", ["cursor"], { + await fixture.initVSync("claude-code", ["cursor"], { syncItems: ["mcp"], }); @@ -571,7 +571,7 @@ describe("Basic E2E Workflows", () => { GITHUB_TOKEN: "${env:GITHUB_TOKEN}", }, }); - await fixture.initVibeSync("claude-code", ["cursor"], { + await fixture.initVSync("claude-code", ["cursor"], { syncItems: ["mcp"], }); @@ -598,7 +598,7 @@ describe("Basic E2E Workflows", () => { API_KEY: "${env:API_KEY}", }, }); - await fixture.initVibeSync("claude-code", ["opencode"], { + await fixture.initVSync("claude-code", ["opencode"], { syncItems: ["mcp"], }); @@ -632,7 +632,7 @@ describe("Basic E2E Workflows", () => { "test-agent", "---\nname: test-agent\n---\n# Test Agent\n", ); - await fixture.initVibeSync("claude-code", ["cursor"], { + await fixture.initVSync("claude-code", ["cursor"], { syncItems: ["skills", "agents"], // Need skills or mcp for validation }); @@ -652,7 +652,7 @@ describe("Basic E2E Workflows", () => { it("should sync agents to multiple targets", async () => { // Arrange await fixture.createAgent("code-reviewer"); - await fixture.initVibeSync("claude-code", ["cursor", "opencode"], { + await fixture.initVSync("claude-code", ["cursor", "opencode"], { syncItems: ["skills", "agents"], // Need skills or mcp for validation }); @@ -680,7 +680,7 @@ describe("Basic E2E Workflows", () => { "test-cmd", "---\nname: test-cmd\n---\n# Test Command\n", ); - await fixture.initVibeSync("claude-code", ["cursor"], { + await fixture.initVSync("claude-code", ["cursor"], { syncItems: ["skills", "commands"], // Need skills or mcp for validation }); @@ -700,7 +700,7 @@ describe("Basic E2E Workflows", () => { it("should sync commands to multiple targets", async () => { // Arrange await fixture.createCommand("deploy"); - await fixture.initVibeSync("claude-code", ["cursor", "opencode"], { + await fixture.initVSync("claude-code", ["cursor", "opencode"], { syncItems: ["skills", "commands"], // Need skills or mcp for validation }); diff --git a/cli/test/integration/full-sync-flow.test.ts b/cli/test/integration/full-sync-flow.test.ts index 91ae5f8..cf16eb5 100644 --- a/cli/test/integration/full-sync-flow.test.ts +++ b/cli/test/integration/full-sync-flow.test.ts @@ -10,7 +10,7 @@ import { describe, it, expect, beforeEach, afterEach, vi } from "vitest"; import { syncCommand } from "@src/commands/sync.js"; import { saveConfig } from "@src/core/config-manager.js"; import { getProjectCacheDir } from "@src/core/manifest-manager.js"; -import type { VibeConfig } from "@src/types/config.js"; +import type { VSyncConfig } from "@src/types/config.js"; // Mock config-initializer to skip prompts vi.mock("@src/utils/config-initializer.js", async (importOriginal) => { @@ -126,7 +126,7 @@ This is a test skill content.`; ); // Setup config - const config: VibeConfig = { + const config: VSyncConfig = { version: "1.0.0", level: "project", source_tool: "claude-code", @@ -191,7 +191,7 @@ This is a test skill content.`; ); // Setup config - const config: VibeConfig = { + const config: VSyncConfig = { version: "1.0.0", level: "project", source_tool: "claude-code", @@ -250,7 +250,7 @@ This is a test agent.`; ); // Setup config - const config: VibeConfig = { + const config: VSyncConfig = { version: "1.0.0", level: "project", source_tool: "claude-code", @@ -305,7 +305,7 @@ This is a test command.`; ); // Setup config - const config: VibeConfig = { + const config: VSyncConfig = { version: "1.0.0", level: "project", source_tool: "claude-code", @@ -374,7 +374,7 @@ This is a test command.`; ); // Setup config - const config: VibeConfig = { + const config: VSyncConfig = { version: "1.0.0", level: "project", source_tool: "claude-code", @@ -471,7 +471,7 @@ Content 2`, ); // Setup config (safe mode) - const config: VibeConfig = { + const config: VSyncConfig = { version: "1.0.0", level: "project", source_tool: "claude-code", @@ -586,7 +586,7 @@ Content 2`, ); // Setup config (prune mode) - const config: VibeConfig = { + const config: VSyncConfig = { version: "1.0.0", level: "project", source_tool: "claude-code", @@ -641,7 +641,7 @@ Content for multiple targets.`; ); // Setup config with multiple targets - const config: VibeConfig = { + const config: VSyncConfig = { version: "1.0.0", level: "project", source_tool: "claude-code", @@ -699,7 +699,7 @@ Content`, ); // Setup config - const config: VibeConfig = { + const config: VSyncConfig = { version: "1.0.0", level: "project", source_tool: "claude-code", diff --git a/cli/test/types/config.test.ts b/cli/test/types/config.test.ts index 3ed260b..56f2604 100644 --- a/cli/test/types/config.test.ts +++ b/cli/test/types/config.test.ts @@ -1,6 +1,6 @@ import { describe, it, expect } from "vitest"; import type { - VibeConfig, + VSyncConfig, SyncMode, ToolName, ConfigLevel, @@ -28,9 +28,9 @@ describe("Config Types", () => { }); }); - describe("VibeConfig", () => { + describe("VSyncConfig", () => { it("should create a valid minimal config", () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "3.0.0", level: "project", source_tool: "claude-code", @@ -48,7 +48,7 @@ describe("Config Types", () => { }); it("should create a config with last_sync timestamp", () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "3.0.0", level: "user", source_tool: "cursor", @@ -64,7 +64,7 @@ describe("Config Types", () => { }); it("should allow optional schema field", () => { - const config: VibeConfig = { + const config: VSyncConfig = { $schema: "https://vsync.dev/schema.json", version: "3.0.0", level: "project", @@ -80,7 +80,7 @@ describe("Config Types", () => { }); it("should support symlink configuration for skills", () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "3.0.0", level: "project", source_tool: "claude-code", @@ -96,7 +96,7 @@ describe("Config Types", () => { }); it("should allow config without symlink flag (backwards compatible)", () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "3.0.0", level: "project", source_tool: "claude-code", @@ -111,7 +111,7 @@ describe("Config Types", () => { }); it("should support language preference in user-level config", () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "3.0.0", level: "user", source_tool: "claude-code", @@ -127,7 +127,7 @@ describe("Config Types", () => { }); it("should support English language preference", () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "3.0.0", level: "user", source_tool: "claude-code", @@ -143,7 +143,7 @@ describe("Config Types", () => { }); it("should allow config without language preference (backwards compatible)", () => { - const config: VibeConfig = { + const config: VSyncConfig = { version: "3.0.0", level: "user", source_tool: "claude-code", diff --git a/website/src/components/home/landing-page.tsx b/website/src/components/home/landing-page.tsx index 5af6564..8f23a2a 100644 --- a/website/src/components/home/landing-page.tsx +++ b/website/src/components/home/landing-page.tsx @@ -180,7 +180,7 @@ type Translation = { export function LandingPage({ lang }: { lang: "en" | "zh" }) { const t: Translation = { hero: { - title: lang === "en" ? "Vibe-Sync" : "Vibe-Sync", + title: lang === "en" ? "Vsync" : "Vsync", subtitle: lang === "en" ? "One config. Many AI tools. Zero pain." From b7039932001698ccbcadc3481ad980f9ae4a7c48 Mon Sep 17 00:00:00 2001 From: jinmingyang <2214962083@qq.com> Date: Mon, 26 Jan 2026 21:17:20 +0800 Subject: [PATCH 3/3] chore: release version 1.0.5 and update package configuration - Removed old changeset for version 07. - Added new changeset for version 08. - Updated package.json to exclude source map files from the published package. - Enabled minification in the build configuration. --- .changeset/four-dogs-fold07.md | 5 ----- .changeset/four-dogs-fold08.md | 5 +++++ cli/package.json | 3 ++- cli/tsup.config.ts | 2 +- 4 files changed, 8 insertions(+), 7 deletions(-) delete mode 100644 .changeset/four-dogs-fold07.md create mode 100644 .changeset/four-dogs-fold08.md diff --git a/.changeset/four-dogs-fold07.md b/.changeset/four-dogs-fold07.md deleted file mode 100644 index 8c388b4..0000000 --- a/.changeset/four-dogs-fold07.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"vsync": patch ---- - -release first version 07 diff --git a/.changeset/four-dogs-fold08.md b/.changeset/four-dogs-fold08.md new file mode 100644 index 0000000..679117a --- /dev/null +++ b/.changeset/four-dogs-fold08.md @@ -0,0 +1,5 @@ +--- +"vsync": patch +--- + +release first version 08 diff --git a/cli/package.json b/cli/package.json index c334ad0..b44bd45 100644 --- a/cli/package.json +++ b/cli/package.json @@ -10,7 +10,8 @@ "vsync": "./dist/index.js" }, "files": [ - "dist" + "dist", + "!dist/*.map" ], "scripts": { "dev": "tsx src/index.ts", diff --git a/cli/tsup.config.ts b/cli/tsup.config.ts index b9c375e..04c748a 100644 --- a/cli/tsup.config.ts +++ b/cli/tsup.config.ts @@ -9,7 +9,7 @@ export default defineConfig({ banner: { js: 'import { createRequire } from "module";\nconst require = createRequire(import.meta.url);\n', }, - minify: false, + minify: true, sourcemap: true, treeshake: true, splitting: false,