@jbctechsolutions/mcp-office365 2.5.1 → 3.0.0
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.
- package/README.md +32 -0
- package/dist/approval/token-manager.d.ts +28 -16
- package/dist/approval/token-manager.d.ts.map +1 -1
- package/dist/approval/token-manager.js +125 -37
- package/dist/approval/token-manager.js.map +1 -1
- package/dist/cli.d.ts +17 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +85 -2
- package/dist/cli.js.map +1 -1
- package/dist/graph/auth/config.d.ts +1 -1
- package/dist/graph/auth/config.d.ts.map +1 -1
- package/dist/graph/auth/config.js +5 -1
- package/dist/graph/auth/config.js.map +1 -1
- package/dist/graph/auth/device-code-flow.d.ts +3 -1
- package/dist/graph/auth/device-code-flow.d.ts.map +1 -1
- package/dist/graph/auth/device-code-flow.js +42 -14
- package/dist/graph/auth/device-code-flow.js.map +1 -1
- package/dist/graph/auth/token-cache.js +2 -2
- package/dist/graph/auth/token-cache.js.map +1 -1
- package/dist/graph/client/graph-client.d.ts +36 -8
- package/dist/graph/client/graph-client.d.ts.map +1 -1
- package/dist/graph/client/graph-client.js +128 -36
- package/dist/graph/client/graph-client.js.map +1 -1
- package/dist/graph/repository.d.ts +9 -6
- package/dist/graph/repository.d.ts.map +1 -1
- package/dist/graph/repository.js +63 -66
- package/dist/graph/repository.js.map +1 -1
- package/dist/ids/mint.d.ts +31 -0
- package/dist/ids/mint.d.ts.map +1 -0
- package/dist/ids/mint.js +36 -0
- package/dist/ids/mint.js.map +1 -0
- package/dist/ids/resolver.d.ts +30 -0
- package/dist/ids/resolver.d.ts.map +1 -0
- package/dist/ids/resolver.js +37 -0
- package/dist/ids/resolver.js.map +1 -0
- package/dist/ids/token.d.ts +56 -0
- package/dist/ids/token.d.ts.map +1 -0
- package/dist/ids/token.js +186 -0
- package/dist/ids/token.js.map +1 -0
- package/dist/index.d.ts +7 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +226 -5859
- package/dist/index.js.map +1 -1
- package/dist/registry/all-tools.d.ts +14 -0
- package/dist/registry/all-tools.d.ts.map +1 -0
- package/dist/registry/all-tools.js +64 -0
- package/dist/registry/all-tools.js.map +1 -0
- package/dist/registry/context.d.ts +25 -0
- package/dist/registry/context.d.ts.map +1 -0
- package/dist/registry/context.js +31 -0
- package/dist/registry/context.js.map +1 -0
- package/dist/registry/define-tool.d.ts +15 -0
- package/dist/registry/define-tool.d.ts.map +1 -0
- package/dist/registry/define-tool.js +8 -0
- package/dist/registry/define-tool.js.map +1 -0
- package/dist/registry/index.d.ts +13 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +8 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/registry.d.ts +62 -0
- package/dist/registry/registry.d.ts.map +1 -0
- package/dist/registry/registry.js +134 -0
- package/dist/registry/registry.js.map +1 -0
- package/dist/registry/types.d.ts +98 -0
- package/dist/registry/types.d.ts.map +1 -0
- package/dist/registry/types.js +6 -0
- package/dist/registry/types.js.map +1 -0
- package/dist/search/compiler.d.ts +49 -0
- package/dist/search/compiler.d.ts.map +1 -0
- package/dist/search/compiler.js +168 -0
- package/dist/search/compiler.js.map +1 -0
- package/dist/signature.js +2 -2
- package/dist/signature.js.map +1 -1
- package/dist/state/migrate.d.ts +23 -0
- package/dist/state/migrate.d.ts.map +1 -0
- package/dist/state/migrate.js +81 -0
- package/dist/state/migrate.js.map +1 -0
- package/dist/state/schema.d.ts +27 -0
- package/dist/state/schema.d.ts.map +1 -0
- package/dist/state/schema.js +54 -0
- package/dist/state/schema.js.map +1 -0
- package/dist/state/store.d.ts +152 -0
- package/dist/state/store.d.ts.map +1 -0
- package/dist/state/store.js +317 -0
- package/dist/state/store.js.map +1 -0
- package/dist/tools/accounts.d.ts +37 -0
- package/dist/tools/accounts.d.ts.map +1 -0
- package/dist/tools/accounts.js +68 -0
- package/dist/tools/accounts.js.map +1 -0
- package/dist/tools/calendar-apple.d.ts +39 -0
- package/dist/tools/calendar-apple.d.ts.map +1 -0
- package/dist/tools/calendar-apple.js +159 -0
- package/dist/tools/calendar-apple.js.map +1 -0
- package/dist/tools/calendar-graph.d.ts +41 -0
- package/dist/tools/calendar-graph.d.ts.map +1 -0
- package/dist/tools/calendar-graph.js +298 -0
- package/dist/tools/calendar-graph.js.map +1 -0
- package/dist/tools/calendar-permissions.d.ts +10 -0
- package/dist/tools/calendar-permissions.d.ts.map +1 -1
- package/dist/tools/calendar-permissions.js +53 -0
- package/dist/tools/calendar-permissions.js.map +1 -1
- package/dist/tools/calendar.d.ts +151 -0
- package/dist/tools/calendar.d.ts.map +1 -1
- package/dist/tools/calendar.js +274 -0
- package/dist/tools/calendar.js.map +1 -1
- package/dist/tools/categories.d.ts +10 -0
- package/dist/tools/categories.d.ts.map +1 -1
- package/dist/tools/categories.js +54 -0
- package/dist/tools/categories.js.map +1 -1
- package/dist/tools/checklist-items.d.ts +10 -0
- package/dist/tools/checklist-items.d.ts.map +1 -1
- package/dist/tools/checklist-items.js +63 -0
- package/dist/tools/checklist-items.js.map +1 -1
- package/dist/tools/contact-folders.d.ts +50 -0
- package/dist/tools/contact-folders.d.ts.map +1 -0
- package/dist/tools/contact-folders.js +133 -0
- package/dist/tools/contact-folders.js.map +1 -0
- package/dist/tools/contacts-graph.d.ts +45 -0
- package/dist/tools/contacts-graph.d.ts.map +1 -0
- package/dist/tools/contacts-graph.js +172 -0
- package/dist/tools/contacts-graph.js.map +1 -0
- package/dist/tools/contacts.d.ts +66 -0
- package/dist/tools/contacts.d.ts.map +1 -1
- package/dist/tools/contacts.js +165 -0
- package/dist/tools/contacts.js.map +1 -1
- package/dist/tools/excel.d.ts +10 -0
- package/dist/tools/excel.d.ts.map +1 -1
- package/dist/tools/excel.js +73 -0
- package/dist/tools/excel.js.map +1 -1
- package/dist/tools/focused-overrides.d.ts +10 -0
- package/dist/tools/focused-overrides.d.ts.map +1 -1
- package/dist/tools/focused-overrides.js +54 -0
- package/dist/tools/focused-overrides.js.map +1 -1
- package/dist/tools/linked-resources.d.ts +10 -0
- package/dist/tools/linked-resources.d.ts.map +1 -1
- package/dist/tools/linked-resources.js +53 -0
- package/dist/tools/linked-resources.js.map +1 -1
- package/dist/tools/mail-apple.d.ts +40 -0
- package/dist/tools/mail-apple.d.ts.map +1 -0
- package/dist/tools/mail-apple.js +146 -0
- package/dist/tools/mail-apple.js.map +1 -0
- package/dist/tools/mail-graph.d.ts +38 -0
- package/dist/tools/mail-graph.d.ts.map +1 -0
- package/dist/tools/mail-graph.js +178 -0
- package/dist/tools/mail-graph.js.map +1 -0
- package/dist/tools/mail-rules.d.ts +12 -0
- package/dist/tools/mail-rules.d.ts.map +1 -1
- package/dist/tools/mail-rules.js +56 -0
- package/dist/tools/mail-rules.js.map +1 -1
- package/dist/tools/mail-send.d.ts +12 -0
- package/dist/tools/mail-send.d.ts.map +1 -1
- package/dist/tools/mail-send.js +219 -5
- package/dist/tools/mail-send.js.map +1 -1
- package/dist/tools/mail.d.ts +82 -2
- package/dist/tools/mail.d.ts.map +1 -1
- package/dist/tools/mail.js +239 -2
- package/dist/tools/mail.js.map +1 -1
- package/dist/tools/mailbox-organization.d.ts +20 -0
- package/dist/tools/mailbox-organization.d.ts.map +1 -1
- package/dist/tools/mailbox-organization.js +275 -0
- package/dist/tools/mailbox-organization.js.map +1 -1
- package/dist/tools/mailbox-settings.d.ts +59 -0
- package/dist/tools/mailbox-settings.d.ts.map +1 -0
- package/dist/tools/mailbox-settings.js +136 -0
- package/dist/tools/mailbox-settings.js.map +1 -0
- package/dist/tools/meetings.d.ts +10 -0
- package/dist/tools/meetings.d.ts.map +1 -1
- package/dist/tools/meetings.js +74 -0
- package/dist/tools/meetings.js.map +1 -1
- package/dist/tools/notes.d.ts +12 -0
- package/dist/tools/notes.d.ts.map +1 -1
- package/dist/tools/notes.js +66 -0
- package/dist/tools/notes.js.map +1 -1
- package/dist/tools/onedrive.d.ts +10 -0
- package/dist/tools/onedrive.d.ts.map +1 -1
- package/dist/tools/onedrive.js +124 -0
- package/dist/tools/onedrive.js.map +1 -1
- package/dist/tools/people.d.ts +10 -0
- package/dist/tools/people.d.ts.map +1 -1
- package/dist/tools/people.js +94 -0
- package/dist/tools/people.js.map +1 -1
- package/dist/tools/planner-visualization.d.ts +10 -0
- package/dist/tools/planner-visualization.d.ts.map +1 -1
- package/dist/tools/planner-visualization.js +53 -0
- package/dist/tools/planner-visualization.js.map +1 -1
- package/dist/tools/planner.d.ts +10 -0
- package/dist/tools/planner.d.ts.map +1 -1
- package/dist/tools/planner.js +183 -0
- package/dist/tools/planner.js.map +1 -1
- package/dist/tools/scheduling.d.ts +12 -0
- package/dist/tools/scheduling.d.ts.map +1 -1
- package/dist/tools/scheduling.js +38 -0
- package/dist/tools/scheduling.js.map +1 -1
- package/dist/tools/sharepoint.d.ts +10 -0
- package/dist/tools/sharepoint.d.ts.map +1 -1
- package/dist/tools/sharepoint.js +74 -0
- package/dist/tools/sharepoint.js.map +1 -1
- package/dist/tools/task-attachments.d.ts +10 -0
- package/dist/tools/task-attachments.d.ts.map +1 -1
- package/dist/tools/task-attachments.js +53 -0
- package/dist/tools/task-attachments.js.map +1 -1
- package/dist/tools/task-lists.d.ts +56 -0
- package/dist/tools/task-lists.d.ts.map +1 -0
- package/dist/tools/task-lists.js +151 -0
- package/dist/tools/task-lists.js.map +1 -0
- package/dist/tools/tasks-graph.d.ts +49 -0
- package/dist/tools/tasks-graph.d.ts.map +1 -0
- package/dist/tools/tasks-graph.js +191 -0
- package/dist/tools/tasks-graph.js.map +1 -0
- package/dist/tools/tasks.d.ts +127 -0
- package/dist/tools/tasks.d.ts.map +1 -1
- package/dist/tools/tasks.js +155 -0
- package/dist/tools/tasks.js.map +1 -1
- package/dist/tools/teams.d.ts +11 -0
- package/dist/tools/teams.d.ts.map +1 -1
- package/dist/tools/teams.js +254 -0
- package/dist/tools/teams.js.map +1 -1
- package/dist/utils/errors.d.ts +96 -5
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +227 -8
- package/dist/utils/errors.js.map +1 -1
- package/package.json +1 -1
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
* approval pattern for destructive delete operations.
|
|
10
10
|
*/
|
|
11
11
|
import { z } from 'zod';
|
|
12
|
+
import { defineTool } from '../registry/define-tool.js';
|
|
13
|
+
import { requireGraphToolset } from '../registry/context.js';
|
|
12
14
|
// =============================================================================
|
|
13
15
|
// Input Schemas
|
|
14
16
|
// =============================================================================
|
|
@@ -119,4 +121,55 @@ export class LinkedResourcesTools {
|
|
|
119
121
|
};
|
|
120
122
|
}
|
|
121
123
|
}
|
|
124
|
+
// =============================================================================
|
|
125
|
+
// Registry Definitions (v3 registry-driven architecture, U2)
|
|
126
|
+
// =============================================================================
|
|
127
|
+
/**
|
|
128
|
+
* Registry tool definitions for the linked-resources domain.
|
|
129
|
+
*/
|
|
130
|
+
export function linkedResourcesToolDefinitions() {
|
|
131
|
+
const tools = (ctx) => requireGraphToolset(ctx, 'linkedResources');
|
|
132
|
+
return [
|
|
133
|
+
defineTool({
|
|
134
|
+
name: 'list_linked_resources',
|
|
135
|
+
description: 'List linked resources on a To Do task (Graph API)',
|
|
136
|
+
input: ListLinkedResourcesInput,
|
|
137
|
+
annotations: { readOnlyHint: true, openWorldHint: true },
|
|
138
|
+
destructive: false,
|
|
139
|
+
presets: ['tasks'],
|
|
140
|
+
backends: ['graph'],
|
|
141
|
+
handler: (ctx, params) => tools(ctx).listLinkedResources(params),
|
|
142
|
+
}),
|
|
143
|
+
defineTool({
|
|
144
|
+
name: 'create_linked_resource',
|
|
145
|
+
description: 'Create a linked resource on a To Do task (Graph API)',
|
|
146
|
+
input: CreateLinkedResourceInput,
|
|
147
|
+
annotations: { readOnlyHint: false, destructiveHint: false, openWorldHint: true },
|
|
148
|
+
destructive: false,
|
|
149
|
+
presets: ['tasks'],
|
|
150
|
+
backends: ['graph'],
|
|
151
|
+
handler: (ctx, params) => tools(ctx).createLinkedResource(params),
|
|
152
|
+
}),
|
|
153
|
+
defineTool({
|
|
154
|
+
name: 'prepare_delete_linked_resource',
|
|
155
|
+
description: 'Prepare to delete a linked resource. Returns an approval token. Call confirm_delete_linked_resource to execute. (Graph API)',
|
|
156
|
+
input: PrepareDeleteLinkedResourceInput,
|
|
157
|
+
annotations: { readOnlyHint: false, destructiveHint: false, openWorldHint: true },
|
|
158
|
+
destructive: true,
|
|
159
|
+
presets: ['tasks'],
|
|
160
|
+
backends: ['graph'],
|
|
161
|
+
handler: (ctx, params) => tools(ctx).prepareDeleteLinkedResource(params),
|
|
162
|
+
}),
|
|
163
|
+
defineTool({
|
|
164
|
+
name: 'confirm_delete_linked_resource',
|
|
165
|
+
description: 'Confirm deletion of a linked resource with approval token (Graph API)',
|
|
166
|
+
input: ConfirmDeleteLinkedResourceInput,
|
|
167
|
+
annotations: { readOnlyHint: false, destructiveHint: true, openWorldHint: true },
|
|
168
|
+
destructive: true,
|
|
169
|
+
presets: ['tasks'],
|
|
170
|
+
backends: ['graph'],
|
|
171
|
+
handler: (ctx, params) => tools(ctx).confirmDeleteLinkedResource(params),
|
|
172
|
+
}),
|
|
173
|
+
];
|
|
174
|
+
}
|
|
122
175
|
//# sourceMappingURL=linked-resources.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linked-resources.js","sourceRoot":"","sources":["../../src/tools/linked-resources.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"linked-resources.js","sourceRoot":"","sources":["../../src/tools/linked-resources.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 JBC Tech Solutions, LLC
|
|
3
|
+
* Licensed under the MIT License. See LICENSE file in the project root.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* AppleScript-backend mail tools (v3 registry-driven architecture, U2 — dual
|
|
7
|
+
* backend). Holds the mail READ logic that previously lived inline in the
|
|
8
|
+
* `handleAppleScriptToolCall` switch, so the registry handlers stay thin and
|
|
9
|
+
* branch on `ctx.backend`.
|
|
10
|
+
*
|
|
11
|
+
* The advertised (canonical) schemas are Graph-shaped (Graph is the default
|
|
12
|
+
* backend). This backend receives the superset params and maps only the fields
|
|
13
|
+
* it supports, exactly as the pre-registry dispatch did.
|
|
14
|
+
*/
|
|
15
|
+
import type { MailTools } from './mail.js';
|
|
16
|
+
import type { ListFoldersToolParams, ListEmailsParams, SearchEmailsParams, GetEmailParams, GetEmailsParams, GetUnreadCountParams, ListAttachmentsParams, DownloadAttachmentParams } from './mail.js';
|
|
17
|
+
import type { IAccountRepository, IMailSender } from '../applescript/index.js';
|
|
18
|
+
import type { ToolResult } from '../registry/types.js';
|
|
19
|
+
import type { SendEmailParams } from './mail.js';
|
|
20
|
+
/**
|
|
21
|
+
* AppleScript mail tools. Each method mirrors the extracted inline AppleScript
|
|
22
|
+
* case body and returns an MCP `ToolResult`.
|
|
23
|
+
*/
|
|
24
|
+
export declare class AppleMailTools {
|
|
25
|
+
private readonly mailTools;
|
|
26
|
+
private readonly accountRepository;
|
|
27
|
+
private readonly mailSender;
|
|
28
|
+
constructor(mailTools: MailTools, accountRepository: IAccountRepository, mailSender: IMailSender | null);
|
|
29
|
+
/** Single-shot send via the AppleScript mail sender (Graph uses two-phase). */
|
|
30
|
+
sendEmail(params: SendEmailParams): ToolResult;
|
|
31
|
+
listFolders(params: ListFoldersToolParams): ToolResult;
|
|
32
|
+
listEmails(params: ListEmailsParams): ToolResult;
|
|
33
|
+
searchEmails(params: SearchEmailsParams): ToolResult;
|
|
34
|
+
getEmail(params: GetEmailParams): ToolResult;
|
|
35
|
+
getEmails(params: GetEmailsParams): ToolResult;
|
|
36
|
+
getUnreadCount(params: GetUnreadCountParams): ToolResult;
|
|
37
|
+
listAttachments(params: ListAttachmentsParams): ToolResult;
|
|
38
|
+
downloadAttachment(params: DownloadAttachmentParams): ToolResult;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=mail-apple.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mail-apple.d.ts","sourceRoot":"","sources":["../../src/tools/mail-apple.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EACV,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,wBAAwB,EACzB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAA6B,MAAM,yBAAyB,CAAC;AAC1G,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AA0CjD;;;GAGG;AACH,qBAAa,cAAc;IAEvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAFV,SAAS,EAAE,SAAS,EACpB,iBAAiB,EAAE,kBAAkB,EACrC,UAAU,EAAE,WAAW,GAAG,IAAI;IAGjD,+EAA+E;IAC/E,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,UAAU;IAiC9C,WAAW,CAAC,MAAM,EAAE,qBAAqB,GAAG,UAAU;IAmCtD,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU;IAIhD,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,UAAU;IAIpD,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,UAAU;IAQ5C,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,UAAU;IAS9C,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,UAAU;IAIxD,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,UAAU;IAI1D,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,GAAG,UAAU;CAGjE"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 JBC Tech Solutions, LLC
|
|
3
|
+
* Licensed under the MIT License. See LICENSE file in the project root.
|
|
4
|
+
*/
|
|
5
|
+
function jsonResult(data) {
|
|
6
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Resolves an account_id parameter to an array of account IDs. Self-contained
|
|
10
|
+
* copy of the legacy dispatch helper (the original stays in index.ts, where it
|
|
11
|
+
* is still used by the account tools).
|
|
12
|
+
*
|
|
13
|
+
* - undefined → [defaultAccountId]
|
|
14
|
+
* - "all" → all account IDs
|
|
15
|
+
* - number → [number]
|
|
16
|
+
* - number[] → number[]
|
|
17
|
+
*/
|
|
18
|
+
function resolveAccountIds(accountId, accountRepository) {
|
|
19
|
+
if (accountId === undefined) {
|
|
20
|
+
const defaultId = accountRepository.getDefaultAccountId();
|
|
21
|
+
return defaultId !== null ? [defaultId] : [];
|
|
22
|
+
}
|
|
23
|
+
if (accountId === 'all') {
|
|
24
|
+
const accounts = accountRepository.listAccounts();
|
|
25
|
+
return accounts.map(acc => acc.id);
|
|
26
|
+
}
|
|
27
|
+
if (typeof accountId === 'number') {
|
|
28
|
+
return [accountId];
|
|
29
|
+
}
|
|
30
|
+
if (Array.isArray(accountId)) {
|
|
31
|
+
return accountId;
|
|
32
|
+
}
|
|
33
|
+
const defaultId = accountRepository.getDefaultAccountId();
|
|
34
|
+
return defaultId !== null ? [defaultId] : [];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* AppleScript mail tools. Each method mirrors the extracted inline AppleScript
|
|
38
|
+
* case body and returns an MCP `ToolResult`.
|
|
39
|
+
*/
|
|
40
|
+
export class AppleMailTools {
|
|
41
|
+
mailTools;
|
|
42
|
+
accountRepository;
|
|
43
|
+
mailSender;
|
|
44
|
+
constructor(mailTools, accountRepository, mailSender) {
|
|
45
|
+
this.mailTools = mailTools;
|
|
46
|
+
this.accountRepository = accountRepository;
|
|
47
|
+
this.mailSender = mailSender;
|
|
48
|
+
}
|
|
49
|
+
/** Single-shot send via the AppleScript mail sender (Graph uses two-phase). */
|
|
50
|
+
sendEmail(params) {
|
|
51
|
+
if (this.mailSender == null) {
|
|
52
|
+
return { content: [{ type: 'text', text: 'Email sending is not available' }], isError: true };
|
|
53
|
+
}
|
|
54
|
+
let sendParams = {
|
|
55
|
+
to: params.to,
|
|
56
|
+
subject: params.subject,
|
|
57
|
+
body: params.body,
|
|
58
|
+
bodyType: params.body_type ?? 'plain',
|
|
59
|
+
};
|
|
60
|
+
if (params.cc != null)
|
|
61
|
+
sendParams = { ...sendParams, cc: params.cc };
|
|
62
|
+
if (params.bcc != null)
|
|
63
|
+
sendParams = { ...sendParams, bcc: params.bcc };
|
|
64
|
+
if (params.reply_to != null)
|
|
65
|
+
sendParams = { ...sendParams, replyTo: params.reply_to };
|
|
66
|
+
if (params.attachments != null) {
|
|
67
|
+
sendParams = {
|
|
68
|
+
...sendParams,
|
|
69
|
+
attachments: params.attachments.map((a) => (a.name != null ? { path: a.path, name: a.name } : { path: a.path })),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
if (params.inline_images != null) {
|
|
73
|
+
sendParams = {
|
|
74
|
+
...sendParams,
|
|
75
|
+
inlineImages: params.inline_images.map((img) => ({ path: img.path, contentId: img.content_id })),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
if (params.account_id != null)
|
|
79
|
+
sendParams = { ...sendParams, accountId: params.account_id };
|
|
80
|
+
const sent = this.mailSender.sendEmail(sendParams);
|
|
81
|
+
return {
|
|
82
|
+
content: [{ type: 'text', text: JSON.stringify({ message_id: sent.messageId, sent_at: sent.sentAt, status: 'sent' }, null, 2) }],
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
listFolders(params) {
|
|
86
|
+
const accountIds = resolveAccountIds(params.account_id, this.accountRepository);
|
|
87
|
+
// If querying multiple accounts, use grouped format
|
|
88
|
+
if (accountIds.length > 1 || params.account_id === 'all') {
|
|
89
|
+
const foldersWithAccount = this.accountRepository.listMailFoldersByAccounts(accountIds);
|
|
90
|
+
const accounts = this.accountRepository.listAccounts();
|
|
91
|
+
// Group folders by account
|
|
92
|
+
const groupedByAccount = accountIds.map(accountId => {
|
|
93
|
+
const account = accounts.find(a => a.id === accountId);
|
|
94
|
+
const folders = foldersWithAccount
|
|
95
|
+
.filter(f => f.accountId === accountId)
|
|
96
|
+
.map(f => ({
|
|
97
|
+
id: f.id,
|
|
98
|
+
name: f.name,
|
|
99
|
+
unreadCount: f.unreadCount,
|
|
100
|
+
messageCount: f.messageCount,
|
|
101
|
+
}));
|
|
102
|
+
return {
|
|
103
|
+
account_id: accountId,
|
|
104
|
+
account_name: account?.name ?? null,
|
|
105
|
+
account_email: account?.email ?? null,
|
|
106
|
+
folders,
|
|
107
|
+
};
|
|
108
|
+
});
|
|
109
|
+
return jsonResult({ accounts: groupedByAccount });
|
|
110
|
+
}
|
|
111
|
+
// Single account - use existing format for backward compatibility
|
|
112
|
+
return jsonResult(this.mailTools.listFolders({}));
|
|
113
|
+
}
|
|
114
|
+
listEmails(params) {
|
|
115
|
+
return jsonResult(this.mailTools.listEmails(params));
|
|
116
|
+
}
|
|
117
|
+
searchEmails(params) {
|
|
118
|
+
return jsonResult(this.mailTools.searchEmails(params));
|
|
119
|
+
}
|
|
120
|
+
getEmail(params) {
|
|
121
|
+
const result = this.mailTools.getEmail(params);
|
|
122
|
+
if (result == null) {
|
|
123
|
+
return { content: [{ type: 'text', text: 'Email not found' }], isError: true };
|
|
124
|
+
}
|
|
125
|
+
return jsonResult(result);
|
|
126
|
+
}
|
|
127
|
+
getEmails(params) {
|
|
128
|
+
const results = params.email_ids.map((id) => {
|
|
129
|
+
const email = this.mailTools.getEmail({ email_id: id, include_body: params.include_body, strip_html: params.strip_html });
|
|
130
|
+
if (email == null)
|
|
131
|
+
return { id, error: 'Not found' };
|
|
132
|
+
return email;
|
|
133
|
+
});
|
|
134
|
+
return jsonResult({ emails: results });
|
|
135
|
+
}
|
|
136
|
+
getUnreadCount(params) {
|
|
137
|
+
return jsonResult(this.mailTools.getUnreadCount(params));
|
|
138
|
+
}
|
|
139
|
+
listAttachments(params) {
|
|
140
|
+
return jsonResult(this.mailTools.listAttachments(params));
|
|
141
|
+
}
|
|
142
|
+
downloadAttachment(params) {
|
|
143
|
+
return jsonResult(this.mailTools.downloadAttachment(params));
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=mail-apple.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mail-apple.js","sourceRoot":"","sources":["../../src/tools/mail-apple.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 JBC Tech Solutions, LLC
|
|
3
|
+
* Licensed under the MIT License. See LICENSE file in the project root.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Graph-backend mail tools (v3 registry-driven architecture, U2 — dual
|
|
7
|
+
* backend). Holds the mail READ logic that previously lived inline in the
|
|
8
|
+
* `handleGraphToolCall` switch, so the registry handlers stay thin and branch
|
|
9
|
+
* on `ctx.backend`.
|
|
10
|
+
*/
|
|
11
|
+
import type { GraphRepository } from '../graph/repository.js';
|
|
12
|
+
import type { GraphContentReaders } from '../graph/content-readers.js';
|
|
13
|
+
import type { ToolResult } from '../registry/types.js';
|
|
14
|
+
import type { ListFoldersToolParams, ListEmailsParams, SearchEmailsParams, GetEmailParams, GetEmailsParams, GetUnreadCountParams, ListAttachmentsParams, DownloadAttachmentParams, SearchEmailsAdvancedParams, CheckNewEmailsParams, ListConversationParams, GetMessageHeadersParams, GetMessageMimeParams, GetMailTipsParams } from './mail.js';
|
|
15
|
+
/**
|
|
16
|
+
* Graph mail tools. Each method mirrors the extracted inline graph case body
|
|
17
|
+
* and returns an MCP `ToolResult`.
|
|
18
|
+
*/
|
|
19
|
+
export declare class GraphMailTools {
|
|
20
|
+
private readonly repository;
|
|
21
|
+
private readonly contentReaders;
|
|
22
|
+
constructor(repository: GraphRepository, contentReaders: GraphContentReaders);
|
|
23
|
+
listFolders(_params: ListFoldersToolParams): Promise<ToolResult>;
|
|
24
|
+
listEmails(params: ListEmailsParams): Promise<ToolResult>;
|
|
25
|
+
searchEmails(params: SearchEmailsParams): Promise<ToolResult>;
|
|
26
|
+
getEmail(params: GetEmailParams): Promise<ToolResult>;
|
|
27
|
+
getEmails(params: GetEmailsParams): Promise<ToolResult>;
|
|
28
|
+
getUnreadCount(params: GetUnreadCountParams): Promise<ToolResult>;
|
|
29
|
+
listAttachments(params: ListAttachmentsParams): Promise<ToolResult>;
|
|
30
|
+
downloadAttachment(params: DownloadAttachmentParams): Promise<ToolResult>;
|
|
31
|
+
searchEmailsAdvanced(params: SearchEmailsAdvancedParams): Promise<ToolResult>;
|
|
32
|
+
checkNewEmails(params: CheckNewEmailsParams): Promise<ToolResult>;
|
|
33
|
+
listConversation(params: ListConversationParams): Promise<ToolResult>;
|
|
34
|
+
getMessageHeaders(params: GetMessageHeadersParams): Promise<ToolResult>;
|
|
35
|
+
getMessageMime(params: GetMessageMimeParams): Promise<ToolResult>;
|
|
36
|
+
getMailTips(params: GetMailTipsParams): Promise<ToolResult>;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=mail-graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mail-graph.d.ts","sourceRoot":"","sources":["../../src/tools/mail-graph.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAIvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EACV,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,wBAAwB,EACxB,0BAA0B,EAC1B,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,WAAW,CAAC;AAgGnB;;;GAGG;AACH,qBAAa,cAAc;IAEvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,cAAc;gBADd,UAAU,EAAE,eAAe,EAC3B,cAAc,EAAE,mBAAmB;IAGhD,WAAW,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC;IAKhE,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IAOzD,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;IAO7D,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC;IAiBrD,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC;IAgBvD,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,UAAU,CAAC;IAOjE,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC;IAKnE,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,UAAU,CAAC;IAKzE,oBAAoB,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAAC,UAAU,CAAC;IAS7E,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,UAAU,CAAC;IASjE,gBAAgB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC;IAKrE,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,UAAU,CAAC;IAKvE,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,UAAU,CAAC;IAKjE,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;CAIlE"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 JBC Tech Solutions, LLC
|
|
3
|
+
* Licensed under the MIT License. See LICENSE file in the project root.
|
|
4
|
+
*/
|
|
5
|
+
import { unixTimestampToLocalIso } from '../graph/mappers/utils.js';
|
|
6
|
+
import { compileEmailSearch } from '../search/compiler.js';
|
|
7
|
+
function jsonResult(data) {
|
|
8
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Transforms a folder row into the shape returned by the graph backend's
|
|
12
|
+
* `list_folders` tool. Self-contained copy of the legacy graph-mode transform.
|
|
13
|
+
*/
|
|
14
|
+
function transformFolderRow(row) {
|
|
15
|
+
return {
|
|
16
|
+
id: row.id,
|
|
17
|
+
name: row.name ?? 'Unnamed',
|
|
18
|
+
parentId: row.parentId,
|
|
19
|
+
specialType: row.specialType,
|
|
20
|
+
folderType: row.folderType,
|
|
21
|
+
accountId: row.accountId,
|
|
22
|
+
messageCount: row.messageCount,
|
|
23
|
+
unreadCount: row.unreadCount,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Transforms an email row into the shape returned by the graph backend's mail
|
|
28
|
+
* READ tools. Uses Unix timestamps (not Apple epoch). Self-contained copy of
|
|
29
|
+
* the legacy graph-mode transform.
|
|
30
|
+
*/
|
|
31
|
+
function transformEmailRow(row) {
|
|
32
|
+
return {
|
|
33
|
+
id: row.id,
|
|
34
|
+
folderId: row.folderId,
|
|
35
|
+
subject: row.subject,
|
|
36
|
+
sender: row.sender,
|
|
37
|
+
senderAddress: row.senderAddress,
|
|
38
|
+
preview: row.preview,
|
|
39
|
+
isRead: row.isRead === 1,
|
|
40
|
+
timeReceived: unixTimestampToLocalIso(row.timeReceived),
|
|
41
|
+
timeSent: unixTimestampToLocalIso(row.timeSent),
|
|
42
|
+
hasAttachment: row.hasAttachment === 1,
|
|
43
|
+
priority: row.priority,
|
|
44
|
+
flagStatus: row.flagStatus,
|
|
45
|
+
categories: parseEmailCategories(row.categories),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function parseEmailCategories(buffer) {
|
|
49
|
+
if (buffer == null || buffer.length === 0)
|
|
50
|
+
return [];
|
|
51
|
+
try {
|
|
52
|
+
const text = buffer.toString('utf-8');
|
|
53
|
+
return text.includes('\0')
|
|
54
|
+
? text.split('\0').filter(s => s.length > 0)
|
|
55
|
+
: text.split(',').map(s => s.trim()).filter(s => s.length > 0);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function stripHtml(html) {
|
|
62
|
+
return html
|
|
63
|
+
.replace(/<style[^>]*>[\s\S]*?<\/style>/gi, '')
|
|
64
|
+
.replace(/<script[^>]*>[\s\S]*?<\/script>/gi, '')
|
|
65
|
+
.replace(/<[^>]+>/g, ' ')
|
|
66
|
+
.replace(/ /g, ' ')
|
|
67
|
+
.replace(/&/g, '&')
|
|
68
|
+
.replace(/</g, '<')
|
|
69
|
+
.replace(/>/g, '>')
|
|
70
|
+
.replace(/"/g, '"')
|
|
71
|
+
.replace(/'/g, "'")
|
|
72
|
+
.replace(/\s+/g, ' ')
|
|
73
|
+
.trim();
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Graph mail tools. Each method mirrors the extracted inline graph case body
|
|
77
|
+
* and returns an MCP `ToolResult`.
|
|
78
|
+
*/
|
|
79
|
+
export class GraphMailTools {
|
|
80
|
+
repository;
|
|
81
|
+
contentReaders;
|
|
82
|
+
constructor(repository, contentReaders) {
|
|
83
|
+
this.repository = repository;
|
|
84
|
+
this.contentReaders = contentReaders;
|
|
85
|
+
}
|
|
86
|
+
async listFolders(_params) {
|
|
87
|
+
const folders = await this.repository.listFoldersAsync();
|
|
88
|
+
return jsonResult({ folders: folders.map(transformFolderRow) });
|
|
89
|
+
}
|
|
90
|
+
async listEmails(params) {
|
|
91
|
+
const emails = params.unread_only
|
|
92
|
+
? await this.repository.listUnreadEmailsAsync(params.folder_id, params.limit, params.offset)
|
|
93
|
+
: await this.repository.listEmailsAsync(params.folder_id, params.limit, params.offset);
|
|
94
|
+
return jsonResult({ emails: emails.map(transformEmailRow) });
|
|
95
|
+
}
|
|
96
|
+
async searchEmails(params) {
|
|
97
|
+
const emails = params.folder_id != null
|
|
98
|
+
? await this.repository.searchEmailsInFolderAsync(params.folder_id, params.query, params.limit)
|
|
99
|
+
: await this.repository.searchEmailsAsync(params.query, params.limit);
|
|
100
|
+
return jsonResult({ emails: emails.map(transformEmailRow) });
|
|
101
|
+
}
|
|
102
|
+
async getEmail(params) {
|
|
103
|
+
const email = await this.repository.getEmailAsync(params.email_id);
|
|
104
|
+
if (email == null) {
|
|
105
|
+
return { content: [{ type: 'text', text: 'Email not found' }], isError: true };
|
|
106
|
+
}
|
|
107
|
+
let body = null;
|
|
108
|
+
if (params.include_body) {
|
|
109
|
+
body = await this.contentReaders.email.readEmailBodyAsync(email.dataFilePath);
|
|
110
|
+
if (params.strip_html && body != null) {
|
|
111
|
+
body = stripHtml(body);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return jsonResult({ ...transformEmailRow(email), body });
|
|
115
|
+
}
|
|
116
|
+
async getEmails(params) {
|
|
117
|
+
const results = await Promise.all(params.email_ids.map(async (id) => {
|
|
118
|
+
const email = await this.repository.getEmailAsync(id);
|
|
119
|
+
if (email == null)
|
|
120
|
+
return { id, error: 'Not found' };
|
|
121
|
+
let body = null;
|
|
122
|
+
if (params.include_body) {
|
|
123
|
+
body = await this.contentReaders.email.readEmailBodyAsync(email.dataFilePath);
|
|
124
|
+
if (params.strip_html && body != null)
|
|
125
|
+
body = stripHtml(body);
|
|
126
|
+
}
|
|
127
|
+
return { ...transformEmailRow(email), body };
|
|
128
|
+
}));
|
|
129
|
+
return jsonResult({ emails: results });
|
|
130
|
+
}
|
|
131
|
+
async getUnreadCount(params) {
|
|
132
|
+
const count = params.folder_id != null
|
|
133
|
+
? await this.repository.getUnreadCountByFolderAsync(params.folder_id)
|
|
134
|
+
: await this.repository.getUnreadCountAsync();
|
|
135
|
+
return jsonResult({ total: count });
|
|
136
|
+
}
|
|
137
|
+
async listAttachments(params) {
|
|
138
|
+
const attachments = await this.repository.listAttachmentsAsync(params.email_id);
|
|
139
|
+
return jsonResult({ attachments });
|
|
140
|
+
}
|
|
141
|
+
async downloadAttachment(params) {
|
|
142
|
+
const result = await this.repository.downloadAttachmentAsync(params.attachment_index);
|
|
143
|
+
return jsonResult(result);
|
|
144
|
+
}
|
|
145
|
+
async searchEmailsAdvanced(params) {
|
|
146
|
+
const { limit, ...criteria } = params;
|
|
147
|
+
// Compile structured criteria to the correct Graph mechanism (U7/D9). An
|
|
148
|
+
// empty or malformed-date query throws a typed VALIDATION error → envelope.
|
|
149
|
+
const compiled = compileEmailSearch(criteria);
|
|
150
|
+
const emails = await this.repository.searchEmailsStructuredAsync(compiled, limit);
|
|
151
|
+
return jsonResult({ emails: emails.map(transformEmailRow) });
|
|
152
|
+
}
|
|
153
|
+
async checkNewEmails(params) {
|
|
154
|
+
const deltaResult = await this.repository.checkNewEmailsAsync(params.folder_id);
|
|
155
|
+
return jsonResult({
|
|
156
|
+
emails: deltaResult.emails.map(transformEmailRow),
|
|
157
|
+
is_initial_sync: deltaResult.isInitialSync,
|
|
158
|
+
count: deltaResult.emails.length,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
async listConversation(params) {
|
|
162
|
+
const emails = await this.repository.listConversationAsync(params.message_id, params.limit);
|
|
163
|
+
return jsonResult({ emails: emails.map(transformEmailRow) });
|
|
164
|
+
}
|
|
165
|
+
async getMessageHeaders(params) {
|
|
166
|
+
const headers = await this.repository.getMessageHeadersAsync(params.email_id);
|
|
167
|
+
return jsonResult({ headers });
|
|
168
|
+
}
|
|
169
|
+
async getMessageMime(params) {
|
|
170
|
+
const result = await this.repository.getMessageMimeAsync(params.email_id);
|
|
171
|
+
return jsonResult({ success: true, file_path: result.filePath });
|
|
172
|
+
}
|
|
173
|
+
async getMailTips(params) {
|
|
174
|
+
const tips = await this.repository.getMailTipsAsync(params.email_addresses);
|
|
175
|
+
return jsonResult({ mail_tips: tips });
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=mail-graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mail-graph.js","sourceRoot":"","sources":["../../src/tools/mail-graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,12 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import { z } from 'zod';
|
|
12
12
|
import type { ApprovalTokenManager } from '../approval/index.js';
|
|
13
|
+
import type { ToolDefinition } from '../registry/types.js';
|
|
14
|
+
declare module '../registry/types.js' {
|
|
15
|
+
interface GraphToolsets {
|
|
16
|
+
rules: MailRulesTools;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
13
19
|
export declare const CreateMailRuleInput: z.ZodObject<{
|
|
14
20
|
display_name: z.ZodString;
|
|
15
21
|
sequence: z.ZodOptional<z.ZodNumber>;
|
|
@@ -95,4 +101,10 @@ export declare class MailRulesTools {
|
|
|
95
101
|
}>;
|
|
96
102
|
}>;
|
|
97
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* Registry tool definitions for the mail-rules domain. Handlers close over the
|
|
106
|
+
* live MailRulesTools instance resolved from the runtime context after the
|
|
107
|
+
* Graph backend is initialized.
|
|
108
|
+
*/
|
|
109
|
+
export declare function mailRulesToolDefinitions(): ToolDefinition[];
|
|
98
110
|
//# sourceMappingURL=mail-rules.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mail-rules.d.ts","sourceRoot":"","sources":["../../src/tools/mail-rules.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"mail-rules.d.ts","sourceRoot":"","sources":["../../src/tools/mail-rules.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAGjE,OAAO,KAAK,EAAe,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAIxE,OAAO,QAAQ,sBAAsB,CAAC;IACpC,UAAU,aAAa;QACrB,KAAK,EAAE,cAAc,CAAC;KACvB;CACF;AAMD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAoB9B,CAAC;AAEH,eAAO,MAAM,0BAA0B;;kBAErC,CAAC;AAEH,eAAO,MAAM,0BAA0B;;;kBAGrC,CAAC;AAMH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACvE,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AACrF,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAMrF,MAAM,WAAW,oBAAoB;IACnC,kBAAkB,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC,CAAC;IACvJ,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpE,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,oFAAoF;IACpF,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACxD;AAMD;;GAEG;AACH,qBAAa,cAAc;IAEvB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,YAAY;gBADZ,IAAI,EAAE,oBAAoB,EAC1B,YAAY,EAAE,oBAAoB;IAG/C,aAAa,IAAI,OAAO,CAAC;QAC7B,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAChD,CAAC;IAUI,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC;QAC1D,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAChD,CAAC;IAiDF,qBAAqB,CAAC,MAAM,EAAE,2BAA2B,GAAG;QAC1D,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAChD;IAqBK,qBAAqB,CAAC,MAAM,EAAE,2BAA2B,GAAG,OAAO,CAAC;QACxE,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAChD,CAAC;CA6BH;AAQD;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,cAAc,EAAE,CA6C3D"}
|
package/dist/tools/mail-rules.js
CHANGED
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
* approval pattern for destructive delete operations.
|
|
10
10
|
*/
|
|
11
11
|
import { z } from 'zod';
|
|
12
|
+
import { defineTool } from '../registry/define-tool.js';
|
|
13
|
+
import { requireGraphToolset } from '../registry/context.js';
|
|
12
14
|
// =============================================================================
|
|
13
15
|
// Input Schemas
|
|
14
16
|
// =============================================================================
|
|
@@ -166,4 +168,58 @@ export class MailRulesTools {
|
|
|
166
168
|
};
|
|
167
169
|
}
|
|
168
170
|
}
|
|
171
|
+
// =============================================================================
|
|
172
|
+
// Registry Definitions (v3 registry-driven architecture, U1 pilot)
|
|
173
|
+
// =============================================================================
|
|
174
|
+
const NoInput = z.strictObject({});
|
|
175
|
+
/**
|
|
176
|
+
* Registry tool definitions for the mail-rules domain. Handlers close over the
|
|
177
|
+
* live MailRulesTools instance resolved from the runtime context after the
|
|
178
|
+
* Graph backend is initialized.
|
|
179
|
+
*/
|
|
180
|
+
export function mailRulesToolDefinitions() {
|
|
181
|
+
const tools = (ctx) => requireGraphToolset(ctx, 'rules');
|
|
182
|
+
return [
|
|
183
|
+
defineTool({
|
|
184
|
+
name: 'list_mail_rules',
|
|
185
|
+
description: 'List all inbox mail rules (Graph API)',
|
|
186
|
+
input: NoInput,
|
|
187
|
+
annotations: { readOnlyHint: true, openWorldHint: true },
|
|
188
|
+
destructive: false,
|
|
189
|
+
presets: ['mail'],
|
|
190
|
+
backends: ['graph'],
|
|
191
|
+
handler: (ctx) => tools(ctx).listMailRules(),
|
|
192
|
+
}),
|
|
193
|
+
defineTool({
|
|
194
|
+
name: 'create_mail_rule',
|
|
195
|
+
description: 'Create an inbox mail rule with conditions and actions (Graph API)',
|
|
196
|
+
input: CreateMailRuleInput,
|
|
197
|
+
annotations: { readOnlyHint: false, destructiveHint: false, openWorldHint: true },
|
|
198
|
+
destructive: false,
|
|
199
|
+
presets: ['mail'],
|
|
200
|
+
backends: ['graph'],
|
|
201
|
+
handler: (ctx, params) => tools(ctx).createMailRule(params),
|
|
202
|
+
}),
|
|
203
|
+
defineTool({
|
|
204
|
+
name: 'prepare_delete_mail_rule',
|
|
205
|
+
description: 'Prepare to delete a mail rule. Returns a preview and approval token. Call confirm_delete_mail_rule to execute. (Graph API)',
|
|
206
|
+
input: PrepareDeleteMailRuleInput,
|
|
207
|
+
annotations: { readOnlyHint: false, destructiveHint: false, openWorldHint: true },
|
|
208
|
+
destructive: true,
|
|
209
|
+
presets: ['mail'],
|
|
210
|
+
backends: ['graph'],
|
|
211
|
+
handler: (ctx, params) => tools(ctx).prepareDeleteMailRule(params),
|
|
212
|
+
}),
|
|
213
|
+
defineTool({
|
|
214
|
+
name: 'confirm_delete_mail_rule',
|
|
215
|
+
description: 'Confirm mail rule deletion with approval token (Graph API)',
|
|
216
|
+
input: ConfirmDeleteMailRuleInput,
|
|
217
|
+
annotations: { readOnlyHint: false, destructiveHint: true, openWorldHint: true },
|
|
218
|
+
destructive: true,
|
|
219
|
+
presets: ['mail'],
|
|
220
|
+
backends: ['graph'],
|
|
221
|
+
handler: (ctx, params) => tools(ctx).confirmDeleteMailRule(params),
|
|
222
|
+
}),
|
|
223
|
+
];
|
|
224
|
+
}
|
|
169
225
|
//# sourceMappingURL=mail-rules.js.map
|