claude-profile-manager 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +233 -0
- package/index.json +56 -0
- package/package.json +40 -0
- package/src/cli.js +166 -0
- package/src/commands/local.js +259 -0
- package/src/commands/marketplace.js +346 -0
- package/src/commands/publish.js +184 -0
- package/src/utils/config.js +83 -0
- package/src/utils/snapshot.js +280 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Claude Profile Marketplace Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
# 🚀 Claude Profile Manager
|
|
2
|
+
|
|
3
|
+
A marketplace for saving, sharing, and loading Claude CLI configuration profiles.
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/claude-profile-manager)
|
|
6
|
+
[](./LICENSE)
|
|
7
|
+
|
|
8
|
+
## What is this?
|
|
9
|
+
|
|
10
|
+
Claude Profile Manager (`cpm`) lets you:
|
|
11
|
+
|
|
12
|
+
- **📸 Save** your entire `.claude` folder as a shareable profile
|
|
13
|
+
- **🔄 Load** profiles to instantly switch between configurations
|
|
14
|
+
- **🛒 Browse** a marketplace of community-created profiles
|
|
15
|
+
- **📤 Share** your profiles with others
|
|
16
|
+
|
|
17
|
+
Think of it like dotfiles for Claude CLI, with a built-in plugin marketplace.
|
|
18
|
+
|
|
19
|
+
## Installation
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npm install -g claude-profile-manager
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Requires Node.js 18+ (already installed if you're using Claude CLI).
|
|
26
|
+
|
|
27
|
+
## Quick Start
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
# Save your current Claude config as a profile
|
|
31
|
+
cpm save my-setup
|
|
32
|
+
|
|
33
|
+
# List profiles in the marketplace
|
|
34
|
+
cpm list
|
|
35
|
+
|
|
36
|
+
# Install a profile from the marketplace
|
|
37
|
+
cpm install marketplace/senior-developer
|
|
38
|
+
|
|
39
|
+
# Load your saved profile
|
|
40
|
+
cpm load my-setup
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Commands
|
|
44
|
+
|
|
45
|
+
### Local Profile Management
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
# Save current .claude folder as a profile
|
|
49
|
+
cpm save <n> [--description "desc"] [--tags "tag1,tag2"]
|
|
50
|
+
|
|
51
|
+
# Load a saved profile (replaces current .claude)
|
|
52
|
+
cpm load <n> [--backup] [--force]
|
|
53
|
+
|
|
54
|
+
# List your locally saved profiles
|
|
55
|
+
cpm local
|
|
56
|
+
|
|
57
|
+
# View profile details
|
|
58
|
+
cpm info <n>
|
|
59
|
+
|
|
60
|
+
# Delete a local profile
|
|
61
|
+
cpm delete <n> [--force]
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Marketplace
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
# Browse all marketplace profiles
|
|
68
|
+
cpm list [--category <cat>] [--refresh]
|
|
69
|
+
|
|
70
|
+
# Search the marketplace
|
|
71
|
+
cpm search <query>
|
|
72
|
+
|
|
73
|
+
# Install a profile from marketplace
|
|
74
|
+
cpm install author/profile-name [--backup] [--force]
|
|
75
|
+
|
|
76
|
+
# View marketplace profile details
|
|
77
|
+
cpm info author/profile-name
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Publishing
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
# Publish your profile to the marketplace
|
|
84
|
+
cpm publish <n>
|
|
85
|
+
|
|
86
|
+
# Use a custom marketplace repository
|
|
87
|
+
cpm repo owner/repo-name
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Configuration
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
# Show current configuration
|
|
94
|
+
cpm config
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## What's in a Profile?
|
|
98
|
+
|
|
99
|
+
A profile is a complete snapshot of your `.claude` folder, including:
|
|
100
|
+
|
|
101
|
+
- `settings.json` - Your Claude CLI settings
|
|
102
|
+
- `CLAUDE.md` - Custom instructions
|
|
103
|
+
- `commands/` - Custom slash commands
|
|
104
|
+
- `mcp.json` & `mcp_servers/` - MCP server configurations
|
|
105
|
+
- `projects/` - Project-specific settings
|
|
106
|
+
- And more...
|
|
107
|
+
|
|
108
|
+
**Security Note:** By default, sensitive files (credentials, API keys, etc.) are excluded from snapshots. Use `--include-secrets` only if you're sure.
|
|
109
|
+
|
|
110
|
+
## Example Workflows
|
|
111
|
+
|
|
112
|
+
### Switch Between Work Personas
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
# Save your code review setup
|
|
116
|
+
cpm save work-reviewer --tags "work,code-review"
|
|
117
|
+
|
|
118
|
+
# Save your documentation setup
|
|
119
|
+
cpm save docs-writer --tags "work,documentation"
|
|
120
|
+
|
|
121
|
+
# Switch between them
|
|
122
|
+
cpm load work-reviewer
|
|
123
|
+
# ... do code reviews ...
|
|
124
|
+
cpm load docs-writer
|
|
125
|
+
# ... write documentation ...
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Share Team Configuration
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
# Lead saves team config
|
|
132
|
+
cpm save team-standards --description "Our team's Claude configuration"
|
|
133
|
+
cpm publish team-standards
|
|
134
|
+
|
|
135
|
+
# Team members install it
|
|
136
|
+
cpm install yourname/team-standards
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Try Community Profiles
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
# Browse what's available
|
|
143
|
+
cpm list
|
|
144
|
+
|
|
145
|
+
# Search for Python-focused profiles
|
|
146
|
+
cpm search python
|
|
147
|
+
|
|
148
|
+
# Try one out (with backup)
|
|
149
|
+
cpm install marketplace/python-expert --backup
|
|
150
|
+
|
|
151
|
+
# Don't like it? Restore your backup
|
|
152
|
+
cpm load .claude-backup-*
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Profile Storage
|
|
156
|
+
|
|
157
|
+
Profiles are stored in `~/.claude-profiles/`:
|
|
158
|
+
|
|
159
|
+
```
|
|
160
|
+
~/.claude-profiles/
|
|
161
|
+
├── config.json # CPM settings
|
|
162
|
+
├── my-setup/
|
|
163
|
+
│ ├── profile.json # Profile metadata
|
|
164
|
+
│ └── snapshot.zip # Compressed .claude folder
|
|
165
|
+
├── work-reviewer/
|
|
166
|
+
│ ├── profile.json
|
|
167
|
+
│ └── snapshot.zip
|
|
168
|
+
└── .cache/
|
|
169
|
+
└── marketplace-index.json
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## Contributing Profiles
|
|
173
|
+
|
|
174
|
+
Want to share your profile with the community?
|
|
175
|
+
|
|
176
|
+
1. Save your profile: `cpm save my-awesome-profile`
|
|
177
|
+
2. Publish it: `cpm publish my-awesome-profile`
|
|
178
|
+
3. Follow the instructions to submit a PR
|
|
179
|
+
|
|
180
|
+
See [CONTRIBUTING.md](./CONTRIBUTING.md) for detailed guidelines.
|
|
181
|
+
|
|
182
|
+
## Creating a Custom Marketplace
|
|
183
|
+
|
|
184
|
+
You can host your own marketplace (e.g., for your company):
|
|
185
|
+
|
|
186
|
+
1. Fork this repository
|
|
187
|
+
2. Add profiles to the `profiles/` directory
|
|
188
|
+
3. Update `index.json`
|
|
189
|
+
4. Have users point to your repo:
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
cpm repo your-org/your-marketplace
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## Repository Structure
|
|
196
|
+
|
|
197
|
+
```
|
|
198
|
+
claude-profile-marketplace/
|
|
199
|
+
├── src/ # NPM package source
|
|
200
|
+
│ ├── cli.js # CLI entry point
|
|
201
|
+
│ ├── commands/ # Command implementations
|
|
202
|
+
│ └── utils/ # Utilities
|
|
203
|
+
├── profiles/ # Marketplace profiles
|
|
204
|
+
│ └── author/
|
|
205
|
+
│ └── profile-name/
|
|
206
|
+
│ ├── profile.json
|
|
207
|
+
│ └── snapshot.zip
|
|
208
|
+
├── index.json # Marketplace index
|
|
209
|
+
├── package.json
|
|
210
|
+
└── README.md
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
## FAQ
|
|
214
|
+
|
|
215
|
+
**Q: Is it safe to share profiles?**
|
|
216
|
+
|
|
217
|
+
A: By default, sensitive files are excluded. However, always review your profile before publishing. Don't share profiles that contain API keys or credentials.
|
|
218
|
+
|
|
219
|
+
**Q: Can I use this with GitHub Copilot CLI too?**
|
|
220
|
+
|
|
221
|
+
A: Currently focused on Claude CLI, but the architecture supports extending to other tools.
|
|
222
|
+
|
|
223
|
+
**Q: What if I mess up my config?**
|
|
224
|
+
|
|
225
|
+
A: Use `--backup` when loading profiles to save your current config first. You can restore it with `cpm load .claude-backup-*`.
|
|
226
|
+
|
|
227
|
+
## License
|
|
228
|
+
|
|
229
|
+
MIT License - see [LICENSE](./LICENSE) for details.
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
**Made with ❤️ for the Claude CLI community**
|
package/index.json
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1.0.0",
|
|
3
|
+
"lastUpdated": "2025-02-15T00:00:00Z",
|
|
4
|
+
"profiles": [
|
|
5
|
+
{
|
|
6
|
+
"name": "senior-developer",
|
|
7
|
+
"author": "marketplace",
|
|
8
|
+
"version": "1.0.0",
|
|
9
|
+
"description": "Senior software engineer persona with focus on code review, architecture, and mentoring",
|
|
10
|
+
"tags": ["code-review", "architecture", "mentoring"],
|
|
11
|
+
"downloads": 0,
|
|
12
|
+
"stars": 0,
|
|
13
|
+
"createdAt": "2025-02-15T00:00:00Z"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"name": "security-auditor",
|
|
17
|
+
"author": "marketplace",
|
|
18
|
+
"version": "1.0.0",
|
|
19
|
+
"description": "Security-focused reviewer checking for OWASP vulnerabilities and best practices",
|
|
20
|
+
"tags": ["security", "owasp", "code-review"],
|
|
21
|
+
"downloads": 0,
|
|
22
|
+
"stars": 0,
|
|
23
|
+
"createdAt": "2025-02-15T00:00:00Z"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"name": "python-expert",
|
|
27
|
+
"author": "marketplace",
|
|
28
|
+
"version": "1.0.0",
|
|
29
|
+
"description": "Python development expert with focus on idiomatic code, typing, and async patterns",
|
|
30
|
+
"tags": ["python", "typing", "async"],
|
|
31
|
+
"downloads": 0,
|
|
32
|
+
"stars": 0,
|
|
33
|
+
"createdAt": "2025-02-15T00:00:00Z"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"name": "test-writer",
|
|
37
|
+
"author": "marketplace",
|
|
38
|
+
"version": "1.0.0",
|
|
39
|
+
"description": "Specialized in generating comprehensive test suites with high coverage",
|
|
40
|
+
"tags": ["testing", "tdd", "quality"],
|
|
41
|
+
"downloads": 0,
|
|
42
|
+
"stars": 0,
|
|
43
|
+
"createdAt": "2025-02-15T00:00:00Z"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"name": "docs-generator",
|
|
47
|
+
"author": "marketplace",
|
|
48
|
+
"version": "1.0.0",
|
|
49
|
+
"description": "Technical documentation writer for APIs, READMEs, and code comments",
|
|
50
|
+
"tags": ["documentation", "api-docs", "readme"],
|
|
51
|
+
"downloads": 0,
|
|
52
|
+
"stars": 0,
|
|
53
|
+
"createdAt": "2025-02-15T00:00:00Z"
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "claude-profile-manager",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Save, share, and load Claude CLI profiles - a marketplace for Claude configurations",
|
|
5
|
+
"main": "src/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"cpm": "src/cli.js",
|
|
8
|
+
"claude-profiles": "src/cli.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"test": "node src/cli.js --help"
|
|
12
|
+
},
|
|
13
|
+
"keywords": [
|
|
14
|
+
"claude",
|
|
15
|
+
"anthropic",
|
|
16
|
+
"cli",
|
|
17
|
+
"profiles",
|
|
18
|
+
"configuration",
|
|
19
|
+
"dotfiles",
|
|
20
|
+
"copilot"
|
|
21
|
+
],
|
|
22
|
+
"author": "",
|
|
23
|
+
"license": "MIT",
|
|
24
|
+
"repository": {
|
|
25
|
+
"type": "git",
|
|
26
|
+
"url": "https://github.com/YOUR_USERNAME/claude-profile-marketplace.git"
|
|
27
|
+
},
|
|
28
|
+
"engines": {
|
|
29
|
+
"node": ">=18.0.0"
|
|
30
|
+
},
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"archiver": "^6.0.1",
|
|
33
|
+
"chalk": "^5.3.0",
|
|
34
|
+
"commander": "^12.0.0",
|
|
35
|
+
"extract-zip": "^2.0.1",
|
|
36
|
+
"inquirer": "^9.2.12",
|
|
37
|
+
"node-fetch": "^3.3.2",
|
|
38
|
+
"ora": "^8.0.1"
|
|
39
|
+
}
|
|
40
|
+
}
|
package/src/cli.js
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { Command } from 'commander';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import {
|
|
6
|
+
saveProfile,
|
|
7
|
+
loadProfile,
|
|
8
|
+
listLocalProfiles,
|
|
9
|
+
deleteLocalProfile,
|
|
10
|
+
showProfileInfo
|
|
11
|
+
} from './commands/local.js';
|
|
12
|
+
import {
|
|
13
|
+
listMarketplace,
|
|
14
|
+
searchMarketplace,
|
|
15
|
+
installFromMarketplace,
|
|
16
|
+
showMarketplaceInfo
|
|
17
|
+
} from './commands/marketplace.js';
|
|
18
|
+
import {
|
|
19
|
+
publishProfile,
|
|
20
|
+
setRepository
|
|
21
|
+
} from './commands/publish.js';
|
|
22
|
+
import { getConfig } from './utils/config.js';
|
|
23
|
+
|
|
24
|
+
const VERSION = '1.0.0';
|
|
25
|
+
|
|
26
|
+
const program = new Command();
|
|
27
|
+
|
|
28
|
+
// Banner
|
|
29
|
+
const banner = `
|
|
30
|
+
${chalk.cyan(' ____ ____ __ __')}
|
|
31
|
+
${chalk.cyan(' / ___| _ \\| \\/ |')}
|
|
32
|
+
${chalk.cyan(' | | | |_) | |\\/| |')}
|
|
33
|
+
${chalk.cyan(' | |___| __/| | | |')}
|
|
34
|
+
${chalk.cyan(' \\____|_| |_| |_|')}
|
|
35
|
+
|
|
36
|
+
${chalk.magenta('Claude Profile Manager v' + VERSION)}
|
|
37
|
+
`;
|
|
38
|
+
|
|
39
|
+
program
|
|
40
|
+
.name('cpm')
|
|
41
|
+
.description('Save, share, and load Claude CLI profiles')
|
|
42
|
+
.version(VERSION)
|
|
43
|
+
.addHelpText('before', banner);
|
|
44
|
+
|
|
45
|
+
// ============================================================================
|
|
46
|
+
// Local Profile Commands
|
|
47
|
+
// ============================================================================
|
|
48
|
+
|
|
49
|
+
program
|
|
50
|
+
.command('save <name>')
|
|
51
|
+
.description('Save current .claude folder as a profile snapshot')
|
|
52
|
+
.option('-d, --description <desc>', 'Profile description')
|
|
53
|
+
.option('-t, --tags <tags>', 'Comma-separated tags')
|
|
54
|
+
.option('--include-secrets', 'Include sensitive files (use with caution)')
|
|
55
|
+
.action(async (name, options) => {
|
|
56
|
+
await saveProfile(name, options);
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
program
|
|
60
|
+
.command('load <name>')
|
|
61
|
+
.description('Load a profile (local or from marketplace)')
|
|
62
|
+
.option('-f, --force', 'Overwrite existing .claude folder without prompting')
|
|
63
|
+
.option('--backup', 'Backup current .claude folder before loading')
|
|
64
|
+
.option('--marketplace', 'Load from marketplace instead of local')
|
|
65
|
+
.action(async (name, options) => {
|
|
66
|
+
if (options.marketplace || name.includes('/')) {
|
|
67
|
+
await installFromMarketplace(name, options);
|
|
68
|
+
} else {
|
|
69
|
+
await loadProfile(name, options);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
program
|
|
74
|
+
.command('local')
|
|
75
|
+
.description('List locally saved profiles')
|
|
76
|
+
.action(async () => {
|
|
77
|
+
await listLocalProfiles();
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
program
|
|
81
|
+
.command('delete <name>')
|
|
82
|
+
.description('Delete a locally saved profile')
|
|
83
|
+
.option('-f, --force', 'Delete without confirmation')
|
|
84
|
+
.action(async (name, options) => {
|
|
85
|
+
await deleteLocalProfile(name, options);
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
program
|
|
89
|
+
.command('info <name>')
|
|
90
|
+
.description('Show detailed info about a profile')
|
|
91
|
+
.option('--marketplace', 'Show marketplace profile info')
|
|
92
|
+
.action(async (name, options) => {
|
|
93
|
+
if (options.marketplace || name.includes('/')) {
|
|
94
|
+
await showMarketplaceInfo(name);
|
|
95
|
+
} else {
|
|
96
|
+
await showProfileInfo(name);
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
// ============================================================================
|
|
101
|
+
// Marketplace Commands
|
|
102
|
+
// ============================================================================
|
|
103
|
+
|
|
104
|
+
program
|
|
105
|
+
.command('list')
|
|
106
|
+
.alias('browse')
|
|
107
|
+
.description('Browse profiles in the marketplace')
|
|
108
|
+
.option('-c, --category <category>', 'Filter by category')
|
|
109
|
+
.option('--refresh', 'Force refresh the marketplace index')
|
|
110
|
+
.action(async (options) => {
|
|
111
|
+
await listMarketplace(options);
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
program
|
|
115
|
+
.command('search <query>')
|
|
116
|
+
.description('Search the marketplace')
|
|
117
|
+
.action(async (query) => {
|
|
118
|
+
await searchMarketplace(query);
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
program
|
|
122
|
+
.command('install <profile>')
|
|
123
|
+
.description('Install a profile from the marketplace (format: author/name)')
|
|
124
|
+
.option('-f, --force', 'Overwrite existing .claude folder')
|
|
125
|
+
.option('--backup', 'Backup current config before installing')
|
|
126
|
+
.action(async (profile, options) => {
|
|
127
|
+
await installFromMarketplace(profile, options);
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
// ============================================================================
|
|
131
|
+
// Publishing Commands
|
|
132
|
+
// ============================================================================
|
|
133
|
+
|
|
134
|
+
program
|
|
135
|
+
.command('publish <name>')
|
|
136
|
+
.description('Publish a local profile to the marketplace')
|
|
137
|
+
.option('--public', 'Make the profile publicly visible')
|
|
138
|
+
.action(async (name, options) => {
|
|
139
|
+
await publishProfile(name, options);
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
program
|
|
143
|
+
.command('repo <repository>')
|
|
144
|
+
.description('Set custom marketplace repository (format: owner/repo)')
|
|
145
|
+
.action(async (repository) => {
|
|
146
|
+
await setRepository(repository);
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
// ============================================================================
|
|
150
|
+
// Utility Commands
|
|
151
|
+
// ============================================================================
|
|
152
|
+
|
|
153
|
+
program
|
|
154
|
+
.command('config')
|
|
155
|
+
.description('Show current configuration')
|
|
156
|
+
.action(async () => {
|
|
157
|
+
const config = await getConfig();
|
|
158
|
+
console.log(banner);
|
|
159
|
+
console.log(chalk.bold('Configuration:\n'));
|
|
160
|
+
console.log(` ${chalk.cyan('Profiles Directory:')} ${config.profilesDir}`);
|
|
161
|
+
console.log(` ${chalk.cyan('Claude Directory:')} ${config.claudeDir}`);
|
|
162
|
+
console.log(` ${chalk.cyan('Marketplace Repo:')} ${config.marketplaceRepo}`);
|
|
163
|
+
console.log(` ${chalk.cyan('Cache Directory:')} ${config.cacheDir}`);
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
program.parse();
|