@humain/terminal 0.0.3-beta.2 → 0.0.4-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/bun/cli.d.ts.map +1 -1
  3. package/dist/bun/cli.js +0 -1
  4. package/dist/bun/cli.js.map +1 -1
  5. package/dist/core/agent-session.d.ts.map +1 -1
  6. package/dist/core/agent-session.js +7 -1
  7. package/dist/core/agent-session.js.map +1 -1
  8. package/dist/core/sdk.d.ts.map +1 -1
  9. package/dist/core/sdk.js +1 -1
  10. package/dist/core/sdk.js.map +1 -1
  11. package/dist/core/session-manager.d.ts +4 -0
  12. package/dist/core/session-manager.d.ts.map +1 -1
  13. package/dist/core/session-manager.js +46 -22
  14. package/dist/core/session-manager.js.map +1 -1
  15. package/dist/core/tools/index.d.ts +2 -1
  16. package/dist/core/tools/index.d.ts.map +1 -1
  17. package/dist/core/tools/index.js +9 -1
  18. package/dist/core/tools/index.js.map +1 -1
  19. package/dist/core/tools/subagent.d.ts +82 -0
  20. package/dist/core/tools/subagent.d.ts.map +1 -0
  21. package/dist/core/tools/subagent.js +980 -0
  22. package/dist/core/tools/subagent.js.map +1 -0
  23. package/dist/humain/bedrock-provider/vendor/index.bundle.d.mts +3 -0
  24. package/dist/humain/bedrock-provider/vendor/index.bundle.mjs +1509 -0
  25. package/dist/humain/index.d.ts.map +1 -1
  26. package/dist/humain/index.js +3 -0
  27. package/dist/humain/index.js.map +1 -1
  28. package/dist/humain/mcp-adapter/vendor/CHANGELOG.md +36 -0
  29. package/dist/humain/mcp-adapter/vendor/README.md +47 -5
  30. package/dist/humain/mcp-adapter/vendor/cli.js +163 -1
  31. package/dist/humain/mcp-adapter/vendor/commands.ts +128 -22
  32. package/dist/humain/mcp-adapter/vendor/config.ts +25 -7
  33. package/dist/humain/mcp-adapter/vendor/direct-tools.ts +5 -4
  34. package/dist/humain/mcp-adapter/vendor/index.bundle.mjs +1663 -458
  35. package/dist/humain/mcp-adapter/vendor/index.ts +219 -32
  36. package/dist/humain/mcp-adapter/vendor/init.ts +36 -4
  37. package/dist/humain/mcp-adapter/vendor/lifecycle.ts +315 -24
  38. package/dist/humain/mcp-adapter/vendor/mcp-auth-flow.ts +39 -6
  39. package/dist/humain/mcp-adapter/vendor/mcp-bearer-store.ts +387 -0
  40. package/dist/humain/mcp-adapter/vendor/mcp-callback-server.ts +27 -3
  41. package/dist/humain/mcp-adapter/vendor/mcp-code.ts +4 -0
  42. package/dist/humain/mcp-adapter/vendor/mcp-panel.ts +42 -13
  43. package/dist/humain/mcp-adapter/vendor/metadata-cache.ts +32 -21
  44. package/dist/humain/mcp-adapter/vendor/package-mcp-loader.ts +168 -0
  45. package/dist/humain/mcp-adapter/vendor/package.json +179 -177
  46. package/dist/humain/mcp-adapter/vendor/proxy-modes.ts +5 -4
  47. package/dist/humain/mcp-adapter/vendor/request-headers-command.ts +31 -37
  48. package/dist/humain/mcp-adapter/vendor/search-ranking.ts +92 -22
  49. package/dist/humain/mcp-adapter/vendor/server-manager.ts +140 -2
  50. package/dist/humain/mcp-adapter/vendor/session-recovery.ts +7 -0
  51. package/dist/humain/mcp-adapter/vendor/tool-approval.ts +15 -2
  52. package/dist/humain/mcp-adapter/vendor/tool-result-renderer.ts +44 -4
  53. package/dist/humain/mcp-adapter/vendor/types.ts +2 -0
  54. package/dist/humain/mcp-adapter/vendor/ui-server.ts +18 -16
  55. package/dist/humain/mcp-adapter/vendor/utils.ts +70 -0
  56. package/dist/humain/web-access/vendor/anysearch.d.ts.map +1 -1
  57. package/dist/humain/web-access/vendor/anysearch.js +3 -2
  58. package/dist/humain/web-access/vendor/anysearch.js.map +1 -1
  59. package/dist/humain/web-access/vendor/brave.d.ts.map +1 -1
  60. package/dist/humain/web-access/vendor/brave.js +14 -4
  61. package/dist/humain/web-access/vendor/brave.js.map +1 -1
  62. package/dist/humain/web-access/vendor/curator-page.d.ts +3 -0
  63. package/dist/humain/web-access/vendor/curator-page.d.ts.map +1 -1
  64. package/dist/humain/web-access/vendor/curator-page.js +4 -1
  65. package/dist/humain/web-access/vendor/curator-page.js.map +1 -1
  66. package/dist/humain/web-access/vendor/curator-server.d.ts +3 -0
  67. package/dist/humain/web-access/vendor/curator-server.d.ts.map +1 -1
  68. package/dist/humain/web-access/vendor/curator-server.js +6 -0
  69. package/dist/humain/web-access/vendor/curator-server.js.map +1 -1
  70. package/dist/humain/web-access/vendor/exa.d.ts.map +1 -1
  71. package/dist/humain/web-access/vendor/exa.js +16 -7
  72. package/dist/humain/web-access/vendor/exa.js.map +1 -1
  73. package/dist/humain/web-access/vendor/extract.d.ts.map +1 -1
  74. package/dist/humain/web-access/vendor/extract.js +31 -3
  75. package/dist/humain/web-access/vendor/extract.js.map +1 -1
  76. package/dist/humain/web-access/vendor/gemini-search.d.ts +2 -2
  77. package/dist/humain/web-access/vendor/gemini-search.d.ts.map +1 -1
  78. package/dist/humain/web-access/vendor/gemini-search.js +25 -4
  79. package/dist/humain/web-access/vendor/gemini-search.js.map +1 -1
  80. package/dist/humain/web-access/vendor/index.d.ts.map +1 -1
  81. package/dist/humain/web-access/vendor/index.js +36 -49
  82. package/dist/humain/web-access/vendor/index.js.map +1 -1
  83. package/dist/humain/web-access/vendor/page-query.d.ts +1 -2
  84. package/dist/humain/web-access/vendor/page-query.d.ts.map +1 -1
  85. package/dist/humain/web-access/vendor/page-query.js +5 -2
  86. package/dist/humain/web-access/vendor/page-query.js.map +1 -1
  87. package/dist/humain/web-access/vendor/parallel-mcp.d.ts +10 -0
  88. package/dist/humain/web-access/vendor/parallel-mcp.d.ts.map +1 -0
  89. package/dist/humain/web-access/vendor/parallel-mcp.js +224 -0
  90. package/dist/humain/web-access/vendor/parallel-mcp.js.map +1 -0
  91. package/dist/humain/web-access/vendor/parallel.d.ts +1 -0
  92. package/dist/humain/web-access/vendor/parallel.d.ts.map +1 -1
  93. package/dist/humain/web-access/vendor/parallel.js +2 -2
  94. package/dist/humain/web-access/vendor/parallel.js.map +1 -1
  95. package/dist/humain/web-access/vendor/query-rewrite.d.ts +3 -0
  96. package/dist/humain/web-access/vendor/query-rewrite.d.ts.map +1 -0
  97. package/dist/humain/web-access/vendor/query-rewrite.js +42 -0
  98. package/dist/humain/web-access/vendor/query-rewrite.js.map +1 -0
  99. package/dist/humain/web-access/vendor/serper.d.ts +4 -0
  100. package/dist/humain/web-access/vendor/serper.d.ts.map +1 -0
  101. package/dist/humain/web-access/vendor/serper.js +206 -0
  102. package/dist/humain/web-access/vendor/serper.js.map +1 -0
  103. package/dist/humain/web-access/vendor/summary-model-scope.d.ts +5 -0
  104. package/dist/humain/web-access/vendor/summary-model-scope.d.ts.map +1 -1
  105. package/dist/humain/web-access/vendor/summary-model-scope.js +10 -5
  106. package/dist/humain/web-access/vendor/summary-model-scope.js.map +1 -1
  107. package/dist/humain/web-access/vendor/summary-review.d.ts.map +1 -1
  108. package/dist/humain/web-access/vendor/summary-review.js +40 -14
  109. package/dist/humain/web-access/vendor/summary-review.js.map +1 -1
  110. package/dist/humain/web-access/vendor/tavily.d.ts.map +1 -1
  111. package/dist/humain/web-access/vendor/tavily.js +14 -4
  112. package/dist/humain/web-access/vendor/tavily.js.map +1 -1
  113. package/dist/humain/web-access/vendor/utils.d.ts +10 -0
  114. package/dist/humain/web-access/vendor/utils.d.ts.map +1 -1
  115. package/dist/humain/web-access/vendor/utils.js +70 -0
  116. package/dist/humain/web-access/vendor/utils.js.map +1 -1
  117. package/dist/humain/web-access/vendor/valyu.d.ts +6 -0
  118. package/dist/humain/web-access/vendor/valyu.d.ts.map +1 -0
  119. package/dist/humain/web-access/vendor/valyu.js +194 -0
  120. package/dist/humain/web-access/vendor/valyu.js.map +1 -0
  121. package/docs/extensions.md +1 -1
  122. package/examples/extensions/README.md +1 -1
  123. package/examples/extensions/subagent/README.md +24 -147
  124. package/npm-shrinkwrap.json +7 -2
  125. package/package.json +7 -2
  126. package/src/humain/mcp-adapter/UPSTREAM.md +1 -1
  127. package/src/humain/mcp-adapter/upstream.json +3 -3
  128. package/src/humain/mcp-adapter/vendor/CHANGELOG.md +36 -0
  129. package/src/humain/web-access/UPSTREAM.md +1 -1
  130. package/src/humain/web-access/upstream.json +4 -4
  131. package/dist/bun/register-bedrock.d.ts +0 -2
  132. package/dist/bun/register-bedrock.d.ts.map +0 -1
  133. package/dist/bun/register-bedrock.js +0 -4
  134. package/dist/bun/register-bedrock.js.map +0 -1
  135. package/examples/extensions/subagent/agents.ts +0 -126
  136. package/examples/extensions/subagent/index.ts +0 -1015
