ccg-workflow 1.7.47 → 1.7.48

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
@@ -41,6 +41,34 @@ npx ccg-workflow
41
41
  | `/ccg:worktree` | Worktree 管理 |
42
42
  | `/ccg:init` | 初始化 CLAUDE.md |
43
43
  | `/ccg:enhance` | Prompt 增强 |
44
+ | `/ccg:spec-init` | 初始化 OpenSpec 环境 |
45
+ | `/ccg:spec-research` | 需求 → 约束集 |
46
+ | `/ccg:spec-plan` | 约束 → 零决策计划 |
47
+ | `/ccg:spec-impl` | 按计划执行 + 归档 |
48
+ | `/ccg:spec-review` | 双模型交叉审查 |
49
+
50
+ ### OpenSpec 规范驱动(v1.7.48)
51
+
52
+ 集成 [OpenSpec](https://github.com/fission-ai/openspec),把需求变成约束,让 AI 没法自由发挥:
53
+
54
+ ```bash
55
+ # 初始化
56
+ /ccg:spec-init
57
+
58
+ # 研究需求 → 输出约束集
59
+ /ccg:spec-research 实现用户认证
60
+
61
+ # 并行分析 → 零决策计划
62
+ /ccg:spec-plan
63
+
64
+ # 按计划执行
65
+ /ccg:spec-impl
66
+
67
+ # 独立审查(随时可用)
68
+ /ccg:spec-review
69
+ ```
70
+
71
+ 每阶段之间可 `/clear`,状态存在 `openspec/` 目录,不怕上下文爆。
44
72
 
45
73
  ### 规划与执行分离
46
74
 
@@ -157,4 +185,4 @@ MIT
157
185
 
158
186
  ---
159
187
 
160
- v1.7.47 | [Issues](https://github.com/fengshao1227/ccg-workflow/issues)
188
+ v1.7.48 | [Issues](https://github.com/fengshao1227/ccg-workflow/issues)
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, s as showMainMenu, i as init, E as configMcp, F as version, a as i18n } from './shared/ccg-workflow.DrIczHh4.mjs';
4
+ import { z as diagnoseMcpConfig, A as isWindows, B as readClaudeCodeConfig, C as fixWindowsMcpConfig, D as writeClaudeCodeConfig, r as readCcgConfig, b as initI18n, s as showMainMenu, i as init, E as configMcp, F as version, a as i18n } from './shared/ccg-workflow.e4y82GtN.mjs';
5
5
  import 'inquirer';
6
6
  import 'node:child_process';
7
7
  import 'node:util';
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.DrIczHh4.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.e4y82GtN.mjs';
2
2
  import 'ansis';
3
3
  import 'inquirer';
4
4
  import 'node:child_process';
@@ -10,7 +10,7 @@ import i18next from 'i18next';
10
10
  import ora from 'ora';
11
11
  import { parse, stringify } from 'smol-toml';
12
12
 
13
- const version = "1.7.47";
13
+ const version = "1.7.48";
14
14
 
15
15
  function isWindows() {
16
16
  return process.platform === "win32";
@@ -356,6 +356,61 @@ const WORKFLOW_CONFIGS = [
356
356
  order: 23,
357
357
  description: "\u7BA1\u7406 Git worktree",
358
358
  descriptionEn: "Manage Git worktree"
359
+ },
360
+ {
361
+ id: "spec-init",
362
+ name: "OpenSpec \u521D\u59CB\u5316",
363
+ nameEn: "OpenSpec Init",
364
+ category: "spec",
365
+ commands: ["spec-init"],
366
+ defaultSelected: true,
367
+ order: 30,
368
+ description: "\u521D\u59CB\u5316 OpenSpec \u73AF\u5883 + \u9A8C\u8BC1\u591A\u6A21\u578B MCP \u5DE5\u5177",
369
+ descriptionEn: "Initialize OpenSpec environment with multi-model MCP validation"
370
+ },
371
+ {
372
+ id: "spec-research",
373
+ name: "\u9700\u6C42\u7814\u7A76",
374
+ nameEn: "Spec Research",
375
+ category: "spec",
376
+ commands: ["spec-research"],
377
+ defaultSelected: true,
378
+ order: 31,
379
+ description: "\u9700\u6C42 \u2192 \u7EA6\u675F\u96C6\uFF08\u5E76\u884C\u63A2\u7D22 + OpenSpec \u63D0\u6848\uFF09",
380
+ descriptionEn: "Transform requirements into constraint sets via parallel exploration"
381
+ },
382
+ {
383
+ id: "spec-plan",
384
+ name: "\u96F6\u51B3\u7B56\u89C4\u5212",
385
+ nameEn: "Spec Plan",
386
+ category: "spec",
387
+ commands: ["spec-plan"],
388
+ defaultSelected: true,
389
+ order: 32,
390
+ description: "\u591A\u6A21\u578B\u5206\u6790 \u2192 \u6D88\u9664\u6B67\u4E49 \u2192 \u96F6\u51B3\u7B56\u53EF\u6267\u884C\u8BA1\u5212",
391
+ descriptionEn: "Refine proposals into zero-decision executable plans"
392
+ },
393
+ {
394
+ id: "spec-impl",
395
+ name: "\u89C4\u8303\u9A71\u52A8\u5B9E\u73B0",
396
+ nameEn: "Spec Implementation",
397
+ category: "spec",
398
+ commands: ["spec-impl"],
399
+ defaultSelected: true,
400
+ order: 33,
401
+ description: "\u6309\u89C4\u8303\u6267\u884C + \u591A\u6A21\u578B\u534F\u4F5C + \u5F52\u6863",
402
+ descriptionEn: "Execute changes via multi-model collaboration with spec compliance"
403
+ },
404
+ {
405
+ id: "spec-review",
406
+ name: "\u5F52\u6863\u524D\u5BA1\u67E5",
407
+ nameEn: "Spec Review",
408
+ category: "spec",
409
+ commands: ["spec-review"],
410
+ defaultSelected: true,
411
+ order: 34,
412
+ description: "\u53CC\u6A21\u578B\u4EA4\u53C9\u5BA1\u67E5 \u2192 Critical \u5FC5\u987B\u4FEE\u590D \u2192 \u5141\u8BB8\u5F52\u6863",
413
+ descriptionEn: "Multi-model compliance review before archiving"
359
414
  }
360
415
  ];
361
416
  function getWorkflowConfigs() {
@@ -1987,56 +2042,85 @@ async function performUpdate(fromVersion, toVersion, isNewVersion) {
1987
2042
 
1988
2043
  const execAsync = promisify(exec);
1989
2044
  async function showMainMenu() {
1990
- console.log();
1991
- console.log(ansis.cyan.bold(` CCG - Claude + Codex + Gemini`));
1992
- console.log(ansis.gray(" Multi-Model Collaboration System"));
1993
- console.log();
1994
- const { action } = await inquirer.prompt([{
1995
- type: "list",
1996
- name: "action",
1997
- message: i18n.t("menu:title"),
1998
- choices: [
1999
- { name: `${ansis.green("\u279C")} ${i18n.t("menu:options.init")}`, value: "init" },
2000
- { name: `${ansis.blue("\u279C")} ${i18n.t("menu:options.update")}`, value: "update" },
2001
- { name: `${ansis.cyan("\u2699")} \u914D\u7F6E MCP`, value: "config-mcp" },
2002
- { name: `${ansis.magenta("\u279C")} ${i18n.t("menu:options.uninstall")}`, value: "uninstall" },
2003
- { name: `${ansis.yellow("?")} ${i18n.t("menu:options.help")}`, value: "help" },
2004
- new inquirer.Separator(),
2005
- { name: `${ansis.red("\u2715")} ${i18n.t("menu:options.exit")}`, value: "exit" }
2006
- ]
2007
- }]);
2008
- switch (action) {
2009
- case "init":
2010
- await init();
2011
- break;
2012
- case "update":
2013
- await update();
2014
- break;
2015
- case "config-mcp":
2016
- await configMcp();
2017
- break;
2018
- case "uninstall":
2019
- await uninstall();
2020
- break;
2021
- case "help":
2022
- showHelp();
2023
- break;
2024
- case "exit":
2025
- console.log(ansis.gray("Goodbye!"));
2026
- break;
2045
+ while (true) {
2046
+ console.log();
2047
+ console.log(ansis.cyan.bold(` CCG - Claude + Codex + Gemini`));
2048
+ console.log(ansis.gray(" Multi-Model Collaboration System"));
2049
+ console.log();
2050
+ const { action } = await inquirer.prompt([{
2051
+ type: "list",
2052
+ name: "action",
2053
+ message: i18n.t("menu:title"),
2054
+ choices: [
2055
+ { name: `${ansis.green("\u279C")} ${i18n.t("menu:options.init")}`, value: "init" },
2056
+ { name: `${ansis.blue("\u279C")} ${i18n.t("menu:options.update")}`, value: "update" },
2057
+ { name: `${ansis.cyan("\u2699")} \u914D\u7F6E MCP`, value: "config-mcp" },
2058
+ { name: `${ansis.magenta("\u279C")} ${i18n.t("menu:options.uninstall")}`, value: "uninstall" },
2059
+ { name: `${ansis.yellow("?")} ${i18n.t("menu:options.help")}`, value: "help" },
2060
+ new inquirer.Separator(),
2061
+ { name: `${ansis.red("\u2715")} ${i18n.t("menu:options.exit")}`, value: "exit" }
2062
+ ]
2063
+ }]);
2064
+ switch (action) {
2065
+ case "init":
2066
+ await init();
2067
+ break;
2068
+ case "update":
2069
+ await update();
2070
+ break;
2071
+ case "config-mcp":
2072
+ await configMcp();
2073
+ break;
2074
+ case "uninstall":
2075
+ await uninstall();
2076
+ break;
2077
+ case "help":
2078
+ showHelp();
2079
+ break;
2080
+ case "exit":
2081
+ console.log(ansis.gray("Goodbye!"));
2082
+ return;
2083
+ }
2084
+ console.log();
2085
+ await inquirer.prompt([{
2086
+ type: "input",
2087
+ name: "continue",
2088
+ message: ansis.gray("\u6309 Enter \u8FD4\u56DE\u4E3B\u83DC\u5355...")
2089
+ }]);
2027
2090
  }
2028
2091
  }
2029
2092
  function showHelp() {
2030
2093
  console.log();
2031
2094
  console.log(ansis.cyan.bold(i18n.t("menu:help.title")));
2032
2095
  console.log();
2033
- console.log(` ${ansis.green("/ccg:dev")} ${i18n.t("menu:help.descriptions.dev")}`);
2096
+ console.log(ansis.yellow.bold(" \u5F00\u53D1\u5DE5\u4F5C\u6D41:"));
2097
+ console.log(` ${ansis.green("/ccg:workflow")} \u5B8C\u65746\u9636\u6BB5\u5F00\u53D1\u5DE5\u4F5C\u6D41`);
2098
+ console.log(` ${ansis.green("/ccg:plan")} \u591A\u6A21\u578B\u534F\u4F5C\u89C4\u5212\uFF08Phase 1-2\uFF09`);
2099
+ console.log(` ${ansis.green("/ccg:execute")} \u591A\u6A21\u578B\u534F\u4F5C\u6267\u884C\uFF08Phase 3-5\uFF09`);
2034
2100
  console.log(` ${ansis.green("/ccg:frontend")} ${i18n.t("menu:help.descriptions.frontend")}`);
2035
2101
  console.log(` ${ansis.green("/ccg:backend")} ${i18n.t("menu:help.descriptions.backend")}`);
2036
- console.log(` ${ansis.green("/ccg:review")} ${i18n.t("menu:help.descriptions.review")}`);
2102
+ console.log(` ${ansis.green("/ccg:feat")} \u667A\u80FD\u529F\u80FD\u5F00\u53D1`);
2037
2103
  console.log(` ${ansis.green("/ccg:analyze")} ${i18n.t("menu:help.descriptions.analyze")}`);
2104
+ console.log(` ${ansis.green("/ccg:debug")} \u95EE\u9898\u8BCA\u65AD + \u4FEE\u590D`);
2105
+ console.log(` ${ansis.green("/ccg:optimize")} \u6027\u80FD\u4F18\u5316`);
2106
+ console.log(` ${ansis.green("/ccg:test")} \u6D4B\u8BD5\u751F\u6210`);
2107
+ console.log(` ${ansis.green("/ccg:review")} ${i18n.t("menu:help.descriptions.review")}`);
2108
+ console.log();
2109
+ console.log(ansis.yellow.bold(" OpenSpec \u89C4\u8303\u9A71\u52A8:"));
2110
+ console.log(` ${ansis.green("/ccg:spec-init")} \u521D\u59CB\u5316 OpenSpec \u73AF\u5883`);
2111
+ console.log(` ${ansis.green("/ccg:spec-research")} \u9700\u6C42\u7814\u7A76 \u2192 \u7EA6\u675F\u96C6`);
2112
+ console.log(` ${ansis.green("/ccg:spec-plan")} \u591A\u6A21\u578B\u5206\u6790 \u2192 \u96F6\u51B3\u7B56\u8BA1\u5212`);
2113
+ console.log(` ${ansis.green("/ccg:spec-impl")} \u89C4\u8303\u9A71\u52A8\u5B9E\u73B0`);
2114
+ console.log(` ${ansis.green("/ccg:spec-review")} \u5F52\u6863\u524D\u53CC\u6A21\u578B\u5BA1\u67E5`);
2115
+ console.log();
2116
+ console.log(ansis.yellow.bold(" Git \u5DE5\u5177:"));
2038
2117
  console.log(` ${ansis.green("/ccg:commit")} ${i18n.t("menu:help.descriptions.commit")}`);
2039
2118
  console.log(` ${ansis.green("/ccg:rollback")} ${i18n.t("menu:help.descriptions.rollback")}`);
2119
+ console.log(` ${ansis.green("/ccg:clean-branches")} \u6E05\u7406\u5DF2\u5408\u5E76\u5206\u652F`);
2120
+ console.log(` ${ansis.green("/ccg:worktree")} Git Worktree \u7BA1\u7406`);
2121
+ console.log();
2122
+ console.log(ansis.yellow.bold(" \u9879\u76EE\u7BA1\u7406:"));
2123
+ console.log(` ${ansis.green("/ccg:init")} \u521D\u59CB\u5316\u9879\u76EE CLAUDE.md`);
2040
2124
  console.log();
2041
2125
  console.log(ansis.gray(i18n.t("menu:help.hint")));
2042
2126
  console.log();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ccg-workflow",
3
- "version": "1.7.47",
3
+ "version": "1.7.48",
4
4
  "description": "Claude-Codex-Gemini 多模型协作系统 - 智能路由多模型开发工作流",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@10.17.1",