@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,522 @@
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 { readFileSync, writeFileSync, mkdirSync } from "node:fs";
26
+ import { resolve, dirname, extname } from "node:path";
27
+ import { Type } from "@sinclair/typebox";
28
+ import { resolveAllowedPaths, assertPathAllowed } from "./path-sandbox.js";
29
+ // ─── Constants ───
30
+ const MAX_IMAGE_SIZE = 20 * 1024 * 1024; // 20 MB
31
+ const DEFAULT_TIMEOUT = 120_000; // 2 min for image generation
32
+ const VIDEO_TIMEOUT = 300_000; // 5 min for video generation
33
+ const FAL_QUEUE_POLL_INTERVAL = 3_000; // 3 sec polling for async queue
34
+ // ─── Helpers ───
35
+ function requireEnv(key) {
36
+ const val = process.env[key];
37
+ if (!val)
38
+ throw new Error(`Missing environment variable: ${key}. Set it before using this tool.`);
39
+ return val;
40
+ }
41
+ /** Resolve fal.ai API key: vault (service "fal-ai", key "key") > FAL_KEY env var. */
42
+ function resolveFalKey(vault) {
43
+ const fromVault = vault?.getKey("fal-ai", "key");
44
+ if (fromVault)
45
+ return fromVault;
46
+ return requireEnv("FAL_KEY");
47
+ }
48
+ function imageMime(ext) {
49
+ const map = {
50
+ ".png": "image/png",
51
+ ".jpg": "image/jpeg",
52
+ ".jpeg": "image/jpeg",
53
+ ".gif": "image/gif",
54
+ ".webp": "image/webp",
55
+ ".svg": "image/svg+xml",
56
+ ".bmp": "image/bmp",
57
+ ".tiff": "image/tiff",
58
+ };
59
+ return map[ext.toLowerCase()] ?? "image/png";
60
+ }
61
+ /**
62
+ * Submit a request to fal.ai queue and poll until completion.
63
+ * Uses the queue endpoint (POST https://queue.fal.run/<model>) for reliability,
64
+ * then polls the status endpoint until the result is ready.
65
+ */
66
+ async function falQueueRequest(modelId, input, apiKey, timeout, signal) {
67
+ const controller = new AbortController();
68
+ const timer = setTimeout(() => controller.abort(), timeout);
69
+ if (signal)
70
+ signal.addEventListener("abort", () => controller.abort(), { once: true });
71
+ try {
72
+ // Submit to queue
73
+ const submitResp = await fetch(`https://queue.fal.run/${modelId}`, {
74
+ method: "POST",
75
+ headers: {
76
+ Authorization: `Key ${apiKey}`,
77
+ "Content-Type": "application/json",
78
+ },
79
+ body: JSON.stringify(input),
80
+ signal: controller.signal,
81
+ });
82
+ if (!submitResp.ok) {
83
+ const errText = await submitResp.text();
84
+ throw new Error(`fal.ai queue submit ${submitResp.status}: ${errText}`);
85
+ }
86
+ const queueData = await submitResp.json();
87
+ const requestId = queueData.request_id;
88
+ const statusUrl = queueData.status_url ?? `https://queue.fal.run/${modelId}/requests/${requestId}/status`;
89
+ const responseUrl = queueData.response_url ?? `https://queue.fal.run/${modelId}/requests/${requestId}`;
90
+ // Poll for completion
91
+ while (true) {
92
+ await new Promise(r => setTimeout(r, FAL_QUEUE_POLL_INTERVAL));
93
+ const statusResp = await fetch(statusUrl, {
94
+ headers: { Authorization: `Key ${apiKey}` },
95
+ signal: controller.signal,
96
+ });
97
+ if (!statusResp.ok) {
98
+ throw new Error(`fal.ai status poll ${statusResp.status}`);
99
+ }
100
+ const status = await statusResp.json();
101
+ if (status.status === "COMPLETED") {
102
+ break;
103
+ }
104
+ if (status.status === "FAILED") {
105
+ throw new Error(`fal.ai request failed: ${status.error ?? "unknown error"}`);
106
+ }
107
+ // IN_QUEUE or IN_PROGRESS — keep polling
108
+ }
109
+ // Fetch result
110
+ const resultResp = await fetch(responseUrl, {
111
+ headers: { Authorization: `Key ${apiKey}` },
112
+ signal: controller.signal,
113
+ });
114
+ if (!resultResp.ok) {
115
+ const errText = await resultResp.text();
116
+ throw new Error(`fal.ai result fetch ${resultResp.status}: ${errText}`);
117
+ }
118
+ return await resultResp.json();
119
+ }
120
+ finally {
121
+ clearTimeout(timer);
122
+ }
123
+ }
124
+ // ─── Tool: image_generate ───
125
+ const ImageGenerateSchema = Type.Object({
126
+ prompt: Type.String({ description: "Text prompt describing the image to generate" }),
127
+ path: Type.String({ description: "Output file path (e.g. 'output.png'). Format inferred from extension." }),
128
+ model: Type.Optional(Type.String({
129
+ description: "fal.ai model ID. Default: 'fal-ai/flux/dev'. " +
130
+ "Other options: 'fal-ai/flux-pro/v1.1' (higher quality), 'fal-ai/flux/schnell' (faster).",
131
+ })),
132
+ size: Type.Optional(Type.String({
133
+ description: "Image size as 'WIDTHxHEIGHT' (e.g. '1024x1024', '1024x768', '768x1024'). Default: '1024x1024'.",
134
+ })),
135
+ num_inference_steps: Type.Optional(Type.Number({
136
+ description: "Number of inference steps (higher = better quality, slower). Default varies by model (typically 28).",
137
+ })),
138
+ guidance_scale: Type.Optional(Type.Number({
139
+ description: "Guidance scale / CFG — how closely to follow the prompt. Default: 3.5.",
140
+ })),
141
+ seed: Type.Optional(Type.Number({
142
+ description: "Random seed for reproducible results. Omit for random.",
143
+ })),
144
+ });
145
+ function createGenerateTool(cwd, sandbox, vault) {
146
+ return {
147
+ name: "image_generate",
148
+ label: "Generate Image",
149
+ description: "Generate an image from a text prompt using fal.ai (FLUX models). " +
150
+ "Output format inferred from file extension (png, jpg, webp). " +
151
+ "Models: fal-ai/flux/dev (default, balanced), fal-ai/flux-pro/v1.1 (best quality), " +
152
+ "fal-ai/flux/schnell (fastest). Credentials resolved from: agent vault > FAL_KEY env var.",
153
+ parameters: ImageGenerateSchema,
154
+ async execute(_id, params, signal) {
155
+ const filePath = resolve(cwd, params.path);
156
+ assertPathAllowed(filePath, sandbox, "image_generate");
157
+ try {
158
+ return await generateFal(filePath, params, vault, signal);
159
+ }
160
+ catch (err) {
161
+ return {
162
+ content: [{ type: "text", text: `Image generation error: ${err.message}` }],
163
+ details: { error: err.message },
164
+ };
165
+ }
166
+ },
167
+ };
168
+ }
169
+ async function generateFal(filePath, params, vault, signal) {
170
+ const apiKey = resolveFalKey(vault);
171
+ const model = params.model ?? "fal-ai/flux/dev";
172
+ // Parse size into width/height
173
+ let width = 1024, height = 1024;
174
+ if (params.size) {
175
+ const parts = params.size.split("x").map(Number);
176
+ if (parts.length === 2 && parts[0] > 0 && parts[1] > 0) {
177
+ width = parts[0];
178
+ height = parts[1];
179
+ }
180
+ }
181
+ const input = {
182
+ prompt: params.prompt,
183
+ image_size: { width, height },
184
+ num_images: 1,
185
+ };
186
+ if (params.num_inference_steps != null)
187
+ input.num_inference_steps = params.num_inference_steps;
188
+ if (params.guidance_scale != null)
189
+ input.guidance_scale = params.guidance_scale;
190
+ if (params.seed != null)
191
+ input.seed = params.seed;
192
+ const result = await falQueueRequest(model, input, apiKey, DEFAULT_TIMEOUT, signal);
193
+ // fal.ai FLUX response: { images: [{ url, width, height, content_type }], ... }
194
+ const images = result.images;
195
+ if (!images || images.length === 0) {
196
+ throw new Error("No images in fal.ai response");
197
+ }
198
+ const imageUrl = images[0].url;
199
+ const imgResp = await fetch(imageUrl);
200
+ if (!imgResp.ok)
201
+ throw new Error(`Failed to download generated image: ${imgResp.status}`);
202
+ const buffer = Buffer.from(await imgResp.arrayBuffer());
203
+ mkdirSync(dirname(filePath), { recursive: true });
204
+ writeFileSync(filePath, buffer);
205
+ const info = [
206
+ `Image saved: ${filePath}`,
207
+ `Size: ${(buffer.byteLength / 1024).toFixed(1)} KB`,
208
+ `Model: ${model}`,
209
+ `Dimensions: ${images[0].width}x${images[0].height}`,
210
+ ];
211
+ return {
212
+ content: [{ type: "text", text: info.join("\n") }],
213
+ details: {
214
+ provider: "fal",
215
+ model,
216
+ size: `${images[0].width}x${images[0].height}`,
217
+ path: filePath,
218
+ bytes: buffer.byteLength,
219
+ },
220
+ };
221
+ }
222
+ // ─── Tool: video_generate ───
223
+ const VideoGenerateSchema = Type.Object({
224
+ prompt: Type.String({ description: "Text prompt describing the video to generate" }),
225
+ path: Type.String({ description: "Output file path (e.g. 'output.mp4')." }),
226
+ model: Type.Optional(Type.String({
227
+ description: "fal.ai video model ID. Default: 'fal-ai/wan/v2.2-1.3b/text-to-video'. " +
228
+ "Other options: 'fal-ai/wan/v2.2-a14b/text-to-video' (higher quality, slower).",
229
+ })),
230
+ num_frames: Type.Optional(Type.Number({
231
+ description: "Number of frames to generate. Default: 81 (~5 seconds at 16fps).",
232
+ })),
233
+ resolution: Type.Optional(Type.String({
234
+ description: "Video resolution as 'WIDTHxHEIGHT' (e.g. '854x480', '1280x720'). Default: '854x480' (480p).",
235
+ })),
236
+ num_inference_steps: Type.Optional(Type.Number({
237
+ description: "Number of inference steps (higher = better quality, slower). Default: 30.",
238
+ })),
239
+ guidance_scale: Type.Optional(Type.Number({
240
+ description: "Guidance scale — how closely to follow the prompt. Default: 5.0.",
241
+ })),
242
+ seed: Type.Optional(Type.Number({
243
+ description: "Random seed for reproducible results. Omit for random.",
244
+ })),
245
+ });
246
+ function createVideoGenerateTool(cwd, sandbox, vault) {
247
+ return {
248
+ name: "video_generate",
249
+ label: "Generate Video",
250
+ description: "Generate a video from a text prompt using fal.ai (Wan 2.2 models). " +
251
+ "Output saved as MP4. Models: fal-ai/wan/v2.2-1.3b/text-to-video (default, faster), " +
252
+ "fal-ai/wan/v2.2-a14b/text-to-video (best quality). " +
253
+ "Video generation takes 1-5 minutes depending on model and resolution. " +
254
+ "Credentials resolved from: agent vault > FAL_KEY env var.",
255
+ parameters: VideoGenerateSchema,
256
+ async execute(_id, params, signal) {
257
+ const filePath = resolve(cwd, params.path);
258
+ assertPathAllowed(filePath, sandbox, "video_generate");
259
+ try {
260
+ return await generateVideo(filePath, params, vault, signal);
261
+ }
262
+ catch (err) {
263
+ return {
264
+ content: [{ type: "text", text: `Video generation error: ${err.message}` }],
265
+ details: { error: err.message },
266
+ };
267
+ }
268
+ },
269
+ };
270
+ }
271
+ async function generateVideo(filePath, params, vault, signal) {
272
+ const apiKey = resolveFalKey(vault);
273
+ const model = params.model ?? "fal-ai/wan/v2.2-1.3b/text-to-video";
274
+ const input = {
275
+ prompt: params.prompt,
276
+ };
277
+ if (params.num_frames != null)
278
+ input.num_frames = params.num_frames;
279
+ if (params.num_inference_steps != null)
280
+ input.num_inference_steps = params.num_inference_steps;
281
+ if (params.guidance_scale != null)
282
+ input.guidance_scale = params.guidance_scale;
283
+ if (params.seed != null)
284
+ input.seed = params.seed;
285
+ // Parse resolution
286
+ if (params.resolution) {
287
+ const parts = params.resolution.split("x").map(Number);
288
+ if (parts.length === 2 && parts[0] > 0 && parts[1] > 0) {
289
+ input.resolution = { width: parts[0], height: parts[1] };
290
+ }
291
+ }
292
+ const result = await falQueueRequest(model, input, apiKey, VIDEO_TIMEOUT, signal);
293
+ // fal.ai video response: { video: { url, content_type, file_name, file_size } }
294
+ const video = result.video;
295
+ if (!video?.url) {
296
+ throw new Error("No video in fal.ai response");
297
+ }
298
+ const videoResp = await fetch(video.url);
299
+ if (!videoResp.ok)
300
+ throw new Error(`Failed to download generated video: ${videoResp.status}`);
301
+ const buffer = Buffer.from(await videoResp.arrayBuffer());
302
+ mkdirSync(dirname(filePath), { recursive: true });
303
+ writeFileSync(filePath, buffer);
304
+ const sizeMB = (buffer.byteLength / 1024 / 1024).toFixed(2);
305
+ const info = [
306
+ `Video saved: ${filePath}`,
307
+ `Size: ${sizeMB} MB`,
308
+ `Model: ${model}`,
309
+ ];
310
+ return {
311
+ content: [{ type: "text", text: info.join("\n") }],
312
+ details: {
313
+ provider: "fal",
314
+ model,
315
+ path: filePath,
316
+ bytes: buffer.byteLength,
317
+ },
318
+ };
319
+ }
320
+ // ─── Tool: image_analyze ───
321
+ const ImageAnalyzeSchema = Type.Object({
322
+ path: Type.String({ description: "Path to the image file to analyze" }),
323
+ prompt: Type.Optional(Type.String({ description: "Question or instruction for the vision model (default: 'Describe this image in detail')" })),
324
+ provider: Type.Optional(Type.Union([
325
+ Type.Literal("openai"),
326
+ Type.Literal("anthropic"),
327
+ ], { description: "Vision provider (default: openai)" })),
328
+ model: Type.Optional(Type.String({ description: "Model name. OpenAI: 'gpt-4.1-mini' (default). Anthropic: 'claude-sonnet-4-20250514' (default)." })),
329
+ max_tokens: Type.Optional(Type.Number({ description: "Max tokens in response (default: 1024)" })),
330
+ });
331
+ function createAnalyzeTool(cwd, sandbox, vault) {
332
+ return {
333
+ name: "image_analyze",
334
+ label: "Analyze Image",
335
+ description: "Analyze an image using AI vision models. Can describe contents, extract text (OCR), " +
336
+ "answer questions about the image, identify objects, read charts, etc. " +
337
+ "Providers: openai (GPT-4.1-mini, default), anthropic (Claude). " +
338
+ "Credentials resolved from: agent vault > OPENAI_API_KEY or ANTHROPIC_API_KEY env var.",
339
+ parameters: ImageAnalyzeSchema,
340
+ async execute(_id, params, signal) {
341
+ const filePath = resolve(cwd, params.path);
342
+ assertPathAllowed(filePath, sandbox, "image_analyze");
343
+ let fileBuffer;
344
+ try {
345
+ fileBuffer = readFileSync(filePath);
346
+ }
347
+ catch (err) {
348
+ return {
349
+ content: [{ type: "text", text: `Error reading image file: ${err.message}` }],
350
+ details: { error: "file_read_error" },
351
+ };
352
+ }
353
+ if (fileBuffer.byteLength > MAX_IMAGE_SIZE) {
354
+ return {
355
+ content: [{ type: "text", text: `Image file too large: ${(fileBuffer.byteLength / 1024 / 1024).toFixed(1)} MB (max ${MAX_IMAGE_SIZE / 1024 / 1024} MB)` }],
356
+ details: { error: "file_too_large", size: fileBuffer.byteLength },
357
+ };
358
+ }
359
+ const provider = params.provider ?? "openai";
360
+ try {
361
+ if (provider === "openai") {
362
+ return await analyzeOpenAI(filePath, fileBuffer, params, vault, signal);
363
+ }
364
+ else {
365
+ return await analyzeAnthropic(filePath, fileBuffer, params, vault, signal);
366
+ }
367
+ }
368
+ catch (err) {
369
+ return {
370
+ content: [{ type: "text", text: `Image analysis error (${provider}): ${err.message}` }],
371
+ details: { provider, error: err.message },
372
+ };
373
+ }
374
+ },
375
+ };
376
+ }
377
+ async function analyzeOpenAI(filePath, fileBuffer, params, vault, signal) {
378
+ const apiKey = vault?.getKey("openai", "key") ?? requireEnv("OPENAI_API_KEY");
379
+ const model = params.model ?? "gpt-4.1-mini";
380
+ const prompt = params.prompt ?? "Describe this image in detail.";
381
+ const maxTokens = params.max_tokens ?? 1024;
382
+ const ext = extname(filePath).toLowerCase();
383
+ const mime = imageMime(ext);
384
+ const base64 = fileBuffer.toString("base64");
385
+ const dataUrl = `data:${mime};base64,${base64}`;
386
+ const controller = new AbortController();
387
+ const timer = setTimeout(() => controller.abort(), DEFAULT_TIMEOUT);
388
+ if (signal)
389
+ signal.addEventListener("abort", () => controller.abort(), { once: true });
390
+ const response = await fetch("https://api.openai.com/v1/chat/completions", {
391
+ method: "POST",
392
+ headers: {
393
+ Authorization: `Bearer ${apiKey}`,
394
+ "Content-Type": "application/json",
395
+ },
396
+ body: JSON.stringify({
397
+ model,
398
+ max_tokens: maxTokens,
399
+ messages: [
400
+ {
401
+ role: "user",
402
+ content: [
403
+ { type: "text", text: prompt },
404
+ { type: "image_url", image_url: { url: dataUrl, detail: "auto" } },
405
+ ],
406
+ },
407
+ ],
408
+ }),
409
+ signal: controller.signal,
410
+ });
411
+ clearTimeout(timer);
412
+ if (!response.ok) {
413
+ const errText = await response.text();
414
+ throw new Error(`OpenAI Vision API ${response.status}: ${errText}`);
415
+ }
416
+ const data = await response.json();
417
+ const analysis = data.choices[0]?.message?.content ?? "";
418
+ const usage = data.usage;
419
+ return {
420
+ content: [{ type: "text", text: analysis }],
421
+ details: {
422
+ provider: "openai",
423
+ model,
424
+ path: filePath,
425
+ imageSize: fileBuffer.byteLength,
426
+ tokens: usage?.total_tokens,
427
+ promptTokens: usage?.prompt_tokens,
428
+ completionTokens: usage?.completion_tokens,
429
+ },
430
+ };
431
+ }
432
+ async function analyzeAnthropic(filePath, fileBuffer, params, vault, signal) {
433
+ const apiKey = vault?.getKey("anthropic", "key") ?? requireEnv("ANTHROPIC_API_KEY");
434
+ const model = params.model ?? "claude-sonnet-4-20250514";
435
+ const prompt = params.prompt ?? "Describe this image in detail.";
436
+ const maxTokens = params.max_tokens ?? 1024;
437
+ const ext = extname(filePath).toLowerCase();
438
+ const mime = imageMime(ext);
439
+ const base64 = fileBuffer.toString("base64");
440
+ // Anthropic only supports specific media types
441
+ const supportedTypes = ["image/jpeg", "image/png", "image/gif", "image/webp"];
442
+ const mediaType = supportedTypes.includes(mime) ? mime : "image/png";
443
+ const controller = new AbortController();
444
+ const timer = setTimeout(() => controller.abort(), DEFAULT_TIMEOUT);
445
+ if (signal)
446
+ signal.addEventListener("abort", () => controller.abort(), { once: true });
447
+ const response = await fetch("https://api.anthropic.com/v1/messages", {
448
+ method: "POST",
449
+ headers: {
450
+ "x-api-key": apiKey,
451
+ "anthropic-version": "2023-06-01",
452
+ "Content-Type": "application/json",
453
+ },
454
+ body: JSON.stringify({
455
+ model,
456
+ max_tokens: maxTokens,
457
+ messages: [
458
+ {
459
+ role: "user",
460
+ content: [
461
+ {
462
+ type: "image",
463
+ source: {
464
+ type: "base64",
465
+ media_type: mediaType,
466
+ data: base64,
467
+ },
468
+ },
469
+ { type: "text", text: prompt },
470
+ ],
471
+ },
472
+ ],
473
+ }),
474
+ signal: controller.signal,
475
+ });
476
+ clearTimeout(timer);
477
+ if (!response.ok) {
478
+ const errText = await response.text();
479
+ throw new Error(`Anthropic Vision API ${response.status}: ${errText}`);
480
+ }
481
+ const data = await response.json();
482
+ const analysis = data.content
483
+ .filter(b => b.type === "text" && b.text)
484
+ .map(b => b.text)
485
+ .join("\n");
486
+ const usage = data.usage;
487
+ return {
488
+ content: [{ type: "text", text: analysis }],
489
+ details: {
490
+ provider: "anthropic",
491
+ model,
492
+ path: filePath,
493
+ imageSize: fileBuffer.byteLength,
494
+ inputTokens: usage?.input_tokens,
495
+ outputTokens: usage?.output_tokens,
496
+ },
497
+ };
498
+ }
499
+ export const ALL_IMAGE_TOOL_NAMES = ["image_generate", "image_analyze", "video_generate"];
500
+ /**
501
+ * Create image & video tools for generation, vision analysis, and video creation.
502
+ *
503
+ * @param cwd - Working directory for resolving file paths
504
+ * @param allowedPaths - Sandbox paths for file validation
505
+ * @param allowedTools - Optional filter — only include tools whose names appear here.
506
+ * Supports wildcards expanded upstream (e.g. "image_*", "video_*").
507
+ * @param vault - Resolved vault for credential resolution (fal-ai, openai, anthropic).
508
+ * Credentials are resolved as: vault > environment variable.
509
+ */
510
+ export function createImageTools(cwd, allowedPaths, allowedTools, vault) {
511
+ const sandbox = resolveAllowedPaths(cwd, allowedPaths);
512
+ const factories = {
513
+ image_generate: () => createGenerateTool(cwd, sandbox, vault),
514
+ image_analyze: () => createAnalyzeTool(cwd, sandbox, vault),
515
+ video_generate: () => createVideoGenerateTool(cwd, sandbox, vault),
516
+ };
517
+ const names = allowedTools
518
+ ? ALL_IMAGE_TOOL_NAMES.filter(n => allowedTools.some(a => a.toLowerCase() === n))
519
+ : ALL_IMAGE_TOOL_NAMES;
520
+ return names.map(n => factories[n]());
521
+ }
522
+ //# sourceMappingURL=image-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-tools.js","sourceRoot":"","sources":["../src/image-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAK3E,oBAAoB;AAEpB,MAAM,cAAc,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,QAAQ;AACjD,MAAM,eAAe,GAAG,OAAO,CAAC,CAAC,6BAA6B;AAC9D,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,6BAA6B;AAC5D,MAAM,uBAAuB,GAAG,KAAK,CAAC,CAAC,gCAAgC;AAEvE,kBAAkB;AAElB,SAAS,UAAU,CAAC,GAAW;IAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,GAAG,kCAAkC,CAAC,CAAC;IAClG,OAAO,GAAG,CAAC;AACb,CAAC;AAED,qFAAqF;AACrF,SAAS,aAAa,CAAC,KAAqB;IAC1C,MAAM,SAAS,GAAG,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACjD,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAChC,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,MAAM,GAAG,GAA2B;QAClC,MAAM,EAAE,WAAW;QACnB,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,YAAY;QACrB,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,YAAY;QACrB,MAAM,EAAE,eAAe;QACvB,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,YAAY;KACtB,CAAC;IACF,OAAO,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,WAAW,CAAC;AAC/C,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,eAAe,CAC5B,OAAe,EACf,KAA8B,EAC9B,MAAc,EACd,OAAe,EACf,MAAoB;IAEpB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5D,IAAI,MAAM;QAAE,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAEvF,IAAI,CAAC;QACH,kBAAkB;QAClB,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,yBAAyB,OAAO,EAAE,EAAE;YACjE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,OAAO,MAAM,EAAE;gBAC9B,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YAC3B,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,uBAAuB,UAAU,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,IAAI,EAItC,CAAC;QAEF,MAAM,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC;QACvC,MAAM,SAAS,GAAG,SAAS,CAAC,UAAU,IAAI,yBAAyB,OAAO,aAAa,SAAS,SAAS,CAAC;QAC1G,MAAM,WAAW,GAAG,SAAS,CAAC,YAAY,IAAI,yBAAyB,OAAO,aAAa,SAAS,EAAE,CAAC;QAEvG,sBAAsB;QACtB,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAC;YAE/D,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE;gBACxC,OAAO,EAAE,EAAE,aAAa,EAAE,OAAO,MAAM,EAAE,EAAE;gBAC3C,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YAEH,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,sBAAsB,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7D,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,EAGnC,CAAC;YAEF,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,MAAM;YACR,CAAC;YACD,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CAAC,0BAA0B,MAAM,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;YAC/E,CAAC;YACD,yCAAyC;QAC3C,CAAC;QAED,eAAe;QACf,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE;YAC1C,OAAO,EAAE,EAAE,aAAa,EAAE,OAAO,MAAM,EAAE,EAAE;YAC3C,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,uBAAuB,UAAU,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,OAAO,MAAM,UAAU,CAAC,IAAI,EAA6B,CAAC;IAC5D,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED,+BAA+B;AAE/B,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC;IACtC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,8CAA8C,EAAE,CAAC;IACpF,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,uEAAuE,EAAE,CAAC;IAC3G,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QAC/B,WAAW,EAAE,+CAA+C;YAC1D,yFAAyF;KAC5F,CAAC,CAAC;IACH,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QAC9B,WAAW,EAAE,gGAAgG;KAC9G,CAAC,CAAC;IACH,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QAC7C,WAAW,EAAE,sGAAsG;KACpH,CAAC,CAAC;IACH,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QACxC,WAAW,EAAE,wEAAwE;KACtF,CAAC,CAAC;IACH,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QAC9B,WAAW,EAAE,wDAAwD;KACtE,CAAC,CAAC;CACJ,CAAC,CAAC;AAEH,SAAS,kBAAkB,CAAC,GAAW,EAAE,OAAiB,EAAE,KAAqB;IAC/E,OAAO;QACL,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,mEAAmE;YAC9E,+DAA+D;YAC/D,oFAAoF;YACpF,0FAA0F;QAC5F,UAAU,EAAE,mBAAmB;QAC/B,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM;YAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAC3C,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC;YAEvD,IAAI,CAAC;gBACH,OAAO,MAAM,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YAC5D,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,2BAA2B,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;oBAC3E,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE;iBAChC,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,WAAW,CACxB,QAAgB,EAChB,MAOC,EACD,KAAqB,EACrB,MAAoB;IAEpB,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,iBAAiB,CAAC;IAEhD,+BAA+B;IAC/B,IAAI,KAAK,GAAG,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;YACvD,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACjB,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAA4B;QACrC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;QAC7B,UAAU,EAAE,CAAC;KACd,CAAC;IACF,IAAI,MAAM,CAAC,mBAAmB,IAAI,IAAI;QAAE,KAAK,CAAC,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;IAC/F,IAAI,MAAM,CAAC,cAAc,IAAI,IAAI;QAAE,KAAK,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;IAChF,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI;QAAE,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IAElD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;IAEpF,gFAAgF;IAChF,MAAM,MAAM,GAAG,MAAM,CAAC,MAA6F,CAAC;IACpH,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC/B,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1F,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAExD,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAEhC,MAAM,IAAI,GAAG;QACX,gBAAgB,QAAQ,EAAE;QAC1B,SAAS,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;QACnD,UAAU,KAAK,EAAE;QACjB,eAAe,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;KACrD,CAAC;IAEF,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClD,OAAO,EAAE;YACP,QAAQ,EAAE,KAAK;YACf,KAAK;YACL,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;YAC9C,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,MAAM,CAAC,UAAU;SACzB;KACF,CAAC;AACJ,CAAC;AAED,+BAA+B;AAE/B,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC;IACtC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,8CAA8C,EAAE,CAAC;IACpF,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,uCAAuC,EAAE,CAAC;IAC3E,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QAC/B,WAAW,EAAE,wEAAwE;YACnF,+EAA+E;KAClF,CAAC,CAAC;IACH,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QACpC,WAAW,EAAE,kEAAkE;KAChF,CAAC,CAAC;IACH,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QACpC,WAAW,EAAE,6FAA6F;KAC3G,CAAC,CAAC;IACH,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QAC7C,WAAW,EAAE,2EAA2E;KACzF,CAAC,CAAC;IACH,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QACxC,WAAW,EAAE,kEAAkE;KAChF,CAAC,CAAC;IACH,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QAC9B,WAAW,EAAE,wDAAwD;KACtE,CAAC,CAAC;CACJ,CAAC,CAAC;AAEH,SAAS,uBAAuB,CAAC,GAAW,EAAE,OAAiB,EAAE,KAAqB;IACpF,OAAO;QACL,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,qEAAqE;YAChF,qFAAqF;YACrF,qDAAqD;YACrD,wEAAwE;YACxE,2DAA2D;QAC7D,UAAU,EAAE,mBAAmB;QAC/B,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM;YAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAC3C,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC;YAEvD,IAAI,CAAC;gBACH,OAAO,MAAM,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YAC9D,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,2BAA2B,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;oBAC3E,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE;iBAChC,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,QAAgB,EAChB,MAQC,EACD,KAAqB,EACrB,MAAoB;IAEpB,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,oCAAoC,CAAC;IAEnE,MAAM,KAAK,GAA4B;QACrC,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC;IAEF,IAAI,MAAM,CAAC,UAAU,IAAI,IAAI;QAAE,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACpE,IAAI,MAAM,CAAC,mBAAmB,IAAI,IAAI;QAAE,KAAK,CAAC,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;IAC/F,IAAI,MAAM,CAAC,cAAc,IAAI,IAAI;QAAE,KAAK,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;IAChF,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI;QAAE,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IAElD,mBAAmB;IACnB,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;YACvD,KAAK,CAAC,UAAU,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;IAElF,gFAAgF;IAChF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAmG,CAAC;IACzH,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9F,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;IAE1D,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAEhC,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG;QACX,gBAAgB,QAAQ,EAAE;QAC1B,SAAS,MAAM,KAAK;QACpB,UAAU,KAAK,EAAE;KAClB,CAAC;IAEF,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClD,OAAO,EAAE;YACP,QAAQ,EAAE,KAAK;YACf,KAAK;YACL,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,MAAM,CAAC,UAAU;SACzB;KACF,CAAC;AACJ,CAAC;AAED,8BAA8B;AAE9B,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC;IACrC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,mCAAmC,EAAE,CAAC;IACvE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,yFAAyF,EAAE,CAAC,CAAC;IAC9I,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QACjC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;KAC1B,EAAE,EAAE,WAAW,EAAE,mCAAmC,EAAE,CAAC,CAAC;IACzD,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,gGAAgG,EAAE,CAAC,CAAC;IACpJ,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,wCAAwC,EAAE,CAAC,CAAC;CAClG,CAAC,CAAC;AAEH,SAAS,iBAAiB,CAAC,GAAW,EAAE,OAAiB,EAAE,KAAqB;IAC9E,OAAO;QACL,IAAI,EAAE,eAAe;QACrB,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,sFAAsF;YACjG,wEAAwE;YACxE,iEAAiE;YACjE,uFAAuF;QACzF,UAAU,EAAE,kBAAkB;QAC9B,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM;YAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAC3C,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;YAEtD,IAAI,UAAkB,CAAC;YACvB,IAAI,CAAC;gBACH,UAAU,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;YACtC,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,6BAA6B,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;oBAC7E,OAAO,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE;iBACtC,CAAC;YACJ,CAAC;YAED,IAAI,UAAU,CAAC,UAAU,GAAG,cAAc,EAAE,CAAC;gBAC3C,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,cAAc,GAAG,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;oBAC1J,OAAO,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU,CAAC,UAAU,EAAE;iBAClE,CAAC;YACJ,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC;YAE7C,IAAI,CAAC;gBACH,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;oBAC1B,OAAO,MAAM,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;gBAC1E,CAAC;qBAAM,CAAC;oBACN,OAAO,MAAM,gBAAgB,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;gBAC7E,CAAC;YACH,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,QAAQ,MAAM,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;oBACvF,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE;iBAC1C,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,QAAgB,EAChB,UAAkB,EAClB,MAAgE,EAChE,KAAqB,EACrB,MAAoB;IAEpB,MAAM,MAAM,GAAG,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC9E,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,cAAc,CAAC;IAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,gCAAgC,CAAC;IACjE,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC;IAE5C,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5C,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,QAAQ,IAAI,WAAW,MAAM,EAAE,CAAC;IAEhD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,eAAe,CAAC,CAAC;IACpE,IAAI,MAAM;QAAE,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAEvF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,4CAA4C,EAAE;QACzE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,MAAM,EAAE;YACjC,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,KAAK;YACL,UAAU,EAAE,SAAS;YACrB,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;wBAC9B,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;qBACnE;iBACF;aACF;SACF,CAAC;QACF,MAAM,EAAE,UAAU,CAAC,MAAM;KAC1B,CAAC,CAAC;IAEH,YAAY,CAAC,KAAK,CAAC,CAAC;IAEpB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAG/B,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;IACzD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IAEzB,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC3C,OAAO,EAAE;YACP,QAAQ,EAAE,QAAQ;YAClB,KAAK;YACL,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,UAAU,CAAC,UAAU;YAChC,MAAM,EAAE,KAAK,EAAE,YAAY;YAC3B,YAAY,EAAE,KAAK,EAAE,aAAa;YAClC,gBAAgB,EAAE,KAAK,EAAE,iBAAiB;SAC3C;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,QAAgB,EAChB,UAAkB,EAClB,MAAgE,EAChE,KAAqB,EACrB,MAAoB;IAEpB,MAAM,MAAM,GAAG,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,UAAU,CAAC,mBAAmB,CAAC,CAAC;IACpF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,0BAA0B,CAAC;IACzD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,gCAAgC,CAAC;IACjE,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC;IAE5C,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5C,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAE7C,+CAA+C;IAC/C,MAAM,cAAc,GAAG,CAAC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IAC9E,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;IAErE,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,eAAe,CAAC,CAAC;IACpE,IAAI,MAAM;QAAE,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAEvF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,uCAAuC,EAAE;QACpE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,WAAW,EAAE,MAAM;YACnB,mBAAmB,EAAE,YAAY;YACjC,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,KAAK;YACL,UAAU,EAAE,SAAS;YACrB,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,OAAO;4BACb,MAAM,EAAE;gCACN,IAAI,EAAE,QAAQ;gCACd,UAAU,EAAE,SAAS;gCACrB,IAAI,EAAE,MAAM;6BACb;yBACF;wBACD,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;qBAC/B;iBACF;aACF;SACF,CAAC;QACF,MAAM,EAAE,UAAU,CAAC,MAAM;KAC1B,CAAC,CAAC;IAEH,YAAY,CAAC,KAAK,CAAC,CAAC;IAEpB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAG/B,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO;SAC1B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC;SACxC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SAChB,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IAEzB,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC3C,OAAO,EAAE;YACP,QAAQ,EAAE,WAAW;YACrB,KAAK;YACL,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,UAAU,CAAC,UAAU;YAChC,WAAW,EAAE,KAAK,EAAE,YAAY;YAChC,YAAY,EAAE,KAAK,EAAE,aAAa;SACnC;KACF,CAAC;AACJ,CAAC;AAMD,MAAM,CAAC,MAAM,oBAAoB,GAAoB,CAAC,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC;AAE3G;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAC9B,GAAW,EACX,YAAuB,EACvB,YAAuB,EACvB,KAAqB;IAErB,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAEvD,MAAM,SAAS,GAAgD;QAC7D,cAAc,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC;QAC7D,aAAa,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC;QAC3D,cAAc,EAAE,GAAG,EAAE,CAAC,uBAAuB,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC;KACnE,CAAC;IAEF,MAAM,KAAK,GAAG,YAAY;QACxB,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;QACjF,CAAC,CAAC,oBAAoB,CAAC;IAEzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * @polpo-ai/tools — Agent tools for Polpo.
3
+ *
4
+ * Core tools (always available):
5
+ * read, write, edit, bash, glob, grep, ls,
6
+ * register_outcome, http_fetch, http_download,
7
+ * vault_get, vault_list
8
+ *
9
+ * Extended tools (opt-in, require optional deps):
10
+ * browser_*, email_*, excel_*, pdf_*, docx_*,
11
+ * image_*, audio_*, search_*, phone_*, whatsapp_*, memory_*
12
+ */
13
+ export { createCodingTools, createAllTools, matchToolPattern, expandToolWildcards } from "./coding-tools.js";
14
+ export { createOutcomeTools } from "./outcome-tools.js";
15
+ export { createHttpTools } from "./http-tools.js";
16
+ export { createVaultToolsCore } from "./vault-tools.js";
17
+ export { createBrowserTools } from "./browser-tools.js";
18
+ export { createEmailTools } from "./email-tools.js";
19
+ export { createExcelTools } from "./excel-tools.js";
20
+ export { createPdfTools } from "./pdf-tools.js";
21
+ export { createDocxTools } from "./docx-tools.js";
22
+ export { createImageTools } from "./image-tools.js";
23
+ export { createAudioTools } from "./audio-tools.js";
24
+ export { createSearchTools } from "./search-tools.js";
25
+ export { createPhoneTools } from "./phone-tools.js";
26
+ export { createWhatsAppTools } from "./whatsapp-tools.js";
27
+ export { createMemoryTools } from "./memory-tools.js";
28
+ export { NodeFileSystem } from "./adapters/node-filesystem.js";
29
+ export { NodeShell } from "./adapters/node-shell.js";
30
+ export { assertPathAllowed, resolveAllowedPaths } from "./path-sandbox.js";
31
+ export { bashSafeEnv } from "./safe-env.js";
32
+ export type { ResolvedVault, WhatsAppStore } from "./types.js";
33
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAG7G,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAGxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGtD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAGrD,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,37 @@
1
+ /**
2
+ * @polpo-ai/tools — Agent tools for Polpo.
3
+ *
4
+ * Core tools (always available):
5
+ * read, write, edit, bash, glob, grep, ls,
6
+ * register_outcome, http_fetch, http_download,
7
+ * vault_get, vault_list
8
+ *
9
+ * Extended tools (opt-in, require optional deps):
10
+ * browser_*, email_*, excel_*, pdf_*, docx_*,
11
+ * image_*, audio_*, search_*, phone_*, whatsapp_*, memory_*
12
+ */
13
+ // Core tool factory
14
+ export { createCodingTools, createAllTools, matchToolPattern, expandToolWildcards } from "./coding-tools.js";
15
+ // Individual tool factories (for custom composition)
16
+ export { createOutcomeTools } from "./outcome-tools.js";
17
+ export { createHttpTools } from "./http-tools.js";
18
+ export { createVaultToolsCore } from "./vault-tools.js";
19
+ // Extended tool factories
20
+ export { createBrowserTools } from "./browser-tools.js";
21
+ export { createEmailTools } from "./email-tools.js";
22
+ export { createExcelTools } from "./excel-tools.js";
23
+ export { createPdfTools } from "./pdf-tools.js";
24
+ export { createDocxTools } from "./docx-tools.js";
25
+ export { createImageTools } from "./image-tools.js";
26
+ export { createAudioTools } from "./audio-tools.js";
27
+ export { createSearchTools } from "./search-tools.js";
28
+ export { createPhoneTools } from "./phone-tools.js";
29
+ export { createWhatsAppTools } from "./whatsapp-tools.js";
30
+ export { createMemoryTools } from "./memory-tools.js";
31
+ // Adapters (FileSystem/Shell implementations)
32
+ export { NodeFileSystem } from "./adapters/node-filesystem.js";
33
+ export { NodeShell } from "./adapters/node-shell.js";
34
+ // Security utilities
35
+ export { assertPathAllowed, resolveAllowedPaths } from "./path-sandbox.js";
36
+ export { bashSafeEnv } from "./safe-env.js";
37
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,oBAAoB;AACpB,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE7G,qDAAqD;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,0BAA0B;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,8CAA8C;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,qBAAqB;AACrB,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Memory tools for agents — scoped to a single agent's private memory.
3
+ *
4
+ * These tools let an agent read and write its own persistent memory
5
+ * during direct-chat sessions. The agent scope is baked in at creation
6
+ * time so the agent cannot access other agents' or shared memory.
7
+ */
8
+ import type { AgentTool } from "@mariozechner/pi-agent-core";
9
+ import type { MemoryStore } from "@polpo-ai/core";
10
+ export declare const ALL_MEMORY_TOOL_NAMES: readonly ["memory_get", "memory_save", "memory_append", "memory_update"];
11
+ export type MemoryToolName = (typeof ALL_MEMORY_TOOL_NAMES)[number];
12
+ /**
13
+ * Create memory tools for an agent, scoped to that agent's private memory.
14
+ *
15
+ * @param store The MemoryStore instance
16
+ * @param agent The agent name — tools will only access `agent:<name>` scope
17
+ */
18
+ export declare function createMemoryTools(store: MemoryStore, agent: string): AgentTool<any>[];
19
+ //# sourceMappingURL=memory-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-tools.d.ts","sourceRoot":"","sources":["../src/memory-tools.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAKlD,eAAO,MAAM,qBAAqB,0EAKxB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAqBpE;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,MAAM,GACZ,SAAS,CAAC,GAAG,CAAC,EAAE,CA4ElB"}