jean-claude 1.5.0 → 2.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/README.md +108 -56
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +5 -3
- package/dist/cli.js.map +1 -1
- package/dist/commands/index.d.ts +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +1 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +48 -44
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/profile.d.ts.map +1 -1
- package/dist/commands/profile.js +57 -16
- package/dist/commands/profile.js.map +1 -1
- package/dist/commands/pull.d.ts.map +1 -1
- package/dist/commands/pull.js +13 -45
- package/dist/commands/pull.js.map +1 -1
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +11 -68
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +11 -76
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/sync.d.ts +8 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +227 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/lib/git.d.ts.map +1 -1
- package/dist/lib/git.js +32 -2
- package/dist/lib/git.js.map +1 -1
- package/dist/lib/profiles.d.ts +5 -1
- package/dist/lib/profiles.d.ts.map +1 -1
- package/dist/lib/profiles.js +38 -13
- package/dist/lib/profiles.js.map +1 -1
- package/dist/lib/sync-setup.d.ts +6 -0
- package/dist/lib/sync-setup.d.ts.map +1 -0
- package/dist/lib/sync-setup.js +133 -0
- package/dist/lib/sync-setup.js.map +1 -0
- package/dist/lib/sync.d.ts.map +1 -1
- package/dist/lib/sync.js +7 -1
- package/dist/lib/sync.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/logger.d.ts +1 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +18 -2
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/logo.d.ts.map +1 -1
- package/dist/utils/logo.js +2 -5
- package/dist/utils/logo.js.map +1 -1
- package/dist/utils/prompts.d.ts.map +1 -1
- package/dist/utils/prompts.js +1 -1
- package/dist/utils/prompts.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -1,23 +1,14 @@
|
|
|
1
1
|
# JEAN-CLAUDE
|
|
2
2
|
|
|
3
|
-
**A companion for
|
|
3
|
+
**A companion for managing Claude Code profiles and syncing configuration across machines**
|
|
4
4
|
|
|
5
5
|
## Why?
|
|
6
6
|
|
|
7
7
|
You've spent hours crafting the perfect `CLAUDE.md`. Your hooks are *chef's kiss*. Your settings are dialed in just right.
|
|
8
8
|
|
|
9
|
-
Then you sit down at another machine and... nothing. Back to square one.
|
|
9
|
+
Then you sit down at another machine and... nothing. Back to square one. Or you need separate configs for your work and personal Claude accounts, but maintaining them is a pain.
|
|
10
10
|
|
|
11
|
-
**Jean-Claude fixes that.** It
|
|
12
|
-
|
|
13
|
-
## What gets synced?
|
|
14
|
-
|
|
15
|
-
- `CLAUDE.md` - Your custom instructions
|
|
16
|
-
- `settings.json` - Your preferences
|
|
17
|
-
- `hooks/` - Your automation scripts
|
|
18
|
-
- `skills/` - Your custom skills
|
|
19
|
-
- `agents/` - Your custom agents
|
|
20
|
-
- `keybindings.json` - Your keyboard shortcuts
|
|
11
|
+
**Jean-Claude fixes that.** It manages multiple Claude Code profiles and optionally syncs everything across machines via Git.
|
|
21
12
|
|
|
22
13
|
## Quick Start
|
|
23
14
|
|
|
@@ -25,73 +16,133 @@ Then you sit down at another machine and... nothing. Back to square one.
|
|
|
25
16
|
# Install globally
|
|
26
17
|
npm install -g jean-claude
|
|
27
18
|
|
|
28
|
-
#
|
|
29
|
-
jean-claude
|
|
30
|
-
|
|
31
|
-
# Initialize Jean-Claude and link to your config repo
|
|
32
|
-
jean-claude init git@github.com:YOURUSER/jean-claude-config.git
|
|
33
|
-
|
|
34
|
-
# Make edits in ~/.claude, then push them
|
|
35
|
-
jean-claude push
|
|
19
|
+
# Initialize Jean-Claude
|
|
20
|
+
jean-claude init
|
|
36
21
|
|
|
37
|
-
#
|
|
38
|
-
jean-claude
|
|
22
|
+
# Create a profile for your work account
|
|
23
|
+
jean-claude profile create work
|
|
39
24
|
|
|
40
|
-
#
|
|
41
|
-
|
|
25
|
+
# Launch Claude Code with your work profile
|
|
26
|
+
claude-work
|
|
42
27
|
```
|
|
43
28
|
|
|
44
29
|
## Profiles
|
|
45
30
|
|
|
46
|
-
|
|
31
|
+
Profiles let you run multiple Claude Code configurations side by side — one for your Teams account at work, another for your personal Max subscription, and so on.
|
|
47
32
|
|
|
48
33
|
```bash
|
|
49
|
-
# Create a profile
|
|
34
|
+
# Create a profile (interactive — prompts for sharing preferences)
|
|
50
35
|
jean-claude profile create work
|
|
51
36
|
|
|
52
|
-
#
|
|
53
|
-
|
|
54
|
-
# 2. Add a shell alias: claude-work
|
|
55
|
-
# 3. Give you a separate CLAUDE.md for work-specific instructions
|
|
37
|
+
# Create non-interactively
|
|
38
|
+
jean-claude profile create work --yes --shell .zshrc
|
|
56
39
|
|
|
57
40
|
# List your profiles
|
|
58
41
|
jean-claude profile list
|
|
59
42
|
|
|
60
|
-
# Launch Claude Code with
|
|
43
|
+
# Launch Claude Code with a profile
|
|
61
44
|
claude-work
|
|
62
45
|
|
|
63
|
-
# Delete a profile when you're done
|
|
64
|
-
jean-claude profile delete work
|
|
65
|
-
|
|
66
46
|
# Re-create symlinks if something breaks
|
|
67
47
|
jean-claude profile refresh work
|
|
48
|
+
|
|
49
|
+
# Delete a profile
|
|
50
|
+
jean-claude profile delete work
|
|
68
51
|
```
|
|
69
52
|
|
|
70
53
|
### How profiles work
|
|
71
54
|
|
|
72
|
-
Your main `~/.claude/` stays the source of truth. Profile directories are lightweight — they symlink back to your shared files:
|
|
55
|
+
Your main `~/.claude/` stays the source of truth. Profile directories (`~/.claude-<name>/`) are lightweight — they symlink back to your shared files:
|
|
56
|
+
|
|
57
|
+
| Always shared (symlinked) | Optionally shared | Profile-specific |
|
|
58
|
+
|---------------------------|---------------------------|------------------------|
|
|
59
|
+
| `settings.json` | `CLAUDE.md` | Authentication/session |
|
|
60
|
+
| `hooks/` | `statusline.sh` | |
|
|
61
|
+
| `agents/` | | |
|
|
62
|
+
| `skills/` | | |
|
|
63
|
+
| `plugins/` | | |
|
|
64
|
+
| `keybindings.json` | | |
|
|
65
|
+
|
|
66
|
+
During profile creation, you're prompted whether to share `CLAUDE.md` and `statusline.sh` or keep them independent per profile. You can also use flags:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
# Share both
|
|
70
|
+
jean-claude profile create work --share-claude-md --share-statusline
|
|
71
|
+
|
|
72
|
+
# Keep both independent
|
|
73
|
+
jean-claude profile create work --no-share-claude-md --no-share-statusline
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Change a setting or add a hook in your main config, and all profiles see it immediately.
|
|
77
|
+
|
|
78
|
+
Profiles work independently of syncing — you can use them without setting up Git.
|
|
79
|
+
|
|
80
|
+
## Syncing
|
|
81
|
+
|
|
82
|
+
Syncing is optional and uses Git to keep your configuration in sync across machines.
|
|
83
|
+
|
|
84
|
+
### What gets synced?
|
|
85
|
+
|
|
86
|
+
- `CLAUDE.md` — Your custom instructions
|
|
87
|
+
- `settings.json` — Your preferences
|
|
88
|
+
- `hooks/` — Your automation scripts
|
|
89
|
+
- `skills/` — Your custom skills
|
|
90
|
+
- `agents/` — Your custom agents
|
|
91
|
+
- `plugins/` — Your plugins
|
|
92
|
+
- `keybindings.json` — Your keyboard shortcuts
|
|
93
|
+
- `statusline.sh` — Your statusline configuration
|
|
94
|
+
- Profile definitions — So profiles carry over to other machines
|
|
73
95
|
|
|
74
|
-
|
|
75
|
-
|---------------------|------------------------|
|
|
76
|
-
| `settings.json` | `CLAUDE.md` |
|
|
77
|
-
| `hooks/` | Authentication/session |
|
|
78
|
-
| `agents/` | |
|
|
79
|
-
| `keybindings.json` | |
|
|
96
|
+
### Commands
|
|
80
97
|
|
|
81
|
-
|
|
98
|
+
```bash
|
|
99
|
+
# Set up syncing (during init or later)
|
|
100
|
+
jean-claude sync setup
|
|
101
|
+
|
|
102
|
+
# Push your config to Git
|
|
103
|
+
jean-claude sync push
|
|
104
|
+
|
|
105
|
+
# Pull config on another machine
|
|
106
|
+
jean-claude sync pull
|
|
107
|
+
|
|
108
|
+
# Check sync status
|
|
109
|
+
jean-claude sync status
|
|
110
|
+
```
|
|
82
111
|
|
|
83
|
-
|
|
112
|
+
### Typical workflow
|
|
84
113
|
|
|
85
|
-
|
|
114
|
+
```bash
|
|
115
|
+
# Machine 1: Initialize and push
|
|
116
|
+
jean-claude init
|
|
117
|
+
jean-claude profile create work --yes --shell .zshrc
|
|
118
|
+
jean-claude sync push
|
|
119
|
+
|
|
120
|
+
# Machine 2: Initialize, pull, and go
|
|
121
|
+
jean-claude init --sync --url git@github.com:you/claude-config.git
|
|
122
|
+
jean-claude sync pull
|
|
123
|
+
claude-work # Profile alias is ready
|
|
124
|
+
```
|
|
86
125
|
|
|
87
|
-
|
|
126
|
+
## Command Reference
|
|
127
|
+
|
|
128
|
+
| Command | Description |
|
|
129
|
+
|---------|-------------|
|
|
130
|
+
| `jean-claude init` | Initialize Jean-Claude on this machine |
|
|
131
|
+
| `jean-claude init --sync --url <repo>` | Initialize with Git syncing |
|
|
132
|
+
| `jean-claude init --no-sync` | Initialize without syncing |
|
|
133
|
+
| `jean-claude profile create <name>` | Create a new profile |
|
|
134
|
+
| `jean-claude profile list` | List all profiles |
|
|
135
|
+
| `jean-claude profile delete <name>` | Delete a profile |
|
|
136
|
+
| `jean-claude profile refresh <name>` | Refresh profile symlinks |
|
|
137
|
+
| `jean-claude sync setup` | Set up Git-based syncing |
|
|
138
|
+
| `jean-claude sync push` | Push config to Git |
|
|
139
|
+
| `jean-claude sync pull` | Pull config from Git |
|
|
140
|
+
| `jean-claude sync status` | Check sync status |
|
|
88
141
|
|
|
89
142
|
## Development
|
|
90
143
|
|
|
91
144
|
### Running Tests
|
|
92
145
|
|
|
93
|
-
Jean-claude has both unit tests and integration tests:
|
|
94
|
-
|
|
95
146
|
```bash
|
|
96
147
|
# Run all tests (unit + integration)
|
|
97
148
|
npm test
|
|
@@ -112,23 +163,24 @@ npm run test:integration
|
|
|
112
163
|
#### Unit Tests
|
|
113
164
|
|
|
114
165
|
Fast, isolated tests for core logic:
|
|
166
|
+
- Profile creation, symlinks, and duplicate prevention
|
|
115
167
|
- File sync and metadata operations
|
|
116
168
|
- Error handling and types
|
|
117
169
|
- Utility functions
|
|
118
170
|
|
|
119
171
|
#### Integration Tests
|
|
120
172
|
|
|
121
|
-
End-to-end tests that simulate real usage with
|
|
122
|
-
- **init
|
|
123
|
-
- **
|
|
124
|
-
- **
|
|
125
|
-
- **
|
|
126
|
-
- **
|
|
127
|
-
- **
|
|
128
|
-
- **
|
|
173
|
+
End-to-end tests that simulate real usage with local git repositories and multiple machines:
|
|
174
|
+
- **init**: New repos, existing repos, partial recovery, flag combinations
|
|
175
|
+
- **profiles**: Create, list, delete, refresh, duplicate prevention, shared/independent CLAUDE.md and statusline.sh
|
|
176
|
+
- **sync setup**: Linking to a Git remote, reconfiguration
|
|
177
|
+
- **sync push/pull**: Initial files, modifications, hooks, agents, keybindings, statusline
|
|
178
|
+
- **sync status**: Clean state, uncommitted changes, diverged state
|
|
179
|
+
- **Multi-machine sync**: Bidirectional sync, three-machine convergence
|
|
180
|
+
- **Edge cases**: Empty directories, special characters, large files, concurrent modifications, deprecated command stubs
|
|
129
181
|
|
|
130
182
|
See [tests/README.md](tests/README.md) for more details.
|
|
131
183
|
|
|
132
184
|
---
|
|
133
185
|
|
|
134
|
-
*Named after the famous Belgian martial artist and philosopher, because your config deserves to do the splits
|
|
186
|
+
*Named after the famous Belgian martial artist and philosopher, because your config deserves to do the splits between profiles and machines.*
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,wBAAgB,aAAa,IAAI,OAAO,CAsBvC;AAED,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkCvD"}
|
package/dist/cli.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import chalk from 'chalk';
|
|
3
3
|
import { createRequire } from 'module';
|
|
4
|
-
import { initCommand, pullCommand, pushCommand, statusCommand, profileCommand, } from './commands/index.js';
|
|
4
|
+
import { initCommand, pullCommand, pushCommand, statusCommand, profileCommand, syncCommand, } from './commands/index.js';
|
|
5
5
|
import { JeanClaudeError } from './types/index.js';
|
|
6
6
|
import { printLogo } from './utils/logo.js';
|
|
7
7
|
const require = createRequire(import.meta.url);
|
|
@@ -10,17 +10,19 @@ export function createProgram() {
|
|
|
10
10
|
const program = new Command();
|
|
11
11
|
program
|
|
12
12
|
.name('jean-claude')
|
|
13
|
-
.description('
|
|
13
|
+
.description('Manage and sync Claude Code configuration across machines')
|
|
14
14
|
.version(VERSION)
|
|
15
15
|
.addHelpText('before', () => {
|
|
16
16
|
printLogo();
|
|
17
17
|
return '';
|
|
18
18
|
});
|
|
19
19
|
program.addCommand(initCommand);
|
|
20
|
+
program.addCommand(syncCommand);
|
|
21
|
+
program.addCommand(profileCommand);
|
|
22
|
+
// Deprecated — kept as hidden commands with redirect messages
|
|
20
23
|
program.addCommand(pullCommand);
|
|
21
24
|
program.addCommand(pushCommand);
|
|
22
25
|
program.addCommand(statusCommand);
|
|
23
|
-
program.addCommand(profileCommand);
|
|
24
26
|
return program;
|
|
25
27
|
}
|
|
26
28
|
export async function run(argv) {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EACL,WAAW,EACX,WAAW,EACX,WAAW,EACX,aAAa,EACb,cAAc,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/commands/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,eAAO,MAAM,WAAW,SAiEpB,CAAC"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,67 +1,71 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import fs from 'fs-extra';
|
|
3
|
+
import path from 'path';
|
|
3
4
|
import { logger, formatPath } from '../utils/logger.js';
|
|
4
|
-
import {
|
|
5
|
+
import { confirm } from '../utils/prompts.js';
|
|
5
6
|
import { getConfigPaths, ensureDir } from '../lib/paths.js';
|
|
6
|
-
import { isGitRepo, initRepo, addRemote, testRemoteConnection, cloneRepo } from '../lib/git.js';
|
|
7
7
|
import { createMetaJson, writeMetaJson, } from '../lib/sync.js';
|
|
8
|
-
import {
|
|
8
|
+
import { setupGitSync } from '../lib/sync-setup.js';
|
|
9
9
|
import { printLogo } from '../utils/logo.js';
|
|
10
10
|
export const initCommand = new Command('init')
|
|
11
11
|
.description('Initialize Jean-Claude on this machine')
|
|
12
|
-
.
|
|
12
|
+
.option('--sync', 'Set up Git-based syncing without prompting')
|
|
13
|
+
.option('--no-sync', 'Skip Git sync setup without prompting')
|
|
14
|
+
.option('--url <repo-url>', 'Repository URL for sync setup (implies --sync)')
|
|
15
|
+
.action(async (options) => {
|
|
13
16
|
const { jeanClaudeDir, claudeConfigDir } = getConfigPaths();
|
|
14
17
|
printLogo();
|
|
15
18
|
logger.heading('Setup');
|
|
16
19
|
// Check if already initialized
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
const metaPath = path.join(jeanClaudeDir, 'meta.json');
|
|
21
|
+
if (fs.existsSync(metaPath)) {
|
|
22
|
+
logger.success(`Already initialized at ${formatPath(jeanClaudeDir)}`);
|
|
23
|
+
logger.dim('Run "jean-claude sync status" to see current state.');
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
// Create the jean-claude directory and meta.json
|
|
27
|
+
ensureDir(jeanClaudeDir);
|
|
28
|
+
const meta = createMetaJson(claudeConfigDir);
|
|
29
|
+
await writeMetaJson(jeanClaudeDir, meta);
|
|
30
|
+
// Check for existing git repo (partial init recovery)
|
|
31
|
+
const gitDir = path.join(jeanClaudeDir, '.git');
|
|
32
|
+
if (fs.existsSync(gitDir)) {
|
|
33
|
+
logger.info('Found existing Git repository — reusing it.');
|
|
34
|
+
}
|
|
35
|
+
let wantSync;
|
|
36
|
+
if (options.url) {
|
|
37
|
+
if (options.sync === false) {
|
|
38
|
+
logger.warn('--url implies --sync; ignoring --no-sync.');
|
|
23
39
|
}
|
|
24
|
-
|
|
40
|
+
wantSync = true;
|
|
25
41
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
logger.dim('Paste the URL of your existing config repo, or create a new');
|
|
29
|
-
logger.dim('empty repo (e.g. "my-claude-config") on GitHub/GitLab.');
|
|
30
|
-
console.log('');
|
|
31
|
-
// Get repository URL
|
|
32
|
-
const repoUrl = await input('Repository URL:');
|
|
33
|
-
// Test connection to remote
|
|
34
|
-
logger.step(1, 3, 'Testing connection to repository...');
|
|
35
|
-
const canConnect = await testRemoteConnection(repoUrl);
|
|
36
|
-
if (!canConnect) {
|
|
37
|
-
throw new JeanClaudeError('Cannot connect to repository', ErrorCode.NETWORK_ERROR, 'Check that the URL is correct and you have access.');
|
|
42
|
+
else if (options.sync !== undefined) {
|
|
43
|
+
wantSync = options.sync;
|
|
38
44
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
try {
|
|
43
|
-
await cloneRepo(repoUrl, jeanClaudeDir);
|
|
44
|
-
logger.success('Cloned existing config from repository');
|
|
45
|
+
else {
|
|
46
|
+
console.log('');
|
|
47
|
+
wantSync = await confirm('Would you like to set up syncing with a Git remote?');
|
|
45
48
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
ensureDir(jeanClaudeDir);
|
|
49
|
-
await initRepo(jeanClaudeDir);
|
|
50
|
-
await addRemote(jeanClaudeDir, repoUrl);
|
|
51
|
-
logger.success('Initialized new repository');
|
|
49
|
+
if (wantSync) {
|
|
50
|
+
await setupGitSync(jeanClaudeDir, options.url);
|
|
52
51
|
}
|
|
53
|
-
// Create meta.json
|
|
54
|
-
const meta = createMetaJson(claudeConfigDir);
|
|
55
|
-
await writeMetaJson(jeanClaudeDir, meta);
|
|
56
52
|
// Done
|
|
57
|
-
logger.step(3, 3, 'Done!');
|
|
58
53
|
console.log('');
|
|
59
|
-
logger.success('Jean-Claude
|
|
54
|
+
logger.success('Jean-Claude is installed!');
|
|
60
55
|
console.log('');
|
|
61
56
|
logger.dim('Next steps:');
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
57
|
+
if (wantSync) {
|
|
58
|
+
logger.list([
|
|
59
|
+
'Run "jean-claude profile create <name>" to create a profile',
|
|
60
|
+
'Run "jean-claude sync push" to push your config to Git',
|
|
61
|
+
'Run "jean-claude sync pull" on other machines to sync',
|
|
62
|
+
]);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
logger.list([
|
|
66
|
+
'Run "jean-claude profile create <name>" to create a profile',
|
|
67
|
+
'Run "jean-claude sync setup" to configure syncing later',
|
|
68
|
+
]);
|
|
69
|
+
}
|
|
66
70
|
});
|
|
67
71
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8SpC,eAAO,MAAM,cAAc,SAKS,CAAC"}
|
package/dist/commands/profile.js
CHANGED
|
@@ -11,11 +11,15 @@ const profileCreateCommand = new Command('create')
|
|
|
11
11
|
.argument('[name]', 'Profile name (e.g., "work", "personal")')
|
|
12
12
|
.option('-y, --yes', 'Skip confirmation prompts')
|
|
13
13
|
.option('--shell <file>', 'Shell config file to add alias to (e.g., .zshrc, .bashrc)')
|
|
14
|
+
.option('--share-statusline', 'Share statusline.sh with this profile (symlink)')
|
|
15
|
+
.option('--no-share-statusline', 'Do not share statusline.sh with this profile')
|
|
16
|
+
.option('--share-claude-md', 'Share CLAUDE.md with this profile (symlink)')
|
|
17
|
+
.option('--no-share-claude-md', 'Do not share CLAUDE.md with this profile')
|
|
14
18
|
.action(async (nameArg, options) => {
|
|
15
19
|
// Verify jean-claude is initialized
|
|
16
20
|
const jcDir = getJeanClaudeDir();
|
|
17
21
|
if (!(await fs.pathExists(jcDir))) {
|
|
18
|
-
throw new JeanClaudeError('Jean-Claude is not initialized', ErrorCode.NOT_INITIALIZED, 'Run `jean-claude init
|
|
22
|
+
throw new JeanClaudeError('Jean-Claude is not initialized', ErrorCode.NOT_INITIALIZED, 'Run `jean-claude init` first.');
|
|
19
23
|
}
|
|
20
24
|
// Get profile name
|
|
21
25
|
const name = nameArg || (await input('Profile name (e.g., work, personal):'));
|
|
@@ -23,16 +27,42 @@ const profileCreateCommand = new Command('create')
|
|
|
23
27
|
throw new JeanClaudeError('Invalid profile name', ErrorCode.INVALID_CONFIG, 'Use lowercase letters, numbers, and hyphens. Must start with a letter.');
|
|
24
28
|
}
|
|
25
29
|
const configDir = getProfileConfigDir(name);
|
|
30
|
+
// Fail early if profile already exists (before prompting for options)
|
|
31
|
+
const existingConfig = await loadProfiles();
|
|
32
|
+
if (existingConfig.profiles[name]) {
|
|
33
|
+
throw new JeanClaudeError(`Profile "${name}" already exists`, ErrorCode.ALREADY_EXISTS, `Use 'jean-claude profile list' to see existing profiles.`);
|
|
34
|
+
}
|
|
35
|
+
if (await fs.pathExists(configDir)) {
|
|
36
|
+
throw new JeanClaudeError(`Profile directory ${configDir} already exists on disk`, ErrorCode.ALREADY_EXISTS, `Remove it manually or choose a different profile name.`);
|
|
37
|
+
}
|
|
26
38
|
logger.heading(`Creating profile: ${name}`);
|
|
27
39
|
console.log();
|
|
28
|
-
logger.
|
|
29
|
-
|
|
40
|
+
logger.table([
|
|
41
|
+
['Config directory', chalk.cyan(formatPath(configDir))],
|
|
42
|
+
['Shell alias', chalk.cyan(`claude-${name}`)],
|
|
43
|
+
]);
|
|
30
44
|
console.log();
|
|
31
|
-
logger.
|
|
45
|
+
logger.dim('The following items will be symlinked from your main config:');
|
|
32
46
|
logger.list(SHARED_ITEMS.map((i) => i.name));
|
|
33
47
|
console.log();
|
|
34
|
-
|
|
35
|
-
|
|
48
|
+
// Determine optional sharing preferences
|
|
49
|
+
const createOptions = {};
|
|
50
|
+
if (options.shareStatusline !== undefined) {
|
|
51
|
+
createOptions.shareStatusline = options.shareStatusline;
|
|
52
|
+
}
|
|
53
|
+
else if (!options.yes) {
|
|
54
|
+
createOptions.shareStatusline = await confirm('Share your statusline configuration with this profile?');
|
|
55
|
+
}
|
|
56
|
+
if (options.shareClaudeMd !== undefined) {
|
|
57
|
+
createOptions.shareClaudeMd = options.shareClaudeMd;
|
|
58
|
+
}
|
|
59
|
+
else if (!options.yes) {
|
|
60
|
+
createOptions.shareClaudeMd = await confirm('Share your CLAUDE.md with this profile?');
|
|
61
|
+
}
|
|
62
|
+
if (!createOptions.shareClaudeMd) {
|
|
63
|
+
logger.dim('Profile-specific files (like CLAUDE.md) will be independent.');
|
|
64
|
+
console.log();
|
|
65
|
+
}
|
|
36
66
|
if (!options.yes) {
|
|
37
67
|
const proceed = await confirm('Create this profile?');
|
|
38
68
|
if (!proceed) {
|
|
@@ -42,7 +72,7 @@ const profileCreateCommand = new Command('create')
|
|
|
42
72
|
}
|
|
43
73
|
// Create profile
|
|
44
74
|
logger.step(1, 3, 'Creating profile directory and symlinks...');
|
|
45
|
-
const profile = await createProfile(name);
|
|
75
|
+
const profile = await createProfile(name, createOptions);
|
|
46
76
|
logger.success('Profile directory created');
|
|
47
77
|
// Install shell alias
|
|
48
78
|
logger.step(2, 3, 'Installing shell alias...');
|
|
@@ -61,9 +91,20 @@ const profileCreateCommand = new Command('create')
|
|
|
61
91
|
console.log();
|
|
62
92
|
logger.heading('Next steps');
|
|
63
93
|
console.log();
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
94
|
+
if (createOptions.shareClaudeMd) {
|
|
95
|
+
logger.list([
|
|
96
|
+
`Reload your shell or run: ${chalk.cyan(`source ~/${shellFile}`)}`,
|
|
97
|
+
`Then use ${chalk.cyan(`claude-${name}`)} to launch Claude Code with this profile.`,
|
|
98
|
+
`CLAUDE.md is shared (symlinked) from your main config.`,
|
|
99
|
+
]);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
logger.list([
|
|
103
|
+
`Reload your shell or run: ${chalk.cyan(`source ~/${shellFile}`)}`,
|
|
104
|
+
`Then use ${chalk.cyan(`claude-${name}`)} to launch Claude Code with this profile.`,
|
|
105
|
+
`Edit ${chalk.cyan(formatPath(configDir) + '/CLAUDE.md')} to add profile-specific instructions.`,
|
|
106
|
+
]);
|
|
107
|
+
}
|
|
67
108
|
});
|
|
68
109
|
const profileListCommand = new Command('list')
|
|
69
110
|
.description('List all Claude Code profiles')
|
|
@@ -71,7 +112,7 @@ const profileListCommand = new Command('list')
|
|
|
71
112
|
const config = await loadProfiles();
|
|
72
113
|
const names = Object.keys(config.profiles);
|
|
73
114
|
if (names.length === 0) {
|
|
74
|
-
logger.
|
|
115
|
+
logger.dim('No profiles configured.');
|
|
75
116
|
logger.dim('Create one with: jean-claude profile create <name>');
|
|
76
117
|
return;
|
|
77
118
|
}
|
|
@@ -124,7 +165,7 @@ const profileDeleteCommand = new Command('delete')
|
|
|
124
165
|
const config = await loadProfiles();
|
|
125
166
|
const names = Object.keys(config.profiles);
|
|
126
167
|
if (names.length === 0) {
|
|
127
|
-
logger.
|
|
168
|
+
logger.dim('No profiles to delete.');
|
|
128
169
|
return;
|
|
129
170
|
}
|
|
130
171
|
const name = nameArg ||
|
|
@@ -137,10 +178,10 @@ const profileDeleteCommand = new Command('delete')
|
|
|
137
178
|
console.log();
|
|
138
179
|
logger.warn(`This will remove ${chalk.cyan(formatPath(profile.configDir))} and its contents.`);
|
|
139
180
|
logger.warn('Profile-specific files (like CLAUDE.md) will be lost.');
|
|
140
|
-
logger.
|
|
181
|
+
logger.dim('Shared files in your main ~/.claude/ are not affected (they are the originals).');
|
|
141
182
|
console.log();
|
|
142
183
|
if (!options.yes) {
|
|
143
|
-
const proceed = await confirm('Delete this profile?');
|
|
184
|
+
const proceed = await confirm('Delete this profile?', false);
|
|
144
185
|
if (!proceed) {
|
|
145
186
|
logger.dim('Cancelled.');
|
|
146
187
|
return;
|
|
@@ -169,12 +210,12 @@ const profileRefreshCommand = new Command('refresh')
|
|
|
169
210
|
const config = await loadProfiles();
|
|
170
211
|
const names = Object.keys(config.profiles);
|
|
171
212
|
if (names.length === 0) {
|
|
172
|
-
logger.
|
|
213
|
+
logger.dim('No profiles configured.');
|
|
173
214
|
return;
|
|
174
215
|
}
|
|
175
216
|
const name = nameArg ||
|
|
176
217
|
(await select('Which profile to refresh?', names.map((n) => ({ name: n, value: n }))));
|
|
177
|
-
logger.
|
|
218
|
+
logger.dim(`Refreshing symlinks for profile "${name}"...`);
|
|
178
219
|
const created = await refreshSymlinks(name);
|
|
179
220
|
logger.success(`Symlinks refreshed: ${created.join(', ')}`);
|
|
180
221
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACL,YAAY,EACZ,aAAa,EACb,aAAa,EACb,mBAAmB,EAEnB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,YAAY,
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"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"}
|