Download packages/coding-agent/examples/extensions/input-transform-streaming.ts from SaylorTwift/pi: direct link, hf CLI and curl.
- Browser
- Download file 1.21 kB
-
https://huggingface.co/SaylorTwift/pi/resolve/main/packages/coding-agent/examples/extensions/input-transform-streaming.ts
- Command line
-
hf download hf://SaylorTwift/pi/packages/coding-agent/examples/extensions/input-transform-streaming.ts
-
curl -L -o input-transform-streaming.ts https://huggingface.co/SaylorTwift/pi/resolve/main/packages/coding-agent/examples/extensions/input-transform-streaming.ts
1.21 kB
| /** | |
| * Streaming-Aware Input Gate | |
| * | |
| * Demonstrates `event.streamingBehavior` to skip expensive pre-processing | |
| * during mid-stream steering, where low latency matters. | |
| * | |
| * This extension prepends `git diff --stat` output when the user mentions | |
| * file changes, giving the model immediate context. During steering the | |
| * exec call is skipped so the correction reaches the model without delay. | |
| * | |
| * Start pi with this extension: | |
| * pi -e ./examples/extensions/input-transform-streaming.ts | |
| */ | |
| import type { ExtensionAPI } from "@earendil-works/pi-coding-agent"; | |
| const TRIGGER = /\b(changes?|diff|modified)\b/i; | |
| export default function (pi: ExtensionAPI) { | |
| pi.on("input", async (event) => { | |
| // During steering, skip the exec call — corrections should be fast | |
| if (event.streamingBehavior === "steer") { | |
| return { action: "continue" }; | |
| } | |
| if (!TRIGGER.test(event.text)) { | |
| return { action: "continue" }; | |
| } | |
| const { stdout, code } = await pi.exec("git", ["diff", "--stat"]); | |
| if (code !== 0 || !stdout.trim()) { | |
| return { action: "continue" }; | |
| } | |
| return { | |
| action: "transform", | |
| text: `${event.text}\n\nCurrent uncommitted changes:\n\`\`\`\n${stdout.trim()}\n\`\`\``, | |
| }; | |
| }); | |
| } | |