Skip to content

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

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 特例除外)。
  • 保持既有行为兼容,并为两类特例写回归测试。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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