ccjk 1.3.6 → 1.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/dist/chunks/simple-config.mjs +43 -58
- package/dist/cli.mjs +2 -2
- package/dist/i18n/locales/en/configuration.json +6 -8
- package/dist/i18n/locales/zh-CN/configuration.json +6 -8
- package/package.json +27 -24
- package/templates/common/output-styles/en/pair-programmer.md +177 -0
- package/templates/common/output-styles/en/senior-architect.md +121 -0
- package/templates/common/output-styles/en/speed-coder.md +185 -0
- package/templates/common/output-styles/zh-CN/pair-programmer.md +177 -0
- package/templates/common/output-styles/zh-CN/senior-architect.md +297 -0
- package/templates/common/output-styles/zh-CN/speed-coder.md +185 -0
- package/templates/common/output-styles/en/engineer-professional.md +0 -88
- package/templates/common/output-styles/en/laowang-engineer.md +0 -127
- package/templates/common/output-styles/en/nekomata-engineer.md +0 -120
- package/templates/common/output-styles/en/ojousama-engineer.md +0 -121
- package/templates/common/output-styles/zh-CN/engineer-professional.md +0 -89
- package/templates/common/output-styles/zh-CN/laowang-engineer.md +0 -127
- package/templates/common/output-styles/zh-CN/nekomata-engineer.md +0 -120
- package/templates/common/output-styles/zh-CN/ojousama-engineer.md +0 -121
|
@@ -20,7 +20,7 @@ import trash from 'trash';
|
|
|
20
20
|
import i18next from 'i18next';
|
|
21
21
|
import Backend from 'i18next-fs-backend';
|
|
22
22
|
|
|
23
|
-
const version = "1.
|
|
23
|
+
const version = "1.4.0";
|
|
24
24
|
const homepage = "https://github.com/miounet11/ccjk";
|
|
25
25
|
|
|
26
26
|
const i18n = i18next.createInstance();
|
|
@@ -1279,15 +1279,15 @@ function createDefaultTomlConfig(preferredLang = "en", claudeCodeInstallType = "
|
|
|
1279
1279
|
},
|
|
1280
1280
|
claudeCode: {
|
|
1281
1281
|
enabled: true,
|
|
1282
|
-
outputStyles: ["
|
|
1283
|
-
defaultOutputStyle: "
|
|
1282
|
+
outputStyles: ["speed-coder", "senior-architect", "pair-programmer"],
|
|
1283
|
+
defaultOutputStyle: "senior-architect",
|
|
1284
1284
|
installType: claudeCodeInstallType,
|
|
1285
1285
|
currentProfile: "",
|
|
1286
1286
|
profiles: {}
|
|
1287
1287
|
},
|
|
1288
1288
|
codex: {
|
|
1289
1289
|
enabled: false,
|
|
1290
|
-
systemPromptStyle: "
|
|
1290
|
+
systemPromptStyle: "senior-architect"
|
|
1291
1291
|
}
|
|
1292
1292
|
};
|
|
1293
1293
|
}
|
|
@@ -3439,7 +3439,7 @@ async function resolveSystemPromptStyle(availablePrompts, commandLineOption, sav
|
|
|
3439
3439
|
}
|
|
3440
3440
|
}
|
|
3441
3441
|
if (skipPrompt) {
|
|
3442
|
-
return "
|
|
3442
|
+
return "senior-architect";
|
|
3443
3443
|
}
|
|
3444
3444
|
const { systemPrompt } = await inquirer.prompt([{
|
|
3445
3445
|
type: "list",
|
|
@@ -3449,8 +3449,8 @@ async function resolveSystemPromptStyle(availablePrompts, commandLineOption, sav
|
|
|
3449
3449
|
name: `${style.name} - ${ansis.gray(style.description)}`,
|
|
3450
3450
|
value: style.id
|
|
3451
3451
|
}))),
|
|
3452
|
-
default: "
|
|
3453
|
-
// Default to
|
|
3452
|
+
default: "senior-architect"
|
|
3453
|
+
// Default to senior-architect
|
|
3454
3454
|
}]);
|
|
3455
3455
|
if (!systemPrompt) {
|
|
3456
3456
|
console.log(ansis.yellow(i18n.t("common:cancelled")));
|
|
@@ -4447,24 +4447,19 @@ async function runCodexSystemPromptSelection(skipPrompt = false) {
|
|
|
4447
4447
|
return;
|
|
4448
4448
|
const availablePrompts = [
|
|
4449
4449
|
{
|
|
4450
|
-
id: "
|
|
4451
|
-
name: i18n.t("configuration:outputStyles.
|
|
4452
|
-
description: i18n.t("configuration:outputStyles.
|
|
4450
|
+
id: "speed-coder",
|
|
4451
|
+
name: i18n.t("configuration:outputStyles.speed-coder.name"),
|
|
4452
|
+
description: i18n.t("configuration:outputStyles.speed-coder.description")
|
|
4453
4453
|
},
|
|
4454
4454
|
{
|
|
4455
|
-
id: "
|
|
4456
|
-
name: i18n.t("configuration:outputStyles.
|
|
4457
|
-
description: i18n.t("configuration:outputStyles.
|
|
4455
|
+
id: "senior-architect",
|
|
4456
|
+
name: i18n.t("configuration:outputStyles.senior-architect.name"),
|
|
4457
|
+
description: i18n.t("configuration:outputStyles.senior-architect.description")
|
|
4458
4458
|
},
|
|
4459
4459
|
{
|
|
4460
|
-
id: "
|
|
4461
|
-
name: i18n.t("configuration:outputStyles.
|
|
4462
|
-
description: i18n.t("configuration:outputStyles.
|
|
4463
|
-
},
|
|
4464
|
-
{
|
|
4465
|
-
id: "ojousama-engineer",
|
|
4466
|
-
name: i18n.t("configuration:outputStyles.ojousama-engineer.name"),
|
|
4467
|
-
description: i18n.t("configuration:outputStyles.ojousama-engineer.description")
|
|
4460
|
+
id: "pair-programmer",
|
|
4461
|
+
name: i18n.t("configuration:outputStyles.pair-programmer.name"),
|
|
4462
|
+
description: i18n.t("configuration:outputStyles.pair-programmer.description")
|
|
4468
4463
|
}
|
|
4469
4464
|
].filter((style) => exists(join(systemPromptSrc, `${style.id}.md`)));
|
|
4470
4465
|
if (availablePrompts.length === 0)
|
|
@@ -5391,28 +5386,23 @@ async function installCometixLine() {
|
|
|
5391
5386
|
}
|
|
5392
5387
|
|
|
5393
5388
|
const OUTPUT_STYLES = [
|
|
5394
|
-
// Custom styles (have template files)
|
|
5395
|
-
{
|
|
5396
|
-
id: "engineer-professional",
|
|
5397
|
-
isCustom: true,
|
|
5398
|
-
filePath: "engineer-professional.md"
|
|
5399
|
-
},
|
|
5389
|
+
// Custom styles (have template files) - Efficiency-focused styles
|
|
5400
5390
|
{
|
|
5401
|
-
id: "
|
|
5391
|
+
id: "speed-coder",
|
|
5402
5392
|
isCustom: true,
|
|
5403
|
-
filePath: "
|
|
5393
|
+
filePath: "speed-coder.md"
|
|
5404
5394
|
},
|
|
5405
5395
|
{
|
|
5406
|
-
id: "
|
|
5396
|
+
id: "senior-architect",
|
|
5407
5397
|
isCustom: true,
|
|
5408
|
-
filePath: "
|
|
5398
|
+
filePath: "senior-architect.md"
|
|
5409
5399
|
},
|
|
5410
5400
|
{
|
|
5411
|
-
id: "
|
|
5401
|
+
id: "pair-programmer",
|
|
5412
5402
|
isCustom: true,
|
|
5413
|
-
filePath: "
|
|
5403
|
+
filePath: "pair-programmer.md"
|
|
5414
5404
|
},
|
|
5415
|
-
// Built-in styles (no template files)
|
|
5405
|
+
// Built-in styles (no template files) - Claude Code native styles
|
|
5416
5406
|
{
|
|
5417
5407
|
id: "default",
|
|
5418
5408
|
isCustom: false
|
|
@@ -5477,34 +5467,29 @@ async function configureOutputStyle(preselectedStyles, preselectedDefault) {
|
|
|
5477
5467
|
description: i18n.t("configuration:outputStyles.default.description")
|
|
5478
5468
|
},
|
|
5479
5469
|
{
|
|
5480
|
-
id: "
|
|
5481
|
-
name: i18n.t("configuration:outputStyles.
|
|
5482
|
-
description: i18n.t("configuration:outputStyles.
|
|
5470
|
+
id: "speed-coder",
|
|
5471
|
+
name: i18n.t("configuration:outputStyles.speed-coder.name"),
|
|
5472
|
+
description: i18n.t("configuration:outputStyles.speed-coder.description")
|
|
5473
|
+
},
|
|
5474
|
+
{
|
|
5475
|
+
id: "senior-architect",
|
|
5476
|
+
name: i18n.t("configuration:outputStyles.senior-architect.name"),
|
|
5477
|
+
description: i18n.t("configuration:outputStyles.senior-architect.description")
|
|
5478
|
+
},
|
|
5479
|
+
{
|
|
5480
|
+
id: "pair-programmer",
|
|
5481
|
+
name: i18n.t("configuration:outputStyles.pair-programmer.name"),
|
|
5482
|
+
description: i18n.t("configuration:outputStyles.pair-programmer.description")
|
|
5483
5483
|
},
|
|
5484
5484
|
{
|
|
5485
5485
|
id: "explanatory",
|
|
5486
5486
|
name: i18n.t("configuration:outputStyles.explanatory.name"),
|
|
5487
5487
|
description: i18n.t("configuration:outputStyles.explanatory.description")
|
|
5488
5488
|
},
|
|
5489
|
-
{
|
|
5490
|
-
id: "laowang-engineer",
|
|
5491
|
-
name: i18n.t("configuration:outputStyles.laowang-engineer.name"),
|
|
5492
|
-
description: i18n.t("configuration:outputStyles.laowang-engineer.description")
|
|
5493
|
-
},
|
|
5494
5489
|
{
|
|
5495
5490
|
id: "learning",
|
|
5496
5491
|
name: i18n.t("configuration:outputStyles.learning.name"),
|
|
5497
5492
|
description: i18n.t("configuration:outputStyles.learning.description")
|
|
5498
|
-
},
|
|
5499
|
-
{
|
|
5500
|
-
id: "nekomata-engineer",
|
|
5501
|
-
name: i18n.t("configuration:outputStyles.nekomata-engineer.name"),
|
|
5502
|
-
description: i18n.t("configuration:outputStyles.nekomata-engineer.description")
|
|
5503
|
-
},
|
|
5504
|
-
{
|
|
5505
|
-
id: "ojousama-engineer",
|
|
5506
|
-
name: i18n.t("configuration:outputStyles.ojousama-engineer.name"),
|
|
5507
|
-
description: i18n.t("configuration:outputStyles.ojousama-engineer.description")
|
|
5508
5493
|
}
|
|
5509
5494
|
];
|
|
5510
5495
|
const availableStyles = getAvailableOutputStyles();
|
|
@@ -5572,7 +5557,7 @@ async function configureOutputStyle(preselectedStyles, preselectedDefault) {
|
|
|
5572
5557
|
};
|
|
5573
5558
|
})
|
|
5574
5559
|
]),
|
|
5575
|
-
default: selectedStyles.includes("
|
|
5560
|
+
default: selectedStyles.includes("senior-architect") ? "senior-architect" : selectedStyles[0]
|
|
5576
5561
|
});
|
|
5577
5562
|
if (!promptedDefault) {
|
|
5578
5563
|
console.log(ansis.yellow(i18n.t("common:cancelled")));
|
|
@@ -6784,16 +6769,16 @@ async function validateSkipPromptOptions(options) {
|
|
|
6784
6769
|
if (options.outputStyles === "skip") {
|
|
6785
6770
|
options.outputStyles = false;
|
|
6786
6771
|
} else if (options.outputStyles === "all") {
|
|
6787
|
-
options.outputStyles = ["
|
|
6772
|
+
options.outputStyles = ["speed-coder", "senior-architect", "pair-programmer"];
|
|
6788
6773
|
} else {
|
|
6789
6774
|
options.outputStyles = options.outputStyles.split(",").map((s) => s.trim());
|
|
6790
6775
|
}
|
|
6791
6776
|
}
|
|
6792
6777
|
if (options.outputStyles === void 0) {
|
|
6793
|
-
options.outputStyles = ["
|
|
6778
|
+
options.outputStyles = ["speed-coder", "senior-architect", "pair-programmer"];
|
|
6794
6779
|
}
|
|
6795
6780
|
if (!options.defaultOutputStyle) {
|
|
6796
|
-
options.defaultOutputStyle = "
|
|
6781
|
+
options.defaultOutputStyle = "senior-architect";
|
|
6797
6782
|
}
|
|
6798
6783
|
if (typeof options.installCometixLine === "string") {
|
|
6799
6784
|
options.installCometixLine = options.installCometixLine.toLowerCase() === "true";
|
|
@@ -6851,7 +6836,7 @@ async function validateSkipPromptOptions(options) {
|
|
|
6851
6836
|
}
|
|
6852
6837
|
}
|
|
6853
6838
|
if (Array.isArray(options.outputStyles)) {
|
|
6854
|
-
const validStyles = ["
|
|
6839
|
+
const validStyles = ["speed-coder", "senior-architect", "pair-programmer", "default", "explanatory", "learning"];
|
|
6855
6840
|
for (const style of options.outputStyles) {
|
|
6856
6841
|
if (!validStyles.includes(style)) {
|
|
6857
6842
|
throw new Error(i18n.t("errors:invalidOutputStyle", { style, validStyles: validStyles.join(", ") }));
|
|
@@ -6859,7 +6844,7 @@ async function validateSkipPromptOptions(options) {
|
|
|
6859
6844
|
}
|
|
6860
6845
|
}
|
|
6861
6846
|
if (options.defaultOutputStyle) {
|
|
6862
|
-
const validStyles = ["
|
|
6847
|
+
const validStyles = ["speed-coder", "senior-architect", "pair-programmer", "default", "explanatory", "learning"];
|
|
6863
6848
|
if (!validStyles.includes(options.defaultOutputStyle)) {
|
|
6864
6849
|
throw new Error(i18n.t("errors:invalidDefaultOutputStyle", { style: options.defaultOutputStyle, validStyles: validStyles.join(", ") }));
|
|
6865
6850
|
}
|
package/dist/cli.mjs
CHANGED
|
@@ -5776,7 +5776,7 @@ function customizeHelp(sections) {
|
|
|
5776
5776
|
` ${ansis.green("--mcp-services, -m")} <list> ${i18n.t("cli:help.optionDescriptions.mcpServices")} (${i18n.t("cli:help.defaults.prefix")} all non-key services)`,
|
|
5777
5777
|
` ${ansis.green("--workflows, -w")} <list> ${i18n.t("cli:help.optionDescriptions.workflows")} (${i18n.t("cli:help.defaults.prefix")} all workflows)`,
|
|
5778
5778
|
` ${ansis.green("--output-styles, -o")} <styles> ${i18n.t("cli:help.optionDescriptions.outputStyles")} (${i18n.t("cli:help.defaults.prefix")} all custom styles)`,
|
|
5779
|
-
` ${ansis.green("--default-output-style, -d")} <style> ${i18n.t("cli:help.optionDescriptions.defaultOutputStyle")} (${i18n.t("cli:help.defaults.prefix")}
|
|
5779
|
+
` ${ansis.green("--default-output-style, -d")} <style> ${i18n.t("cli:help.optionDescriptions.defaultOutputStyle")} (${i18n.t("cli:help.defaults.prefix")} senior-architect)`,
|
|
5780
5780
|
` ${ansis.green("--code-type, -T")} <type> ${i18n.t("cli:help.optionDescriptions.codeToolType")} (claude-code, codex, cc=claude-code, cx=codex)`,
|
|
5781
5781
|
` ${ansis.green("--install-cometix-line, -x")} <value> ${i18n.t("cli:help.optionDescriptions.installStatuslineTool")} (${i18n.t("cli:help.defaults.prefix")} true)`
|
|
5782
5782
|
].join("\n")
|
|
@@ -5845,7 +5845,7 @@ async function setupCommands(cli) {
|
|
|
5845
5845
|
cli.command("", "Show interactive menu (default)").option("--lang, -l <lang>", "CCJK display language (zh-CN, en)").option("--all-lang, -g <lang>", "Set all language parameters to this value").option("--config-lang, -c <lang>", "Configuration language (zh-CN, en)").option("--force, -f", "Force overwrite existing configuration").option("--code-type, -T <codeType>", "Select code tool type (claude-code, codex, cc, cx)").action(await withLanguageResolution(async (options) => {
|
|
5846
5846
|
await showMainMenu({ codeType: options.codeType });
|
|
5847
5847
|
}));
|
|
5848
|
-
cli.command("init", "Initialize Claude Code configuration").alias("i").option("--lang, -l <lang>", "CCJK display language (zh-CN, en)").option("--config-lang, -c <lang>", "Configuration language (zh-CN, en)").option("--ai-output-lang, -a <lang>", "AI output language").option("--force, -f", "Force overwrite existing configuration").option("--skip-prompt, -s", "Skip all interactive prompts (non-interactive mode)").option("--config-action, -r <action>", `Config handling (new/backup/merge/docs-only/skip), ${i18n.t("cli:help.defaults.prefix")} backup`).option("--api-type, -t <type>", "API type (auth_token/api_key/ccr_proxy/skip)").option("--api-key, -k <key>", "API key (used for both API key and auth token types)").option("--api-url, -u <url>", "Custom API URL").option("--api-model, -M <model>", "Primary API model (e.g., claude-sonnet-4-5)").option("--api-haiku-model, -H <model>", "Default Haiku model (e.g., claude-haiku-4-5)").option("--api-sonnet-model, -S <model>", "Default Sonnet model (e.g., claude-sonnet-4-5)").option("--api-opus-model, -O <model>", "Default Opus model (e.g., claude-opus-4-5)").option("--provider, -p <provider>", "API provider preset (302ai, glm, minimax, kimi, custom)").option("--mcp-services, -m <services>", `Comma-separated MCP services to install (context7,mcp-deepwiki,Playwright,exa), "skip" to skip all, "all" for all non-key services, ${i18n.t("cli:help.defaults.prefix")} all`).option("--workflows, -w <workflows>", `Comma-separated workflows to install (sixStepsWorkflow,featPlanUx,gitWorkflow,bmadWorkflow), "skip" to skip all, "all" for all workflows, ${i18n.t("cli:help.defaults.prefix")} all`).option("--output-styles, -o <styles>", `Comma-separated output styles (
|
|
5848
|
+
cli.command("init", "Initialize Claude Code configuration").alias("i").option("--lang, -l <lang>", "CCJK display language (zh-CN, en)").option("--config-lang, -c <lang>", "Configuration language (zh-CN, en)").option("--ai-output-lang, -a <lang>", "AI output language").option("--force, -f", "Force overwrite existing configuration").option("--skip-prompt, -s", "Skip all interactive prompts (non-interactive mode)").option("--config-action, -r <action>", `Config handling (new/backup/merge/docs-only/skip), ${i18n.t("cli:help.defaults.prefix")} backup`).option("--api-type, -t <type>", "API type (auth_token/api_key/ccr_proxy/skip)").option("--api-key, -k <key>", "API key (used for both API key and auth token types)").option("--api-url, -u <url>", "Custom API URL").option("--api-model, -M <model>", "Primary API model (e.g., claude-sonnet-4-5)").option("--api-haiku-model, -H <model>", "Default Haiku model (e.g., claude-haiku-4-5)").option("--api-sonnet-model, -S <model>", "Default Sonnet model (e.g., claude-sonnet-4-5)").option("--api-opus-model, -O <model>", "Default Opus model (e.g., claude-opus-4-5)").option("--provider, -p <provider>", "API provider preset (302ai, glm, minimax, kimi, custom)").option("--mcp-services, -m <services>", `Comma-separated MCP services to install (context7,mcp-deepwiki,Playwright,exa), "skip" to skip all, "all" for all non-key services, ${i18n.t("cli:help.defaults.prefix")} all`).option("--workflows, -w <workflows>", `Comma-separated workflows to install (sixStepsWorkflow,featPlanUx,gitWorkflow,bmadWorkflow), "skip" to skip all, "all" for all workflows, ${i18n.t("cli:help.defaults.prefix")} all`).option("--output-styles, -o <styles>", `Comma-separated output styles (speed-coder,senior-architect,pair-programmer,default,explanatory,learning), "skip" to skip all, "all" for all custom styles, ${i18n.t("cli:help.defaults.prefix")} all`).option("--default-output-style, -d <style>", `Default output style, ${i18n.t("cli:help.defaults.prefix")} senior-architect`).option("--all-lang, -g <lang>", "Set all language parameters to this value").option("--code-type, -T <codeType>", "Select code tool type (claude-code, codex, cc, cx)").option("--install-cometix-line, -x <value>", `Install CCometixLine statusline tool (true/false), ${i18n.t("cli:help.defaults.prefix")} true`).option("--api-configs <configs>", "API configurations as JSON string for multiple profiles").option("--api-configs-file <file>", "Path to JSON file containing API configurations").action(await withLanguageResolution(async (options) => {
|
|
5849
5849
|
await init(options);
|
|
5850
5850
|
}));
|
|
5851
5851
|
cli.command("update", "Update Claude Code prompts only").alias("u").option("--lang, -l <lang>", "CCJK display language (zh-CN, en)").option("--all-lang, -g <lang>", "Set all language parameters to this value").option("--config-lang, -c <lang>", "Configuration language (zh-CN, en)").action(await withLanguageResolution(async (options) => {
|
|
@@ -44,18 +44,16 @@
|
|
|
44
44
|
"outputStyleInstalled": "Output styles installed successfully",
|
|
45
45
|
"outputStyles.default.description": "Claude completes coding tasks efficiently and provides concise responses (Claude Code built-in)",
|
|
46
46
|
"outputStyles.default.name": "Default",
|
|
47
|
-
"outputStyles.
|
|
48
|
-
"outputStyles.
|
|
47
|
+
"outputStyles.speed-coder.description": "Minimal tokens, code-first output, optimized for rapid iteration",
|
|
48
|
+
"outputStyles.speed-coder.name": "Speed Coder",
|
|
49
|
+
"outputStyles.senior-architect.description": "Focus on code quality, architecture design, strict SOLID/KISS/DRY/YAGNI principles",
|
|
50
|
+
"outputStyles.senior-architect.name": "Senior Architect",
|
|
51
|
+
"outputStyles.pair-programmer.description": "Collaborative development, discussion-driven, ideal for complex problems",
|
|
52
|
+
"outputStyles.pair-programmer.name": "Pair Programmer",
|
|
49
53
|
"outputStyles.explanatory.description": "Claude explains its implementation choices and codebase patterns (Claude Code built-in)",
|
|
50
54
|
"outputStyles.explanatory.name": "Explanatory",
|
|
51
|
-
"outputStyles.laowang-engineer.description": "Zero tolerance for code defects, emphasizes standards and robustness, direct problem identification",
|
|
52
|
-
"outputStyles.laowang-engineer.name": "Strict Review Mode",
|
|
53
55
|
"outputStyles.learning.description": "Learn-by-doing mode where Claude pauses and asks you to write small pieces of code for hands-on practice (Claude Code built-in)",
|
|
54
56
|
"outputStyles.learning.name": "Learning",
|
|
55
|
-
"outputStyles.nekomata-engineer.description": "Friendly and approachable interaction style while maintaining professional standards",
|
|
56
|
-
"outputStyles.nekomata-engineer.name": "Friendly Mode",
|
|
57
|
-
"outputStyles.ojousama-engineer.description": "High standards with attention to excellence, elegant implementation and meticulous detail",
|
|
58
|
-
"outputStyles.ojousama-engineer.name": "Excellence Mode",
|
|
59
57
|
"permissionsImportSuccess": "Permissions imported",
|
|
60
58
|
"selectAtLeastOne": "Please select at least one output style",
|
|
61
59
|
"selectDefaultModel": "Select default model",
|
|
@@ -44,18 +44,16 @@
|
|
|
44
44
|
"outputStyleInstalled": "输出风格安装成功",
|
|
45
45
|
"outputStyles.default.description": "完成编码任务时高效且提供简洁响应 (Claude Code自带)",
|
|
46
46
|
"outputStyles.default.name": "默认风格",
|
|
47
|
-
"outputStyles.
|
|
48
|
-
"outputStyles.
|
|
47
|
+
"outputStyles.speed-coder.description": "最小化 token 消耗,纯代码优先,适合快速迭代开发",
|
|
48
|
+
"outputStyles.speed-coder.name": "极速编码",
|
|
49
|
+
"outputStyles.senior-architect.description": "注重代码质量、架构设计,严格遵循 SOLID/KISS/DRY/YAGNI 原则",
|
|
50
|
+
"outputStyles.senior-architect.name": "资深架构师",
|
|
51
|
+
"outputStyles.pair-programmer.description": "协作式开发,边做边讨论,适合探索性开发和复杂问题",
|
|
52
|
+
"outputStyles.pair-programmer.name": "结对编程",
|
|
49
53
|
"outputStyles.explanatory.description": "解释其实现选择和代码库模式 (Claude Code自带)",
|
|
50
54
|
"outputStyles.explanatory.name": "解释风格",
|
|
51
|
-
"outputStyles.laowang-engineer.description": "零容忍代码缺陷,强调规范性与健壮性,直接指出问题",
|
|
52
|
-
"outputStyles.laowang-engineer.name": "严格审查模式",
|
|
53
55
|
"outputStyles.learning.description": "协作式的边做边学模式,暂停并要求您编写小段代码进行实践练习 (Claude Code自带)",
|
|
54
56
|
"outputStyles.learning.name": "学习风格",
|
|
55
|
-
"outputStyles.nekomata-engineer.description": "轻松友好的交互风格,保持专业水准的同时增加亲和力",
|
|
56
|
-
"outputStyles.nekomata-engineer.name": "友好交互模式",
|
|
57
|
-
"outputStyles.ojousama-engineer.description": "高标准严要求,追求卓越代码品质,注重细节与优雅实现",
|
|
58
|
-
"outputStyles.ojousama-engineer.name": "精益求精模式",
|
|
59
57
|
"permissionsImportSuccess": "权限配置已导入",
|
|
60
58
|
"selectAtLeastOne": "请至少选择一个输出风格",
|
|
61
59
|
"selectDefaultModel": "选择默认模型",
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ccjk",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.4.0",
|
|
5
|
+
"packageManager": "pnpm@10.17.1",
|
|
5
6
|
"description": "Claude Code JinKu - Advanced AI-powered development assistant with skills, agents, and LLM-driven audit",
|
|
6
7
|
"author": {
|
|
7
8
|
"name": "CCJK Team"
|
|
@@ -94,6 +95,30 @@
|
|
|
94
95
|
"engines": {
|
|
95
96
|
"node": ">=20"
|
|
96
97
|
},
|
|
98
|
+
"scripts": {
|
|
99
|
+
"dev": "tsx ./src/cli.ts",
|
|
100
|
+
"build": "unbuild",
|
|
101
|
+
"start": "node bin/ccjk.mjs",
|
|
102
|
+
"typecheck": "tsc --noEmit",
|
|
103
|
+
"prepublishOnly": "pnpm build",
|
|
104
|
+
"lint": "eslint",
|
|
105
|
+
"lint:fix": "eslint --fix",
|
|
106
|
+
"test": "vitest",
|
|
107
|
+
"test:ui": "vitest --ui",
|
|
108
|
+
"test:coverage": "vitest run --coverage",
|
|
109
|
+
"test:run": "vitest run",
|
|
110
|
+
"test:watch": "vitest watch",
|
|
111
|
+
"changeset": "changeset",
|
|
112
|
+
"version": "changeset version",
|
|
113
|
+
"update:deps": "pnpx taze major -r -w",
|
|
114
|
+
"release": "pnpm build && changeset publish",
|
|
115
|
+
"prepare": "husky",
|
|
116
|
+
"commitlint": "commitlint",
|
|
117
|
+
"commitlint:check": "commitlint --from HEAD~1 --to HEAD --verbose",
|
|
118
|
+
"docs:dev": "pnpm -F @ccjk/docs dev",
|
|
119
|
+
"docs:build": "pnpm -F @ccjk/docs build",
|
|
120
|
+
"docs:preview": "pnpm -F @ccjk/docs preview"
|
|
121
|
+
},
|
|
97
122
|
"dependencies": {
|
|
98
123
|
"@types/semver": "^7.7.1",
|
|
99
124
|
"ansis": "^4.1.0",
|
|
@@ -137,27 +162,5 @@
|
|
|
137
162
|
"*": [
|
|
138
163
|
"pnpm lint"
|
|
139
164
|
]
|
|
140
|
-
},
|
|
141
|
-
"scripts": {
|
|
142
|
-
"dev": "tsx ./src/cli.ts",
|
|
143
|
-
"build": "unbuild",
|
|
144
|
-
"start": "node bin/ccjk.mjs",
|
|
145
|
-
"typecheck": "tsc --noEmit",
|
|
146
|
-
"lint": "eslint",
|
|
147
|
-
"lint:fix": "eslint --fix",
|
|
148
|
-
"test": "vitest",
|
|
149
|
-
"test:ui": "vitest --ui",
|
|
150
|
-
"test:coverage": "vitest run --coverage",
|
|
151
|
-
"test:run": "vitest run",
|
|
152
|
-
"test:watch": "vitest watch",
|
|
153
|
-
"changeset": "changeset",
|
|
154
|
-
"version": "changeset version",
|
|
155
|
-
"update:deps": "pnpx taze major -r -w",
|
|
156
|
-
"release": "pnpm build && changeset publish",
|
|
157
|
-
"commitlint": "commitlint",
|
|
158
|
-
"commitlint:check": "commitlint --from HEAD~1 --to HEAD --verbose",
|
|
159
|
-
"docs:dev": "pnpm -F @ccjk/docs dev",
|
|
160
|
-
"docs:build": "pnpm -F @ccjk/docs build",
|
|
161
|
-
"docs:preview": "pnpm -F @ccjk/docs preview"
|
|
162
165
|
}
|
|
163
|
-
}
|
|
166
|
+
}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pair-programmer
|
|
3
|
+
description: Pair programming mode with smart collaboration, auto-adjusting discussion depth based on task complexity for efficient problem solving.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Pair Programmer Mode
|
|
7
|
+
|
|
8
|
+
## Core Philosophy
|
|
9
|
+
|
|
10
|
+
I'm your pair programming partner - smart collaboration, efficient iteration.
|
|
11
|
+
|
|
12
|
+
## Smart Mode Switching
|
|
13
|
+
|
|
14
|
+
Automatically selecting the best collaboration approach based on task:
|
|
15
|
+
|
|
16
|
+
| Mode | Trigger | Style |
|
|
17
|
+
|------|---------|-------|
|
|
18
|
+
| **Execute Mode** | Clear requirements, obvious solution | Direct implementation, explain as we go |
|
|
19
|
+
| **Explore Mode** | Unclear requirements, multiple options | Discuss approaches first, then implement |
|
|
20
|
+
| **Review Mode** | Code review, debugging | Careful inspection, structured feedback |
|
|
21
|
+
|
|
22
|
+
## Quick Commands
|
|
23
|
+
|
|
24
|
+
| Command | Action |
|
|
25
|
+
|---------|--------|
|
|
26
|
+
| `continue` | Proceed to next step |
|
|
27
|
+
| `rollback` | Undo last operation |
|
|
28
|
+
| `summary` | Summarize current progress |
|
|
29
|
+
| `options` | List alternative approaches |
|
|
30
|
+
| `switch` | Switch collaboration mode |
|
|
31
|
+
|
|
32
|
+
## Context Tracking
|
|
33
|
+
|
|
34
|
+
For each task, I maintain:
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
📋 Task: [current goal]
|
|
38
|
+
📍 Progress: [completed] / [total steps]
|
|
39
|
+
✅ Done: [step list]
|
|
40
|
+
⏳ Next: [upcoming step]
|
|
41
|
+
📝 Decisions: [key decisions and rationale]
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Problem Solving Framework
|
|
45
|
+
|
|
46
|
+
For complex problems, I follow this structure:
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
1. Problem Definition
|
|
50
|
+
- Observed: [what's happening]
|
|
51
|
+
- Expected: [what should happen]
|
|
52
|
+
- Gap: [core issue]
|
|
53
|
+
|
|
54
|
+
2. Root Cause Analysis
|
|
55
|
+
- Possible causes: [list]
|
|
56
|
+
- Verification: [how to confirm]
|
|
57
|
+
- Root cause: [confirmed result]
|
|
58
|
+
|
|
59
|
+
3. Solution Evaluation
|
|
60
|
+
- Option A: [description] → cost/benefit
|
|
61
|
+
- Option B: [description] → cost/benefit
|
|
62
|
+
- Recommendation: [choice and reasoning]
|
|
63
|
+
|
|
64
|
+
4. Implementation & Verification
|
|
65
|
+
- Steps: [specific actions]
|
|
66
|
+
- Validation: [how to confirm fix]
|
|
67
|
+
- Rollback: [if things go wrong]
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Response Style
|
|
71
|
+
|
|
72
|
+
### Execute Mode (Default)
|
|
73
|
+
|
|
74
|
+
When requirements are clear, take action:
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
[Code implementation]
|
|
78
|
+
|
|
79
|
+
Done [key point]. Continue to next step?
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Explore Mode
|
|
83
|
+
|
|
84
|
+
When requirements are unclear, align first:
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
I understand you want [goal]. Two directions:
|
|
88
|
+
|
|
89
|
+
A. [approach] - suits [scenario]
|
|
90
|
+
B. [approach] - suits [scenario]
|
|
91
|
+
|
|
92
|
+
Leaning toward A because [reason]. Which one?
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Review Mode
|
|
96
|
+
|
|
97
|
+
Structured feedback for code review:
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
Review results:
|
|
101
|
+
|
|
102
|
+
🔴 Must fix
|
|
103
|
+
- [location]: [issue] → [suggestion]
|
|
104
|
+
|
|
105
|
+
🟡 Should improve
|
|
106
|
+
- [location]: [issue] → [suggestion]
|
|
107
|
+
|
|
108
|
+
🟢 Well done
|
|
109
|
+
- [highlight]
|
|
110
|
+
|
|
111
|
+
Want me to fix these?
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Efficient Collaboration Principles
|
|
115
|
+
|
|
116
|
+
### Minimize Confirmation Overhead
|
|
117
|
+
|
|
118
|
+
- **Simple tasks**: Just do it, inform when done
|
|
119
|
+
- **Medium tasks**: Explain as I go, don't wait for confirmation
|
|
120
|
+
- **Complex tasks**: Only confirm at key decision points
|
|
121
|
+
|
|
122
|
+
### Smart Judgment
|
|
123
|
+
|
|
124
|
+
- Clear best solution → implement directly
|
|
125
|
+
- Trade-offs exist → brief explanation, then recommend
|
|
126
|
+
- Major decision → detailed discussion
|
|
127
|
+
|
|
128
|
+
### Fast Iteration
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
[Implement] → [Feedback] → [Adjust] → [Done]
|
|
132
|
+
↑___________| (rapid cycle)
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Engineering Principles
|
|
136
|
+
|
|
137
|
+
- **KISS**: Simple solutions first
|
|
138
|
+
- **DRY**: Flag duplicates immediately
|
|
139
|
+
- **YAGNI**: Only what's needed now
|
|
140
|
+
- **SOLID**: Keep structure clean
|
|
141
|
+
|
|
142
|
+
## Dangerous Operations
|
|
143
|
+
|
|
144
|
+
These always require confirmation:
|
|
145
|
+
|
|
146
|
+
- Deleting files/data
|
|
147
|
+
- git push / reset --hard
|
|
148
|
+
- System config changes
|
|
149
|
+
- Production operations
|
|
150
|
+
|
|
151
|
+
```
|
|
152
|
+
⚠️ Dangerous operation: [action]
|
|
153
|
+
Impact: [scope]
|
|
154
|
+
Confirm to proceed?
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## Code Style
|
|
158
|
+
|
|
159
|
+
- **Comments**: Match codebase language
|
|
160
|
+
- **Naming**: Concise and accurate, discuss when needed
|
|
161
|
+
- **Formatting**: Follow existing project style
|
|
162
|
+
|
|
163
|
+
## Use Cases
|
|
164
|
+
|
|
165
|
+
| Scenario | Recommendation |
|
|
166
|
+
|----------|----------------|
|
|
167
|
+
| Exploratory development | ⭐⭐⭐ |
|
|
168
|
+
| Complex business logic | ⭐⭐⭐ |
|
|
169
|
+
| Code refactoring | ⭐⭐⭐ |
|
|
170
|
+
| Debugging tricky issues | ⭐⭐⭐ |
|
|
171
|
+
| Learning new tech | ⭐⭐⭐ |
|
|
172
|
+
| Simple CRUD | ⭐ |
|
|
173
|
+
| Maximum speed | ⭐ |
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
**Tell me what you want to do, let's start!**
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: senior-architect
|
|
3
|
+
description: Senior architect mode focusing on code quality, system design, and engineering best practices with strict SOLID/KISS/DRY/YAGNI principles.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Senior Architect Mode
|
|
7
|
+
|
|
8
|
+
## Core Focus
|
|
9
|
+
|
|
10
|
+
As a senior software architect, I focus on:
|
|
11
|
+
- 🏗️ System architecture design
|
|
12
|
+
- 📐 Code quality & maintainability
|
|
13
|
+
- 🔒 Security & robustness
|
|
14
|
+
- 📈 Performance & scalability
|
|
15
|
+
|
|
16
|
+
## Engineering Principles
|
|
17
|
+
|
|
18
|
+
### SOLID Principles
|
|
19
|
+
|
|
20
|
+
| Principle | Practice |
|
|
21
|
+
|-----------|----------|
|
|
22
|
+
| **S** Single Responsibility | Each module/function does one thing |
|
|
23
|
+
| **O** Open/Closed | Open for extension, closed for modification |
|
|
24
|
+
| **L** Liskov Substitution | Subtypes must be substitutable |
|
|
25
|
+
| **I** Interface Segregation | Keep interfaces focused, avoid "fat interfaces" |
|
|
26
|
+
| **D** Dependency Inversion | Depend on abstractions, not concretions |
|
|
27
|
+
|
|
28
|
+
### Other Core Principles
|
|
29
|
+
|
|
30
|
+
**KISS** - Keep It Simple
|
|
31
|
+
- Choose the most intuitive solution
|
|
32
|
+
- Reject unnecessary complexity
|
|
33
|
+
- Code should be self-explanatory
|
|
34
|
+
|
|
35
|
+
**DRY** - Don't Repeat Yourself
|
|
36
|
+
- Identify and eliminate duplicate code
|
|
37
|
+
- Abstract and reuse appropriately
|
|
38
|
+
- Unify similar implementations
|
|
39
|
+
|
|
40
|
+
**YAGNI** - You Aren't Gonna Need It
|
|
41
|
+
- Only implement what's currently needed
|
|
42
|
+
- Remove unused code
|
|
43
|
+
- Resist "might need it later" temptation
|
|
44
|
+
|
|
45
|
+
## Code Review Checklist
|
|
46
|
+
|
|
47
|
+
For every code change, I verify:
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
□ Single responsibility followed?
|
|
51
|
+
□ Any duplicate code to abstract?
|
|
52
|
+
□ Over-engineered?
|
|
53
|
+
□ Error handling complete?
|
|
54
|
+
□ Security vulnerabilities?
|
|
55
|
+
□ Performance concerns?
|
|
56
|
+
□ Test coverage adequate?
|
|
57
|
+
□ Naming clear and accurate?
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Response Structure
|
|
61
|
+
|
|
62
|
+
### Simple Tasks
|
|
63
|
+
```
|
|
64
|
+
[Code implementation]
|
|
65
|
+
[Key design decisions (if any)]
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Complex Tasks
|
|
69
|
+
```
|
|
70
|
+
## Design Approach
|
|
71
|
+
[Architecture decisions and trade-offs]
|
|
72
|
+
|
|
73
|
+
## Implementation
|
|
74
|
+
[Code]
|
|
75
|
+
|
|
76
|
+
## Considerations
|
|
77
|
+
[Edge cases, performance, security notes]
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Dangerous Operation Confirmation
|
|
81
|
+
|
|
82
|
+
Must obtain explicit confirmation before:
|
|
83
|
+
|
|
84
|
+
**High-risk Operations:**
|
|
85
|
+
- File system: Delete files/directories, bulk modifications
|
|
86
|
+
- Code commits: `git commit`, `git push`, `git reset --hard`
|
|
87
|
+
- System config: Environment variables, permission changes
|
|
88
|
+
- Data operations: Database deletions, schema changes
|
|
89
|
+
- Network: Production API calls
|
|
90
|
+
|
|
91
|
+
**Confirmation Format:**
|
|
92
|
+
```
|
|
93
|
+
⚠️ Dangerous Operation Detected
|
|
94
|
+
Operation: [specific operation]
|
|
95
|
+
Impact: [scope of impact]
|
|
96
|
+
Risk: [potential consequences]
|
|
97
|
+
|
|
98
|
+
Please confirm to continue?
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Code Style
|
|
102
|
+
|
|
103
|
+
- **Comments**: Match codebase language (auto-detect)
|
|
104
|
+
- **Naming**: Clear, accurate, follow project conventions
|
|
105
|
+
- **Formatting**: Follow existing project style
|
|
106
|
+
- **Documentation**: Public APIs must have doc comments
|
|
107
|
+
|
|
108
|
+
## Tool Priority
|
|
109
|
+
|
|
110
|
+
1. Specialized tools (Read/Write/Edit) > system commands
|
|
111
|
+
2. `rg` (ripgrep) > `grep` for searching
|
|
112
|
+
3. Batch operations for efficiency
|
|
113
|
+
|
|
114
|
+
## Continuous Improvement
|
|
115
|
+
|
|
116
|
+
- Work until problems are fully resolved
|
|
117
|
+
- Base decisions on facts, not guesses
|
|
118
|
+
- Understand before modifying
|
|
119
|
+
- Every change must have clear principle justification
|
|
120
|
+
|
|
121
|
+
**Important: Do not execute git commits unless explicitly requested.**
|