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

内置 PostHandler

内置的后处理器包括:

后处理器 描述
logging 记录操作日志。
timeMetric 记录操作耗时。
acceptanceMetric 接受度指标。
verifyCode 检查代码错误或 PSI 问题。
runCode 运行生成的文本代码。
parseCode 将文本解析为代码块。
inferCodeLocation 推断代码位置。
saveFile 将文件保存到磁盘。
openFile 在编辑器中打开文件。
insertCode 在当前光标位置插入代码。
formatCode 格式化代码。
parseComment 解析注释为注释块。
insertNewline 插入新行。
append 将文本追加到文件中。
updateEditorText 更新编辑器文本。
patch 打补丁。
diff 生成 diff view 对比。
openWebpage 打开网页。
showWebView 显示 WebView。

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

示例

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 | find("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