43 lines
1.4 KiB
TypeScript
43 lines
1.4 KiB
TypeScript
/**
|
|
* Input Transform Example - demonstrates the `input` event for intercepting user input.
|
|
*
|
|
* Start pi with this extension:
|
|
* pi -e ./examples/extensions/input-transform.ts
|
|
*
|
|
* Then type these inside pi:
|
|
* ?quick What is TypeScript? → "Respond briefly: What is TypeScript?"
|
|
* ping → "pong" (instant, no LLM)
|
|
* time → current time (instant, no LLM)
|
|
*/
|
|
import type { ExtensionAPI } from "@jaeswift/jae-coding-agent";
|
|
|
|
export default function (pi: ExtensionAPI) {
|
|
pi.on("input", async (event, ctx) => {
|
|
// Source-based logic: skip processing for extension-injected messages
|
|
if (event.source === "extension") {
|
|
return { action: "continue" };
|
|
}
|
|
|
|
// Transform: ?quick prefix for brief responses
|
|
if (event.text.startsWith("?quick ")) {
|
|
const query = event.text.slice(7).trim();
|
|
if (!query) {
|
|
ctx.ui.notify("Usage: ?quick <question>", "warning");
|
|
return { action: "handled" };
|
|
}
|
|
return { action: "transform", text: `Respond briefly in 1-2 sentences: ${query}` };
|
|
}
|
|
|
|
// Handle: instant responses without LLM (extension shows its own feedback)
|
|
if (event.text.toLowerCase() === "ping") {
|
|
ctx.ui.notify("pong", "info");
|
|
return { action: "handled" };
|
|
}
|
|
if (event.text.toLowerCase() === "time") {
|
|
ctx.ui.notify(new Date().toLocaleString(), "info");
|
|
return { action: "handled" };
|
|
}
|
|
|
|
return { action: "continue" };
|
|
});
|
|
}
|