claude-settings-sync 0.3.0 → 0.4.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.ko.md +2 -2
- package/README.md +2 -2
- package/package.json +5 -3
- package/scripts/postinstall.js +101 -0
package/README.ko.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[Claude Code](https://docs.anthropic.com/en/docs/claude-code) 설정을 GitHub Gist로 동기화합니다.
|
|
4
4
|
|
|
5
|
-
[](https://www.npmjs.com/package/claude-settings-sync)
|
|
6
6
|
[](LICENSE)
|
|
7
7
|
[](https://nodejs.org)
|
|
8
8
|
|
|
@@ -26,7 +26,7 @@ Claude Code의 설정(`~/.claude/`)은 기기 간 동기화가 안 됩니다.
|
|
|
26
26
|
## 설치
|
|
27
27
|
|
|
28
28
|
```bash
|
|
29
|
-
npm install -g
|
|
29
|
+
npm install -g claude-settings-sync
|
|
30
30
|
```
|
|
31
31
|
|
|
32
32
|
<details>
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Sync your [Claude Code](https://docs.anthropic.com/en/docs/claude-code) settings across machines via GitHub Gist.
|
|
4
4
|
|
|
5
|
-
[](https://www.npmjs.com/package/claude-settings-sync)
|
|
6
6
|
[](LICENSE)
|
|
7
7
|
[](https://nodejs.org)
|
|
8
8
|
|
|
@@ -26,7 +26,7 @@ Claude Code stores settings in `~/.claude/` — instructions, hooks, skills, key
|
|
|
26
26
|
## Install
|
|
27
27
|
|
|
28
28
|
```bash
|
|
29
|
-
npm install -g
|
|
29
|
+
npm install -g claude-settings-sync
|
|
30
30
|
```
|
|
31
31
|
|
|
32
32
|
<details>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-settings-sync",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Sync Claude Code settings across machines via GitHub Gist",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -10,11 +10,13 @@
|
|
|
10
10
|
"build": "tsup",
|
|
11
11
|
"dev": "tsup --watch",
|
|
12
12
|
"test": "vitest run",
|
|
13
|
-
"test:watch": "vitest"
|
|
13
|
+
"test:watch": "vitest",
|
|
14
|
+
"postinstall": "node scripts/postinstall.js"
|
|
14
15
|
},
|
|
15
16
|
"files": [
|
|
16
17
|
"bin",
|
|
17
|
-
"dist"
|
|
18
|
+
"dist",
|
|
19
|
+
"scripts"
|
|
18
20
|
],
|
|
19
21
|
"keywords": [
|
|
20
22
|
"claude",
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// ── Color support ───────────────────────────────────
|
|
4
|
+
const noColor =
|
|
5
|
+
process.env.NO_COLOR !== undefined ||
|
|
6
|
+
process.env.CI !== undefined ||
|
|
7
|
+
!process.stderr.isTTY;
|
|
8
|
+
|
|
9
|
+
const esc = (code) => (noColor ? '' : `\x1b[${code}m`);
|
|
10
|
+
const reset = noColor ? '' : '\x1b[0m';
|
|
11
|
+
|
|
12
|
+
const c = {
|
|
13
|
+
bold: (s) => `${esc('1')}${s}${reset}`,
|
|
14
|
+
dim: (s) => `${esc('2')}${s}${reset}`,
|
|
15
|
+
cyan: (s) => `${esc('36')}${s}${reset}`,
|
|
16
|
+
green: (s) => `${esc('32')}${s}${reset}`,
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
// ── Layout helpers ──────────────────────────────────
|
|
20
|
+
const W = 50;
|
|
21
|
+
|
|
22
|
+
function pad(left, content, right) {
|
|
23
|
+
const visibleContent = content.replace(/\x1b\[[0-9;]*m/g, '');
|
|
24
|
+
const visibleRight = right.replace(/\x1b\[[0-9;]*m/g, '');
|
|
25
|
+
const totalText = left + visibleContent + visibleRight;
|
|
26
|
+
const gap = W - totalText.length;
|
|
27
|
+
return left + content + right + ' '.repeat(Math.max(0, gap));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function center(text) {
|
|
31
|
+
const visible = text.replace(/\x1b\[[0-9;]*m/g, '');
|
|
32
|
+
const left = Math.floor((W - visible.length) / 2);
|
|
33
|
+
const right = W - visible.length - left;
|
|
34
|
+
return ' '.repeat(left) + text + ' '.repeat(right);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const top = c.dim(`╭${'─'.repeat(W)}╮`);
|
|
38
|
+
const mid = c.dim(`├${'─'.repeat(W)}┤`);
|
|
39
|
+
const bot = c.dim(`╰${'─'.repeat(W)}╯`);
|
|
40
|
+
const row = (s) => `${c.dim('│')}${s}${c.dim('│')}`;
|
|
41
|
+
const blank = row(' '.repeat(W));
|
|
42
|
+
|
|
43
|
+
// ── Logo (figlet "small" font) ──────────────────────
|
|
44
|
+
const logo = [
|
|
45
|
+
' ___ _ _ _ _ ___ ___ ',
|
|
46
|
+
' / __| | /_\\ | | | | \\| __| ',
|
|
47
|
+
'| (__| |__ / _ \\| |_| | |) | _| ',
|
|
48
|
+
' \\___|____/_/ \\_\\\\___/|___/|___| ',
|
|
49
|
+
];
|
|
50
|
+
|
|
51
|
+
const logoLines = logo.map((l) => row(center(c.cyan(l))));
|
|
52
|
+
|
|
53
|
+
const header = [
|
|
54
|
+
top,
|
|
55
|
+
blank,
|
|
56
|
+
...logoLines,
|
|
57
|
+
row(center(c.cyan(c.bold('S Y N C')))),
|
|
58
|
+
blank,
|
|
59
|
+
row(center('Sync your Claude Code settings across')),
|
|
60
|
+
row(center('machines — powered by GitHub Gist')),
|
|
61
|
+
blank,
|
|
62
|
+
];
|
|
63
|
+
|
|
64
|
+
// ── Command sections ────────────────────────────────
|
|
65
|
+
function cmdLine(cmd, desc) {
|
|
66
|
+
return row(pad(' ', c.green(`$ ${cmd}`), ` ${c.dim(desc)}`));
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function sectionTitle(title) {
|
|
70
|
+
return row(pad(' ', c.bold(`▸ ${title}`), ''));
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const body = [
|
|
74
|
+
mid,
|
|
75
|
+
blank,
|
|
76
|
+
sectionTitle('Getting Started'),
|
|
77
|
+
cmdLine('claudesync init ', 'Authenticate'),
|
|
78
|
+
cmdLine('claudesync push ', 'Upload settings'),
|
|
79
|
+
cmdLine('claudesync pull ', 'Download settings'),
|
|
80
|
+
blank,
|
|
81
|
+
sectionTitle('Auto Sync'),
|
|
82
|
+
cmdLine('claudesync auto ', 'Interactive setup'),
|
|
83
|
+
cmdLine('claudesync auto status ', 'Check status'),
|
|
84
|
+
cmdLine('claudesync auto disable ', 'Stop auto-sync'),
|
|
85
|
+
blank,
|
|
86
|
+
sectionTitle('History & Rollback'),
|
|
87
|
+
cmdLine('claudesync history ', 'View revisions'),
|
|
88
|
+
cmdLine('claudesync rollback <v> ', 'Restore revision'),
|
|
89
|
+
blank,
|
|
90
|
+
sectionTitle('Language'),
|
|
91
|
+
row(pad(' ', c.green('$ claudesync config lang ko|en'), '')),
|
|
92
|
+
row(pad(' ', c.dim('(defaults to system language)'), '')),
|
|
93
|
+
blank,
|
|
94
|
+
row(pad(' ', `${c.green('$ claudesync --help')} ${c.dim('Full reference')}`, '')),
|
|
95
|
+
blank,
|
|
96
|
+
bot,
|
|
97
|
+
];
|
|
98
|
+
|
|
99
|
+
// ── Print ───────────────────────────────────────────
|
|
100
|
+
const banner = [...header, ...body].join('\n');
|
|
101
|
+
process.stderr.write('\n' + banner + '\n\n');
|