- fix: update no longer resets mcpProvider to 'skip' — reads from existing config (#124) - feat: init Step 4/4 adds confirm for Impeccable frontend tools, default OFF (#125) - feat: add X (Twitter) @CCG_Workflow badge + demo tweet link to README - chore: bump version to 2.1.11
This commit is contained in:
1 parent
ad56c63400
commit
ea4cf5d2bc
11 files changed
+70
-6
No files matched your search
@@ -7,6 +7,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
---
|
||||
|
||||
## [2.1.11] - 2026-03-31
|
||||
|
||||
### 🐛 修复
|
||||
|
||||
- **更新后 MCP 提示词显示未配置**(#124):`update` 无条件传 `--skip-mcp` 导致 `mcpProvider` 被覆盖为 `skip`,已配置 MCP 的用户更新后提示词回退为"未配置"。修复:从已有 `config.toml` 恢复 `mcp.provider`,仅在无历史配置时才 fallback
|
||||
|
||||
### ✨ 新功能
|
||||
|
||||
- **Impeccable 命令可选安装**(#125):init Step 4/4 新增 confirm 提示,20 个前端设计命令(polish/audit/animate 等)默认不安装,需要的用户自行勾选。update 时保留已有选择
|
||||
- **X (Twitter) 社区入口**:README header 加 `@CCG_Workflow` 徽章 + 架构图下方 demo 推文链接 + Contact 区 Twitter 入口
|
||||
|
||||
---
|
||||
|
||||
## [2.1.1] - 2026-03-31
|
||||
|
||||
### 🐛 修复
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
> [根目录](../CLAUDE.md) > **skills-v2**
|
||||
|
||||
**Last Updated**: 2026-03-31 (v2.1.1)
|
||||
**Last Updated**: 2026-03-31 (v2.1.11)
|
||||
|
||||
---
|
||||
|
||||
@@ -10,6 +10,11 @@
|
||||
|
||||
> 完整变更历史请查看 [CHANGELOG.md](./CHANGELOG.md)
|
||||
|
||||
### 2026-03-31 (v2.1.11)
|
||||
- 🐛 **更新后 MCP 提示词显示未配置**(#124):`update` 无条件传 `--skip-mcp` 导致 `mcpProvider` 被覆盖,修复为从已有配置恢复
|
||||
- ✨ **Impeccable 命令可选安装**(#125):init 新增 confirm 提示,20 个前端设计命令默认不安装
|
||||
- ✨ **X (Twitter) 社区入口**:README 加 `@CCG_Workflow` 徽章 + demo 推文 + Contact 区
|
||||
|
||||
### 2026-03-31 (v2.1.1)
|
||||
- 🐛 **Skill Registry 命令 frontmatter 修复**:`generateCommandContent()` 生成的 27 个 command 文件补上 YAML frontmatter,修复 CC 命令索引级联失败
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
[](https://opensource.org/licenses/MIT)
|
||||
[](https://claude.ai/code)
|
||||
[]()
|
||||
[](https://x.com/CCG_Workflow)
|
||||
|
||||
[简体中文](./README.zh-CN.md) | English
|
||||
|
||||
@@ -37,6 +38,8 @@ Codex Gemini
|
||||
|
||||
External models have no write access — they only return patches, which Claude reviews before applying.
|
||||
|
||||
> **🎬 [See CCG in action →](https://x.com/CCG_Workflow/status/2038923720610463876)** — Real multi-model collaboration demo on X
|
||||
|
||||
## Quick Start
|
||||
|
||||
### Prerequisites
|
||||
@@ -349,6 +352,7 @@ Looking for a place to start? Check out issues labeled [`good first issue`](http
|
||||
|
||||
## Contact
|
||||
|
||||
- **X (Twitter)**: [@CCG_Workflow](https://x.com/CCG_Workflow) — Updates, demos, and tips
|
||||
- **Email**: [fengshao1227@gmail.com](mailto:fengshao1227@gmail.com) — Sponsorship, collaboration, or development ideas
|
||||
- **Issues**: [GitHub Issues](https://github.com/fengshao1227/ccg-workflow/issues) — Bug reports and feature requests
|
||||
- **Discussions**: [GitHub Discussions](https://github.com/fengshao1227/ccg-workflow/discussions) — Questions and community chat
|
||||
@@ -359,4 +363,4 @@ MIT
|
||||
|
||||
---
|
||||
|
||||
v1.7.86 | [Issues](https://github.com/fengshao1227/ccg-workflow/issues) | [Contributing](./CONTRIBUTING.md)
|
||||
v2.1.11 | [Issues](https://github.com/fengshao1227/ccg-workflow/issues) | [Contributing](./CONTRIBUTING.md)
|
||||
+5
-1
@@ -6,6 +6,7 @@
|
||||
[](https://opensource.org/licenses/MIT)
|
||||
[](https://claude.ai/code)
|
||||
[]()
|
||||
[](https://x.com/CCG_Workflow)
|
||||
|
||||
简体中文 | [English](./README.md)
|
||||
|
||||
@@ -37,6 +38,8 @@ Codex Gemini
|
||||
|
||||
外部模型无写入权限,仅返回 Patch,由 Claude 审核后应用。
|
||||
|
||||
> **🎬 [查看 CCG 实战演示 →](https://x.com/CCG_Workflow/status/2038923720610463876)** — X 上的多模型协作真实案例
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 前置条件
|
||||
@@ -349,6 +352,7 @@ npm uninstall -g ccg-workflow # npm 全局用户需额外执行
|
||||
|
||||
## 联系方式
|
||||
|
||||
- **X (Twitter)**: [@CCG_Workflow](https://x.com/CCG_Workflow) — 更新动态、实战演示、使用技巧
|
||||
- **邮箱**: [fengshao1227@gmail.com](mailto:fengshao1227@gmail.com) — 赞助、合作洽谈、开发交流
|
||||
- **Issues**: [GitHub Issues](https://github.com/fengshao1227/ccg-workflow/issues) — Bug 反馈与功能建议
|
||||
- **讨论区**: [GitHub Discussions](https://github.com/fengshao1227/ccg-workflow/discussions) — 问题咨询与社区交流
|
||||
@@ -359,4 +363,4 @@ MIT
|
||||
|
||||
---
|
||||
|
||||
v1.7.86 | [Issues](https://github.com/fengshao1227/ccg-workflow/issues) | [参与贡献](./CONTRIBUTING.md)
|
||||
v2.1.11 | [Issues](https://github.com/fengshao1227/ccg-workflow/issues) | [参与贡献](./CONTRIBUTING.md)
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ccg-workflow",
|
||||
"version": "2.1.1",
|
||||
"version": "2.1.11",
|
||||
"description": "Claude + Codex + Gemini multi-model collaboration system - smart routing development workflow",
|
||||
"type": "module",
|
||||
"packageManager": "pnpm@10.17.1",
|
||||
|
||||
+20
-2
@@ -210,6 +210,7 @@ export async function init(options: InitOptions = {}): Promise<void> {
|
||||
|
||||
// Performance mode selection
|
||||
let liteMode = false
|
||||
let skipImpeccable = false
|
||||
|
||||
// MCP Tool Selection
|
||||
let mcpProvider = 'ace-tool'
|
||||
@@ -339,7 +340,10 @@ export async function init(options: InitOptions = {}): Promise<void> {
|
||||
// Step 3/4: MCP Tools (checkbox multi-select)
|
||||
// ═══════════════════════════════════════════════════════
|
||||
if (options.skipMcp) {
|
||||
mcpProvider = 'skip'
|
||||
// Fix #124: preserve existing MCP provider from config during update
|
||||
// instead of unconditionally setting to 'skip'
|
||||
const existingConfig = await readCcgConfig()
|
||||
mcpProvider = existingConfig?.mcp?.provider || 'skip'
|
||||
}
|
||||
else if (!options.skipPrompt) {
|
||||
console.log()
|
||||
@@ -522,13 +526,25 @@ export async function init(options: InitOptions = {}): Promise<void> {
|
||||
}])
|
||||
|
||||
liteMode = perfMode === 'lite'
|
||||
|
||||
// Impeccable frontend design commands (optional, default: not installed)
|
||||
const { includeImpeccable } = await inquirer.prompt([{
|
||||
type: 'confirm',
|
||||
name: 'includeImpeccable',
|
||||
message: i18n.t('init:commands.includeImpeccable'),
|
||||
default: false,
|
||||
}])
|
||||
skipImpeccable = !includeImpeccable
|
||||
}
|
||||
else {
|
||||
// In non-interactive mode (update), preserve existing liteMode setting
|
||||
// In non-interactive mode (update), preserve existing settings
|
||||
const existingConfig = await readCcgConfig()
|
||||
if (existingConfig?.performance?.liteMode !== undefined) {
|
||||
liteMode = existingConfig.performance.liteMode
|
||||
}
|
||||
if (existingConfig?.performance?.skipImpeccable !== undefined) {
|
||||
skipImpeccable = existingConfig.performance.skipImpeccable
|
||||
}
|
||||
}
|
||||
|
||||
// Build routing config (user-selectable since v2.1.0)
|
||||
@@ -634,6 +650,7 @@ export async function init(options: InitOptions = {}): Promise<void> {
|
||||
installedWorkflows: selectedWorkflows,
|
||||
mcpProvider,
|
||||
liteMode,
|
||||
skipImpeccable,
|
||||
})
|
||||
|
||||
// Save config FIRST - ensure it's created even if installation fails
|
||||
@@ -645,6 +662,7 @@ export async function init(options: InitOptions = {}): Promise<void> {
|
||||
routing,
|
||||
liteMode,
|
||||
mcpProvider,
|
||||
skipImpeccable,
|
||||
})
|
||||
|
||||
// Install selected MCP tools (multiple can be installed)
|
||||
|
||||
@@ -208,6 +208,9 @@ const zhCN = {
|
||||
standardOption: '标准模式(含 Web UI 实时监控)',
|
||||
liteOption: '轻量模式(无 Web UI,响应更快)',
|
||||
},
|
||||
commands: {
|
||||
includeImpeccable: '安装 Impeccable 前端设计工具?(20 个 UI/UX 命令:polish/audit/animate 等)',
|
||||
},
|
||||
hooks: {
|
||||
title: 'codeagent-wrapper 自动授权',
|
||||
description: '使用 Hook 自动授权 codeagent-wrapper 命令',
|
||||
@@ -682,6 +685,9 @@ const en: typeof zhCN = {
|
||||
standardOption: 'Standard (with Web UI real-time monitoring)',
|
||||
liteOption: 'Lite (no Web UI, faster response)',
|
||||
},
|
||||
commands: {
|
||||
includeImpeccable: 'Install Impeccable frontend design tools? (20 UI/UX commands: polish/audit/animate etc.)',
|
||||
},
|
||||
hooks: {
|
||||
title: 'codeagent-wrapper auto-authorization',
|
||||
description: 'Use Hook to auto-authorize codeagent-wrapper commands',
|
||||
|
||||
@@ -52,6 +52,7 @@ export interface CcgConfig {
|
||||
}
|
||||
performance?: {
|
||||
liteMode?: boolean // 轻量模式:禁用 Web UI,更快响应
|
||||
skipImpeccable?: boolean // 跳过 Impeccable 前端设计命令安装
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -46,6 +46,7 @@ export function createDefaultConfig(options: {
|
||||
installedWorkflows: string[]
|
||||
mcpProvider?: string
|
||||
liteMode?: boolean
|
||||
skipImpeccable?: boolean
|
||||
}): CcgConfig {
|
||||
return {
|
||||
general: {
|
||||
@@ -68,6 +69,7 @@ export function createDefaultConfig(options: {
|
||||
},
|
||||
performance: {
|
||||
liteMode: options.liteMode || false,
|
||||
skipImpeccable: options.skipImpeccable || false,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,6 +74,7 @@ interface InstallConfig {
|
||||
}
|
||||
liteMode: boolean
|
||||
mcpProvider: string
|
||||
skipImpeccable?: boolean
|
||||
}
|
||||
|
||||
interface InstallContext {
|
||||
@@ -451,11 +452,17 @@ async function installSkillGeneratedCommands(ctx: InstallContext): Promise<void>
|
||||
}
|
||||
}
|
||||
|
||||
const skipCategories: import('./skill-registry').SkillCategory[] = []
|
||||
if (ctx.config.skipImpeccable) {
|
||||
skipCategories.push('impeccable')
|
||||
}
|
||||
|
||||
const generated = await installSkillCommands(
|
||||
skillsTemplateDir,
|
||||
skillsInstallDir,
|
||||
commandsDir,
|
||||
existingCommandNames,
|
||||
skipCategories,
|
||||
)
|
||||
|
||||
if (generated.length > 0) {
|
||||
@@ -662,6 +669,7 @@ export async function installWorkflows(
|
||||
}
|
||||
liteMode?: boolean
|
||||
mcpProvider?: string
|
||||
skipImpeccable?: boolean
|
||||
},
|
||||
): Promise<InstallResult> {
|
||||
const ctx: InstallContext = {
|
||||
@@ -676,6 +684,7 @@ export async function installWorkflows(
|
||||
},
|
||||
liteMode: config?.liteMode || false,
|
||||
mcpProvider: config?.mcpProvider || 'ace-tool',
|
||||
skipImpeccable: config?.skipImpeccable || false,
|
||||
},
|
||||
templateDir: join(PACKAGE_ROOT, 'templates'),
|
||||
result: {
|
||||
|
||||
@@ -280,8 +280,10 @@ export async function installSkillCommands(
|
||||
skillsInstallDir: string,
|
||||
commandsDir: string,
|
||||
existingCommandNames: Set<string>,
|
||||
skipCategories: SkillCategory[] = [],
|
||||
): Promise<string[]> {
|
||||
const invocableSkills = collectInvocableSkills(skillsTemplateDir)
|
||||
.filter(s => !skipCategories.includes(s.category))
|
||||
const generated: string[] = []
|
||||
|
||||
await fs.ensureDir(commandsDir)
|
||||
|
||||
Reference in new issue
Block a user