@rnsk/toolkits 0.0.2 → 0.0.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 (174) hide show
  1. package/README.md +104 -0
  2. package/dist/core/index.d.ts +1 -0
  3. package/dist/core/index.js +1 -0
  4. package/dist/index.d.ts +0 -1
  5. package/dist/index.js +0 -1
  6. package/dist/toolkits/github/tools/Actions/get-workflow-job.d.ts +3 -3
  7. package/dist/toolkits/github/tools/Actions/list-artifacts.d.ts +1 -1
  8. package/dist/toolkits/github/tools/Actions/list-workflow-jobs.d.ts +4 -4
  9. package/dist/toolkits/github/tools/Actions/list-workflow-run-artifacts.d.ts +1 -1
  10. package/dist/toolkits/github/tools/Activity/list-notifications.d.ts +2 -2
  11. package/dist/toolkits/github/tools/Activity/list-public-events.d.ts +1 -1
  12. package/dist/toolkits/github/tools/Activity/list-repo-events.d.ts +1 -1
  13. package/dist/toolkits/github/tools/Activity/list-user-events.d.ts +1 -1
  14. package/dist/toolkits/github/tools/Apps/list-installations.d.ts +1 -1
  15. package/dist/toolkits/github/tools/Checks/create-check-run.d.ts +5 -5
  16. package/dist/toolkits/github/tools/Checks/create-check-suite.d.ts +2 -2
  17. package/dist/toolkits/github/tools/Checks/get-check-run.d.ts +2 -2
  18. package/dist/toolkits/github/tools/Checks/get-check-suite.d.ts +2 -2
  19. package/dist/toolkits/github/tools/Checks/list-check-runs.d.ts +4 -4
  20. package/dist/toolkits/github/tools/Checks/update-check-run.d.ts +4 -4
  21. package/dist/toolkits/github/tools/CodeScanning/list-alerts.d.ts +2 -2
  22. package/dist/toolkits/github/tools/CodeScanning/update-alert.d.ts +1 -1
  23. package/dist/toolkits/github/tools/Collaborators/add-collaborator.d.ts +1 -1
  24. package/dist/toolkits/github/tools/Collaborators/check-collaborator.d.ts +1 -1
  25. package/dist/toolkits/github/tools/Collaborators/list-collaborators.d.ts +1 -1
  26. package/dist/toolkits/github/tools/Collaborators/remove-collaborator.d.ts +1 -1
  27. package/dist/toolkits/github/tools/Commits/compare-commits.d.ts +2 -2
  28. package/dist/toolkits/github/tools/Commits/get-commit.d.ts +2 -2
  29. package/dist/toolkits/github/tools/Commits/list-commits.d.ts +1 -1
  30. package/dist/toolkits/github/tools/Commits/list-pull-requests-associated-with-commit.d.ts +2 -2
  31. package/dist/toolkits/github/tools/Dependabot/list-alerts.d.ts +1 -1
  32. package/dist/toolkits/github/tools/Dependabot/update-alert.d.ts +1 -1
  33. package/dist/toolkits/github/tools/DeployKeys/list-deploy-keys.d.ts +1 -1
  34. package/dist/toolkits/github/tools/Deployments/create-deployment.d.ts +1 -1
  35. package/dist/toolkits/github/tools/Deployments/list-deployments.d.ts +1 -1
  36. package/dist/toolkits/github/tools/Environments/list-environments.d.ts +1 -1
  37. package/dist/toolkits/github/tools/Files/create-or-update-file.d.ts +1 -1
  38. package/dist/toolkits/github/tools/Gists/create-gist.d.ts +1 -1
  39. package/dist/toolkits/github/tools/Git/create-blob.d.ts +1 -1
  40. package/dist/toolkits/github/tools/Git/create-tree.d.ts +1 -1
  41. package/dist/toolkits/github/tools/Issues/add-issue-assignees.d.ts +1 -1
  42. package/dist/toolkits/github/tools/Issues/add-issue-labels.d.ts +1 -1
  43. package/dist/toolkits/github/tools/Issues/list-authenticated-user-issues.d.ts +4 -4
  44. package/dist/toolkits/github/tools/Issues/list-issue-comments.d.ts +1 -1
  45. package/dist/toolkits/github/tools/Issues/list-org-issues.d.ts +4 -4
  46. package/dist/toolkits/github/tools/Issues/list-repo-issues.d.ts +2 -2
  47. package/dist/toolkits/github/tools/Issues/list-user-account-issues.d.ts +4 -4
  48. package/dist/toolkits/github/tools/Organizations/get-org-membership.d.ts +1 -1
  49. package/dist/toolkits/github/tools/Organizations/list-org-members.d.ts +1 -1
  50. package/dist/toolkits/github/tools/Organizations/list-org-repositories.d.ts +2 -2
  51. package/dist/toolkits/github/tools/Organizations/list-user-organizations.d.ts +1 -1
  52. package/dist/toolkits/github/tools/Organizations/update-organization.d.ts +1 -1
  53. package/dist/toolkits/github/tools/PRs/create-pull-request-review.d.ts +1 -1
  54. package/dist/toolkits/github/tools/PRs/list-pull-request-files.d.ts +1 -1
  55. package/dist/toolkits/github/tools/PRs/list-pull-requests.d.ts +1 -1
  56. package/dist/toolkits/github/tools/Projects/list-org-projects.d.ts +1 -1
  57. package/dist/toolkits/github/tools/Projects/list-project-columns.d.ts +1 -1
  58. package/dist/toolkits/github/tools/Projects/list-repo-projects.d.ts +1 -1
  59. package/dist/toolkits/github/tools/Projects/update-project.d.ts +1 -1
  60. package/dist/toolkits/github/tools/Reactions/create-commit-comment-reaction.d.ts +1 -1
  61. package/dist/toolkits/github/tools/Reactions/create-issue-reaction.d.ts +1 -1
  62. package/dist/toolkits/github/tools/Reactions/list-commit-comment-reactions.d.ts +1 -1
  63. package/dist/toolkits/github/tools/Reactions/list-issue-reactions.d.ts +1 -1
  64. package/dist/toolkits/github/tools/Reactions/list-pr-comment-reactions.d.ts +1 -1
  65. package/dist/toolkits/github/tools/Releases/list-releases.d.ts +1 -1
  66. package/dist/toolkits/github/tools/Repos/get-repo-contributors.d.ts +1 -1
  67. package/dist/toolkits/github/tools/Repos/list-branches.d.ts +1 -1
  68. package/dist/toolkits/github/tools/Repos/list-repos.d.ts +2 -2
  69. package/dist/toolkits/github/tools/Repos/watch-repo.d.ts +1 -1
  70. package/dist/toolkits/github/tools/Search/search-repos.d.ts +1 -1
  71. package/dist/toolkits/github/tools/SecretScanning/list-alerts.d.ts +1 -1
  72. package/dist/toolkits/github/tools/SecretScanning/update-alert.d.ts +1 -1
  73. package/dist/toolkits/github/tools/SecurityAdvisories/create-repository-advisory.d.ts +1 -1
  74. package/dist/toolkits/github/tools/SecurityAdvisories/get-repository-advisory.d.ts +1 -1
  75. package/dist/toolkits/github/tools/SecurityAdvisories/list-global-advisories.d.ts +1 -1
  76. package/dist/toolkits/github/tools/SecurityAdvisories/list-repository-advisories.d.ts +2 -2
  77. package/dist/toolkits/github/tools/Stars/list-stargazers.d.ts +1 -1
  78. package/dist/toolkits/github/tools/Stars/list-starred-repos.d.ts +1 -1
  79. package/dist/toolkits/github/tools/Statuses/create-commit-status.d.ts +1 -1
  80. package/dist/toolkits/github/tools/Statuses/list-commit-statuses.d.ts +1 -1
  81. package/dist/toolkits/github/tools/Teams/list-team-members.d.ts +1 -1
  82. package/dist/toolkits/github/tools/Teams/list-team-repos.d.ts +1 -1
  83. package/dist/toolkits/github/tools/Teams/list-teams.d.ts +1 -1
  84. package/dist/toolkits/github/tools/Users/get-user-context.d.ts +1 -1
  85. package/dist/toolkits/github/tools/Users/update-authenticated-user.d.ts +1 -1
  86. package/dist/toolkits/github/tools/Webhooks/create-repo-webhook.d.ts +1 -1
  87. package/dist/toolkits/github/tools/Webhooks/list-repo-webhooks.d.ts +1 -1
  88. package/dist/toolkits/github/tools/Webhooks/update-repo-webhook.d.ts +1 -1
  89. package/dist/toolkits/github/tools/Workflows/list-workflow-runs.d.ts +2 -2
  90. package/dist/toolkits/github/tools/Workflows/list-workflows.d.ts +1 -1
  91. package/dist/toolkits/github/tools/index.d.ts +4859 -175
  92. package/dist/toolkits/github/tools/index.js +342 -342
  93. package/dist/toolkits/gmail/icon.js +14 -14
  94. package/dist/toolkits/gmail/manifest.js +78 -5
  95. package/dist/toolkits/gmail/tools/create-draft.d.ts +34 -0
  96. package/dist/toolkits/gmail/tools/create-draft.js +60 -0
  97. package/dist/toolkits/gmail/tools/delete-draft.d.ts +23 -0
  98. package/dist/toolkits/gmail/tools/delete-draft.js +34 -0
  99. package/dist/toolkits/gmail/tools/get-draft.d.ts +32 -0
  100. package/dist/toolkits/gmail/tools/get-draft.js +36 -0
  101. package/dist/toolkits/gmail/tools/get-message.d.ts +12 -12
  102. package/dist/toolkits/gmail/tools/get-message.js +3 -24
  103. package/dist/toolkits/gmail/tools/get-thread.d.ts +29 -0
  104. package/dist/toolkits/gmail/tools/get-thread.js +39 -0
  105. package/dist/toolkits/gmail/tools/index.d.ts +17 -0
  106. package/dist/toolkits/gmail/tools/index.js +17 -0
  107. package/dist/toolkits/gmail/tools/list-drafts.d.ts +28 -0
  108. package/dist/toolkits/gmail/tools/list-drafts.js +43 -0
  109. package/dist/toolkits/gmail/tools/list-labels.d.ts +20 -0
  110. package/dist/toolkits/gmail/tools/list-labels.js +46 -0
  111. package/dist/toolkits/gmail/tools/list-threads.d.ts +28 -0
  112. package/dist/toolkits/gmail/tools/list-threads.js +43 -0
  113. package/dist/toolkits/gmail/tools/modify-message-labels.d.ts +31 -0
  114. package/dist/toolkits/gmail/tools/modify-message-labels.js +44 -0
  115. package/dist/toolkits/gmail/tools/reply-to-thread.d.ts +33 -0
  116. package/dist/toolkits/gmail/tools/reply-to-thread.js +58 -0
  117. package/dist/toolkits/gmail/tools/send-draft.d.ts +29 -0
  118. package/dist/toolkits/gmail/tools/send-draft.js +41 -0
  119. package/dist/toolkits/gmail/tools/send-message.d.ts +4 -1
  120. package/dist/toolkits/gmail/tools/send-message.js +18 -16
  121. package/dist/toolkits/gmail/tools/trash-message.d.ts +29 -0
  122. package/dist/toolkits/gmail/tools/trash-message.js +37 -0
  123. package/dist/toolkits/gmail/tools/untrash-message.d.ts +29 -0
  124. package/dist/toolkits/gmail/tools/untrash-message.js +37 -0
  125. package/dist/toolkits/gmail/tools/utils.d.ts +41 -0
  126. package/dist/toolkits/gmail/tools/utils.js +97 -0
  127. package/dist/toolkits/google-calendar/manifest.js +1 -1
  128. package/dist/toolkits/google-calendar/tools/delete-event.d.ts +27 -0
  129. package/dist/toolkits/google-calendar/tools/delete-event.js +38 -0
  130. package/dist/toolkits/google-calendar/tools/get-event.d.ts +24 -0
  131. package/dist/toolkits/google-calendar/tools/get-event.js +37 -0
  132. package/dist/toolkits/google-calendar/tools/index.d.ts +181 -3
  133. package/dist/toolkits/google-calendar/tools/index.js +31 -2
  134. package/dist/toolkits/google-calendar/tools/search-events.d.ts +27 -0
  135. package/dist/toolkits/google-calendar/tools/search-events.js +49 -0
  136. package/dist/toolkits/google-calendar/tools/update-event.d.ts +29 -0
  137. package/dist/toolkits/google-calendar/tools/update-event.js +56 -0
  138. package/dist/toolkits/google-sheets/manifest.js +2 -2
  139. package/dist/toolkits/google-sheets/tools/append-values.d.ts +41 -0
  140. package/dist/toolkits/google-sheets/tools/append-values.js +51 -0
  141. package/dist/toolkits/google-sheets/tools/clear-values.d.ts +27 -0
  142. package/dist/toolkits/google-sheets/tools/clear-values.js +41 -0
  143. package/dist/toolkits/google-sheets/tools/create-spreadsheet.d.ts +33 -0
  144. package/dist/toolkits/google-sheets/tools/create-spreadsheet.js +59 -0
  145. package/dist/toolkits/google-sheets/tools/index.d.ts +205 -7
  146. package/dist/toolkits/google-sheets/tools/index.js +39 -4
  147. package/dist/toolkits/google-sheets/tools/update-values.d.ts +38 -0
  148. package/dist/toolkits/google-sheets/tools/update-values.js +50 -0
  149. package/dist/toolkits/linear/manifest.js +35 -0
  150. package/dist/toolkits/linear/tools/add-comment.d.ts +6 -0
  151. package/dist/toolkits/linear/tools/add-comment.js +52 -0
  152. package/dist/toolkits/linear/tools/get-issue.d.ts +6 -0
  153. package/dist/toolkits/linear/tools/get-issue.js +117 -0
  154. package/dist/toolkits/linear/tools/list-projects.d.ts +4 -0
  155. package/dist/toolkits/linear/tools/list-projects.js +46 -0
  156. package/dist/toolkits/linear/tools/list-workflow-states.d.ts +26 -0
  157. package/dist/toolkits/linear/tools/list-workflow-states.js +59 -0
  158. package/dist/toolkits/linear/tools/update-issue.d.ts +11 -0
  159. package/dist/toolkits/linear/tools/update-issue.js +78 -0
  160. package/dist/toolkits/notion/tools/append-block-children.d.ts +1 -1
  161. package/dist/toolkits/notion/tools/index.d.ts +105 -12
  162. package/dist/toolkits/notion/tools/index.js +8 -8
  163. package/dist/toolkits/notion/tools/query-database.d.ts +1 -1
  164. package/package.json +5 -7
  165. package/dist/runtime/credentials.d.ts +0 -28
  166. package/dist/runtime/credentials.js +0 -15
  167. package/dist/runtime/index.d.ts +0 -5
  168. package/dist/runtime/index.js +0 -5
  169. package/dist/runtime/meta-tools.d.ts +0 -101
  170. package/dist/runtime/meta-tools.js +0 -250
  171. package/dist/runtime/registry.d.ts +0 -20
  172. package/dist/runtime/registry.js +0 -35
  173. /package/dist/{runtime → core}/schema-helpers.d.ts +0 -0
  174. /package/dist/{runtime → core}/schema-helpers.js +0 -0
