* wip * remove label tech * ask to read attachments * update skills * Skill ready and tested * report dynamic citations and generic get mailbox util * norm translations * translations * remove dead code, remove connector in multiUser * simple refactor - dont ask for drafts * refactor filesize helper * norm translations, remove read_messages skill
105 lines
3.6 KiB
JavaScript
105 lines
3.6 KiB
JavaScript
const gmailLib = require("../lib.js");
|
|
|
|
module.exports.GmailGetInbox = {
|
|
name: "gmail-get-inbox",
|
|
plugin: function () {
|
|
return {
|
|
name: "gmail-get-inbox",
|
|
setup(aibitat) {
|
|
aibitat.function({
|
|
super: aibitat,
|
|
name: this.name,
|
|
description:
|
|
"Get the inbox emails from Gmail. Returns the inbox emails with the details of the email. " +
|
|
"Supports optional query and limit parameters to filter the emails.",
|
|
examples: [
|
|
{
|
|
prompt: "What's in my inbox?",
|
|
call: JSON.stringify({
|
|
query: "",
|
|
limit: 10,
|
|
}),
|
|
},
|
|
{
|
|
prompt: "Check my inbox for any emails from John Doe",
|
|
call: JSON.stringify({
|
|
query: "from:john.doe@example.com",
|
|
limit: 10,
|
|
}),
|
|
},
|
|
{
|
|
prompt: "Get my 5 most recent unread emails",
|
|
call: JSON.stringify({
|
|
query: "is:unread newer_than:1d",
|
|
limit: 5,
|
|
}),
|
|
},
|
|
],
|
|
parameters: {
|
|
$schema: "http://json-schema.org/draft-07/schema#",
|
|
type: "object",
|
|
properties: {
|
|
query: {
|
|
type: "string",
|
|
description:
|
|
"Optional Gmail search query. Use Gmail query syntax like 'is:inbox', 'is:unread', 'from:email', 'subject:keyword', etc.",
|
|
},
|
|
limit: {
|
|
type: "number",
|
|
description:
|
|
"Optional maximum number of results to return (1-50). Defaults to 10.",
|
|
default: 10,
|
|
},
|
|
},
|
|
required: [],
|
|
additionalProperties: false,
|
|
},
|
|
handler: async function ({ query = "", limit = 10 }) {
|
|
try {
|
|
this.super.handlerProps.log(`Using the gmail-get-inbox tool.`);
|
|
this.super.introspect(
|
|
`${this.caller}: Searching Gmail with query "${query}"`
|
|
);
|
|
|
|
let searchQuery = `is:inbox`;
|
|
if (query) searchQuery += ` ${query}`;
|
|
const result = await gmailLib.search(searchQuery, limit);
|
|
|
|
if (!result.success) {
|
|
this.super.introspect(
|
|
`${this.caller}: Gmail get inbox failed - ${result.error}`
|
|
);
|
|
return `Error getting inbox from Gmail: ${result.error}`;
|
|
}
|
|
|
|
const { threads, resultCount } = result.data;
|
|
this.super.introspect(
|
|
`${this.caller}: Found ${resultCount} emails in inbox`
|
|
);
|
|
|
|
if (resultCount === 0) {
|
|
return `No emails found in inbox.`;
|
|
}
|
|
|
|
const summary = threads
|
|
.map(
|
|
(t, i) =>
|
|
`${i + 1}. [${t.isUnread ? "UNREAD" : "READ"}] "${t.subject}" (ID: ${t.id}, ${t.messageCount} messages, Last: ${new Date(t.lastMessageDate).toLocaleString()})`
|
|
)
|
|
.join("\n");
|
|
|
|
return `Found ${resultCount} email threads:\n\n${summary}\n\nUse the thread ID with gmail-read-thread to read the full conversation.`;
|
|
} catch (e) {
|
|
this.super.handlerProps.log(
|
|
`gmail-get-inbox error: ${e.message}`
|
|
);
|
|
this.super.introspect(`Error: ${e.message}`);
|
|
return `Error getting inbox from Gmail: ${e.message}`;
|
|
}
|
|
},
|
|
});
|
|
},
|
|
};
|
|
},
|
|
};
|