ccjk 13.3.8 → 13.3.10
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 +25 -2
- package/dist/chunks/api-cli.mjs +1 -1
- package/dist/chunks/auto-fix.mjs +1 -1
- package/dist/chunks/ccr.mjs +3 -3
- package/dist/chunks/claude-code-config-manager.mjs +10 -12
- package/dist/chunks/claude-code-incremental-manager.mjs +1 -1
- package/dist/chunks/codex.mjs +1 -1
- package/dist/chunks/config.mjs +50 -11
- package/dist/chunks/doctor.mjs +1 -1
- package/dist/chunks/init.mjs +4 -4
- package/dist/chunks/mcp-cli.mjs +1 -1
- package/dist/chunks/mcp.mjs +1 -1
- package/dist/chunks/menu-hierarchical.mjs +3 -3
- package/dist/chunks/menu.mjs +2 -2
- package/dist/chunks/onboarding-wizard.mjs +1 -1
- package/dist/chunks/package.mjs +1 -1
- package/dist/chunks/quick-setup.mjs +2 -2
- package/dist/chunks/slash-commands.mjs +1 -1
- package/dist/chunks/update.mjs +3 -3
- package/dist/i18n/locales/en/mcp.json +1 -1
- package/dist/i18n/locales/zh-CN/mcp.json +1 -1
- package/dist/index.mjs +1 -1
- package/dist/shared/{ccjk.KpFl2RDA.mjs → ccjk.BHBpQsHd.mjs} +2 -0
- package/dist/shared/{ccjk.DfZKjHvG.mjs → ccjk.CvIIxgUS.mjs} +1 -1
- package/dist/shared/{ccjk.DxWqH-EF.mjs → ccjk.DwbhKZGA.mjs} +32 -27
- package/dist/templates/claude-code/common/settings.json +0 -4
- package/package.json +2 -2
- package/templates/claude-code/common/settings.json +0 -4
package/README.md
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
# 🚀 CCJK
|
|
4
4
|
|
|
5
|
-
### Claude Code
|
|
5
|
+
### Turn Claude Code into a production-ready AI dev environment
|
|
6
6
|
|
|
7
|
-
**One command
|
|
7
|
+
**One command setup · Persistent memory · MCP automation · Cloud sync**
|
|
8
8
|
|
|
9
9
|
<br/>
|
|
10
10
|
|
|
@@ -18,6 +18,7 @@ npx ccjk
|
|
|
18
18
|
[](https://www.npmjs.com/package/ccjk)
|
|
19
19
|
[](./LICENSE)
|
|
20
20
|
[](https://github.com/miounet11/ccjk/stargazers)
|
|
21
|
+
[](https://github.com/vercel-labs/agent-browser)
|
|
21
22
|
|
|
22
23
|
[English](./README.en.md) · [中文](./README.zh-CN.md) · [日本語](./README.ja.md)
|
|
23
24
|
|
|
@@ -25,6 +26,14 @@ npx ccjk
|
|
|
25
26
|
|
|
26
27
|
---
|
|
27
28
|
|
|
29
|
+
## ✨ Why CCJK
|
|
30
|
+
|
|
31
|
+
- **30-second onboarding** for Claude Code, Codex, MCP services, and browser automation
|
|
32
|
+
- **Persistent project memory** so your AI stops forgetting architecture and conventions
|
|
33
|
+
- **Smarter model + context usage** to cut waste and keep long sessions usable
|
|
34
|
+
- **Cloud sync and remote control** so your setup follows you across devices
|
|
35
|
+
- **Production-ready defaults** with hardened config, validation, and safer automation
|
|
36
|
+
|
|
28
37
|
## 💡 What is CCJK?
|
|
29
38
|
|
|
30
39
|
The **missing toolkit** for [Claude Code](https://github.com/anthropics/claude-code) that developers actually want:
|
|
@@ -54,6 +63,13 @@ npx ccjk init --silent
|
|
|
54
63
|
# Done. Claude Code is now 10x smarter.
|
|
55
64
|
```
|
|
56
65
|
|
|
66
|
+
```bash
|
|
67
|
+
# Popular one-liners
|
|
68
|
+
npx ccjk init --silent
|
|
69
|
+
npx ccjk boost
|
|
70
|
+
npx ccjk browser open https://example.com --headed
|
|
71
|
+
```
|
|
72
|
+
|
|
57
73
|
**What just happened?**
|
|
58
74
|
- ✅ Auto-detected your project type (React/Vue/Node/Python/Go/Rust/etc)
|
|
59
75
|
- ✅ Configured optimal MCP services for your stack
|
|
@@ -96,6 +112,13 @@ npx ccjk init --silent
|
|
|
96
112
|
| 📱 "Can't control Claude from my phone" | 🌐 **Remote Control** | Web/App control with one-command setup |
|
|
97
113
|
| 🔐 "Worried about production security" | 🛡️ **Production-Grade Security** | HTTPS enforcement, CORS hardening, secrets validation |
|
|
98
114
|
|
|
115
|
+
## 🏆 Built For Real Work
|
|
116
|
+
|
|
117
|
+
- **Claude Code users** who want setup done once, correctly
|
|
118
|
+
- **Teams** who need repeatable onboarding and shared conventions
|
|
119
|
+
- **Power users** who want memory, MCP, browser automation, and multi-agent workflows in one CLI
|
|
120
|
+
- **API users** who care about reducing token waste without losing context quality
|
|
121
|
+
|
|
99
122
|
## 🔥 Features That Matter
|
|
100
123
|
|
|
101
124
|
### 🧠 Persistent Memory
|
package/dist/chunks/api-cli.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import a from './index2.mjs';
|
|
2
2
|
import { i18n } from './index5.mjs';
|
|
3
|
-
import {
|
|
3
|
+
import { e as configureApi, g as getExistingApiConfig } from './config.mjs';
|
|
4
4
|
import { g as getAllPresets } from '../shared/ccjk.DopKzo3z.mjs';
|
|
5
5
|
import '../shared/ccjk.BAGoDD49.mjs';
|
|
6
6
|
import 'node:fs';
|
package/dist/chunks/auto-fix.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
2
|
import { homedir } from 'node:os';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
|
-
import { n as needsMigration, m as migrateSettingsForTokenRetrieval } from '../shared/ccjk.
|
|
4
|
+
import { n as needsMigration, m as migrateSettingsForTokenRetrieval } from '../shared/ccjk.DwbhKZGA.mjs';
|
|
5
5
|
import './index2.mjs';
|
|
6
6
|
import '../shared/ccjk.BAGoDD49.mjs';
|
|
7
7
|
import './constants.mjs';
|
package/dist/chunks/ccr.mjs
CHANGED
|
@@ -52,10 +52,10 @@ import './smart-defaults.mjs';
|
|
|
52
52
|
import '../shared/ccjk.DJuyfrlL.mjs';
|
|
53
53
|
import './config2.mjs';
|
|
54
54
|
import './init.mjs';
|
|
55
|
-
import '../shared/ccjk.
|
|
55
|
+
import '../shared/ccjk.CvIIxgUS.mjs';
|
|
56
56
|
import './auto-updater.mjs';
|
|
57
57
|
import './version-checker.mjs';
|
|
58
|
-
import '../shared/ccjk.
|
|
58
|
+
import '../shared/ccjk.DwbhKZGA.mjs';
|
|
59
59
|
import './claude-code-config-manager.mjs';
|
|
60
60
|
import './installer.mjs';
|
|
61
61
|
import '../shared/ccjk._dESH4Rk.mjs';
|
|
@@ -78,7 +78,7 @@ import './uninstall.mjs';
|
|
|
78
78
|
import '../shared/ccjk.CvChMYvB.mjs';
|
|
79
79
|
import 'globby';
|
|
80
80
|
import './update.mjs';
|
|
81
|
-
import '../shared/ccjk.
|
|
81
|
+
import '../shared/ccjk.BHBpQsHd.mjs';
|
|
82
82
|
|
|
83
83
|
async function ccr(options = {}) {
|
|
84
84
|
try {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { d as dayjs } from '../shared/ccjk.RyizuzOI.mjs';
|
|
2
2
|
import { ZCF_CONFIG_FILE, ZCF_CONFIG_DIR, SETTINGS_FILE } from './constants.mjs';
|
|
3
3
|
import { readDefaultTomlConfig, createDefaultTomlConfig, writeTomlConfig } from './ccjk-config.mjs';
|
|
4
|
-
import { a as clearModelEnv } from './config.mjs';
|
|
4
|
+
import { a as clearModelEnv, d as applyAdaptiveModelEnv, n as normalizeAdaptiveModelSettings } from './config.mjs';
|
|
5
5
|
import { ensureDir, exists, copyFile } from './fs-operations.mjs';
|
|
6
6
|
import { readJsonConfig } from './json-config.mjs';
|
|
7
7
|
import { j as join } from '../shared/ccjk.bQ7Dh1g4.mjs';
|
|
@@ -206,7 +206,7 @@ class ClaudeCodeConfigManager {
|
|
|
206
206
|
ensureI18nInitialized();
|
|
207
207
|
try {
|
|
208
208
|
if (!profile) {
|
|
209
|
-
const { switchToOfficialLogin } = await import('./config.mjs').then(function (n) { return n.
|
|
209
|
+
const { switchToOfficialLogin } = await import('./config.mjs').then(function (n) { return n.l; });
|
|
210
210
|
switchToOfficialLogin();
|
|
211
211
|
return;
|
|
212
212
|
}
|
|
@@ -243,22 +243,20 @@ class ClaudeCodeConfigManager {
|
|
|
243
243
|
delete settings.env.ANTHROPIC_BASE_URL;
|
|
244
244
|
}
|
|
245
245
|
const hasAdaptiveModelConfig = Boolean(
|
|
246
|
-
profile.defaultHaikuModel || profile.defaultSonnetModel || profile.defaultOpusModel
|
|
246
|
+
profile.primaryModel || profile.defaultHaikuModel || profile.defaultSonnetModel || profile.defaultOpusModel
|
|
247
247
|
);
|
|
248
248
|
if (hasAdaptiveModelConfig) {
|
|
249
249
|
delete settings.model;
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
} else if (profile.primaryModel) {
|
|
257
|
-
delete settings.model;
|
|
258
|
-
settings.env.ANTHROPIC_MODEL = profile.primaryModel;
|
|
250
|
+
applyAdaptiveModelEnv(settings.env, {
|
|
251
|
+
primaryModel: profile.primaryModel,
|
|
252
|
+
defaultHaikuModel: profile.defaultHaikuModel,
|
|
253
|
+
defaultSonnetModel: profile.defaultSonnetModel,
|
|
254
|
+
defaultOpusModel: profile.defaultOpusModel
|
|
255
|
+
});
|
|
259
256
|
} else {
|
|
260
257
|
clearModelEnv(settings.env);
|
|
261
258
|
}
|
|
259
|
+
normalizeAdaptiveModelSettings(settings);
|
|
262
260
|
writeJsonConfig(SETTINGS_FILE, settings);
|
|
263
261
|
const { setPrimaryApiKey, addCompletedOnboarding } = await import('./claude-config.mjs').then(function (n) { return n.h; });
|
|
264
262
|
setPrimaryApiKey();
|
|
@@ -4,7 +4,7 @@ import { ensureI18nInitialized, i18n } from './index5.mjs';
|
|
|
4
4
|
import { ClaudeCodeConfigManager } from './claude-code-config-manager.mjs';
|
|
5
5
|
import { a as addNumbersToChoices } from '../shared/ccjk.BFQ7yr5S.mjs';
|
|
6
6
|
import { p as promptBoolean } from '../shared/ccjk.BWFpnOr3.mjs';
|
|
7
|
-
import { v as validateApiKey } from '../shared/ccjk.
|
|
7
|
+
import { v as validateApiKey } from '../shared/ccjk.CvIIxgUS.mjs';
|
|
8
8
|
import '../shared/ccjk.BAGoDD49.mjs';
|
|
9
9
|
import 'node:readline';
|
|
10
10
|
import 'stream';
|
package/dist/chunks/codex.mjs
CHANGED
|
@@ -10,7 +10,7 @@ import { x as K } from './main.mjs';
|
|
|
10
10
|
import { CODEX_AUTH_FILE, SUPPORTED_LANGS, CODEX_DIR, CODEX_AGENTS_FILE, CODEX_PROMPTS_DIR, CODEX_CONFIG_FILE, AI_OUTPUT_LANGUAGES, ZCF_CONFIG_FILE } from './constants.mjs';
|
|
11
11
|
import { ensureI18nInitialized, i18n, format } from './index5.mjs';
|
|
12
12
|
import { updateZcfConfig, readZcfConfig, readDefaultTomlConfig, updateTomlConfig } from './ccjk-config.mjs';
|
|
13
|
-
import {
|
|
13
|
+
import { f as applyAiLanguageDirective } from './config.mjs';
|
|
14
14
|
import { exists, readFile, ensureDir, writeFileAtomic, writeFile, copyFile, copyDir } from './fs-operations.mjs';
|
|
15
15
|
import { readJsonConfig, writeJsonConfig } from './json-config.mjs';
|
|
16
16
|
import { k as isWindows, m as getMcpCommand, l as getSystemRoot, w as wrapCommandWithSudo, n as normalizeTomlPath } from './platform.mjs';
|
package/dist/chunks/config.mjs
CHANGED
|
@@ -12,11 +12,10 @@ import { j as join, d as dirname } from '../shared/ccjk.bQ7Dh1g4.mjs';
|
|
|
12
12
|
|
|
13
13
|
const MODEL_ENV_KEYS = [
|
|
14
14
|
"ANTHROPIC_MODEL",
|
|
15
|
+
"ANTHROPIC_SMALL_FAST_MODEL",
|
|
15
16
|
"ANTHROPIC_DEFAULT_HAIKU_MODEL",
|
|
16
17
|
"ANTHROPIC_DEFAULT_SONNET_MODEL",
|
|
17
|
-
"ANTHROPIC_DEFAULT_OPUS_MODEL"
|
|
18
|
-
// Deprecated but still cleaned to avoid stale values
|
|
19
|
-
"ANTHROPIC_SMALL_FAST_MODEL"
|
|
18
|
+
"ANTHROPIC_DEFAULT_OPUS_MODEL"
|
|
20
19
|
];
|
|
21
20
|
function clearModelEnv(env) {
|
|
22
21
|
for (const key of MODEL_ENV_KEYS) {
|
|
@@ -24,6 +23,43 @@ function clearModelEnv(env) {
|
|
|
24
23
|
}
|
|
25
24
|
}
|
|
26
25
|
|
|
26
|
+
function applyAdaptiveModelEnv(env, models) {
|
|
27
|
+
const primaryModel = models.primaryModel?.trim();
|
|
28
|
+
const defaultHaikuModel = models.defaultHaikuModel?.trim();
|
|
29
|
+
const defaultSonnetModel = models.defaultSonnetModel?.trim();
|
|
30
|
+
const defaultOpusModel = models.defaultOpusModel?.trim();
|
|
31
|
+
if (primaryModel) {
|
|
32
|
+
env.ANTHROPIC_MODEL = primaryModel;
|
|
33
|
+
}
|
|
34
|
+
if (defaultHaikuModel) {
|
|
35
|
+
env.ANTHROPIC_SMALL_FAST_MODEL = defaultHaikuModel;
|
|
36
|
+
env.ANTHROPIC_DEFAULT_HAIKU_MODEL = defaultHaikuModel;
|
|
37
|
+
}
|
|
38
|
+
if (defaultSonnetModel) {
|
|
39
|
+
env.ANTHROPIC_DEFAULT_SONNET_MODEL = defaultSonnetModel;
|
|
40
|
+
}
|
|
41
|
+
if (defaultOpusModel) {
|
|
42
|
+
env.ANTHROPIC_DEFAULT_OPUS_MODEL = defaultOpusModel;
|
|
43
|
+
}
|
|
44
|
+
cleanAdaptiveModelEnv(env);
|
|
45
|
+
}
|
|
46
|
+
function cleanAdaptiveModelEnv(env) {
|
|
47
|
+
for (const key of MODEL_ENV_KEYS) {
|
|
48
|
+
const value = env[key];
|
|
49
|
+
if (typeof value === "string" && value.trim() === "") {
|
|
50
|
+
delete env[key];
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function normalizeAdaptiveModelSettings(settings) {
|
|
55
|
+
if (settings.env) {
|
|
56
|
+
cleanAdaptiveModelEnv(settings.env);
|
|
57
|
+
}
|
|
58
|
+
if (settings.model === "default") {
|
|
59
|
+
delete settings.model;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
27
63
|
function ensureClaudeDir() {
|
|
28
64
|
ensureDir(CLAUDE_DIR);
|
|
29
65
|
}
|
|
@@ -158,12 +194,13 @@ function updateCustomModel(primaryModel, haikuModel, sonnetModel, opusModel) {
|
|
|
158
194
|
delete settings.model;
|
|
159
195
|
settings.env = settings.env || {};
|
|
160
196
|
clearModelEnv(settings.env);
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
197
|
+
applyAdaptiveModelEnv(settings.env, {
|
|
198
|
+
primaryModel,
|
|
199
|
+
defaultHaikuModel: haikuModel,
|
|
200
|
+
defaultSonnetModel: sonnetModel,
|
|
201
|
+
defaultOpusModel: opusModel
|
|
202
|
+
});
|
|
203
|
+
normalizeAdaptiveModelSettings(settings);
|
|
167
204
|
writeJsonConfig(SETTINGS_FILE, settings);
|
|
168
205
|
}
|
|
169
206
|
function updateDefaultModel(model) {
|
|
@@ -183,6 +220,7 @@ function updateDefaultModel(model) {
|
|
|
183
220
|
} else {
|
|
184
221
|
settings.model = model;
|
|
185
222
|
}
|
|
223
|
+
normalizeAdaptiveModelSettings(settings);
|
|
186
224
|
writeJsonConfig(SETTINGS_FILE, settings);
|
|
187
225
|
}
|
|
188
226
|
function mergeSettingsFile(templatePath, targetPath) {
|
|
@@ -267,6 +305,7 @@ function getExistingCustomModelConfig() {
|
|
|
267
305
|
}
|
|
268
306
|
const {
|
|
269
307
|
ANTHROPIC_MODEL,
|
|
308
|
+
ANTHROPIC_SMALL_FAST_MODEL,
|
|
270
309
|
ANTHROPIC_DEFAULT_HAIKU_MODEL,
|
|
271
310
|
ANTHROPIC_DEFAULT_SONNET_MODEL,
|
|
272
311
|
ANTHROPIC_DEFAULT_OPUS_MODEL
|
|
@@ -276,7 +315,7 @@ function getExistingCustomModelConfig() {
|
|
|
276
315
|
}
|
|
277
316
|
return {
|
|
278
317
|
primaryModel: ANTHROPIC_MODEL,
|
|
279
|
-
haikuModel: ANTHROPIC_DEFAULT_HAIKU_MODEL,
|
|
318
|
+
haikuModel: ANTHROPIC_DEFAULT_HAIKU_MODEL || ANTHROPIC_SMALL_FAST_MODEL,
|
|
280
319
|
sonnetModel: ANTHROPIC_DEFAULT_SONNET_MODEL,
|
|
281
320
|
opusModel: ANTHROPIC_DEFAULT_OPUS_MODEL
|
|
282
321
|
};
|
|
@@ -396,4 +435,4 @@ const config = {
|
|
|
396
435
|
updateDefaultModel: updateDefaultModel
|
|
397
436
|
};
|
|
398
437
|
|
|
399
|
-
export { clearModelEnv as a, backupExistingConfig as b, copyConfigFiles as c,
|
|
438
|
+
export { clearModelEnv as a, backupExistingConfig as b, copyConfigFiles as c, applyAdaptiveModelEnv as d, configureApi as e, applyAiLanguageDirective as f, getExistingApiConfig as g, getExistingModelConfig as h, getExistingCustomModelConfig as i, updateDefaultModel as j, ensureClaudeDir as k, config as l, normalizeAdaptiveModelSettings as n, promptApiConfigurationAction as p, switchToOfficialLogin as s, updateCustomModel as u };
|
package/dist/chunks/doctor.mjs
CHANGED
|
@@ -814,7 +814,7 @@ async function checkPermissionRules() {
|
|
|
814
814
|
}
|
|
815
815
|
async function fixSettingsFile() {
|
|
816
816
|
const isZh = i18n.language === "zh-CN";
|
|
817
|
-
const { copyConfigFiles } = await import('./config.mjs').then(function (n) { return n.
|
|
817
|
+
const { copyConfigFiles } = await import('./config.mjs').then(function (n) { return n.l; });
|
|
818
818
|
console.log("");
|
|
819
819
|
console.log(a.bold.cyan("\u{1F527} Fixing settings.json"));
|
|
820
820
|
console.log(a.dim("\u2500".repeat(50)));
|
package/dist/chunks/init.mjs
CHANGED
|
@@ -3,7 +3,7 @@ import process__default from 'node:process';
|
|
|
3
3
|
import a from './index2.mjs';
|
|
4
4
|
import { i as inquirer } from './index3.mjs';
|
|
5
5
|
import { m as runCodexFullInit, k as selectMcpServices, g as getMcpServices, M as MCP_SERVICE_CONFIGS } from './codex.mjs';
|
|
6
|
-
import { m as modifyApiConfigPartially, a as configureApiCompletely, s as selectAndInstallWorkflows, c as configureOutputStyle, f as formatApiKeyDisplay, W as WORKFLOW_CONFIG_BASE } from '../shared/ccjk.
|
|
6
|
+
import { m as modifyApiConfigPartially, a as configureApiCompletely, s as selectAndInstallWorkflows, c as configureOutputStyle, f as formatApiKeyDisplay, W as WORKFLOW_CONFIG_BASE } from '../shared/ccjk.CvIIxgUS.mjs';
|
|
7
7
|
import { SETTINGS_FILE, DEFAULT_CODE_TOOL_TYPE, CODE_TOOL_BANNERS, API_DEFAULT_URL } from './constants.mjs';
|
|
8
8
|
import { ensureI18nInitialized, i18n } from './index5.mjs';
|
|
9
9
|
import { displayBannerWithInfo, padToDisplayWidth } from './banner.mjs';
|
|
@@ -17,8 +17,8 @@ import { a as addCompletedOnboarding, s as setPrimaryApiKey, c as backupMcpConfi
|
|
|
17
17
|
import { r as resolveCodeType } from '../shared/ccjk.Cjj8SVrn.mjs';
|
|
18
18
|
import { exists } from './fs-operations.mjs';
|
|
19
19
|
import { readJsonConfig, writeJsonConfig } from './json-config.mjs';
|
|
20
|
-
import { p as promptApiConfigurationAction,
|
|
21
|
-
import { n as needsMigration, m as migrateSettingsForTokenRetrieval, d as displayMigrationResult, p as promptMigration } from '../shared/ccjk.
|
|
20
|
+
import { p as promptApiConfigurationAction, k as ensureClaudeDir, g as getExistingApiConfig, s as switchToOfficialLogin, b as backupExistingConfig, c as copyConfigFiles, f as applyAiLanguageDirective, e as configureApi } from './config.mjs';
|
|
21
|
+
import { n as needsMigration, m as migrateSettingsForTokenRetrieval, d as displayMigrationResult, p as promptMigration } from '../shared/ccjk.DwbhKZGA.mjs';
|
|
22
22
|
import { h as handleExitPromptError, a as handleGeneralError } from '../shared/ccjk.BIxuVL3_.mjs';
|
|
23
23
|
import { getInstallationStatus, installClaudeCode } from './installer.mjs';
|
|
24
24
|
import { p as parseOrchestrationLevel, w as writeOrchestrationPolicy } from './smart-defaults.mjs';
|
|
@@ -1030,7 +1030,7 @@ async function init(options = {}) {
|
|
|
1030
1030
|
const hasModelParams = options.apiModel || options.apiHaikuModel || options.apiSonnetModel || options.apiOpusModel;
|
|
1031
1031
|
if (hasModelParams && action !== "docs-only" && codeToolType === "claude-code") {
|
|
1032
1032
|
if (options.skipPrompt) {
|
|
1033
|
-
const { updateCustomModel } = await import('./config.mjs').then(function (n) { return n.
|
|
1033
|
+
const { updateCustomModel } = await import('./config.mjs').then(function (n) { return n.l; });
|
|
1034
1034
|
updateCustomModel(
|
|
1035
1035
|
options.apiModel || void 0,
|
|
1036
1036
|
options.apiHaikuModel || void 0,
|
package/dist/chunks/mcp-cli.mjs
CHANGED
|
@@ -2,7 +2,7 @@ import a from './index2.mjs';
|
|
|
2
2
|
import { g as getMcpServices } from './codex.mjs';
|
|
3
3
|
import { i18n } from './index5.mjs';
|
|
4
4
|
import { r as readMcpConfig } from './claude-config.mjs';
|
|
5
|
-
import { i as installMcpService, u as uninstallMcpService } from '../shared/ccjk.
|
|
5
|
+
import { i as installMcpService, u as uninstallMcpService } from '../shared/ccjk.BHBpQsHd.mjs';
|
|
6
6
|
import '../shared/ccjk.BAGoDD49.mjs';
|
|
7
7
|
import 'node:process';
|
|
8
8
|
import 'node:url';
|
package/dist/chunks/mcp.mjs
CHANGED
|
@@ -6,7 +6,7 @@ import { M as MCP_SERVICE_TIERS, i as isCoreService, g as getServicesByTier, c a
|
|
|
6
6
|
import { r as readMcpConfig, c as backupMcpConfig, w as writeMcpConfig } from './claude-config.mjs';
|
|
7
7
|
import { i as inquirer } from './index3.mjs';
|
|
8
8
|
import { M as MCP_SERVICE_CONFIGS } from './codex.mjs';
|
|
9
|
-
import { d as displayInstalledMcpServices, b as isMcpServiceInstalled, i as installMcpService, u as uninstallMcpService } from '../shared/ccjk.
|
|
9
|
+
import { d as displayInstalledMcpServices, b as isMcpServiceInstalled, i as installMcpService, u as uninstallMcpService } from '../shared/ccjk.BHBpQsHd.mjs';
|
|
10
10
|
import { existsSync, unlinkSync, statSync, mkdirSync, readFileSync } from 'node:fs';
|
|
11
11
|
import { homedir } from 'node:os';
|
|
12
12
|
import { writeFileAtomic } from './fs-operations.mjs';
|
|
@@ -52,10 +52,10 @@ import '../shared/ccjk.DJuyfrlL.mjs';
|
|
|
52
52
|
import '../shared/ccjk.BIxuVL3_.mjs';
|
|
53
53
|
import './config2.mjs';
|
|
54
54
|
import './init.mjs';
|
|
55
|
-
import '../shared/ccjk.
|
|
55
|
+
import '../shared/ccjk.CvIIxgUS.mjs';
|
|
56
56
|
import './auto-updater.mjs';
|
|
57
57
|
import './version-checker.mjs';
|
|
58
|
-
import '../shared/ccjk.
|
|
58
|
+
import '../shared/ccjk.DwbhKZGA.mjs';
|
|
59
59
|
import './claude-code-config-manager.mjs';
|
|
60
60
|
import './installer.mjs';
|
|
61
61
|
import '../shared/ccjk._dESH4Rk.mjs';
|
|
@@ -78,7 +78,7 @@ import './uninstall.mjs';
|
|
|
78
78
|
import '../shared/ccjk.CvChMYvB.mjs';
|
|
79
79
|
import 'globby';
|
|
80
80
|
import './update.mjs';
|
|
81
|
-
import '../shared/ccjk.
|
|
81
|
+
import '../shared/ccjk.BHBpQsHd.mjs';
|
|
82
82
|
|
|
83
83
|
function renderMenuHeader(context, _isZh) {
|
|
84
84
|
const title = context.breadcrumb.join(i18n.t("menu:menu.breadcrumb.separator"));
|
package/dist/chunks/menu.mjs
CHANGED
|
@@ -13,8 +13,8 @@ import { h as handleExitPromptError, a as handleGeneralError } from '../shared/c
|
|
|
13
13
|
import { homedir } from 'node:os';
|
|
14
14
|
import { setupCcrConfiguration, readCcrConfig, configureCcrFeature } from './config2.mjs';
|
|
15
15
|
import { a as isCcrInstalled, b as installCcr, i as init } from './init.mjs';
|
|
16
|
-
import {
|
|
17
|
-
import { c as configureOutputStyle, m as modifyApiConfigPartially, v as validateApiKey, f as formatApiKeyDisplay } from '../shared/ccjk.
|
|
16
|
+
import { f as applyAiLanguageDirective, h as getExistingModelConfig, i as getExistingCustomModelConfig, u as updateCustomModel, j as updateDefaultModel, g as getExistingApiConfig, p as promptApiConfigurationAction, e as configureApi, s as switchToOfficialLogin } from './config.mjs';
|
|
17
|
+
import { c as configureOutputStyle, m as modifyApiConfigPartially, v as validateApiKey, f as formatApiKeyDisplay } from '../shared/ccjk.CvIIxgUS.mjs';
|
|
18
18
|
import { k as isWindows } from './platform.mjs';
|
|
19
19
|
import { a as addNumbersToChoices } from '../shared/ccjk.BFQ7yr5S.mjs';
|
|
20
20
|
import { openSettingsJson, importRecommendedPermissions, importRecommendedEnv } from './simple-config.mjs';
|
|
@@ -79,7 +79,7 @@ async function runOnboardingWizard(options = {}) {
|
|
|
79
79
|
console.log(a.bold(`${isZh ? "\u6B65\u9AA4 2/3" : "Step 2/3"}: ${isZh ? "API \u914D\u7F6E" : "API Configuration"}${step2Done ? a.green(" \u2714") : ""}`));
|
|
80
80
|
if (!step2Done) {
|
|
81
81
|
try {
|
|
82
|
-
const { getExistingApiConfig } = await import('./config.mjs').then(function (n) { return n.
|
|
82
|
+
const { getExistingApiConfig } = await import('./config.mjs').then(function (n) { return n.l; });
|
|
83
83
|
const existing = getExistingApiConfig();
|
|
84
84
|
if (existing?.key || existing?.url) {
|
|
85
85
|
console.log(a.green(` \u2714 ${isZh ? "\u5DF2\u914D\u7F6E" : "Already configured"}`));
|
package/dist/chunks/package.mjs
CHANGED
|
@@ -47,13 +47,13 @@ import '../shared/ccjk.DScm_NnL.mjs';
|
|
|
47
47
|
import '../shared/ccjk.BFQ7yr5S.mjs';
|
|
48
48
|
import './prompts.mjs';
|
|
49
49
|
import '../shared/ccjk.BWFpnOr3.mjs';
|
|
50
|
-
import '../shared/ccjk.
|
|
50
|
+
import '../shared/ccjk.CvIIxgUS.mjs';
|
|
51
51
|
import './banner.mjs';
|
|
52
52
|
import './config2.mjs';
|
|
53
53
|
import './auto-updater.mjs';
|
|
54
54
|
import './version-checker.mjs';
|
|
55
55
|
import '../shared/ccjk.Cjj8SVrn.mjs';
|
|
56
|
-
import '../shared/ccjk.
|
|
56
|
+
import '../shared/ccjk.DwbhKZGA.mjs';
|
|
57
57
|
import './claude-code-config-manager.mjs';
|
|
58
58
|
import '../shared/ccjk.BIxuVL3_.mjs';
|
|
59
59
|
import './installer.mjs';
|
|
@@ -122,7 +122,7 @@ function getSlashCommands() {
|
|
|
122
122
|
descriptionZh: "\u521B\u5EFA\u914D\u7F6E\u5907\u4EFD",
|
|
123
123
|
category: "system",
|
|
124
124
|
handler: async () => {
|
|
125
|
-
const { backupExistingConfig } = await import('./config.mjs').then(function (n) { return n.
|
|
125
|
+
const { backupExistingConfig } = await import('./config.mjs').then(function (n) { return n.l; });
|
|
126
126
|
const backupPath = backupExistingConfig();
|
|
127
127
|
if (backupPath) {
|
|
128
128
|
console.log(a.green(`\u2705 Backup created: ${backupPath}`));
|
package/dist/chunks/update.mjs
CHANGED
|
@@ -8,10 +8,10 @@ import { displayBanner } from './banner.mjs';
|
|
|
8
8
|
import { readZcfConfig, updateZcfConfig } from './ccjk-config.mjs';
|
|
9
9
|
import { r as readMcpConfig } from './claude-config.mjs';
|
|
10
10
|
import { c as copyConfigFiles } from './config.mjs';
|
|
11
|
-
import { n as needsMigration, m as migrateSettingsForTokenRetrieval, d as displayMigrationResult, p as promptMigration } from '../shared/ccjk.
|
|
12
|
-
import { u as updatePromptOnly, s as selectAndInstallWorkflows } from '../shared/ccjk.
|
|
11
|
+
import { n as needsMigration, m as migrateSettingsForTokenRetrieval, d as displayMigrationResult, p as promptMigration } from '../shared/ccjk.DwbhKZGA.mjs';
|
|
12
|
+
import { u as updatePromptOnly, s as selectAndInstallWorkflows } from '../shared/ccjk.CvIIxgUS.mjs';
|
|
13
13
|
import { h as handleExitPromptError, a as handleGeneralError } from '../shared/ccjk.BIxuVL3_.mjs';
|
|
14
|
-
import { a as installMcpServices } from '../shared/ccjk.
|
|
14
|
+
import { a as installMcpServices } from '../shared/ccjk.BHBpQsHd.mjs';
|
|
15
15
|
import { resolveAiOutputLanguage } from './prompts.mjs';
|
|
16
16
|
import { g as getRuntimeVersion } from '../shared/ccjk.gDEDGD_t.mjs';
|
|
17
17
|
import { checkClaudeCodeVersionAndPrompt } from './version-checker.mjs';
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"services.spec-workflow.name": "Spec Workflow",
|
|
14
14
|
"services.serena.name": "Serena Assistant",
|
|
15
15
|
"services.serena.description": "Semantic code retrieval and editing akin to an IDE; extracts symbol-level entities and leverages relations to greatly improve token efficiency with coding agents",
|
|
16
|
-
"services.agent-browser.description": "
|
|
16
|
+
"services.agent-browser.description": "Vercel Labs browser automation for web interaction and testing",
|
|
17
17
|
"services.agent-browser.name": "Agent Browser",
|
|
18
18
|
"services.filesystem.name": "Filesystem Operations",
|
|
19
19
|
"services.filesystem.description": "Read, write, and manage files and directories on the local filesystem",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"services.spec-workflow.name": "Spec 工作流",
|
|
14
14
|
"services.serena.name": "Serena 助手",
|
|
15
15
|
"services.serena.description": "提供类似 IDE 的语义代码检索与编辑,支持符号级实体提取与关系结构利用;与现有编码代理配合可显著提升标记效率",
|
|
16
|
-
"services.agent-browser.description": "
|
|
16
|
+
"services.agent-browser.description": "Vercel Labs 浏览器自动化,用于网页交互和测试",
|
|
17
17
|
"services.agent-browser.name": "Agent Browser 浏览器自动化",
|
|
18
18
|
"services.filesystem.name": "文件系统操作",
|
|
19
19
|
"services.filesystem.description": "读取、写入和管理本地文件系统中的文件和目录",
|
package/dist/index.mjs
CHANGED
|
@@ -13,7 +13,7 @@ import { promisify } from 'node:util';
|
|
|
13
13
|
import a from './chunks/index2.mjs';
|
|
14
14
|
import { g as getRuntimeVersion } from './shared/ccjk.gDEDGD_t.mjs';
|
|
15
15
|
import { j as join$1 } from './shared/ccjk.bQ7Dh1g4.mjs';
|
|
16
|
-
export {
|
|
16
|
+
export { l as config } from './chunks/config.mjs';
|
|
17
17
|
export { a as loggerUtils } from './shared/ccjk.BJMRY2Ra.mjs';
|
|
18
18
|
export { p as platform } from './chunks/platform.mjs';
|
|
19
19
|
import { Transform } from 'node:stream';
|
|
@@ -4,6 +4,7 @@ import { h as getMcpService, i as dynamicMcpRegistry, a as readCodexConfig, j as
|
|
|
4
4
|
import { SETTINGS_FILE, CLAUDE_DIR, ClAUDE_CONFIG_FILE, CODEX_CONFIG_FILE } from '../chunks/constants.mjs';
|
|
5
5
|
import { exists, ensureDir } from '../chunks/fs-operations.mjs';
|
|
6
6
|
import { readJsonConfig, writeJsonConfig } from '../chunks/json-config.mjs';
|
|
7
|
+
import { n as normalizeAdaptiveModelSettings } from '../chunks/config.mjs';
|
|
7
8
|
import { d as deepMerge, r as readMcpConfig, b as buildMcpServerConfig, w as writeMcpConfig } from '../chunks/claude-config.mjs';
|
|
8
9
|
import { ensureI18nInitialized, i18n } from '../chunks/index5.mjs';
|
|
9
10
|
import { k as isWindows, l as getSystemRoot } from '../chunks/platform.mjs';
|
|
@@ -22,6 +23,7 @@ function readClaudeConfig(configPath = SETTINGS_FILE) {
|
|
|
22
23
|
function writeClaudeConfig(config, options = {}, configPath = SETTINGS_FILE) {
|
|
23
24
|
try {
|
|
24
25
|
ensureDir(CLAUDE_DIR);
|
|
26
|
+
normalizeAdaptiveModelSettings(config);
|
|
25
27
|
writeJsonConfig(configPath, config, {
|
|
26
28
|
atomic: options.atomic !== false,
|
|
27
29
|
pretty: true,
|
|
@@ -2,7 +2,7 @@ import a from '../chunks/index2.mjs';
|
|
|
2
2
|
import { i as inquirer } from '../chunks/index3.mjs';
|
|
3
3
|
import { CLAUDE_DIR, SETTINGS_FILE } from '../chunks/constants.mjs';
|
|
4
4
|
import { ensureI18nInitialized, i18n } from '../chunks/index5.mjs';
|
|
5
|
-
import { g as getExistingApiConfig,
|
|
5
|
+
import { g as getExistingApiConfig, e as configureApi, s as switchToOfficialLogin, b as backupExistingConfig, f as applyAiLanguageDirective } from '../chunks/config.mjs';
|
|
6
6
|
import { fileURLToPath } from 'node:url';
|
|
7
7
|
import { updateZcfConfig } from '../chunks/ccjk-config.mjs';
|
|
8
8
|
import { exists, removeFile, ensureDir, copyFile } from '../chunks/fs-operations.mjs';
|
|
@@ -2,7 +2,7 @@ import a from '../chunks/index2.mjs';
|
|
|
2
2
|
import { SETTINGS_FILE } from '../chunks/constants.mjs';
|
|
3
3
|
import { ensureI18nInitialized, i18n } from '../chunks/index5.mjs';
|
|
4
4
|
import { ClaudeCodeConfigManager } from '../chunks/claude-code-config-manager.mjs';
|
|
5
|
-
import { b as backupExistingConfig } from '../chunks/config.mjs';
|
|
5
|
+
import { n as normalizeAdaptiveModelSettings, b as backupExistingConfig } from '../chunks/config.mjs';
|
|
6
6
|
import { exists } from '../chunks/fs-operations.mjs';
|
|
7
7
|
import { readJsonConfig, writeJsonConfig } from '../chunks/json-config.mjs';
|
|
8
8
|
|
|
@@ -25,6 +25,23 @@ function migrateSettingsForTokenRetrieval() {
|
|
|
25
25
|
return result;
|
|
26
26
|
}
|
|
27
27
|
let modified = false;
|
|
28
|
+
const hadDefaultModelSentinel = settings.model === "default";
|
|
29
|
+
const hadEmptyModelEnv = Boolean(settings.env && [
|
|
30
|
+
settings.env.ANTHROPIC_MODEL,
|
|
31
|
+
settings.env.ANTHROPIC_SMALL_FAST_MODEL,
|
|
32
|
+
settings.env.ANTHROPIC_DEFAULT_HAIKU_MODEL,
|
|
33
|
+
settings.env.ANTHROPIC_DEFAULT_SONNET_MODEL,
|
|
34
|
+
settings.env.ANTHROPIC_DEFAULT_OPUS_MODEL
|
|
35
|
+
].some((value) => typeof value === "string" && value.trim() === ""));
|
|
36
|
+
normalizeAdaptiveModelSettings(settings);
|
|
37
|
+
if (hadDefaultModelSentinel) {
|
|
38
|
+
result.changes.push('Removed stale settings.model = "default" sentinel so Claude Code falls back to native auto-selection');
|
|
39
|
+
modified = true;
|
|
40
|
+
}
|
|
41
|
+
if (hadEmptyModelEnv) {
|
|
42
|
+
result.changes.push("Removed empty model environment variables left by the template/config merge path");
|
|
43
|
+
modified = true;
|
|
44
|
+
}
|
|
28
45
|
if (settings.env) {
|
|
29
46
|
if ("CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC" in settings.env) {
|
|
30
47
|
delete settings.env.CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC;
|
|
@@ -40,12 +57,9 @@ function migrateSettingsForTokenRetrieval() {
|
|
|
40
57
|
modified = true;
|
|
41
58
|
}
|
|
42
59
|
}
|
|
43
|
-
|
|
44
|
-
settings.env.
|
|
45
|
-
|
|
46
|
-
if (hasAdaptiveModelDefaults && settings.env.ANTHROPIC_MODEL) {
|
|
47
|
-
delete settings.env.ANTHROPIC_MODEL;
|
|
48
|
-
result.changes.push("Removed stale ANTHROPIC_MODEL override so Claude Code can use adaptive Haiku/Sonnet/Opus routing");
|
|
60
|
+
if (settings.env.ANTHROPIC_DEFAULT_HAIKU_MODEL && !settings.env.ANTHROPIC_SMALL_FAST_MODEL) {
|
|
61
|
+
settings.env.ANTHROPIC_SMALL_FAST_MODEL = settings.env.ANTHROPIC_DEFAULT_HAIKU_MODEL;
|
|
62
|
+
result.changes.push("Restored ANTHROPIC_SMALL_FAST_MODEL from defaultHaikuModel so Claude Code can auto-route lightweight requests again");
|
|
49
63
|
modified = true;
|
|
50
64
|
}
|
|
51
65
|
}
|
|
@@ -56,20 +70,11 @@ function migrateSettingsForTokenRetrieval() {
|
|
|
56
70
|
}
|
|
57
71
|
const profileConfig = ClaudeCodeConfigManager.readConfig();
|
|
58
72
|
if (profileConfig) {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
);
|
|
64
|
-
if (hasAdaptiveModelDefaults && profile.primaryModel) {
|
|
65
|
-
delete profile.primaryModel;
|
|
66
|
-
result.changes.push(`Removed stale primaryModel override from Claude Code profile "${profile.name || profileId}"`);
|
|
67
|
-
profileModified = true;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
if (profileModified) {
|
|
71
|
-
ClaudeCodeConfigManager.writeConfig(profileConfig);
|
|
72
|
-
modified = true;
|
|
73
|
+
const hasAdaptiveProfiles = Object.entries(profileConfig.profiles).some(
|
|
74
|
+
([_profileId, profile]) => Boolean(profile.primaryModel || profile.defaultHaikuModel || profile.defaultSonnetModel || profile.defaultOpusModel)
|
|
75
|
+
);
|
|
76
|
+
if (hasAdaptiveProfiles) {
|
|
77
|
+
result.changes.push("Preserved profile-level primaryModel values; migration now keeps primary routing and restores fast-model compatibility instead of deleting them");
|
|
73
78
|
}
|
|
74
79
|
}
|
|
75
80
|
if (!modified) {
|
|
@@ -104,12 +109,12 @@ function needsMigration() {
|
|
|
104
109
|
const hasAdaptiveModelDefaults = Boolean(
|
|
105
110
|
settings.env.ANTHROPIC_DEFAULT_HAIKU_MODEL || settings.env.ANTHROPIC_DEFAULT_SONNET_MODEL || settings.env.ANTHROPIC_DEFAULT_OPUS_MODEL
|
|
106
111
|
);
|
|
107
|
-
const
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
return Boolean(hasProblematicVar || hasExcessiveTimeout || hasPinnedAdaptiveOverride || hasProfilePinnedAdaptiveOverride);
|
|
112
|
+
const isMissingFastModelCompat = Boolean(
|
|
113
|
+
settings.env.ANTHROPIC_DEFAULT_HAIKU_MODEL && !settings.env.ANTHROPIC_SMALL_FAST_MODEL
|
|
114
|
+
);
|
|
115
|
+
const hasPinnedAdaptiveOverride = Boolean(settings.model && hasAdaptiveModelDefaults);
|
|
116
|
+
const hasProfilePinnedAdaptiveOverride = false;
|
|
117
|
+
return Boolean(hasProblematicVar || hasExcessiveTimeout || hasPinnedAdaptiveOverride || hasProfilePinnedAdaptiveOverride || isMissingFastModelCompat);
|
|
113
118
|
} catch {
|
|
114
119
|
return false;
|
|
115
120
|
}
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/claude-code-settings.json",
|
|
3
3
|
"description": "CCJK settings template — auto-migrated on upgrade",
|
|
4
|
-
"model": "default",
|
|
5
4
|
"env": {
|
|
6
|
-
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "",
|
|
7
|
-
"ANTHROPIC_DEFAULT_SONNET_MODEL": "",
|
|
8
|
-
"ANTHROPIC_DEFAULT_OPUS_MODEL": "",
|
|
9
5
|
"CCJK_CONTEXT_OPTIMIZATION": "true",
|
|
10
6
|
"CCJK_TOOL_COMPRESSION": "true"
|
|
11
7
|
},
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ccjk",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "13.3.
|
|
4
|
+
"version": "13.3.10",
|
|
5
5
|
"packageManager": "pnpm@10.17.1",
|
|
6
|
-
"description": "
|
|
6
|
+
"description": "Turn Claude Code into a production-ready AI dev environment with one-command setup, persistent memory, MCP automation, cloud sync, and zero-config browser workflows.",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "CCJK Team",
|
|
9
9
|
"email": "9248293@gmail.com"
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/claude-code-settings.json",
|
|
3
3
|
"description": "CCJK settings template — auto-migrated on upgrade",
|
|
4
|
-
"model": "default",
|
|
5
4
|
"env": {
|
|
6
|
-
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "",
|
|
7
|
-
"ANTHROPIC_DEFAULT_SONNET_MODEL": "",
|
|
8
|
-
"ANTHROPIC_DEFAULT_OPUS_MODEL": "",
|
|
9
5
|
"CCJK_CONTEXT_OPTIMIZATION": "true",
|
|
10
6
|
"CCJK_TOOL_COMPRESSION": "true"
|
|
11
7
|
},
|