onStreamingDone

onStreamingDone 即在 Streaming 完成后通过一系列的后处理器对生成的内容进行处理。

内置 PostHandler

内置的后处理器包括:

后处理器描述
Logging记录操作日志。
TimeMetric记录操作耗时。
AcceptanceMetric接受度指标。
VerifyCode检查代码错误或 PSI 问题。
RunCode运行生成的文本代码。
ParseCode将文本解析为代码块。
InferCodeLocation推断代码位置。
SaveFile将文件保存到磁盘。
OpenFile在编辑器中打开文件。
InsertCode在当前光标位置插入代码。
FormatCode格式化代码。
ParseComment解析注释为注释块。
InsertNewline插入新行。
Append将文本追加到文件中。
UpdateEditorText更新编辑器文本。

最新版本见源码:com.phodal.shirecore.middleware.BuiltinPostHandler

示例

Hello, world 示例

--- onStreamingEnd: { parseCode | saveFile | openFile | verifyCode | runCode } --- 生成一个 python hello world,使用 markdown block 返回

该代码会调用 LLM 生成一个 python hello world,然后将生成的代码块解析,保存到文件,打开文件,检查代码错误或 PSI 问题,最后运行生成的代码。

对应的后处理器有:

后处理器描述
parseCode从生成的结果中解析生成的代码块。
saveFile将保存生成的代码到文件。
openFile打开生成的文件。
verifyCode检查代码错误或 PSI 问题。
runCode运行生成的代码(取决于是否存在对应的 RunService)。

结合变量的示例

--- name: Summary description: "Generate Summary" interaction: AppendCursor data: ["a", "b"] when: $fileName.matches("/.*.java/") variables: "var2": /.*ple.shire/ { cat | grep("fileName") | sort } onStreamingEnd: { append($var2) | saveFile("summary.md") } --- Summary webpage: $fileName

这里的 var2 是一个正则表达式,用于匹配文件名中包含 ple.shire 的文件,然后将其追加到文件中。

onStreamingEnd 会在 Streaming 完成后执行,这里会将 var2 的内容追加到 output 中,最终保存到 summary.md 文件中。

提交信息生成示例

--- name: "Commit message" interaction: AppendCursor actionLocation: CommitMenu onStreamingEnd: { parseCode | updateEditorText } --- 请为给定的变更(Diff)编写一个连贯但具有描述性的代码提交信息。 背景信息:我现在使用 Git 编写一本开源电子书《AI 辅助软件工程:AI IDE 插件与编程智能体示例》,我需要为每个提交编写一个简洁但具有描述性的提交信息。 要求: - 确保包含修改了什么以及为什么。 - 以不超过 50 个字符的祈使句形式开头。 - 然后留下一个空行,如有必要,继续详细说明。 - 如果变更是一个 .shire 文件,说明我添加了一个新的示例。 遵循常规提交规范,例如: - fix(authentication): 修复密码正则表达式模式问题 - feat(storage): 添加对S3存储的支持 - test(java): 修复用户控制器的测试用例 - docs(architecture): 在主页添加架构图 Diff: $currentChanges