Skip to content

[Priority: Med] [Enhancement] 对齐 session query 的过滤参数与 cursor 分页 #334

@liujuanjuan1984

Description

@liujuanjuan1984

🔍 发现的问题 / 原始需求描述

当前 session query 契约只正式声明了 limit 分页,且 opencode.sessions.messages.list 没有暴露上游已有的 before cursor;opencode.sessions.list 也没有对齐 directoryrootsstartsearch 等过滤字段。结果是适配层虽然覆盖了“能列出来”,但与上游 OpenCode 的查询还原度仍有明显差距,客户端也无法稳定做增量加载与精确过滤。

🛠️ 详细实施方案 (必须包含涉及的文件路径和核心逻辑/伪代码)

  1. 扩展 query 参数解析器与契约声明。
    涉及文件:
  • src/opencode_a2a/jsonrpc/params.py
  • src/opencode_a2a/contracts/extensions.py
  • docs/guide.md

建议补齐字段:

  • opencode.sessions.list: directory, roots, start, search, limit
  • opencode.sessions.messages.list: limit, before
  1. 为消息分页显式暴露 next_cursor,不要只把它吞在上游 HTTP Header 里。
    涉及文件:
  • src/opencode_a2a/jsonrpc/handlers/session_queries.py
  • src/opencode_a2a/opencode_upstream_client.py

伪代码:

raw_items, next_cursor = upstream.list_messages(session_id, limit, before)
return {
  items: mapped_messages,
  next_cursor: next_cursor,
}
  1. 保持与现有 limit-only 客户端兼容。
    涉及文件:
  • src/opencode_a2a/contracts/extensions.py
  • docs/guide.md

建议把分页模型从“只有 limit”升级为“limit + optional cursor”,同时在 Agent Card 中说明 before 只适用于 message history,不适用于通用分页。

🧪 回归测试建议

  • params.py 增加字段组合校验测试,覆盖非法 before、非法 limit、旧客户端兼容。
  • opencode.sessions.messages.list 增加带 cursor 的 handler 测试,验证 next_cursor 透出。
  • 为文档与 contract 一致性测试补齐新的参数/结果字段断言。
  • 运行 ./scripts/doctor.sh

Metadata

Metadata

Assignees

No one assigned

    Labels

    status:todoPlanned but not started

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions