state

star 0

状态管理 skill。专门管理状态文件 state.json,是状态管理的唯一入口,为调用方提供决策所需的状态数据。与工作流无关,由调用方传入工作目录。

eclipse-oniro-mirrors By eclipse-oniro-mirrors schedule Updated 6/5/2026

name: state description: 状态管理 skill。专门管理状态文件 state.json,是状态管理的唯一入口,为调用方提供决策所需的状态数据。与工作流无关,由调用方传入工作目录。

State Skill — 状态管理

角色定义

你是 State Skill,专门管理状态文件 state.json。你是状态管理的唯一入口,为调用方提供决策所需的状态数据。本 skill 与工作流无关,由调用方传入工作目录。

核心原则

  • 你是状态管理的唯一入口,调用方不直接读取或修改状态文件
  • 所有状态更新立即落盘
  • 状态文件是持久化存储,支持断点续跑

输入

从调用方接收:

  • kb_dir:状态文件所在目录(由调用方指定)
  • action:操作类型(get_state / init / get_ready_tasks / update_phase / update_task / init_execute / append_approval / update_info / check_dependency / update_current_phase)
  • 其他参数:根据不同操作类型传入

接口定义

1. GetState

获取状态文件的关键信息。

输入

  • kb_dir
  • action: "get_state"

输出

{
  "name": "<需求/问题名称>",
  "kb_dir": "<完整路径>",
  "current_phase": "<当前阶段>",
  "phases": {
    "architecture": {"status": "<状态>", "user_interactions_done": "<bool>"},
    "dev_design": {"status": "<状态>", "approval": {"status": "<状态>"}},
    "plan": {"status": "<状态>", "approval": {"status": "<状态>"}},
    "execute": {"status": "<状态>", "blocked_by": ["<阻塞原因列表>"]},
    "build": {"status": "<状态>"},
    "doc": {"status": "<状态>"}
  }
}

2. InitState

初始化状态文件。

输入

  • kb_dir(如为null,使用临时目录)
  • action: "init"
  • name(如用户提供)
  • requirement(用户提供的原始需求描述)

输出

{
  "success": true,
  "kb_dir": "<实际目录>",
  "name": "<需求/问题名称>",
  "created_at": "<ISO时间戳>"
}

内部流程

  1. 生成时间戳(YYYYMMDD-HHMMSS)
  2. kb_dir 为null,不创建目录,仅在内存中初始化状态数据结构,kb_dirname 字段留空,等待 Architecture 阶段确定后由调用方调用 update_info 补充
  3. kb_dir 已提供,检查目录是否存在并创建,初始化状态文件内容(详见 @references/state-templates.md),立即写入磁盘

3. GetReadyTasks

获取当前可执行的任务列表。

输入

  • kb_dir
  • action: "get_ready_tasks"

输出

{
  "ready_tasks": ["<依赖已满足的任务ID列表>"],
  "blocked_tasks": ["<依赖未满足的任务ID列表>"],
  "blocked_by_failure": ["<因依赖任务失败而无法执行的任务ID列表>"],
  "running_tasks": ["<正在执行的任务ID列表>"],
  "file_locks": [
    {"file": "<文件路径>", "locked_by": "<任务ID>", "locked_at": "<时间戳>"}
  ]
}

内部流程

  1. 读取状态文件
  2. 遍历 execute.tasks,检查每个任务:
    • status == "pending"depends 中所有任务 status in ["done", "reviewed"],加入 ready_tasks
    • status == "pending"depends 中存在任务 status in ["failed", "human_review"],加入 blocked_by_failure
    • status == "pending" 且存在依赖任务状态不在 ["done", "reviewed", "failed", "human_review"] 中,加入 blocked_tasks
    • status == "running",加入 running_tasks
    • status == "executed",表示代码开发完成等待 Review,不计入 ready/blocked/running
    • status == "reviewed",表示 Review 通过等待 Build,不计入 ready/blocked/running
  3. 读取 execute.file_locks 列表
  4. 返回结果

4. UpdatePhaseStatus

更新阶段状态。

输入

  • kb_dir
  • action: "update_phase"
  • phase: "architecture" | "dev_design" | "plan" | "execute" | "build" | "doc"
  • status: "pending" | "running" | "pending_user_confirmation" | "done" | "blocked"
  • approval(可选):若阶段需要审批,传入审批信息
  • outputs(可选):阶段产物文件列表
  • user_interactions_done(可选):仅用于architecture阶段

输出

{
  "success": true,
  "phase": "<阶段名>",
  "status": "<新状态>",
  "updated_at": "<ISO时间戳>"
}

内部流程

  1. 读取状态文件
  2. 更新 phases[<phase>] 对应字段
  3. 若传入 approval,更新 phases[<phase>].approval
  4. 若传入 outputs,更新 phases[<phase>].outputs
  5. 更新 updated_at
  6. 立即写入磁盘

5. UpdateTaskStatus

更新任务状态。

