Files
Claude-Code-Workflow/.claude/skills/skill-generator/templates/autonomous-orchestrator.md
catlog22 3998d24e32 Enhance skill generator documentation and templates
- 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.
2026-01-28 20:34:03 +08:00

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 时,需要确保:

  1. SKILL.md 中已包含 Phase 0 规范研读步骤
  2. Orchestrator 启动前验证规范已阅读
  3. 所有 Action 文件都引用相关的规范文档
  4. 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 --> [*]