Commit 107e410ea8bf

Vincent Demeester <vincent@sbr.pm>
2026-02-10 15:54:01
feat: add renderCall/renderResult to web_search
Added custom rendering to show query arguments and backend used in the TUI during search execution.
1 parent aa45a4b
Changed files (1)
dots
pi
agent
extensions
search
dots/pi/agent/extensions/search/index.ts
@@ -12,6 +12,7 @@
  */
 
 import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
+import { Text } from "@mariozechner/pi-tui";
 import { Type } from "@sinclair/typebox";
 import {
   SearXNGBackend,
@@ -100,6 +101,27 @@ export default function (pi: ExtensionAPI) {
     parameters: Type.Object({
       query: Type.String({ description: "The search query." }),
     }),
+    renderCall(args, theme) {
+      let text = theme.fg("toolTitle", theme.bold("web_search "));
+      text += theme.fg("muted", `"${args.query}"`);
+      return new Text(text, 0, 0);
+    },
+
+    renderResult(result, { expanded }, theme) {
+      const backend = result.details?.backend || "unknown";
+      const count = result.details?.resultCount || 0;
+
+      if (result.isError) {
+        return new Text(theme.fg("error", result.content?.[0]?.text || "Search failed"), 0, 0);
+      }
+
+      let text = theme.fg("success", `✓ ${count} results`) + theme.fg("dim", ` via ${backend}`);
+      if (expanded && result.content?.[0]?.text) {
+        text += "\n" + theme.fg("muted", result.content[0].text);
+      }
+      return new Text(text, 0, 0);
+    },
+
     async execute(_toolCallId, params, signal) {
       try {
         const { results, backend, errors } = await searchWithFallback(