@code-yeongyu/senpi 2026.7.31-2 → 2026.8.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.
- package/CHANGELOG.md +153 -0
- package/dist/core/agent-session.d.ts +1 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +10 -19
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/extensions/builtin/goal/persistence.d.ts +15 -0
- package/dist/core/extensions/builtin/goal/persistence.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/persistence.js +150 -18
- package/dist/core/extensions/builtin/goal/persistence.js.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/extension.d.ts.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/extension.js +15 -0
- package/dist/core/extensions/builtin/gpt-apply-patch/extension.js.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/tool.d.ts.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/tool.js +30 -3
- package/dist/core/extensions/builtin/gpt-apply-patch/tool.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-flash-0731.d.ts +3 -0
- package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-flash-0731.d.ts.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-flash-0731.js +10 -0
- package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-flash-0731.js.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-flash.d.ts +3 -0
- package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-flash.d.ts.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-flash.js +10 -0
- package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-flash.js.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-pro.d.ts +3 -0
- package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-pro.d.ts.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-pro.js +11 -0
- package/dist/core/extensions/builtin/prompt-preset/deepseek-v4-pro.js.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/deepseek-v4.d.ts +13 -0
- package/dist/core/extensions/builtin/prompt-preset/deepseek-v4.d.ts.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/deepseek-v4.js +60 -0
- package/dist/core/extensions/builtin/prompt-preset/deepseek-v4.js.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/presets.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/presets.js +42 -0
- package/dist/core/extensions/builtin/prompt-preset/presets.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/settings.d.ts +1 -1
- package/dist/core/extensions/builtin/prompt-preset/settings.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/settings.js +3 -0
- package/dist/core/extensions/builtin/prompt-preset/settings.js.map +1 -1
- package/dist/core/extensions/builtin/recommended-models/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/recommended-models/index.js +2 -1
- package/dist/core/extensions/builtin/recommended-models/index.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/monitor-notify.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/monitor-notify.js +42 -5
- package/dist/core/extensions/builtin/terminal/monitor-notify.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/monitor.js +1 -1
- package/dist/core/extensions/builtin/terminal/tools/monitor.js.map +1 -1
- package/dist/core/extensions/builtin/todotools/commands.d.ts +2 -2
- package/dist/core/extensions/builtin/todotools/commands.d.ts.map +1 -1
- package/dist/core/extensions/builtin/todotools/commands.js.map +1 -1
- package/dist/core/extensions/builtin/todotools/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/todotools/index.js +6 -3
- package/dist/core/extensions/builtin/todotools/index.js.map +1 -1
- package/dist/core/extensions/builtin/todotools/state.d.ts +1 -1
- package/dist/core/extensions/builtin/todotools/state.d.ts.map +1 -1
- package/dist/core/extensions/builtin/todotools/state.js +1 -1
- package/dist/core/extensions/builtin/todotools/state.js.map +1 -1
- package/dist/core/extensions/builtin/todotools/todo-widget-component.d.ts +19 -0
- package/dist/core/extensions/builtin/todotools/todo-widget-component.d.ts.map +1 -0
- package/dist/core/extensions/builtin/todotools/todo-widget-component.js +78 -0
- package/dist/core/extensions/builtin/todotools/todo-widget-component.js.map +1 -0
- package/dist/core/extensions/builtin/todotools/todo-widget.d.ts +13 -1
- package/dist/core/extensions/builtin/todotools/todo-widget.d.ts.map +1 -1
- package/dist/core/extensions/builtin/todotools/todo-widget.js +32 -14
- package/dist/core/extensions/builtin/todotools/todo-widget.js.map +1 -1
- package/dist/core/extensions/builtin/todotools/tools/todo.d.ts +2 -2
- package/dist/core/extensions/builtin/todotools/tools/todo.d.ts.map +1 -1
- package/dist/core/extensions/builtin/todotools/tools/todo.js +1 -1
- package/dist/core/extensions/builtin/todotools/tools/todo.js.map +1 -1
- package/dist/core/extensions/builtin/tps.d.ts.map +1 -1
- package/dist/core/extensions/builtin/tps.js +5 -2
- package/dist/core/extensions/builtin/tps.js.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/config.d.ts.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/config.js +1 -0
- package/dist/core/extensions/builtin/websearch/websearch/config.js.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/native.d.ts.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/native.js +16 -5
- package/dist/core/extensions/builtin/websearch/websearch/native.js.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/provider-endpoints.d.ts.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/provider-endpoints.js +1 -0
- package/dist/core/extensions/builtin/websearch/websearch/provider-endpoints.js.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/providers/anthropic.d.ts +4 -1
- package/dist/core/extensions/builtin/websearch/websearch/providers/anthropic.d.ts.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/providers/anthropic.js +44 -37
- package/dist/core/extensions/builtin/websearch/websearch/providers/anthropic.js.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/providers/deepseek.d.ts +3 -0
- package/dist/core/extensions/builtin/websearch/websearch/providers/deepseek.d.ts.map +1 -0
- package/dist/core/extensions/builtin/websearch/websearch/providers/deepseek.js +12 -0
- package/dist/core/extensions/builtin/websearch/websearch/providers/deepseek.js.map +1 -0
- package/dist/core/extensions/builtin/websearch/websearch/providers.d.ts.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/providers.js +2 -0
- package/dist/core/extensions/builtin/websearch/websearch/providers.js.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/renderers.d.ts.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/renderers.js +2 -2
- package/dist/core/extensions/builtin/websearch/websearch/renderers.js.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/tool.js +2 -2
- package/dist/core/extensions/builtin/websearch/websearch/tool.js.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/types.d.ts +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/types.d.ts.map +1 -1
- package/dist/core/extensions/builtin/websearch/websearch/types.js.map +1 -1
- package/dist/core/model-resolver.js +2 -2
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/thinking-levels.d.ts +5 -0
- package/dist/core/thinking-levels.d.ts.map +1 -1
- package/dist/core/thinking-levels.js +9 -59
- package/dist/core/thinking-levels.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +1 -1
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/risky-main-model-warning.d.ts +1 -1
- package/dist/modes/interactive/risky-main-model-warning.d.ts.map +1 -1
- package/dist/modes/interactive/risky-main-model-warning.js +1 -1
- package/dist/modes/interactive/risky-main-model-warning.js.map +1 -1
- package/docs/settings.md +1 -1
- package/examples/extensions/overlay-test.ts +1 -1
- package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +18 -0
- package/node_modules/@code-yeongyu/senpi-codemode/README.md +6 -3
- package/node_modules/@code-yeongyu/senpi-codemode/package.json +3 -3
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/cell-execution.ts +146 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/cell-handler.ts +21 -119
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/cell-runtime.ts +157 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-manager.ts +55 -210
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-notification.ts +98 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-snapshot.ts +81 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-state.ts +24 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-eval-result.ts +140 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-notification-queue.ts +53 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-request.ts +45 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool-options.ts +45 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool.ts +20 -342
- package/node_modules/@earendil-works/pi-agent-core/package.json +2 -2
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses/fallback-state.d.ts +24 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses/fallback-state.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses/fallback-state.js +70 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses/fallback-state.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.d.ts +2 -16
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js +8 -56
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-prompt-cache.d.ts +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-prompt-cache.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-prompt-cache.js +7 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-prompt-cache.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/model.d.ts +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/model.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/model.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.d.ts +13 -0
- package/node_modules/@earendil-works/pi-ai/dist/models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.js +71 -45
- package/node_modules/@earendil-works/pi-ai/dist/models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai-coding-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/package.json +1 -1
- package/node_modules/@earendil-works/pi-pty/package.json +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/mux.js +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/mux.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts +1 -0
- package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/tui.js +17 -3
- package/node_modules/@earendil-works/pi-tui/dist/tui.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/package.json +1 -1
- package/package.json +6 -6
|
@@ -1,45 +1,52 @@
|
|
|
1
1
|
import { providerUrl } from "../provider-endpoints.js";
|
|
2
2
|
import { collect, contentHeaders, getArray, getObject, getString, result } from "./shared.js";
|
|
3
|
+
export function buildAnthropicMessagesSearchRequest(ctx, defaultModel) {
|
|
4
|
+
const { config, request, allowedDomains, blockedDomains } = ctx;
|
|
5
|
+
const webSearchTool = { type: "web_search_20250305", name: "web_search", max_uses: 8 };
|
|
6
|
+
if (allowedDomains)
|
|
7
|
+
webSearchTool.allowed_domains = allowedDomains;
|
|
8
|
+
if (blockedDomains)
|
|
9
|
+
webSearchTool.blocked_domains = blockedDomains;
|
|
10
|
+
return {
|
|
11
|
+
url: providerUrl(config),
|
|
12
|
+
init: {
|
|
13
|
+
method: "POST",
|
|
14
|
+
headers: contentHeaders({
|
|
15
|
+
"x-api-key": config.apiKey ?? "",
|
|
16
|
+
"anthropic-version": "2023-06-01",
|
|
17
|
+
}),
|
|
18
|
+
},
|
|
19
|
+
body: {
|
|
20
|
+
model: config.model ?? defaultModel,
|
|
21
|
+
max_tokens: 1024,
|
|
22
|
+
messages: [{ role: "user", content: request.query }],
|
|
23
|
+
tools: [webSearchTool],
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export function normalizeAnthropicMessagesSearchPayload(data) {
|
|
28
|
+
const content = getArray(data.content);
|
|
29
|
+
const text = content
|
|
30
|
+
.map(getObject)
|
|
31
|
+
.map((item) => getString(item?.text))
|
|
32
|
+
.filter((value) => value !== undefined)
|
|
33
|
+
.join("\n");
|
|
34
|
+
return collect(content.flatMap((raw) => {
|
|
35
|
+
const item = getObject(raw);
|
|
36
|
+
if (item?.type !== "web_search_tool_result")
|
|
37
|
+
return [];
|
|
38
|
+
return getArray(item.content).map((searchRaw) => {
|
|
39
|
+
const searchItem = getObject(searchRaw);
|
|
40
|
+
return result(getString(searchItem?.title), getString(searchItem?.url), getString(searchItem?.page_age) ?? text);
|
|
41
|
+
});
|
|
42
|
+
}));
|
|
43
|
+
}
|
|
3
44
|
export const anthropicProvider = {
|
|
4
|
-
buildRequest(
|
|
5
|
-
|
|
6
|
-
if (allowedDomains)
|
|
7
|
-
webSearchTool.allowed_domains = allowedDomains;
|
|
8
|
-
if (blockedDomains)
|
|
9
|
-
webSearchTool.blocked_domains = blockedDomains;
|
|
10
|
-
return {
|
|
11
|
-
url: providerUrl(config),
|
|
12
|
-
init: {
|
|
13
|
-
method: "POST",
|
|
14
|
-
headers: contentHeaders({
|
|
15
|
-
"x-api-key": config.apiKey ?? "",
|
|
16
|
-
"anthropic-version": "2023-06-01",
|
|
17
|
-
}),
|
|
18
|
-
},
|
|
19
|
-
body: {
|
|
20
|
-
model: config.model ?? "claude-sonnet-4-5-20250929",
|
|
21
|
-
max_tokens: 1024,
|
|
22
|
-
messages: [{ role: "user", content: request.query }],
|
|
23
|
-
tools: [webSearchTool],
|
|
24
|
-
},
|
|
25
|
-
};
|
|
45
|
+
buildRequest(ctx) {
|
|
46
|
+
return buildAnthropicMessagesSearchRequest(ctx, "claude-sonnet-4-5-20250929");
|
|
26
47
|
},
|
|
27
48
|
normalizeResponse(data) {
|
|
28
|
-
|
|
29
|
-
const text = content
|
|
30
|
-
.map(getObject)
|
|
31
|
-
.map((item) => getString(item?.text))
|
|
32
|
-
.filter((value) => value !== undefined)
|
|
33
|
-
.join("\n");
|
|
34
|
-
return collect(content.flatMap((raw) => {
|
|
35
|
-
const item = getObject(raw);
|
|
36
|
-
if (item?.type !== "web_search_tool_result")
|
|
37
|
-
return [];
|
|
38
|
-
return getArray(item.content).map((searchRaw) => {
|
|
39
|
-
const searchItem = getObject(searchRaw);
|
|
40
|
-
return result(getString(searchItem?.title), getString(searchItem?.url), getString(searchItem?.page_age) ?? text);
|
|
41
|
-
});
|
|
42
|
-
}));
|
|
49
|
+
return normalizeAnthropicMessagesSearchPayload(data);
|
|
43
50
|
},
|
|
44
51
|
};
|
|
45
52
|
//# sourceMappingURL=anthropic.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../../../../../src/core/extensions/builtin/websearch/websearch/providers/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE9F,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../../../../../src/core/extensions/builtin/websearch/websearch/providers/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE9F,MAAM,UAAU,mCAAmC,CAAC,GAAiB,EAAE,YAAoB;IAC1F,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,GAAG,CAAC;IAChE,MAAM,aAAa,GAAe,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACnG,IAAI,cAAc;QAAE,aAAa,CAAC,eAAe,GAAG,cAAc,CAAC;IACnE,IAAI,cAAc;QAAE,aAAa,CAAC,eAAe,GAAG,cAAc,CAAC;IACnE,OAAO;QACN,GAAG,EAAE,WAAW,CAAC,MAAM,CAAC;QACxB,IAAI,EAAE;YACL,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,cAAc,CAAC;gBACvB,WAAW,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;gBAChC,mBAAmB,EAAE,YAAY;aACjC,CAAC;SACF;QACD,IAAI,EAAE;YACL,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,YAAY;YACnC,UAAU,EAAE,IAAI;YAChB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;YACpD,KAAK,EAAE,CAAC,aAAa,CAAC;SACtB;KACD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uCAAuC,CAAC,IAAgB;IACvE,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,OAAO;SAClB,GAAG,CAAC,SAAS,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;SACpC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC;SACvD,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,OAAO,OAAO,CACb,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACvB,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,IAAI,EAAE,IAAI,KAAK,wBAAwB;YAAE,OAAO,EAAE,CAAC;QACvD,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;YAC/C,MAAM,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;YACxC,OAAO,MAAM,CACZ,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,EAC5B,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,EAC1B,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,IAAI,CACvC,CAAC;QACH,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CACF,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAmB;IAChD,YAAY,CAAC,GAAiB;QAC7B,OAAO,mCAAmC,CAAC,GAAG,EAAE,4BAA4B,CAAC,CAAC;IAC/E,CAAC;IACD,iBAAiB,CAAC,IAAgB;QACjC,OAAO,uCAAuC,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;CACD,CAAC","sourcesContent":["import { providerUrl } from \"../provider-endpoints.ts\";\nimport type { BuiltSearchRequest, JsonObject, SearchResultItem } from \"../types.ts\";\nimport type { BuildContext, ProviderModule } from \"./shared.ts\";\nimport { collect, contentHeaders, getArray, getObject, getString, result } from \"./shared.ts\";\n\nexport function buildAnthropicMessagesSearchRequest(ctx: BuildContext, defaultModel: string): BuiltSearchRequest {\n\tconst { config, request, allowedDomains, blockedDomains } = ctx;\n\tconst webSearchTool: JsonObject = { type: \"web_search_20250305\", name: \"web_search\", max_uses: 8 };\n\tif (allowedDomains) webSearchTool.allowed_domains = allowedDomains;\n\tif (blockedDomains) webSearchTool.blocked_domains = blockedDomains;\n\treturn {\n\t\turl: providerUrl(config),\n\t\tinit: {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: contentHeaders({\n\t\t\t\t\"x-api-key\": config.apiKey ?? \"\",\n\t\t\t\t\"anthropic-version\": \"2023-06-01\",\n\t\t\t}),\n\t\t},\n\t\tbody: {\n\t\t\tmodel: config.model ?? defaultModel,\n\t\t\tmax_tokens: 1024,\n\t\t\tmessages: [{ role: \"user\", content: request.query }],\n\t\t\ttools: [webSearchTool],\n\t\t},\n\t};\n}\n\nexport function normalizeAnthropicMessagesSearchPayload(data: JsonObject): SearchResultItem[] {\n\tconst content = getArray(data.content);\n\tconst text = content\n\t\t.map(getObject)\n\t\t.map((item) => getString(item?.text))\n\t\t.filter((value): value is string => value !== undefined)\n\t\t.join(\"\\n\");\n\treturn collect(\n\t\tcontent.flatMap((raw) => {\n\t\t\tconst item = getObject(raw);\n\t\t\tif (item?.type !== \"web_search_tool_result\") return [];\n\t\t\treturn getArray(item.content).map((searchRaw) => {\n\t\t\t\tconst searchItem = getObject(searchRaw);\n\t\t\t\treturn result(\n\t\t\t\t\tgetString(searchItem?.title),\n\t\t\t\t\tgetString(searchItem?.url),\n\t\t\t\t\tgetString(searchItem?.page_age) ?? text,\n\t\t\t\t);\n\t\t\t});\n\t\t}),\n\t);\n}\n\nexport const anthropicProvider: ProviderModule = {\n\tbuildRequest(ctx: BuildContext): BuiltSearchRequest {\n\t\treturn buildAnthropicMessagesSearchRequest(ctx, \"claude-sonnet-4-5-20250929\");\n\t},\n\tnormalizeResponse(data: JsonObject): SearchResultItem[] {\n\t\treturn normalizeAnthropicMessagesSearchPayload(data);\n\t},\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deepseek.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/extensions/builtin/websearch/websearch/providers/deepseek.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAgB,cAAc,EAAE,MAAM,aAAa,CAAC;AAIhE,eAAO,MAAM,gBAAgB,EAAE,cAO9B,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { buildAnthropicMessagesSearchRequest, normalizeAnthropicMessagesSearchPayload } from "./anthropic.js";
|
|
2
|
+
// DeepSeek's official API serves Anthropic-compatible Messages with the
|
|
3
|
+
// server-side web_search_20250305 tool at /anthropic/v1/messages.
|
|
4
|
+
export const deepseekProvider = {
|
|
5
|
+
buildRequest(ctx) {
|
|
6
|
+
return buildAnthropicMessagesSearchRequest(ctx, "deepseek-v4-flash");
|
|
7
|
+
},
|
|
8
|
+
normalizeResponse(data) {
|
|
9
|
+
return normalizeAnthropicMessagesSearchPayload(data);
|
|
10
|
+
},
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=deepseek.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deepseek.js","sourceRoot":"","sources":["../../../../../../../src/core/extensions/builtin/websearch/websearch/providers/deepseek.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mCAAmC,EAAE,uCAAuC,EAAE,MAAM,gBAAgB,CAAC;AAG9G,wEAAwE;AACxE,kEAAkE;AAClE,MAAM,CAAC,MAAM,gBAAgB,GAAmB;IAC/C,YAAY,CAAC,GAAiB;QAC7B,OAAO,mCAAmC,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;IACtE,CAAC;IACD,iBAAiB,CAAC,IAAgB;QACjC,OAAO,uCAAuC,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;CACD,CAAC","sourcesContent":["import type { BuiltSearchRequest, JsonObject, SearchResultItem } from \"../types.ts\";\nimport { buildAnthropicMessagesSearchRequest, normalizeAnthropicMessagesSearchPayload } from \"./anthropic.ts\";\nimport type { BuildContext, ProviderModule } from \"./shared.ts\";\n\n// DeepSeek's official API serves Anthropic-compatible Messages with the\n// server-side web_search_20250305 tool at /anthropic/v1/messages.\nexport const deepseekProvider: ProviderModule = {\n\tbuildRequest(ctx: BuildContext): BuiltSearchRequest {\n\t\treturn buildAnthropicMessagesSearchRequest(ctx, \"deepseek-v4-flash\");\n\t},\n\tnormalizeResponse(data: JsonObject): SearchResultItem[] {\n\t\treturn normalizeAnthropicMessagesSearchPayload(data);\n\t},\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/websearch/websearch/providers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/websearch/websearch/providers.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACX,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,aAAa,EACb,gBAAgB,EAChB,MAAM,YAAY,CAAC;AAmBpB,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,oBAAoB,EAAE,OAAO,EAAE,aAAa,GAAG,kBAAkB,CAU3G;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,GAAG,gBAAgB,EAAE,CAEtG"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { anthropicProvider } from "./providers/anthropic.js";
|
|
2
2
|
import { braveProvider } from "./providers/brave.js";
|
|
3
|
+
import { deepseekProvider } from "./providers/deepseek.js";
|
|
3
4
|
import { duckDuckGoHtmlProvider } from "./providers/duckduckgo-html.js";
|
|
4
5
|
import { exaProvider } from "./providers/exa.js";
|
|
5
6
|
import { googleCseProvider } from "./providers/google-cse.js";
|
|
@@ -16,6 +17,7 @@ const PROVIDER_MODULES = {
|
|
|
16
17
|
tavily: tavilyProvider,
|
|
17
18
|
brave: braveProvider,
|
|
18
19
|
"duckduckgo-html": duckDuckGoHtmlProvider,
|
|
20
|
+
deepseek: deepseekProvider,
|
|
19
21
|
serper: serperProvider,
|
|
20
22
|
"google-cse": googleCseProvider,
|
|
21
23
|
"z-ai": zAiProvider,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/websearch/websearch/providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AASlD,MAAM,gBAAgB,GAA2C;IAChE,GAAG,EAAE,WAAW;IAChB,MAAM,EAAE,cAAc;IACtB,KAAK,EAAE,aAAa;IACpB,iBAAiB,EAAE,sBAAsB;IACzC,MAAM,EAAE,cAAc;IACtB,YAAY,EAAE,iBAAiB;IAC/B,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,uBAAuB;IAC/B,KAAK,EAAE,uBAAuB;IAC9B,SAAS,EAAE,iBAAiB;IAC5B,UAAU,EAAE,kBAAkB;IAC9B,GAAG,EAAE,WAAW;IAChB,IAAI,EAAE,YAAY;CAClB,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,MAA4B,EAAE,OAAsB;IACtF,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC;IAC3D,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjF,OAAO,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC;QACrD,MAAM;QACN,OAAO;QACP,UAAU;QACV,cAAc;QACd,cAAc;KACd,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,QAAwB,EAAE,OAAgB;IACjF,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;AAClF,CAAC","sourcesContent":["import { anthropicProvider } from \"./providers/anthropic.ts\";\nimport { braveProvider } from \"./providers/brave.ts\";\nimport { duckDuckGoHtmlProvider } from \"./providers/duckduckgo-html.ts\";\nimport { exaProvider } from \"./providers/exa.ts\";\nimport { googleCseProvider } from \"./providers/google-cse.ts\";\nimport { kimiProvider } from \"./providers/kimi.ts\";\nimport { openAiResponsesProvider } from \"./providers/openai-responses.ts\";\nimport { perplexityProvider } from \"./providers/perplexity.ts\";\nimport { serperProvider } from \"./providers/serper.ts\";\nimport type { ProviderModule } from \"./providers/shared.ts\";\nimport { parseObjectPayload, resolveDomainFilters } from \"./providers/shared.ts\";\nimport { tavilyProvider } from \"./providers/tavily.ts\";\nimport { xaiProvider } from \"./providers/xai.ts\";\nimport { zAiProvider } from \"./providers/z-ai.ts\";\nimport type {\n\tBuiltSearchRequest,\n\tSearchProvider,\n\tSearchProviderConfig,\n\tSearchRequest,\n\tSearchResultItem,\n} from \"./types.ts\";\n\nconst PROVIDER_MODULES: Record<SearchProvider, ProviderModule> = {\n\texa: exaProvider,\n\ttavily: tavilyProvider,\n\tbrave: braveProvider,\n\t\"duckduckgo-html\": duckDuckGoHtmlProvider,\n\tserper: serperProvider,\n\t\"google-cse\": googleCseProvider,\n\t\"z-ai\": zAiProvider,\n\topenai: openAiResponsesProvider,\n\tcodex: openAiResponsesProvider,\n\tanthropic: anthropicProvider,\n\tperplexity: perplexityProvider,\n\txai: xaiProvider,\n\tkimi: kimiProvider,\n};\n\nexport function buildSearchRequest(config: SearchProviderConfig, request: SearchRequest): BuiltSearchRequest {\n\tconst maxResults = config.maxResults ?? request.maxResults;\n\tconst { allowedDomains, blockedDomains } = resolveDomainFilters(config, request);\n\treturn PROVIDER_MODULES[config.provider].buildRequest({\n\t\tconfig,\n\t\trequest,\n\t\tmaxResults,\n\t\tallowedDomains,\n\t\tblockedDomains,\n\t});\n}\n\nexport function normalizeSearchResponse(provider: SearchProvider, payload: unknown): SearchResultItem[] {\n\treturn PROVIDER_MODULES[provider].normalizeResponse(parseObjectPayload(payload));\n}\n"]}
|
|
1
|
+
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/websearch/websearch/providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AASlD,MAAM,gBAAgB,GAA2C;IAChE,GAAG,EAAE,WAAW;IAChB,MAAM,EAAE,cAAc;IACtB,KAAK,EAAE,aAAa;IACpB,iBAAiB,EAAE,sBAAsB;IACzC,QAAQ,EAAE,gBAAgB;IAC1B,MAAM,EAAE,cAAc;IACtB,YAAY,EAAE,iBAAiB;IAC/B,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,uBAAuB;IAC/B,KAAK,EAAE,uBAAuB;IAC9B,SAAS,EAAE,iBAAiB;IAC5B,UAAU,EAAE,kBAAkB;IAC9B,GAAG,EAAE,WAAW;IAChB,IAAI,EAAE,YAAY;CAClB,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,MAA4B,EAAE,OAAsB;IACtF,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC;IAC3D,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjF,OAAO,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC;QACrD,MAAM;QACN,OAAO;QACP,UAAU;QACV,cAAc;QACd,cAAc;KACd,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,QAAwB,EAAE,OAAgB;IACjF,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;AAClF,CAAC","sourcesContent":["import { anthropicProvider } from \"./providers/anthropic.ts\";\nimport { braveProvider } from \"./providers/brave.ts\";\nimport { deepseekProvider } from \"./providers/deepseek.ts\";\nimport { duckDuckGoHtmlProvider } from \"./providers/duckduckgo-html.ts\";\nimport { exaProvider } from \"./providers/exa.ts\";\nimport { googleCseProvider } from \"./providers/google-cse.ts\";\nimport { kimiProvider } from \"./providers/kimi.ts\";\nimport { openAiResponsesProvider } from \"./providers/openai-responses.ts\";\nimport { perplexityProvider } from \"./providers/perplexity.ts\";\nimport { serperProvider } from \"./providers/serper.ts\";\nimport type { ProviderModule } from \"./providers/shared.ts\";\nimport { parseObjectPayload, resolveDomainFilters } from \"./providers/shared.ts\";\nimport { tavilyProvider } from \"./providers/tavily.ts\";\nimport { xaiProvider } from \"./providers/xai.ts\";\nimport { zAiProvider } from \"./providers/z-ai.ts\";\nimport type {\n\tBuiltSearchRequest,\n\tSearchProvider,\n\tSearchProviderConfig,\n\tSearchRequest,\n\tSearchResultItem,\n} from \"./types.ts\";\n\nconst PROVIDER_MODULES: Record<SearchProvider, ProviderModule> = {\n\texa: exaProvider,\n\ttavily: tavilyProvider,\n\tbrave: braveProvider,\n\t\"duckduckgo-html\": duckDuckGoHtmlProvider,\n\tdeepseek: deepseekProvider,\n\tserper: serperProvider,\n\t\"google-cse\": googleCseProvider,\n\t\"z-ai\": zAiProvider,\n\topenai: openAiResponsesProvider,\n\tcodex: openAiResponsesProvider,\n\tanthropic: anthropicProvider,\n\tperplexity: perplexityProvider,\n\txai: xaiProvider,\n\tkimi: kimiProvider,\n};\n\nexport function buildSearchRequest(config: SearchProviderConfig, request: SearchRequest): BuiltSearchRequest {\n\tconst maxResults = config.maxResults ?? request.maxResults;\n\tconst { allowedDomains, blockedDomains } = resolveDomainFilters(config, request);\n\treturn PROVIDER_MODULES[config.provider].buildRequest({\n\t\tconfig,\n\t\trequest,\n\t\tmaxResults,\n\t\tallowedDomains,\n\t\tblockedDomains,\n\t});\n}\n\nexport function normalizeSearchResponse(provider: SearchProvider, payload: unknown): SearchResultItem[] {\n\treturn PROVIDER_MODULES[provider].normalizeResponse(parseObjectPayload(payload));\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderers.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/websearch/websearch/renderers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAG9C,OAAO,KAAK,EAA4D,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEhH,UAAU,SAAS;IAClB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACvC;AAED,UAAU,UAAU;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,UAAU,UAAU,CAAC,QAAQ;IAC5B,OAAO,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,OAAO,CAAC,EAAE,QAAQ,CAAC;CACnB;AAED,UAAU,mBAAmB;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAuCD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAMzE;AAED,wBAAgB,kBAAkB,CACjC,MAAM,EAAE,UAAU,CAAC,mBAAmB,CAAC,EACvC,OAAO,EAAE,mBAAmB,EAC5B,KAAK,EAAE,SAAS,GACd,IAAI,
|
|
1
|
+
{"version":3,"file":"renderers.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/websearch/websearch/renderers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAG9C,OAAO,KAAK,EAA4D,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEhH,UAAU,SAAS;IAClB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACvC;AAED,UAAU,UAAU;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,UAAU,UAAU,CAAC,QAAQ;IAC5B,OAAO,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,OAAO,CAAC,EAAE,QAAQ,CAAC;CACnB;AAED,UAAU,mBAAmB;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAuCD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAMzE;AAED,wBAAgB,kBAAkB,CACjC,MAAM,EAAE,UAAU,CAAC,mBAAmB,CAAC,EACvC,OAAO,EAAE,mBAAmB,EAC5B,KAAK,EAAE,SAAS,GACd,IAAI,CA6CN"}
|
|
@@ -45,13 +45,13 @@ export function renderSearchResult(result, options, theme) {
|
|
|
45
45
|
const details = result.details;
|
|
46
46
|
if (isSearchProgressDetails(details)) {
|
|
47
47
|
if (details.currentProvider) {
|
|
48
|
-
const line = theme.fg("warning", `Searching "${shorten(details.query, 80)}" via ${details.currentProvider}
|
|
48
|
+
const line = theme.fg("warning", `Searching "${shorten(details.query, 80)}" via ${details.currentProvider}`);
|
|
49
49
|
const route = routeStateLabel(details);
|
|
50
50
|
const rows = options.expanded && route ? [line, theme.fg("muted", `route ${route}`)] : [line];
|
|
51
51
|
return new Text(rows.join("\n"), 0, 0);
|
|
52
52
|
}
|
|
53
53
|
const route = details.providerLabels.length > 0 ? details.providerLabels.join(" -> ") : "configured providers";
|
|
54
|
-
return new Text(theme.fg("warning", `Searching "${shorten(details.query, 80)}" via ${route}
|
|
54
|
+
return new Text(theme.fg("warning", `Searching "${shorten(details.query, 80)}" via ${route}`), 0, 0);
|
|
55
55
|
}
|
|
56
56
|
return new Text(theme.fg("warning", result.content[0]?.text ?? "Searching the web..."), 0, 0);
|
|
57
57
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderers.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/websearch/websearch/renderers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAE9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAwBjD,SAAS,OAAO,CAAC,KAAa,EAAE,GAAW;IAC1C,OAAO,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;AACpE,CAAC;AAED,SAAS,YAAY,CAAC,UAAkB;IACvC,OAAO,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,CAAC;AACrF,CAAC;AAED,SAAS,YAAY,CAAC,QAAmC;IACxD,OAAO,QAAQ;QACd,CAAC,CAAC,QAAQ;aACP,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;aACrG,IAAI,CAAC,MAAM,CAAC;QACf,CAAC,CAAC,EAAE,CAAC;AACP,CAAC;AAED,SAAS,eAAe,CAAC,OAA8B;IACtD,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,cAAc,CAAC;IAC7D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;IACxC,OAAO,MAAM;SACX,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACrB,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,OAAO;YAAE,OAAO,GAAG,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAClF,OAAO,GAAG,KAAK,IAAI,KAAK,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IAC1E,CAAC,CAAC;SACD,IAAI,CAAC,MAAM,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAwC;IACxE,OAAO,OAAO,KAAK,SAAS,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,WAAW,CAAC;AACrF,CAAC;AAED,SAAS,oBAAoB,CAAC,OAA4B;IACzD,OAAO,OAAO,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAgB,EAAE,KAAgB;IAClE,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC;IAC7D,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtF,OAAO,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,kBAAkB,CACjC,MAAuC,EACvC,OAA4B,EAC5B,KAAgB;IAEhB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,IAAI,uBAAuB,CAAC,OAAO,CAAC,EAAE,CAAC;YACtC,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;gBAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CACpB,SAAS,EACT,cAAc,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,OAAO,CAAC,eAAe,SAAS,OAAO,CAAC,UAAU,GAAG,CACtG,CAAC;gBACF,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;gBACvC,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC9F,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACxC,CAAC;YACD,MAAM,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC;YAC/G,OAAO,IAAI,IAAI,CACd,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,cAAc,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,KAAK,SAAS,OAAO,CAAC,UAAU,GAAG,CAAC,EACzG,CAAC,EACD,CAAC,CACD,CAAC;QACH,CAAC;QACD,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,sBAAsB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/F,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAC/B,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACtF,IAAI,uBAAuB,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9G,IAAI,oBAAoB,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3F,IAAI,OAAO,CAAC,KAAK;QAAE,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAE3E,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;IACrC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,OAAO,GACZ,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,KAAK,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAC/D,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,QAAQ,OAAO,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5E,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAEhE,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAEhD,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC1G,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC;QAC3D,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QACvG,IAAI,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACnF,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,YAAY,eAAe,CAAC,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACxC,CAAC","sourcesContent":["import { Text } from \"@earendil-works/pi-tui\";\n\nimport { providerEntryLabel } from \"./search.ts\";\nimport type { SearchDetails, SearchErrorDetails, SearchProgressDetails, SearchRenderDetails } from \"./types.ts\";\n\ninterface ThemeLike {\n\tbold(value: string): string;\n\tfg(key: string, value: string): string;\n}\n\ninterface SearchArgs {\n\tquery: string;\n\tallowed_domains?: string[];\n\tblocked_domains?: string[];\n}\n\ninterface ResultLike<TDetails> {\n\tcontent: ReadonlyArray<{ type: string; text?: string }>;\n\tdetails?: TDetails;\n}\n\ninterface RenderResultOptions {\n\texpanded?: boolean;\n\tisPartial?: boolean;\n}\n\nfunction shorten(value: string, max: number): string {\n\treturn value.length <= max ? value : `${value.slice(0, max - 1)}…`;\n}\n\nfunction durationText(durationMs: number): string {\n\treturn durationMs >= 1000 ? `${Math.round(durationMs / 1000)}s` : `${durationMs}ms`;\n}\n\nfunction attemptLabel(attempts: SearchDetails[\"attempts\"]): string {\n\treturn attempts\n\t\t? attempts\n\t\t\t\t.map((attempt) => `${providerEntryLabel(attempt)}:${attempt.error ? \"failed\" : attempt.resultsCount}`)\n\t\t\t\t.join(\" -> \")\n\t\t: \"\";\n}\n\nfunction routeStateLabel(details: SearchProgressDetails): string {\n\tconst labels = details.routeLabels ?? details.providerLabels;\n\tif (labels.length === 0) return \"\";\n\tconst attempts = details.attempts ?? [];\n\treturn labels\n\t\t.map((label, index) => {\n\t\t\tconst attempt = attempts[index];\n\t\t\tif (attempt) return `${label}:${attempt.error ? \"failed\" : attempt.resultsCount}`;\n\t\t\treturn `${label}:${index === attempts.length ? \"searching\" : \"pending\"}`;\n\t\t})\n\t\t.join(\" -> \");\n}\n\nfunction isSearchProgressDetails(details: SearchRenderDetails | undefined): details is SearchProgressDetails {\n\treturn details !== undefined && \"phase\" in details && details.phase === \"searching\";\n}\n\nfunction isSearchErrorDetails(details: SearchRenderDetails): details is SearchErrorDetails {\n\treturn \"phase\" in details && details.phase === \"error\";\n}\n\nexport function renderSearchCall(args: SearchArgs, theme: ThemeLike): Text {\n\tconst head = theme.fg(\"toolTitle\", theme.bold(\"web_search \"));\n\tconst query = theme.fg(\"accent\", `\"${shorten(args.query, 90)}\"`);\n\tconst domains = args.allowed_domains ?? args.blocked_domains;\n\tconst filter = domains?.length ? theme.fg(\"muted\", ` domains:${domains.length}`) : \"\";\n\treturn new Text(head + query + filter, 0, 0);\n}\n\nexport function renderSearchResult(\n\tresult: ResultLike<SearchRenderDetails>,\n\toptions: RenderResultOptions,\n\ttheme: ThemeLike,\n): Text {\n\tif (options.isPartial) {\n\t\tconst details = result.details;\n\t\tif (isSearchProgressDetails(details)) {\n\t\t\tif (details.currentProvider) {\n\t\t\t\tconst line = theme.fg(\n\t\t\t\t\t\"warning\",\n\t\t\t\t\t`Searching \"${shorten(details.query, 80)}\" via ${details.currentProvider} (max ${details.maxResults})`,\n\t\t\t\t);\n\t\t\t\tconst route = routeStateLabel(details);\n\t\t\t\tconst rows = options.expanded && route ? [line, theme.fg(\"muted\", `route ${route}`)] : [line];\n\t\t\t\treturn new Text(rows.join(\"\\n\"), 0, 0);\n\t\t\t}\n\t\t\tconst route = details.providerLabels.length > 0 ? details.providerLabels.join(\" -> \") : \"configured providers\";\n\t\t\treturn new Text(\n\t\t\t\ttheme.fg(\"warning\", `Searching \"${shorten(details.query, 80)}\" via ${route} (max ${details.maxResults})`),\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t);\n\t\t}\n\t\treturn new Text(theme.fg(\"warning\", result.content[0]?.text ?? \"Searching the web...\"), 0, 0);\n\t}\n\n\tconst details = result.details;\n\tif (!details) return new Text(theme.fg(\"muted\", result.content[0]?.text ?? \"\"), 0, 0);\n\tif (isSearchProgressDetails(details)) return new Text(theme.fg(\"muted\", result.content[0]?.text ?? \"\"), 0, 0);\n\tif (isSearchErrorDetails(details)) return new Text(theme.fg(\"error\", details.error), 0, 0);\n\tif (details.error) return new Text(theme.fg(\"error\", details.error), 0, 0);\n\n\tconst count = details.results.length;\n\tconst provider = providerEntryLabel(details);\n\tconst summary =\n\t\ttheme.fg(\"success\", `${count} result${count === 1 ? \"\" : \"s\"}`) +\n\t\ttheme.fg(\"muted\", ` via ${provider} in ${durationText(details.durationMs)}`) +\n\t\t(details.truncated ? theme.fg(\"warning\", \" (truncated)\") : \"\");\n\n\tif (count === 0) return new Text(summary, 0, 0);\n\n\tconst attempts = attemptLabel(details.attempts);\n\tconst rows = options.expanded && attempts ? [summary, theme.fg(\"muted\", `route ${attempts}`)] : [summary];\n\tconst visibleLimit = options.expanded ? 8 : 3;\n\tfor (const item of details.results.slice(0, visibleLimit)) {\n\t\trows.push(`${theme.fg(\"accent\", shorten(item.title, 80))} ${theme.fg(\"dim\", shorten(item.url, 100))}`);\n\t\tif (item.snippet) rows.push(theme.fg(\"muted\", ` ${shorten(item.snippet, 140)}`));\n\t}\n\tif (details.results.length > visibleLimit) {\n\t\trows.push(theme.fg(\"dim\", `… ${details.results.length - visibleLimit} more sources`));\n\t}\n\treturn new Text(rows.join(\"\\n\"), 0, 0);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"renderers.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/websearch/websearch/renderers.ts"],"names":[],"mappings":"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","sourcesContent":["import { Text } from \"@earendil-works/pi-tui\";\n\nimport { providerEntryLabel } from \"./search.ts\";\nimport type { SearchDetails, SearchErrorDetails, SearchProgressDetails, SearchRenderDetails } from \"./types.ts\";\n\ninterface ThemeLike {\n\tbold(value: string): string;\n\tfg(key: string, value: string): string;\n}\n\ninterface SearchArgs {\n\tquery: string;\n\tallowed_domains?: string[];\n\tblocked_domains?: string[];\n}\n\ninterface ResultLike<TDetails> {\n\tcontent: ReadonlyArray<{ type: string; text?: string }>;\n\tdetails?: TDetails;\n}\n\ninterface RenderResultOptions {\n\texpanded?: boolean;\n\tisPartial?: boolean;\n}\n\nfunction shorten(value: string, max: number): string {\n\treturn value.length <= max ? value : `${value.slice(0, max - 1)}…`;\n}\n\nfunction durationText(durationMs: number): string {\n\treturn durationMs >= 1000 ? `${Math.round(durationMs / 1000)}s` : `${durationMs}ms`;\n}\n\nfunction attemptLabel(attempts: SearchDetails[\"attempts\"]): string {\n\treturn attempts\n\t\t? attempts\n\t\t\t\t.map((attempt) => `${providerEntryLabel(attempt)}:${attempt.error ? \"failed\" : attempt.resultsCount}`)\n\t\t\t\t.join(\" -> \")\n\t\t: \"\";\n}\n\nfunction routeStateLabel(details: SearchProgressDetails): string {\n\tconst labels = details.routeLabels ?? details.providerLabels;\n\tif (labels.length === 0) return \"\";\n\tconst attempts = details.attempts ?? [];\n\treturn labels\n\t\t.map((label, index) => {\n\t\t\tconst attempt = attempts[index];\n\t\t\tif (attempt) return `${label}:${attempt.error ? \"failed\" : attempt.resultsCount}`;\n\t\t\treturn `${label}:${index === attempts.length ? \"searching\" : \"pending\"}`;\n\t\t})\n\t\t.join(\" -> \");\n}\n\nfunction isSearchProgressDetails(details: SearchRenderDetails | undefined): details is SearchProgressDetails {\n\treturn details !== undefined && \"phase\" in details && details.phase === \"searching\";\n}\n\nfunction isSearchErrorDetails(details: SearchRenderDetails): details is SearchErrorDetails {\n\treturn \"phase\" in details && details.phase === \"error\";\n}\n\nexport function renderSearchCall(args: SearchArgs, theme: ThemeLike): Text {\n\tconst head = theme.fg(\"toolTitle\", theme.bold(\"web_search \"));\n\tconst query = theme.fg(\"accent\", `\"${shorten(args.query, 90)}\"`);\n\tconst domains = args.allowed_domains ?? args.blocked_domains;\n\tconst filter = domains?.length ? theme.fg(\"muted\", ` domains:${domains.length}`) : \"\";\n\treturn new Text(head + query + filter, 0, 0);\n}\n\nexport function renderSearchResult(\n\tresult: ResultLike<SearchRenderDetails>,\n\toptions: RenderResultOptions,\n\ttheme: ThemeLike,\n): Text {\n\tif (options.isPartial) {\n\t\tconst details = result.details;\n\t\tif (isSearchProgressDetails(details)) {\n\t\t\tif (details.currentProvider) {\n\t\t\t\tconst line = theme.fg(\n\t\t\t\t\t\"warning\",\n\t\t\t\t\t`Searching \"${shorten(details.query, 80)}\" via ${details.currentProvider}`,\n\t\t\t\t);\n\t\t\t\tconst route = routeStateLabel(details);\n\t\t\t\tconst rows = options.expanded && route ? [line, theme.fg(\"muted\", `route ${route}`)] : [line];\n\t\t\t\treturn new Text(rows.join(\"\\n\"), 0, 0);\n\t\t\t}\n\t\t\tconst route = details.providerLabels.length > 0 ? details.providerLabels.join(\" -> \") : \"configured providers\";\n\t\t\treturn new Text(theme.fg(\"warning\", `Searching \"${shorten(details.query, 80)}\" via ${route}`), 0, 0);\n\t\t}\n\t\treturn new Text(theme.fg(\"warning\", result.content[0]?.text ?? \"Searching the web...\"), 0, 0);\n\t}\n\n\tconst details = result.details;\n\tif (!details) return new Text(theme.fg(\"muted\", result.content[0]?.text ?? \"\"), 0, 0);\n\tif (isSearchProgressDetails(details)) return new Text(theme.fg(\"muted\", result.content[0]?.text ?? \"\"), 0, 0);\n\tif (isSearchErrorDetails(details)) return new Text(theme.fg(\"error\", details.error), 0, 0);\n\tif (details.error) return new Text(theme.fg(\"error\", details.error), 0, 0);\n\n\tconst count = details.results.length;\n\tconst provider = providerEntryLabel(details);\n\tconst summary =\n\t\ttheme.fg(\"success\", `${count} result${count === 1 ? \"\" : \"s\"}`) +\n\t\ttheme.fg(\"muted\", ` via ${provider} in ${durationText(details.durationMs)}`) +\n\t\t(details.truncated ? theme.fg(\"warning\", \" (truncated)\") : \"\");\n\n\tif (count === 0) return new Text(summary, 0, 0);\n\n\tconst attempts = attemptLabel(details.attempts);\n\tconst rows = options.expanded && attempts ? [summary, theme.fg(\"muted\", `route ${attempts}`)] : [summary];\n\tconst visibleLimit = options.expanded ? 8 : 3;\n\tfor (const item of details.results.slice(0, visibleLimit)) {\n\t\trows.push(`${theme.fg(\"accent\", shorten(item.title, 80))} ${theme.fg(\"dim\", shorten(item.url, 100))}`);\n\t\tif (item.snippet) rows.push(theme.fg(\"muted\", ` ${shorten(item.snippet, 140)}`));\n\t}\n\tif (details.results.length > visibleLimit) {\n\t\trows.push(theme.fg(\"dim\", `… ${details.results.length - visibleLimit} more sources`));\n\t}\n\treturn new Text(rows.join(\"\\n\"), 0, 0);\n}\n"]}
|
|
@@ -16,10 +16,10 @@ async function configWithNativeRoute(config, ctx, signal) {
|
|
|
16
16
|
}
|
|
17
17
|
function formatSearchProgressText(details) {
|
|
18
18
|
if (details.currentProvider) {
|
|
19
|
-
return `Searching "${details.query}" via ${details.currentProvider}
|
|
19
|
+
return `Searching "${details.query}" via ${details.currentProvider}`;
|
|
20
20
|
}
|
|
21
21
|
const route = details.providerLabels.length > 0 ? details.providerLabels.join(" -> ") : "configured providers";
|
|
22
|
-
return `Searching "${details.query}" via ${route}
|
|
22
|
+
return `Searching "${details.query}" via ${route}`;
|
|
23
23
|
}
|
|
24
24
|
function searchErrorDetails(query, error, reason) {
|
|
25
25
|
return { phase: "error", query, error, ...(reason ? { reason } : {}) };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/websearch/websearch/tool.ts"],"names":[],"mappings":"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","sourcesContent":["import { Type } from \"typebox\";\nimport { defineTool } from \"../../../types.ts\";\n\nimport { buildNativeEntries, type NativeModelInfo, type NativeModelRegistry } from \"./native.ts\";\nimport { renderSearchCall, renderSearchResult } from \"./renderers.ts\";\nimport {\n\tcreateSearchRoutingState,\n\tformatSearchText,\n\tperformSearch,\n\tproviderEntryLabel,\n\ttype SearchRoutingState,\n} from \"./search.ts\";\nimport type {\n\tConfigLoadResult,\n\tSearchErrorDetails,\n\tSearchProgressDetails,\n\tSearchRenderDetails,\n\tWebsearchConfig,\n} from \"./types.ts\";\n\nconst Params = Type.Object(\n\t{\n\t\tquery: Type.String({ minLength: 2, description: \"The search query to use\" }),\n\t\tallowed_domains: Type.Optional(\n\t\t\tType.Array(Type.String(), { description: \"Only include search results from these domains\" }),\n\t\t),\n\t\tblocked_domains: Type.Optional(\n\t\t\tType.Array(Type.String(), { description: \"Never include search results from these domains\" }),\n\t\t),\n\t},\n\t{ additionalProperties: false },\n);\n\nexport type ConfigProvider = () => ConfigLoadResult;\ntype WebSearchTool = ReturnType<typeof defineTool<typeof Params, SearchRenderDetails>>;\n\ninterface WebSearchToolContext {\n\tmodel: NativeModelInfo | undefined;\n\tmodelRegistry: NativeModelRegistry;\n}\n\nasync function configWithNativeRoute(\n\tconfig: WebsearchConfig,\n\tctx: WebSearchToolContext | undefined,\n\tsignal: AbortSignal | undefined,\n): Promise<WebsearchConfig> {\n\tif (!config.auto) return config;\n\tconst nativeEntries = await buildNativeEntries(ctx?.model, ctx?.modelRegistry, signal);\n\treturn nativeEntries.length > 0 ? { ...config, providers: [...nativeEntries, ...config.providers] } : config;\n}\n\nfunction formatSearchProgressText(details: SearchProgressDetails): string {\n\tif (details.currentProvider) {\n\t\treturn `Searching \"${details.query}\" via ${details.currentProvider} (max ${details.maxResults})`;\n\t}\n\tconst route = details.providerLabels.length > 0 ? details.providerLabels.join(\" -> \") : \"configured providers\";\n\treturn `Searching \"${details.query}\" via ${route} (max ${details.maxResults})`;\n}\n\nfunction searchErrorDetails(query: string, error: string, reason?: SearchErrorDetails[\"reason\"]): SearchErrorDetails {\n\treturn { phase: \"error\", query, error, ...(reason ? { reason } : {}) };\n}\n\nexport function createWebSearchTool(getConfig: ConfigProvider): WebSearchTool {\n\tlet routingState: SearchRoutingState | undefined;\n\tlet routingKey = \"\";\n\n\treturn defineTool<typeof Params, SearchRenderDetails>({\n\t\tname: \"web_search\",\n\t\tlabel: \"Web Search\",\n\t\tdescription: \"Search the web for current information and return source URLs for citation.\",\n\t\tpromptSnippet: \"Search the web for current information, documentation, news, or external facts.\",\n\t\tpromptGuidelines: [\"After using web_search, cite relevant returned URLs in the final answer.\"],\n\t\tparameters: Params,\n\t\tasync execute(_toolCallId, params, signal, onUpdate, ctx?: WebSearchToolContext) {\n\t\t\tif (params.allowed_domains?.length && params.blocked_domains?.length) {\n\t\t\t\tconst message = \"Error: Cannot specify both allowed_domains and blocked_domains in the same request\";\n\t\t\t\tconst details = searchErrorDetails(params.query, message);\n\t\t\t\treturn { content: [{ type: \"text\", text: message }], details };\n\t\t\t}\n\n\t\t\tconst loaded = getConfig();\n\t\t\tif (!loaded.ok) {\n\t\t\t\tconst details = searchErrorDetails(params.query, loaded.message, loaded.reason);\n\t\t\t\treturn { content: [{ type: \"text\", text: loaded.message }], details };\n\t\t\t}\n\n\t\t\tconst maxResults = loaded.config.providers[0]?.maxResults ?? 10;\n\t\t\tconst config = await configWithNativeRoute(loaded.config, ctx, signal);\n\t\t\tconst progressDetails: SearchProgressDetails = {\n\t\t\t\tphase: \"searching\",\n\t\t\t\tquery: params.query,\n\t\t\t\tproviderLabels: config.providers.map(providerEntryLabel),\n\t\t\t\tmaxResults,\n\t\t\t\tstrategy: config.strategy,\n\t\t\t\t...(params.allowed_domains ? { allowedDomains: params.allowed_domains } : {}),\n\t\t\t\t...(params.blocked_domains ? { blockedDomains: params.blocked_domains } : {}),\n\t\t\t};\n\t\t\tonUpdate?.({\n\t\t\t\tcontent: [{ type: \"text\", text: formatSearchProgressText(progressDetails) }],\n\t\t\t\tdetails: progressDetails,\n\t\t\t});\n\n\t\t\tconst nextRoutingKey = `${config.strategy}:${config.providers.map((provider) => provider.id ?? provider.provider).join(\"|\")}`;\n\t\t\tif (\n\t\t\t\t!routingState ||\n\t\t\t\troutingKey !== nextRoutingKey ||\n\t\t\t\troutingState.successCounts.length !== config.providers.length\n\t\t\t) {\n\t\t\t\troutingState = createSearchRoutingState(config.providers.length);\n\t\t\t\troutingKey = nextRoutingKey;\n\t\t\t}\n\t\t\tconst request = {\n\t\t\t\tquery: params.query,\n\t\t\t\tmaxResults,\n\t\t\t\t...(params.allowed_domains === undefined ? {} : { allowedDomains: params.allowed_domains }),\n\t\t\t\t...(params.blocked_domains === undefined ? {} : { blockedDomains: params.blocked_domains }),\n\t\t\t};\n\t\t\tconst details = await performSearch(\n\t\t\t\tconfig,\n\t\t\t\trequest,\n\t\t\t\tsignal,\n\t\t\t\troutingState,\n\t\t\t\t(providerLabel, attempts, routeLabels) => {\n\t\t\t\t\tconst attemptProgress: SearchProgressDetails = {\n\t\t\t\t\t\t...progressDetails,\n\t\t\t\t\t\tcurrentProvider: providerLabel,\n\t\t\t\t\t\tattempts: [...attempts],\n\t\t\t\t\t\trouteLabels: [...routeLabels],\n\t\t\t\t\t};\n\t\t\t\t\tonUpdate?.({\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: formatSearchProgressText(attemptProgress) }],\n\t\t\t\t\t\tdetails: attemptProgress,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn { content: [{ type: \"text\", text: formatSearchText(details) }], details };\n\t\t},\n\t\trenderCall: (args, theme) => renderSearchCall(args, theme),\n\t\trenderResult: (result, options, theme) => renderSearchResult(result, options, theme),\n\t});\n}\n\nexport const web_search = createWebSearchTool(() => ({\n\tok: false,\n\treason: \"missing_config\",\n\tmessage: \"Missing websearch config. Create .pi/websearch.json or ~/.pi/websearch.json before starting pi.\",\n}));\n"]}
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/websearch/websearch/tool.ts"],"names":[],"mappings":"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","sourcesContent":["import { Type } from \"typebox\";\nimport { defineTool } from \"../../../types.ts\";\n\nimport { buildNativeEntries, type NativeModelInfo, type NativeModelRegistry } from \"./native.ts\";\nimport { renderSearchCall, renderSearchResult } from \"./renderers.ts\";\nimport {\n\tcreateSearchRoutingState,\n\tformatSearchText,\n\tperformSearch,\n\tproviderEntryLabel,\n\ttype SearchRoutingState,\n} from \"./search.ts\";\nimport type {\n\tConfigLoadResult,\n\tSearchErrorDetails,\n\tSearchProgressDetails,\n\tSearchRenderDetails,\n\tWebsearchConfig,\n} from \"./types.ts\";\n\nconst Params = Type.Object(\n\t{\n\t\tquery: Type.String({ minLength: 2, description: \"The search query to use\" }),\n\t\tallowed_domains: Type.Optional(\n\t\t\tType.Array(Type.String(), { description: \"Only include search results from these domains\" }),\n\t\t),\n\t\tblocked_domains: Type.Optional(\n\t\t\tType.Array(Type.String(), { description: \"Never include search results from these domains\" }),\n\t\t),\n\t},\n\t{ additionalProperties: false },\n);\n\nexport type ConfigProvider = () => ConfigLoadResult;\ntype WebSearchTool = ReturnType<typeof defineTool<typeof Params, SearchRenderDetails>>;\n\ninterface WebSearchToolContext {\n\tmodel: NativeModelInfo | undefined;\n\tmodelRegistry: NativeModelRegistry;\n}\n\nasync function configWithNativeRoute(\n\tconfig: WebsearchConfig,\n\tctx: WebSearchToolContext | undefined,\n\tsignal: AbortSignal | undefined,\n): Promise<WebsearchConfig> {\n\tif (!config.auto) return config;\n\tconst nativeEntries = await buildNativeEntries(ctx?.model, ctx?.modelRegistry, signal);\n\treturn nativeEntries.length > 0 ? { ...config, providers: [...nativeEntries, ...config.providers] } : config;\n}\n\nfunction formatSearchProgressText(details: SearchProgressDetails): string {\n\tif (details.currentProvider) {\n\t\treturn `Searching \"${details.query}\" via ${details.currentProvider}`;\n\t}\n\tconst route = details.providerLabels.length > 0 ? details.providerLabels.join(\" -> \") : \"configured providers\";\n\treturn `Searching \"${details.query}\" via ${route}`;\n}\n\nfunction searchErrorDetails(query: string, error: string, reason?: SearchErrorDetails[\"reason\"]): SearchErrorDetails {\n\treturn { phase: \"error\", query, error, ...(reason ? { reason } : {}) };\n}\n\nexport function createWebSearchTool(getConfig: ConfigProvider): WebSearchTool {\n\tlet routingState: SearchRoutingState | undefined;\n\tlet routingKey = \"\";\n\n\treturn defineTool<typeof Params, SearchRenderDetails>({\n\t\tname: \"web_search\",\n\t\tlabel: \"Web Search\",\n\t\tdescription: \"Search the web for current information and return source URLs for citation.\",\n\t\tpromptSnippet: \"Search the web for current information, documentation, news, or external facts.\",\n\t\tpromptGuidelines: [\"After using web_search, cite relevant returned URLs in the final answer.\"],\n\t\tparameters: Params,\n\t\tasync execute(_toolCallId, params, signal, onUpdate, ctx?: WebSearchToolContext) {\n\t\t\tif (params.allowed_domains?.length && params.blocked_domains?.length) {\n\t\t\t\tconst message = \"Error: Cannot specify both allowed_domains and blocked_domains in the same request\";\n\t\t\t\tconst details = searchErrorDetails(params.query, message);\n\t\t\t\treturn { content: [{ type: \"text\", text: message }], details };\n\t\t\t}\n\n\t\t\tconst loaded = getConfig();\n\t\t\tif (!loaded.ok) {\n\t\t\t\tconst details = searchErrorDetails(params.query, loaded.message, loaded.reason);\n\t\t\t\treturn { content: [{ type: \"text\", text: loaded.message }], details };\n\t\t\t}\n\n\t\t\tconst maxResults = loaded.config.providers[0]?.maxResults ?? 10;\n\t\t\tconst config = await configWithNativeRoute(loaded.config, ctx, signal);\n\t\t\tconst progressDetails: SearchProgressDetails = {\n\t\t\t\tphase: \"searching\",\n\t\t\t\tquery: params.query,\n\t\t\t\tproviderLabels: config.providers.map(providerEntryLabel),\n\t\t\t\tmaxResults,\n\t\t\t\tstrategy: config.strategy,\n\t\t\t\t...(params.allowed_domains ? { allowedDomains: params.allowed_domains } : {}),\n\t\t\t\t...(params.blocked_domains ? { blockedDomains: params.blocked_domains } : {}),\n\t\t\t};\n\t\t\tonUpdate?.({\n\t\t\t\tcontent: [{ type: \"text\", text: formatSearchProgressText(progressDetails) }],\n\t\t\t\tdetails: progressDetails,\n\t\t\t});\n\n\t\t\tconst nextRoutingKey = `${config.strategy}:${config.providers.map((provider) => provider.id ?? provider.provider).join(\"|\")}`;\n\t\t\tif (\n\t\t\t\t!routingState ||\n\t\t\t\troutingKey !== nextRoutingKey ||\n\t\t\t\troutingState.successCounts.length !== config.providers.length\n\t\t\t) {\n\t\t\t\troutingState = createSearchRoutingState(config.providers.length);\n\t\t\t\troutingKey = nextRoutingKey;\n\t\t\t}\n\t\t\tconst request = {\n\t\t\t\tquery: params.query,\n\t\t\t\tmaxResults,\n\t\t\t\t...(params.allowed_domains === undefined ? {} : { allowedDomains: params.allowed_domains }),\n\t\t\t\t...(params.blocked_domains === undefined ? {} : { blockedDomains: params.blocked_domains }),\n\t\t\t};\n\t\t\tconst details = await performSearch(\n\t\t\t\tconfig,\n\t\t\t\trequest,\n\t\t\t\tsignal,\n\t\t\t\troutingState,\n\t\t\t\t(providerLabel, attempts, routeLabels) => {\n\t\t\t\t\tconst attemptProgress: SearchProgressDetails = {\n\t\t\t\t\t\t...progressDetails,\n\t\t\t\t\t\tcurrentProvider: providerLabel,\n\t\t\t\t\t\tattempts: [...attempts],\n\t\t\t\t\t\trouteLabels: [...routeLabels],\n\t\t\t\t\t};\n\t\t\t\t\tonUpdate?.({\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: formatSearchProgressText(attemptProgress) }],\n\t\t\t\t\t\tdetails: attemptProgress,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn { content: [{ type: \"text\", text: formatSearchText(details) }], details };\n\t\t},\n\t\trenderCall: (args, theme) => renderSearchCall(args, theme),\n\t\trenderResult: (result, options, theme) => renderSearchResult(result, options, theme),\n\t});\n}\n\nexport const web_search = createWebSearchTool(() => ({\n\tok: false,\n\treason: \"missing_config\",\n\tmessage: \"Missing websearch config. Create .pi/websearch.json or ~/.pi/websearch.json before starting pi.\",\n}));\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type SearchProvider = "exa" | "tavily" | "brave" | "duckduckgo-html" | "serper" | "google-cse" | "z-ai" | "openai" | "codex" | "anthropic" | "perplexity" | "xai" | "kimi";
|
|
1
|
+
export type SearchProvider = "exa" | "tavily" | "brave" | "duckduckgo-html" | "deepseek" | "serper" | "google-cse" | "z-ai" | "openai" | "codex" | "anthropic" | "perplexity" | "xai" | "kimi";
|
|
2
2
|
export type SearchContextSize = "low" | "medium" | "high";
|
|
3
3
|
export type CodexSearchMode = "cached" | "live";
|
|
4
4
|
export type RoutingStrategy = "priority" | "round-robin" | "fill-first";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/websearch/websearch/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/websearch/websearch/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/websearch/websearch/types.ts"],"names":[],"mappings":"","sourcesContent":["export type SearchProvider =\n\t| \"exa\"\n\t| \"tavily\"\n\t| \"brave\"\n\t| \"duckduckgo-html\"\n\t| \"serper\"\n\t| \"google-cse\"\n\t| \"z-ai\"\n\t| \"openai\"\n\t| \"codex\"\n\t| \"anthropic\"\n\t| \"perplexity\"\n\t| \"xai\"\n\t| \"kimi\";\n\nexport type SearchContextSize = \"low\" | \"medium\" | \"high\";\nexport type CodexSearchMode = \"cached\" | \"live\";\nexport type RoutingStrategy = \"priority\" | \"round-robin\" | \"fill-first\";\n\nexport interface SearchProviderConfig {\n\tid?: string;\n\tprovider: SearchProvider;\n\tapiKey?: string;\n\tbaseUrl?: string;\n\tsearchEngineId?: string;\n\tmaxResults?: number;\n\tmodel?: string;\n\tcodexMode?: CodexSearchMode;\n\tsearchContextSize?: SearchContextSize;\n\tallowedDomains?: string[];\n\tblockedDomains?: string[];\n\tuserLocation?: SearchUserLocation;\n\ttimeoutMs?: number;\n}\n\nexport interface SearchProviderEntry extends SearchProviderConfig {\n\tpriority?: number;\n\tweight?: number;\n}\n\nexport interface WebsearchConfig {\n\tstrategy: RoutingStrategy;\n\tfallback: boolean;\n\tauto: boolean;\n\tproviders: SearchProviderEntry[];\n}\n\nexport interface SearchUserLocation {\n\tcountry?: string;\n\tregion?: string;\n\tcity?: string;\n\ttimezone?: string;\n}\n\nexport interface SearchRequest {\n\tquery: string;\n\tmaxResults: number;\n\tallowedDomains?: string[];\n\tblockedDomains?: string[];\n}\n\nexport interface BuiltSearchRequest {\n\turl: string;\n\tinit: {\n\t\tmethod: \"GET\" | \"POST\";\n\t\theaders: Record<string, string>;\n\t};\n\tbody?: JsonObject;\n}\n\nexport interface SearchResultItem {\n\ttitle: string;\n\turl: string;\n\tsnippet?: string;\n\tscore?: number;\n\tsource?: string;\n\tpublishedAt?: string;\n}\n\nexport interface SearchDetails {\n\tprovider: SearchProvider;\n\tentryId?: string;\n\tquery: string;\n\tresults: SearchResultItem[];\n\tdurationMs: number;\n\ttruncated: boolean;\n\tstrategy?: RoutingStrategy;\n\tattempts?: SearchAttempt[];\n\tanswer?: string;\n\terror?: string;\n}\n\nexport interface SearchProgressDetails {\n\tphase: \"searching\";\n\tquery: string;\n\tproviderLabels: string[];\n\tmaxResults: number;\n\tcurrentProvider?: string;\n\tattempts?: SearchAttempt[];\n\trouteLabels?: string[];\n\tstrategy?: RoutingStrategy;\n\tallowedDomains?: string[];\n\tblockedDomains?: string[];\n}\n\nexport type ConfigLoadFailureReason =\n\t| \"missing_config\"\n\t| \"invalid_config\"\n\t| \"missing_api_key\"\n\t| \"provider_native_bypass\";\n\nexport interface SearchErrorDetails {\n\tphase: \"error\";\n\tquery: string;\n\terror: string;\n\treason?: ConfigLoadFailureReason;\n}\n\nexport type SearchRenderDetails = SearchDetails | SearchProgressDetails | SearchErrorDetails;\n\nexport interface SearchAttempt {\n\tprovider: SearchProvider;\n\tentryId?: string;\n\tdurationMs: number;\n\tresultsCount: number;\n\terror?: string;\n}\n\nexport type JsonValue = string | number | boolean | null | JsonObject | JsonValue[];\n\nexport interface JsonObject {\n\t[key: string]: JsonValue;\n}\n\nexport type ConfigLoadResult =\n\t| { ok: true; config: WebsearchConfig; source: string }\n\t| {\n\t\t\tok: false;\n\t\t\treason: ConfigLoadFailureReason;\n\t\t\tmessage: string;\n\t\t\tsource?: string;\n\t };\n\nexport type ProviderValidationResult =\n\t| { ok: true; config: SearchProviderEntry }\n\t| { ok: false; reason: \"invalid_config\" | \"missing_api_key\"; message: string };\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/websearch/websearch/types.ts"],"names":[],"mappings":"","sourcesContent":["export type SearchProvider =\n\t| \"exa\"\n\t| \"tavily\"\n\t| \"brave\"\n\t| \"duckduckgo-html\"\n\t| \"deepseek\"\n\t| \"serper\"\n\t| \"google-cse\"\n\t| \"z-ai\"\n\t| \"openai\"\n\t| \"codex\"\n\t| \"anthropic\"\n\t| \"perplexity\"\n\t| \"xai\"\n\t| \"kimi\";\n\nexport type SearchContextSize = \"low\" | \"medium\" | \"high\";\nexport type CodexSearchMode = \"cached\" | \"live\";\nexport type RoutingStrategy = \"priority\" | \"round-robin\" | \"fill-first\";\n\nexport interface SearchProviderConfig {\n\tid?: string;\n\tprovider: SearchProvider;\n\tapiKey?: string;\n\tbaseUrl?: string;\n\tsearchEngineId?: string;\n\tmaxResults?: number;\n\tmodel?: string;\n\tcodexMode?: CodexSearchMode;\n\tsearchContextSize?: SearchContextSize;\n\tallowedDomains?: string[];\n\tblockedDomains?: string[];\n\tuserLocation?: SearchUserLocation;\n\ttimeoutMs?: number;\n}\n\nexport interface SearchProviderEntry extends SearchProviderConfig {\n\tpriority?: number;\n\tweight?: number;\n}\n\nexport interface WebsearchConfig {\n\tstrategy: RoutingStrategy;\n\tfallback: boolean;\n\tauto: boolean;\n\tproviders: SearchProviderEntry[];\n}\n\nexport interface SearchUserLocation {\n\tcountry?: string;\n\tregion?: string;\n\tcity?: string;\n\ttimezone?: string;\n}\n\nexport interface SearchRequest {\n\tquery: string;\n\tmaxResults: number;\n\tallowedDomains?: string[];\n\tblockedDomains?: string[];\n}\n\nexport interface BuiltSearchRequest {\n\turl: string;\n\tinit: {\n\t\tmethod: \"GET\" | \"POST\";\n\t\theaders: Record<string, string>;\n\t};\n\tbody?: JsonObject;\n}\n\nexport interface SearchResultItem {\n\ttitle: string;\n\turl: string;\n\tsnippet?: string;\n\tscore?: number;\n\tsource?: string;\n\tpublishedAt?: string;\n}\n\nexport interface SearchDetails {\n\tprovider: SearchProvider;\n\tentryId?: string;\n\tquery: string;\n\tresults: SearchResultItem[];\n\tdurationMs: number;\n\ttruncated: boolean;\n\tstrategy?: RoutingStrategy;\n\tattempts?: SearchAttempt[];\n\tanswer?: string;\n\terror?: string;\n}\n\nexport interface SearchProgressDetails {\n\tphase: \"searching\";\n\tquery: string;\n\tproviderLabels: string[];\n\tmaxResults: number;\n\tcurrentProvider?: string;\n\tattempts?: SearchAttempt[];\n\trouteLabels?: string[];\n\tstrategy?: RoutingStrategy;\n\tallowedDomains?: string[];\n\tblockedDomains?: string[];\n}\n\nexport type ConfigLoadFailureReason =\n\t| \"missing_config\"\n\t| \"invalid_config\"\n\t| \"missing_api_key\"\n\t| \"provider_native_bypass\";\n\nexport interface SearchErrorDetails {\n\tphase: \"error\";\n\tquery: string;\n\terror: string;\n\treason?: ConfigLoadFailureReason;\n}\n\nexport type SearchRenderDetails = SearchDetails | SearchProgressDetails | SearchErrorDetails;\n\nexport interface SearchAttempt {\n\tprovider: SearchProvider;\n\tentryId?: string;\n\tdurationMs: number;\n\tresultsCount: number;\n\terror?: string;\n}\n\nexport type JsonValue = string | number | boolean | null | JsonObject | JsonValue[];\n\nexport interface JsonObject {\n\t[key: string]: JsonValue;\n}\n\nexport type ConfigLoadResult =\n\t| { ok: true; config: WebsearchConfig; source: string }\n\t| {\n\t\t\tok: false;\n\t\t\treason: ConfigLoadFailureReason;\n\t\t\tmessage: string;\n\t\t\tsource?: string;\n\t };\n\nexport type ProviderValidationResult =\n\t| { ok: true; config: SearchProviderEntry }\n\t| { ok: false; reason: \"invalid_config\" | \"missing_api_key\"; message: string };\n"]}
|
|
@@ -26,8 +26,8 @@ export const defaultModelPerProvider = {
|
|
|
26
26
|
xai: "grok-4.5",
|
|
27
27
|
groq: "openai/gpt-oss-120b",
|
|
28
28
|
cerebras: "zai-glm-4.7",
|
|
29
|
-
zai: "glm-5.
|
|
30
|
-
"zai-coding-cn": "glm-5.
|
|
29
|
+
zai: "glm-5.2",
|
|
30
|
+
"zai-coding-cn": "glm-5.2",
|
|
31
31
|
mistral: "devstral-medium-latest",
|
|
32
32
|
minimax: "MiniMax-M2.7",
|
|
33
33
|
"minimax-cn": "MiniMax-M2.7",
|