mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-02-13 02:41:50 +08:00
379 lines
11 KiB
Markdown
379 lines
11 KiB
Markdown
# State Schema
|
|
|
|
Defines the state structure for skill-tuning orchestrator.
|
|
|
|
## State Structure
|
|
|
|
```typescript
|
|
interface TuningState {
|
|
// === Core Status ===
|
|
status: 'pending' | 'running' | 'completed' | 'failed';
|
|
started_at: string; // ISO timestamp
|
|
updated_at: string; // ISO timestamp
|
|
|
|
// === Target Skill Info ===
|
|
target_skill: {
|
|
name: string; // e.g., "software-manual"
|
|
path: string; // e.g., ".claude/skills/software-manual"
|
|
execution_mode: 'sequential' | 'autonomous';
|
|
phases: string[]; // List of phase files
|
|
specs: string[]; // List of spec files
|
|
};
|
|
|
|
// === User Input ===
|
|
user_issue_description: string; // User's problem description
|
|
focus_areas: string[]; // User-specified focus (optional)
|
|
|
|
// === Diagnosis Results ===
|
|
diagnosis: {
|
|
context: DiagnosisResult | null;
|
|
memory: DiagnosisResult | null;
|
|
dataflow: DiagnosisResult | null;
|
|
agent: DiagnosisResult | null;
|
|
docs: DocsDiagnosisResult | null; // 文档结构诊断
|
|
token_consumption: DiagnosisResult | null; // Token消耗诊断
|
|
};
|
|
|
|
// === Issues Found ===
|
|
issues: Issue[];
|
|
issues_by_severity: {
|
|
critical: number;
|
|
high: number;
|
|
medium: number;
|
|
low: number;
|
|
};
|
|
|
|
// === Fix Management ===
|
|
proposed_fixes: Fix[];
|
|
applied_fixes: AppliedFix[];
|
|
pending_fixes: string[]; // Fix IDs pending application
|
|
|
|
// === Iteration Control ===
|
|
iteration_count: number;
|
|
max_iterations: number; // Default: 5
|
|
|
|
// === Quality Metrics ===
|
|
quality_score: number; // 0-100
|
|
quality_gate: 'pass' | 'review' | 'fail';
|
|
|
|
// === Orchestrator State ===
|
|
completed_actions: string[];
|
|
current_action: string | null;
|
|
action_history: ActionHistoryEntry[];
|
|
|
|
// === Error Handling ===
|
|
errors: ErrorEntry[];
|
|
error_count: number;
|
|
max_errors: number; // Default: 3
|
|
|
|
// === Output Paths ===
|
|
work_dir: string;
|
|
backup_dir: string;
|
|
|
|
// === Final Report (consolidated output) ===
|
|
final_report: string | null; // Markdown summary generated on completion
|
|
|
|
// === Requirement Analysis (新增) ===
|
|
requirement_analysis: RequirementAnalysis | null;
|
|
}
|
|
|
|
interface RequirementAnalysis {
|
|
status: 'pending' | 'completed' | 'needs_clarification';
|
|
analyzed_at: string;
|
|
|
|
// Phase 1: 维度拆解
|
|
dimensions: Dimension[];
|
|
|
|
// Phase 2: Spec 匹配
|
|
spec_matches: SpecMatch[];
|
|
|
|
// Phase 3: 覆盖度
|
|
coverage: {
|
|
total_dimensions: number;
|
|
with_detection: number; // 有 taxonomy pattern
|
|
with_fix_strategy: number; // 有 tuning strategy (满足判断标准)
|
|
coverage_rate: number; // 0-100%
|
|
status: 'satisfied' | 'partial' | 'unsatisfied';
|
|
};
|
|
|
|
// Phase 4: 歧义
|
|
ambiguities: Ambiguity[];
|
|
}
|
|
|
|
interface Dimension {
|
|
id: string; // e.g., "DIM-001"
|
|
description: string; // 关注点描述
|
|
keywords: string[]; // 关键词
|
|
inferred_category: string; // 推断的问题类别
|
|
confidence: number; // 置信度 0-1
|
|
}
|
|
|
|
interface SpecMatch {
|
|
dimension_id: string;
|
|
taxonomy_match: {
|
|
category: string; // e.g., "context_explosion"
|
|
pattern_ids: string[]; // e.g., ["CTX-001", "CTX-003"]
|
|
severity_hint: string;
|
|
} | null;
|
|
strategy_match: {
|
|
strategies: string[]; // e.g., ["sliding_window", "path_reference"]
|
|
risk_levels: string[];
|
|
} | null;
|
|
has_fix: boolean; // 满足性判断核心
|
|
}
|
|
|
|
interface Ambiguity {
|
|
dimension_id: string;
|
|
type: 'multi_category' | 'vague_description' | 'conflicting_keywords';
|
|
description: string;
|
|
possible_interpretations: string[];
|
|
needs_clarification: boolean;
|
|
}
|
|
|
|
interface DiagnosisResult {
|
|
status: 'completed' | 'skipped' | 'failed';
|
|
issues_found: number;
|
|
severity: 'critical' | 'high' | 'medium' | 'low' | 'none';
|
|
execution_time_ms: number;
|
|
details: {
|
|
patterns_checked: string[];
|
|
patterns_matched: string[];
|
|
evidence: Evidence[];
|
|
recommendations: string[];
|
|
};
|
|
}
|
|
|
|
interface DocsDiagnosisResult extends DiagnosisResult {
|
|
redundancies: Redundancy[];
|
|
conflicts: Conflict[];
|
|
}
|
|
|
|
interface Redundancy {
|
|
id: string; // e.g., "DOC-RED-001"
|
|
type: 'state_schema' | 'strategy_mapping' | 'type_definition' | 'other';
|
|
files: string[]; // 涉及的文件列表
|
|
description: string; // 冗余描述
|
|
severity: 'high' | 'medium' | 'low';
|
|
merge_suggestion: string; // 合并建议
|
|
}
|
|
|
|
interface Conflict {
|
|
id: string; // e.g., "DOC-CON-001"
|
|
type: 'priority' | 'mapping' | 'definition';
|
|
files: string[]; // 涉及的文件列表
|
|
key: string; // 冲突的键/概念
|
|
definitions: {
|
|
file: string;
|
|
value: string;
|
|
location?: string;
|
|
}[];
|
|
resolution_suggestion: string; // 解决建议
|
|
}
|
|
|
|
interface Evidence {
|
|
file: string;
|
|
line?: number;
|
|
pattern: string;
|
|
context: string;
|
|
severity: string;
|
|
}
|
|
|
|
interface Issue {
|
|
id: string; // e.g., "ISS-001"
|
|
type: 'context_explosion' | 'memory_loss' | 'dataflow_break' | 'agent_failure' | 'token_consumption';
|
|
severity: 'critical' | 'high' | 'medium' | 'low';
|
|
priority: number; // 1 = highest
|
|
location: {
|
|
file: string;
|
|
line_start?: number;
|
|
line_end?: number;
|
|
phase?: string;
|
|
};
|
|
description: string;
|
|
evidence: string[];
|
|
root_cause: string;
|
|
impact: string;
|
|
suggested_fix: string;
|
|
related_issues: string[]; // Issue IDs
|
|
}
|
|
|
|
interface Fix {
|
|
id: string; // e.g., "FIX-001"
|
|
issue_ids: string[]; // Issues this fix addresses
|
|
strategy: FixStrategy;
|
|
description: string;
|
|
rationale: string;
|
|
changes: FileChange[];
|
|
risk: 'low' | 'medium' | 'high';
|
|
estimated_impact: string;
|
|
verification_steps: string[];
|
|
}
|
|
|
|
type FixStrategy =
|
|
| 'context_summarization' // Add context compression
|
|
| 'sliding_window' // Implement sliding context window
|
|
| 'structured_state' // Convert to structured state passing
|
|
| 'constraint_injection' // Add constraint propagation
|
|
| 'checkpoint_restore' // Add checkpointing mechanism
|
|
| 'schema_enforcement' // Add data contract validation
|
|
| 'orchestrator_refactor' // Refactor agent coordination
|
|
| 'state_centralization' // Centralize state management
|
|
| 'prompt_compression' // Extract static text, use templates
|
|
| 'lazy_loading' // Pass paths instead of content
|
|
| 'output_minimization' // Return minimal structured JSON
|
|
| 'state_field_reduction' // Audit and consolidate state fields
|
|
| 'custom'; // Custom fix
|
|
|
|
interface FileChange {
|
|
file: string;
|
|
action: 'create' | 'modify' | 'delete';
|
|
old_content?: string;
|
|
new_content?: string;
|
|
diff?: string;
|
|
}
|
|
|
|
interface AppliedFix {
|
|
fix_id: string;
|
|
applied_at: string;
|
|
success: boolean;
|
|
backup_path: string;
|
|
verification_result: 'pass' | 'fail' | 'pending';
|
|
rollback_available: boolean;
|
|
}
|
|
|
|
interface ActionHistoryEntry {
|
|
action: string;
|
|
started_at: string;
|
|
completed_at: string;
|
|
result: 'success' | 'failure' | 'skipped';
|
|
output_files: string[];
|
|
}
|
|
|
|
interface ErrorEntry {
|
|
action: string;
|
|
message: string;
|
|
timestamp: string;
|
|
recoverable: boolean;
|
|
}
|
|
```
|
|
|
|
## Initial State Template
|
|
|
|
```json
|
|
{
|
|
"status": "pending",
|
|
"started_at": null,
|
|
"updated_at": null,
|
|
"target_skill": {
|
|
"name": null,
|
|
"path": null,
|
|
"execution_mode": null,
|
|
"phases": [],
|
|
"specs": []
|
|
},
|
|
"user_issue_description": "",
|
|
"focus_areas": [],
|
|
"diagnosis": {
|
|
"context": null,
|
|
"memory": null,
|
|
"dataflow": null,
|
|
"agent": null,
|
|
"docs": null,
|
|
"token_consumption": null
|
|
},
|
|
"issues": [],
|
|
"issues_by_severity": {
|
|
"critical": 0,
|
|
"high": 0,
|
|
"medium": 0,
|
|
"low": 0
|
|
},
|
|
"proposed_fixes": [],
|
|
"applied_fixes": [],
|
|
"pending_fixes": [],
|
|
"iteration_count": 0,
|
|
"max_iterations": 5,
|
|
"quality_score": 0,
|
|
"quality_gate": "fail",
|
|
"completed_actions": [],
|
|
"current_action": null,
|
|
"action_history": [],
|
|
"errors": [],
|
|
"error_count": 0,
|
|
"max_errors": 3,
|
|
"work_dir": null,
|
|
"backup_dir": null,
|
|
"final_report": null,
|
|
"requirement_analysis": null
|
|
}
|
|
```
|
|
|
|
## State Transition Diagram
|
|
|
|
```
|
|
┌─────────────┐
|
|
│ pending │
|
|
└──────┬──────┘
|
|
│ action-init
|
|
↓
|
|
┌─────────────┐
|
|
┌──────────│ running │──────────┐
|
|
│ └──────┬──────┘ │
|
|
│ │ │
|
|
diagnosis │ ┌────────────┼────────────┐ │ error_count >= 3
|
|
actions │ │ │ │ │
|
|
│ ↓ ↓ ↓ │
|
|
│ context memory dataflow │
|
|
│ │ │ │ │
|
|
│ └────────────┼────────────┘ │
|
|
│ │ │
|
|
│ ↓ │
|
|
│ action-verify │
|
|
│ │ │
|
|
│ ┌───────────┼───────────┐ │
|
|
│ │ │ │ │
|
|
│ ↓ ↓ ↓ │
|
|
│ quality iterate apply │
|
|
│ gate=pass (< max) fix │
|
|
│ │ │ │ │
|
|
│ │ └───────────┘ │
|
|
│ ↓ ↓
|
|
│ ┌─────────────┐ ┌─────────────┐
|
|
└→│ completed │ │ failed │
|
|
└─────────────┘ └─────────────┘
|
|
```
|
|
|
|
## State Update Rules
|
|
|
|
### Atomicity
|
|
All state updates must be atomic - read current state, apply changes, write entire state.
|
|
|
|
### Immutability
|
|
Never mutate state in place. Always create new state object with changes.
|
|
|
|
### Validation
|
|
Before writing state, validate against schema to prevent corruption.
|
|
|
|
### Timestamps
|
|
Always update `updated_at` on every state change.
|
|
|
|
```javascript
|
|
function updateState(workDir, updates) {
|
|
const currentState = JSON.parse(Read(`${workDir}/state.json`));
|
|
|
|
const newState = {
|
|
...currentState,
|
|
...updates,
|
|
updated_at: new Date().toISOString()
|
|
};
|
|
|
|
// Validate before write
|
|
if (!validateState(newState)) {
|
|
throw new Error('Invalid state update');
|
|
}
|
|
|
|
Write(`${workDir}/state.json`, JSON.stringify(newState, null, 2));
|
|
return newState;
|
|
}
|
|
```
|