mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-14 18:30:44 +00:00
fix: show web search queries in progress drafts
This commit is contained in:
@@ -280,19 +280,76 @@ function resolveWebSearchDetail(args: unknown): string | undefined {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const query = normalizeOptionalString(record.query);
|
||||
const queries = collectWebSearchQueries(record);
|
||||
const count =
|
||||
typeof record.count === "number" && Number.isFinite(record.count) && record.count > 0
|
||||
? Math.floor(record.count)
|
||||
: undefined;
|
||||
: typeof record.max_results === "number" &&
|
||||
Number.isFinite(record.max_results) &&
|
||||
record.max_results > 0
|
||||
? Math.floor(record.max_results)
|
||||
: typeof record.num_results === "number" &&
|
||||
Number.isFinite(record.num_results) &&
|
||||
record.num_results > 0
|
||||
? Math.floor(record.num_results)
|
||||
: typeof record.limit === "number" && Number.isFinite(record.limit) && record.limit > 0
|
||||
? Math.floor(record.limit)
|
||||
: typeof record.top_k === "number" && Number.isFinite(record.top_k) && record.top_k > 0
|
||||
? Math.floor(record.top_k)
|
||||
: undefined;
|
||||
|
||||
if (!query) {
|
||||
if (queries.length === 0) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return count !== undefined ? `for "${query}" (top ${count})` : `for "${query}"`;
|
||||
const displayedQueries = queries.slice(0, 3).map((query) => `"${query}"`);
|
||||
const queryText =
|
||||
queries.length > displayedQueries.length
|
||||
? `${displayedQueries.join(", ")}…`
|
||||
: displayedQueries.join(", ");
|
||||
|
||||
return count !== undefined ? `for ${queryText} (top ${count})` : `for ${queryText}`;
|
||||
}
|
||||
|
||||
function collectWebSearchQueries(record: Record<string, unknown>): string[] {
|
||||
const queries: string[] = [];
|
||||
const seen = new Set<string>();
|
||||
const add = (value: unknown) => {
|
||||
const normalized = normalizeOptionalString(value);
|
||||
if (!normalized || seen.has(normalized)) {
|
||||
return;
|
||||
}
|
||||
seen.add(normalized);
|
||||
queries.push(normalized);
|
||||
};
|
||||
|
||||
add(record.query);
|
||||
add(record.q);
|
||||
add(record.search);
|
||||
add(record.input);
|
||||
|
||||
for (const key of ["search_query", "image_query", "queries"]) {
|
||||
const value = record[key];
|
||||
if (!Array.isArray(value)) {
|
||||
continue;
|
||||
}
|
||||
for (const entry of value) {
|
||||
if (typeof entry === "string") {
|
||||
add(entry);
|
||||
continue;
|
||||
}
|
||||
const entryRecord = asRecord(entry);
|
||||
if (!entryRecord) {
|
||||
continue;
|
||||
}
|
||||
add(entryRecord.query);
|
||||
add(entryRecord.q);
|
||||
add(entryRecord.search);
|
||||
}
|
||||
}
|
||||
|
||||
return queries;
|
||||
}
|
||||
function resolveWebFetchDetail(args: unknown): string | undefined {
|
||||
const record = asRecord(args);
|
||||
if (!record) {
|
||||
|
||||
@@ -88,6 +88,33 @@ describe("tool display details", () => {
|
||||
expect(detail).toBe('for "OpenClaw docs" (top 3)');
|
||||
});
|
||||
|
||||
it("formats web_search provider query shapes", () => {
|
||||
expect(
|
||||
formatToolDetail(
|
||||
resolveToolDisplay({
|
||||
name: "web_search",
|
||||
args: { q: "Codex OAuth API key", max_results: 5 },
|
||||
}),
|
||||
),
|
||||
).toBe('for "Codex OAuth API key" (top 5)');
|
||||
|
||||
expect(
|
||||
formatToolDetail(
|
||||
resolveToolDisplay({
|
||||
name: "web_search",
|
||||
args: {
|
||||
search_query: [
|
||||
{ q: "latest Kimi model" },
|
||||
{ q: "latest Gemini model" },
|
||||
{ q: "latest Claude model" },
|
||||
{ q: "latest OpenAI model" },
|
||||
],
|
||||
},
|
||||
}),
|
||||
),
|
||||
).toBe('for "latest Kimi model", "latest Gemini model", "latest Claude model"…');
|
||||
});
|
||||
|
||||
it("summarizes exec commands with context", () => {
|
||||
const detail = formatToolDetail(
|
||||
resolveToolDisplay({
|
||||
|
||||
@@ -332,6 +332,13 @@ describe("channel-streaming", () => {
|
||||
args: { command: "sed -n '1,80p' extensions/discord/src/draft-stream.ts" },
|
||||
}),
|
||||
).toBe("🛠️ Bash: print lines 1-80 from extensions/discord/src/draft-stream.ts");
|
||||
expect(
|
||||
formatChannelProgressDraftLine({
|
||||
event: "tool",
|
||||
name: "web_search",
|
||||
args: { search_query: [{ q: "Codex OAuth API key" }], response_length: "short" },
|
||||
}),
|
||||
).toBe('🔎 Web Search: for "Codex OAuth API key"');
|
||||
expect(
|
||||
formatChannelProgressDraftLine({
|
||||
event: "item",
|
||||
|
||||
Reference in New Issue
Block a user