@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.
Files changed (89) hide show
  1. package/dist/adapters/node-filesystem.d.ts +12 -0
  2. package/dist/adapters/node-filesystem.d.ts.map +1 -0
  3. package/dist/adapters/node-filesystem.js +46 -0
  4. package/dist/adapters/node-filesystem.js.map +1 -0
  5. package/dist/adapters/node-shell.d.ts +5 -0
  6. package/dist/adapters/node-shell.d.ts.map +1 -0
  7. package/dist/adapters/node-shell.js +34 -0
  8. package/dist/adapters/node-shell.js.map +1 -0
  9. package/dist/audio-tools.d.ts +42 -0
  10. package/dist/audio-tools.d.ts.map +1 -0
  11. package/dist/audio-tools.js +552 -0
  12. package/dist/audio-tools.js.map +1 -0
  13. package/dist/browser-tools.d.ts +36 -0
  14. package/dist/browser-tools.d.ts.map +1 -0
  15. package/dist/browser-tools.js +525 -0
  16. package/dist/browser-tools.js.map +1 -0
  17. package/dist/coding-tools.d.ts +99 -0
  18. package/dist/coding-tools.d.ts.map +1 -0
  19. package/dist/coding-tools.js +434 -0
  20. package/dist/coding-tools.js.map +1 -0
  21. package/dist/docx-tools.d.ts +22 -0
  22. package/dist/docx-tools.d.ts.map +1 -0
  23. package/dist/docx-tools.js +236 -0
  24. package/dist/docx-tools.js.map +1 -0
  25. package/dist/email-tools.d.ts +34 -0
  26. package/dist/email-tools.d.ts.map +1 -0
  27. package/dist/email-tools.js +787 -0
  28. package/dist/email-tools.js.map +1 -0
  29. package/dist/excel-tools.d.ts +25 -0
  30. package/dist/excel-tools.d.ts.map +1 -0
  31. package/dist/excel-tools.js +409 -0
  32. package/dist/excel-tools.js.map +1 -0
  33. package/dist/http-tools.d.ts +23 -0
  34. package/dist/http-tools.d.ts.map +1 -0
  35. package/dist/http-tools.js +214 -0
  36. package/dist/http-tools.js.map +1 -0
  37. package/dist/image-tools.d.ts +40 -0
  38. package/dist/image-tools.d.ts.map +1 -0
  39. package/dist/image-tools.js +522 -0
  40. package/dist/image-tools.js.map +1 -0
  41. package/dist/index.d.ts +33 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +37 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/memory-tools.d.ts +19 -0
  46. package/dist/memory-tools.d.ts.map +1 -0
  47. package/dist/memory-tools.js +104 -0
  48. package/dist/memory-tools.js.map +1 -0
  49. package/dist/outcome-tools.d.ts +25 -0
  50. package/dist/outcome-tools.d.ts.map +1 -0
  51. package/dist/outcome-tools.js +191 -0
  52. package/dist/outcome-tools.js.map +1 -0
  53. package/dist/path-sandbox.d.ts +28 -0
  54. package/dist/path-sandbox.d.ts.map +1 -0
  55. package/dist/path-sandbox.js +58 -0
  56. package/dist/path-sandbox.js.map +1 -0
  57. package/dist/pdf-tools.d.ts +25 -0
  58. package/dist/pdf-tools.d.ts.map +1 -0
  59. package/dist/pdf-tools.js +363 -0
  60. package/dist/pdf-tools.js.map +1 -0
  61. package/dist/phone-tools.d.ts +27 -0
  62. package/dist/phone-tools.d.ts.map +1 -0
  63. package/dist/phone-tools.js +577 -0
  64. package/dist/phone-tools.js.map +1 -0
  65. package/dist/safe-env.d.ts +26 -0
  66. package/dist/safe-env.d.ts.map +1 -0
  67. package/dist/safe-env.js +76 -0
  68. package/dist/safe-env.js.map +1 -0
  69. package/dist/search-tools.d.ts +22 -0
  70. package/dist/search-tools.d.ts.map +1 -0
  71. package/dist/search-tools.js +205 -0
  72. package/dist/search-tools.js.map +1 -0
  73. package/dist/ssrf-guard.d.ts +17 -0
  74. package/dist/ssrf-guard.d.ts.map +1 -0
  75. package/dist/ssrf-guard.js +95 -0
  76. package/dist/ssrf-guard.js.map +1 -0
  77. package/dist/types.d.ts +21 -0
  78. package/dist/types.d.ts.map +1 -0
  79. package/dist/types.js +5 -0
  80. package/dist/types.js.map +1 -0
  81. package/dist/vault-tools.d.ts +26 -0
  82. package/dist/vault-tools.d.ts.map +1 -0
  83. package/dist/vault-tools.js +86 -0
  84. package/dist/vault-tools.js.map +1 -0
  85. package/dist/whatsapp-tools.d.ts +18 -0
  86. package/dist/whatsapp-tools.d.ts.map +1 -0
  87. package/dist/whatsapp-tools.js +206 -0
  88. package/dist/whatsapp-tools.js.map +1 -0
  89. 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"}