ccg-workflow 2.1.11 → 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,23 +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)]()
9
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)
10
13
 
11
14
  [简体中文](./README.zh-CN.md) | English
12
15
 
13
16
  </div>
14
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
+
15
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.
16
27
 
17
28
  ## Why CCG?
18
29
 
19
30
  - **Zero-config model routing** — Frontend tasks automatically go to Gemini, backend tasks to Codex. No manual switching.
20
31
  - **Security by design** — External models have no write access. They return patches; Claude reviews before applying.
21
- - **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:*`.
22
33
  - **Spec-driven development** — Integrates [OPSX](https://github.com/fission-ai/opsx) to turn vague requirements into verifiable constraints, eliminating AI improvisation.
23
34
 
24
35
  ## Architecture
@@ -200,7 +211,7 @@ Leverage Claude Code Agent Teams to spawn multiple Builder teammates for paralle
200
211
 
201
212
  ```
202
213
  ~/.claude/
203
- ├── commands/ccg/ # 26 slash commands
214
+ ├── commands/ccg/ # 29+ slash commands
204
215
  ├── agents/ccg/ # Sub-agents
205
216
  ├── skills/ccg/ # Quality gates + multi-agent orchestration
206
217
  ├── bin/codeagent-wrapper
package/README.zh-CN.md CHANGED
@@ -2,23 +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)]()
9
11
  [![Follow on X](https://img.shields.io/badge/X-@CCG__Workflow-black?logo=x&logoColor=white)](https://x.com/CCG_Workflow)
10
12
 
11
13
  简体中文 | [English](./README.md)
12
14
 
13
15
  </div>
14
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
+
15
25
  Claude Code 编排 Codex + Gemini 的多模型协作开发系统。前端任务路由至 Gemini,后端任务路由至 Codex,Claude 负责编排决策和代码审核。
16
26
 
17
27
  ## 为什么选择 CCG?
18
28
 
19
29
  - **零配置模型路由** — 前端任务自动走 Gemini,后端任务自动走 Codex,无需手动切换。
20
30
  - **安全设计** — 外部模型无写入权限,仅返回 Patch,由 Claude 审核后应用。
21
- - **27 个斜杠命令** — 从规划到执行、Git 工作流到代码审查,通过 `/ccg:*` 一站式访问。
31
+ - **29+ 个斜杠命令** — 从规划到执行、Git 工作流到代码审查,通过 `/ccg:*` 一站式访问。
22
32
  - **规范驱动开发** — 集成 [OPSX](https://github.com/fission-ai/opsx),将模糊需求变成可验证约束,让 AI 没法自由发挥。
23
33
 
24
34
  ## 架构
@@ -200,7 +210,7 @@ npx ccg-workflow menu # 选择「安装 Claude Code」
200
210
 
201
211
  ```
202
212
  ~/.claude/
203
- ├── commands/ccg/ # 27 个斜杠命令
213
+ ├── commands/ccg/ # 29+ 个斜杠命令
204
214
  ├── agents/ccg/ # 子智能体
205
215
  ├── skills/ccg/ # 质量关卡 + 多 Agent 协同
206
216
  ├── bin/codeagent-wrapper
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.B7JDWK9O.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.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.B7JDWK9O.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.11";
13
+ const version = "2.1.12";
14
14
 
15
15
  function cmd(id, order, category, name, nameEn, description, descriptionEn, cmdOverride) {
16
16
  return {
@@ -1845,8 +1845,8 @@ const zhCN = {
1845
1845
  providerPrompt: "\u9009\u62E9 API \u63D0\u4F9B\u65B9",
1846
1846
  officialOption: "Anthropic \u5B98\u65B9\uFF08\u5DF2\u6709\u8D26\u53F7 / Claude Pro / Max \u8BA2\u9605\uFF09",
1847
1847
  thirdPartyOption: "\u7B2C\u4E09\u65B9 API \u4EE3\u7406\uFF08\u81EA\u5B9A\u4E49 URL + Key\uFF09",
1848
- sponsorSlot: "\u8D5E\u52A9\u5546\u5408\u4F5C\u4F4D\uFF08\u7B49\u5F85\u91D1\u4E3B\u7238\u7238\u6295\u5582\uFF09",
1849
- 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",
1850
1850
  urlPrompt: "API URL",
1851
1851
  urlRequired: "\u5FC5\u586B",
1852
1852
  keyPrompt: "API Key",
@@ -2057,8 +2057,8 @@ const zhCN = {
2057
2057
  providerPrompt: "\u9009\u62E9 API \u63D0\u4F9B\u65B9",
2058
2058
  officialOption: "Anthropic \u5B98\u65B9\uFF08\u4F7F\u7528\u5B98\u65B9\u8D26\u53F7\u767B\u5F55\uFF09",
2059
2059
  thirdPartyOption: "\u7B2C\u4E09\u65B9 API \u4EE3\u7406\uFF08\u81EA\u5B9A\u4E49 URL + Key\uFF09",
2060
- sponsorSlot: "\u8D5E\u52A9\u5546\u5408\u4F5C\u4F4D\uFF08\u7B49\u5F85\u91D1\u4E3B\u7238\u7238\u6295\u5582\uFF09",
2061
- 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",
2062
2062
  urlPrompt: "API URL",
2063
2063
  urlRequired: "\u5FC5\u586B",
2064
2064
  keyPrompt: "API Key",
@@ -2321,8 +2321,8 @@ const en = {
2321
2321
  providerPrompt: "Select API provider",
2322
2322
  officialOption: "Anthropic Official (existing account / Claude Pro / Max subscription)",
2323
2323
  thirdPartyOption: "Third-party API proxy (custom URL + Key)",
2324
- sponsorSlot: "Sponsor slot (awaiting generous sponsors)",
2325
- sponsorDisabled: "Awaiting sponsors",
2324
+ sponsor302AI: "302.AI (Pay-as-you-go Enterprise AI Resource Hub)",
2325
+ sponsor302AIGetKey: "Get API Key",
2326
2326
  urlPrompt: "API URL",
2327
2327
  urlRequired: "Required",
2328
2328
  keyPrompt: "API Key",
@@ -2533,8 +2533,8 @@ const en = {
2533
2533
  providerPrompt: "Select API provider",
2534
2534
  officialOption: "Anthropic Official (use official account login)",
2535
2535
  thirdPartyOption: "Third-party API proxy (custom URL + Key)",
2536
- sponsorSlot: "Sponsor slot (awaiting generous sponsors)",
2537
- sponsorDisabled: "Awaiting sponsors",
2536
+ sponsor302AI: "302.AI (Pay-as-you-go Enterprise AI Resource Hub)",
2537
+ sponsor302AIGetKey: "Get API Key",
2538
2538
  urlPrompt: "API URL",
2539
2539
  urlRequired: "Required",
2540
2540
  keyPrompt: "API Key",
@@ -2976,10 +2976,23 @@ async function init(options = {}) {
2976
2976
  choices: [
2977
2977
  { name: `${ansis.green("\u25CF")} ${i18n.t("init:api.officialOption")}`, value: "official" },
2978
2978
  { name: `${ansis.cyan("\u25CF")} ${i18n.t("init:api.thirdPartyOption")}`, value: "thirdparty" },
2979
- { 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" }
2980
2980
  ]
2981
2981
  }]);
2982
- 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") {
2983
2996
  const apiAnswers = await inquirer.prompt([
2984
2997
  {
2985
2998
  type: "input",
@@ -4160,7 +4173,7 @@ async function configApi() {
4160
4173
  choices: [
4161
4174
  { name: `${ansis.green("\u25CF")} ${i18n.t("menu:api.officialOption")}`, value: "official" },
4162
4175
  { name: `${ansis.cyan("\u25CF")} ${i18n.t("menu:api.thirdPartyOption")}`, value: "thirdparty" },
4163
- { 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" }
4164
4177
  ]
4165
4178
  }]);
4166
4179
  if (apiProvider === "official") {
@@ -4169,6 +4182,22 @@ async function configApi() {
4169
4182
  delete settings.env.ANTHROPIC_BASE_URL;
4170
4183
  delete settings.env.ANTHROPIC_AUTH_TOKEN;
4171
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;
4172
4201
  } else {
4173
4202
  const answers = await inquirer.prompt([
4174
4203
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ccg-workflow",
3
- "version": "2.1.11",
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",