{"_id":"@71zone/ccm-core","_rev":"5-3e25cc9df7dd233f0b84ead9e2004ef5","name":"@71zone/ccm-core","dist-tags":{"latest":"0.1.6"},"versions":{"0.1.0":{"name":"@71zone/ccm-core","version":"0.1.0","keywords":["claude","claude-code","mcp","agents","skills"],"author":{"name":"71zone"},"license":"MIT","_id":"@71zone/ccm-core@0.1.0","maintainers":[{"name":"71zone","email":"hvanlong@pm.me"}],"homepage":"https://github.com/71zone/ccm#readme","bugs":{"url":"https://github.com/71zone/ccm/issues"},"dist":{"shasum":"feb3f11b4013ae8729c28eebf221c34176f9698c","tarball":"https://registry.npmjs.org/@71zone/ccm-core/-/ccm-core-0.1.0.tgz","fileCount":4,"integrity":"sha512-bTnPBU6TJh8wlSeAbrrReI6OBOfKL3eS+INE0jCWkkYsiarfwiqAskmcpS92hz29HNnZYllfeA/3HiQ8OEvhYA==","signatures":[{"sig":"MEYCIQDAZ7tjkVREdacWabQLmLM7k/V7xLNjfcEqKCjs6MGMMAIhAPTSh2ufrps7Tse5rUm/1gDTrBiupXZjjqaVALY6aX1p","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79232},"main":"./dist/index.js","type":"module","_from":"file:71zone-ccm-core-0.1.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"71zone","email":"hvanlong@pm.me"},"_resolved":"/tmp/ae4b72c3bda2afa7408d9f43fcb0af63/71zone-ccm-core-0.1.0.tgz","_integrity":"sha512-bTnPBU6TJh8wlSeAbrrReI6OBOfKL3eS+INE0jCWkkYsiarfwiqAskmcpS92hz29HNnZYllfeA/3HiQ8OEvhYA==","repository":{"url":"git+https://github.com/71zone/ccm.git","type":"git","directory":"packages/core"},"_npmVersion":"11.6.2","description":"Core library for Claude Code Extension Manager","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ccm-core_0.1.0_1769010752846_0.9002097906769679","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@71zone/ccm-core","version":"0.1.1","keywords":["claude","claude-code","mcp","agents","skills"],"author":{"name":"71zone"},"license":"MIT","_id":"@71zone/ccm-core@0.1.1","maintainers":[{"name":"71zone","email":"hvanlong@pm.me"}],"homepage":"https://github.com/71zone/ccm#readme","bugs":{"url":"https://github.com/71zone/ccm/issues"},"dist":{"shasum":"870eacd79d6d8a7d18b049d9954a0e6b44a17751","tarball":"https://registry.npmjs.org/@71zone/ccm-core/-/ccm-core-0.1.1.tgz","fileCount":5,"integrity":"sha512-a0vIAuX95nwEapf9oJTc7co0RCEXfN2eN/rNaPvuJ+Vpb5g9oT70c0q1zvJ/cfpwaBoNsFzOxVUlYBfHEJa+wg==","signatures":[{"sig":"MEQCIFbIiEHhkUaNYKRG0Ms0bYqpnuwaF+jLUjZHcX1Nfo6OAiBCVysTAAeF2QxQdEiRRBbTZO5nWOOB0E9Q+w1ia1oJqQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":84230},"main":"./dist/index.js","type":"module","_from":"file:71zone-ccm-core-0.1.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup && cp ../../README.md .","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"71zone","email":"hvanlong@pm.me"},"_resolved":"/tmp/4f7bfca4c27a7bc37aa79b1a2f0df74e/71zone-ccm-core-0.1.1.tgz","_integrity":"sha512-a0vIAuX95nwEapf9oJTc7co0RCEXfN2eN/rNaPvuJ+Vpb5g9oT70c0q1zvJ/cfpwaBoNsFzOxVUlYBfHEJa+wg==","repository":{"url":"git+https://github.com/71zone/ccm.git","type":"git","directory":"packages/core"},"_npmVersion":"11.6.2","description":"Core library for Claude Code Extension Manager","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ccm-core_0.1.1_1769010897187_0.7887158321423455","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@71zone/ccm-core","version":"0.1.2","keywords":["claude","claude-code","mcp","agents","skills"],"author":{"name":"71zone"},"license":"MIT","_id":"@71zone/ccm-core@0.1.2","maintainers":[{"name":"71zone","email":"hvanlong@pm.me"}],"homepage":"https://github.com/71zone/ccm#readme","bugs":{"url":"https://github.com/71zone/ccm/issues"},"dist":{"shasum":"5eba48571d336c0806afb4f95474c6f792483958","tarball":"https://registry.npmjs.org/@71zone/ccm-core/-/ccm-core-0.1.2.tgz","fileCount":5,"integrity":"sha512-c6b6ELImUfHapKIcq2e++e4f2iv9663GnnM3H5Le+k+xeXbx18LCEAwE6wfOhPRjmGnqPW6ubbgBNUz5wQ75ew==","signatures":[{"sig":"MEUCIQCSUsPZeOG/o6U8C2M1nFclqoDg0+tOejiAFpE5TLOnsgIgZKoc8KWqNvJIf+7EVFCVPegkXiHBK82+qIvFnBjLUz8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":84153},"main":"./dist/index.js","type":"module","_from":"file:71zone-ccm-core-0.1.2.tgz","types":"./dist/index.d.ts","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup && cp ../../README.md .","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"71zone","email":"hvanlong@pm.me"},"_resolved":"/tmp/7dd61f172d924fd9b4240fe41ff61e50/71zone-ccm-core-0.1.2.tgz","_integrity":"sha512-c6b6ELImUfHapKIcq2e++e4f2iv9663GnnM3H5Le+k+xeXbx18LCEAwE6wfOhPRjmGnqPW6ubbgBNUz5wQ75ew==","repository":{"url":"git+https://github.com/71zone/ccm.git","type":"git","directory":"packages/core"},"_npmVersion":"11.6.2","description":"Core library for Claude Code Extension Manager","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ccm-core_0.1.2_1769011091773_0.9501788370874249","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@71zone/ccm-core","version":"0.1.3","keywords":["claude","claude-code","mcp","agents","skills"],"author":{"name":"71zone"},"license":"MIT","_id":"@71zone/ccm-core@0.1.3","maintainers":[{"name":"71zone","email":"hvanlong@pm.me"}],"homepage":"https://github.com/71zone/ccm#readme","bugs":{"url":"https://github.com/71zone/ccm/issues"},"dist":{"shasum":"9f41937b0234d97001778f9b112a61e8335f16db","tarball":"https://registry.npmjs.org/@71zone/ccm-core/-/ccm-core-0.1.3.tgz","fileCount":5,"integrity":"sha512-Gpoz2kLwaNLyPWYUYLfePAnJWvBDqEaYECRuk7/26F1FcW6lU9XhhlbPRhnCkDMhebBaAeWowr2JMAddWT2FoA==","signatures":[{"sig":"MEYCIQCu1HZSCKkj8DSvWn4Lqyin2f0H0ivGPkWRhNyqAL/NPgIhALGhFTPYWdu9GJybAc0JFNY06qWfZNhmJuUf8QSxwmi0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":84757},"main":"./dist/index.js","type":"module","_from":"file:71zone-ccm-core-0.1.3.tgz","types":"./dist/index.d.ts","engines":{"node":">=24.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup && cp ../../README.md .","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"71zone","email":"hvanlong@pm.me"},"_resolved":"/tmp/5dccef576f31912d5d12f6b92fa95f46/71zone-ccm-core-0.1.3.tgz","_integrity":"sha512-Gpoz2kLwaNLyPWYUYLfePAnJWvBDqEaYECRuk7/26F1FcW6lU9XhhlbPRhnCkDMhebBaAeWowr2JMAddWT2FoA==","repository":{"url":"git+https://github.com/71zone/ccm.git","type":"git","directory":"packages/core"},"_npmVersion":"11.6.2","description":"Core library for Claude Code Extension Manager","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ccm-core_0.1.3_1769011429401_0.7433715467227118","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@71zone/ccm-core","version":"0.1.6","description":"Core library for Claude Code Extension Manager","type":"module","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"main":"./dist/index.js","types":"./dist/index.d.ts","keywords":["claude","claude-code","mcp","agents","skills"],"author":{"name":"71zone"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/71zone/ccm.git","directory":"packages/core"},"engines":{"node":">=24.0.0"},"dependencies":{"tinyglobby":"^0.2.15"},"scripts":{"build":"tsup && cp ../../README.md .","dev":"tsup --watch","test":"vitest run","test:watch":"vitest","typecheck":"tsc --noEmit","clean":"rm -rf dist .turbo"},"_id":"@71zone/ccm-core@0.1.6","bugs":{"url":"https://github.com/71zone/ccm/issues"},"homepage":"https://github.com/71zone/ccm#readme","_integrity":"sha512-HsHBxh1Xb9wCZTXCQZBoy1vYOZDJ90Nj+8Ho1SOwqMqbeaUNFHifHD2tR04ZOOe7pWthasQ2JM8cbPeYbMRBDg==","_resolved":"/tmp/a4d6caf6e6eea3b610d9cc7792ee32c1/71zone-ccm-core-0.1.6.tgz","_from":"file:71zone-ccm-core-0.1.6.tgz","_nodeVersion":"24.13.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-HsHBxh1Xb9wCZTXCQZBoy1vYOZDJ90Nj+8Ho1SOwqMqbeaUNFHifHD2tR04ZOOe7pWthasQ2JM8cbPeYbMRBDg==","shasum":"a9ab8d5233f1747d3e62302d2abc1710770ade19","tarball":"https://registry.npmjs.org/@71zone/ccm-core/-/ccm-core-0.1.6.tgz","fileCount":5,"unpackedSize":126829,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDdgBGdD3cIQ8+rBcgjsVq5mWCxOkiArlUO+d+kseKs/gIhAIECHARvpj/3zXsVH1D711fYwaxdcfl0CNNtGtELAUPT"}]},"_npmUser":{"name":"71zone","email":"hvanlong@pm.me"},"directories":{},"maintainers":[{"name":"71zone","email":"hvanlong@pm.me"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ccm-core_0.1.6_1769569524360_0.6012985402199658"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-21T15:52:32.787Z","modified":"2026-01-28T03:05:24.616Z","0.1.0":"2026-01-21T15:52:33.002Z","0.1.1":"2026-01-21T15:54:57.501Z","0.1.2":"2026-01-21T15:58:11.925Z","0.1.3":"2026-01-21T16:03:49.563Z","0.1.6":"2026-01-28T03:05:24.502Z"},"bugs":{"url":"https://github.com/71zone/ccm/issues"},"author":{"name":"71zone"},"license":"MIT","homepage":"https://github.com/71zone/ccm#readme","keywords":["claude","claude-code","mcp","agents","skills"],"repository":{"type":"git","url":"git+https://github.com/71zone/ccm.git","directory":"packages/core"},"description":"Core library for Claude Code Extension Manager","maintainers":[{"name":"71zone","email":"hvanlong@pm.me"}],"readme":"# CCM - Claude Code Extension Manager\n\nA CLI tool to manage Claude Code configurations (agents, skills, commands, MCP) from multiple Git repositories.\n\n## Installation\n\n```bash\nnpm install -g @71zone/ccm\n```\n\n## Quick Start\n\n```bash\n# Add a repository\nccm add https://github.com/anthropics/claude-skills\n\n# Interactive picker - select what you want\nccm use anth\n\n# Check what's linked\nccm status\n```\n\n## Commands\n\n### `ccm add <github-url>`\n\nClone a repository and register it as a source.\n\n```bash\n$ ccm add https://github.com/acme/claude-toolkit\n\n✓ Cloned to ~/.local/share/ccm/repos/acme\n✓ Detected: 3a 5s 2c 1m\n✓ Registered as \"acme\"\n```\n\n### `ccm list` (alias: `ccm ls`)\n\nShow all registered repositories.\n\n```bash\n$ ccm list\n\n  acme  github.com/acme/claude-toolkit  3a  5s  2c  1m\n  myco  github.com/myco/dotclaude        1a  0s  4c  0m\n```\n\n### `ccm remove <alias>` (alias: `ccm rm`)\n\nRemove a repository and unlink all its assets.\n\n```bash\n$ ccm remove acme\n\nUnlinked 4 assets. Removed repository.\n```\n\n### `ccm update [alias]`\n\nPull latest changes from registered repositories.\n\n```bash\n# Updates only repos with active selections\n$ ccm update\n\n# Updates all registered repos\n$ ccm update -a\n\n# Updates specific repo\n$ ccm update acme\n```\n\n### `ccm show <alias>`\n\nDisplay available assets in a repository.\n\n```bash\n$ ccm show acme\n\nacme (acme/claude-toolkit)\n├── agents/\n│   ├── coder.md\n│   └── reviewer.md\n├── skills/\n│   ├── coding/SKILL.md\n│   └── debugging/SKILL.md\n├── commands/\n│   └── deploy.md\n└── mcp/\n    └── github.json\n```\n\n### `ccm use [alias]`\n\nInteractive asset picker with grouped selection (select all by category). Without alias, prompts for repository selection first.\n\n```bash\n$ ccm use acme\n\n◆ Select assets to link (space to toggle, enter to confirm)\n│ ◻ agents (select all)\n│   ◻ coder.md\n│   ◻ reviewer.md\n│ ◻ skills (select all)\n│   ◻ coding\n│   ◻ debugging\n│ ◻ commands (select all)\n│   ◻ deploy.md\n\n✓ Linked acme-coder.md\n✓ Linked acme-coding\n```\n\nFor MCP configs, servers are selected individually:\n\n```bash\n◆ Select servers from mcp.json\n│ ◻ servers (select all)\n│   ◻ github\n│   ◻ filesystem\n│   ◻ postgres\n\n✓ Staged MCP server: github\n✓ Staged MCP server: filesystem\n\nRun `ccm mcp sync` to apply staged MCP servers\n```\n\n### `ccm unuse [alias:path]`\n\nInteractive unlink picker. Without arguments, shows grouped selection of all linked assets.\n\n```bash\n# Interactive mode (default)\n$ ccm unuse\n\n◆ Select assets to unlink:\n│ ◻ acme\n│   ◻ agent/coder\n│   ◻ skill/coding\n│ ◻ myco\n│   ◻ command/deploy\n\n# Unlink specific asset\n$ ccm unuse acme:agents/coder.md\n\n# Unlink everything\n$ ccm unuse --all\n```\n\n### `ccm status`\n\nShow currently linked assets.\n\n```bash\n$ ccm status\n\nagents/\n  acme-coder.md     ✓\n  myco-writer.md     ✗ broken\nskills/\n  acme-coding       ✓\nmcp/ (staged)\n  acme: github, filesystem\n  myco: postgres\n\nRun `ccm doctor cure` to fix broken links\nRun `ccm mcp sync` to apply staged MCP configs\n```\n\n### `ccm doctor`\n\nCheck for issues.\n\n```bash\n$ ccm doctor\n\n✗ Broken symlink: ~/.claude/agents/myco-writer.md\n✗ Missing source: myco/agents/writer.md (deleted upstream?)\n✓ 3 healthy link(s)\n\nRun `ccm doctor cure` to auto-fix\n```\n\n### `ccm doctor cure`\n\nAuto-fix issues (remove broken symlinks, clean orphaned selections).\n\n```bash\n$ ccm doctor cure\n\n✓ Fixed 2 broken link(s)\n```\n\n### `ccm mcp show`\n\nPreview merged MCP configuration.\n\n```bash\n$ ccm mcp show\n\n# Merged from: acme:github.json, myco:filesystem.json\n\n{\n  \"mcpServers\": {\n    \"github\": { ... },\n    \"filesystem\": { ... }\n  }\n}\n```\n\n### `ccm mcp sync`\n\nBuild and apply merged MCP config to `~/.claude/mcp.json`.\n\n```bash\n$ ccm mcp sync\n\nPreview:\n  + github (from acme)\n  + filesystem (from myco)\n\nApply to ~/.claude/mcp.json? [y/N] y\n✓ Applied\n```\n\n## File Structure\n\n```\n~/.config/ccm/config.json     # Registry & selection state\n~/.local/share/ccm/repos/     # Cloned repositories\n~/.claude/                    # Output (symlinks)\n  ├── agents/                 # Agent symlinks\n  ├── skills/                 # Skill symlinks\n  ├── commands/               # Command symlinks\n  └── mcp.json               # Merged MCP config\n```\n\n## Asset Detection\n\nAssets are detected by path patterns:\n\n| Pattern | Type |\n|---------|------|\n| `*/agents/*.md` | Agent |\n| `*/skills/*/SKILL.md` | Skill |\n| `*/commands/*.md` | Command |\n| `*mcp*.json` with `mcpServers` key | MCP config |\n\nFallback: parse YAML frontmatter (`tools`/`model` fields = Agent).\n\n## Alias Generation\n\n- Username ≤ 4 chars → use as-is\n- Else → first 4 chars\n- Collision → append number (acme, acme2)\n\n## How It Works\n\n- **Symlinks** for live updates (edits in source repos propagate automatically)\n- **`git fetch && git reset --hard origin/<branch>`** for updates\n- **Flat output structure** with namespace prefix (e.g., `acme-coder.md`)\n- **Per-server MCP staging** - Individual MCP servers are staged (not whole files), then merged on `ccm mcp sync`\n\n## Development\n\n```bash\n# Install dependencies\npnpm install\n\n# Build all packages\npnpm build\n\n# Run tests\npnpm test\n\n# Development mode (watch)\npnpm dev\n```\n\n## Packages\n\n| Package | Description |\n|---------|-------------|\n| `@71zone/ccm` | CLI tool |\n| `@71zone/ccm-core` | Core library (repo management, asset detection, linking) |\n\n## License\n\nMIT\n","readmeFilename":"README.md"}