ccg-workflow 2.1.11 → 2.1.13
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 +18 -3
- package/README.zh-CN.md +17 -3
- package/dist/cli.mjs +1 -1
- package/dist/index.mjs +1 -1
- package/dist/shared/{ccg-workflow.B7JDWK9O.mjs → ccg-workflow.CKr8hgCv.mjs} +42 -13
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,23 +2,38 @@
|
|
|
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
|
[](https://www.npmjs.com/package/ccg-workflow)
|
|
6
8
|
[](https://opensource.org/licenses/MIT)
|
|
7
9
|
[](https://claude.ai/code)
|
|
8
|
-
[]()
|
|
9
11
|
[](https://x.com/CCG_Workflow)
|
|
12
|
+

|
|
10
13
|
|
|
11
14
|
[简体中文](./README.zh-CN.md) | English
|
|
12
15
|
|
|
13
16
|
</div>
|
|
14
17
|
|
|
18
|
+
## ♥️ Sponsor
|
|
19
|
+
|
|
20
|
+
[](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
|
+
|
|
26
|
+
[**n1n.ai**](https://api.n1n.ai/register?channel=c_ivgzug0w) — Global LLM API Gateway. One API Key to access 500+ top AI models (GPT-5, Claude 4.5, Gemini 3 Pro, and more).
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
15
30
|
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
31
|
|
|
17
32
|
## Why CCG?
|
|
18
33
|
|
|
19
34
|
- **Zero-config model routing** — Frontend tasks automatically go to Gemini, backend tasks to Codex. No manual switching.
|
|
20
35
|
- **Security by design** — External models have no write access. They return patches; Claude reviews before applying.
|
|
21
|
-
- **
|
|
36
|
+
- **29+ slash commands** — From planning to execution, git workflow to code review, all accessible via `/ccg:*`.
|
|
22
37
|
- **Spec-driven development** — Integrates [OPSX](https://github.com/fission-ai/opsx) to turn vague requirements into verifiable constraints, eliminating AI improvisation.
|
|
23
38
|
|
|
24
39
|
## Architecture
|
|
@@ -200,7 +215,7 @@ Leverage Claude Code Agent Teams to spawn multiple Builder teammates for paralle
|
|
|
200
215
|
|
|
201
216
|
```
|
|
202
217
|
~/.claude/
|
|
203
|
-
├── commands/ccg/ #
|
|
218
|
+
├── commands/ccg/ # 29+ slash commands
|
|
204
219
|
├── agents/ccg/ # Sub-agents
|
|
205
220
|
├── skills/ccg/ # Quality gates + multi-agent orchestration
|
|
206
221
|
├── bin/codeagent-wrapper
|
package/README.zh-CN.md
CHANGED
|
@@ -2,23 +2,37 @@
|
|
|
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
|
[](https://www.npmjs.com/package/ccg-workflow)
|
|
6
8
|
[](https://opensource.org/licenses/MIT)
|
|
7
9
|
[](https://claude.ai/code)
|
|
8
|
-
[]()
|
|
9
11
|
[](https://x.com/CCG_Workflow)
|
|
10
12
|
|
|
11
13
|
简体中文 | [English](./README.md)
|
|
12
14
|
|
|
13
15
|
</div>
|
|
14
16
|
|
|
17
|
+
## ♥️ 赞助商
|
|
18
|
+
|
|
19
|
+
[](https://share.302.ai/oUDqQ6)
|
|
20
|
+
|
|
21
|
+
[302.AI](https://share.302.ai/oUDqQ6) 是一个按用量付费的企业级 AI 资源平台,提供市场上最新、最全面的 AI 模型和 API,以及多种开箱即用的在线 AI 应用。
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
[**n1n.ai**](https://api.n1n.ai/register?channel=c_ivgzug0w) — 企业级 LLM API 聚合平台,一个 API Key 连接全球 500+ 顶尖 AI 模型(GPT-5、Claude 4.5、Gemini 3 Pro 等)。
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
15
29
|
Claude Code 编排 Codex + Gemini 的多模型协作开发系统。前端任务路由至 Gemini,后端任务路由至 Codex,Claude 负责编排决策和代码审核。
|
|
16
30
|
|
|
17
31
|
## 为什么选择 CCG?
|
|
18
32
|
|
|
19
33
|
- **零配置模型路由** — 前端任务自动走 Gemini,后端任务自动走 Codex,无需手动切换。
|
|
20
34
|
- **安全设计** — 外部模型无写入权限,仅返回 Patch,由 Claude 审核后应用。
|
|
21
|
-
- **
|
|
35
|
+
- **29+ 个斜杠命令** — 从规划到执行、Git 工作流到代码审查,通过 `/ccg:*` 一站式访问。
|
|
22
36
|
- **规范驱动开发** — 集成 [OPSX](https://github.com/fission-ai/opsx),将模糊需求变成可验证约束,让 AI 没法自由发挥。
|
|
23
37
|
|
|
24
38
|
## 架构
|
|
@@ -200,7 +214,7 @@ npx ccg-workflow menu # 选择「安装 Claude Code」
|
|
|
200
214
|
|
|
201
215
|
```
|
|
202
216
|
~/.claude/
|
|
203
|
-
├── commands/ccg/ #
|
|
217
|
+
├── commands/ccg/ # 29+ 个斜杠命令
|
|
204
218
|
├── agents/ccg/ # 子智能体
|
|
205
219
|
├── skills/ccg/ # 质量关卡 + 多 Agent 协同
|
|
206
220
|
├── 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.
|
|
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.CKr8hgCv.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.
|
|
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.CKr8hgCv.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.
|
|
13
|
+
const version = "2.1.13";
|
|
14
14
|
|
|
15
15
|
function cmd(id, order, category, name, nameEn, description, descriptionEn, cmdOverride) {
|
|
16
16
|
return {
|
|
@@ -790,7 +790,7 @@ async function removeFastContextPrompt() {
|
|
|
790
790
|
await removeFromFile(join(homedir(), ".gemini", "GEMINI.md"));
|
|
791
791
|
}
|
|
792
792
|
|
|
793
|
-
const EXPECTED_BINARY_VERSION = "5.
|
|
793
|
+
const EXPECTED_BINARY_VERSION = "5.10.0";
|
|
794
794
|
const GITHUB_REPO = "fengshao1227/ccg-workflow";
|
|
795
795
|
const RELEASE_TAG = "preset";
|
|
796
796
|
const BINARY_SOURCES = [
|
|
@@ -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
|
-
|
|
1849
|
-
|
|
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
|
-
|
|
2061
|
-
|
|
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
|
-
|
|
2325
|
-
|
|
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
|
-
|
|
2537
|
-
|
|
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.
|
|
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 === "
|
|
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.
|
|
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