Skip to content

Autonomous Orchestrator Template

用途: 自主编排器模板,用于 Autonomous 类型 Skill

模板

markdown
# Orchestrator

> **Skill**: {Skill Name}
> **Type**: Autonomous (State-Driven)
> **Version**: 1.0.0

## Overview

本编排器使用状态驱动的决策引擎,根据当前状态自动选择下一步行动。

## State Machine

### State Definition

| State | Description | Entry Condition | Exit Actions |
|-------|-------------|-----------------|--------------|
| `initialized` | 初始状态,等待目标 | Skill 启动 | 转到 `collecting_context` |
| `collecting_context` | 收集上下文信息 | 进入状态 | 收集完成后转到 `analyzing` |
| `analyzing` | 分析目标内容 | 上下文就绪 | 分析完成后转到 `planning``executing` |
| `planning` | 制定执行计划 | 需要复杂规划 | 计划完成后转到 `executing` |
| `executing` | 执行具体行动 | 计划就绪 | 执行完成后转到 `verifying` |
| `verifying` | 验证执行结果 | 执行完成 | 验证通过转到 `completed`,否则转到 `analyzing` |
| `completed` | 任务完成 | 所有目标达成 | 结束 |
| `error` | 错误状态 | 发生错误 | 根据错误类型恢复或终止 |

### State Transitions

