Skip to content

feat(security/tools): 为 bash 工具接入安全执行器 #141

Description

@Cai-Tang-www

背景

当前仓库已经引入 Permission Gateway / Workspace Sandbox / ToolManager 主链路,但 bash 工具仍主要通过通用工具执行路径运行,缺少独立的“安全执行器”收敛层。

在 issue #98 的整体规划中,bash 是高风险工具(命令执行 + cwd 切换 + 输出回流),需要单独接入安全执行器,明确执行前校验、执行期约束和错误输出标准。

Refs #98

目标

  • bash 工具接入统一安全执行器入口,避免散落式校验。
  • PermissionEngine 决策、workspace 约束、执行超时、输出截断在执行器层统一落地。
  • 保持主链路边界:runtime -> ToolManager -> Security Executor -> bash tool

范围

In Scope

  • 设计并落地 bash 安全执行器接口(可被 ToolManager 调用)。
  • 执行前校验:
    • 命令非空校验
    • workdir 解析与 sandbox 边界校验
    • 权限决策结果映射(allow/ask/deny)
  • 执行期控制:
    • 超时控制(context + timeout)
    • 输出大小限制与截断标记
    • 统一错误格式(供模型稳定消费)
  • 为后续 MCP/其他执行型工具复用预留抽象。

Out of Scope

  • 不在本任务引入容器级隔离(如 nsjail/firecracker)。
  • 不在本任务实现复杂命令白名单 DSL。

验收标准

  • bash 不再直接以“裸 exec + 分散校验”方式执行,改为通过安全执行器。
  • 执行器统一承接 permission + workspace + timeout + output-limit。
  • 错误输出结构化且稳定(便于模型处理)。
  • 补齐 table-driven tests,覆盖:
    • allow / deny / ask
    • workdir 越界
    • 超时中断
    • 超长输出截断
    • 非法参数
  • go test ./... 通过,且不拉低现有覆盖率门槛。

建议实现步骤

  1. internal/toolsinternal/security 新增 bash executor 抽象。
  2. ToolManager 调用执行器,而非在 bash 内部自行拼装全部防护逻辑。
  3. 统一 ToolResult 中的错误 reason/details/metadata 字段。
  4. 增加执行器单测与 bash 集成测试。

风险提示

  • 执行器抽象如果过重,可能影响后续工具接入成本;建议保持最小接口、先覆盖 bash 必需能力。
  • 需确保不破坏已有 slash 命令和 runtime tool-call 主链路行为。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions