背景
对齐 codex-a2a #346 (残余低风险加固:错误响应路径脱敏与发布物完整性校验)。opencode-a2a 安全审计 #499 已收口(#510 合入),但其拆解范围(#500 -#504 )未包含错误响应路径脱敏与发布物校验清单。
对照 codex-a2a #346 的实施(codex-a2a PR #353 )对 opencode-a2a 逐一核查后确认:同类风险点仍存在,且当前无任何 open issue 跟踪(唯一 open issue 为 #451 ,与本项无关)。
src/opencode_a2a/execution/executor.py:_emit_error 直接把 message(调用方传入的 str(exc) / f"OpenCode error: {exc}" 等)写入客户端可见的 Task/SSE 消息,未做路径脱敏;execution/coordinator.py 的失败消息均经此出口。
src/opencode_a2a/jsonrpc/error_responses.py:adapt_jsonrpc_error 对 message、metadata 值(_stringify_metadata_value)、标准 JSON-RPC 错误码早退分支的 data、_build_context_detail 均未脱敏;build_http_error_body 的 message 未脱敏。
src/opencode_a2a/jsonrpc/application.py 未覆写 _generate_error_response:SDK 基类对裸异常以 InternalError(message=str(error)) 原样透出。
src/opencode_a2a/jsonrpc/handlers/*:多处 detail=str(exc) / InternalError(message=str(exc))(如 common.py、provider_discovery.py、session_queries.py、workspace_control.py),经上述未脱敏出口进入响应。
.github/workflows/publish.yml:Sync GitHub Release 仅上传 wheel/sdist,无 SHA256SUMS 或等价校验清单。
对照核查发现(与 codex-a2a #346 修复清单逐项对照)
存在:executor _emit_error 直出异常文本;adapt_jsonrpc_error message/metadata/标准错误码 data 未脱敏;build_http_error_body 未脱敏;裸异常兜底未脱敏;各 handler detail=str(exc);发布物缺 SHA256SUMS。
不存在(较 codex-a2a 修复前更稳):工具错误映射 execution/tool_error_mapping.py 对已知异常类型返回稳定错误串与结构化 error_code/error_meta,不直出 str(exc)。
不适用:opencode-a2a 无本地 exec/subprocess runtime(shell 会话为远端 provider 能力),无对应 exec-runtime 失败消息面。
有意的维护差异:opencode-a2a 审计交付物按 [chore] 对 opencode-a2a 执行系统安全审计(对齐 codex-a2a #331) #499 决策落 docs/security-architecture.md + issue 记录,不使用 docs/inspection/。
补充观察(独立相邻项,建议单独评估,不在本 issue 实施范围)
execution/upstream_error_translator.py 会把远端响应文本(extract_upstream_error_detail,最长 512 字符)拼入客户端可见消息。这属于远端内容信任面(对齐 codex-a2a #343 的类别),与本地路径泄露不同类;建议另行开 issue 评估,本 issue 仅在报告中登记。
验收标准
基线快照
背景
对齐 codex-a2a #346(残余低风险加固:错误响应路径脱敏与发布物完整性校验)。opencode-a2a 安全审计 #499 已收口(#510 合入),但其拆解范围(#500-#504)未包含错误响应路径脱敏与发布物校验清单。
对照 codex-a2a #346 的实施(codex-a2a PR #353)对 opencode-a2a 逐一核查后确认:同类风险点仍存在,且当前无任何 open issue 跟踪(唯一 open issue 为 #451,与本项无关)。
证据(main @ 90f9136)
src/opencode_a2a/execution/executor.py:_emit_error直接把 message(调用方传入的str(exc)/f"OpenCode error: {exc}"等)写入客户端可见的 Task/SSE 消息,未做路径脱敏;execution/coordinator.py的失败消息均经此出口。src/opencode_a2a/jsonrpc/error_responses.py:adapt_jsonrpc_error对 message、metadata 值(_stringify_metadata_value)、标准 JSON-RPC 错误码早退分支的 data、_build_context_detail均未脱敏;build_http_error_body的 message 未脱敏。src/opencode_a2a/jsonrpc/application.py未覆写_generate_error_response:SDK 基类对裸异常以InternalError(message=str(error))原样透出。src/opencode_a2a/jsonrpc/handlers/*:多处detail=str(exc)/InternalError(message=str(exc))(如 common.py、provider_discovery.py、session_queries.py、workspace_control.py),经上述未脱敏出口进入响应。.github/workflows/publish.yml:Sync GitHub Release 仅上传 wheel/sdist,无 SHA256SUMS 或等价校验清单。对照核查发现(与 codex-a2a #346 修复清单逐项对照)
_emit_error直出异常文本;adapt_jsonrpc_errormessage/metadata/标准错误码 data 未脱敏;build_http_error_body未脱敏;裸异常兜底未脱敏;各 handlerdetail=str(exc);发布物缺 SHA256SUMS。execution/tool_error_mapping.py对已知异常类型返回稳定错误串与结构化 error_code/error_meta,不直出str(exc)。docs/security-architecture.md+ issue 记录,不使用docs/inspection/。补充观察(独立相邻项,建议单独评估,不在本 issue 实施范围)
execution/upstream_error_translator.py会把远端响应文本(extract_upstream_error_detail,最长 512 字符)拼入客户端可见消息。这属于远端内容信任面(对齐 codex-a2a #343 的类别),与本地路径泄露不同类;建议另行开 issue 评估,本 issue 仅在报告中登记。验收标准
_emit_error、adapt_jsonrpc_error(message/metadata/标准错误码 data)、build_http_error_body、裸异常兜底分支docs/security-architecture.md记录错误脱敏与发布完整性策略及边界基线快照
90f913684c7bc740a66c76f715f91aa5225cb49e(main)