Skip to content

[Bug]: 会话树完整性/审批记忆/skill 校验/凭证轮换等多处修复与加固 #414

Description

@jexShain

Summary

本次合并的若干安全加固与正确性修复,覆盖会话树完整性、审批记忆、skill 校验、凭证轮换鲁棒性、搜索面板等。

Use case / 背景

  • 会话树:/fork 引入父子链接后,delete_session 未维护该不变量,删父会话会让子会话从树视图消失。
  • 审批记忆:会话级 [a] Remember this session 需按工具/主机维度记忆,避免跨工具审批泄漏或主机重复确认。
  • skill 校验:context: fork/subagent 未声明 agent 的 skill 在加载/安装/校验三处校验不一致,会落盘后才在热加载时被拒。
  • 凭证轮换:网络错误与上下文超长错误的分类有误,导致无意义的模型降级与账号冷却。

Proposed solution(修复点)

  • 会话树完整性delete_session 删除父会话前 UPDATE sessions SET parent_session_uuid = NULL WHERE parent = ?,子会话重新成为根。
  • /sessions 切换:切换前持久化当前会话快照(persist_current=true),避免丢失自上次 AI 回合以来的 cwd/上下文。
  • /export 鲁棒性:命令历史表格转义反引号;历史查询失败显式报错而非静默空表。
  • skill 元数据统一校验:抽出 parse_skill_metadata 作为加载/安装/校验的唯一入口,拒绝 context=fork/subagent 未声明 agent 的 skill。
  • 审批记忆加固Tool trait 增加 approval_key 默认方法;web_fetch 按主机记忆审批;approval memory 增加 tool_name 维度防跨工具泄漏。
  • 搜索面板SearchSelect 结果按相关性排序(精确 > 前缀 > 子串),并支持单键 Action。
  • 凭证轮换FailureKind 分类修正——上下文超长(context_length_exceeded 等)返回 None(不可恢复);网络错误直接上报、不再降级主模型。

Acceptance criteria

  • 删除有子会话的父会话后,子会话在 /sessions 仍可见(reparent 为根)
  • /sessions 切换不丢失当前 cwd
  • /export 表格对含反引号/管道的命令渲染正确,历史查询失败有明确报错
  • context=fork/subagentagent 的 skill 在安装/校验时即被拒
  • 审批记忆按工具+主机维度隔离,无跨工具泄漏
  • 网络错误不再触发模型降级;上下文超长错误不再误判为 UsageLimit

Additional information

涉及 aish-sessionaish-shellaish-skillsaish-llm(types/approval_memory/rotation)、aish-tools(web_fetch)、aish-ui(select)。归入 0.4.0 milestone。

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingcliCLI and shell UX issuepackagingPackaging or installation issuesecuritySecurity-related issueskillsSkills-related issuetoolsTool integration issue

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions