Skip to content

[backplane] 抽取 _safe_stream 流名清洗 helper 为通用工具 #9

@beachspainc

Description

@beachspainc

现状与证据

_safe_stream 在两处实现中承担“日志/事件流名称清洗”职责,但语义不一致、实现重复:

  • apps/server/daemon/services/log/service.py:27
  • src/cobnet/agent/eventlog/inmemory.py:36

两者均负责把输入 stream name 转成可安全使用的标识,但细节参数不同:

  • 一处做字符白名单清洗(isalnum/-/_/.)+ 小写 + 截断
  • 一处仅做 strip + 截断 + 默认值

问题

  • 语义重复:流名归一化散落在服务层和通用 agent/eventlog
  • 日后规则演进(允许字符、默认值策略、长度策略)需要同步修改多处。
  • src/cobnet/backplane 下已有通用传输/日志语义抽象方向,当前逻辑缺少统一入口。

建议

src/cobnet/backplane 新增小工具(建议 backplane/util/stream.py):

  • safe_stream(value, *, lowercase: bool = True, allow: str = "-_./", fallback: str = "log") -> str
  • sanitize_stream_token(value, *, keep_case: bool = False, max_len: int = 120)

并让:

  • apps/server/daemon/services/log/service.py 使用策略:allow 包含 -_./, lowercase=True, fallback="task"
  • src/cobnet/agent/eventlog/inmemory.py 使用策略:lowercase=False, fallback="log"

验收

  • 去除以上两处重复私有实现。
  • 保持现有行为兼容(原默认与字符策略通过参数保持)。
  • 增加单测:空值、非法字符、长度边界、大小写策略。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions