关于 wish-ssh-code-review
wish-ssh-code-review 是面向使用 Wish 构建的 Go 应用的代码审查技能,指导审查者基于代码证据检查服务器设置、中间件、会话处理和终端界面配置。
主要功能
- 01按顺序执行审查关卡
- 02检查 Wish 服务器入口
- 03审查主机密钥与中间件
- 04检查会话和 PTY 处理
- 05要求标注源码位置的发现格式
适用场景
- 01审查 Wish 服务器初始化
- 02检查中间件顺序和主机密钥配置
- 03评估会话状态与优雅关闭
- 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 |
审查关卡
撰写审查意见时,按顺序执行以下步骤。在当前步骤的通过条件满足之前,不要在后续步骤中声称存在缺陷。
- 定位 Wish 入口点 — **通过条件:**你已为每个服务端入口面找到至少一个仓库路径,该路径调用了
wish.NewServer、wish.WithMiddleware,注册了bubbletea.Middleware,或定义了顶层ssh.Handler链(明确列出这些路径)。 - 收集服务端设置证据 — 通过条件:对于步骤 1 中的每个路径,你都已从源码中记录实际的
wish.WithHostKey*/ 主机密钥配置,以及按源码顺序完整列出的中间件列表(不得凭记忆记录)。如果存在优雅关闭,请注明运行ListenAndServe和Shutdown的文件。 - 收集会话 / TUI 证据 — **通过条件:**对于每个
teaHandler(或等效处理器),你都已从源码中记录,在使用窗口尺寸之前是否检查了s.Pty(),以及应用 Lipgloss 样式的地方是否使用了每个会话对应的渲染器(bubbletea.MakeRenderer)。 - 撰写审查结果 — 通过条件:每条结果都采用
[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
审查问题
- 主机密钥是否得到安全处理?
- 中间件顺序是否正确?
- 是否实现了优雅关闭?
- 是否将 PTY 窗口尺寸传递给 TUI?
- 是否配置了连接超时?
评论
支持 Markdown