jean-claude 1.3.1 → 1.4.1
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 +44 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +2 -1
- 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/profile.d.ts +3 -0
- package/dist/commands/profile.d.ts.map +1 -0
- package/dist/commands/profile.js +187 -0
- package/dist/commands/profile.js.map +1 -0
- package/dist/lib/profiles.d.ts +28 -0
- package/dist/lib/profiles.d.ts.map +1 -0
- package/dist/lib/profiles.js +165 -0
- package/dist/lib/profiles.js.map +1 -0
- package/dist/lib/sync.d.ts.map +1 -1
- package/dist/lib/sync.js +10 -0
- package/dist/lib/sync.js.map +1 -1
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/commands/doctor.d.ts +0 -3
- package/dist/commands/doctor.d.ts.map +0 -1
- package/dist/commands/doctor.js +0 -139
- package/dist/commands/doctor.js.map +0 -1
- package/dist/lib/scaffold.d.ts +0 -2
- package/dist/lib/scaffold.d.ts.map +0 -1
- package/dist/lib/scaffold.js +0 -77
- package/dist/lib/scaffold.js.map +0 -1
package/README.md
CHANGED
|
@@ -16,6 +16,8 @@ Then you sit down at another machine and... nothing. Back to square one.
|
|
|
16
16
|
- `settings.json` - Your preferences
|
|
17
17
|
- `hooks/` - Your automation scripts
|
|
18
18
|
- `skills/` - Your custom skills
|
|
19
|
+
- `agents/` - Your custom agents
|
|
20
|
+
- `keybindings.json` - Your keyboard shortcuts
|
|
19
21
|
|
|
20
22
|
## Quick Start
|
|
21
23
|
|
|
@@ -39,9 +41,50 @@ jean-claude pull
|
|
|
39
41
|
jean-claude status
|
|
40
42
|
```
|
|
41
43
|
|
|
44
|
+
## Profiles
|
|
45
|
+
|
|
46
|
+
Got multiple Claude accounts? A Teams account for work and a Max account for personal projects? Jean-Claude can manage separate profiles for each, with shared configuration kept in sync via symlinks.
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# Create a profile
|
|
50
|
+
jean-claude profile create work
|
|
51
|
+
|
|
52
|
+
# This will:
|
|
53
|
+
# 1. Create ~/.claude-work/ with symlinks to your shared config
|
|
54
|
+
# 2. Add a shell alias: claude-work
|
|
55
|
+
# 3. Give you a separate CLAUDE.md for work-specific instructions
|
|
56
|
+
|
|
57
|
+
# List your profiles
|
|
58
|
+
jean-claude profile list
|
|
59
|
+
|
|
60
|
+
# Launch Claude Code with your work profile
|
|
61
|
+
claude-work
|
|
62
|
+
|
|
63
|
+
# Delete a profile when you're done
|
|
64
|
+
jean-claude profile delete work
|
|
65
|
+
|
|
66
|
+
# Re-create symlinks if something breaks
|
|
67
|
+
jean-claude profile refresh work
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### How profiles work
|
|
71
|
+
|
|
72
|
+
Your main `~/.claude/` stays the source of truth. Profile directories are lightweight — they symlink back to your shared files:
|
|
73
|
+
|
|
74
|
+
| Shared (symlinked) | Profile-specific |
|
|
75
|
+
|---------------------|------------------------|
|
|
76
|
+
| `settings.json` | `CLAUDE.md` |
|
|
77
|
+
| `hooks/` | Authentication/session |
|
|
78
|
+
| `agents/` | |
|
|
79
|
+
| `keybindings.json` | |
|
|
80
|
+
|
|
81
|
+
Change a setting or add a hook in your main config, and all profiles see it immediately. Each profile gets its own `CLAUDE.md` for account-specific instructions.
|
|
82
|
+
|
|
83
|
+
Profile definitions are stored in the Jean-Claude repo, so they sync across machines with `push` and `pull`.
|
|
84
|
+
|
|
42
85
|
## That's it!
|
|
43
86
|
|
|
44
|
-
|
|
87
|
+
Simple commands. No complexity. Just sync.
|
|
45
88
|
|
|
46
89
|
## Development
|
|
47
90
|
|
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;AAgBpC,wBAAgB,aAAa,IAAI,OAAO,CAmBvC;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, } from './commands/index.js';
|
|
4
|
+
import { initCommand, pullCommand, pushCommand, statusCommand, profileCommand, } 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);
|
|
@@ -20,6 +20,7 @@ export function createProgram() {
|
|
|
20
20
|
program.addCommand(pullCommand);
|
|
21
21
|
program.addCommand(pushCommand);
|
|
22
22
|
program.addCommand(statusCommand);
|
|
23
|
+
program.addCommand(profileCommand);
|
|
23
24
|
return program;
|
|
24
25
|
}
|
|
25
26
|
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,
|
|
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"}
|
|
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"}
|
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"}
|
|
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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4PpC,eAAO,MAAM,cAAc,SAKS,CAAC"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { logger, formatPath } from '../utils/logger.js';
|
|
4
|
+
import { confirm, input, select } from '../utils/prompts.js';
|
|
5
|
+
import { loadProfiles, createProfile, deleteProfile, getProfileConfigDir, installShellAlias, removeShellAlias, detectShellConfigFiles, refreshSymlinks, SHARED_ITEMS, } from '../lib/profiles.js';
|
|
6
|
+
import { getJeanClaudeDir } from '../lib/paths.js';
|
|
7
|
+
import { JeanClaudeError, ErrorCode } from '../types/index.js';
|
|
8
|
+
import fs from 'fs-extra';
|
|
9
|
+
const profileCreateCommand = new Command('create')
|
|
10
|
+
.description('Create a new Claude Code profile with its own config directory')
|
|
11
|
+
.argument('[name]', 'Profile name (e.g., "work", "personal")')
|
|
12
|
+
.option('-y, --yes', 'Skip confirmation prompts')
|
|
13
|
+
.option('--shell <file>', 'Shell config file to add alias to (e.g., .zshrc, .bashrc)')
|
|
14
|
+
.action(async (nameArg, options) => {
|
|
15
|
+
// Verify jean-claude is initialized
|
|
16
|
+
const jcDir = getJeanClaudeDir();
|
|
17
|
+
if (!(await fs.pathExists(jcDir))) {
|
|
18
|
+
throw new JeanClaudeError('Jean-Claude is not initialized', ErrorCode.NOT_INITIALIZED, 'Run `jean-claude init <repo-url>` first.');
|
|
19
|
+
}
|
|
20
|
+
// Get profile name
|
|
21
|
+
const name = nameArg || (await input('Profile name (e.g., work, personal):'));
|
|
22
|
+
if (!name || !/^[a-z][a-z0-9-]*$/.test(name)) {
|
|
23
|
+
throw new JeanClaudeError('Invalid profile name', ErrorCode.INVALID_CONFIG, 'Use lowercase letters, numbers, and hyphens. Must start with a letter.');
|
|
24
|
+
}
|
|
25
|
+
const configDir = getProfileConfigDir(name);
|
|
26
|
+
logger.heading(`Creating profile: ${name}`);
|
|
27
|
+
console.log();
|
|
28
|
+
logger.info(`Config directory: ${chalk.cyan(formatPath(configDir))}`);
|
|
29
|
+
logger.info(`Shell alias: ${chalk.cyan(`claude-${name}`)}`);
|
|
30
|
+
console.log();
|
|
31
|
+
logger.info('The following items will be symlinked from your main config:');
|
|
32
|
+
logger.list(SHARED_ITEMS.map((i) => i.name));
|
|
33
|
+
console.log();
|
|
34
|
+
logger.info('Profile-specific files (like CLAUDE.md) will be independent.');
|
|
35
|
+
console.log();
|
|
36
|
+
if (!options.yes) {
|
|
37
|
+
const proceed = await confirm('Create this profile?');
|
|
38
|
+
if (!proceed) {
|
|
39
|
+
logger.dim('Cancelled.');
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// Create profile
|
|
44
|
+
logger.step(1, 3, 'Creating profile directory and symlinks...');
|
|
45
|
+
const profile = await createProfile(name);
|
|
46
|
+
logger.success('Profile directory created');
|
|
47
|
+
// Install shell alias
|
|
48
|
+
logger.step(2, 3, 'Installing shell alias...');
|
|
49
|
+
let shellFile;
|
|
50
|
+
if (options.shell) {
|
|
51
|
+
shellFile = options.shell;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
const shellOptions = detectShellConfigFiles();
|
|
55
|
+
shellFile = await select('Add alias to which shell config?', shellOptions);
|
|
56
|
+
}
|
|
57
|
+
await installShellAlias(name, profile, shellFile);
|
|
58
|
+
logger.success(`Alias added to ~/${shellFile}`);
|
|
59
|
+
// Done
|
|
60
|
+
logger.step(3, 3, 'Done!');
|
|
61
|
+
console.log();
|
|
62
|
+
logger.heading('Next steps');
|
|
63
|
+
console.log();
|
|
64
|
+
logger.info(`Reload your shell or run: ${chalk.cyan(`source ~/${shellFile}`)}`);
|
|
65
|
+
logger.info(`Then use ${chalk.cyan(`claude-${name}`)} to launch Claude Code with this profile.`);
|
|
66
|
+
logger.info(`Edit ${chalk.cyan(formatPath(configDir) + '/CLAUDE.md')} to add profile-specific instructions.`);
|
|
67
|
+
});
|
|
68
|
+
const profileListCommand = new Command('list')
|
|
69
|
+
.description('List all Claude Code profiles')
|
|
70
|
+
.action(async () => {
|
|
71
|
+
const config = await loadProfiles();
|
|
72
|
+
const names = Object.keys(config.profiles);
|
|
73
|
+
if (names.length === 0) {
|
|
74
|
+
logger.info('No profiles configured.');
|
|
75
|
+
logger.dim('Create one with: jean-claude profile create <name>');
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
logger.heading('Profiles');
|
|
79
|
+
console.log();
|
|
80
|
+
for (const name of names) {
|
|
81
|
+
const profile = config.profiles[name];
|
|
82
|
+
const exists = await fs.pathExists(profile.configDir);
|
|
83
|
+
const status = exists
|
|
84
|
+
? chalk.green('active')
|
|
85
|
+
: chalk.red('missing directory');
|
|
86
|
+
console.log(` ${chalk.bold(name)}`);
|
|
87
|
+
logger.table([
|
|
88
|
+
['Alias', chalk.cyan(profile.alias)],
|
|
89
|
+
['Config', formatPath(profile.configDir)],
|
|
90
|
+
['Status', status],
|
|
91
|
+
]);
|
|
92
|
+
// Check symlink health
|
|
93
|
+
if (exists) {
|
|
94
|
+
const broken = [];
|
|
95
|
+
for (const item of SHARED_ITEMS) {
|
|
96
|
+
const itemPath = `${profile.configDir}/${item.name}`;
|
|
97
|
+
try {
|
|
98
|
+
const stat = await fs.lstat(itemPath);
|
|
99
|
+
if (stat.isSymbolicLink()) {
|
|
100
|
+
const target = await fs.readlink(itemPath);
|
|
101
|
+
if (!(await fs.pathExists(target))) {
|
|
102
|
+
broken.push(item.name);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
// Item doesn't exist in profile, that's ok if source doesn't exist either
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (broken.length > 0) {
|
|
111
|
+
logger.table([
|
|
112
|
+
['Symlinks', chalk.yellow(`broken: ${broken.join(', ')}`)],
|
|
113
|
+
]);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
console.log();
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
const profileDeleteCommand = new Command('delete')
|
|
120
|
+
.description('Delete a Claude Code profile')
|
|
121
|
+
.argument('[name]', 'Profile name to delete')
|
|
122
|
+
.option('-y, --yes', 'Skip confirmation prompts')
|
|
123
|
+
.action(async (nameArg, options) => {
|
|
124
|
+
const config = await loadProfiles();
|
|
125
|
+
const names = Object.keys(config.profiles);
|
|
126
|
+
if (names.length === 0) {
|
|
127
|
+
logger.info('No profiles to delete.');
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
const name = nameArg ||
|
|
131
|
+
(await select('Which profile to delete?', names.map((n) => ({ name: n, value: n }))));
|
|
132
|
+
if (!config.profiles[name]) {
|
|
133
|
+
throw new JeanClaudeError(`Profile "${name}" not found`, ErrorCode.NOT_INITIALIZED, `Available profiles: ${names.join(', ')}`);
|
|
134
|
+
}
|
|
135
|
+
const profile = config.profiles[name];
|
|
136
|
+
logger.heading(`Delete profile: ${name}`);
|
|
137
|
+
console.log();
|
|
138
|
+
logger.warn(`This will remove ${chalk.cyan(formatPath(profile.configDir))} and its contents.`);
|
|
139
|
+
logger.warn('Profile-specific files (like CLAUDE.md) will be lost.');
|
|
140
|
+
logger.info('Shared files in your main ~/.claude/ are not affected (they are the originals).');
|
|
141
|
+
console.log();
|
|
142
|
+
if (!options.yes) {
|
|
143
|
+
const proceed = await confirm('Delete this profile?');
|
|
144
|
+
if (!proceed) {
|
|
145
|
+
logger.dim('Cancelled.');
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
// Delete profile
|
|
150
|
+
logger.step(1, 2, 'Removing profile directory...');
|
|
151
|
+
await deleteProfile(name);
|
|
152
|
+
logger.success('Profile deleted');
|
|
153
|
+
// Remove shell alias
|
|
154
|
+
logger.step(2, 2, 'Cleaning up shell aliases...');
|
|
155
|
+
const shellFiles = ['.zshrc', '.bashrc', '.bash_profile'];
|
|
156
|
+
for (const shellFile of shellFiles) {
|
|
157
|
+
const removed = await removeShellAlias(name, shellFile);
|
|
158
|
+
if (removed) {
|
|
159
|
+
logger.success(`Removed alias from ~/${shellFile}`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
console.log();
|
|
163
|
+
logger.success(`Profile "${name}" has been removed.`);
|
|
164
|
+
});
|
|
165
|
+
const profileRefreshCommand = new Command('refresh')
|
|
166
|
+
.description('Refresh symlinks for a profile (useful if new shared files were added)')
|
|
167
|
+
.argument('[name]', 'Profile name to refresh')
|
|
168
|
+
.action(async (nameArg) => {
|
|
169
|
+
const config = await loadProfiles();
|
|
170
|
+
const names = Object.keys(config.profiles);
|
|
171
|
+
if (names.length === 0) {
|
|
172
|
+
logger.info('No profiles configured.');
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
const name = nameArg ||
|
|
176
|
+
(await select('Which profile to refresh?', names.map((n) => ({ name: n, value: n }))));
|
|
177
|
+
logger.info(`Refreshing symlinks for profile "${name}"...`);
|
|
178
|
+
const created = await refreshSymlinks(name);
|
|
179
|
+
logger.success(`Symlinks refreshed: ${created.join(', ')}`);
|
|
180
|
+
});
|
|
181
|
+
export const profileCommand = new Command('profile')
|
|
182
|
+
.description('Manage Claude Code profiles for multiple accounts')
|
|
183
|
+
.addCommand(profileCreateCommand)
|
|
184
|
+
.addCommand(profileListCommand)
|
|
185
|
+
.addCommand(profileDeleteCommand)
|
|
186
|
+
.addCommand(profileRefreshCommand);
|
|
187
|
+
//# sourceMappingURL=profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ProfileConfig, Profile } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Items that get symlinked from the main ~/.claude/ into profile directories.
|
|
4
|
+
* Everything else in the profile dir is profile-specific.
|
|
5
|
+
*/
|
|
6
|
+
export declare const SHARED_ITEMS: ({
|
|
7
|
+
name: string;
|
|
8
|
+
type: "file";
|
|
9
|
+
} | {
|
|
10
|
+
name: string;
|
|
11
|
+
type: "directory";
|
|
12
|
+
})[];
|
|
13
|
+
export declare function loadProfiles(): Promise<ProfileConfig>;
|
|
14
|
+
export declare function saveProfiles(config: ProfileConfig): Promise<void>;
|
|
15
|
+
export declare function getProfileConfigDir(name: string): string;
|
|
16
|
+
export declare function createProfile(name: string): Promise<Profile>;
|
|
17
|
+
export declare function createSymlinks(sourceDir: string, targetDir: string): Promise<string[]>;
|
|
18
|
+
export declare function refreshSymlinks(name: string): Promise<string[]>;
|
|
19
|
+
export declare function deleteProfile(name: string): Promise<Profile>;
|
|
20
|
+
export declare function getShellAliasLine(profile: Profile): string;
|
|
21
|
+
export declare function getShellAliasBlock(name: string, profile: Profile): string;
|
|
22
|
+
export declare function installShellAlias(name: string, profile: Profile, shellConfigFile: string): Promise<void>;
|
|
23
|
+
export declare function removeShellAlias(name: string, shellConfigFile: string): Promise<boolean>;
|
|
24
|
+
export declare function detectShellConfigFiles(): Array<{
|
|
25
|
+
name: string;
|
|
26
|
+
value: string;
|
|
27
|
+
}>;
|
|
28
|
+
//# sourceMappingURL=profiles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../src/lib/profiles.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAIhE;;;GAGG;AACH,eAAO,MAAM,YAAY;;;;;;IAKxB,CAAC;AAMF,wBAAsB,YAAY,IAAI,OAAO,CAAC,aAAa,CAAC,CAM3D;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA6ClE;AAED,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,EAAE,CAAC,CAsBnB;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAcrE;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAsBlE;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAE1D;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAEzE;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,EAChB,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,IAAI,CAAC,CAqBf;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,OAAO,CAAC,CAmBlB;AAED,wBAAgB,sBAAsB,IAAI,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CA0B/E"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import os from 'os';
|
|
4
|
+
import { getConfigPaths, getJeanClaudeDir } from './paths.js';
|
|
5
|
+
import { JeanClaudeError, ErrorCode } from '../types/index.js';
|
|
6
|
+
const PROFILES_FILE = 'profiles.json';
|
|
7
|
+
/**
|
|
8
|
+
* Items that get symlinked from the main ~/.claude/ into profile directories.
|
|
9
|
+
* Everything else in the profile dir is profile-specific.
|
|
10
|
+
*/
|
|
11
|
+
export const SHARED_ITEMS = [
|
|
12
|
+
{ name: 'settings.json', type: 'file' },
|
|
13
|
+
{ name: 'hooks', type: 'directory' },
|
|
14
|
+
{ name: 'agents', type: 'directory' },
|
|
15
|
+
{ name: 'keybindings.json', type: 'file' },
|
|
16
|
+
];
|
|
17
|
+
function getProfilesPath() {
|
|
18
|
+
return path.join(getJeanClaudeDir(), PROFILES_FILE);
|
|
19
|
+
}
|
|
20
|
+
export async function loadProfiles() {
|
|
21
|
+
const profilesPath = getProfilesPath();
|
|
22
|
+
if (await fs.pathExists(profilesPath)) {
|
|
23
|
+
return await fs.readJson(profilesPath);
|
|
24
|
+
}
|
|
25
|
+
return { profiles: {} };
|
|
26
|
+
}
|
|
27
|
+
export async function saveProfiles(config) {
|
|
28
|
+
const profilesPath = getProfilesPath();
|
|
29
|
+
await fs.writeJson(profilesPath, config, { spaces: 2 });
|
|
30
|
+
}
|
|
31
|
+
export function getProfileConfigDir(name) {
|
|
32
|
+
const home = os.homedir();
|
|
33
|
+
return path.join(home, `.claude-${name}`);
|
|
34
|
+
}
|
|
35
|
+
export async function createProfile(name) {
|
|
36
|
+
const config = await loadProfiles();
|
|
37
|
+
if (config.profiles[name]) {
|
|
38
|
+
throw new JeanClaudeError(`Profile "${name}" already exists`, ErrorCode.ALREADY_EXISTS, `Use 'jean-claude profile list' to see existing profiles.`);
|
|
39
|
+
}
|
|
40
|
+
const configDir = getProfileConfigDir(name);
|
|
41
|
+
const alias = `claude-${name}`;
|
|
42
|
+
if (await fs.pathExists(configDir)) {
|
|
43
|
+
throw new JeanClaudeError(`Directory ${configDir} already exists`, ErrorCode.ALREADY_EXISTS, `Remove it first or choose a different profile name.`);
|
|
44
|
+
}
|
|
45
|
+
// Create profile directory
|
|
46
|
+
await fs.ensureDir(configDir);
|
|
47
|
+
// Create symlinks for shared items
|
|
48
|
+
const { claudeConfigDir } = getConfigPaths();
|
|
49
|
+
await createSymlinks(claudeConfigDir, configDir);
|
|
50
|
+
// Create an empty CLAUDE.md for the profile
|
|
51
|
+
const claudeMdPath = path.join(configDir, 'CLAUDE.md');
|
|
52
|
+
await fs.writeFile(claudeMdPath, `# Claude Code Configuration (${name} profile)\n\nThis file is loaded by Claude Code at the start of every session.\n`);
|
|
53
|
+
// Save profile to registry
|
|
54
|
+
const profile = {
|
|
55
|
+
alias,
|
|
56
|
+
configDir,
|
|
57
|
+
};
|
|
58
|
+
config.profiles[name] = profile;
|
|
59
|
+
await saveProfiles(config);
|
|
60
|
+
return profile;
|
|
61
|
+
}
|
|
62
|
+
export async function createSymlinks(sourceDir, targetDir) {
|
|
63
|
+
const created = [];
|
|
64
|
+
for (const item of SHARED_ITEMS) {
|
|
65
|
+
const sourcePath = path.join(sourceDir, item.name);
|
|
66
|
+
const targetPath = path.join(targetDir, item.name);
|
|
67
|
+
// Only symlink if source exists
|
|
68
|
+
if (!(await fs.pathExists(sourcePath))) {
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
// Remove existing target if any (shouldn't happen on create, but safe)
|
|
72
|
+
if (await fs.pathExists(targetPath)) {
|
|
73
|
+
await fs.remove(targetPath);
|
|
74
|
+
}
|
|
75
|
+
await fs.symlink(sourcePath, targetPath);
|
|
76
|
+
created.push(item.name);
|
|
77
|
+
}
|
|
78
|
+
return created;
|
|
79
|
+
}
|
|
80
|
+
export async function refreshSymlinks(name) {
|
|
81
|
+
const config = await loadProfiles();
|
|
82
|
+
const profile = config.profiles[name];
|
|
83
|
+
if (!profile) {
|
|
84
|
+
throw new JeanClaudeError(`Profile "${name}" not found`, ErrorCode.NOT_INITIALIZED, `Use 'jean-claude profile list' to see existing profiles.`);
|
|
85
|
+
}
|
|
86
|
+
const { claudeConfigDir } = getConfigPaths();
|
|
87
|
+
return createSymlinks(claudeConfigDir, profile.configDir);
|
|
88
|
+
}
|
|
89
|
+
export async function deleteProfile(name) {
|
|
90
|
+
const config = await loadProfiles();
|
|
91
|
+
const profile = config.profiles[name];
|
|
92
|
+
if (!profile) {
|
|
93
|
+
throw new JeanClaudeError(`Profile "${name}" not found`, ErrorCode.NOT_INITIALIZED, `Use 'jean-claude profile list' to see existing profiles.`);
|
|
94
|
+
}
|
|
95
|
+
// Remove profile directory
|
|
96
|
+
if (await fs.pathExists(profile.configDir)) {
|
|
97
|
+
await fs.remove(profile.configDir);
|
|
98
|
+
}
|
|
99
|
+
// Remove from registry
|
|
100
|
+
delete config.profiles[name];
|
|
101
|
+
await saveProfiles(config);
|
|
102
|
+
return profile;
|
|
103
|
+
}
|
|
104
|
+
export function getShellAliasLine(profile) {
|
|
105
|
+
return `alias ${profile.alias}='CLAUDE_CONFIG_DIR="${profile.configDir}" claude'`;
|
|
106
|
+
}
|
|
107
|
+
export function getShellAliasBlock(name, profile) {
|
|
108
|
+
return `\n# jean-claude profile: ${name}\n${getShellAliasLine(profile)}\n`;
|
|
109
|
+
}
|
|
110
|
+
export async function installShellAlias(name, profile, shellConfigFile) {
|
|
111
|
+
const rcPath = path.join(os.homedir(), shellConfigFile);
|
|
112
|
+
const block = getShellAliasBlock(name, profile);
|
|
113
|
+
// Check if alias already exists
|
|
114
|
+
if (await fs.pathExists(rcPath)) {
|
|
115
|
+
const content = await fs.readFile(rcPath, 'utf-8');
|
|
116
|
+
if (content.includes(`jean-claude profile: ${name}`)) {
|
|
117
|
+
// Replace existing block
|
|
118
|
+
const regex = new RegExp(`\\n# jean-claude profile: ${name}\\n[^\\n]+\\n`, 'g');
|
|
119
|
+
const updated = content.replace(regex, block);
|
|
120
|
+
await fs.writeFile(rcPath, updated);
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Append alias block
|
|
125
|
+
await fs.appendFile(rcPath, block);
|
|
126
|
+
}
|
|
127
|
+
export async function removeShellAlias(name, shellConfigFile) {
|
|
128
|
+
const rcPath = path.join(os.homedir(), shellConfigFile);
|
|
129
|
+
if (!(await fs.pathExists(rcPath))) {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
const content = await fs.readFile(rcPath, 'utf-8');
|
|
133
|
+
if (!content.includes(`jean-claude profile: ${name}`)) {
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
const regex = new RegExp(`\\n# jean-claude profile: ${name}\\n[^\\n]+\\n`, 'g');
|
|
137
|
+
const updated = content.replace(regex, '\n');
|
|
138
|
+
await fs.writeFile(rcPath, updated);
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
export function detectShellConfigFiles() {
|
|
142
|
+
const home = os.homedir();
|
|
143
|
+
const options = [];
|
|
144
|
+
if (fs.existsSync(path.join(home, '.zshrc'))) {
|
|
145
|
+
options.push({ name: '.zshrc (zsh)', value: '.zshrc' });
|
|
146
|
+
}
|
|
147
|
+
if (fs.existsSync(path.join(home, '.bashrc'))) {
|
|
148
|
+
options.push({ name: '.bashrc (bash)', value: '.bashrc' });
|
|
149
|
+
}
|
|
150
|
+
if (fs.existsSync(path.join(home, '.bash_profile'))) {
|
|
151
|
+
options.push({ name: '.bash_profile (bash)', value: '.bash_profile' });
|
|
152
|
+
}
|
|
153
|
+
// Always offer these even if they don't exist yet
|
|
154
|
+
if (!options.some((o) => o.value === '.zshrc')) {
|
|
155
|
+
options.push({ name: '.zshrc (zsh) - will be created', value: '.zshrc' });
|
|
156
|
+
}
|
|
157
|
+
if (!options.some((o) => o.value === '.bashrc')) {
|
|
158
|
+
options.push({
|
|
159
|
+
name: '.bashrc (bash) - will be created',
|
|
160
|
+
value: '.bashrc',
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
return options;
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=profiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/lib/profiles.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/sync.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/lib/sync.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG3E,eAAO,MAAM,aAAa,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/lib/sync.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG3E,eAAO,MAAM,aAAa,EAAE,WAAW,EA+BtC,CAAC;AAUF,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,KAAK,CAAC;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAE,CAAC,CA+BhG;AAgBD,wBAAsB,kBAAkB,CACtC,aAAa,EAAE,MAAM,EACrB,eAAe,EAAE,MAAM,EACvB,MAAM,UAAQ,GACb,OAAO,CAAC,UAAU,EAAE,CAAC,CAqDvB;AAED,wBAAsB,sBAAsB,CAC1C,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,UAAU,EAAE,CAAC,CA4BvB;AAED,wBAAsB,oBAAoB,CACxC,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,UAAU,EAAE,CAAC,CAiDvB;AAED,wBAAgB,cAAc,CAAC,gBAAgB,EAAE,MAAM,GAAG,QAAQ,CAgBjE;AAED,wBAAsB,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAUlF;AAED,wBAAsB,aAAa,CACjC,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,QAAQ,GACb,OAAO,CAAC,IAAI,CAAC,CAGf;AAED,wBAAsB,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMzE"}
|
package/dist/lib/sync.js
CHANGED
|
@@ -24,6 +24,16 @@ export const FILE_MAPPINGS = [
|
|
|
24
24
|
target: 'skills',
|
|
25
25
|
type: 'directory',
|
|
26
26
|
},
|
|
27
|
+
{
|
|
28
|
+
source: 'agents',
|
|
29
|
+
target: 'agents',
|
|
30
|
+
type: 'directory',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
source: 'keybindings.json',
|
|
34
|
+
target: 'keybindings.json',
|
|
35
|
+
type: 'file',
|
|
36
|
+
},
|
|
27
37
|
];
|
|
28
38
|
function fileHash(filePath) {
|
|
29
39
|
if (!fs.existsSync(filePath)) {
|
package/dist/lib/sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/lib/sync.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/lib/sync.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -54,4 +54,11 @@ export interface DoctorCheck {
|
|
|
54
54
|
message: string;
|
|
55
55
|
suggestion?: string;
|
|
56
56
|
}
|
|
57
|
+
export interface Profile {
|
|
58
|
+
alias: string;
|
|
59
|
+
configDir: string;
|
|
60
|
+
}
|
|
61
|
+
export interface ProfileConfig {
|
|
62
|
+
profiles: Record<string, Profile>;
|
|
63
|
+
}
|
|
57
64
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAgB,SAAQ,KAAK;IAG/B,IAAI,EAAE,SAAS;IACf,UAAU,CAAC,EAAE,MAAM;gBAF1B,OAAO,EAAE,MAAM,EACR,IAAI,EAAE,SAAS,EACf,UAAU,CAAC,EAAE,MAAM,YAAA;CAK7B;AAED,oBAAY,SAAS;IACnB,eAAe,oBAAoB;IACnC,YAAY,iBAAiB;IAC7B,SAAS,cAAc;IACvB,cAAc,mBAAmB;IACjC,iBAAiB,sBAAsB;IACvC,aAAa,kBAAkB;IAC/B,cAAc,mBAAmB;IACjC,oBAAoB,yBAAyB;IAC7C,cAAc,mBAAmB;IACjC,YAAY,iBAAiB;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;CAC5B;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAgB,SAAQ,KAAK;IAG/B,IAAI,EAAE,SAAS;IACf,UAAU,CAAC,EAAE,MAAM;gBAF1B,OAAO,EAAE,MAAM,EACR,IAAI,EAAE,SAAS,EACf,UAAU,CAAC,EAAE,MAAM,YAAA;CAK7B;AAED,oBAAY,SAAS;IACnB,eAAe,oBAAoB;IACnC,YAAY,iBAAiB;IAC7B,SAAS,cAAc;IACvB,cAAc,mBAAmB;IACjC,iBAAiB,sBAAsB;IACvC,aAAa,kBAAkB;IAC/B,cAAc,mBAAmB;IACjC,oBAAoB,yBAAyB;IAC7C,cAAc,mBAAmB;IACjC,YAAY,iBAAiB;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;CAC5B;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuHpC,eAAO,MAAM,aAAa,SAkCtB,CAAC"}
|
package/dist/commands/doctor.js
DELETED
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import fs from 'fs-extra';
|
|
3
|
-
import chalk from 'chalk';
|
|
4
|
-
import { logger, formatPath } from '../utils/logger.js';
|
|
5
|
-
import { getConfigPaths } from '../lib/paths.js';
|
|
6
|
-
import { isGitRepo, getGitStatus, hasMergeConflicts } from '../lib/git.js';
|
|
7
|
-
import { readMetaJson } from '../lib/sync.js';
|
|
8
|
-
async function runChecks() {
|
|
9
|
-
const checks = [];
|
|
10
|
-
const { jeanClaudeDir, claudeConfigDir } = getConfigPaths();
|
|
11
|
-
// Check 1: Directory exists
|
|
12
|
-
const dirExists = fs.existsSync(jeanClaudeDir);
|
|
13
|
-
checks.push({
|
|
14
|
-
name: 'Jean-Claude directory exists',
|
|
15
|
-
passed: dirExists,
|
|
16
|
-
message: dirExists
|
|
17
|
-
? formatPath(jeanClaudeDir)
|
|
18
|
-
: `${formatPath(jeanClaudeDir)} not found`,
|
|
19
|
-
suggestion: dirExists ? undefined : 'Run "jean-claude init" to set up.',
|
|
20
|
-
});
|
|
21
|
-
if (!dirExists) {
|
|
22
|
-
return checks; // Can't continue without directory
|
|
23
|
-
}
|
|
24
|
-
// Check 2: Is Git repo
|
|
25
|
-
const isRepo = await isGitRepo(jeanClaudeDir);
|
|
26
|
-
checks.push({
|
|
27
|
-
name: 'Is a Git repository',
|
|
28
|
-
passed: isRepo,
|
|
29
|
-
message: isRepo ? 'Yes' : 'Not a Git repository',
|
|
30
|
-
suggestion: isRepo
|
|
31
|
-
? undefined
|
|
32
|
-
: 'Run "git init" in ~/.jean-claude or re-run "jean-claude init".',
|
|
33
|
-
});
|
|
34
|
-
if (!isRepo) {
|
|
35
|
-
return checks; // Can't continue without Git
|
|
36
|
-
}
|
|
37
|
-
// Check 3: Remote configured
|
|
38
|
-
const gitStatus = await getGitStatus(jeanClaudeDir);
|
|
39
|
-
checks.push({
|
|
40
|
-
name: 'Git remote configured',
|
|
41
|
-
passed: !!gitStatus.remote,
|
|
42
|
-
message: gitStatus.remote || 'No remote',
|
|
43
|
-
suggestion: gitStatus.remote
|
|
44
|
-
? undefined
|
|
45
|
-
: 'Add a remote: git -C ~/.jean-claude remote add origin <url>',
|
|
46
|
-
});
|
|
47
|
-
// Check 4: No merge conflicts
|
|
48
|
-
const hasConflicts = await hasMergeConflicts(jeanClaudeDir);
|
|
49
|
-
checks.push({
|
|
50
|
-
name: 'No merge conflicts',
|
|
51
|
-
passed: !hasConflicts,
|
|
52
|
-
message: hasConflicts ? 'Conflicts detected!' : 'Clean',
|
|
53
|
-
suggestion: hasConflicts
|
|
54
|
-
? 'Resolve conflicts in ~/.jean-claude before continuing.'
|
|
55
|
-
: undefined,
|
|
56
|
-
});
|
|
57
|
-
// Check 5: Claude config directory exists
|
|
58
|
-
const claudeExists = fs.existsSync(claudeConfigDir);
|
|
59
|
-
checks.push({
|
|
60
|
-
name: 'Claude Code config directory exists',
|
|
61
|
-
passed: claudeExists,
|
|
62
|
-
message: claudeExists
|
|
63
|
-
? formatPath(claudeConfigDir)
|
|
64
|
-
: `${formatPath(claudeConfigDir)} not found`,
|
|
65
|
-
suggestion: claudeExists
|
|
66
|
-
? undefined
|
|
67
|
-
: 'Run "jean-claude pull" to create it, or start Claude Code once.',
|
|
68
|
-
});
|
|
69
|
-
// Check 6: meta.json is valid
|
|
70
|
-
const meta = await readMetaJson(jeanClaudeDir);
|
|
71
|
-
checks.push({
|
|
72
|
-
name: 'meta.json is valid',
|
|
73
|
-
passed: !!meta,
|
|
74
|
-
message: meta ? `Machine: ${meta.machineId}` : 'Invalid or missing',
|
|
75
|
-
suggestion: meta
|
|
76
|
-
? undefined
|
|
77
|
-
: 'Run "jean-claude init" again to regenerate meta.json.',
|
|
78
|
-
});
|
|
79
|
-
// Check 7: Required files exist
|
|
80
|
-
const claudeMdExists = fs.existsSync(`${jeanClaudeDir}/CLAUDE.md`);
|
|
81
|
-
checks.push({
|
|
82
|
-
name: 'CLAUDE.md exists',
|
|
83
|
-
passed: claudeMdExists,
|
|
84
|
-
message: claudeMdExists ? 'Present' : 'Missing',
|
|
85
|
-
suggestion: claudeMdExists
|
|
86
|
-
? undefined
|
|
87
|
-
: 'Create CLAUDE.md in ~/.jean-claude with your configuration.',
|
|
88
|
-
});
|
|
89
|
-
// Check 8: Permissions
|
|
90
|
-
let permissionsOk = true;
|
|
91
|
-
try {
|
|
92
|
-
fs.accessSync(jeanClaudeDir, fs.constants.R_OK | fs.constants.W_OK);
|
|
93
|
-
}
|
|
94
|
-
catch {
|
|
95
|
-
permissionsOk = false;
|
|
96
|
-
}
|
|
97
|
-
checks.push({
|
|
98
|
-
name: 'Directory permissions',
|
|
99
|
-
passed: permissionsOk,
|
|
100
|
-
message: permissionsOk ? 'OK (read/write)' : 'Permission denied',
|
|
101
|
-
suggestion: permissionsOk
|
|
102
|
-
? undefined
|
|
103
|
-
: `Fix permissions: chmod -R u+rw ${formatPath(jeanClaudeDir)}`,
|
|
104
|
-
});
|
|
105
|
-
return checks;
|
|
106
|
-
}
|
|
107
|
-
export const doctorCommand = new Command('doctor')
|
|
108
|
-
.description('Diagnose common issues')
|
|
109
|
-
.option('--json', 'Output as JSON')
|
|
110
|
-
.action(async (options) => {
|
|
111
|
-
const checks = await runChecks();
|
|
112
|
-
if (options.json) {
|
|
113
|
-
console.log(JSON.stringify({ checks }, null, 2));
|
|
114
|
-
const allPassed = checks.every((c) => c.passed);
|
|
115
|
-
process.exit(allPassed ? 0 : 1);
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
logger.heading('Jean-Claude Doctor');
|
|
119
|
-
console.log('');
|
|
120
|
-
let allPassed = true;
|
|
121
|
-
checks.forEach((check) => {
|
|
122
|
-
const icon = check.passed ? chalk.green('✓') : chalk.red('✗');
|
|
123
|
-
console.log(` ${icon} ${check.name}`);
|
|
124
|
-
console.log(` ${chalk.dim(check.message)}`);
|
|
125
|
-
if (!check.passed && check.suggestion) {
|
|
126
|
-
console.log(` ${chalk.yellow('→')} ${check.suggestion}`);
|
|
127
|
-
allPassed = false;
|
|
128
|
-
}
|
|
129
|
-
});
|
|
130
|
-
console.log('');
|
|
131
|
-
if (allPassed) {
|
|
132
|
-
logger.success('All checks passed!');
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
logger.warn('Some checks failed. See suggestions above.');
|
|
136
|
-
process.exit(1);
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
//# sourceMappingURL=doctor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/scaffold.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../src/lib/scaffold.ts"],"names":[],"mappings":"AAcA,wBAAsB,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAoCnF"}
|
package/dist/lib/scaffold.js
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import fs from 'fs-extra';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import { fileURLToPath } from 'url';
|
|
4
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
5
|
-
const __dirname = path.dirname(__filename);
|
|
6
|
-
// Templates are relative to the package root
|
|
7
|
-
function getTemplatesDir() {
|
|
8
|
-
// In development: src/lib -> templates
|
|
9
|
-
// In production: dist/lib -> templates
|
|
10
|
-
return path.resolve(__dirname, '../../templates');
|
|
11
|
-
}
|
|
12
|
-
export async function scaffoldDefaultFiles(jeanClaudeDir) {
|
|
13
|
-
const created = [];
|
|
14
|
-
const templatesDir = getTemplatesDir();
|
|
15
|
-
// CLAUDE.md
|
|
16
|
-
const claudeMdPath = path.join(jeanClaudeDir, 'CLAUDE.md');
|
|
17
|
-
if (!fs.existsSync(claudeMdPath)) {
|
|
18
|
-
const templatePath = path.join(templatesDir, 'CLAUDE.md');
|
|
19
|
-
if (fs.existsSync(templatePath)) {
|
|
20
|
-
await fs.copy(templatePath, claudeMdPath);
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
await fs.writeFile(claudeMdPath, getDefaultClaudeMd());
|
|
24
|
-
}
|
|
25
|
-
created.push('CLAUDE.md');
|
|
26
|
-
}
|
|
27
|
-
// settings.json
|
|
28
|
-
const settingsPath = path.join(jeanClaudeDir, 'settings.json');
|
|
29
|
-
if (!fs.existsSync(settingsPath)) {
|
|
30
|
-
const templatePath = path.join(templatesDir, 'settings.json');
|
|
31
|
-
if (fs.existsSync(templatePath)) {
|
|
32
|
-
await fs.copy(templatePath, settingsPath);
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
await fs.writeFile(settingsPath, getDefaultSettingsJson());
|
|
36
|
-
}
|
|
37
|
-
created.push('settings.json');
|
|
38
|
-
}
|
|
39
|
-
// .gitignore for the jean-claude repo
|
|
40
|
-
const gitignorePath = path.join(jeanClaudeDir, '.gitignore');
|
|
41
|
-
if (!fs.existsSync(gitignorePath)) {
|
|
42
|
-
await fs.writeFile(gitignorePath, getDefaultGitignore());
|
|
43
|
-
created.push('.gitignore');
|
|
44
|
-
}
|
|
45
|
-
return created;
|
|
46
|
-
}
|
|
47
|
-
function getDefaultClaudeMd() {
|
|
48
|
-
return `# Claude Code Configuration
|
|
49
|
-
|
|
50
|
-
This file is loaded by Claude Code at the start of every session.
|
|
51
|
-
Use it to provide context, instructions, and preferences.
|
|
52
|
-
|
|
53
|
-
## About Me
|
|
54
|
-
|
|
55
|
-
<!-- Add information about yourself, your preferences, coding style, etc. -->
|
|
56
|
-
|
|
57
|
-
## Project Preferences
|
|
58
|
-
|
|
59
|
-
<!-- Add any global preferences for how Claude should behave -->
|
|
60
|
-
|
|
61
|
-
## Common Tasks
|
|
62
|
-
|
|
63
|
-
<!-- Add instructions for common tasks you frequently perform -->
|
|
64
|
-
`;
|
|
65
|
-
}
|
|
66
|
-
function getDefaultSettingsJson() {
|
|
67
|
-
return JSON.stringify({
|
|
68
|
-
// Add any default settings here
|
|
69
|
-
}, null, 2);
|
|
70
|
-
}
|
|
71
|
-
function getDefaultGitignore() {
|
|
72
|
-
return `# Jean-Claude internal files
|
|
73
|
-
# Uncomment the line below if you don't want to sync meta.json
|
|
74
|
-
# meta.json
|
|
75
|
-
`;
|
|
76
|
-
}
|
|
77
|
-
//# sourceMappingURL=scaffold.js.map
|
package/dist/lib/scaffold.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/lib/scaffold.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,6CAA6C;AAC7C,SAAS,eAAe;IACtB,uCAAuC;IACvC,uCAAuC;IACvC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,aAAqB;IAC9D,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IAEvC,YAAY;IACZ,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;IAC3D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAC1D,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,MAAM,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5B,CAAC;IAED,gBAAgB;IAChB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;IAC/D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;QAC9D,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,MAAM,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,sBAAsB,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAChC,CAAC;IAED,sCAAsC;IACtC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAC7D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAClC,MAAM,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,mBAAmB,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO;;;;;;;;;;;;;;;;CAgBR,CAAC;AACF,CAAC;AAED,SAAS,sBAAsB;IAC7B,OAAO,IAAI,CAAC,SAAS,CACnB;IACE,gCAAgC;KACjC,EACD,IAAI,EACJ,CAAC,CACF,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB;IAC1B,OAAO;;;CAGR,CAAC;AACF,CAAC"}
|