@@ -8,11 +8,12 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
8
8
  };
9
9
  import { Box, Text, truncateToWidth } from "@earendil-works/pi-tui";
10
10
  import { Type } from "typebox";
11
- import { StringEnum, complete } from "@earendil-works/pi-ai/compat";
11
+ import { StringEnum } from "@earendil-works/pi-ai/compat";
12
12
  import { normalizeFetchContentParams } from "./fetch-params.js";
13
13
  import { resolveAuthFetchProfile } from "./auth-fetch.js";
14
14
  import { findContent } from "./content-find.js";
15
15
  import { answerFromPage } from "./page-query.js";
16
+ import { rewriteSearchQuery } from "./query-rewrite.js";
16
17
  import { clearCloneCache } from "./github-extract.js";
17
18
  import { getConfiguredSearchRouting, normalizeSearchProviderSelection, RESOLVED_SEARCH_PROVIDERS, SEARCH_PROVIDERS, search } from "./gemini-search.js";
18
19
  import { formatSeconds, getWebSearchConfigDir, getWebSearchConfigPath, resolveCuratorNetworkConfig } from "./utils.js";
@@ -34,6 +35,7 @@ import { isBrowserCookieAccessAllowed } from "./gemini-web-config.js";
34
35
  import { isBraveAvailable } from "./brave.js";
