Skip to content

[Priority: Med] [Architecture] 评估将 durable task 保护层收敛为可复用的 task store 抽象 #325

@liujuanjuan1984

Description

@liujuanjuan1984

背景

#321 的首版实现中,本仓为 durable task 引入了 GuardedTaskStore,用于补齐两类当前 a2a-sdk 基础 task store / task manager 尚未内建的保护:

  1. terminal consistency
  2. task store failure wrapping

当前位置:

  • src/opencode_a2a/server/task_store.py
    • GuardedTaskStore
    • TaskStoreOperationError

该实现当前放在本仓是合理的,但从抽象归属看,这一层并不强依赖 OpenCode 特性,而更像是对 a2a-sdk task persistence boundary 的通用增强:

  • 已 terminal task 的 late overwrite protection
  • get/save/delete 的统一 operation-level failure wrapping
  • 为上层 handler / runtime 提供稳定的 task store failure 边界

如果未来仍长期保留在本仓,会带来两个问题:

  1. 其它依赖 a2a-sdk 的仓库若也遇到同类 durability 边界问题,可能重复实现类似 wrapper。
  2. 本仓需要持续维护一层“SDK task store 外围保护层”,而这层能力更像 SDK 级中间层 / policy。

当前问题

  1. GuardedTaskStore 的能力具有通用性,但当前只存在于本仓。
  2. terminal consistency 的规则仍是本仓私有实现,而不是 SDK 可复用抽象。
  3. task store operation failure wrapping 也没有统一的 SDK 级接口或 policy hook。

期望方向

评估并推进以下收敛方向:

  • 明确 GuardedTaskStore 这类能力是否适合上推为 a2a-sdk 可复用抽象。
  • 如果适合,定义最小抽象边界,例如:
    • terminal write policy
    • task store middleware / decorator
    • operation failure wrapper
  • 如果暂时不适合上推,也要在本仓内把它收敛为更稳定、可替换的 persistence boundary,而不是散落为临时补丁层。

非目标

  • 不在本 issue 内重新设计 database backend。
  • 不在本 issue 内继续扩展更多 task store 配置项。
  • 不把 session state repository / interrupt repository 混入本 issue。

建议实施步骤

  1. 盘点 GuardedTaskStore 中哪些行为是通用 A2A persistence concern,哪些是本仓私有 contract。
  2. 明确最小抽象模型:
    • middleware / decorator
    • terminal write policy
    • operation-level exception wrapper
  3. 评估:
    • 是否应继续留在本仓作为稳定封装;
    • 或应准备向 a2a-sdk 上推。
  4. 如需代码改动,再拆实现 issue;如需跨仓协作,再创建上游跟踪项。

验收标准

  • 明确 GuardedTaskStore 中哪些能力属于可复用抽象。
  • 明确本仓后续方案:本地稳定封装,还是准备上推 SDK。
  • 若需进一步实现或跨仓推进,形成独立 issue 列表。

关联

当前代码快照

  • git rev-parse HEAD: 33b0800403659f4bf8fdf72b27d1001115404d17

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions