Files
2026-07-13 12:20:32 +08:00

42 lines
1.5 KiB
TypeScript

import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
import { Type } from "typebox";
export default function (pi: ExtensionAPI) {
pi.registerTool({
name: "ask_user",
label: "Ask User",
description:
"Send a question or message to the user and wait for their reply. " +
"This is your ONLY channel to communicate with the user — they cannot see your text output. " +
"Use this for ANY question: filenames, choices, preferences, clarifications, confirmations, progress updates that need a decision, etc. " +
"The user will see a prompt in the UI and can type a response.",
parameters: Type.Object({
message: Type.String({
description:
"The question or message to show the user. Be specific and actionable. " +
"If offering choices, list them clearly (e.g. '1. Option A 2. Option B 3. Option C').",
}),
}),
async execute(_toolCallId, params, _signal, _onUpdate, ctx) {
const response = await ctx.ui.input("Agent Question", params.message);
if (!response || response === "") {
return {
content: [
{
type: "text",
text: "The user dismissed the question without responding. Proceed with your best judgment or try a reasonable default.",
},
],
details: {},
};
}
return {
content: [{ type: "text", text: `User response: ${response}` }],
details: {},
};
},
});
}