35
36
  import { isOpenAISearchAvailable } from "./openai-search.js";
36
37
  import { isParallelAvailable } from "./parallel.js";
38
+ import { isParallelMcpAvailable } from "./parallel-mcp.js";
37
39
  import { isTinyFishAvailable } from "./tinyfish.js";
38
40
  import { isSearch1APIAvailable } from "./search1api.js";
39
41
  import { isSearchinfinityAvailable } from "./searchinfinity.js";
@@ -51,8 +53,10 @@ import { isAnySearchAvailable } from "./anysearch.js";
51
53
  import { isXaiSearchAvailable } from "./xai-search.js";
52
54
  import { isBrightDataAvailable } from "./brightdata.js";
53
55
  import { isSerpBaseAvailable } from "./serpbase.js";
56
+ import { isSerperAvailable } from "./serper.js";
57
+ import { isValyuAvailable } from "./valyu.js";
54
58
  import { buildSearchErrorPlan } from "./render-search-error.js";
55
- import { findModelWithProviderRouting, loadEnabledModelPatterns, modelMatchesEnabledPatterns } from "./summary-model-scope.js";
59
+ import { findModelWithProviderRouting, loadEnabledModelPatterns, modelMatchesEnabledPatterns, splitThinkingSuffix } from "./summary-model-scope.js";
56
60
  import { buildResearchArtifact, withClaimAssessment, storeResearchArtifact, getResearchArtifact, } from "./source-check.js";