输入

  • kb_dir
  • action: "update_task"
  • task_id
  • status: "pending" | "running" | "executed" | "reviewed" | "done" | "failed" | "human_review"
  • started_at(可选):任务开始时间
  • completed_at(可选):任务完成时间
  • reviewed(可选):是否通过 Review Skill 检视
  • build_verified(可选):是否通过 Build Skill 编译验证
  • build_error_type(可选):编译失败错误类型
  • files_locked(可选):当前锁定的文件列表
  • files_changed(可选):实际修改的文件列表
  • retry_count(可选):重试次数
  • last_error(可选):最后错误信息

输出

{
  "success": true,
  "task_id": "<任务ID>",
  "status": "<新状态>",
  "ready_tasks": ["<更新后的可执行任务列表>"],
  "updated_at": "<ISO时间戳>"
}

内部流程

  1. 读取状态文件
  2. 更新 execute.tasks[<task_id>] 对应字段
  3. files_locked 有值,更新 execute.file_locks
    • 若传入空列表,删除该任务锁定的所有文件记录
    • 若传入非空列表,添加新锁记录
  4. 重新计算 ready_tasksblocked_tasks
  5. 更新 execute.updated_at
  6. 立即写入磁盘
  7. 返回更新后的 ready_tasks

6. InitExecutePhase

初始化 Execute 阶段状态。

输入

  • kb_dir
  • action: "init_execute"
  • dag: 任务依赖关系图(object格式)
  • tasks: 任务字典(object格式,key为task_id)

输出

{
  "success": true,
  "execute_status": "pending",
  "ready_tasks": ["<初始可执行任务列表>"],
  "total_tasks": <任务总数>,
  "updated_at": "<ISO时间戳>"
}

内部流程

  1. 读取状态文件
  2. 将传入的 dagtasks 写入 execute.dagexecute.tasks
  3. 计算初始 ready_tasks(depends为空的任务)
  4. 设置 execute.status = "pending"
  5. 清空 execute.blocked_by
  6. 清空 execute.file_locks
  7. 更新 execute.updated_at
  8. 立即写入磁盘

7. AppendApprovalHistory

追加审批历史记录。

输入

  • kb_dir
  • action: "append_approval"
  • approval_record: 审批记录对象

输出

{
  "success": true,
  "approval_count": <当前审批记录数量>,
  "updated_at": "<ISO时间戳>"
}

内部流程

  1. 读取状态文件
  2. approval_record 追加到 approval_history 数组(不覆盖旧记录)
  3. 更新 updated_at
  4. 立即写入磁盘

8. UpdateInfo

更新基础信息。

输入

  • kb_dir
  • action: "update_info"
  • name(可选):新名称
  • kb_dir_new(可选):新目录路径(用于重命名)

输出

{
  "success": true,
  "name": "<更新后的名称>",
  "kb_dir": "<更新后的路径>",
  "updated_at": "<ISO时间戳>"
}

内部流程

  1. 读取状态文件
  2. 若传入 name,更新 name 字段
  3. 若传入 kb_dir_new,更新 kb_dir 字段
  4. 更新 updated_at
  5. 立即写入磁盘

9. CheckTaskDependency

检查任务依赖是否满足。

输入

  • kb_dir
  • action: "check_dependency"
  • task_id

输出

{
  "task_id": "<任务ID>",
  "depends": ["<依赖任务列表>"],
  "dependency_satisfied": true/false,
  "pending_dependencies": ["<未完成的依赖任务列表>"]
}

内部流程

  1. 读取状态文件
  2. execute.tasks[<task_id>] 获取 depends 列表
  3. 检查每个依赖任务的 status
  4. 若所有依赖任务 status in ["done", "reviewed"],返回 dependency_satisfied: true
  5. 否则返回未完成的依赖列表

10. UpdateCurrentPhase

更新当前阶段。

输入

  • kb_dir
  • action: "update_current_phase"
  • current_phase: "architecture" | "dev_design" | "plan" | "execute" | "build" | "doc" | "completed"

输出

{
  "success": true,
  "current_phase": "<新阶段>",
  "updated_at": "<ISO时间戳>"
}

状态文件路径

状态文件固定路径:{kb_dir}/state.json


状态文件结构

详见 @references/state-templates.md。


重要约束

  1. 立即落盘:所有状态更新必须立即写入磁盘,不能延迟
  2. 追加审批approval_history 只能追加,不能覆盖或删除
  3. 唯一入口:只有你能读取和修改状态文件,其他代理/工作流通过你获取信息
  4. 状态一致性:更新任何字段时,必须同步更新 updated_at
  5. 错误处理:若状态文件不存在或损坏,返回错误信息而非创建新文件
Install via CLI
npx skills add https://github.com/eclipse-oniro-mirrors/notification_distributed_notification_service --skill state
Repository Details
star Stars 0
call_split Forks 0
navigation Branch main
article Path SKILL.md
More from Creator
eclipse-oniro-mirrors
eclipse-oniro-mirrors Explore all skills →