```plaintext
                    ┌─────────────────┐
                    │   initialized   │
                    └────────┬────────┘


                    ┌─────────────────┐
                    │collecting_context│
                    └────────┬────────┘


                    ┌─────────────────┐
                    │    analyzing    │◄─────────┐
                    └────────┬────────┘          │
                             │                   │
                    ┌────────┴────────┐          │
                    │                 │          │
                    ▼                 ▼          │
              ┌──────────┐      ┌──────────┐    │
              │ planning │      │executing │────┘
              └────┬─────┘      └────┬─────┘
                   │                │
                   │       ┌────────┴────────┐
                   │       │                 │
                   ▼       ▼                 ▼
              ┌──────────────────────────────┐
              │          verifying           │
              └───────────┬──────────────────┘

                ┌─────────┴─────────┐
                │                   │
                ▼                   ▼
          ┌──────────┐        ┌──────────┐
          │completed │        │   error  │
          └──────────┘        └──────────┘

Action Registry

Available Actions

ActionFrom StatesTo StatesDescription
collect_contextinitialized, erroranalyzing收集必要的上下文信息
analyze_targetcollecting_contextplanning or executing分析目标,决定需要规划还是直接执行
create_plananalyzingexecuting创建详细执行计划
execute_actionplanning, analyzingverifying执行具体行动
verify_resultexecutingcompleted or analyzing验证执行结果
handle_errorAnyerror or analyzing处理错误情况
completeverifyingcompleted标记任务完成

Routing Logic

Decision Tree

typescript
// 伪代码:状态路由决策
function route(currentState: State, context: Context): Action {
  switch (currentState) {
    case 'initialized':
      return Action.COLLECT_CONTEXT;

    case 'collecting_context':
      if (context.hasEnoughData()) {
        return Action.ANALYZE_TARGET;
      }
      return Action.COLLECT_CONTEXT; // 继续收集

    case 'analyzing':
      if (context.needsPlanning()) {
        return Action.CREATE_PLAN;
      }
      return Action.EXECUTE_ACTION;

    case 'planning':
      return Action.EXECUTE_ACTION;

    case 'executing':
      return Action.VERIFY_RESULT;

    case 'verifying':
      if (context.isResultValid()) {
        return Action.COMPLETE;
      }
      return Action.ANALYZE_TARGET; // 重新分析

    case 'error':
      if (context.isRecoverable()) {
        return Action.ANALYZE_TARGET;
      }
      throw new UnrecoverableError(context.error);

    default:
      throw new UnknownStateError(currentState);
  }
}

Condition Evaluation

ConditionEvaluationResult
hasEnoughData()context.files.length > 0Boolean
needsPlanning()context.complexity > thresholdBoolean
isResultValid()validation.checks passedBoolean
isRecoverable()error.type in recoverableErrorsBoolean

State Persistence

State File Structure

json
{
  "state": "analyzing",
  "history": [
    { "state": "initialized", "timestamp": "2026-03-01T10:00:00Z" },
    { "state": "collecting_context", "timestamp": "2026-03-01T10:00:05Z" },
    { "state": "analyzing", "timestamp": "2026-03-01T10:00:15Z" }
  ],
  "context": {
    "target": "...",
    "files": [],
    "findings": []
  },
  "metrics": {
    "actionsExecuted": 3,
    "errors": 0,
    "startTime": "2026-03-01T10:00:00Z"
  }
}

Save/Restore

  • Save: 每次状态转换后保存
  • Restore: Skill 重启时从文件恢复
  • Reset: 新任务开始时重置状态

Error Handling

Error Classification

Error TypeSeverityRecovery
ContextErrorMedium重新收集上下文
ValidationErrorHigh重新分析并调整
ExecutionErrorHigh尝试替代行动
FatalErrorCritical终止并报告

Error Recovery Strategies

typescript
function handleError(error: Error, state: State): RecoveryAction {
  if (error instanceof ContextError) {
    return RecoveryAction.RETRY_WITH_ALTERNATIVE_SOURCE;
  }
  if (error instanceof ValidationError) {
    return RecoveryAction.ADJUST_AND_RETRY;
  }
  if (error instanceof ExecutionError) {
    return RecoveryAction.TRY_ALTERNATIVE_ACTION;
  }
  return RecoveryAction.ABORT;
}

Metrics and Observability

Tracked Metrics

MetricTypeDescription
state_transitionsCounter状态转换次数
action_durationHistogram每个行动的执行时间
error_countCounter错误发生次数
completion_rateGauge任务完成率

Logging

typescript
// 每次状态转换记录日志
log.info('State transition', {
  from: oldState,
  to: newState,
  action: executedAction,
  timestamp: now()
});

Testing

Test Scenarios

  1. Happy Path: 正常流程从初始化到完成
  2. Error Recovery: 错误发生后正确恢复
  3. State Persistence: 状态正确保存和恢复
  4. Edge Cases: 边界条件处理

Test Example

typescript
describe('Orchestrator', () => {
  it('should complete happy path', async () => {
    const orchestrator = new Orchestrator();
    await orchestrator.run({ target: 'test' });
    expect(orchestrator.state).toBe('completed');
  });

  it('should recover from errors', async () => {
    const orchestrator = new Orchestrator();
    // 模拟错误后恢复
    await expect(orchestrator.run()).toEventuallyComplete();
  });
});

## 使用说明

1. **触发**: skill-generator Phase 3 (Autonomous 模式)
2. **输入**: Phase 2 skill-config.json
3. **输出**: phases/_orchestrator.md
4. **验证**: 确保状态转换逻辑完整

---

## 示例

### 简化示例

```markdown
# Orchestrator

> **Skill**: review-code
> **Type**: Autonomous (State-Driven)
> **Version**: 1.0.0

## State Transitions

```plaintext
initialized → collecting_context → analyzing

                              ┌───────┴────────┐
                              ↓                ↓
                         quick_scan      deep_review
                              ↓                ↓
                              └───────┬────────┘

                                  generating_report

                                  completed

Action Registry

ActionDescription
collect_context收集目标文件信息
quick_scan快速扫描识别高风险区域
deep_review按 6 维度深度审查
generate_report生成审查报告

Routing Logic

typescript
function route(state, context) {
  if (state === 'initialized') return 'collect_context';
  if (state === 'collecting_context') return 'quick_scan';
  if (state === 'analyzing') {
    if (context.hasHighRiskAreas()) return 'deep_review';
    return 'generate_report';
  }
  if (state === 'deep_review') return 'generate_report';
  return 'complete';
}

Released under the MIT License.