@tkpdx01/ccc 1.3.0 → 1.3.2

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/index.js CHANGED
@@ -27,7 +27,7 @@ const program = new Command();
27
27
  program
28
28
  .name('ccc')
29
29
  .description('Claude Code Settings Launcher - 管理多个 Claude Code 配置文件')
30
- .version('1.3.0');
30
+ .version('1.3.1');
31
31
 
32
32
  // 注册所有命令
33
33
  listCommand(program);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tkpdx01/ccc",
3
- "version": "1.3.0",
3
+ "version": "1.3.2",
4
4
  "description": "Claude Code Settings Launcher - Manage multiple Claude Code profiles",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -12,7 +12,8 @@ import {
12
12
  deleteProfile,
13
13
  resolveProfile,
14
14
  getProfileCredentials,
15
- getClaudeSettingsTemplate
15
+ getClaudeSettingsTemplate,
16
+ ensureDisableNonessentialTraffic
16
17
  } from '../profiles.js';
17
18
 
18
19
  export function editCommand(program) {
@@ -95,6 +96,14 @@ export function editCommand(program) {
95
96
  currentProfile.env.ANTHROPIC_AUTH_TOKEN = apiKey;
96
97
  currentProfile.env.ANTHROPIC_BASE_URL = apiUrl;
97
98
 
99
+ // 确保主配置有 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC 设置
100
+ ensureDisableNonessentialTraffic();
101
+
102
+ // 确保影子配置也有该设置
103
+ if (currentProfile.env.CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC !== '1') {
104
+ currentProfile.env.CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC = '1';
105
+ }
106
+
98
107
  // 如果重命名
99
108
  if (newName && newName !== profile) {
100
109
  const newPath = getProfilePath(newName);
@@ -17,14 +17,24 @@ export function showHelp() {
17
17
  console.log(chalk.gray(' ccc use <profile> ') + '设置默认配置');
18
18
  console.log(chalk.gray(' ccc new [name] ') + '创建新的影子配置');
19
19
  console.log(chalk.gray(' ccc import <file> ') + '从文件导入(自动识别格式)');
20
+ console.log(chalk.gray(' ccc sync [profile] ') + '从模板同步配置(保留 API 凭证)');
21
+ console.log(chalk.gray(' ccc sync --all ') + '同步所有配置');
20
22
  console.log(chalk.gray(' ccc edit [profile] ') + '编辑配置');
21
23
  console.log(chalk.gray(' ccc delete, rm [name] ') + '删除配置');
22
24
  console.log(chalk.gray(' ccc help ') + '显示此帮助信息');
23
25
  console.log();
24
26
 
27
+ console.log(chalk.yellow(' 云同步命令:'));
28
+ console.log(chalk.gray(' ccc webdav setup ') + '配置 WebDAV 连接和同步密码');
29
+ console.log(chalk.gray(' ccc webdav push ') + '推送到云端(加密)');
30
+ console.log(chalk.gray(' ccc webdav pull ') + '从云端拉取(解密)');
31
+ console.log(chalk.gray(' ccc webdav status ') + '查看同步状态');
32
+ console.log();
33
+
25
34
  console.log(chalk.yellow(' 配置存储:'));
26
35
  console.log(chalk.gray(' ~/.ccc/profiles/ ') + '影子配置文件目录');
27
- console.log(chalk.gray(' 影子配置只存储 ') + 'ANTHROPIC_AUTH_TOKEN 和 ANTHROPIC_BASE_URL');
36
+ console.log(chalk.gray(' ~/.ccc/webdav.json ') + 'WebDAV 连接配置');
37
+ console.log(chalk.gray(' ~/.ccc/.sync_key ') + '本地密码缓存(机器指纹加密)');
28
38
  console.log();
29
39
 
30
40
  console.log(chalk.yellow(' 支持的导入格式:'));
@@ -38,6 +48,7 @@ export function showHelp() {
38
48
  console.log(chalk.gray(' ccc 3 -d ') + '启动第 3 个配置 + 跳过权限');
39
49
  console.log(chalk.gray(' ccc kfc ') + '使用名称启动');
40
50
  console.log(chalk.gray(' ccc import export.sql ') + '从文件导入配置');
51
+ console.log(chalk.gray(' ccc webdav push ') + '推送配置到云端');
41
52
  console.log();
42
53
  }
43
54
 
package/src/profiles.js CHANGED
@@ -86,6 +86,29 @@ export function getClaudeSettingsTemplate() {
86
86
  return null;
87
87
  }
88
88
 
89
+ // 确保主配置中有 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC 设置
90
+ // 如果没有则添加,并返回更新后的模板
91
+ export function ensureDisableNonessentialTraffic() {
92
+ const template = getClaudeSettingsTemplate();
93
+ if (!template) {
94
+ return null;
95
+ }
96
+
97
+ // 确保 env 对象存在
98
+ if (!template.env) {
99
+ template.env = {};
100
+ }
101
+
102
+ // 检查是否已有该设置
103
+ if (template.env.CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC !== '1') {
104
+ template.env.CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC = '1';
105
+ // 保存回主配置
106
+ fs.writeFileSync(CLAUDE_SETTINGS_PATH, JSON.stringify(template, null, 2));
107
+ }
108
+
109
+ return template;
110
+ }
111
+
89
112
  // 读取 profile 配置
90
113
  export function readProfile(name) {
91
114
  const profilePath = getProfilePath(name);
@@ -108,6 +131,9 @@ export function saveProfile(name, settings) {
108
131
 
109
132
  // 创建基于主配置的 profile(复制 ~/.claude/settings.json 并设置 env)
110
133
  export function createProfileFromTemplate(name, apiUrl, apiKey) {
134
+ // 先确保主配置有 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC 设置
135
+ ensureDisableNonessentialTraffic();
136
+
111
137
  const template = getClaudeSettingsTemplate() || {};
112
138
 
113
139
  // 确保 env 对象存在
@@ -125,6 +151,9 @@ export function createProfileFromTemplate(name, apiUrl, apiKey) {
125
151
 
126
152
  // 同步主配置到 profile(保留 profile 的 API 凭证)
127
153
  export function syncProfileWithTemplate(name) {
154
+ // 先确保主配置有 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC 设置
155
+ ensureDisableNonessentialTraffic();
156
+
128
157
  const template = getClaudeSettingsTemplate();
129
158
  if (!template) {
130
159
  return null;