首页
/ 报告没了钱还在?解决 Shannon 运行完无 deliverables 文件夹

报告没了钱还在?解决 Shannon 运行完无 deliverables 文件夹

2026-04-23 17:48:48作者:傅爽业Veleda

1. 案发现场:Token 烧了 50 刀,我的 deliverables 文件夹在哪?

我本以为看着 KeygraphHQ/shannon 终端里的进度条跳到 100% 是一场胜利,结果现实给了我一记响亮的耳光。

当我在 macOS 下跑完一轮完整的 AI 渗透任务,账户里的 Anthropic 额度少了 50 刀,心急火燎地想去翻看 deliverables 文件夹里的漏洞报告时,我发现我的工作区空空如也。不仅没有报告,连个 report.md 的影子都没见着。最让人抓狂的是,明明控制台显示所有 Agent 都完成了任务,却由于一个隐蔽的 deliverables folder not created 错误,让我的白盒扫描变成了彻头彻尾的“黑洞”。

[SUCCESS] [shannon.workflow] All activities completed. 
[INFO] [shannon.output] Results are available in ./deliverables
# 现实是:ls ./deliverables 提示 "No such file or directory"
# 查看日志发现:
[ERROR] [shannon.io] Failed to persistence results: FileNotFoundError 
[DEBUG] [shannon.agents.doc_recon] Missing: pre_recon_deliverable.md 

这种钱花了、事办了、东西没落着的惨状,通常是因为 Shannon 底层那套漏洞百出的异步 IO 逻辑在文件路径映射上玩了“捉迷藏”。

💡 报错现象总结:在使用 Shannon 进行自动化审计时,任务显示 100% 完成但本地 deliverables folder not created。根本原因是 doc_reconcode_analysis 阶段的文件命名硬编码冲突(Issue #124),导致后续 Agent 无法在指定路径获取中间交付物,最终工作流因找不到持久化对象而静默跳过输出步骤。


2. 深度排雷:解析 doc_recon 阶段的文件名硬编码“暗雷”

作为一个写了 10 年底层架构的码农,我极其反感官方文档里那种“全自动化”的画大饼。我们直接扒开 src/agents/ 目录下的源码,看看为什么你的报告会“人间蒸发”。

源码追溯:解析文件命名冲突导致的逻辑断层

Shannon 的 Agent 协作链路极其依赖 Temporal 的 Activity 状态传递。在 pre_recondoc_recon 阶段,存在一个极其低级的文件名对不齐 Bug(Issue #124)。

// 模拟 src/agents/pre_recon.ts
// 预侦察 Agent 辛辛苦苦写出了这个文件
const outputFile = "code_analysis_deliverable.md";
await fs.writeFile(path.join(workspace, outputFile), result);

// ... 几分钟后,后续 Agent 启动了 ...

// 模拟 src/agents/doc_recon.ts
// 侦察 Agent 却在死磕这个名字,导致逻辑断裂
const inputFile = "pre_recon_deliverable.md"; 
const content = await fs.readFile(path.join(workspace, inputFile)); 
// 这里抛出异常,导致最后的 deliverables 文件夹根本没机会被创建

技术对照:官方默认实现 vs 实际发生的逻辑死锁

阶段 官方逻辑 (README) 实际发生的情况 (Trace) 结果
Pre-recon 输出 code_analysis_deliverable.md 写入成功,占用大量 Token 资源 ✅ 正常 (但名字错了)
Doc-recon 读取 pre_recon_deliverable.md FileNotFoundError ❌ 逻辑崩溃
Report Gen 聚合所有 .md 文件至 deliverables 检查前置依赖失败,静默退出 deliverables folder not created
IO 映射 Docker 卷挂载同步 容器内路径与宿主机映射权限冲突 ❌ 报告无法落盘

最硬核的真相是,Shannon 官方为了追求所谓的“异步解耦”,在各个 Agent 之间使用了硬编码的字符串来传递文件名。只要其中一个 Agent 的开发者手抖写错了一个字母,你的 50 刀 API 费就相当于打了水漂。


3. 填坑实战:在环境崩溃边缘手动 Patch 的笨办法

如果你非要头铁,打算自己动手修复这个 deliverables folder not created 痛点,你得准备好经历一段极其繁琐的“手术”。

首先,你得钻进 Docker 容器,或者直接修改 src/agents/ 下所有的 Python 和 TypeScript 源码。你需要像个校对员一样,把所有涉及到 deliverable.md 的文件名全部统一。接着,你得在宿主机上手动执行 mkdir deliverables && chmod 777 deliverables,因为 Shannon 的底层 IO 模块在某些 Linux 发行版(如 Ubuntu 22.04)下,并没有权限自动创建该文件夹。

话术铺垫:这一套操作下来,你不仅要精通 Node.js 和 Python 的异步文件操作,还得在 Docker 的权限泥潭里反复横跳。最惨的是,由于官方正在 Sunset Router Mode(Discussion #301),你现在的每一行手动 Patch,可能在下个版本升级时就会因为架构大改而彻底失效。这种“原生态”的修补方式,既低效又容易出错,完全背离了 AI 自动化提效的初衷。


4. 降维打击:一键化解药,让你的报告不再“失踪”

老弟,听哥一句一针见血的话:你的时间应该花在分析漏洞报告上,而不是花在研究为什么文件夹没创建这种低级 Bug 上。

既然我已经把 KeygraphHQ/shannon 所有的文件路径映射逻辑都扒光了,就没必要让你在那儿重复造轮子。我已经把针对 Issue #124 的文件名对齐补丁、以及自动化的目录权限修正脚本全都打包好了。

我已经在 GitCode 为你准备了:

  • 文件自动同步修正补丁 patch:一键修复 doc_reconcode_analysis 之间的命名冲突,确保报告闭环。
  • Shannon 环境增强包:自动检测并修复 deliverables 文件夹权限问题,支持本地路径自定义映射。
  • Token 节约版调度逻辑:在中间交付物丢失时立即中断并报警,不再白白燃烧你的 API 额度。

Action: 别再让你昂贵的 Token 费变成一堆无法落盘的虚无代码了。想要真正拿到那份属于你的渗透报告?

👉 [点击前往 GitCode 获取文件自动同步修正补丁 patch,一键救回你的报告]

解决 deliverables folder not created 并不是什么高深莫测的技术活,但它是你通往安全审计自动化的最后一道门槛。去 GitCode 拿走这套现成的解药,你会发现,所谓顶级的架构师,其实就是把那些别人还在踩的坑,替你提前填平。

登录后查看全文
热门项目推荐
相关项目推荐