57
61
  const WEB_SEARCH_CONFIG_PATH = getWebSearchConfigPath();
58
62
  let extractModulePromise;
@@ -273,6 +277,7 @@ async function getProviderAvailability(ctx) {
273
277
  openai: await isOpenAISearchAvailable(ctx),
274
278
  brave: isBraveAvailable(),
275
279
  parallel: isParallelAvailable(),
280
+ "parallel-mcp": isParallelMcpAvailable(),
276
281
  tinyfish: isTinyFishAvailable(),
277
282
  search1api: isSearch1APIAvailable(),
278
283
  searchinfinity: isSearchinfinityAvailable(),
@@ -293,10 +298,12 @@ async function getProviderAvailability(ctx) {
293
298
  xai: await isXaiSearchAvailable(ctx),
294
299
  brightdata: isBrightDataAvailable(),
295
300
  serpbase: isSerpBaseAvailable(),
301
+ serper: isSerperAvailable(),
302
+ valyu: isValyuAvailable(),
296
303
  };
297
304
  return {
298
- // DuckDuckGo, AnySearch, xAI, Bright Data, and SerpBase are explicit-only, so they never make `all` eligible.
299
- all: Object.entries(providers).some(([provider, available]) => provider !== "duckduckgo" && provider !== "anysearch" && provider !== "xai" && provider !== "brightdata" && provider !== "serpbase" && provider !== "gemini" && available) || geminiApiAvail,
305
+ // Parallel MCP, DuckDuckGo, AnySearch, xAI, Bright Data, SerpBase, Serper, and Valyu are explicit-only, so they never make `all` eligible.
306
+ all: Object.entries(providers).some(([provider, available]) => provider !== "parallel-mcp" && provider !== "duckduckgo" && provider !== "anysearch" && provider !== "xai" && provider !== "brightdata" && provider !== "serpbase" && provider !== "serper" && provider !== "valyu" && provider !== "gemini" && available) || geminiApiAvail,
300
307
  ...providers,
301
308
  };
302
309
  }
@@ -825,9 +832,14 @@ export default function (pi) {
825
832
  };
826
833
  pi.appendEntry("web-search-results", storeFetchedContentResult(fetchId, data));
827
834
  const ok = fetched.filter(f => !f.error).length;
835
+ const availability = ok === fetched.length
836
+ ? "Full page content now available."
837
+ : ok > 0
838
+ ? "Partial page content now available."
839
+ : "No page content was fetched. Stored fetch diagnostics are available.";
828
840
  pi.sendMessage({
829
841
  customType: "web-search-content-ready",
830
- content: `Content fetched for ${ok}/${fetched.length} URLs [${fetchId}]. Full page content now available.`,
842
+ content: `Content fetched for ${ok}/${fetched.length} URLs [${fetchId}]. ${availability}`,
831
843
  display: true,
832
844
  }, { triggerTurn: true });
833
845
  })
@@ -908,42 +920,6 @@ export default function (pi) {
908
920
  },
909
921
  };
910
922
  }
