@alexanderfortin/pi-tavily-tools 0.1.0
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/LICENSE +21 -0
- package/README.md +366 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/index.d.ts +7 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +7 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/shared/truncation.d.ts +21 -0
- package/dist/tools/shared/truncation.d.ts.map +1 -0
- package/dist/tools/shared/truncation.js +55 -0
- package/dist/tools/shared/truncation.js.map +1 -0
- package/dist/tools/tavily/client.d.ts +27 -0
- package/dist/tools/tavily/client.d.ts.map +1 -0
- package/dist/tools/tavily/client.js +62 -0
- package/dist/tools/tavily/client.js.map +1 -0
- package/dist/tools/tavily/formatters.d.ts +21 -0
- package/dist/tools/tavily/formatters.d.ts.map +1 -0
- package/dist/tools/tavily/formatters.js +108 -0
- package/dist/tools/tavily/formatters.js.map +1 -0
- package/dist/tools/tavily/renderers.d.ts +28 -0
- package/dist/tools/tavily/renderers.d.ts.map +1 -0
- package/dist/tools/tavily/renderers.js +116 -0
- package/dist/tools/tavily/renderers.js.map +1 -0
- package/dist/tools/tavily/schemas.d.ts +24 -0
- package/dist/tools/tavily/schemas.d.ts.map +1 -0
- package/dist/tools/tavily/schemas.js +36 -0
- package/dist/tools/tavily/schemas.js.map +1 -0
- package/dist/tools/tavily/types.d.ts +53 -0
- package/dist/tools/tavily/types.d.ts.map +1 -0
- package/dist/tools/tavily/types.js +5 -0
- package/dist/tools/tavily/types.js.map +1 -0
- package/dist/tools/web-search.d.ts +16 -0
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js +120 -0
- package/dist/tools/web-search.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../../src/tools/tavily/formatters.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAMlF;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,OAAO,EAAE,YAAY,EAAE,EACvB,MAAM,EAAE,WAAW,EAAE,EACrB,aAAa,EAAE,OAAO,GAAG,SAAS,GACjC,MAAM,CAyCR;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,OAAO,EAAE,YAAY,EAAE,EACvB,MAAM,EAAE,WAAW,EAAE,EACrB,aAAa,EAAE,OAAO,GACrB,oBAAoB,CAiCtB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,OAAO,GAAG;IACvD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB,CA4CA"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Response formatters for Tavily tools
|
|
3
|
+
*/
|
|
4
|
+
// ============================================================================
|
|
5
|
+
// Web Search Formatting
|
|
6
|
+
// ============================================================================
|
|
7
|
+
/**
|
|
8
|
+
* Format Tavily search response into human-readable text
|
|
9
|
+
*/
|
|
10
|
+
export function formatWebSearchResponse(answer, results, images, includeImages) {
|
|
11
|
+
const parts = [];
|
|
12
|
+
// Add AI answer if available
|
|
13
|
+
if (answer) {
|
|
14
|
+
parts.push(`AI Answer: ${answer}\n`);
|
|
15
|
+
}
|
|
16
|
+
// Add sources
|
|
17
|
+
if (results.length > 0) {
|
|
18
|
+
parts.push("Sources:");
|
|
19
|
+
results.forEach((result, index) => {
|
|
20
|
+
parts.push(`\n${index + 1}. ${result.title}`, ` URL: ${result.url}`, ` Score: ${result.score.toFixed(2)}`);
|
|
21
|
+
// Add content/snippet if available
|
|
22
|
+
const contentToShow = result.rawContent || result.content;
|
|
23
|
+
if (contentToShow) {
|
|
24
|
+
const snippet = contentToShow.slice(0, 300);
|
|
25
|
+
parts.push(` Content: ${snippet}${contentToShow.length > 300 ? "..." : ""}`);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
parts.push("No results found.");
|
|
31
|
+
}
|
|
32
|
+
// Add image results if available
|
|
33
|
+
if (includeImages && images.length > 0) {
|
|
34
|
+
parts.push("\nImages:");
|
|
35
|
+
images.slice(0, 5).forEach((image, index) => {
|
|
36
|
+
parts.push(`\n${index + 1}. ${image.url}`);
|
|
37
|
+
if (image.description) {
|
|
38
|
+
parts.push(` ${image.description}`);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
return parts.join("\n");
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Format Tavily search results into compact parts structure
|
|
46
|
+
*/
|
|
47
|
+
export function formatSearchResults(answer, results, images, includeImages) {
|
|
48
|
+
const parts = {
|
|
49
|
+
answer: answer ?? undefined,
|
|
50
|
+
sources: [],
|
|
51
|
+
};
|
|
52
|
+
// Add sources
|
|
53
|
+
results.forEach((result, index) => {
|
|
54
|
+
parts.sources.push(`\n${index + 1}. ${result.title}`, ` URL: ${result.url}`, ` Score: ${result.score.toFixed(2)}`);
|
|
55
|
+
const contentToShow = result.rawContent || result.content;
|
|
56
|
+
if (contentToShow) {
|
|
57
|
+
const snippet = contentToShow.slice(0, 300);
|
|
58
|
+
parts.sources.push(` Content: ${snippet}${contentToShow.length > 300 ? "..." : ""}`);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
// Add image results if available
|
|
62
|
+
if (includeImages && images.length > 0) {
|
|
63
|
+
parts.images = [];
|
|
64
|
+
images.slice(0, 5).forEach((image, index) => {
|
|
65
|
+
parts.images.push(`\n${index + 1}. ${image.url}`);
|
|
66
|
+
if (image.description) {
|
|
67
|
+
parts.images.push(` ${image.description}`);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
return parts;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Extract and type-safe Tavily response data
|
|
75
|
+
*/
|
|
76
|
+
export function extractSearchResults(response) {
|
|
77
|
+
const resp = response;
|
|
78
|
+
// Extract results
|
|
79
|
+
const results = (resp.results || [])
|
|
80
|
+
.filter((r) => r !== null && typeof r === "object")
|
|
81
|
+
.map((r) => {
|
|
82
|
+
const result = r;
|
|
83
|
+
const scoreValue = typeof result.score === "number" ? result.score : Number(result.score);
|
|
84
|
+
return {
|
|
85
|
+
title: typeof result.title === "string" ? result.title : "Untitled",
|
|
86
|
+
url: typeof result.url === "string" ? result.url : "",
|
|
87
|
+
score: Number.isNaN(scoreValue) ? 0 : scoreValue,
|
|
88
|
+
content: result.content,
|
|
89
|
+
rawContent: result.rawContent,
|
|
90
|
+
};
|
|
91
|
+
});
|
|
92
|
+
// Extract images
|
|
93
|
+
const images = (resp.images || [])
|
|
94
|
+
.filter((img) => img !== null && typeof img === "object")
|
|
95
|
+
.map((img) => {
|
|
96
|
+
const image = img;
|
|
97
|
+
return {
|
|
98
|
+
url: typeof image.url === "string" ? image.url : "",
|
|
99
|
+
description: image.description,
|
|
100
|
+
};
|
|
101
|
+
});
|
|
102
|
+
return {
|
|
103
|
+
answer: resp.answer ?? null,
|
|
104
|
+
results,
|
|
105
|
+
images,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=formatters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../../src/tools/tavily/formatters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TUI renderers for Tavily tools
|
|
3
|
+
*/
|
|
4
|
+
import { Text } from "@mariozechner/pi-tui";
|
|
5
|
+
export type ToolCallResult = {
|
|
6
|
+
details?: unknown;
|
|
7
|
+
content: Array<{
|
|
8
|
+
type: string;
|
|
9
|
+
text?: string;
|
|
10
|
+
}>;
|
|
11
|
+
};
|
|
12
|
+
type Theme = {
|
|
13
|
+
fg: (color: string, text: string) => string;
|
|
14
|
+
bold: (text: string) => string;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Render a web search tool call
|
|
18
|
+
*/
|
|
19
|
+
export declare function renderWebSearchCall(args: Record<string, unknown>, theme: Theme): Text;
|
|
20
|
+
/**
|
|
21
|
+
* Render a web search tool result
|
|
22
|
+
*/
|
|
23
|
+
export declare function renderWebSearchResult(result: ToolCallResult, state: {
|
|
24
|
+
expanded: boolean;
|
|
25
|
+
isPartial: boolean;
|
|
26
|
+
}, theme: Theme): Text;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=renderers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderers.d.ts","sourceRoot":"","sources":["../../../src/tools/tavily/renderers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAmB,MAAM,sBAAsB,CAAC;AAO7D,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjD,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5C,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CAChC,CAAC;AAMF;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CA8BrF;AAuBD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,EAChD,KAAK,EAAE,KAAK,GACX,IAAI,CAeN"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TUI renderers for Tavily tools
|
|
3
|
+
*/
|
|
4
|
+
import { Text, truncateToWidth } from "@mariozechner/pi-tui";
|
|
5
|
+
// ============================================================================
|
|
6
|
+
// Render Call (function invocation display)
|
|
7
|
+
// ============================================================================
|
|
8
|
+
/**
|
|
9
|
+
* Render a web search tool call
|
|
10
|
+
*/
|
|
11
|
+
export function renderWebSearchCall(args, theme) {
|
|
12
|
+
let text = theme.fg("toolTitle", theme.bold("web_search "));
|
|
13
|
+
const query = typeof args.query === "string" ? args.query : "(no query)";
|
|
14
|
+
text += theme.fg("accent", `"${query}"`);
|
|
15
|
+
const options = [];
|
|
16
|
+
if (typeof args.max_results === "number" && args.max_results !== 5) {
|
|
17
|
+
options.push(`max=${args.max_results}`);
|
|
18
|
+
}
|
|
19
|
+
if (args.search_depth === "advanced") {
|
|
20
|
+
options.push("advanced");
|
|
21
|
+
}
|
|
22
|
+
if (args.include_answer === false) {
|
|
23
|
+
options.push("no-answer");
|
|
24
|
+
}
|
|
25
|
+
if (args.include_raw_content === true) {
|
|
26
|
+
options.push("raw-content");
|
|
27
|
+
}
|
|
28
|
+
if (args.include_images === true) {
|
|
29
|
+
options.push("images");
|
|
30
|
+
}
|
|
31
|
+
if (args.days && typeof args.days === "number") {
|
|
32
|
+
options.push(`${args.days}d`);
|
|
33
|
+
}
|
|
34
|
+
if (options.length > 0) {
|
|
35
|
+
text += ` ${theme.fg("dim", `[${options.join(", ")}]`)}`;
|
|
36
|
+
}
|
|
37
|
+
return new Text(truncateToWidth(text, 100), 0, 0);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Render options badge for search tools
|
|
41
|
+
*/
|
|
42
|
+
function renderOptionsBadge(details, theme) {
|
|
43
|
+
const options = [];
|
|
44
|
+
if (details.searchDepth === "advanced") {
|
|
45
|
+
options.push("advanced");
|
|
46
|
+
}
|
|
47
|
+
if ("includeImages" in details && details.includeImages) {
|
|
48
|
+
options.push("images");
|
|
49
|
+
}
|
|
50
|
+
if (details.days) {
|
|
51
|
+
options.push(`${details.days}d`);
|
|
52
|
+
}
|
|
53
|
+
return options.length > 0 ? theme.fg("dim", ` (${options.join(", ")})`) : "";
|
|
54
|
+
}
|
|
55
|
+
// ============================================================================
|
|
56
|
+
// Render Result (outcome display)
|
|
57
|
+
// ============================================================================
|
|
58
|
+
/**
|
|
59
|
+
* Render a web search tool result
|
|
60
|
+
*/
|
|
61
|
+
export function renderWebSearchResult(result, state, theme) {
|
|
62
|
+
const details = result.details;
|
|
63
|
+
// Show loading state
|
|
64
|
+
if (state.isPartial) {
|
|
65
|
+
return new Text(theme.fg("warning", "Searching..."), 0, 0);
|
|
66
|
+
}
|
|
67
|
+
// Show error state
|
|
68
|
+
if (details?.error) {
|
|
69
|
+
return new Text(theme.fg("error", `Error: ${details.error}`), 0, 0);
|
|
70
|
+
}
|
|
71
|
+
// Build result display
|
|
72
|
+
return renderSearchResultCommon(details, state.expanded, theme, true);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Common result renderer for search tools
|
|
76
|
+
*/
|
|
77
|
+
function renderSearchResultCommon(details, expanded, theme, includeAnswer) {
|
|
78
|
+
let text = "";
|
|
79
|
+
if (details) {
|
|
80
|
+
// Main summary
|
|
81
|
+
text += theme.fg("success", `${details.resultCount} result${details.resultCount !== 1 ? "s" : ""}`);
|
|
82
|
+
// Show options
|
|
83
|
+
text += renderOptionsBadge(details, theme);
|
|
84
|
+
// Show truncation warning
|
|
85
|
+
if (details.truncation?.truncated) {
|
|
86
|
+
text += " " + theme.fg("warning", "(truncated)");
|
|
87
|
+
}
|
|
88
|
+
// Expanded view: show sources
|
|
89
|
+
if (expanded && details.sources.length > 0) {
|
|
90
|
+
text += "\n\n";
|
|
91
|
+
const displaySources = details.sources.slice(0, 5);
|
|
92
|
+
for (let i = 0; i < displaySources.length; i++) {
|
|
93
|
+
const source = displaySources[i];
|
|
94
|
+
if (source) {
|
|
95
|
+
text += `${theme.fg("accent", `${i + 1}.`)} ${source.title}\n`;
|
|
96
|
+
text += ` ${theme.fg("dim", source.url)}\n`;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (details.sources.length > 5) {
|
|
100
|
+
text += `\n${theme.fg("dim", `... ${details.sources.length - 5} more`)}`;
|
|
101
|
+
}
|
|
102
|
+
// Show temp file path if truncated
|
|
103
|
+
if (details.fullOutputPath) {
|
|
104
|
+
text += `\n\n${theme.fg("dim", `Full output: ${details.fullOutputPath}`)}`;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Show AI answer in expanded view if available
|
|
108
|
+
if (expanded && includeAnswer && "answer" in details && details.answer) {
|
|
109
|
+
text += "\n\n";
|
|
110
|
+
text += theme.fg("accent", "AI Answer: ");
|
|
111
|
+
text += theme.fg("text", details.answer);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return new Text(text, 0, 0);
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=renderers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderers.js","sourceRoot":"","sources":["../../../src/tools/tavily/renderers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schemas for Tavily tools
|
|
3
|
+
*/
|
|
4
|
+
export declare const WebSearchParamsSchema: import("@sinclair/typebox").TObject<{
|
|
5
|
+
query: import("@sinclair/typebox").TString;
|
|
6
|
+
max_results: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
7
|
+
search_depth: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnsafe<"basic" | "advanced">>;
|
|
8
|
+
include_answer: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
9
|
+
include_raw_content: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
10
|
+
include_images: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
11
|
+
days: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
12
|
+
}>;
|
|
13
|
+
export declare const BaseSearchParamsSchema: {
|
|
14
|
+
query: import("@sinclair/typebox").TString;
|
|
15
|
+
max_results: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
16
|
+
search_depth: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnsafe<"basic" | "advanced">>;
|
|
17
|
+
days: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
18
|
+
};
|
|
19
|
+
export declare const IncludeOptionsSchema: {
|
|
20
|
+
include_answer: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
21
|
+
include_raw_content: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
22
|
+
include_images: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=schemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/tools/tavily/schemas.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,eAAO,MAAM,qBAAqB;;;;;;;;EAsBhC,CAAC;AAMH,eAAO,MAAM,sBAAsB;;;;;CAalC,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;;CAUhC,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schemas for Tavily tools
|
|
3
|
+
*/
|
|
4
|
+
import { StringEnum } from "@mariozechner/pi-ai";
|
|
5
|
+
import { Type } from "@sinclair/typebox";
|
|
6
|
+
// ============================================================================
|
|
7
|
+
// Web Search Schema
|
|
8
|
+
// ============================================================================
|
|
9
|
+
export const WebSearchParamsSchema = Type.Object({
|
|
10
|
+
query: Type.String({ description: "Search query string" }),
|
|
11
|
+
max_results: Type.Optional(Type.Number({ description: "Number of results to return (1-20, default: 5)" })),
|
|
12
|
+
search_depth: Type.Optional(StringEnum(["basic", "advanced"], {
|
|
13
|
+
description: "Search depth: 'basic' or 'advanced' (default: 'basic')",
|
|
14
|
+
})),
|
|
15
|
+
include_answer: Type.Optional(Type.Boolean({ description: "Include AI-generated answer (default: true)" })),
|
|
16
|
+
include_raw_content: Type.Optional(Type.Boolean({ description: "Include raw page content in results (default: false)" })),
|
|
17
|
+
include_images: Type.Optional(Type.Boolean({ description: "Include relevant images in results (default: false)" })),
|
|
18
|
+
days: Type.Optional(Type.Number({ description: "Limit results to last N days (e.g., 7 for last week)" })),
|
|
19
|
+
});
|
|
20
|
+
// ============================================================================
|
|
21
|
+
// Common Schema Parts
|
|
22
|
+
// ============================================================================
|
|
23
|
+
export const BaseSearchParamsSchema = {
|
|
24
|
+
query: Type.String({ description: "Search query string" }),
|
|
25
|
+
max_results: Type.Optional(Type.Number({ description: "Number of results to return (1-20, default: 5)" })),
|
|
26
|
+
search_depth: Type.Optional(StringEnum(["basic", "advanced"], {
|
|
27
|
+
description: "Search depth: 'basic' or 'advanced' (default: 'basic')",
|
|
28
|
+
})),
|
|
29
|
+
days: Type.Optional(Type.Number({ description: "Limit results to last N days (e.g., 7 for last week)" })),
|
|
30
|
+
};
|
|
31
|
+
export const IncludeOptionsSchema = {
|
|
32
|
+
include_answer: Type.Optional(Type.Boolean({ description: "Include AI-generated answer (default: true)" })),
|
|
33
|
+
include_raw_content: Type.Optional(Type.Boolean({ description: "Include raw page content in results (default: false)" })),
|
|
34
|
+
include_images: Type.Optional(Type.Boolean({ description: "Include relevant images in results (default: false)" })),
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/tools/tavily/schemas.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC,MAAM,CAAC;IAC/C,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC;IAC1D,WAAW,EAAE,IAAI,CAAC,QAAQ,CACxB,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,gDAAgD,EAAE,CAAC,CAC/E;IACD,YAAY,EAAE,IAAI,CAAC,QAAQ,CACzB,UAAU,CAAC,CAAC,OAAO,EAAE,UAAU,CAAU,EAAE;QACzC,WAAW,EAAE,wDAAwD;KACtE,CAAC,CACH;IACD,cAAc,EAAE,IAAI,CAAC,QAAQ,CAC3B,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,6CAA6C,EAAE,CAAC,CAC7E;IACD,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAChC,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,sDAAsD,EAAE,CAAC,CACtF;IACD,cAAc,EAAE,IAAI,CAAC,QAAQ,CAC3B,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,qDAAqD,EAAE,CAAC,CACrF;IACD,IAAI,EAAE,IAAI,CAAC,QAAQ,CACjB,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,sDAAsD,EAAE,CAAC,CACrF;CACF,CAAC,CAAC;AAEH,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAE/E,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC;IAC1D,WAAW,EAAE,IAAI,CAAC,QAAQ,CACxB,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,gDAAgD,EAAE,CAAC,CAC/E;IACD,YAAY,EAAE,IAAI,CAAC,QAAQ,CACzB,UAAU,CAAC,CAAC,OAAO,EAAE,UAAU,CAAU,EAAE;QACzC,WAAW,EAAE,wDAAwD;KACtE,CAAC,CACH;IACD,IAAI,EAAE,IAAI,CAAC,QAAQ,CACjB,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,sDAAsD,EAAE,CAAC,CACrF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAC3B,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,6CAA6C,EAAE,CAAC,CAC7E;IACD,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAChC,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,sDAAsD,EAAE,CAAC,CACtF;IACD,cAAc,EAAE,IAAI,CAAC,QAAQ,CAC3B,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,qDAAqD,EAAE,CAAC,CACrF;CACF,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for Tavily tools
|
|
3
|
+
*/
|
|
4
|
+
import type { TruncationResult } from "@mariozechner/pi-coding-agent";
|
|
5
|
+
export interface BaseSearchParams {
|
|
6
|
+
query: string;
|
|
7
|
+
max_results?: number;
|
|
8
|
+
search_depth?: "basic" | "advanced";
|
|
9
|
+
days?: number;
|
|
10
|
+
}
|
|
11
|
+
export interface SearchResponseDetails {
|
|
12
|
+
query: string;
|
|
13
|
+
maxResults: number;
|
|
14
|
+
searchDepth: string;
|
|
15
|
+
days?: number;
|
|
16
|
+
answer?: string;
|
|
17
|
+
resultCount: number;
|
|
18
|
+
sources: Array<{
|
|
19
|
+
title: string;
|
|
20
|
+
url: string;
|
|
21
|
+
score: number;
|
|
22
|
+
}>;
|
|
23
|
+
truncation?: TruncationResult;
|
|
24
|
+
fullOutputPath?: string;
|
|
25
|
+
error?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface WebSearchParams extends BaseSearchParams {
|
|
28
|
+
include_answer?: boolean;
|
|
29
|
+
include_raw_content?: boolean;
|
|
30
|
+
include_images?: boolean;
|
|
31
|
+
}
|
|
32
|
+
export interface WebSearchDetails extends SearchResponseDetails {
|
|
33
|
+
includeAnswer: boolean;
|
|
34
|
+
includeRawContent: boolean;
|
|
35
|
+
includeImages: boolean;
|
|
36
|
+
}
|
|
37
|
+
export interface SearchResult {
|
|
38
|
+
title: string;
|
|
39
|
+
url: string;
|
|
40
|
+
score: number;
|
|
41
|
+
content?: string;
|
|
42
|
+
rawContent?: string;
|
|
43
|
+
}
|
|
44
|
+
export interface ImageResult {
|
|
45
|
+
url: string;
|
|
46
|
+
description?: string;
|
|
47
|
+
}
|
|
48
|
+
export interface FormattedOutputParts {
|
|
49
|
+
answer?: string;
|
|
50
|
+
sources: string[];
|
|
51
|
+
images?: string[];
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/tools/tavily/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAMtE,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD,MAAM,WAAW,eAAgB,SAAQ,gBAAgB;IACvD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAiB,SAAQ,qBAAqB;IAC7D,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;CACxB;AAMD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/tools/tavily/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Web Search Tool - Provides web search capabilities using Tavily SDK
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - Search the web using Tavily's search API
|
|
6
|
+
* - Configurable search depth (basic/advanced)
|
|
7
|
+
* - Time-limited searches with days parameter
|
|
8
|
+
* - AI-generated answers
|
|
9
|
+
* - Proper output truncation (50KB / 2000 lines)
|
|
10
|
+
* - Custom TUI rendering
|
|
11
|
+
* - Robust error handling
|
|
12
|
+
*/
|
|
13
|
+
import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
|
|
14
|
+
import type { TavilyClient } from "@tavily/core";
|
|
15
|
+
export declare function registerWebSearchTool(pi: ExtensionAPI, client: TavilyClient): void;
|
|
16
|
+
//# sourceMappingURL=web-search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-search.d.ts","sourceRoot":"","sources":["../../src/tools/web-search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAajD,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CA6HlF"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Web Search Tool - Provides web search capabilities using Tavily SDK
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - Search the web using Tavily's search API
|
|
6
|
+
* - Configurable search depth (basic/advanced)
|
|
7
|
+
* - Time-limited searches with days parameter
|
|
8
|
+
* - AI-generated answers
|
|
9
|
+
* - Proper output truncation (50KB / 2000 lines)
|
|
10
|
+
* - Custom TUI rendering
|
|
11
|
+
* - Robust error handling
|
|
12
|
+
*/
|
|
13
|
+
import { applyTruncation, createErrorOutput } from "./shared/truncation.js";
|
|
14
|
+
import { buildSearchOptions, validateQuery } from "./tavily/client.js";
|
|
15
|
+
import { extractSearchResults, formatWebSearchResponse } from "./tavily/formatters.js";
|
|
16
|
+
import { renderWebSearchCall, renderWebSearchResult } from "./tavily/renderers.js";
|
|
17
|
+
import { WebSearchParamsSchema } from "./tavily/schemas.js";
|
|
18
|
+
// ============================================================================
|
|
19
|
+
// Web Search Tool Registration
|
|
20
|
+
// ============================================================================
|
|
21
|
+
export function registerWebSearchTool(pi, client) {
|
|
22
|
+
pi.registerTool({
|
|
23
|
+
name: "web_search",
|
|
24
|
+
label: "Web Search",
|
|
25
|
+
description: `Searches the web for current information using Tavily. ` +
|
|
26
|
+
`Output is truncated to 2000 lines or 50KB (whichever is hit first). ` +
|
|
27
|
+
`Useful for finding recent news, documentation, or any time-sensitive information.`,
|
|
28
|
+
promptSnippet: "Search the web for current information, news, documentation, or time-sensitive data.",
|
|
29
|
+
promptGuidelines: [
|
|
30
|
+
"Use this tool when the user asks for recent news, current events, or up-to-date information.",
|
|
31
|
+
"Use this tool to search for documentation, APIs, or technical information.",
|
|
32
|
+
"Use this tool to verify facts or find current statistics.",
|
|
33
|
+
"Use the days parameter to limit results to recent timeframes (e.g., 7 for last week).",
|
|
34
|
+
"Use include_images to find relevant images for your search.",
|
|
35
|
+
"Use include_raw_content to get more detailed page content.",
|
|
36
|
+
"Use search_depth advanced for deeper, more comprehensive searches.",
|
|
37
|
+
],
|
|
38
|
+
parameters: WebSearchParamsSchema,
|
|
39
|
+
async execute(_toolCallId, params, _signal, onUpdate, ctx) {
|
|
40
|
+
try {
|
|
41
|
+
// Validate and normalize parameters
|
|
42
|
+
const query = validateQuery(params.query);
|
|
43
|
+
const searchOptions = buildSearchOptions(params);
|
|
44
|
+
// Notify user we're searching
|
|
45
|
+
onUpdate?.({
|
|
46
|
+
content: [{ type: "text", text: `Searching for: ${query}` }],
|
|
47
|
+
details: {},
|
|
48
|
+
});
|
|
49
|
+
// Perform search using the provided client
|
|
50
|
+
const response = await client.search(query, searchOptions);
|
|
51
|
+
// Extract and format search results
|
|
52
|
+
const { answer, results, images } = extractSearchResults(response);
|
|
53
|
+
const fullOutput = formatWebSearchResponse(answer, results, images, searchOptions.includeImages);
|
|
54
|
+
// Apply truncation
|
|
55
|
+
const { content, truncation, fullOutputPath } = await applyTruncation(fullOutput, ctx.cwd, "search");
|
|
56
|
+
// Build details with proper defaults
|
|
57
|
+
const maxResults = searchOptions.maxResults ?? 5;
|
|
58
|
+
const searchDepth = String(searchOptions.searchDepth ?? "basic");
|
|
59
|
+
const includeImages = searchOptions.includeImages ?? false;
|
|
60
|
+
const days = searchOptions.days;
|
|
61
|
+
const details = {
|
|
62
|
+
query,
|
|
63
|
+
maxResults,
|
|
64
|
+
searchDepth,
|
|
65
|
+
includeAnswer: searchOptions.includeAnswer !== false,
|
|
66
|
+
includeRawContent: typeof searchOptions.includeRawContent === "string",
|
|
67
|
+
includeImages,
|
|
68
|
+
days,
|
|
69
|
+
answer: answer ?? undefined,
|
|
70
|
+
resultCount: results.length,
|
|
71
|
+
sources: results.map((r) => ({
|
|
72
|
+
title: r.title,
|
|
73
|
+
url: r.url,
|
|
74
|
+
score: r.score,
|
|
75
|
+
})),
|
|
76
|
+
truncation,
|
|
77
|
+
fullOutputPath,
|
|
78
|
+
};
|
|
79
|
+
return {
|
|
80
|
+
content: [{ type: "text", text: content }],
|
|
81
|
+
details,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
86
|
+
const errorOutput = createErrorOutput(errorMessage, {
|
|
87
|
+
query: params.query,
|
|
88
|
+
maxResults: params.max_results ?? 5,
|
|
89
|
+
searchDepth: params.search_depth ?? "basic",
|
|
90
|
+
includeAnswer: params.include_answer ?? true,
|
|
91
|
+
includeRawContent: params.include_raw_content ?? false,
|
|
92
|
+
includeImages: params.include_images ?? false,
|
|
93
|
+
days: params.days,
|
|
94
|
+
});
|
|
95
|
+
return {
|
|
96
|
+
content: [{ type: "text", text: errorOutput.content }],
|
|
97
|
+
details: {
|
|
98
|
+
query: params.query,
|
|
99
|
+
maxResults: params.max_results ?? 5,
|
|
100
|
+
searchDepth: params.search_depth ?? "basic",
|
|
101
|
+
includeAnswer: params.include_answer ?? true,
|
|
102
|
+
includeRawContent: params.include_raw_content ?? false,
|
|
103
|
+
includeImages: params.include_images ?? false,
|
|
104
|
+
days: params.days,
|
|
105
|
+
resultCount: 0,
|
|
106
|
+
sources: [],
|
|
107
|
+
error: errorMessage,
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
renderCall(args, theme) {
|
|
113
|
+
return renderWebSearchCall(args, theme);
|
|
114
|
+
},
|
|
115
|
+
renderResult(result, state, theme) {
|
|
116
|
+
return renderWebSearchResult(result, state, theme);
|
|
117
|
+
},
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=web-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-search.js","sourceRoot":"","sources":["../../src/tools/web-search.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@alexanderfortin/pi-tavily-tools",
|
|
3
|
+
"author": "Alexander Fortin",
|
|
4
|
+
"version": "0.1.0",
|
|
5
|
+
"description": "Pi coding agent extension for web search using Tavily",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"pi-package",
|
|
8
|
+
"tavily",
|
|
9
|
+
"web-search",
|
|
10
|
+
"search"
|
|
11
|
+
],
|
|
12
|
+
"type": "module",
|
|
13
|
+
"main": "./dist/index.js",
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"exports": {
|
|
16
|
+
".": {
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"import": "./dist/index.js"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"license": "MIT",
|
|
22
|
+
"pi": {
|
|
23
|
+
"extensions": [
|
|
24
|
+
"./dist/index.js"
|
|
25
|
+
]
|
|
26
|
+
},
|
|
27
|
+
"publishConfig": {
|
|
28
|
+
"access": "public"
|
|
29
|
+
},
|
|
30
|
+
"files": [
|
|
31
|
+
"dist",
|
|
32
|
+
"package.json",
|
|
33
|
+
"README.md",
|
|
34
|
+
"LICENSE"
|
|
35
|
+
],
|
|
36
|
+
"peerDependencies": {
|
|
37
|
+
"@mariozechner/pi-coding-agent": "*",
|
|
38
|
+
"@mariozechner/pi-ai": "*",
|
|
39
|
+
"@mariozechner/pi-tui": "*",
|
|
40
|
+
"@sinclair/typebox": "*"
|
|
41
|
+
},
|
|
42
|
+
"repository": {
|
|
43
|
+
"type": "git",
|
|
44
|
+
"url": "https://github.com/shaftoe/pi-tavily-tools"
|
|
45
|
+
},
|
|
46
|
+
"scripts": {
|
|
47
|
+
"build": "bun run check && tsc",
|
|
48
|
+
"check": "tsc --noEmit --project tsconfig.test.json",
|
|
49
|
+
"check:watch": "tsc --noEmit --watch",
|
|
50
|
+
"lint": "eslint . --ext .ts",
|
|
51
|
+
"lint:fix": "eslint . --ext .ts --fix",
|
|
52
|
+
"format": "prettier --check .",
|
|
53
|
+
"format:fix": "prettier --write .",
|
|
54
|
+
"test": "bun test",
|
|
55
|
+
"test:watch": "bun test --watch",
|
|
56
|
+
"release": "bun run build && npm publish --access public",
|
|
57
|
+
"release:dry-run": "bun run build && npm publish --dry-run"
|
|
58
|
+
},
|
|
59
|
+
"devDependencies": {
|
|
60
|
+
"@mariozechner/pi-ai": "*",
|
|
61
|
+
"@mariozechner/pi-coding-agent": "*",
|
|
62
|
+
"@mariozechner/pi-tui": "*",
|
|
63
|
+
"@sinclair/typebox": "*",
|
|
64
|
+
"@types/bun": "^1.3.11",
|
|
65
|
+
"@types/node": "^25.5.2",
|
|
66
|
+
"@typescript-eslint/eslint-plugin": "^8.20.0",
|
|
67
|
+
"@typescript-eslint/parser": "^8.20.0",
|
|
68
|
+
"eslint": "^10.2.0",
|
|
69
|
+
"eslint-config-prettier": "^10.1.8",
|
|
70
|
+
"prettier": "^3.4.2",
|
|
71
|
+
"prettier-plugin-organize-imports": "^4.1.0",
|
|
72
|
+
"typescript": "^6.0.0"
|
|
73
|
+
},
|
|
74
|
+
"dependencies": {
|
|
75
|
+
"@tavily/core": "^0.7.2"
|
|
76
|
+
}
|
|
77
|
+
}
|