@@ -0,0 +1,46 @@
1
+ import { tool } from 'ai';
2
+ import { z } from 'zod';
3
+ export const listLabels = tool({
4
+ description: 'List all labels in the Gmail mailbox (e.g., INBOX, UNREAD, STARRED, IMPORTANT, and user custom labels).',
5
+ inputSchema: z.object({
6
+ gmailToken: z.string().optional().describe('Injected by system; do not provide'),
7
+ type: z.enum(['all', 'system', 'user']).optional().default('all').describe('Filter labels by type: system, user, or all'),
8
+ }),
9
+ execute: async ({ gmailToken, type }) => {
10
+ try {
11
+ const response = await fetch('https://gmail.googleapis.com/gmail/v1/users/me/labels', {
12
+ headers: {
13
+ Authorization: `Bearer ${gmailToken}`,
14
+ },
15
+ });
16
+ if (!response.ok) {
17
+ const error = await response.json();
18
+ return { error: 'Failed to list labels', details: error };
19
+ }
20
+ const data = await response.json();
21
+ let labels = data.labels || [];
22
+ if (type === 'system') {
23
+ labels = labels.filter((l) => l.type === 'system');
24
+ }
25
+ else if (type === 'user') {
26
+ labels = labels.filter((l) => l.type === 'user');
27
+ }
28
+ return {
29
+ labels: labels.map((l) => ({
30
+ id: l.id,
31
+ name: l.name,
32
+ type: l.type,
33
+ messageListVisibility: l.messageListVisibility,
34
+ labelListVisibility: l.labelListVisibility,
35
+ })),
36
+ };
37
+ }
38
+ catch (error) {
39
+ return {
40
+ error: 'Error listing labels',
41
+ message: error instanceof Error ? error.message : 'Unknown error',
42
+ };
43
+ }
44
+ },
45
+ });
46
+ //# sourceMappingURL=list-labels.js.map
@@ -0,0 +1,28 @@
1
+ export declare const listThreads: import("ai").Tool<{
2
+ maxResults: number;
3
+ gmailToken?: string | undefined;
4
+ q?: string | undefined;
5
+ pageToken?: string | undefined;
6
+ }, {
7
+ error: string;
8
+ details: any;
9
+ threads?: undefined;
10
+ resultSizeEstimate?: undefined;
11
+ nextPageToken?: undefined;
12
+ message?: undefined;
13
+ } | {
14
+ threads: any;
15
+ resultSizeEstimate: any;
16
+ nextPageToken: any;
17
+ error?: undefined;
18
+ details?: undefined;
19
+ message?: undefined;
20
+ } | {
21
+ error: string;
22
+ message: string;
23
+ details?: undefined;
24
+ threads?: undefined;
25
+ resultSizeEstimate?: undefined;
26
+ nextPageToken?: undefined;
27
+ }>;
28
+ //# sourceMappingURL=list-threads.d.ts.map
@@ -0,0 +1,43 @@
1
+ import { tool } from 'ai';
2
+ import { z } from 'zod';
3
+ export const listThreads = tool({
4
+ description: 'List or search email conversation threads in Gmail. Filter by search query (e.g., from:someone@example.com, is:unread).',
5
+ inputSchema: z.object({
6
+ gmailToken: z.string().optional().describe('Injected by system; do not provide'),
7
+ q: z.string().optional().describe('Search query (same format as Gmail search box)'),
8
+ maxResults: z.number().optional().default(10).describe('Maximum number of threads to return'),
9
+ pageToken: z.string().optional().describe('Token for retrieving the next page of threads'),
10
+ }),
11
+ execute: async ({ gmailToken, q, maxResults, pageToken }) => {
12
+ try {
13
+ const url = new URL('https://gmail.googleapis.com/gmail/v1/users/me/threads');
14
+ if (q)
15
+ url.searchParams.append('q', q);
16
+ url.searchParams.append('maxResults', maxResults.toString());
17
+ if (pageToken)
18
+ url.searchParams.append('pageToken', pageToken);
19
+ const response = await fetch(url.toString(), {
20
+ headers: {
21
+ Authorization: `Bearer ${gmailToken}`,
22
+ },
23
+ });
24
+ if (!response.ok) {
25
+ const error = await response.json();
26
+ return { error: 'Failed to list threads', details: error };
27
+ }
28
+ const data = await response.json();
29
+ return {
30
+ threads: data.threads || [],
31
+ resultSizeEstimate: data.resultSizeEstimate,
32
+ nextPageToken: data.nextPageToken,
33
+ };
34
+ }
35
+ catch (error) {
36
+ return {
37
+ error: 'Error listing threads',
38
+ message: error instanceof Error ? error.message : 'Unknown error',
39
+ };
40
+ }
41
+ },
42
+ });
43
+ //# sourceMappingURL=list-threads.js.map
@@ -0,0 +1,31 @@
1
+ export declare const modifyMessageLabels: import("ai").Tool<{
2
+ messageId: string;
3
+ gmailToken?: string | undefined;
4
+ addLabelIds?: string[] | undefined;
5
+ removeLabelIds?: string[] | undefined;
6
+ }, {
7
+ error: string;
8
+ details: any;
9
+ success?: undefined;
10
+ messageId?: undefined;
11
+ threadId?: undefined;
12
+ labelIds?: undefined;
13
+ message?: undefined;
14
+ } | {
15
+ success: boolean;
16
+ messageId: any;
17
+ threadId: any;
18
+ labelIds: any;
19
+ error?: undefined;
20
+ details?: undefined;
21
+ message?: undefined;
22
+ } | {
23
+ error: string;
24
+ message: string;
25
+ details?: undefined;
26
+ success?: undefined;
27
+ messageId?: undefined;
28
+ threadId?: undefined;
29
+ labelIds?: undefined;
30
+ }>;
31
+ //# sourceMappingURL=modify-message-labels.d.ts.map
@@ -0,0 +1,44 @@
1
+ import { tool } from 'ai';
2
+ import { z } from 'zod';
3
+ export const modifyMessageLabels = tool({
4
+ description: 'Add or remove labels from a Gmail message. Used to mark emails as read/unread, star/unstar, archive (remove INBOX), or assign folders/labels.',
5
+ inputSchema: z.object({
6
+ gmailToken: z.string().optional().describe('Injected by system; do not provide'),
7
+ messageId: z.string().describe('The ID of the message to modify'),
8
+ addLabelIds: z.array(z.string()).optional().describe('Array of label IDs to add (e.g., ["STARRED", "IMPORTANT"])'),
9
+ removeLabelIds: z.array(z.string()).optional().describe('Array of label IDs to remove (e.g., ["UNREAD"] to mark as read, or ["INBOX"] to archive)'),
10
+ }),
11
+ execute: async ({ gmailToken, messageId, addLabelIds = [], removeLabelIds = [] }) => {
12
+ try {
13
+ const response = await fetch(`https://gmail.googleapis.com/gmail/v1/users/me/messages/${messageId}/modify`, {
14
+ method: 'POST',
15
+ headers: {
16
+ Authorization: `Bearer ${gmailToken}`,
17
+ 'Content-Type': 'application/json',
18
+ },
19
+ body: JSON.stringify({
20
+ addLabelIds,
21
+ removeLabelIds,
22
+ }),
23
+ });
24
+ if (!response.ok) {
25
+ const error = await response.json();
26
+ return { error: 'Failed to modify message labels', details: error };
27
+ }
28
+ const data = await response.json();
29
+ return {
30
+ success: true,
31
+ messageId: data.id,
32
+ threadId: data.threadId,
33
+ labelIds: data.labelIds || [],
34
+ };
35
+ }
36
+ catch (error) {
37
+ return {
38
+ error: 'Error modifying message labels',
39
+ message: error instanceof Error ? error.message : 'Unknown error',
40
+ };
41
+ }
42
+ },
43
+ });
44
+ //# sourceMappingURL=modify-message-labels.js.map
@@ -0,0 +1,33 @@
1
+ export declare const replyToThread: import("ai").Tool<{
2
+ body: string;
3
+ threadId: string;
4
+ subject: string;
5
+ to: string;
6
+ gmailToken?: string | undefined;
7
+ cc?: string | undefined;
8
+ bcc?: string | undefined;
9
+ inReplyTo?: string | undefined;
10
+ references?: string | undefined;
11
+ }, {
12
+ error: string;
13
+ details: any;
14
+ success?: undefined;
15
+ messageId?: undefined;
16
+ threadId?: undefined;
17
+ message?: undefined;
18
+ } | {
19
+ success: boolean;
20
+ messageId: any;
21
+ threadId: any;
22
+ error?: undefined;
23
+ details?: undefined;
24
+ message?: undefined;
25
+ } | {
26
+ error: string;
27
+ message: string;
28
+ details?: undefined;
29
+ success?: undefined;
30
+ messageId?: undefined;
31
+ threadId?: undefined;
32
+ }>;
33
+ //# sourceMappingURL=reply-to-thread.d.ts.map
@@ -0,0 +1,58 @@
1
+ import { tool } from 'ai';
2
+ import { z } from 'zod';
3
+ import { encodeRFC822Message } from './utils.js';
4
+ export const replyToThread = tool({
5
+ description: 'Reply to an existing Gmail conversation thread, ensuring the message stays grouped in the same thread.',
6
+ inputSchema: z.object({
7
+ gmailToken: z.string().optional().describe('Injected by system; do not provide'),
8
+ threadId: z.string().describe('The ID of the thread to reply to'),
9
+ to: z.string().describe('Recipient email address'),
10
+ subject: z.string().describe('Email subject (typically prefixed with "Re: ")'),
11
+ body: z.string().describe('Reply body (plain text)'),
12
+ cc: z.string().optional().describe('Optional CC recipient email address(es), comma-separated'),
13
+ bcc: z.string().optional().describe('Optional BCC recipient email address(es), comma-separated'),
14
+ inReplyTo: z.string().optional().describe('Optional Message-ID header of the email being replied to'),
15
+ references: z.string().optional().describe('Optional References header string for email threading continuity'),
16
+ }),
17
+ execute: async ({ gmailToken, threadId, to, subject, body, cc, bcc, inReplyTo, references }) => {
18
+ try {
19
+ const encodedMessage = encodeRFC822Message({
20
+ to,
21
+ subject,
22
+ body,
23
+ cc,
24
+ bcc,
25
+ inReplyTo,
26
+ references: references || inReplyTo,
27
+ });
28
+ const response = await fetch('https://gmail.googleapis.com/gmail/v1/users/me/messages/send', {
29
+ method: 'POST',
30
+ headers: {
31
+ Authorization: `Bearer ${gmailToken}`,
32
+ 'Content-Type': 'application/json',
33
+ },
34
+ body: JSON.stringify({
35
+ raw: encodedMessage,
36
+ threadId,
37
+ }),
38
+ });
39
+ if (!response.ok) {
40
+ const error = await response.json();
41
+ return { error: 'Failed to reply to thread', details: error };
42
+ }
43
+ const data = await response.json();
44
+ return {
45
+ success: true,
46
+ messageId: data.id,
47
+ threadId: data.threadId,
48
+ };
49
+ }
50
+ catch (error) {
51
+ return {
52
+ error: 'Error replying to thread',
53
+ message: error instanceof Error ? error.message : 'Unknown error',
54
+ };
55
+ }
56
+ },
57
+ });
58
+ //# sourceMappingURL=reply-to-thread.js.map
@@ -0,0 +1,29 @@
1
+ export declare const sendDraft: import("ai").Tool<{
2
+ id: string;
3
+ gmailToken?: string | undefined;
4
+ }, {
5
+ error: string;
6
+ details: any;
7
+ success?: undefined;
8
+ messageId?: undefined;
9
+ threadId?: undefined;
10
+ labelIds?: undefined;
11
+ message?: undefined;
12
+ } | {
13
+ success: boolean;
14
+ messageId: any;
15
+ threadId: any;
16
+ labelIds: any;
17
+ error?: undefined;
18
+ details?: undefined;
19
+ message?: undefined;
20
+ } | {
21
+ error: string;
22
+ message: string;
23
+ details?: undefined;
24
+ success?: undefined;
25
+ messageId?: undefined;
26
+ threadId?: undefined;
27
+ labelIds?: undefined;
28
+ }>;
29
+ //# sourceMappingURL=send-draft.d.ts.map
@@ -0,0 +1,41 @@
1
+ import { tool } from 'ai';
2
+ import { z } from 'zod';
3
+ export const sendDraft = tool({
4
+ description: 'Send an existing Gmail draft by its draft ID.',
5
+ inputSchema: z.object({
6
+ gmailToken: z.string().optional().describe('Injected by system; do not provide'),
7
+ id: z.string().describe('The ID of the draft to send'),
8
+ }),
9
+ execute: async ({ gmailToken, id }) => {
10
+ try {
11
+ const response = await fetch('https://gmail.googleapis.com/gmail/v1/users/me/drafts/send', {
12
+ method: 'POST',
13
+ headers: {
14
+ Authorization: `Bearer ${gmailToken}`,
15
+ 'Content-Type': 'application/json',
16
+ },
17
+ body: JSON.stringify({
18
+ id,
19
+ }),
20
+ });
21
+ if (!response.ok) {
22
+ const error = await response.json();
23
+ return { error: 'Failed to send draft', details: error };
24
+ }
25
+ const data = await response.json();
26
+ return {
27
+ success: true,
28
+ messageId: data.id,
29
+ threadId: data.threadId,
30
+ labelIds: data.labelIds || [],
31
+ };
32
+ }
33
+ catch (error) {
34
+ return {
35
+ error: 'Error sending draft',
36
+ message: error instanceof Error ? error.message : 'Unknown error',
37
+ };
38
+ }
39
+ },
40
+ });
41
+ //# sourceMappingURL=send-draft.js.map
@@ -1,8 +1,11 @@
1
1
  export declare const sendMessage: import("ai").Tool<{
2
- subject: string;
3
2
  body: string;
3
+ subject: string;
4
4
  to: string;
5
5
  gmailToken?: string | undefined;
6
+ threadId?: string | undefined;
7
+ cc?: string | undefined;
8
+ bcc?: string | undefined;
6
9
  }, {
7
10
  error: string;
8
11
  details: any;
@@ -1,5 +1,6 @@
1
1
  import { tool } from 'ai';
2
2
  import { z } from 'zod';
3
+ import { encodeRFC822Message } from './utils.js';
3
4
  export const sendMessage = tool({
4
5
  description: 'Send an email via Gmail.',
5
6
  inputSchema: z.object({
@@ -7,31 +8,32 @@ export const sendMessage = tool({
7
8
  to: z.string().describe('Recipient email address'),
8
9
  subject: z.string().describe('Email subject'),
9
10
  body: z.string().describe('Email body (plain text)'),
11
+ cc: z.string().optional().describe('Optional CC recipient email address(es), comma-separated'),
12
+ bcc: z.string().optional().describe('Optional BCC recipient email address(es), comma-separated'),
13
+ threadId: z.string().optional().describe('Optional thread ID to reply or append this message to an existing conversation thread'),
10
14
  }),
11
- execute: async ({ gmailToken, to, subject, body }) => {
15
+ execute: async ({ gmailToken, to, subject, body, cc, bcc, threadId }) => {
12
16
  try {
13
- const message = [
14
- `To: ${to}`,
15
- `Subject: ${subject}`,
16
- 'Content-Type: text/plain; charset="UTF-8"',
17
- 'MIME-Version: 1.0',
18
- '',
17
+ const encodedMessage = encodeRFC822Message({
18
+ to,
19
+ subject,
19
20
  body,
20
- ].join('\n');
21
- const encodedMessage = Buffer.from(message)
22
- .toString('base64')
23
- .replace(/\+/g, '-')
24
- .replace(/\//g, '_')
25
- .replace(/=+$/, '');
21
+ cc,
22
+ bcc,
23
+ });
24
+ const payload = {
25
+ raw: encodedMessage,
26
+ };
27
+ if (threadId) {
28
+ payload.threadId = threadId;
29
+ }
26
30
  const response = await fetch('https://gmail.googleapis.com/gmail/v1/users/me/messages/send', {
27
31
  method: 'POST',
28
32
  headers: {
29
33
  Authorization: `Bearer ${gmailToken}`,
30
34
  'Content-Type': 'application/json',
31
35
  },
32
- body: JSON.stringify({
33
- raw: encodedMessage,
34
- }),
36
+ body: JSON.stringify(payload),
35
37
  });
36
38
  if (!response.ok) {
37
39
  const error = await response.json();
@@ -0,0 +1,29 @@
1
+ export declare const trashMessage: import("ai").Tool<{
2
+ id: string;
3
+ gmailToken?: string | undefined;
4
+ }, {
5
+ error: string;
6
+ details: any;
7
+ success?: undefined;
8
+ messageId?: undefined;
9
+ threadId?: undefined;
10
+ labelIds?: undefined;
11
+ message?: undefined;
12
+ } | {
13
+ success: boolean;
14
+ messageId: any;
15
+ threadId: any;
16
+ labelIds: any;
17
+ error?: undefined;
18
+ details?: undefined;
19
+ message?: undefined;
20
+ } | {
21
+ error: string;
22
+ message: string;
23
+ details?: undefined;
24
+ success?: undefined;
25
+ messageId?: undefined;
26
+ threadId?: undefined;
27
+ labelIds?: undefined;
28
+ }>;
29
+ //# sourceMappingURL=trash-message.d.ts.map
@@ -0,0 +1,37 @@
1
+ import { tool } from 'ai';
2
+ import { z } from 'zod';
3
+ export const trashMessage = tool({
4
+ description: 'Move a Gmail message to the Trash folder (safe recoverable deletion).',
5
+ inputSchema: z.object({
6
+ gmailToken: z.string().optional().describe('Injected by system; do not provide'),
7
+ id: z.string().describe('The ID of the message to move to Trash'),
8
+ }),
9
+ execute: async ({ gmailToken, id }) => {
10
+ try {
11
+ const response = await fetch(`https://gmail.googleapis.com/gmail/v1/users/me/messages/${id}/trash`, {
12
+ method: 'POST',
13
+ headers: {
14
+ Authorization: `Bearer ${gmailToken}`,
15
+ },
16
+ });
17
+ if (!response.ok) {
18
+ const error = await response.json();
19
+ return { error: 'Failed to trash message', details: error };
20
+ }
21
+ const data = await response.json();
22
+ return {
23
+ success: true,
24
+ messageId: data.id,
25
+ threadId: data.threadId,
26
+ labelIds: data.labelIds || [],
27
+ };
28
+ }
29
+ catch (error) {
30
+ return {
31
+ error: 'Error moving message to trash',
32
+ message: error instanceof Error ? error.message : 'Unknown error',
33
+ };
34
+ }
35
+ },
36
+ });
37
+ //# sourceMappingURL=trash-message.js.map
@@ -0,0 +1,29 @@
1
+ export declare const untrashMessage: import("ai").Tool<{
2
+ id: string;
3
+ gmailToken?: string | undefined;
4
+ }, {
5
+ error: string;
6
+ details: any;
7
+ success?: undefined;
8
+ messageId?: undefined;
9
+ threadId?: undefined;
10
+ labelIds?: undefined;
11
+ message?: undefined;
12
+ } | {
13
+ success: boolean;
14
+ messageId: any;
15
+ threadId: any;
16
+ labelIds: any;
17
+ error?: undefined;
18
+ details?: undefined;
19
+ message?: undefined;
20
+ } | {
21
+ error: string;
22
+ message: string;
23
+ details?: undefined;
24
+ success?: undefined;
25
+ messageId?: undefined;
26
+ threadId?: undefined;
27
+ labelIds?: undefined;
28
+ }>;
29
+ //# sourceMappingURL=untrash-message.d.ts.map
@@ -0,0 +1,37 @@
1
+ import { tool } from 'ai';
2
+ import { z } from 'zod';
3
+ export const untrashMessage = tool({
4
+ description: 'Restore a Gmail message from the Trash folder back to the mailbox.',
5
+ inputSchema: z.object({
6
+ gmailToken: z.string().optional().describe('Injected by system; do not provide'),
7
+ id: z.string().describe('The ID of the message to restore from Trash'),
8
+ }),
9
+ execute: async ({ gmailToken, id }) => {
10
+ try {
11
+ const response = await fetch(`https://gmail.googleapis.com/gmail/v1/users/me/messages/${id}/untrash`, {
12
+ method: 'POST',
13
+ headers: {
14
+ Authorization: `Bearer ${gmailToken}`,
15
+ },
16
+ });
17
+ if (!response.ok) {
18
+ const error = await response.json();
19
+ return { error: 'Failed to untrash message', details: error };
20
+ }
21
+ const data = await response.json();
22
+ return {
23
+ success: true,
24
+ messageId: data.id,
25
+ threadId: data.threadId,
26
+ labelIds: data.labelIds || [],
27
+ };
28
+ }
29
+ catch (error) {
30
+ return {
31
+ error: 'Error restoring message from trash',
32
+ message: error instanceof Error ? error.message : 'Unknown error',
33
+ };
34
+ }
35
+ },
36
+ });
37
+ //# sourceMappingURL=untrash-message.js.map
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Base64URL encodes a string in accordance with RFC 4648 §5.
3
+ */
4
+ export declare function encodeBase64Url(str: string): string;
5
+ /**
6
+ * Base64URL decodes a string back to UTF-8.
7
+ */
8
+ export declare function decodeBase64Url(data: string): string;
9
+ /**
10
+ * Encodes an email with standard RFC 2822 headers into Base64URL format.
11
+ */
12
+ export declare function encodeRFC822Message(params: {
13
+ to: string;
14
+ subject: string;
15
+ body: string;
16
+ cc?: string;
17
+ bcc?: string;
18
+ inReplyTo?: string;
19
+ references?: string;
20
+ }): string;
21
+ /**
22
+ * Recursively extracts plain text (or HTML fallback) body from a Gmail message payload.
23
+ */
24
+ export declare function extractBodyFromPayload(payload: any): string;
25
+ /**
26
+ * Extracts structured message details and headers from a Gmail message API response.
27
+ */
28
+ export declare function extractMessageDetails(data: any, maxBodyLength?: number): {
29
+ id: any;
30
+ threadId: any;
31
+ labelIds: any;
32
+ snippet: any;
33
+ subject: any;
34
+ from: any;
35
+ to: any;
36
+ cc: any;
37
+ date: any;
38
+ messageIdHeader: any;
39
+ body: string;
40
+ } | null;
41
+ //# sourceMappingURL=utils.d.ts.map