ccgx-workflow 1.0.0 → 1.0.2
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 +37 -5
- package/README.zh-CN.md +35 -5
- package/dist/cli.mjs +1 -1
- package/dist/index.mjs +2 -2
- package/dist/shared/{ccgx-workflow.WgUzkiC3.mjs → ccgx-workflow.Bq9vAaEw.mjs} +17 -110
- package/package.json +2 -1
- package/templates/commands/agents/phase-runner.md +321 -321
- package/templates/commands/autonomous.md +792 -792
- package/templates/commands/cancel.md +132 -132
- package/templates/commands/debug.md +226 -226
- package/templates/commands/status.md +206 -206
- package/templates/commands/team.md +484 -0
- package/templates/hooks/ccg-session-state.cjs +566 -510
- package/templates/scripts/ccg-phase-runner-launcher.mjs +467 -467
- package/templates/scripts/invoke-model.mjs +64 -0
- package/templates/skills/domains/ai/SKILL.md +35 -35
- package/templates/skills/domains/ai/agent-dev.md +242 -242
- package/templates/skills/domains/ai/llm-security.md +288 -288
- package/templates/skills/domains/ai/rag-system.md +542 -542
- package/templates/skills/domains/architecture/SKILL.md +43 -43
- package/templates/skills/domains/architecture/api-design.md +225 -225
- package/templates/skills/domains/architecture/cloud-native.md +285 -285
- package/templates/skills/domains/architecture/security-arch.md +297 -297
- package/templates/skills/domains/data-engineering/SKILL.md +208 -208
- package/templates/skills/domains/development/SKILL.md +47 -47
- package/templates/skills/domains/development/cpp.md +246 -246
- package/templates/skills/domains/development/go.md +323 -323
- package/templates/skills/domains/development/java.md +277 -277
- package/templates/skills/domains/development/python.md +288 -288
- package/templates/skills/domains/development/rust.md +313 -313
- package/templates/skills/domains/development/shell.md +313 -313
- package/templates/skills/domains/development/typescript.md +277 -277
- package/templates/skills/domains/devops/SKILL.md +40 -40
- package/templates/skills/domains/devops/database.md +217 -217
- package/templates/skills/domains/devops/devsecops.md +198 -198
- package/templates/skills/domains/devops/git-workflow.md +181 -181
- package/templates/skills/domains/devops/testing.md +283 -283
- package/templates/skills/domains/frontend-design/SKILL.md +244 -244
- package/templates/skills/domains/frontend-design/claymorphism/SKILL.md +121 -121
- package/templates/skills/domains/frontend-design/component-patterns.md +202 -202
- package/templates/skills/domains/frontend-design/glassmorphism/SKILL.md +142 -142
- package/templates/skills/domains/frontend-design/liquid-glass/SKILL.md +139 -139
- package/templates/skills/domains/frontend-design/neubrutalism/SKILL.md +145 -145
- package/templates/skills/domains/frontend-design/state-management.md +680 -680
- package/templates/skills/domains/frontend-design/ui-aesthetics.md +110 -110
- package/templates/skills/domains/frontend-design/ux-principles.md +156 -156
- package/templates/skills/domains/infrastructure/SKILL.md +201 -201
- package/templates/skills/domains/mobile/SKILL.md +225 -225
- package/templates/skills/domains/orchestration/SKILL.md +30 -30
- package/templates/skills/domains/orchestration/multi-agent.md +228 -228
- package/templates/skills/domains/security/SKILL.md +73 -73
- package/templates/skills/domains/security/blue-team.md +436 -436
- package/templates/skills/domains/security/code-audit.md +265 -265
- package/templates/skills/domains/security/pentest.md +226 -226
- package/templates/skills/domains/security/red-team.md +374 -374
- package/templates/skills/domains/security/threat-intel.md +372 -372
- package/templates/skills/domains/security/vuln-research.md +369 -369
- package/templates/skills/tools/lib/shared.js +98 -98
- package/templates/skills/tools/override-refusal/SKILL.md +53 -53
- package/templates/skills/tools/override-refusal/scripts/refusal_rewriter.js +226 -226
package/README.md
CHANGED
|
@@ -67,8 +67,13 @@ Codex Gemini
|
|
|
67
67
|
| **Node.js 20+** | Yes | `ora@9.x` requires Node ≥ 20 |
|
|
68
68
|
| **Claude Code CLI** | Yes | [Install guide](#install-claude-code) |
|
|
69
69
|
| **jq** | Yes | Used for auto-authorization hook ([install](#install-jq)) |
|
|
70
|
-
| **codex
|
|
71
|
-
| **gemini
|
|
70
|
+
| **codex access** | **One of** | `codex@openai-codex` plugin (recommended) **OR** `npm i -g @openai/codex` |
|
|
71
|
+
| **gemini access** | **One of** | `gemini@google-gemini` plugin (recommended) **OR** `npm i -g @google/gemini-cli` |
|
|
72
|
+
|
|
73
|
+
> **Why "one of"**: ccgx-workflow prefers the plugin path (one-click install in Claude Code,
|
|
74
|
+
> integrated auth). When the plugin is absent it falls back to spawning the standalone CLI
|
|
75
|
+
> via `~/.claude/bin/codeagent-wrapper`. Without **either**, `/ccg:*` commands that invoke
|
|
76
|
+
> codex/gemini fail with exit 127 + a friendly install hint.
|
|
72
77
|
|
|
73
78
|
### Installation
|
|
74
79
|
|
|
@@ -104,17 +109,44 @@ Supports npm / homebrew / curl / powershell / cmd.
|
|
|
104
109
|
|
|
105
110
|
---
|
|
106
111
|
|
|
107
|
-
## Enabling Multi-Model Collaboration (codex / gemini
|
|
112
|
+
## Enabling Multi-Model Collaboration (codex / gemini access)
|
|
113
|
+
|
|
114
|
+
ccgx-workflow needs codex + gemini access via **one of two paths** for each:
|
|
108
115
|
|
|
109
|
-
|
|
116
|
+
### Path A — Claude Code plugins (recommended)
|
|
110
117
|
|
|
111
|
-
|
|
118
|
+
Run inside Claude Code:
|
|
112
119
|
|
|
113
120
|
```
|
|
114
121
|
/plugin install codex@openai-codex
|
|
115
122
|
/plugin install gemini@google-gemini
|
|
116
123
|
```
|
|
117
124
|
|
|
125
|
+
One-click install, integrated auth via Claude Code. Templates spawn plugin
|
|
126
|
+
agents (`Agent(codex:codex-rescue)` / `Agent(gemini:gemini-rescue)`) directly,
|
|
127
|
+
no shim involved.
|
|
128
|
+
|
|
129
|
+
### Path B — standalone CLI fallback
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
# codex CLI
|
|
133
|
+
npm i -g @openai/codex
|
|
134
|
+
codex login
|
|
135
|
+
|
|
136
|
+
# gemini CLI
|
|
137
|
+
npm i -g @google/gemini-cli
|
|
138
|
+
gemini auth login
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
When the plugin is absent, templates fall back to invoking the CLI through
|
|
142
|
+
`~/.claude/bin/codeagent-wrapper` (a Node shim that wraps `codex` / `gemini`).
|
|
143
|
+
You handle key configuration manually.
|
|
144
|
+
|
|
145
|
+
### Mix and match
|
|
146
|
+
|
|
147
|
+
You can use plugin for codex + CLI for gemini, or vice versa. ccgx-workflow
|
|
148
|
+
detects each independently and picks the best available path per call site.
|
|
149
|
+
|
|
118
150
|
The `@` suffix is the marketplace identifier. If a marketplace isn't configured, run `/help plugin` inside Claude Code to see local marketplace management commands, or refer to [Claude Code plugin docs](https://docs.claude.com/en/docs/claude-code/plugins).
|
|
119
151
|
|
|
120
152
|
> Upstream plugin repos (for troubleshooting / issue reports):
|
package/README.zh-CN.md
CHANGED
|
@@ -64,8 +64,13 @@ Codex Gemini
|
|
|
64
64
|
| **Node.js 20+** | 是 | `ora@9.x` 要求 Node ≥ 20 |
|
|
65
65
|
| **Claude Code CLI** | 是 | [安装方法](#安装-claude-code) |
|
|
66
66
|
| **jq** | 是 | 自动授权 Hook 依赖([安装方法](#安装-jq)) |
|
|
67
|
-
| **codex@openai-codex plugin
|
|
68
|
-
| **gemini@google-gemini plugin
|
|
67
|
+
| **codex 接入** | **二选一** | `codex@openai-codex` plugin(推荐)**或** `npm i -g @openai/codex` |
|
|
68
|
+
| **gemini 接入** | **二选一** | `gemini@google-gemini` plugin(推荐)**或** `npm i -g @google/gemini-cli` |
|
|
69
|
+
|
|
70
|
+
> **为什么是「二选一」**:ccgx-workflow 优先走 plugin(Claude Code 一键装、内置鉴权)。
|
|
71
|
+
> plugin 没装时降级到 `~/.claude/bin/codeagent-wrapper` shim 启动独立 CLI。两条路
|
|
72
|
+
> **任一**没装的,对应 `/ccg:*` 命令在调 codex/gemini 时会以 exit 127 退出并打印
|
|
73
|
+
> 安装提示。
|
|
69
74
|
|
|
70
75
|
### 一键安装
|
|
71
76
|
|
|
@@ -101,17 +106,42 @@ npx ccgx-workflow menu # 选择「安装 Claude Code」
|
|
|
101
106
|
|
|
102
107
|
---
|
|
103
108
|
|
|
104
|
-
## 启用多模型协作(codex / gemini
|
|
109
|
+
## 启用多模型协作(codex / gemini 接入)
|
|
110
|
+
|
|
111
|
+
ccgx-workflow 需要 codex + gemini 接入,每个走 **两条路之一**:
|
|
105
112
|
|
|
106
|
-
|
|
113
|
+
### 路径 A — Claude Code plugin(推荐)
|
|
107
114
|
|
|
108
|
-
|
|
115
|
+
在 Claude Code 内执行:
|
|
109
116
|
|
|
110
117
|
```
|
|
111
118
|
/plugin install codex@openai-codex
|
|
112
119
|
/plugin install gemini@google-gemini
|
|
113
120
|
```
|
|
114
121
|
|
|
122
|
+
一键安装,鉴权由 Claude Code 接管。模板直接 spawn plugin agent
|
|
123
|
+
(`Agent(codex:codex-rescue)` / `Agent(gemini:gemini-rescue)`),不经过 shim。
|
|
124
|
+
|
|
125
|
+
### 路径 B — 独立 CLI fallback
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
# codex CLI
|
|
129
|
+
npm i -g @openai/codex
|
|
130
|
+
codex login
|
|
131
|
+
|
|
132
|
+
# gemini CLI
|
|
133
|
+
npm i -g @google/gemini-cli
|
|
134
|
+
gemini auth login
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
plugin 没装时,模板通过 `~/.claude/bin/codeagent-wrapper`(一个调 `codex` /
|
|
138
|
+
`gemini` 的 Node shim)落地。鉴权 key 自己配。
|
|
139
|
+
|
|
140
|
+
### 混搭
|
|
141
|
+
|
|
142
|
+
可以 codex 走 plugin、gemini 走 CLI,反之亦然。ccgx-workflow 每次调用独立检测,
|
|
143
|
+
按可用路径择优。
|
|
144
|
+
|
|
115
145
|
`@` 后是 marketplace identifier。如果提示 marketplace 未配置,在 Claude Code 里执行 `/help plugin` 查看本地 marketplace 管理命令,或参考 [Claude Code plugin 官方文档](https://docs.claude.com/en/docs/claude-code/plugins)。
|
|
116
146
|
|
|
117
147
|
> 上游 plugin 仓库地址(用于排错 / 提 issue):
|
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 { d as diagnoseMcpConfig, i as isWindows, r as readClaudeCodeConfig, f as fixWindowsMcpConfig, w as writeClaudeCodeConfig, a as readCcgConfig, b as initI18n, c as i18n, s as showMainMenu, e as init, g as configMcp, v as version } from './shared/ccgx-workflow.
|
|
4
|
+
import { d as diagnoseMcpConfig, i as isWindows, r as readClaudeCodeConfig, f as fixWindowsMcpConfig, w as writeClaudeCodeConfig, a as readCcgConfig, b as initI18n, c as i18n, s as showMainMenu, e as init, g as configMcp, v as version } from './shared/ccgx-workflow.Bq9vAaEw.mjs';
|
|
5
5
|
import 'inquirer';
|
|
6
6
|
import 'ora';
|
|
7
7
|
import 'node:child_process';
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { h as collectSkills } from './shared/ccgx-workflow.
|
|
2
|
-
export { j as changeLanguage, F as checkForUpdates, H as collectInvocableSkills, G as compareVersions, l as createDefaultConfig, m as createDefaultRouting, I as generateCommandContent, n as getCcgDir, o as getConfigPath, D as getCurrentVersion, E as getLatestVersion, q as getWorkflowById, p as getWorkflowConfigs, c as i18n, e as init, b as initI18n, x as installAceTool, y as installAceToolRs, J as installSkillCommands, t as installWorkflows, B as migrateToV1_4_0, C as needsMigration, K as parseFrontmatter, a as readCcgConfig, s as showMainMenu, A as uninstallAceTool, z as uninstallWorkflows, u as update, k as writeCcgConfig } from './shared/ccgx-workflow.
|
|
1
|
+
import { h as collectSkills } from './shared/ccgx-workflow.Bq9vAaEw.mjs';
|
|
2
|
+
export { j as changeLanguage, F as checkForUpdates, H as collectInvocableSkills, G as compareVersions, l as createDefaultConfig, m as createDefaultRouting, I as generateCommandContent, n as getCcgDir, o as getConfigPath, D as getCurrentVersion, E as getLatestVersion, q as getWorkflowById, p as getWorkflowConfigs, c as i18n, e as init, b as initI18n, x as installAceTool, y as installAceToolRs, J as installSkillCommands, t as installWorkflows, B as migrateToV1_4_0, C as needsMigration, K as parseFrontmatter, a as readCcgConfig, s as showMainMenu, A as uninstallAceTool, z as uninstallWorkflows, u as update, k as writeCcgConfig } from './shared/ccgx-workflow.Bq9vAaEw.mjs';
|
|
3
3
|
import { existsSync, readFileSync, mkdirSync, writeFileSync, statSync, readdirSync } from 'node:fs';
|
|
4
4
|
import { join, dirname } from 'node:path';
|
|
5
5
|
import { homedir } from 'node:os';
|
|
@@ -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 = "1.0.
|
|
13
|
+
const version = "1.0.2";
|
|
14
14
|
|
|
15
15
|
function cmd(id, order, category, name, nameEn, description, descriptionEn, cmdOverride) {
|
|
16
16
|
return {
|
|
@@ -1012,7 +1012,6 @@ async function removeFastContextPrompt() {
|
|
|
1012
1012
|
await removeFromFile(join(homedir(), ".gemini", "GEMINI.md"));
|
|
1013
1013
|
}
|
|
1014
1014
|
|
|
1015
|
-
const EXPECTED_BINARY_VERSION = "5.10.0";
|
|
1016
1015
|
async function copyMdTemplates(ctx, srcDir, destDir, options = {}) {
|
|
1017
1016
|
const installed = [];
|
|
1018
1017
|
if (!await fs.pathExists(srcDir)) {
|
|
@@ -1256,55 +1255,6 @@ async function installHookFiles(ctx) {
|
|
|
1256
1255
|
function getLauncherName() {
|
|
1257
1256
|
return process.platform === "win32" ? "codeagent-wrapper.cmd" : "codeagent-wrapper";
|
|
1258
1257
|
}
|
|
1259
|
-
async function verifyBinary(installDir) {
|
|
1260
|
-
const binDir = join(installDir, "bin");
|
|
1261
|
-
const launcherPath = join(binDir, getLauncherName());
|
|
1262
|
-
if (!await fs.pathExists(launcherPath)) return false;
|
|
1263
|
-
try {
|
|
1264
|
-
const { execSync } = await import('node:child_process');
|
|
1265
|
-
execSync(`"${launcherPath}" --version`, { stdio: "pipe" });
|
|
1266
|
-
return true;
|
|
1267
|
-
} catch {
|
|
1268
|
-
return false;
|
|
1269
|
-
}
|
|
1270
|
-
}
|
|
1271
|
-
async function verifyBinaryVersion(installDir) {
|
|
1272
|
-
const binDir = join(installDir, "bin");
|
|
1273
|
-
const launcherPath = join(binDir, getLauncherName());
|
|
1274
|
-
try {
|
|
1275
|
-
const { execSync } = await import('node:child_process');
|
|
1276
|
-
const output = execSync(`"${launcherPath}" --version`, { stdio: "pipe" }).toString().trim();
|
|
1277
|
-
const version = output.replace(/^.*version\s*/, "");
|
|
1278
|
-
return version === EXPECTED_BINARY_VERSION;
|
|
1279
|
-
} catch {
|
|
1280
|
-
return false;
|
|
1281
|
-
}
|
|
1282
|
-
}
|
|
1283
|
-
function showBinaryDownloadWarning(binDir) {
|
|
1284
|
-
const launcherName = getLauncherName();
|
|
1285
|
-
const displayPath = process.platform === "win32" ? `${binDir.replace(/\//g, "\\")}\\${launcherName}` : `${binDir}/${launcherName}`;
|
|
1286
|
-
console.log();
|
|
1287
|
-
console.log(ansis.red.bold(` \u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557`));
|
|
1288
|
-
console.log(ansis.red.bold(` \u2551 \u26A0 codeagent-wrapper \u542F\u52A8\u5668\u5B89\u88C5\u5931\u8D25 \u2551`));
|
|
1289
|
-
console.log(ansis.red.bold(` \u2551 Launcher shim install failed (fs / package issue) \u2551`));
|
|
1290
|
-
console.log(ansis.red.bold(` \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D`));
|
|
1291
|
-
console.log();
|
|
1292
|
-
console.log(ansis.yellow(` \u591A\u6A21\u578B\u534F\u4F5C\u547D\u4EE4 (/ccg:workflow, /ccg:plan \u7B49) \u9700\u8981\u6B64\u542F\u52A8\u5668\u624D\u80FD\u5DE5\u4F5C\u3002`));
|
|
1293
|
-
console.log(ansis.yellow(` Multi-model commands require this launcher to work.`));
|
|
1294
|
-
console.log();
|
|
1295
|
-
console.log(ansis.cyan(` \u81EA\u52A8\u4FEE\u590D / Auto fix:`));
|
|
1296
|
-
console.log();
|
|
1297
|
-
console.log(ansis.white(` 1. \u6E05\u7F13\u5B58\u91CD\u88C5 / Clean & reinstall:`));
|
|
1298
|
-
console.log(ansis.cyan(` npm cache clean --force`));
|
|
1299
|
-
console.log(ansis.cyan(` npx ccg-workflow@latest`));
|
|
1300
|
-
console.log();
|
|
1301
|
-
console.log(ansis.white(` 2. \u68C0\u67E5\u8DEF\u5F84\u5199\u6743\u9650 / Check write permissions:`));
|
|
1302
|
-
console.log(ansis.cyan(` ${displayPath}`));
|
|
1303
|
-
console.log();
|
|
1304
|
-
console.log(ansis.gray(` v3.0.0+ \u542F\u52A8\u5668\u662F ~870 \u884C Node \u811A\u672C\uFF08\u65E0 Go binary \u4E0B\u8F7D\uFF09\uFF0C`));
|
|
1305
|
-
console.log(ansis.gray(` \u5931\u8D25\u901A\u5E38\u610F\u5473\u7740 fs \u6743\u9650\u95EE\u9898\u6216 npm \u5305\u635F\u574F\uFF0C\u800C\u975E\u7F51\u7EDC\u3002`));
|
|
1306
|
-
console.log();
|
|
1307
|
-
}
|
|
1308
1258
|
async function installShim(ctx) {
|
|
1309
1259
|
try {
|
|
1310
1260
|
const binDir = join(ctx.installDir, "bin");
|
|
@@ -1332,25 +1282,6 @@ async function installShim(ctx) {
|
|
|
1332
1282
|
await fs.chmod(destLauncher, 493);
|
|
1333
1283
|
}
|
|
1334
1284
|
}
|
|
1335
|
-
for (const stale of ["codeagent-wrapper.exe", "codeagent-wrapper"]) {
|
|
1336
|
-
const stalePath = join(binDir, stale);
|
|
1337
|
-
if (await fs.pathExists(stalePath)) {
|
|
1338
|
-
try {
|
|
1339
|
-
const { execSync } = await import('node:child_process');
|
|
1340
|
-
const out = execSync(`"${stalePath}" --version`, { stdio: "pipe" }).toString().trim();
|
|
1341
|
-
if (out.includes(EXPECTED_BINARY_VERSION)) {
|
|
1342
|
-
const stat = await fs.stat(stalePath);
|
|
1343
|
-
if (stat.size > 1e5) {
|
|
1344
|
-
await fs.remove(stalePath);
|
|
1345
|
-
}
|
|
1346
|
-
} else {
|
|
1347
|
-
await fs.remove(stalePath);
|
|
1348
|
-
}
|
|
1349
|
-
} catch {
|
|
1350
|
-
await fs.remove(stalePath);
|
|
1351
|
-
}
|
|
1352
|
-
}
|
|
1353
|
-
}
|
|
1354
1285
|
if (process.platform === "win32") {
|
|
1355
1286
|
const cmdMjs = destMjs.replace(/\//g, "\\");
|
|
1356
1287
|
const cmdPath = join(binDir, "codeagent-wrapper.cmd");
|
|
@@ -1598,36 +1529,6 @@ async function uninstallWorkflows(installDir, options) {
|
|
|
1598
1529
|
return result;
|
|
1599
1530
|
}
|
|
1600
1531
|
|
|
1601
|
-
const installer = {
|
|
1602
|
-
__proto__: null,
|
|
1603
|
-
collectInvocableSkills: collectInvocableSkills,
|
|
1604
|
-
collectSkills: collectSkills,
|
|
1605
|
-
computeSyncReport: computeSyncReport,
|
|
1606
|
-
getAllCommandIds: getAllCommandIds,
|
|
1607
|
-
getWorkflowById: getWorkflowById,
|
|
1608
|
-
getWorkflowConfigs: getWorkflowConfigs,
|
|
1609
|
-
injectConfigVariables: injectConfigVariables,
|
|
1610
|
-
installAceTool: installAceTool,
|
|
1611
|
-
installAceToolRs: installAceToolRs,
|
|
1612
|
-
installContextWeaver: installContextWeaver,
|
|
1613
|
-
installFastContext: installFastContext,
|
|
1614
|
-
installMcpServer: installMcpServer,
|
|
1615
|
-
installWorkflows: installWorkflows,
|
|
1616
|
-
parseFrontmatter: parseFrontmatter,
|
|
1617
|
-
removeFastContextPrompt: removeFastContextPrompt,
|
|
1618
|
-
showBinaryDownloadWarning: showBinaryDownloadWarning,
|
|
1619
|
-
syncMcpToCodex: syncMcpToCodex,
|
|
1620
|
-
syncMcpToGemini: syncMcpToGemini,
|
|
1621
|
-
uninstallAceTool: uninstallAceTool,
|
|
1622
|
-
uninstallContextWeaver: uninstallContextWeaver,
|
|
1623
|
-
uninstallFastContext: uninstallFastContext,
|
|
1624
|
-
uninstallMcpServer: uninstallMcpServer,
|
|
1625
|
-
uninstallWorkflows: uninstallWorkflows,
|
|
1626
|
-
verifyBinary: verifyBinary,
|
|
1627
|
-
verifyBinaryVersion: verifyBinaryVersion,
|
|
1628
|
-
writeFastContextPrompt: writeFastContextPrompt
|
|
1629
|
-
};
|
|
1630
|
-
|
|
1631
1532
|
async function syncMcpMirrors() {
|
|
1632
1533
|
const [codex, gemini] = await Promise.all([syncMcpToCodex(), syncMcpToGemini()]);
|
|
1633
1534
|
const synced = [];
|
|
@@ -4056,7 +3957,10 @@ ${exportCommand}
|
|
|
4056
3957
|
}
|
|
4057
3958
|
}
|
|
4058
3959
|
} else {
|
|
4059
|
-
|
|
3960
|
+
console.log();
|
|
3961
|
+
console.log(ansis.red.bold(" \u26A0 Launcher shim install failed"));
|
|
3962
|
+
console.log(ansis.yellow(" Try: npm cache clean --force && npx ccgx-workflow@latest"));
|
|
3963
|
+
console.log();
|
|
4060
3964
|
}
|
|
4061
3965
|
if (mcpProvider === "skip" || (mcpProvider === "ace-tool" || mcpProvider === "ace-tool-rs") && !aceToolToken || mcpProvider === "contextweaver" && !contextWeaverApiKey) {
|
|
4062
3966
|
console.log();
|
|
@@ -4078,6 +3982,18 @@ ${exportCommand}
|
|
|
4078
3982
|
console.log();
|
|
4079
3983
|
}
|
|
4080
3984
|
console.log();
|
|
3985
|
+
console.log(ansis.cyan.bold(" \u26A0 Multi-model prerequisites \u2014 install one path for codex + gemini"));
|
|
3986
|
+
console.log();
|
|
3987
|
+
console.log(` ${ansis.green("\u2605")} ${ansis.bold("Plugin (recommended, one-click in Claude Code):")}`);
|
|
3988
|
+
console.log(` ${ansis.cyan("/plugins install codex@openai-codex")}`);
|
|
3989
|
+
console.log(` ${ansis.cyan("/plugins install gemini@google-gemini")}`);
|
|
3990
|
+
console.log();
|
|
3991
|
+
console.log(` ${ansis.green("\u2606")} ${ansis.bold("CLI fallback (standalone binaries):")}`);
|
|
3992
|
+
console.log(` ${ansis.cyan("npm i -g @openai/codex")} ${ansis.gray("# then: codex login")}`);
|
|
3993
|
+
console.log(` ${ansis.cyan("npm i -g @google/gemini-cli")} ${ansis.gray("# then: gemini auth")}`);
|
|
3994
|
+
console.log();
|
|
3995
|
+
console.log(ansis.gray(" Without either, /ccg:* commands invoking codex/gemini will exit 127."));
|
|
3996
|
+
console.log();
|
|
4081
3997
|
} catch (error) {
|
|
4082
3998
|
spinner.fail(ansis.red(i18n.t("init:installFailed")));
|
|
4083
3999
|
console.error(error);
|
|
@@ -4474,15 +4390,6 @@ async function performUpdate(fromVersion, toVersion, isNewVersion) {
|
|
|
4474
4390
|
} catch {
|
|
4475
4391
|
}
|
|
4476
4392
|
}
|
|
4477
|
-
if (!await verifyBinary(installDir)) {
|
|
4478
|
-
showBinaryDownloadWarning(join(installDir, "bin"));
|
|
4479
|
-
} else {
|
|
4480
|
-
const { verifyBinaryVersion } = await Promise.resolve().then(function () { return installer; });
|
|
4481
|
-
const versionOk = await verifyBinaryVersion(installDir);
|
|
4482
|
-
if (!versionOk) {
|
|
4483
|
-
showBinaryDownloadWarning(join(installDir, "bin"));
|
|
4484
|
-
}
|
|
4485
|
-
}
|
|
4486
4393
|
} else {
|
|
4487
4394
|
console.log();
|
|
4488
4395
|
console.log(ansis.yellow.bold(" \u26A0 \u6B63\u5728\u6062\u590D\u65E7\u7248\u672C\u6587\u4EF6 / Restoring old version files..."));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ccgx-workflow",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "Multi-model orchestration for Claude Code. Codex + Gemini parallel collaboration with fresh-context subagent protocols, OS-level process isolation, and Plan-Critic-Verify quality tiers. Successor to ccg-workflow.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "pnpm@10.17.1",
|
|
@@ -65,6 +65,7 @@
|
|
|
65
65
|
"templates/commands/spec-plan.md",
|
|
66
66
|
"templates/commands/spec-impl.md",
|
|
67
67
|
"templates/commands/spec-review.md",
|
|
68
|
+
"templates/commands/team.md",
|
|
68
69
|
"templates/commands/team-exec.md",
|
|
69
70
|
"templates/commands/codex-exec.md",
|
|
70
71
|
"templates/commands/context.md",
|