mcpField
W
wish-ssh-code-review

wish-ssh-code-review

github.com/existential-birds测试与质量85114 次安装11 周前更新
代码仓库

关于 wish-ssh-code-review

wish-ssh-code-review 是面向使用 Wish 构建的 Go 应用的代码审查技能,指导审查者基于代码证据检查服务器设置、中间件、会话处理和终端界面配置。

主要功能

  1. 01按顺序执行审查关卡
  2. 02检查 Wish 服务器入口
  3. 03审查主机密钥与中间件
  4. 04检查会话和 PTY 处理
  5. 05要求标注源码位置的发现格式

适用场景

  1. 01审查 Wish 服务器初始化
  2. 02检查中间件顺序和主机密钥配置
  3. 03评估会话状态与优雅关闭
  4. 04检查终端界面的 PTY 尺寸处理

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/existential-birds/beagle --skill wish-ssh-code-review

安装后在 Claude Code 中输入/wish-ssh-code-review确认已加载。

附带文件references/server.mdreferences/sessions.md

详细介绍

Wish SSH 代码审查

快速参考

问题类型参考资料
服务端设置、中间件references/server.md
会话处理、安全性references/sessions.md

审查关卡

撰写审查意见时,按顺序执行以下步骤。在当前步骤的通过条件满足之前,不要在后续步骤中声称存在缺陷。

  1. 定位 Wish 入口点 — **通过条件:**你已为每个服务端入口面找到至少一个仓库路径,该路径调用了 wish.NewServer、wish.WithMiddleware,注册了 bubbletea.Middleware,或定义了顶层 ssh.Handler 链(明确列出这些路径)。
  2. 收集服务端设置证据 — 通过条件:对于步骤 1 中的每个路径,你都已从源码中记录实际的 wish.WithHostKey* / 主机密钥配置,以及按源码顺序完整列出的中间件列表(不得凭记忆记录)。如果存在优雅关闭,请注明运行 ListenAndServe 和 Shutdown 的文件。
  3. 收集会话 / TUI 证据 — **通过条件:**对于每个 teaHandler(或等效处理器),你都已从源码中记录,在使用窗口尺寸之前是否检查了 s.Pty(),以及应用 Lipgloss 样式的地方是否使用了每个会话对应的渲染器(bubbletea.MakeRenderer)。
  4. 撰写审查结果 — 通过条件:每条结果都采用 [FILE:LINE] ISSUE_TITLE 格式(必要时可使用行范围),并指向快速参考中的相关行(或 references/ 中对应的章节)。

审查清单

配合审查关卡使用;撰写审查意见时,请先完成各关卡,以便以下每一项都能关联到引用的源码。

  • 主机密钥从文件加载或以安全方式生成
  • 中间件顺序正确(日志记录优先,尽早进行身份验证)
  • 使用会话上下文保存每个连接的状态
  • 优雅关闭会处理活动会话
  • 为终端应用处理 PTY 请求
  • 连接数限制可防止资源耗尽
  • 超时中间件可防止连接挂起
  • BubbleTea 中间件配置正确

关键模式

服务端设置
// GOOD - complete server setup
s, err := wish.NewServer(
    wish.WithAddress(fmt.Sprintf("%s:%d", host, port)),
    wish.WithHostKeyPath(".ssh/id_ed25519"),
    wish.WithMiddleware(
        logging.Middleware(),       // first: log all connections
        activeterm.Middleware(),    // handle terminal sizing
        bubbletea.Middleware(teaHandler),
    ),
)
if err != nil {
    return fmt.Errorf("creating server: %w", err)
}
优雅关闭
// BAD - abrupt shutdown
log.Fatal(s.ListenAndServe())

// GOOD - graceful shutdown
done := make(chan os.Signal, 1)
signal.Notify(done, os.Interrupt, syscall.SIGTERM)

go func() {
    if err := s.ListenAndServe(); err != nil && !errors.Is(err, ssh.ErrServerClosed) {
        log.Error("server error", "error", err)
    }
}()

<-done
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
if err := s.Shutdown(ctx); err != nil {
    log.Error("shutdown error", "error", err)
}
BubbleTea 处理器
func teaHandler(s ssh.Session) (tea.Model, []tea.ProgramOption) {
    pty, _, _ := s.Pty()

    model := NewModel(pty.Window.Width, pty.Window.Height)

    return model, []tea.ProgramOption{
        tea.WithAltScreen(),
        tea.WithMouseCellMotion(),
    }
}

何时加载参考资料

  • 审查服务端初始化 → server.md
  • 审查身份验证、会话状态 → sessions.md

审查问题

  1. 主机密钥是否得到安全处理?
  2. 中间件顺序是否正确?
  3. 是否实现了优雅关闭?
  4. 是否将 PTY 窗口尺寸传递给 TUI?
  5. 是否配置了连接超时?

评论

支持 Markdown