update pi

This commit is contained in:
2026-03-27 09:22:40 +00:00
parent d5b4042b06
commit 39e7bddb35
12 changed files with 82 additions and 65 deletions
@@ -211,12 +211,12 @@ function updateWidget(ctx: ExtensionContext): void {
(resetMs > 0 ? theme.fg("dim", ` (resets in ${resetSec}s)`) : ""),
);
ctx.ui.setWidget("web-activity", new Text(lines.join("\n"), 0, 0));
ctx.ui.setWidget("web-activity", lines);
}
function formatEntryLine(
entry: ActivityEntry,
theme: { fg: (color: string, text: string) => string },
theme: ExtensionContext["ui"]["theme"],
): string {
const typeStr = entry.type === "api" ? "API" : "GET";
const target =
@@ -550,7 +550,7 @@ export default function (pi: ExtensionAPI) {
} else {
widgetUnsubscribe?.();
widgetUnsubscribe = null;
ctx.ui.setWidget("web-activity", null);
ctx.ui.setWidget("web-activity", undefined);
}
},
});
@@ -598,7 +598,7 @@ export default function (pi: ExtensionAPI) {
})),
}),
async execute(_toolCallId, params, signal, onUpdate, ctx) {
async execute(_toolCallId, params, signal, onUpdate, ctx): Promise<any> {
const queryList = params.queries ?? (params.query ? [params.query] : []);
const isMultiQuery = queryList.length > 1;
const shouldCurate = params.curate !== false && ctx?.hasUI !== false;
@@ -613,7 +613,10 @@ export default function (pi: ExtensionAPI) {
if (shouldCurate) {
closeCurator();
const { promise, resolve: resolvePromise } = Promise.withResolvers<unknown>();
let resolvePromise!: (value: unknown) => void;
const promise = new Promise<unknown>((resolve) => {
resolvePromise = resolve;
});
const includeContent = params.includeContent ?? false;
const searchResults = new Map<number, QueryResultData>();
const allUrls: string[] = [];
@@ -637,7 +640,7 @@ export default function (pi: ExtensionAPI) {
queryList,
includeContent,
numResults: params.numResults,
recencyFilter: params.recencyFilter,
recencyFilter: params.recencyFilter as "day" | "week" | "month" | "year" | undefined,
domainFilter: params.domainFilter,
availableProviders,
defaultProvider,
@@ -684,7 +687,7 @@ export default function (pi: ExtensionAPI) {
const { answer, results } = await search(queryList[qi], {
provider: defaultProvider as SearchProvider | undefined,
numResults: params.numResults,
recencyFilter: params.recencyFilter,
recencyFilter: params.recencyFilter as "day" | "week" | "month" | "year" | undefined,
domainFilter: params.domainFilter,
signal,
});
@@ -754,7 +757,7 @@ export default function (pi: ExtensionAPI) {
text = `${searchResults.size} searches (${totalSources} sources) · ${curateLabel} to review · sending in ${remaining}s`;
}
return {
content: [{ type: "text", text }],
content: [{ type: "text" as const, text }],
details: {
phase: "curate-window",
searchCount: searchResults.size,
@@ -824,7 +827,7 @@ export default function (pi: ExtensionAPI) {
const { answer, results } = await search(query, {
provider: resolvedProvider as SearchProvider | undefined,
numResults: params.numResults,
recencyFilter: params.recencyFilter,
recencyFilter: params.recencyFilter as "day" | "week" | "month" | "year" | undefined,
domainFilter: params.domainFilter,
signal,
});
@@ -1117,7 +1120,10 @@ export default function (pi: ExtensionAPI) {
`Use get_search_content({ responseId: "${responseId}", urlIndex: 0 }) for full content.`;
}
const content: Array<{ type: string; text?: string; data?: string; mimeType?: string }> = [];
const content: Array<
| { type: "image"; data: string; mimeType: string }
| { type: "text"; text: string }
> = [];
if (result.frames?.length) {
for (const frame of result.frames) {
content.push({ type: "image", data: frame.data, mimeType: frame.mimeType });
@@ -1290,7 +1296,7 @@ export default function (pi: ExtensionAPI) {
urlIndex: Type.Optional(Type.Number({ description: "Get content for URL at index" })),
}),
async execute(_toolCallId, params) {
async execute(_toolCallId, params, _signal, _onUpdate, _ctx): Promise<any> {
const data = getResult(params.responseId);
if (!data) {
return {
@@ -1477,7 +1483,7 @@ export default function (pi: ExtensionAPI) {
pi.sendMessage({
customType: "web-search-results",
content: [{ type: "text", text }],
display: "tool",
display: true,
details: { queryCount: results.length, totalResults: urls.length },
}, { triggerTurn: true, deliverAs: "followUp" });
}