mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-02-14 02:42:04 +08:00
CCW Skill (new): - Stateless workflow orchestrator with intent classification - 6 workflow combinations: rapid, full, coupled, bugfix, issue, ui - External configuration: intent-rules.json, workflow-chains.json - Implicit CLI tool injection (Gemini/Qwen/Codex) - TODO tracking integration for workflow progress CCW-Help Skill (refactored from command-guide): - Renamed command-guide → ccw-help - Removed reference folder duplication - Source paths now relative from index/ (../../../commands/...) - Added all-agents.json index - Simplified SKILL.md following CCW pattern
337 lines
9.9 KiB
Markdown
337 lines
9.9 KiB
Markdown
# Intent Classification Specification
|
||
|
||
CCW 意图分类规范:定义如何从用户输入识别任务意图并选择最优工作流。
|
||
|
||
## Classification Hierarchy
|
||
|
||
```
|
||
Intent Classification
|
||
├── Priority 1: Explicit Commands
|
||
│ └── /workflow:*, /issue:*, /memory:*, /task:*
|
||
├── Priority 2: Bug Keywords
|
||
│ ├── Hotfix: urgent + bug keywords
|
||
│ └── Standard: bug keywords only
|
||
├── Priority 3: Issue Batch
|
||
│ └── Multiple + fix keywords
|
||
├── Priority 4: Exploration
|
||
│ └── Uncertainty keywords
|
||
├── Priority 5: UI/Design
|
||
│ └── Visual/component keywords
|
||
└── Priority 6: Complexity Fallback
|
||
├── High → Coupled
|
||
├── Medium → Rapid
|
||
└── Low → Rapid
|
||
```
|
||
|
||
## Keyword Patterns
|
||
|
||
### Bug Detection
|
||
|
||
```javascript
|
||
const BUG_PATTERNS = {
|
||
core: /\b(fix|bug|error|issue|crash|broken|fail|wrong|incorrect|修复|报错|错误|问题|异常|崩溃|失败)\b/i,
|
||
|
||
urgency: /\b(hotfix|urgent|production|critical|emergency|asap|immediately|紧急|生产|线上|马上|立即)\b/i,
|
||
|
||
symptoms: /\b(not working|doesn't work|can't|cannot|won't|stopped|stopped working|无法|不能|不工作)\b/i,
|
||
|
||
errors: /\b(\d{3}\s*error|exception|stack\s*trace|undefined|null\s*pointer|timeout)\b/i
|
||
}
|
||
|
||
function detectBug(text) {
|
||
const isBug = BUG_PATTERNS.core.test(text) || BUG_PATTERNS.symptoms.test(text)
|
||
const isUrgent = BUG_PATTERNS.urgency.test(text)
|
||
const hasError = BUG_PATTERNS.errors.test(text)
|
||
|
||
if (!isBug && !hasError) return null
|
||
|
||
return {
|
||
type: 'bugfix',
|
||
mode: isUrgent ? 'hotfix' : 'standard',
|
||
confidence: (isBug && hasError) ? 'high' : 'medium'
|
||
}
|
||
}
|
||
```
|
||
|
||
### Issue Batch Detection
|
||
|
||
```javascript
|
||
const ISSUE_PATTERNS = {
|
||
batch: /\b(issues?|batch|queue|multiple|several|all|多个|批量|一系列|所有|这些)\b/i,
|
||
action: /\b(fix|resolve|handle|process|处理|解决|修复)\b/i,
|
||
source: /\b(github|jira|linear|backlog|todo|待办)\b/i
|
||
}
|
||
|
||
function detectIssueBatch(text) {
|
||
const hasBatch = ISSUE_PATTERNS.batch.test(text)
|
||
const hasAction = ISSUE_PATTERNS.action.test(text)
|
||
const hasSource = ISSUE_PATTERNS.source.test(text)
|
||
|
||
if (hasBatch && hasAction) {
|
||
return {
|
||
type: 'issue',
|
||
confidence: hasSource ? 'high' : 'medium'
|
||
}
|
||
}
|
||
return null
|
||
}
|
||
```
|
||
|
||
### Exploration Detection
|
||
|
||
```javascript
|
||
const EXPLORATION_PATTERNS = {
|
||
uncertainty: /\b(不确定|不知道|not sure|unsure|how to|怎么|如何|what if|should i|could i|是否应该)\b/i,
|
||
|
||
exploration: /\b(explore|research|investigate|分析|研究|调研|评估|探索|了解)\b/i,
|
||
|
||
options: /\b(options|alternatives|approaches|方案|选择|方向|可能性)\b/i,
|
||
|
||
questions: /\b(what|which|how|why|什么|哪个|怎样|为什么)\b.*\?/i
|
||
}
|
||
|
||
function detectExploration(text) {
|
||
const hasUncertainty = EXPLORATION_PATTERNS.uncertainty.test(text)
|
||
const hasExploration = EXPLORATION_PATTERNS.exploration.test(text)
|
||
const hasOptions = EXPLORATION_PATTERNS.options.test(text)
|
||
const hasQuestion = EXPLORATION_PATTERNS.questions.test(text)
|
||
|
||
const score = [hasUncertainty, hasExploration, hasOptions, hasQuestion].filter(Boolean).length
|
||
|
||
if (score >= 2 || hasUncertainty) {
|
||
return {
|
||
type: 'exploration',
|
||
confidence: score >= 3 ? 'high' : 'medium'
|
||
}
|
||
}
|
||
return null
|
||
}
|
||
```
|
||
|
||
### UI/Design Detection
|
||
|
||
```javascript
|
||
const UI_PATTERNS = {
|
||
components: /\b(ui|界面|component|组件|button|按钮|form|表单|modal|弹窗|dialog|对话框)\b/i,
|
||
|
||
design: /\b(design|设计|style|样式|layout|布局|theme|主题|color|颜色)\b/i,
|
||
|
||
visual: /\b(visual|视觉|animation|动画|responsive|响应式|mobile|移动端)\b/i,
|
||
|
||
frontend: /\b(frontend|前端|react|vue|angular|css|html|page|页面)\b/i
|
||
}
|
||
|
||
function detectUI(text) {
|
||
const hasComponents = UI_PATTERNS.components.test(text)
|
||
const hasDesign = UI_PATTERNS.design.test(text)
|
||
const hasVisual = UI_PATTERNS.visual.test(text)
|
||
const hasFrontend = UI_PATTERNS.frontend.test(text)
|
||
|
||
const score = [hasComponents, hasDesign, hasVisual, hasFrontend].filter(Boolean).length
|
||
|
||
if (score >= 2) {
|
||
return {
|
||
type: 'ui',
|
||
hasReference: /参考|reference|based on|像|like|模仿|imitate/.test(text),
|
||
confidence: score >= 3 ? 'high' : 'medium'
|
||
}
|
||
}
|
||
return null
|
||
}
|
||
```
|
||
|
||
## Complexity Assessment
|
||
|
||
### Indicators
|
||
|
||
```javascript
|
||
const COMPLEXITY_INDICATORS = {
|
||
high: {
|
||
patterns: [
|
||
/\b(refactor|重构|restructure|重新组织)\b/i,
|
||
/\b(migrate|迁移|upgrade|升级|convert|转换)\b/i,
|
||
/\b(architect|架构|system|系统|infrastructure|基础设施)\b/i,
|
||
/\b(entire|整个|complete|完整|all\s+modules?|所有模块)\b/i,
|
||
/\b(security|安全|scale|扩展|performance\s+critical|性能关键)\b/i,
|
||
/\b(distributed|分布式|microservice|微服务|cluster|集群)\b/i
|
||
],
|
||
weight: 2
|
||
},
|
||
|
||
medium: {
|
||
patterns: [
|
||
/\b(integrate|集成|connect|连接|link|链接)\b/i,
|
||
/\b(api|database|数据库|service|服务|endpoint|接口)\b/i,
|
||
/\b(test|测试|validate|验证|coverage|覆盖)\b/i,
|
||
/\b(multiple\s+files?|多个文件|several\s+components?|几个组件)\b/i,
|
||
/\b(authentication|认证|authorization|授权)\b/i
|
||
],
|
||
weight: 1
|
||
},
|
||
|
||
low: {
|
||
patterns: [
|
||
/\b(add|添加|create|创建|simple|简单)\b/i,
|
||
/\b(update|更新|modify|修改|change|改变)\b/i,
|
||
/\b(single|单个|one|一个|small|小)\b/i,
|
||
/\b(comment|注释|log|日志|print|打印)\b/i
|
||
],
|
||
weight: -1
|
||
}
|
||
}
|
||
|
||
function assessComplexity(text) {
|
||
let score = 0
|
||
|
||
for (const [level, config] of Object.entries(COMPLEXITY_INDICATORS)) {
|
||
for (const pattern of config.patterns) {
|
||
if (pattern.test(text)) {
|
||
score += config.weight
|
||
}
|
||
}
|
||
}
|
||
|
||
// File count indicator
|
||
const fileMatches = text.match(/\b\d+\s*(files?|文件)/i)
|
||
if (fileMatches) {
|
||
const count = parseInt(fileMatches[0])
|
||
if (count > 10) score += 2
|
||
else if (count > 5) score += 1
|
||
}
|
||
|
||
// Module count indicator
|
||
const moduleMatches = text.match(/\b\d+\s*(modules?|模块)/i)
|
||
if (moduleMatches) {
|
||
const count = parseInt(moduleMatches[0])
|
||
if (count > 3) score += 2
|
||
else if (count > 1) score += 1
|
||
}
|
||
|
||
if (score >= 4) return 'high'
|
||
if (score >= 2) return 'medium'
|
||
return 'low'
|
||
}
|
||
```
|
||
|
||
## Workflow Selection Matrix
|
||
|
||
| Intent | Complexity | Workflow | Commands |
|
||
|--------|------------|----------|----------|
|
||
| bugfix (hotfix) | * | bugfix | `lite-fix --hotfix` |
|
||
| bugfix (standard) | * | bugfix | `lite-fix` |
|
||
| issue | * | issue | `issue:plan → queue → execute` |
|
||
| exploration | * | full | `brainstorm → plan → execute` |
|
||
| ui (reference) | * | ui | `ui-design:imitate-auto → plan` |
|
||
| ui (explore) | * | ui | `ui-design:explore-auto → plan` |
|
||
| feature | high | coupled | `plan → verify → execute` |
|
||
| feature | medium | rapid | `lite-plan → lite-execute` |
|
||
| feature | low | rapid | `lite-plan → lite-execute` |
|
||
|
||
## Confidence Levels
|
||
|
||
| Level | Description | Action |
|
||
|-------|-------------|--------|
|
||
| **high** | Multiple strong indicators match | Direct dispatch |
|
||
| **medium** | Some indicators match | Confirm with user |
|
||
| **low** | Fallback classification | Always confirm |
|
||
|
||
## Tool Preference Detection
|
||
|
||
```javascript
|
||
const TOOL_PREFERENCES = {
|
||
gemini: {
|
||
pattern: /用\s*gemini|gemini\s*(分析|理解|设计)|让\s*gemini/i,
|
||
capability: 'analysis'
|
||
},
|
||
qwen: {
|
||
pattern: /用\s*qwen|qwen\s*(分析|评估)|让\s*qwen/i,
|
||
capability: 'analysis'
|
||
},
|
||
codex: {
|
||
pattern: /用\s*codex|codex\s*(实现|重构|修复)|让\s*codex/i,
|
||
capability: 'implementation'
|
||
}
|
||
}
|
||
|
||
function detectToolPreference(text) {
|
||
for (const [tool, config] of Object.entries(TOOL_PREFERENCES)) {
|
||
if (config.pattern.test(text)) {
|
||
return { tool, capability: config.capability }
|
||
}
|
||
}
|
||
return null
|
||
}
|
||
```
|
||
|
||
## Multi-Tool Collaboration Detection
|
||
|
||
```javascript
|
||
const COLLABORATION_PATTERNS = {
|
||
sequential: /先.*(分析|理解).*然后.*(实现|重构)|分析.*后.*实现/i,
|
||
parallel: /(同时|并行).*(分析|实现)|一边.*一边/i,
|
||
hybrid: /(分析|设计).*和.*(实现|测试).*分开/i
|
||
}
|
||
|
||
function detectCollaboration(text) {
|
||
if (COLLABORATION_PATTERNS.sequential.test(text)) {
|
||
return { mode: 'sequential', description: 'Analysis first, then implementation' }
|
||
}
|
||
if (COLLABORATION_PATTERNS.parallel.test(text)) {
|
||
return { mode: 'parallel', description: 'Concurrent analysis and implementation' }
|
||
}
|
||
if (COLLABORATION_PATTERNS.hybrid.test(text)) {
|
||
return { mode: 'hybrid', description: 'Mixed parallel and sequential' }
|
||
}
|
||
return null
|
||
}
|
||
```
|
||
|
||
## Classification Pipeline
|
||
|
||
```javascript
|
||
function classify(userInput) {
|
||
const text = userInput.trim()
|
||
|
||
// Step 1: Check explicit commands
|
||
if (/^\/(?:workflow|issue|memory|task):/.test(text)) {
|
||
return { type: 'explicit', command: text }
|
||
}
|
||
|
||
// Step 2: Priority-based classification
|
||
const bugResult = detectBug(text)
|
||
if (bugResult) return bugResult
|
||
|
||
const issueResult = detectIssueBatch(text)
|
||
if (issueResult) return issueResult
|
||
|
||
const explorationResult = detectExploration(text)
|
||
if (explorationResult) return explorationResult
|
||
|
||
const uiResult = detectUI(text)
|
||
if (uiResult) return uiResult
|
||
|
||
// Step 3: Complexity-based fallback
|
||
const complexity = assessComplexity(text)
|
||
return {
|
||
type: 'feature',
|
||
complexity,
|
||
workflow: complexity === 'high' ? 'coupled' : 'rapid',
|
||
confidence: 'low'
|
||
}
|
||
}
|
||
```
|
||
|
||
## Examples
|
||
|
||
### Input → Classification
|
||
|
||
| Input | Classification | Workflow |
|
||
|-------|----------------|----------|
|
||
| "用户登录失败,401错误" | bugfix/standard | lite-fix |
|
||
| "紧急:支付网关挂了" | bugfix/hotfix | lite-fix --hotfix |
|
||
| "批量处理这些 GitHub issues" | issue | issue:plan → queue |
|
||
| "不确定要怎么设计缓存系统" | exploration | brainstorm → plan |
|
||
| "添加一个深色模式切换按钮" | ui | ui-design → plan |
|
||
| "重构整个认证模块" | feature/high | plan → verify |
|
||
| "添加用户头像功能" | feature/low | lite-plan |
|