现状与证据
_as_mapping 在 apps/** 与 src/cobnet/** 中被大量重复定义,当前语义高度一致(多数为 isinstance(value, Mapping) 检查后返回原值/None)。这是典型可抽离到 src/cobnet/backplane 的通用类型辅助函数。
命中清单(剔除 apps/google/**):
apps/agentic/ports/shim/session_watch.py:27
apps/client/sdk/agent/roster/hub.py:34
apps/client/sdk/docs/docspec.py:111
apps/client/sdk/docs/tools.py:49
apps/client/sdk/shared/context/hub.py:26
apps/client/sdk/toolbox/hub.py:6693
apps/client/sdk/tools/catalog/hub.py:24
apps/client/sdk/workspace/backplane/views/context.py:41
apps/client/sdk/workspace/backplane/views/taskboard.py:21
apps/client/sdk/workspace/daemon/discovery.py:29
apps/client/sdk/workspace/mcp/server/app.py:127
apps/client/sdk/workspace/service/hub.py:31
apps/rag/query_params.py:53
apps/server/controller/backplane/context.py:31
apps/server/controller/backplane/toolbox.py:58
apps/server/controller/knowledge/hub.py:28
apps/server/controller/workspace/http.py:21
apps/server/controller/workspace/hub.py:28
apps/server/daemon/services/llm/usage.py:33
apps/server/gateway/llm/providers.py:89
apps/server/gateway/llm/tool_policy.py:68
apps/server/gateway/openai/events.py:16
apps/server/gateway/openai/tool_calls.py:21
apps/server/session/backplane.py:19
apps/server/state/agent/review.py:12
apps/server/state/agent/roster.py:22
apps/server/state/agent/welcome.py:23
apps/shared/profile/address.py:10
apps/shared/toolbox/command_hub.py:27
apps/shared/workspace/registry.py:33
apps/tool/shims/git_shim.py:381
apps/tool/workspace/daemon/ensure.py:120
src/cobnet/driver/backplane/pump.py:31
src/cobnet/protocol/task/action.py:40
src/cobnet/protocol/tool/request.py:16
src/cobnet/protocol/worker/artifact_store.py:18
src/cobnet/protocol/worker/job_spec.py:24
src/cobnet/protocol/worker/request.py:30
此外存在两类变体,建议保持显式参数化分流:
return value if isinstance(value, Mapping) and not isinstance(value, (str, bytes)) else None(src/cobnet/executor/runner/backend/node/*)
return value if isinstance(value, dict) or {} else {}(apps/vcs/service.py:721、src/cobnet/agent/*/reducer.py)
建议
- 在
src/cobnet/backplane 建立共享 helper(例如 as_mapping),默认语义为 Mapping -> value,否则 None。
- 仅保留 2 个参数化可选分支(
coerce_empty、exclude_text_types)对特例(如 str/bytes)进行兼容。
- 统一替换上述 38 处重复实现并清理冗余。
验收标准
- 新增
src/cobnet/backplane 通用 helper 并补充单测。
apps/** 和 src/cobnet/** 内上述重复定义全部切到统一 helper(Google 特例除外)。
- 保持既有行为兼容,并为两类特例写回归测试。
现状与证据
_as_mapping在apps/**与src/cobnet/**中被大量重复定义,当前语义高度一致(多数为isinstance(value, Mapping)检查后返回原值/None)。这是典型可抽离到src/cobnet/backplane的通用类型辅助函数。命中清单(剔除
apps/google/**):apps/agentic/ports/shim/session_watch.py:27apps/client/sdk/agent/roster/hub.py:34apps/client/sdk/docs/docspec.py:111apps/client/sdk/docs/tools.py:49apps/client/sdk/shared/context/hub.py:26apps/client/sdk/toolbox/hub.py:6693apps/client/sdk/tools/catalog/hub.py:24apps/client/sdk/workspace/backplane/views/context.py:41apps/client/sdk/workspace/backplane/views/taskboard.py:21apps/client/sdk/workspace/daemon/discovery.py:29apps/client/sdk/workspace/mcp/server/app.py:127apps/client/sdk/workspace/service/hub.py:31apps/rag/query_params.py:53apps/server/controller/backplane/context.py:31apps/server/controller/backplane/toolbox.py:58apps/server/controller/knowledge/hub.py:28apps/server/controller/workspace/http.py:21apps/server/controller/workspace/hub.py:28apps/server/daemon/services/llm/usage.py:33apps/server/gateway/llm/providers.py:89apps/server/gateway/llm/tool_policy.py:68apps/server/gateway/openai/events.py:16apps/server/gateway/openai/tool_calls.py:21apps/server/session/backplane.py:19apps/server/state/agent/review.py:12apps/server/state/agent/roster.py:22apps/server/state/agent/welcome.py:23apps/shared/profile/address.py:10apps/shared/toolbox/command_hub.py:27apps/shared/workspace/registry.py:33apps/tool/shims/git_shim.py:381apps/tool/workspace/daemon/ensure.py:120src/cobnet/driver/backplane/pump.py:31src/cobnet/protocol/task/action.py:40src/cobnet/protocol/tool/request.py:16src/cobnet/protocol/worker/artifact_store.py:18src/cobnet/protocol/worker/job_spec.py:24src/cobnet/protocol/worker/request.py:30此外存在两类变体,建议保持显式参数化分流:
return value if isinstance(value, Mapping) and not isinstance(value, (str, bytes)) else None(src/cobnet/executor/runner/backend/node/*)return value if isinstance(value, dict) or {} else {}(apps/vcs/service.py:721、src/cobnet/agent/*/reducer.py)建议
src/cobnet/backplane建立共享 helper(例如as_mapping),默认语义为Mapping-> value,否则None。coerce_empty、exclude_text_types)对特例(如str/bytes)进行兼容。验收标准
src/cobnet/backplane通用 helper 并补充单测。apps/**和src/cobnet/**内上述重复定义全部切到统一 helper(Google 特例除外)。