ccg-workflow 2.1.1 → 2.1.12

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 CHANGED
@@ -2,22 +2,34 @@
2
2
 
3
3
  <div align="center">
4
4
 
5
+ <img src="assets/logo/ccg-logo-cropped.png" alt="CCG Workflow" width="400">
6
+
5
7
  [![npm version](https://img.shields.io/npm/v/ccg-workflow.svg)](https://www.npmjs.com/package/ccg-workflow)
6
8
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
7
9
  [![Claude Code](https://img.shields.io/badge/Claude%20Code-Compatible-green.svg)](https://claude.ai/code)
8
- [![Tests](https://img.shields.io/badge/Tests-134%20passed-brightgreen.svg)]()
10
+ [![Tests](https://img.shields.io/badge/Tests-139%20passed-brightgreen.svg)]()
11
+ [![Follow on X](https://img.shields.io/badge/X-@CCG__Workflow-black?logo=x&logoColor=white)](https://x.com/CCG_Workflow)
12
+ ![star](https://atomgit.com/fengshao1227/ccg-workflow/star/badge.svg)
9
13
 
10
14
  [简体中文](./README.zh-CN.md) | English
11
15
 
12
16
  </div>
13
17
 
18
+ ## ♥️ Sponsor
19
+
20
+ [![302.AI](assets/sponsors/302.ai-en.jpg)](https://share.302.ai/oUDqQ6)
21
+
22
+ [302.AI](https://share.302.ai/oUDqQ6) is a pay-as-you-go enterprise AI resource hub that offers the latest and most comprehensive AI models and APIs on the market, along with a variety of ready-to-use online AI applications.
23
+
24
+ ---
25
+
14
26
  A multi-model collaboration development system where Claude Code orchestrates Codex + Gemini. Frontend tasks route to Gemini, backend tasks route to Codex, and Claude handles orchestration and code review.
15
27
 
16
28
  ## Why CCG?
17
29
 
18
30
  - **Zero-config model routing** — Frontend tasks automatically go to Gemini, backend tasks to Codex. No manual switching.
19
31
  - **Security by design** — External models have no write access. They return patches; Claude reviews before applying.
20
- - **27 slash commands** — From planning to execution, git workflow to code review, all accessible via `/ccg:*`.
32
+ - **29+ slash commands** — From planning to execution, git workflow to code review, all accessible via `/ccg:*`.
21
33
  - **Spec-driven development** — Integrates [OPSX](https://github.com/fission-ai/opsx) to turn vague requirements into verifiable constraints, eliminating AI improvisation.
22
34
 
23
35
  ## Architecture
@@ -37,6 +49,8 @@ Codex Gemini
37
49
 
38
50
  External models have no write access — they only return patches, which Claude reviews before applying.
39
51
 
52
+ > **🎬 [See CCG in action →](https://x.com/CCG_Workflow/status/2038923720610463876)** — Real multi-model collaboration demo on X
53
+
40
54
  ## Quick Start
41
55
 
42
56
  ### Prerequisites
@@ -197,7 +211,7 @@ Leverage Claude Code Agent Teams to spawn multiple Builder teammates for paralle
197
211
 
198
212
  ```
199
213
  ~/.claude/
200
- ├── commands/ccg/ # 26 slash commands
214
+ ├── commands/ccg/ # 29+ slash commands
201
215
  ├── agents/ccg/ # Sub-agents
202
216
  ├── skills/ccg/ # Quality gates + multi-agent orchestration
203
217
  ├── bin/codeagent-wrapper
@@ -349,6 +363,7 @@ Looking for a place to start? Check out issues labeled [`good first issue`](http
349
363
 
350
364
  ## Contact
351
365
 
366
+ - **X (Twitter)**: [@CCG_Workflow](https://x.com/CCG_Workflow) — Updates, demos, and tips
352
367
  - **Email**: [fengshao1227@gmail.com](mailto:fengshao1227@gmail.com) — Sponsorship, collaboration, or development ideas
353
368
  - **Issues**: [GitHub Issues](https://github.com/fengshao1227/ccg-workflow/issues) — Bug reports and feature requests
354
369
  - **Discussions**: [GitHub Discussions](https://github.com/fengshao1227/ccg-workflow/discussions) — Questions and community chat
@@ -359,4 +374,4 @@ MIT
359
374
 
360
375
  ---
361
376
 
362
- v1.7.86 | [Issues](https://github.com/fengshao1227/ccg-workflow/issues) | [Contributing](./CONTRIBUTING.md)
377
+ v2.1.11 | [Issues](https://github.com/fengshao1227/ccg-workflow/issues) | [Contributing](./CONTRIBUTING.md)
package/README.zh-CN.md CHANGED
@@ -2,22 +2,33 @@
2
2
 
3
3
  <div align="center">
4
4
 
5
+ <img src="assets/logo/ccg-logo-cropped.png" alt="CCG Workflow" width="400">
6
+
5
7
  [![npm version](https://img.shields.io/npm/v/ccg-workflow.svg)](https://www.npmjs.com/package/ccg-workflow)
6
8
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
7
9
  [![Claude Code](https://img.shields.io/badge/Claude%20Code-Compatible-green.svg)](https://claude.ai/code)
8
- [![Tests](https://img.shields.io/badge/Tests-134%20passed-brightgreen.svg)]()
10
+ [![Tests](https://img.shields.io/badge/Tests-139%20passed-brightgreen.svg)]()
11
+ [![Follow on X](https://img.shields.io/badge/X-@CCG__Workflow-black?logo=x&logoColor=white)](https://x.com/CCG_Workflow)
9
12
 
10
13
  简体中文 | [English](./README.md)
11
14
 
12
15
  </div>
13
16
 
17
+ ## ♥️ 赞助商
18
+
19
+ [![302.AI](assets/sponsors/302.ai.jpg)](https://share.302.ai/oUDqQ6)
20
+
21
+ [302.AI](https://share.302.ai/oUDqQ6) 是一个按用量付费的企业级 AI 资源平台,提供市场上最新、最全面的 AI 模型和 API,以及多种开箱即用的在线 AI 应用。
22
+
23
+ ---
24
+
14
25
  Claude Code 编排 Codex + Gemini 的多模型协作开发系统。前端任务路由至 Gemini,后端任务路由至 Codex,Claude 负责编排决策和代码审核。
15
26
 
16
27
  ## 为什么选择 CCG?
17
28
 
18
29
  - **零配置模型路由** — 前端任务自动走 Gemini,后端任务自动走 Codex,无需手动切换。
19
30
  - **安全设计** — 外部模型无写入权限,仅返回 Patch,由 Claude 审核后应用。
20
- - **27 个斜杠命令** — 从规划到执行、Git 工作流到代码审查,通过 `/ccg:*` 一站式访问。
31
+ - **29+ 个斜杠命令** — 从规划到执行、Git 工作流到代码审查,通过 `/ccg:*` 一站式访问。
21
32
  - **规范驱动开发** — 集成 [OPSX](https://github.com/fission-ai/opsx),将模糊需求变成可验证约束,让 AI 没法自由发挥。
22
33
 
23
34
  ## 架构
@@ -37,6 +48,8 @@ Codex Gemini
37
48
 
38
49
  外部模型无写入权限,仅返回 Patch,由 Claude 审核后应用。
39
50
 
51
+ > **🎬 [查看 CCG 实战演示 →](https://x.com/CCG_Workflow/status/2038923720610463876)** — X 上的多模型协作真实案例
52
+
40
53
  ## 快速开始
41
54
 
42
55
  ### 前置条件
@@ -197,7 +210,7 @@ npx ccg-workflow menu # 选择「安装 Claude Code」
197
210
 
198
211
  ```
199
212
  ~/.claude/
200
- ├── commands/ccg/ # 27 个斜杠命令
213
+ ├── commands/ccg/ # 29+ 个斜杠命令
201
214
  ├── agents/ccg/ # 子智能体
202
215
  ├── skills/ccg/ # 质量关卡 + 多 Agent 协同
203
216
  ├── bin/codeagent-wrapper
@@ -349,6 +362,7 @@ npm uninstall -g ccg-workflow # npm 全局用户需额外执行
349
362
 
350
363
  ## 联系方式
351
364
 
365
+ - **X (Twitter)**: [@CCG_Workflow](https://x.com/CCG_Workflow) — 更新动态、实战演示、使用技巧
352
366
  - **邮箱**: [fengshao1227@gmail.com](mailto:fengshao1227@gmail.com) — 赞助、合作洽谈、开发交流
353
367
  - **Issues**: [GitHub Issues](https://github.com/fengshao1227/ccg-workflow/issues) — Bug 反馈与功能建议
354
368
  - **讨论区**: [GitHub Discussions](https://github.com/fengshao1227/ccg-workflow/discussions) — 问题咨询与社区交流
@@ -359,4 +373,4 @@ MIT
359
373
 
360
374
  ---
361
375
 
362
- v1.7.86 | [Issues](https://github.com/fengshao1227/ccg-workflow/issues) | [参与贡献](./CONTRIBUTING.md)
376
+ v2.1.11 | [Issues](https://github.com/fengshao1227/ccg-workflow/issues) | [参与贡献](./CONTRIBUTING.md)
package/dist/cli.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import cac from 'cac';
3
3
  import ansis from 'ansis';
4
- import { z as diagnoseMcpConfig, A as isWindows, B as readClaudeCodeConfig, C as fixWindowsMcpConfig, D as writeClaudeCodeConfig, r as readCcgConfig, b as initI18n, a as i18n, s as showMainMenu, i as init, E as configMcp, F as version } from './shared/ccg-workflow.pMx0aHNz.mjs';
4
+ import { z as diagnoseMcpConfig, A as isWindows, B as readClaudeCodeConfig, C as fixWindowsMcpConfig, D as writeClaudeCodeConfig, r as readCcgConfig, b as initI18n, a as i18n, s as showMainMenu, i as init, E as configMcp, F as version } from './shared/ccg-workflow.CBRd0eXL.mjs';
5
5
  import 'inquirer';
6
6
  import 'ora';
7
7
  import 'node:child_process';
package/dist/index.d.mts CHANGED
@@ -55,6 +55,7 @@ interface CcgConfig {
55
55
  };
56
56
  performance?: {
57
57
  liteMode?: boolean;
58
+ skipImpeccable?: boolean;
58
59
  };
59
60
  }
60
61
  interface WorkflowConfig {
@@ -123,6 +124,7 @@ declare function createDefaultConfig(options: {
123
124
  installedWorkflows: string[];
124
125
  mcpProvider?: string;
125
126
  liteMode?: boolean;
127
+ skipImpeccable?: boolean;
126
128
  }): CcgConfig;
127
129
  declare function createDefaultRouting(): ModelRouting;
128
130
 
@@ -168,6 +170,7 @@ declare function installWorkflows(workflowIds: string[], installDir: string, for
168
170
  };
169
171
  liteMode?: boolean;
170
172
  mcpProvider?: string;
173
+ skipImpeccable?: boolean;
171
174
  }): Promise<InstallResult>;
172
175
  interface UninstallResult {
173
176
  success: boolean;
package/dist/index.d.ts CHANGED
@@ -55,6 +55,7 @@ interface CcgConfig {
55
55
  };
56
56
  performance?: {
57
57
  liteMode?: boolean;
58
+ skipImpeccable?: boolean;
58
59
  };
59
60
  }
60
61
  interface WorkflowConfig {
@@ -123,6 +124,7 @@ declare function createDefaultConfig(options: {
123
124
  installedWorkflows: string[];
124
125
  mcpProvider?: string;
125
126
  liteMode?: boolean;
127
+ skipImpeccable?: boolean;
126
128
  }): CcgConfig;
127
129
  declare function createDefaultRouting(): ModelRouting;
128
130
 
@@ -168,6 +170,7 @@ declare function installWorkflows(workflowIds: string[], installDir: string, for
168
170
  };
169
171
  liteMode?: boolean;
170
172
  mcpProvider?: string;
173
+ skipImpeccable?: boolean;
171
174
  }): Promise<InstallResult>;
172
175
  interface UninstallResult {
173
176
  success: boolean;
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- export { c as changeLanguage, x as checkForUpdates, y as compareVersions, d as createDefaultConfig, e as createDefaultRouting, g as getCcgDir, f as getConfigPath, t as getCurrentVersion, v as getLatestVersion, j as getWorkflowById, h as getWorkflowConfigs, a as i18n, i as init, b as initI18n, l as installAceTool, m as installAceToolRs, k as installWorkflows, p as migrateToV1_4_0, q as needsMigration, r as readCcgConfig, s as showMainMenu, o as uninstallAceTool, n as uninstallWorkflows, u as update, w as writeCcgConfig } from './shared/ccg-workflow.pMx0aHNz.mjs';
1
+ export { c as changeLanguage, x as checkForUpdates, y as compareVersions, d as createDefaultConfig, e as createDefaultRouting, g as getCcgDir, f as getConfigPath, t as getCurrentVersion, v as getLatestVersion, j as getWorkflowById, h as getWorkflowConfigs, a as i18n, i as init, b as initI18n, l as installAceTool, m as installAceToolRs, k as installWorkflows, p as migrateToV1_4_0, q as needsMigration, r as readCcgConfig, s as showMainMenu, o as uninstallAceTool, n as uninstallWorkflows, u as update, w as writeCcgConfig } from './shared/ccg-workflow.CBRd0eXL.mjs';
2
2
  import 'ansis';
3
3
  import 'inquirer';
4
4
  import 'ora';
@@ -10,7 +10,7 @@ import fs from 'fs-extra';
10
10
  import { parse, stringify } from 'smol-toml';
11
11
  import i18next from 'i18next';
12
12
 
13
- const version = "2.1.1";
13
+ const version = "2.1.12";
14
14
 
15
15
  function cmd(id, order, category, name, nameEn, description, descriptionEn, cmdOverride) {
16
16
  return {
@@ -319,8 +319,8 @@ function generateCommandContent(skill, skillsInstallDir) {
319
319
  `\`\`\``
320
320
  ].join("\n");
321
321
  }
322
- async function installSkillCommands(skillsTemplateDir, skillsInstallDir, commandsDir, existingCommandNames) {
323
- const invocableSkills = collectInvocableSkills(skillsTemplateDir);
322
+ async function installSkillCommands(skillsTemplateDir, skillsInstallDir, commandsDir, existingCommandNames, skipCategories = []) {
323
+ const invocableSkills = collectInvocableSkills(skillsTemplateDir).filter((s) => !skipCategories.includes(s.category));
324
324
  const generated = [];
325
325
  await fs.ensureDir(commandsDir);
326
326
  for (const skill of invocableSkills) {
@@ -1043,11 +1043,16 @@ async function installSkillGeneratedCommands(ctx) {
1043
1043
  existingCommandNames.add(basename(f, ".md"));
1044
1044
  }
1045
1045
  }
1046
+ const skipCategories = [];
1047
+ if (ctx.config.skipImpeccable) {
1048
+ skipCategories.push("impeccable");
1049
+ }
1046
1050
  const generated = await installSkillCommands(
1047
1051
  skillsTemplateDir,
1048
1052
  skillsInstallDir,
1049
1053
  commandsDir,
1050
- existingCommandNames
1054
+ existingCommandNames,
1055
+ skipCategories
1051
1056
  );
1052
1057
  if (generated.length > 0) {
1053
1058
  ctx.result.installedCommands.push(...generated);
@@ -1191,7 +1196,8 @@ async function installWorkflows(workflowIds, installDir, force = false, config)
1191
1196
  review: { models: ["codex", "gemini"] }
1192
1197
  },
1193
1198
  liteMode: config?.liteMode || false,
1194
- mcpProvider: config?.mcpProvider || "ace-tool"
1199
+ mcpProvider: config?.mcpProvider || "ace-tool",
1200
+ skipImpeccable: config?.skipImpeccable || false
1195
1201
  },
1196
1202
  templateDir: join(PACKAGE_ROOT$1, "templates"),
1197
1203
  result: {
@@ -1839,8 +1845,8 @@ const zhCN = {
1839
1845
  providerPrompt: "\u9009\u62E9 API \u63D0\u4F9B\u65B9",
1840
1846
  officialOption: "Anthropic \u5B98\u65B9\uFF08\u5DF2\u6709\u8D26\u53F7 / Claude Pro / Max \u8BA2\u9605\uFF09",
1841
1847
  thirdPartyOption: "\u7B2C\u4E09\u65B9 API \u4EE3\u7406\uFF08\u81EA\u5B9A\u4E49 URL + Key\uFF09",
1842
- sponsorSlot: "\u8D5E\u52A9\u5546\u5408\u4F5C\u4F4D\uFF08\u7B49\u5F85\u91D1\u4E3B\u7238\u7238\u6295\u5582\uFF09",
1843
- sponsorDisabled: "\u7B49\u5F85\u91D1\u4E3B\u7238\u7238\u6295\u5582",
1848
+ sponsor302AI: "302.AI\uFF08\u6309\u7528\u91CF\u4ED8\u8D39\u7684\u4F01\u4E1A\u7EA7 AI \u8D44\u6E90\u5E73\u53F0\uFF09",
1849
+ sponsor302AIGetKey: "\u83B7\u53D6 API Key",
1844
1850
  urlPrompt: "API URL",
1845
1851
  urlRequired: "\u5FC5\u586B",
1846
1852
  keyPrompt: "API Key",
@@ -1875,6 +1881,9 @@ const zhCN = {
1875
1881
  standardOption: "\u6807\u51C6\u6A21\u5F0F\uFF08\u542B Web UI \u5B9E\u65F6\u76D1\u63A7\uFF09",
1876
1882
  liteOption: "\u8F7B\u91CF\u6A21\u5F0F\uFF08\u65E0 Web UI\uFF0C\u54CD\u5E94\u66F4\u5FEB\uFF09"
1877
1883
  },
1884
+ commands: {
1885
+ includeImpeccable: "\u5B89\u88C5 Impeccable \u524D\u7AEF\u8BBE\u8BA1\u5DE5\u5177\uFF1F\uFF0820 \u4E2A UI/UX \u547D\u4EE4\uFF1Apolish/audit/animate \u7B49\uFF09"
1886
+ },
1878
1887
  hooks: {
1879
1888
  title: "codeagent-wrapper \u81EA\u52A8\u6388\u6743",
1880
1889
  description: "\u4F7F\u7528 Hook \u81EA\u52A8\u6388\u6743 codeagent-wrapper \u547D\u4EE4",
@@ -2048,8 +2057,8 @@ const zhCN = {
2048
2057
  providerPrompt: "\u9009\u62E9 API \u63D0\u4F9B\u65B9",
2049
2058
  officialOption: "Anthropic \u5B98\u65B9\uFF08\u4F7F\u7528\u5B98\u65B9\u8D26\u53F7\u767B\u5F55\uFF09",
2050
2059
  thirdPartyOption: "\u7B2C\u4E09\u65B9 API \u4EE3\u7406\uFF08\u81EA\u5B9A\u4E49 URL + Key\uFF09",
2051
- sponsorSlot: "\u8D5E\u52A9\u5546\u5408\u4F5C\u4F4D\uFF08\u7B49\u5F85\u91D1\u4E3B\u7238\u7238\u6295\u5582\uFF09",
2052
- sponsorDisabled: "\u7B49\u5F85\u91D1\u4E3B\u7238\u7238\u6295\u5582",
2060
+ sponsor302AI: "302.AI\uFF08\u6309\u7528\u91CF\u4ED8\u8D39\u7684\u4F01\u4E1A\u7EA7 AI \u8D44\u6E90\u5E73\u53F0\uFF09",
2061
+ sponsor302AIGetKey: "\u83B7\u53D6 API Key",
2053
2062
  urlPrompt: "API URL",
2054
2063
  urlRequired: "\u5FC5\u586B",
2055
2064
  keyPrompt: "API Key",
@@ -2312,8 +2321,8 @@ const en = {
2312
2321
  providerPrompt: "Select API provider",
2313
2322
  officialOption: "Anthropic Official (existing account / Claude Pro / Max subscription)",
2314
2323
  thirdPartyOption: "Third-party API proxy (custom URL + Key)",
2315
- sponsorSlot: "Sponsor slot (awaiting generous sponsors)",
2316
- sponsorDisabled: "Awaiting sponsors",
2324
+ sponsor302AI: "302.AI (Pay-as-you-go Enterprise AI Resource Hub)",
2325
+ sponsor302AIGetKey: "Get API Key",
2317
2326
  urlPrompt: "API URL",
2318
2327
  urlRequired: "Required",
2319
2328
  keyPrompt: "API Key",
@@ -2348,6 +2357,9 @@ const en = {
2348
2357
  standardOption: "Standard (with Web UI real-time monitoring)",
2349
2358
  liteOption: "Lite (no Web UI, faster response)"
2350
2359
  },
2360
+ commands: {
2361
+ includeImpeccable: "Install Impeccable frontend design tools? (20 UI/UX commands: polish/audit/animate etc.)"
2362
+ },
2351
2363
  hooks: {
2352
2364
  title: "codeagent-wrapper auto-authorization",
2353
2365
  description: "Use Hook to auto-authorize codeagent-wrapper commands",
@@ -2521,8 +2533,8 @@ const en = {
2521
2533
  providerPrompt: "Select API provider",
2522
2534
  officialOption: "Anthropic Official (use official account login)",
2523
2535
  thirdPartyOption: "Third-party API proxy (custom URL + Key)",
2524
- sponsorSlot: "Sponsor slot (awaiting generous sponsors)",
2525
- sponsorDisabled: "Awaiting sponsors",
2536
+ sponsor302AI: "302.AI (Pay-as-you-go Enterprise AI Resource Hub)",
2537
+ sponsor302AIGetKey: "Get API Key",
2526
2538
  urlPrompt: "API URL",
2527
2539
  urlRequired: "Required",
2528
2540
  keyPrompt: "API Key",
@@ -2685,7 +2697,8 @@ function createDefaultConfig(options) {
2685
2697
  setup_url: "https://augmentcode.com/"
2686
2698
  },
2687
2699
  performance: {
2688
- liteMode: options.liteMode || false
2700
+ liteMode: options.liteMode || false,
2701
+ skipImpeccable: options.skipImpeccable || false
2689
2702
  }
2690
2703
  };
2691
2704
  }
@@ -2937,6 +2950,7 @@ async function init(options = {}) {
2937
2950
  }
2938
2951
  }
2939
2952
  let liteMode = false;
2953
+ let skipImpeccable = false;
2940
2954
  let mcpProvider = "ace-tool";
2941
2955
  let aceToolBaseUrl = "";
2942
2956
  let aceToolToken = "";
@@ -2962,10 +2976,23 @@ async function init(options = {}) {
2962
2976
  choices: [
2963
2977
  { name: `${ansis.green("\u25CF")} ${i18n.t("init:api.officialOption")}`, value: "official" },
2964
2978
  { name: `${ansis.cyan("\u25CF")} ${i18n.t("init:api.thirdPartyOption")}`, value: "thirdparty" },
2965
- { name: ansis.gray(`\u25CB ${i18n.t("init:api.sponsorSlot")}`), value: "sponsor", disabled: i18n.t("init:api.sponsorDisabled") }
2979
+ { name: `${ansis.yellow("\u2605")} ${i18n.t("init:api.sponsor302AI")} ${ansis.gray("\u2014 https://share.302.ai/oUDqQ6")}`, value: "302ai" }
2966
2980
  ]
2967
2981
  }]);
2968
- if (apiProvider === "thirdparty") {
2982
+ if (apiProvider === "302ai") {
2983
+ apiUrl = "https://api.302.ai/cc";
2984
+ console.log();
2985
+ console.log(` ${ansis.yellow("\u2605")} ${i18n.t("init:api.sponsor302AIGetKey")}: ${ansis.cyan.underline("https://share.302.ai/oUDqQ6")}`);
2986
+ console.log();
2987
+ const { key } = await inquirer.prompt([{
2988
+ type: "password",
2989
+ name: "key",
2990
+ message: `302.AI API Key ${ansis.gray(`(${i18n.t("init:api.keyRequired")})`)}`,
2991
+ mask: "*",
2992
+ validate: (v) => v.trim() !== "" || i18n.t("init:api.enterKey")
2993
+ }]);
2994
+ apiKey = key?.trim() || "";
2995
+ } else if (apiProvider === "thirdparty") {
2969
2996
  const apiAnswers = await inquirer.prompt([
2970
2997
  {
2971
2998
  type: "input",
@@ -3038,7 +3065,8 @@ async function init(options = {}) {
3038
3065
  }
3039
3066
  }
3040
3067
  if (options.skipMcp) {
3041
- mcpProvider = "skip";
3068
+ const existingConfig = await readCcgConfig();
3069
+ mcpProvider = existingConfig?.mcp?.provider || "skip";
3042
3070
  } else if (!options.skipPrompt) {
3043
3071
  console.log();
3044
3072
  console.log(ansis.cyan.bold(` \u{1F527} Step 3/4 \u2014 ${i18n.t("init:mcp.title")}`));
@@ -3190,11 +3218,21 @@ async function init(options = {}) {
3190
3218
  default: currentLiteMode ? "lite" : "standard"
3191
3219
  }]);
3192
3220
  liteMode = perfMode === "lite";
3221
+ const { includeImpeccable } = await inquirer.prompt([{
3222
+ type: "confirm",
3223
+ name: "includeImpeccable",
3224
+ message: i18n.t("init:commands.includeImpeccable"),
3225
+ default: false
3226
+ }]);
3227
+ skipImpeccable = !includeImpeccable;
3193
3228
  } else {
3194
3229
  const existingConfig = await readCcgConfig();
3195
3230
  if (existingConfig?.performance?.liteMode !== void 0) {
3196
3231
  liteMode = existingConfig.performance.liteMode;
3197
3232
  }
3233
+ if (existingConfig?.performance?.skipImpeccable !== void 0) {
3234
+ skipImpeccable = existingConfig.performance.skipImpeccable;
3235
+ }
3198
3236
  }
3199
3237
  const routing = {
3200
3238
  frontend: {
@@ -3283,14 +3321,16 @@ async function init(options = {}) {
3283
3321
  routing,
3284
3322
  installedWorkflows: selectedWorkflows,
3285
3323
  mcpProvider,
3286
- liteMode
3324
+ liteMode,
3325
+ skipImpeccable
3287
3326
  });
3288
3327
  await writeCcgConfig(config);
3289
3328
  const installDir = options.installDir || join(homedir(), ".claude");
3290
3329
  const result = await installWorkflows(selectedWorkflows, installDir, options.force, {
3291
3330
  routing,
3292
3331
  liteMode,
3293
- mcpProvider
3332
+ mcpProvider,
3333
+ skipImpeccable
3294
3334
  });
3295
3335
  spinner.succeed(ansis.green(i18n.t("init:installSuccess")));
3296
3336
  if (aceToolToken) {
@@ -4133,7 +4173,7 @@ async function configApi() {
4133
4173
  choices: [
4134
4174
  { name: `${ansis.green("\u25CF")} ${i18n.t("menu:api.officialOption")}`, value: "official" },
4135
4175
  { name: `${ansis.cyan("\u25CF")} ${i18n.t("menu:api.thirdPartyOption")}`, value: "thirdparty" },
4136
- { name: ansis.gray(`\u25CB ${i18n.t("menu:api.sponsorSlot")}`), value: "sponsor", disabled: i18n.t("menu:api.sponsorDisabled") }
4176
+ { name: `${ansis.yellow("\u2605")} ${i18n.t("menu:api.sponsor302AI")} ${ansis.gray("\u2014 https://share.302.ai/oUDqQ6")}`, value: "302ai" }
4137
4177
  ]
4138
4178
  }]);
4139
4179
  if (apiProvider === "official") {
@@ -4142,6 +4182,22 @@ async function configApi() {
4142
4182
  delete settings.env.ANTHROPIC_BASE_URL;
4143
4183
  delete settings.env.ANTHROPIC_AUTH_TOKEN;
4144
4184
  delete settings.env.ANTHROPIC_API_KEY;
4185
+ } else if (apiProvider === "302ai") {
4186
+ console.log();
4187
+ console.log(` ${ansis.yellow("\u2605")} ${i18n.t("menu:api.sponsor302AIGetKey")}: ${ansis.cyan.underline("https://share.302.ai/oUDqQ6")}`);
4188
+ console.log();
4189
+ const { key } = await inquirer.prompt([{
4190
+ type: "password",
4191
+ name: "key",
4192
+ message: `302.AI API Key ${ansis.gray(`(${i18n.t("menu:api.keyRequired")})`)}`,
4193
+ mask: "*",
4194
+ validate: (v) => v.trim() !== "" || i18n.t("menu:api.enterKey")
4195
+ }]);
4196
+ if (!settings.env)
4197
+ settings.env = {};
4198
+ settings.env.ANTHROPIC_BASE_URL = "https://api.302.ai/cc";
4199
+ settings.env.ANTHROPIC_AUTH_TOKEN = key.trim();
4200
+ delete settings.env.ANTHROPIC_API_KEY;
4145
4201
  } else {
4146
4202
  const answers = await inquirer.prompt([
4147
4203
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ccg-workflow",
3
- "version": "2.1.1",
3
+ "version": "2.1.12",
4
4
  "description": "Claude + Codex + Gemini multi-model collaboration system - smart routing development workflow",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@10.17.1",