@polpo-ai/tools 0.2.4
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/dist/adapters/node-filesystem.d.ts +12 -0
- package/dist/adapters/node-filesystem.d.ts.map +1 -0
- package/dist/adapters/node-filesystem.js +46 -0
- package/dist/adapters/node-filesystem.js.map +1 -0
- package/dist/adapters/node-shell.d.ts +5 -0
- package/dist/adapters/node-shell.d.ts.map +1 -0
- package/dist/adapters/node-shell.js +34 -0
- package/dist/adapters/node-shell.js.map +1 -0
- package/dist/audio-tools.d.ts +42 -0
- package/dist/audio-tools.d.ts.map +1 -0
- package/dist/audio-tools.js +552 -0
- package/dist/audio-tools.js.map +1 -0
- package/dist/browser-tools.d.ts +36 -0
- package/dist/browser-tools.d.ts.map +1 -0
- package/dist/browser-tools.js +525 -0
- package/dist/browser-tools.js.map +1 -0
- package/dist/coding-tools.d.ts +99 -0
- package/dist/coding-tools.d.ts.map +1 -0
- package/dist/coding-tools.js +434 -0
- package/dist/coding-tools.js.map +1 -0
- package/dist/docx-tools.d.ts +22 -0
- package/dist/docx-tools.d.ts.map +1 -0
- package/dist/docx-tools.js +236 -0
- package/dist/docx-tools.js.map +1 -0
- package/dist/email-tools.d.ts +34 -0
- package/dist/email-tools.d.ts.map +1 -0
- package/dist/email-tools.js +787 -0
- package/dist/email-tools.js.map +1 -0
- package/dist/excel-tools.d.ts +25 -0
- package/dist/excel-tools.d.ts.map +1 -0
- package/dist/excel-tools.js +409 -0
- package/dist/excel-tools.js.map +1 -0
- package/dist/http-tools.d.ts +23 -0
- package/dist/http-tools.d.ts.map +1 -0
- package/dist/http-tools.js +214 -0
- package/dist/http-tools.js.map +1 -0
- package/dist/image-tools.d.ts +40 -0
- package/dist/image-tools.d.ts.map +1 -0
- package/dist/image-tools.js +522 -0
- package/dist/image-tools.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/memory-tools.d.ts +19 -0
- package/dist/memory-tools.d.ts.map +1 -0
- package/dist/memory-tools.js +104 -0
- package/dist/memory-tools.js.map +1 -0
- package/dist/outcome-tools.d.ts +25 -0
- package/dist/outcome-tools.d.ts.map +1 -0
- package/dist/outcome-tools.js +191 -0
- package/dist/outcome-tools.js.map +1 -0
- package/dist/path-sandbox.d.ts +28 -0
- package/dist/path-sandbox.d.ts.map +1 -0
- package/dist/path-sandbox.js +58 -0
- package/dist/path-sandbox.js.map +1 -0
- package/dist/pdf-tools.d.ts +25 -0
- package/dist/pdf-tools.d.ts.map +1 -0
- package/dist/pdf-tools.js +363 -0
- package/dist/pdf-tools.js.map +1 -0
- package/dist/phone-tools.d.ts +27 -0
- package/dist/phone-tools.d.ts.map +1 -0
- package/dist/phone-tools.js +577 -0
- package/dist/phone-tools.js.map +1 -0
- package/dist/safe-env.d.ts +26 -0
- package/dist/safe-env.d.ts.map +1 -0
- package/dist/safe-env.js +76 -0
- package/dist/safe-env.js.map +1 -0
- package/dist/search-tools.d.ts +22 -0
- package/dist/search-tools.d.ts.map +1 -0
- package/dist/search-tools.js +205 -0
- package/dist/search-tools.js.map +1 -0
- package/dist/ssrf-guard.d.ts +17 -0
- package/dist/ssrf-guard.d.ts.map +1 -0
- package/dist/ssrf-guard.js +95 -0
- package/dist/ssrf-guard.js.map +1 -0
- package/dist/types.d.ts +21 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/vault-tools.d.ts +26 -0
- package/dist/vault-tools.d.ts.map +1 -0
- package/dist/vault-tools.js +86 -0
- package/dist/vault-tools.js.map +1 -0
- package/dist/whatsapp-tools.d.ts +18 -0
- package/dist/whatsapp-tools.d.ts.map +1 -0
- package/dist/whatsapp-tools.js +206 -0
- package/dist/whatsapp-tools.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP/Fetch tools for agent network access.
|
|
3
|
+
*
|
|
4
|
+
* Provides structured HTTP capabilities so agents can:
|
|
5
|
+
* - Fetch web pages and API endpoints
|
|
6
|
+
* - Make REST API calls (GET, POST, PUT, DELETE, PATCH)
|
|
7
|
+
* - Download files from URLs
|
|
8
|
+
*
|
|
9
|
+
* Uses Node.js native fetch (available since Node 18).
|
|
10
|
+
* Enforces output size limits and timeout controls.
|
|
11
|
+
*/
|
|
12
|
+
import { writeFileSync, mkdirSync } from "node:fs";
|
|
13
|
+
import { resolve, dirname } from "node:path";
|
|
14
|
+
import { Type } from "@sinclair/typebox";
|
|
15
|
+
import { resolveAllowedPaths, assertPathAllowed } from "./path-sandbox.js";
|
|
16
|
+
import { assertUrlAllowed } from "./ssrf-guard.js";
|
|
17
|
+
const MAX_RESPONSE_BYTES = 100_000;
|
|
18
|
+
const DEFAULT_TIMEOUT = 30_000;
|
|
19
|
+
// ─── Tool: http_fetch ───
|
|
20
|
+
const HttpFetchSchema = Type.Object({
|
|
21
|
+
url: Type.String({ description: "URL to fetch (must be http:// or https://)" }),
|
|
22
|
+
method: Type.Optional(Type.Union([
|
|
23
|
+
Type.Literal("GET"),
|
|
24
|
+
Type.Literal("POST"),
|
|
25
|
+
Type.Literal("PUT"),
|
|
26
|
+
Type.Literal("DELETE"),
|
|
27
|
+
Type.Literal("PATCH"),
|
|
28
|
+
Type.Literal("HEAD"),
|
|
29
|
+
Type.Literal("OPTIONS"),
|
|
30
|
+
], { description: "HTTP method (default: GET)" })),
|
|
31
|
+
headers: Type.Optional(Type.Record(Type.String(), Type.String(), { description: "Request headers as key-value pairs" })),
|
|
32
|
+
body: Type.Optional(Type.String({ description: "Request body (for POST/PUT/PATCH). Use JSON string for JSON APIs." })),
|
|
33
|
+
timeout: Type.Optional(Type.Number({ description: "Timeout in milliseconds (default: 30000)" })),
|
|
34
|
+
});
|
|
35
|
+
function createHttpFetchTool() {
|
|
36
|
+
return {
|
|
37
|
+
name: "http_fetch",
|
|
38
|
+
label: "HTTP Fetch",
|
|
39
|
+
description: "Make an HTTP request to a URL. Supports all HTTP methods, custom headers, and request bodies. " +
|
|
40
|
+
"Returns status code, response headers, and body. Use for API calls, fetching web pages, or checking endpoints.",
|
|
41
|
+
parameters: HttpFetchSchema,
|
|
42
|
+
async execute(_id, params, signal) {
|
|
43
|
+
const url = params.url;
|
|
44
|
+
if (!url.startsWith("http://") && !url.startsWith("https://")) {
|
|
45
|
+
return {
|
|
46
|
+
content: [{ type: "text", text: "Error: URL must start with http:// or https://" }],
|
|
47
|
+
details: { error: "invalid_url" },
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
assertUrlAllowed(url);
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
return {
|
|
55
|
+
content: [{ type: "text", text: `Error: ${err.message}` }],
|
|
56
|
+
details: { error: "ssrf_blocked" },
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
const method = params.method ?? "GET";
|
|
60
|
+
const timeout = params.timeout ?? DEFAULT_TIMEOUT;
|
|
61
|
+
try {
|
|
62
|
+
const controller = new AbortController();
|
|
63
|
+
const timer = setTimeout(() => controller.abort(), timeout);
|
|
64
|
+
// Combine external signal with timeout
|
|
65
|
+
if (signal) {
|
|
66
|
+
signal.addEventListener("abort", () => controller.abort(), { once: true });
|
|
67
|
+
}
|
|
68
|
+
const response = await fetch(url, {
|
|
69
|
+
method,
|
|
70
|
+
headers: params.headers,
|
|
71
|
+
body: params.body,
|
|
72
|
+
signal: controller.signal,
|
|
73
|
+
redirect: "follow",
|
|
74
|
+
});
|
|
75
|
+
clearTimeout(timer);
|
|
76
|
+
const contentType = response.headers.get("content-type") ?? "";
|
|
77
|
+
const isText = contentType.includes("text") || contentType.includes("json") ||
|
|
78
|
+
contentType.includes("xml") || contentType.includes("javascript") ||
|
|
79
|
+
contentType.includes("html") || contentType.includes("css") ||
|
|
80
|
+
contentType.includes("svg");
|
|
81
|
+
let body;
|
|
82
|
+
if (isText) {
|
|
83
|
+
const text = await response.text();
|
|
84
|
+
body = text.length > MAX_RESPONSE_BYTES
|
|
85
|
+
? text.slice(0, MAX_RESPONSE_BYTES) + `\n[truncated — ${text.length} total bytes]`
|
|
86
|
+
: text;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
const buffer = await response.arrayBuffer();
|
|
90
|
+
body = `[Binary response: ${buffer.byteLength} bytes, content-type: ${contentType}]`;
|
|
91
|
+
}
|
|
92
|
+
// Extract relevant response headers
|
|
93
|
+
const responseHeaders = {};
|
|
94
|
+
for (const [key, value] of response.headers.entries()) {
|
|
95
|
+
if (["content-type", "content-length", "location", "set-cookie",
|
|
96
|
+
"cache-control", "x-ratelimit-remaining", "retry-after"].includes(key.toLowerCase())) {
|
|
97
|
+
responseHeaders[key] = value;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
const resultText = [
|
|
101
|
+
`Status: ${response.status} ${response.statusText}`,
|
|
102
|
+
`Headers: ${JSON.stringify(responseHeaders)}`,
|
|
103
|
+
``,
|
|
104
|
+
body,
|
|
105
|
+
].join("\n");
|
|
106
|
+
return {
|
|
107
|
+
content: [{ type: "text", text: resultText }],
|
|
108
|
+
details: {
|
|
109
|
+
url,
|
|
110
|
+
method,
|
|
111
|
+
status: response.status,
|
|
112
|
+
statusText: response.statusText,
|
|
113
|
+
headers: responseHeaders,
|
|
114
|
+
bodyLength: body.length,
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
const message = err.name === "AbortError" ? "Request timed out" : err.message;
|
|
120
|
+
return {
|
|
121
|
+
content: [{ type: "text", text: `HTTP error: ${message}` }],
|
|
122
|
+
details: { url, method, error: message },
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
// ─── Tool: http_download ───
|
|
129
|
+
const HttpDownloadSchema = Type.Object({
|
|
130
|
+
url: Type.String({ description: "URL to download from" }),
|
|
131
|
+
path: Type.String({ description: "Local file path to save the downloaded content" }),
|
|
132
|
+
headers: Type.Optional(Type.Record(Type.String(), Type.String(), { description: "Optional request headers" })),
|
|
133
|
+
});
|
|
134
|
+
function createHttpDownloadTool(cwd, sandbox) {
|
|
135
|
+
return {
|
|
136
|
+
name: "http_download",
|
|
137
|
+
label: "HTTP Download",
|
|
138
|
+
description: "Download a file from a URL and save it locally. Use for downloading assets, binaries, or data files.",
|
|
139
|
+
parameters: HttpDownloadSchema,
|
|
140
|
+
async execute(_id, params, signal) {
|
|
141
|
+
const url = params.url;
|
|
142
|
+
if (!url.startsWith("http://") && !url.startsWith("https://")) {
|
|
143
|
+
return {
|
|
144
|
+
content: [{ type: "text", text: "Error: URL must start with http:// or https://" }],
|
|
145
|
+
details: { error: "invalid_url" },
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
try {
|
|
149
|
+
assertUrlAllowed(url);
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
return {
|
|
153
|
+
content: [{ type: "text", text: `Error: ${err.message}` }],
|
|
154
|
+
details: { error: "ssrf_blocked" },
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
const filePath = resolve(cwd, params.path);
|
|
158
|
+
assertPathAllowed(filePath, sandbox, "http_download");
|
|
159
|
+
try {
|
|
160
|
+
const controller = new AbortController();
|
|
161
|
+
const timer = setTimeout(() => controller.abort(), 120_000); // 2 min for downloads
|
|
162
|
+
if (signal) {
|
|
163
|
+
signal.addEventListener("abort", () => controller.abort(), { once: true });
|
|
164
|
+
}
|
|
165
|
+
const response = await fetch(url, {
|
|
166
|
+
headers: params.headers,
|
|
167
|
+
signal: controller.signal,
|
|
168
|
+
redirect: "follow",
|
|
169
|
+
});
|
|
170
|
+
clearTimeout(timer);
|
|
171
|
+
if (!response.ok) {
|
|
172
|
+
return {
|
|
173
|
+
content: [{ type: "text", text: `Download failed: ${response.status} ${response.statusText}` }],
|
|
174
|
+
details: { url, status: response.status, error: "http_error" },
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
const buffer = Buffer.from(await response.arrayBuffer());
|
|
178
|
+
mkdirSync(dirname(filePath), { recursive: true });
|
|
179
|
+
writeFileSync(filePath, buffer);
|
|
180
|
+
return {
|
|
181
|
+
content: [{ type: "text", text: `Downloaded ${buffer.byteLength} bytes to ${filePath}` }],
|
|
182
|
+
details: { url, path: filePath, bytes: buffer.byteLength },
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
catch (err) {
|
|
186
|
+
const message = err.name === "AbortError" ? "Download timed out" : err.message;
|
|
187
|
+
return {
|
|
188
|
+
content: [{ type: "text", text: `Download error: ${message}` }],
|
|
189
|
+
details: { url, error: message },
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
},
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
export const ALL_HTTP_TOOL_NAMES = ["http_fetch", "http_download"];
|
|
196
|
+
/**
|
|
197
|
+
* Create HTTP tools for network access.
|
|
198
|
+
*
|
|
199
|
+
* @param cwd - Working directory for resolving download paths
|
|
200
|
+
* @param allowedPaths - Sandbox paths for download destination validation
|
|
201
|
+
* @param allowedTools - Optional filter
|
|
202
|
+
*/
|
|
203
|
+
export function createHttpTools(cwd, allowedPaths, allowedTools) {
|
|
204
|
+
const sandbox = resolveAllowedPaths(cwd, allowedPaths);
|
|
205
|
+
const factories = {
|
|
206
|
+
http_fetch: () => createHttpFetchTool(),
|
|
207
|
+
http_download: () => createHttpDownloadTool(cwd, sandbox),
|
|
208
|
+
};
|
|
209
|
+
const names = allowedTools
|
|
210
|
+
? ALL_HTTP_TOOL_NAMES.filter(n => allowedTools.some(a => a.toLowerCase() === n))
|
|
211
|
+
: ALL_HTTP_TOOL_NAMES;
|
|
212
|
+
return names.map(n => factories[n]());
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=http-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-tools.js","sourceRoot":"","sources":["../src/http-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Image & video tools for generation and vision/analysis.
|
|
3
|
+
*
|
|
4
|
+
* Provides agent capabilities to:
|
|
5
|
+
* - Generate images from text prompts (image_generate) — via fal.ai
|
|
6
|
+
* - Generate videos from text prompts (video_generate) — via fal.ai
|
|
7
|
+
* - Analyze/describe images using vision models (image_analyze) — via OpenAI/Anthropic
|
|
8
|
+
*
|
|
9
|
+
* Architecture: direct fetch() to provider REST APIs — zero vendor SDK dependencies.
|
|
10
|
+
*
|
|
11
|
+
* Providers:
|
|
12
|
+
* Image generation: fal.ai (FLUX models — fal-ai/flux/dev default)
|
|
13
|
+
* Video generation: fal.ai (Wan 2.2 — fal-ai/wan/v2.2-1.3b/text-to-video default)
|
|
14
|
+
* Vision/analysis: openai (gpt-4.1-mini), anthropic (Claude)
|
|
15
|
+
*
|
|
16
|
+
* Credential resolution order (same as email tools):
|
|
17
|
+
* 1. Agent vault (per-agent credentials — e.g. service "fal" with key "key")
|
|
18
|
+
* 2. Environment variables (global fallback)
|
|
19
|
+
*
|
|
20
|
+
* Environment variables (fallback):
|
|
21
|
+
* FAL_KEY — fal.ai image/video generation
|
|
22
|
+
* OPENAI_API_KEY — openai vision provider
|
|
23
|
+
* ANTHROPIC_API_KEY — anthropic vision provider
|
|
24
|
+
*/
|
|
25
|
+
import type { AgentTool } from "@mariozechner/pi-agent-core";
|
|
26
|
+
import type { ResolvedVault } from "./types.js";
|
|
27
|
+
export type ImageToolName = "image_generate" | "image_analyze" | "video_generate";
|
|
28
|
+
export declare const ALL_IMAGE_TOOL_NAMES: ImageToolName[];
|
|
29
|
+
/**
|
|
30
|
+
* Create image & video tools for generation, vision analysis, and video creation.
|
|
31
|
+
*
|
|
32
|
+
* @param cwd - Working directory for resolving file paths
|
|
33
|
+
* @param allowedPaths - Sandbox paths for file validation
|
|
34
|
+
* @param allowedTools - Optional filter — only include tools whose names appear here.
|
|
35
|
+
* Supports wildcards expanded upstream (e.g. "image_*", "video_*").
|
|
36
|
+
* @param vault - Resolved vault for credential resolution (fal-ai, openai, anthropic).
|
|
37
|
+
* Credentials are resolved as: vault > environment variable.
|
|
38
|
+
*/
|
|
39
|
+
export declare function createImageTools(cwd: string, allowedPaths?: string[], allowedTools?: string[], vault?: ResolvedVault): AgentTool<any>[];
|
|
40
|
+
//# sourceMappingURL=image-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-tools.d.ts","sourceRoot":"","sources":["../src/image-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,6BAA6B,CAAC;AAE9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAykBhD,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG,eAAe,GAAG,gBAAgB,CAAC;AAElF,eAAO,MAAM,oBAAoB,EAAE,aAAa,EAA0D,CAAC;AAE3G;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,YAAY,CAAC,EAAE,MAAM,EAAE,EACvB,YAAY,CAAC,EAAE,MAAM,EAAE,EACvB,KAAK,CAAC,EAAE,aAAa,GACpB,SAAS,CAAC,GAAG,CAAC,EAAE,CAclB"}
|