Skip to content

scholar-cli: search-en 的输出结构会被 --workspace 改变,且与浏览器命令不一致 #64

Description

@xpzouying

Review #62 的时候发现的。

现象

search-en 的输出结构会因为加不加 --workspace 而改变,而且和三个浏览器命令不一致:

调用 输出
search-en --query X {papers, total, sources}
search-en --query X --workspace D {search: {papers, total, sources}, workspace, papers_added, total_stored}多包了一层
search-google --query X --workspace D {papers, total, source, workspace, papers_added, total_stored} ← 平铺

根源是 scholar-cli/cmd/root.go:123 这一行:

output.Success(map[string]any{
    "search":       result,      // ← 把整个 result 塞进一个 key,多了一层嵌套
    "workspace":    workspace,
    "papers_added": added,
    "total_stored": s.Count(),
})

#63 之后三个浏览器命令走的是 emitSearchroot.go:56),它是平铺的:

output.Success(map[string]any{
    "papers":       papers,
    "total":        len(papers),
    "source":       source,
    "workspace":    workspace,
    "papers_added": added,
    "total_stored": s.Count(),
})

为什么是问题

这个 CLI 的主要消费者是 agent。现在 agent 想拿论文列表,得写成这样:

搜的是 search-en 还是 search-google?    → 决定 sources 还是 source
search-en 的话,有没有带 --workspace?   → 决定 .papers 还是 .search.papers

一个可选 flag 不应该改变输出的形状——它只该往里加字段。而且 README.md 只写了 search-en 返回 {papers, total, sources},嵌套那一版在任何文档里都没提,等于是个没写下来的隐藏契约。

建议

search-en 拉平,和 emitSearch 对齐:

data := map[string]any{
    "papers":  result.Papers,
    "total":   result.Total,
    "sources": result.Sources,
}
if workspace != "" {
    // ... 加 workspace / papers_added / total_stored
}

更好的做法是顺手把 search-en 也收进 emitSearch(多源版本要多带一个 sources 字段),这样四个搜索命令共用一条输出路径,以后不会再各自漂移。

改完记得同步 scholar-cli/README.md 的 Commands 表——--workspace 会多返回哪几个字段,目前一个字都没写。

兼容性

我搜过了,skills/recipes/ 里没有任何地方消费 .search.*,所以这是个安全的改动,不用担心破坏现有 recipe。

上手提示

  • 相关代码全在 scholar-cli/cmd/root.go 一个文件里
  • 本地验证:cd scholar-cli && go build -o scholar-cli . && ./scholar-cli search-en --query "transformer" --limit 3 ,然后加 --workspace /tmp/ws 再跑一次,对比两次的 JSON 结构
  • search-en 走公开 API,不需要浏览器和 WebBridge,改起来好验证

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions