From f367460756fb48d29c2127950c3ba24ddfa9666e Mon Sep 17 00:00:00 2001 From: Haakam Aujla Date: Mon, 26 Jan 2026 22:59:40 -0800 Subject: [PATCH] Use agentmail-toolkit --- extensions/agentmail/package.json | 3 +- extensions/agentmail/src/tools.ts | 44 +++---------------------- pnpm-lock.yaml | 53 ++++++++++++++++++++++++++++--- 3 files changed, 56 insertions(+), 44 deletions(-) diff --git a/extensions/agentmail/package.json b/extensions/agentmail/package.json index 9a4277a81..7726ded32 100644 --- a/extensions/agentmail/package.json +++ b/extensions/agentmail/package.json @@ -24,7 +24,8 @@ } }, "dependencies": { - "agentmail": "^0.2.4", + "agentmail": "^0.2.5", + "agentmail-toolkit": "^0.2.5", "zod": "^4.3.6" }, "devDependencies": { diff --git a/extensions/agentmail/src/tools.ts b/extensions/agentmail/src/tools.ts index a75e712bb..ca4252c52 100644 --- a/extensions/agentmail/src/tools.ts +++ b/extensions/agentmail/src/tools.ts @@ -1,47 +1,13 @@ -import { type Static, Type } from "@sinclair/typebox"; import type { ChannelAgentTool } from "clawdbot/plugin-sdk"; +import { AgentMailToolkit } from "agentmail-toolkit/clawdbot"; -import { formatAttachmentResponse } from "./attachment.js"; -import { getClientAndInbox } from "./client.js"; - -const GetAttachmentParams = Type.Object({ - messageId: Type.String({ description: "The message ID containing the attachment" }), - attachmentId: Type.String({ description: "The attachment ID to fetch" }), -}); - -/** Creates the get_email_attachment tool for fetching attachment download URLs. */ -export function createGetAttachmentTool(): ChannelAgentTool { - return { - label: "Get Email Attachment", - name: "get_email_attachment", - description: - "Fetch a temporary download URL for an email attachment. Use the attachment ID from the thread context.", - parameters: GetAttachmentParams, - execute: async (_toolCallId, args) => { - const { messageId, attachmentId } = args as Static; - - try { - const { client, inboxId } = getClientAndInbox(); - const attachment = await client.inboxes.messages.getAttachment(inboxId, messageId, attachmentId); - - return { - content: [{ type: "text", text: formatAttachmentResponse(attachment) }], - details: attachment, - }; - } catch (err) { - return { - content: [{ type: "text", text: `Failed to fetch attachment: ${err instanceof Error ? err.message : String(err)}` }], - details: {}, - isError: true, - }; - } - }, - }; -} +import { getAgentMailClient } from "./client.js"; /** * Returns all AgentMail agent tools. */ export function createAgentMailTools(): ChannelAgentTool[] { - return [createGetAttachmentTool()]; + const client = getAgentMailClient(); + const toolkit = new AgentMailToolkit(client); + return toolkit.getTools(); } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4819ab440..36f18dee6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -265,8 +265,11 @@ importers: extensions/agentmail: dependencies: agentmail: + specifier: ^0.2.5 + version: 0.2.5 + agentmail-toolkit: specifier: ^0.2.4 - version: 0.2.4 + version: 0.2.4(@napi-rs/canvas@0.1.88)(clawdbot@) zod: specifier: ^4.3.6 version: 4.3.6 @@ -2946,8 +2949,25 @@ packages: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} - agentmail@0.2.4: - resolution: {integrity: sha512-7+23wQUc7b/pzTbvdMkjZcimfMwgQyhQ+ONkZPGBmkDh7EbaoJtlVb/2B8/7FXV44oCPvrRqk+uvM1I/K446Gg==} + agentmail-toolkit@0.2.4: + resolution: {integrity: sha512-p4gFMb9HeZ7iDd8G4U9hKcDPcWkiUOkdoLvHfy9hgpFmph+mOa/EMMoiGjS1GbmKVzUst6ItwBRrJKF2ETAVjA==} + peerDependencies: + '@modelcontextprotocol/sdk': ^1.24.1 + ai: ^6.0.0-beta.150 + clawdbot: '*' + langchain: ^1.2.0 + peerDependenciesMeta: + '@modelcontextprotocol/sdk': + optional: true + ai: + optional: true + clawdbot: + optional: true + langchain: + optional: true + + agentmail@0.2.5: + resolution: {integrity: sha512-Hl68zE0xAgLRF9h+IKo5nQ4u1PMdCPwQEq6DF7ewfHmmmDCfUCnvIzRvkKi/2uOEK5VLAvxnv4+VWeHVXQoMRQ==} engines: {node: '>=18.0.0'} ajv-formats@3.0.1: @@ -5331,6 +5351,14 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} + unpdf@1.4.0: + resolution: {integrity: sha512-TahIk0xdH/4jh/MxfclzU79g40OyxtP00VnEUZdEkJoYtXAHWLiir6t3FC6z3vDqQTzc2ZHcla6uEiVTNjejuA==} + peerDependencies: + '@napi-rs/canvas': ^0.1.69 + peerDependenciesMeta: + '@napi-rs/canvas': + optional: true + unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} @@ -8765,7 +8793,20 @@ snapshots: agent-base@7.1.4: {} - agentmail@0.2.4: + agentmail-toolkit@0.2.4(@napi-rs/canvas@0.1.88)(clawdbot@): + dependencies: + agentmail: 0.2.5 + jszip: 3.10.1 + unpdf: 1.4.0(@napi-rs/canvas@0.1.88) + zod: 4.3.6 + optionalDependencies: + clawdbot: 'link:' + transitivePeerDependencies: + - '@napi-rs/canvas' + - bufferutil + - utf-8-validate + + agentmail@0.2.5: dependencies: ws: 8.19.0 transitivePeerDependencies: @@ -11503,6 +11544,10 @@ snapshots: universalify@2.0.1: optional: true + unpdf@1.4.0(@napi-rs/canvas@0.1.88): + optionalDependencies: + '@napi-rs/canvas': 0.1.88 + unpipe@1.0.0: {} uri-js@4.4.1: