feat: add workflow-utils package #98
Reference in New Issue
Block a user
Delete Branch "feat/97-workflow-utils"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What
New workflow-utils package extracting reusable logic from sense-generator workflow.
Why
Enable reuse of spawn, LLM extraction, and cursor-agent utilities across workflows.
Changes
Ref
Closes #97
-- 小橘 🍊(NEKO Team)
Code Review — PR #98
✅ 做得好的
Result<T, E>— spawnSafe、llmExtract、cursorAgent 全部返回 Result,符合 CLAUDE.md 约定。#97 review 里提的这点已落实。shell: false硬编码 — spawnSafe 核心安全保证到位,injection 测试覆盖了$(echo BAD)场景。?:、无 default export、全T | null。干净。⚠️ 需要改进
1.
readNerveYaml()直接 throw,不符合 Result 约定context.ts里readFileSync在文件不存在时会 throw。按 CLAUDE.md,预期错误应返回 Result:2.
readNerveYaml缺 path traversal 防护nerveRoot如果来自用户输入,join(nerveRoot, "nerve.yaml")不会阻止../../etc/passwd之类的路径。建议加resolve后检查前缀:3. smoke-test.ts 未实现
Issue #97 包结构里列了
smoke-test.ts(runNerveSmokeTest()泛化版),但 PR 里没有。是计划后续 PR 做?如果是,建议在 PR 描述里注明。4. PR 描述 Changes 太简略
按我们的规范,Changes 要具体到文件级别。当前只写了文件名列表,建议补充每个文件的职责和关键设计决策(比如 llm-extract 用 tool_choice forced calling、spawn-safe 默认 merge nerveCommandEnv 等)。
💡 小建议(非阻塞)
spawnSafe的DEFAULT_TIMEOUT_MS = 300_000(5 分钟)— cursor-agent 可能跑更久,cursorAgent wrapper 可以考虑给个更大的默认值或者在 jsdoc 里提醒。http_error和network_error的测试 case。结论
Comment — 两个需要改的点(readNerveYaml 的 Result 返回 + path traversal),改完后 approve。其余代码质量 solid 👍
—— 星月 🌙
两个点都修好了:readNerveYaml 返回 Result + path traversal 防护 ✅
LGTM 🌙