@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,236 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Word/DOCX tools for document operations.
|
|
3
|
+
*
|
|
4
|
+
* Provides tools for agents to:
|
|
5
|
+
* - Read .docx files (extract text, HTML, or Markdown)
|
|
6
|
+
* - Create .docx files with rich content (headings, paragraphs, tables, lists)
|
|
7
|
+
*
|
|
8
|
+
* Uses `mammoth` for reading and `docx` for creation.
|
|
9
|
+
* All file operations enforce path sandboxing.
|
|
10
|
+
*/
|
|
11
|
+
import { writeFileSync, mkdirSync } from "node:fs";
|
|
12
|
+
import { resolve, dirname } from "node:path";
|
|
13
|
+
import { Type } from "@sinclair/typebox";
|
|
14
|
+
import { resolveAllowedPaths, assertPathAllowed } from "./path-sandbox.js";
|
|
15
|
+
const MAX_TEXT_OUTPUT = 50_000;
|
|
16
|
+
/** Convert basic HTML to Markdown (headings, paragraphs, lists, bold, italic) */
|
|
17
|
+
function htmlToBasicMarkdown(html) {
|
|
18
|
+
return html
|
|
19
|
+
// Headings
|
|
20
|
+
.replace(/<h1[^>]*>(.*?)<\/h1>/gi, "# $1\n\n")
|
|
21
|
+
.replace(/<h2[^>]*>(.*?)<\/h2>/gi, "## $1\n\n")
|
|
22
|
+
.replace(/<h3[^>]*>(.*?)<\/h3>/gi, "### $1\n\n")
|
|
23
|
+
.replace(/<h4[^>]*>(.*?)<\/h4>/gi, "#### $1\n\n")
|
|
24
|
+
.replace(/<h5[^>]*>(.*?)<\/h5>/gi, "##### $1\n\n")
|
|
25
|
+
.replace(/<h6[^>]*>(.*?)<\/h6>/gi, "###### $1\n\n")
|
|
26
|
+
// Bold/italic
|
|
27
|
+
.replace(/<strong>(.*?)<\/strong>/gi, "**$1**")
|
|
28
|
+
.replace(/<em>(.*?)<\/em>/gi, "*$1*")
|
|
29
|
+
.replace(/<b>(.*?)<\/b>/gi, "**$1**")
|
|
30
|
+
.replace(/<i>(.*?)<\/i>/gi, "*$1*")
|
|
31
|
+
// Lists
|
|
32
|
+
.replace(/<li>(.*?)<\/li>/gi, "- $1\n")
|
|
33
|
+
.replace(/<\/?[ou]l[^>]*>/gi, "\n")
|
|
34
|
+
// Paragraphs and breaks
|
|
35
|
+
.replace(/<p[^>]*>(.*?)<\/p>/gi, "$1\n\n")
|
|
36
|
+
.replace(/<br\s*\/?>/gi, "\n")
|
|
37
|
+
// Links
|
|
38
|
+
.replace(/<a[^>]*href="([^"]*)"[^>]*>(.*?)<\/a>/gi, "[$2]($1)")
|
|
39
|
+
// Strip remaining tags
|
|
40
|
+
.replace(/<[^>]+>/g, "")
|
|
41
|
+
// Clean up whitespace
|
|
42
|
+
.replace(/\n{3,}/g, "\n\n")
|
|
43
|
+
.trim();
|
|
44
|
+
}
|
|
45
|
+
// ─── Tool: docx_read ───
|
|
46
|
+
const DocxReadSchema = Type.Object({
|
|
47
|
+
path: Type.String({ description: "Path to .docx file" }),
|
|
48
|
+
format: Type.Optional(Type.Union([
|
|
49
|
+
Type.Literal("text"),
|
|
50
|
+
Type.Literal("markdown"),
|
|
51
|
+
Type.Literal("html"),
|
|
52
|
+
], { description: "Output format: 'text' (plain), 'markdown', or 'html'. Default: 'text'" })),
|
|
53
|
+
});
|
|
54
|
+
function createDocxReadTool(cwd, sandbox) {
|
|
55
|
+
return {
|
|
56
|
+
name: "docx_read",
|
|
57
|
+
label: "Read DOCX",
|
|
58
|
+
description: "Read a Word document (.docx) and extract its content as plain text, Markdown, or HTML. " +
|
|
59
|
+
"Preserves document structure (headings, lists, tables).",
|
|
60
|
+
parameters: DocxReadSchema,
|
|
61
|
+
async execute(_id, params) {
|
|
62
|
+
const filePath = resolve(cwd, params.path);
|
|
63
|
+
assertPathAllowed(filePath, sandbox, "docx_read");
|
|
64
|
+
try {
|
|
65
|
+
const mammoth = await import("mammoth");
|
|
66
|
+
const format = params.format ?? "text";
|
|
67
|
+
let result;
|
|
68
|
+
if (format === "html") {
|
|
69
|
+
result = await mammoth.convertToHtml({ path: filePath });
|
|
70
|
+
}
|
|
71
|
+
else if (format === "markdown") {
|
|
72
|
+
// mammoth doesn't export convertToMarkdown in all versions — use HTML + basic conversion
|
|
73
|
+
const htmlResult = await mammoth.convertToHtml({ path: filePath });
|
|
74
|
+
const md = htmlToBasicMarkdown(htmlResult.value);
|
|
75
|
+
result = { value: md, messages: htmlResult.messages };
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
result = await mammoth.extractRawText({ path: filePath });
|
|
79
|
+
}
|
|
80
|
+
const text = result.value;
|
|
81
|
+
const warnings = result.messages
|
|
82
|
+
.filter((m) => m.type === "warning")
|
|
83
|
+
.map((m) => m.message);
|
|
84
|
+
const truncated = text.length > MAX_TEXT_OUTPUT
|
|
85
|
+
? text.slice(0, MAX_TEXT_OUTPUT) + `\n[truncated — ${text.length} total chars]`
|
|
86
|
+
: text;
|
|
87
|
+
const warningText = warnings.length > 0
|
|
88
|
+
? `\nWarnings: ${warnings.join("; ")}`
|
|
89
|
+
: "";
|
|
90
|
+
return {
|
|
91
|
+
content: [{ type: "text", text: `DOCX (${format}): ${text.length} chars${warningText}\n\n${truncated}` }],
|
|
92
|
+
details: { path: filePath, format, chars: text.length, warnings },
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
return {
|
|
97
|
+
content: [{ type: "text", text: `DOCX read error: ${err.message}` }],
|
|
98
|
+
details: { error: err.message },
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
// ─── Tool: docx_create ───
|
|
105
|
+
const DocxCreateSchema = Type.Object({
|
|
106
|
+
path: Type.String({ description: "Output .docx file path" }),
|
|
107
|
+
title: Type.Optional(Type.String({ description: "Document title (appears as the first heading)" })),
|
|
108
|
+
content: Type.Array(Type.Object({
|
|
109
|
+
type: Type.Union([
|
|
110
|
+
Type.Literal("heading"),
|
|
111
|
+
Type.Literal("paragraph"),
|
|
112
|
+
Type.Literal("bullet"),
|
|
113
|
+
Type.Literal("numbered"),
|
|
114
|
+
], { description: "Block type" }),
|
|
115
|
+
text: Type.String({ description: "Text content" }),
|
|
116
|
+
level: Type.Optional(Type.Number({ description: "Heading level 1-6 (for type 'heading')" })),
|
|
117
|
+
bold: Type.Optional(Type.Boolean({ description: "Bold text" })),
|
|
118
|
+
italic: Type.Optional(Type.Boolean({ description: "Italic text" })),
|
|
119
|
+
}), { description: "Document content blocks", minItems: 1 }),
|
|
120
|
+
});
|
|
121
|
+
function createDocxCreateTool(cwd, sandbox) {
|
|
122
|
+
return {
|
|
123
|
+
name: "docx_create",
|
|
124
|
+
label: "Create DOCX",
|
|
125
|
+
description: "Create a Word document (.docx) with headings, paragraphs, bullet lists, and numbered lists. " +
|
|
126
|
+
"Supports bold and italic text formatting.",
|
|
127
|
+
parameters: DocxCreateSchema,
|
|
128
|
+
async execute(_id, params) {
|
|
129
|
+
const filePath = resolve(cwd, params.path);
|
|
130
|
+
assertPathAllowed(filePath, sandbox, "docx_create");
|
|
131
|
+
mkdirSync(dirname(filePath), { recursive: true });
|
|
132
|
+
try {
|
|
133
|
+
const docxModule = await import("docx");
|
|
134
|
+
const { Document, Paragraph, TextRun, HeadingLevel, Packer, AlignmentType, NumberFormat, } = docxModule;
|
|
135
|
+
const headingMap = {
|
|
136
|
+
1: HeadingLevel.HEADING_1,
|
|
137
|
+
2: HeadingLevel.HEADING_2,
|
|
138
|
+
3: HeadingLevel.HEADING_3,
|
|
139
|
+
4: HeadingLevel.HEADING_4,
|
|
140
|
+
5: HeadingLevel.HEADING_5,
|
|
141
|
+
6: HeadingLevel.HEADING_6,
|
|
142
|
+
};
|
|
143
|
+
const children = [];
|
|
144
|
+
// Title
|
|
145
|
+
if (params.title) {
|
|
146
|
+
children.push(new Paragraph({
|
|
147
|
+
text: params.title,
|
|
148
|
+
heading: HeadingLevel.TITLE,
|
|
149
|
+
}));
|
|
150
|
+
}
|
|
151
|
+
// Content blocks
|
|
152
|
+
for (const block of params.content) {
|
|
153
|
+
const textRun = new TextRun({
|
|
154
|
+
text: block.text,
|
|
155
|
+
bold: block.bold,
|
|
156
|
+
italics: block.italic,
|
|
157
|
+
});
|
|
158
|
+
switch (block.type) {
|
|
159
|
+
case "heading":
|
|
160
|
+
children.push(new Paragraph({
|
|
161
|
+
children: [textRun],
|
|
162
|
+
heading: headingMap[block.level ?? 1] ?? HeadingLevel.HEADING_1,
|
|
163
|
+
}));
|
|
164
|
+
break;
|
|
165
|
+
case "paragraph":
|
|
166
|
+
children.push(new Paragraph({
|
|
167
|
+
children: [textRun],
|
|
168
|
+
}));
|
|
169
|
+
break;
|
|
170
|
+
case "bullet":
|
|
171
|
+
children.push(new Paragraph({
|
|
172
|
+
children: [textRun],
|
|
173
|
+
bullet: { level: 0 },
|
|
174
|
+
}));
|
|
175
|
+
break;
|
|
176
|
+
case "numbered":
|
|
177
|
+
children.push(new Paragraph({
|
|
178
|
+
children: [textRun],
|
|
179
|
+
numbering: { reference: "default-numbering", level: 0 },
|
|
180
|
+
}));
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
// Check if we need numbered lists
|
|
185
|
+
const hasNumbered = params.content.some(b => b.type === "numbered");
|
|
186
|
+
const numbering = hasNumbered ? {
|
|
187
|
+
config: [{
|
|
188
|
+
reference: "default-numbering",
|
|
189
|
+
levels: [{
|
|
190
|
+
level: 0,
|
|
191
|
+
format: NumberFormat.DECIMAL,
|
|
192
|
+
text: "%1.",
|
|
193
|
+
alignment: AlignmentType.START,
|
|
194
|
+
}],
|
|
195
|
+
}],
|
|
196
|
+
} : undefined;
|
|
197
|
+
const doc = new Document({
|
|
198
|
+
numbering,
|
|
199
|
+
sections: [{ children }],
|
|
200
|
+
});
|
|
201
|
+
const buffer = await Packer.toBuffer(doc);
|
|
202
|
+
writeFileSync(filePath, buffer);
|
|
203
|
+
return {
|
|
204
|
+
content: [{ type: "text", text: `DOCX created: ${filePath} (${params.content.length} blocks, ${buffer.byteLength} bytes)` }],
|
|
205
|
+
details: { path: filePath, blocks: params.content.length, bytes: buffer.byteLength },
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
catch (err) {
|
|
209
|
+
return {
|
|
210
|
+
content: [{ type: "text", text: `DOCX create error: ${err.message}` }],
|
|
211
|
+
details: { error: err.message },
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
},
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
export const ALL_DOCX_TOOL_NAMES = ["docx_read", "docx_create"];
|
|
218
|
+
/**
|
|
219
|
+
* Create Word/DOCX tools.
|
|
220
|
+
*
|
|
221
|
+
* @param cwd - Working directory
|
|
222
|
+
* @param allowedPaths - Sandbox paths
|
|
223
|
+
* @param allowedTools - Optional filter
|
|
224
|
+
*/
|
|
225
|
+
export function createDocxTools(cwd, allowedPaths, allowedTools) {
|
|
226
|
+
const sandbox = resolveAllowedPaths(cwd, allowedPaths);
|
|
227
|
+
const factories = {
|
|
228
|
+
docx_read: () => createDocxReadTool(cwd, sandbox),
|
|
229
|
+
docx_create: () => createDocxCreateTool(cwd, sandbox),
|
|
230
|
+
};
|
|
231
|
+
const names = allowedTools
|
|
232
|
+
? ALL_DOCX_TOOL_NAMES.filter(n => allowedTools.some(a => a.toLowerCase() === n))
|
|
233
|
+
: ALL_DOCX_TOOL_NAMES;
|
|
234
|
+
return names.map(n => factories[n]());
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=docx-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docx-tools.js","sourceRoot":"","sources":["../src/docx-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Email tools for sending and reading messages via SMTP/IMAP.
|
|
3
|
+
*
|
|
4
|
+
* Provides tools for agents to:
|
|
5
|
+
* - Send emails with HTML or plain text (SMTP)
|
|
6
|
+
* - Save draft emails to IMAP Drafts folder
|
|
7
|
+
* - Add attachments from local files
|
|
8
|
+
* - Send to multiple recipients (to, cc, bcc)
|
|
9
|
+
* - List, read, and search emails (IMAP)
|
|
10
|
+
*
|
|
11
|
+
* Credential resolution order:
|
|
12
|
+
* 1. Tool parameters (explicit overrides)
|
|
13
|
+
* 2. Agent vault (per-agent credentials from polpo.json)
|
|
14
|
+
* 3. Environment variables (global fallback)
|
|
15
|
+
*
|
|
16
|
+
* SMTP env vars: SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS, SMTP_FROM
|
|
17
|
+
* IMAP env vars: IMAP_HOST, IMAP_PORT, IMAP_USER, IMAP_PASS
|
|
18
|
+
*/
|
|
19
|
+
import type { AgentTool } from "@mariozechner/pi-agent-core";
|
|
20
|
+
import type { ResolvedVault } from "./types.js";
|
|
21
|
+
export type EmailToolName = "email_send" | "email_draft" | "email_verify" | "email_list" | "email_read" | "email_search" | "email_count" | "email_download_attachment";
|
|
22
|
+
export declare const ALL_EMAIL_TOOL_NAMES: EmailToolName[];
|
|
23
|
+
/**
|
|
24
|
+
* Create email tools.
|
|
25
|
+
*
|
|
26
|
+
* @param cwd - Working directory (for resolving attachment paths)
|
|
27
|
+
* @param allowedPaths - Sandbox paths
|
|
28
|
+
* @param allowedTools - Optional filter
|
|
29
|
+
* @param vault - Resolved vault credentials (per-agent SMTP/IMAP)
|
|
30
|
+
* @param emailAllowedDomains - Allowed recipient email domains (omit for unrestricted)
|
|
31
|
+
* @param outputDir - Per-task output directory for downloaded attachments
|
|
32
|
+
*/
|
|
33
|
+
export declare function createEmailTools(cwd: string, allowedPaths?: string[], allowedTools?: string[], vault?: ResolvedVault, emailAllowedDomains?: string[], outputDir?: string): AgentTool<any>[];
|
|
34
|
+
//# sourceMappingURL=email-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email-tools.d.ts","sourceRoot":"","sources":["../src/email-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAoyBhD,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,aAAa,GAAG,cAAc,GAAG,YAAY,GAAG,YAAY,GAAG,cAAc,GAAG,aAAa,GAAG,2BAA2B,CAAC;AAEvK,eAAO,MAAM,oBAAoB,EAAE,aAAa,EAA0I,CAAC;AAE3L;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,mBAAmB,CAAC,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAmB3L"}
|