Skip to content

[backplane][foundation] 抽取 _as_mapping 通用 Mapping 辅助 helper #11

@beachspainc

Description

@beachspainc

现状与证据

_as_mappingapps/**src/cobnet/** 中被大量重复定义,当前语义高度一致(多数为 isinstance(value, Mapping) 检查后返回原值/None)。这是典型可抽离到 src/cobnet/backplane 的通用类型辅助函数。

命中清单(剔除 apps/google/**):

  1. apps/agentic/ports/shim/session_watch.py:27
  2. apps/client/sdk/agent/roster/hub.py:34
  3. apps/client/sdk/docs/docspec.py:111
  4. apps/client/sdk/docs/tools.py:49
  5. apps/client/sdk/shared/context/hub.py:26
  6. apps/client/sdk/toolbox/hub.py:6693
  7. apps/client/sdk/tools/catalog/hub.py:24
  8. apps/client/sdk/workspace/backplane/views/context.py:41
  9. apps/client/sdk/workspace/backplane/views/taskboard.py:21
  10. apps/client/sdk/workspace/daemon/discovery.py:29
  11. apps/client/sdk/workspace/mcp/server/app.py:127
  12. apps/client/sdk/workspace/service/hub.py:31
  13. apps/rag/query_params.py:53
  14. apps/server/controller/backplane/context.py:31
  15. apps/server/controller/backplane/toolbox.py:58
  16. apps/server/controller/knowledge/hub.py:28
  17. apps/server/controller/workspace/http.py:21
  18. apps/server/controller/workspace/hub.py:28
  19. apps/server/daemon/services/llm/usage.py:33
  20. apps/server/gateway/llm/providers.py:89
  21. apps/server/gateway/llm/tool_policy.py:68
  22. apps/server/gateway/openai/events.py:16
  23. apps/server/gateway/openai/tool_calls.py:21
  24. apps/server/session/backplane.py:19
  25. apps/server/state/agent/review.py:12
  26. apps/server/state/agent/roster.py:22
  27. apps/server/state/agent/welcome.py:23
  28. apps/shared/profile/address.py:10
  29. apps/shared/toolbox/command_hub.py:27
  30. apps/shared/workspace/registry.py:33
  31. apps/tool/shims/git_shim.py:381
  32. apps/tool/workspace/daemon/ensure.py:120
  33. src/cobnet/driver/backplane/pump.py:31
  34. src/cobnet/protocol/task/action.py:40
  35. src/cobnet/protocol/tool/request.py:16
  36. src/cobnet/protocol/worker/artifact_store.py:18
  37. src/cobnet/protocol/worker/job_spec.py:24
  38. src/cobnet/protocol/worker/request.py:30

此外存在两类变体,建议保持显式参数化分流:

  • return value if isinstance(value, Mapping) and not isinstance(value, (str, bytes)) else Nonesrc/cobnet/executor/runner/backend/node/*
  • return value if isinstance(value, dict) or {} else {}apps/vcs/service.py:721src/cobnet/agent/*/reducer.py

建议

  • src/cobnet/backplane 建立共享 helper(例如 as_mapping),默认语义为 Mapping -> value,否则 None
  • 仅保留 2 个参数化可选分支(coerce_emptyexclude_text_types)对特例(如 str/bytes)进行兼容。
  • 统一替换上述 38 处重复实现并清理冗余。

验收标准

  • 新增 src/cobnet/backplane 通用 helper 并补充单测。
  • apps/**src/cobnet/** 内上述重复定义全部切到统一 helper(Google 特例除外)。
  • 保持既有行为兼容,并为两类特例写回归测试。

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