mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-02-04 01:40:45 +08:00
- Updated Phase 1 and Phase 2 documentation to include next phase links and data flow details. - Expanded Phase 5 documentation to include comprehensive validation and README generation steps, along with validation report structure. - Added purpose and usage context sections to various action and script templates (e.g., autonomous-action, llm-action, script-bash). - Improved commands management by simplifying the command scanning logic and enabling/disabling commands through renaming files. - Enhanced dashboard command manager to format group names and display nested groups with appropriate icons and colors. - Updated LiteLLM executor to allow model overrides during execution. - Added action reference guide and template reference sections to the skill-tuning SKILL.md for better navigation and understanding.
7.4 KiB
7.4 KiB
Autonomous Orchestrator Template
自主模式编排器的模板。
Purpose
生成 Autonomous 执行模式的 Orchestrator 文件,负责状态驱动的动作选择和执行循环。
Usage Context
| Phase | Usage |
|---|---|
| Phase 3 (Phase Generation) | config.execution_mode === 'autonomous' 时生成 |
| Generation Trigger | 创建编排器逻辑,管理动作选择和状态更新 |
| Output Location | .claude/skills/{skill-name}/phases/orchestrator.md |
⚠️ 重要提示
Phase 0 是强制前置阶段:在 Orchestrator 启动执行循环之前,必须先完成 Phase 0 的规范研读。
生成 Orchestrator 时,需要确保:
- SKILL.md 中已包含 Phase 0 规范研读步骤
- Orchestrator 启动前验证规范已阅读
- 所有 Action 文件都引用相关的规范文档
- Architecture Overview 中 Phase 0 位于 Orchestrator 之前
模板结构
# Orchestrator
## Role
根据当前状态选择并执行下一个动作。
## State Management
### 读取状态
\`\`\`javascript
const state = JSON.parse(Read(`${workDir}/state.json`));
\`\`\`
### 更新状态
\`\`\`javascript
function updateState(updates) {
const state = JSON.parse(Read(`${workDir}/state.json`));
const newState = {
...state,
...updates,
updated_at: new Date().toISOString()
};
Write(`${workDir}/state.json`, JSON.stringify(newState, null, 2));
return newState;
}
\`\`\`
## Decision Logic
\`\`\`javascript
function selectNextAction(state) {
// 1. 终止条件检查
{{termination_checks}}
// 2. 错误限制检查
if (state.error_count >= 3) {
return 'action-abort';
}
// 3. 动作选择逻辑
{{action_selection_logic}}
// 4. 默认完成
return 'action-complete';
}
\`\`\`
## Execution Loop
\`\`\`javascript
async function runOrchestrator() {
console.log('=== Orchestrator Started ===');
let iteration = 0;
const MAX_ITERATIONS = 100;
while (iteration < MAX_ITERATIONS) {
iteration++;
// 1. 读取当前状态
const state = JSON.parse(Read(`${workDir}/state.json`));
console.log(`[Iteration ${iteration}] Status: ${state.status}`);
// 2. 选择下一个动作
const actionId = selectNextAction(state);
if (!actionId) {
console.log('No action selected, terminating.');
break;
}
console.log(`[Iteration ${iteration}] Executing: ${actionId}`);
// 3. 更新状态:当前动作
updateState({ current_action: actionId });
// 4. 执行动作
try {
const actionPrompt = Read(`phases/actions/${actionId}.md`);
const result = await Task({
subagent_type: 'universal-executor',
run_in_background: false,
prompt: \`
[STATE]
\${JSON.stringify(state, null, 2)}
[ACTION]
\${actionPrompt}
[RETURN]
Return JSON with stateUpdates field.
\`
});
const actionResult = JSON.parse(result);
// 5. 更新状态:动作完成
updateState({
current_action: null,
completed_actions: [...state.completed_actions, actionId],
...actionResult.stateUpdates
});
} catch (error) {
// 错误处理
updateState({
current_action: null,
errors: [...state.errors, {
action: actionId,
message: error.message,
timestamp: new Date().toISOString()
}],
error_count: state.error_count + 1
});
}
}
console.log('=== Orchestrator Finished ===');
}
\`\`\`
## Action Catalog
| Action | Purpose | Preconditions |
|--------|---------|---------------|
{{action_catalog_table}}
## Termination Conditions
{{termination_conditions_list}}
## Error Recovery
| Error Type | Recovery Strategy |
|------------|-------------------|
| 动作执行失败 | 重试最多 3 次 |
| 状态不一致 | 回滚到上一个稳定状态 |
| 用户中止 | 保存当前状态,允许恢复 |
变量说明
| 变量 | 说明 |
|---|---|
{{termination_checks}} |
终止条件检查代码 |
{{action_selection_logic}} |
动作选择逻辑代码 |
{{action_catalog_table}} |
动作目录表格 |
{{termination_conditions_list}} |
终止条件列表 |
生成函数
function generateOrchestrator(config) {
const actions = config.autonomous_config.actions;
const terminations = config.autonomous_config.termination_conditions || [];
// 生成终止条件检查
const terminationChecks = terminations.map(t => {
const checks = {
'user_exit': 'if (state.status === "user_exit") return null;',
'error_limit': 'if (state.error_count >= 3) return "action-abort";',
'task_completed': 'if (state.status === "completed") return null;',
'max_iterations': 'if (state.iteration_count >= 100) return "action-abort";'
};
return checks[t] || `if (state.${t}) return null;`;
}).join('\n ');
// 生成动作选择逻辑
const actionSelectionLogic = actions.map(action => {
if (!action.preconditions?.length) {
return `// ${action.name}: 无前置条件,需要手动添加选择逻辑`;
}
const conditions = action.preconditions.map(p => `state.${p}`).join(' && ');
return `if (${conditions}) return '${action.id}';`;
}).join('\n ');
// 生成动作目录表格
const actionCatalogTable = actions.map(a =>
`| [${a.id}](actions/${a.id}.md) | ${a.description || a.name} | ${a.preconditions?.join(', ') || '-'} |`
).join('\n');
// 生成终止条件列表
const terminationConditionsList = terminations.map(t => `- ${t}`).join('\n');
return template
.replace('{{termination_checks}}', terminationChecks)
.replace('{{action_selection_logic}}', actionSelectionLogic)
.replace('{{action_catalog_table}}', actionCatalogTable)
.replace('{{termination_conditions_list}}', terminationConditionsList);
}
编排策略
1. 优先级策略
按预定义优先级选择动作:
const PRIORITY = ['action-init', 'action-process', 'action-review', 'action-complete'];
function selectByPriority(state, availableActions) {
for (const actionId of PRIORITY) {
if (availableActions.includes(actionId) && checkPreconditions(actionId, state)) {
return actionId;
}
}
return null;
}
2. 用户驱动策略
询问用户选择下一个动作:
async function selectByUser(state, availableActions) {
const response = await AskUserQuestion({
questions: [{
question: "选择下一个操作:",
header: "操作",
multiSelect: false,
options: availableActions.map(a => ({
label: a.name,
description: a.description
}))
}]
});
return availableActions.find(a => a.name === response["操作"])?.id;
}
3. 状态驱动策略
完全基于状态自动决策:
function selectByState(state) {
// 初始化
if (state.status === 'pending') return 'action-init';
// 有待处理项
if (state.pending_items?.length > 0) return 'action-process';
// 需要审核
if (state.needs_review) return 'action-review';
// 完成
return 'action-complete';
}
状态机示例
stateDiagram-v2
[*] --> pending
pending --> running: action-init
running --> running: action-process
running --> running: action-review
running --> completed: action-complete
running --> failed: action-abort
completed --> [*]
failed --> [*]