911
- async function resolveFirstAvailableModel(ctx, candidates) {
912
- const enabledModelPatterns = loadEnabledModelPatterns(ctx);
913
- for (const { provider, id } of candidates) {
914
- const model = findModelWithProviderRouting(ctx.modelRegistry, provider, id);
915
- if (!model || !modelMatchesEnabledPatterns(model, enabledModelPatterns))
916
- continue;
917
- const auth = await ctx.modelRegistry.getApiKeyAndHeaders(model);
918
- if (auth.ok && auth.apiKey)
919
- return { model, apiKey: auth.apiKey, headers: auth.headers };
920
- }
921
- throw new Error(`No enabled model available: ${candidates.map(c => `${c.provider}/${c.id}`).join(", ")}`);
922
- }
923
- async function rewriteSearchQuery(query, ctx, signal) {
924
- const { model, apiKey, headers } = await resolveFirstAvailableModel(ctx, [
925
- { provider: "anthropic", id: "claude-haiku-4-5" },
926
- { provider: "google", id: "gemini-3.6-flash" },
927
- { provider: "openai", id: "gpt-4.1-mini" },
928
- ]);
929
- const response = await complete(model, {
930
- messages: [{
931
- role: "user",
932
- content: [{ type: "text", text: `Rewrite this web search query to get better, more specific results. Add relevant year qualifiers, precise technical terms, and specificity. Return ONLY the improved query text, nothing else.\n\nQuery: ${query}` }],
933
- timestamp: Date.now(),
934
- }],
935
- }, { apiKey, headers, signal });
936
- if (response.stopReason === "aborted")
937
- throw new Error("Aborted");
938
- const contentParts = Array.isArray(response.content) ? response.content : [];
939
- const text = contentParts
940
- .map(part => part.type === "text" ? part.text : "")
941
- .join("")
942
- .trim();
943
- if (!text)
944
- throw new Error("Rewrite returned empty response");
945
- return text;
946
- }
947
923
  async function generateSummaryForSelectedIndices(selectedQueryIndices, resultsByIndex, summaryContext, signal, modelOverride, feedback) {
948
924
  const selectedResults = [];
949
925
  for (const qi of selectedQueryIndices) {
@@ -1010,17 +986,28 @@ export default function (pi) {
1010
986
  const configuredSummaryModel = typeof config.summaryModel === "string" ? config.summaryModel.trim() : "";
1011
987
  const preferredDefaults = [
1012
988
  { provider: "anthropic", id: "claude-haiku-4-5" },
1013
- { provider: "openai-codex", id: "gpt-5.3-codex-spark" },
989
+ { provider: "openai-codex", id: "gpt-5.6-luna" },
990
+ { provider: "openai-codex", id: "gpt-5.6-terra" },
991
+ { provider: "google", id: "gemini-3.6-flash" },
992
+ { provider: "openai", id: "gpt-5-mini" },
993
+ { provider: "deepseek", id: "deepseek-v4-flash" },
1014
994
  ];
1015
995
  const resolveAvailableModelValue = (selector) => {
1016
- const slashIndex = selector.indexOf("/");
1017
- if (slashIndex <= 0 || slashIndex >= selector.length - 1)
996
+ const parsed = splitThinkingSuffix(selector);
997
+ const slashIndex = parsed.value.indexOf("/");
998
+ if (slashIndex <= 0 || slashIndex >= parsed.value.length - 1)
1018
999
  return null;
1019
- const model = findModelWithProviderRouting(summaryContext.modelRegistry, selector.slice(0, slashIndex), selector.slice(slashIndex + 1));
1000
+ const model = findModelWithProviderRouting(summaryContext.modelRegistry, parsed.value.slice(0, slashIndex), parsed.value.slice(slashIndex + 1));
1020
1001
  if (!model)
1021
1002
  return null;
1022
1003
  const value = `${model.provider}/${model.id}`;
1023
- return availableValues.has(value) ? value : null;
1004
+ if (!availableValues.has(value))
1005
+ return null;
1006
+ if (selector !== value && !seen.has(selector)) {
1007
+ seen.add(selector);
1008
+ summaryModels.push({ value: selector, label: selector });
1009
+ }
1010
+ return selector;
1024
1011
  };
1025
1012
  let defaultSummaryModel = null;
1026
1013
  if (scopeLoaded && configuredSummaryModel.length > 0) {
@@ -1447,7 +1434,7 @@ export default function (pi) {
1447
1434
  pi.registerTool({
1448
1435
  name: toolNames.webSearch,
1449
1436
  label: "Web Search",
1450
- description: `Search the web using OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Jina, SERPdive, Kagi, Bocha, Ollama, SearXNG, DuckDuckGo, Exa, Perplexity, Gemini, AnySearch, xAI, Bright Data, or SerpBase. Pass a provider array to search only those providers simultaneously, or use provider "all" to search every eligible provider except DuckDuckGo, AnySearch, xAI, Bright Data, and SerpBase. Returns an AI-synthesized answer with source citations. OpenAI search uses a Codex subscription or OpenAI API key; xAI search uses a SuperGrok/X Premium subscription or xAI API key. DuckDuckGo, AnySearch, xAI, Bright Data, and SerpBase are available only when explicitly selected. For comprehensive research, prefer queries (plural) with 2-4 varied angles over a single query — each query gets its own synthesized answer, so varying phrasing and scope gives much broader coverage. When includeContent is true, full page content is fetched in the background. Searches auto-open the interactive browser curator and stream results live; set workflow to "none" to skip curation or "auto-summary" for a model-generated summary without the browser curator. The configured provider is used when provider is omitted or set to auto; omit provider unless explicitly overriding it. Without a configured provider, auto-selects OpenAI when suitable and available, then Exa, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Jina, SERPdive, Kagi, Bocha, Ollama, Perplexity, Gemini API, or Gemini Web. When SearXNG is configured, it is preferred first for local/private search.`,
1437
+ description: `Search the web using OpenAI, Brave, Parallel, Parallel MCP, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Jina, SERPdive, Kagi, Bocha, Ollama, SearXNG, DuckDuckGo, Exa, Perplexity, Gemini, AnySearch, Valyu, xAI, Bright Data, SerpBase, or Serper. Pass a provider array to search only those providers simultaneously, or use provider "all" to search every eligible provider except Parallel MCP, DuckDuckGo, AnySearch, Valyu, xAI, Bright Data, SerpBase, and Serper. Returns an AI-synthesized answer with source citations. OpenAI search uses a Codex subscription or OpenAI API key; xAI search uses a SuperGrok/X Premium subscription or xAI API key. Parallel MCP, DuckDuckGo, AnySearch, Valyu, xAI, Bright Data, SerpBase, and Serper are available only when explicitly selected. For comprehensive research, prefer queries (plural) with 2-4 varied angles over a single query — each query gets its own synthesized answer, so varying phrasing and scope gives much broader coverage. When includeContent is true, full page content is fetched in the background. Searches auto-open the interactive browser curator and stream results live; set workflow to "none" to skip curation or "auto-summary" for a model-generated summary without the browser curator. The configured provider is used when provider is omitted or set to auto; omit provider unless explicitly overriding it. Without a configured provider, auto-selects OpenAI when suitable and available, then Exa, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Jina, SERPdive, Kagi, Bocha, Ollama, Perplexity, Gemini API, or Gemini Web. When SearXNG is configured, it is preferred first for local/private search.`,
1451
1438
  promptSnippet: "Use for web research questions. Prefer {queries:[...]} with 2-4 varied angles over a single query for broader coverage. Omit provider unless explicitly overriding the configured default.",
1452
1439
  parameters: Type.Object({
1453
1440
  query: Type.Optional(Type.String({ description: "Single search query. For research tasks, prefer 'queries' with multiple varied angles instead." })),
@@ -1456,7 +1443,7 @@ export default function (pi) {
1456
1443
  includeContent: Type.Optional(Type.Boolean({ description: "Fetch full page content (async)" })),
1457
1444
  recencyFilter: Type.Optional(StringEnum(["day", "week", "month", "year"], { description: "Filter by recency" })),
1458
1445
  domainFilter: Type.Optional(Type.Array(Type.String(), { description: "Limit to domains (prefix with - to exclude)" })),
1459
- provider: Type.Optional(searchProviderSchema("Search provider or non-empty list of providers to search simultaneously; use all to search every eligible provider except DuckDuckGo, AnySearch, xAI, Bright Data, and SerpBase, omit this field to use the configured provider, or use auto when none is configured")),
1446
+ provider: Type.Optional(searchProviderSchema("Search provider or non-empty list of providers to search simultaneously; use all to search every eligible provider except Parallel MCP, DuckDuckGo, AnySearch, xAI, Bright Data, SerpBase, Serper, and Valyu, omit this field to use the configured provider, or use auto when none is configured")),
1460
1447
  workflow: Type.Optional(StringEnum(["none", "summary-review", "auto-summary"], {
1461
1448
  description: "Search workflow mode: none = no curator, summary-review = open curator with auto summary draft (default), auto-summary = generate summary without opening curator",
1462
1449
  })),
@@ -1959,7 +1946,7 @@ export default function (pi) {
1959
1946
  fetchContent: Type.Optional(Type.Boolean({ description: "Fetch up to 5 result pages for exact passage extraction." })),
1960
1947
  recencyFilter: Type.Optional(StringEnum(["day", "week", "month", "year"], { description: "Filter by recency." })),
1961
1948
  domainFilter: Type.Optional(Type.Array(Type.String(), { description: "Limit to domains; prefix with - to exclude." })),
1962
- provider: Type.Optional(searchProviderSchema("Search provider or non-empty list of providers to search simultaneously; all searches every eligible provider except DuckDuckGo, AnySearch, xAI, Bright Data, and SerpBase")),
1949
+ provider: Type.Optional(searchProviderSchema("Search provider or non-empty list of providers to search simultaneously; all searches every eligible provider except DuckDuckGo, AnySearch, xAI, Bright Data, SerpBase, Serper, and Valyu")),
1963
1950
  }),
1964
1951
  async execute(_callId, params, signal, _onUpdate, ctx) {
1965
1952
  const claim = typeof params.claim === "string" ? params.claim.trim() : "";