awolve-myoffice-cli 1.1.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.
Files changed (94) hide show
  1. package/README.md +205 -0
  2. package/dist/auth/cache-plugin.d.ts +20 -0
  3. package/dist/auth/cache-plugin.d.ts.map +1 -0
  4. package/dist/auth/cache-plugin.js +49 -0
  5. package/dist/auth/cache-plugin.js.map +1 -0
  6. package/dist/auth/config.d.ts +22 -0
  7. package/dist/auth/config.d.ts.map +1 -0
  8. package/dist/auth/config.js +64 -0
  9. package/dist/auth/config.js.map +1 -0
  10. package/dist/auth/device-code.d.ts +2 -0
  11. package/dist/auth/device-code.d.ts.map +1 -0
  12. package/dist/auth/device-code.js +38 -0
  13. package/dist/auth/device-code.js.map +1 -0
  14. package/dist/auth/index.d.ts +4 -0
  15. package/dist/auth/index.d.ts.map +1 -0
  16. package/dist/auth/index.js +4 -0
  17. package/dist/auth/index.js.map +1 -0
  18. package/dist/auth/login.d.ts +7 -0
  19. package/dist/auth/login.d.ts.map +1 -0
  20. package/dist/auth/login.js +22 -0
  21. package/dist/auth/login.js.map +1 -0
  22. package/dist/auth/token-manager.d.ts +4 -0
  23. package/dist/auth/token-manager.d.ts.map +1 -0
  24. package/dist/auth/token-manager.js +78 -0
  25. package/dist/auth/token-manager.js.map +1 -0
  26. package/dist/cli/formatter.d.ts +5 -0
  27. package/dist/cli/formatter.d.ts.map +1 -0
  28. package/dist/cli/formatter.js +317 -0
  29. package/dist/cli/formatter.js.map +1 -0
  30. package/dist/cli.d.ts +3 -0
  31. package/dist/cli.d.ts.map +1 -0
  32. package/dist/cli.js +802 -0
  33. package/dist/cli.js.map +1 -0
  34. package/dist/core/handler.d.ts +8 -0
  35. package/dist/core/handler.d.ts.map +1 -0
  36. package/dist/core/handler.js +289 -0
  37. package/dist/core/handler.js.map +1 -0
  38. package/dist/index.d.ts +3 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +819 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/tools/calendar.d.ts +124 -0
  43. package/dist/tools/calendar.d.ts.map +1 -0
  44. package/dist/tools/calendar.js +129 -0
  45. package/dist/tools/calendar.js.map +1 -0
  46. package/dist/tools/chats.d.ts +66 -0
  47. package/dist/tools/chats.d.ts.map +1 -0
  48. package/dist/tools/chats.js +102 -0
  49. package/dist/tools/chats.js.map +1 -0
  50. package/dist/tools/contacts.d.ts +119 -0
  51. package/dist/tools/contacts.d.ts.map +1 -0
  52. package/dist/tools/contacts.js +136 -0
  53. package/dist/tools/contacts.js.map +1 -0
  54. package/dist/tools/index.d.ts +10 -0
  55. package/dist/tools/index.d.ts.map +1 -0
  56. package/dist/tools/index.js +10 -0
  57. package/dist/tools/index.js.map +1 -0
  58. package/dist/tools/mail.d.ts +138 -0
  59. package/dist/tools/mail.d.ts.map +1 -0
  60. package/dist/tools/mail.js +187 -0
  61. package/dist/tools/mail.js.map +1 -0
  62. package/dist/tools/onedrive.d.ts +107 -0
  63. package/dist/tools/onedrive.d.ts.map +1 -0
  64. package/dist/tools/onedrive.js +136 -0
  65. package/dist/tools/onedrive.js.map +1 -0
  66. package/dist/tools/planner.d.ts +261 -0
  67. package/dist/tools/planner.d.ts.map +1 -0
  68. package/dist/tools/planner.js +401 -0
  69. package/dist/tools/planner.js.map +1 -0
  70. package/dist/tools/sharepoint.d.ts +138 -0
  71. package/dist/tools/sharepoint.d.ts.map +1 -0
  72. package/dist/tools/sharepoint.js +156 -0
  73. package/dist/tools/sharepoint.js.map +1 -0
  74. package/dist/tools/tasks.d.ts +107 -0
  75. package/dist/tools/tasks.d.ts.map +1 -0
  76. package/dist/tools/tasks.js +131 -0
  77. package/dist/tools/tasks.js.map +1 -0
  78. package/dist/tools/teams.d.ts +66 -0
  79. package/dist/tools/teams.d.ts.map +1 -0
  80. package/dist/tools/teams.js +69 -0
  81. package/dist/tools/teams.js.map +1 -0
  82. package/dist/utils/graph-client.d.ts +10 -0
  83. package/dist/utils/graph-client.d.ts.map +1 -0
  84. package/dist/utils/graph-client.js +49 -0
  85. package/dist/utils/graph-client.js.map +1 -0
  86. package/dist/utils/signature.d.ts +2 -0
  87. package/dist/utils/signature.d.ts.map +1 -0
  88. package/dist/utils/signature.js +17 -0
  89. package/dist/utils/signature.js.map +1 -0
  90. package/dist/utils/version.d.ts +2 -0
  91. package/dist/utils/version.d.ts.map +1 -0
  92. package/dist/utils/version.js +20 -0
  93. package/dist/utils/version.js.map +1 -0
  94. package/package.json +51 -0
@@ -0,0 +1,156 @@
1
+ import { z } from 'zod';
2
+ import { graphRequest, graphList } from '../utils/graph-client.js';
3
+ // Schemas
4
+ export const listSitesSchema = z.object({
5
+ maxItems: z.number().optional().describe('Maximum number of sites. Default: 50'),
6
+ search: z.string().optional().describe('Search query to filter sites'),
7
+ });
8
+ export const getSiteSchema = z.object({
9
+ siteId: z.string().describe('Site ID or hostname:site-path (e.g., "contoso.sharepoint.com:/sites/team")'),
10
+ });
11
+ export const listDrivesSchema = z.object({
12
+ siteId: z.string().describe('Site ID'),
13
+ maxItems: z.number().optional().describe('Maximum number of drives. Default: 50'),
14
+ });
15
+ export const listDriveFilesSchema = z.object({
16
+ driveId: z.string().describe('Drive ID'),
17
+ path: z.string().optional().describe('Folder path within the drive. Default: root'),
18
+ maxItems: z.number().optional().describe('Maximum number of items. Default: 50'),
19
+ });
20
+ export const getDriveFileSchema = z.object({
21
+ driveId: z.string().describe('Drive ID'),
22
+ path: z.string().describe('File path within the drive'),
23
+ });
24
+ export const readDriveFileSchema = z.object({
25
+ driveId: z.string().describe('Drive ID'),
26
+ path: z.string().describe('File path within the drive'),
27
+ });
28
+ export const searchDriveFilesSchema = z.object({
29
+ driveId: z.string().describe('Drive ID'),
30
+ query: z.string().describe('Search query'),
31
+ maxItems: z.number().optional().describe('Maximum results. Default: 25'),
32
+ });
33
+ // Tool implementations
34
+ export async function listSites(params) {
35
+ const { maxItems = 50, search } = params;
36
+ let path;
37
+ if (search) {
38
+ path = `/sites?$search="${encodeURIComponent(search)}"&$select=id,name,displayName,webUrl,description,createdDateTime,lastModifiedDateTime&$top=${maxItems}`;
39
+ }
40
+ else {
41
+ // Get followed sites as default (sites the user has explicitly followed)
42
+ path = `/me/followedSites?$select=id,name,displayName,webUrl,description,createdDateTime,lastModifiedDateTime&$top=${maxItems}`;
43
+ }
44
+ const sites = await graphList(path, { maxItems });
45
+ return sites.map((site) => ({
46
+ id: site.id,
47
+ name: site.name,
48
+ displayName: site.displayName,
49
+ webUrl: site.webUrl,
50
+ description: site.description,
51
+ created: site.createdDateTime,
52
+ modified: site.lastModifiedDateTime,
53
+ }));
54
+ }
55
+ export async function getSite(params) {
56
+ const { siteId } = params;
57
+ const site = await graphRequest(`/sites/${siteId}?$select=id,name,displayName,webUrl,description,createdDateTime,lastModifiedDateTime`);
58
+ return {
59
+ id: site.id,
60
+ name: site.name,
61
+ displayName: site.displayName,
62
+ webUrl: site.webUrl,
63
+ description: site.description,
64
+ created: site.createdDateTime,
65
+ modified: site.lastModifiedDateTime,
66
+ };
67
+ }
68
+ export async function listDrives(params) {
69
+ const { siteId, maxItems = 50 } = params;
70
+ const path = `/sites/${siteId}/drives?$select=id,name,driveType,webUrl,quota&$top=${maxItems}`;
71
+ const drives = await graphList(path, { maxItems });
72
+ return drives.map((drive) => ({
73
+ id: drive.id,
74
+ name: drive.name,
75
+ type: drive.driveType,
76
+ webUrl: drive.webUrl,
77
+ quota: drive.quota
78
+ ? {
79
+ total: drive.quota.total,
80
+ used: drive.quota.used,
81
+ remaining: drive.quota.remaining,
82
+ }
83
+ : undefined,
84
+ }));
85
+ }
86
+ export async function listDriveFiles(params) {
87
+ const { driveId, path = '', maxItems = 50 } = params;
88
+ const apiPath = path
89
+ ? `/drives/${driveId}/root:/${path}:/children`
90
+ : `/drives/${driveId}/root/children`;
91
+ const fullPath = `${apiPath}?$select=id,name,size,createdDateTime,lastModifiedDateTime,webUrl,folder,file&$top=${maxItems}`;
92
+ const items = await graphList(fullPath, { maxItems });
93
+ return items.map((item) => ({
94
+ id: item.id,
95
+ name: item.name,
96
+ type: item.folder ? 'folder' : 'file',
97
+ size: item.size,
98
+ mimeType: item.file?.mimeType,
99
+ childCount: item.folder?.childCount,
100
+ created: item.createdDateTime,
101
+ modified: item.lastModifiedDateTime,
102
+ webUrl: item.webUrl,
103
+ }));
104
+ }
105
+ export async function getDriveFile(params) {
106
+ const { driveId, path } = params;
107
+ const item = await graphRequest(`/drives/${driveId}/root:/${path}?$select=id,name,size,createdDateTime,lastModifiedDateTime,webUrl,file`);
108
+ return {
109
+ id: item.id,
110
+ name: item.name,
111
+ size: item.size,
112
+ mimeType: item.file?.mimeType,
113
+ created: item.createdDateTime,
114
+ modified: item.lastModifiedDateTime,
115
+ webUrl: item.webUrl,
116
+ };
117
+ }
118
+ export async function readDriveFile(params) {
119
+ const { driveId, path } = params;
120
+ // Get the file metadata with download URL
121
+ const item = await graphRequest(`/drives/${driveId}/root:/${path}?$select=id,name,size,file,@microsoft.graph.downloadUrl`);
122
+ const downloadUrl = item['@microsoft.graph.downloadUrl'];
123
+ if (!downloadUrl) {
124
+ throw new Error('Could not get download URL for file');
125
+ }
126
+ // Check file size (limit to 1MB for text content)
127
+ if (item.size && item.size > 1024 * 1024) {
128
+ throw new Error('File too large to read directly. Use download URL instead.');
129
+ }
130
+ // Fetch the content
131
+ const response = await fetch(downloadUrl);
132
+ if (!response.ok) {
133
+ throw new Error(`Failed to download file: ${response.statusText}`);
134
+ }
135
+ const content = await response.text();
136
+ return {
137
+ name: item.name,
138
+ size: item.size,
139
+ mimeType: item.file?.mimeType,
140
+ content,
141
+ };
142
+ }
143
+ export async function searchDriveFiles(params) {
144
+ const { driveId, query, maxItems = 25 } = params;
145
+ const path = `/drives/${driveId}/root/search(q='${encodeURIComponent(query)}')?$select=id,name,size,webUrl,file,folder&$top=${maxItems}`;
146
+ const items = await graphList(path, { maxItems });
147
+ return items.map((item) => ({
148
+ id: item.id,
149
+ name: item.name,
150
+ type: item.folder ? 'folder' : 'file',
151
+ size: item.size,
152
+ mimeType: item.file?.mimeType,
153
+ webUrl: item.webUrl,
154
+ }));
155
+ }
156
+ //# sourceMappingURL=sharepoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sharepoint.js","sourceRoot":"","sources":["../../src/tools/sharepoint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ import { z } from 'zod';
2
+ export declare const listTaskListsSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
3
+ export declare const listTasksSchema: z.ZodObject<{
4
+ listId: z.ZodOptional<z.ZodString>;
5
+ includeCompleted: z.ZodOptional<z.ZodBoolean>;
6
+ maxItems: z.ZodOptional<z.ZodNumber>;
7
+ }, "strip", z.ZodTypeAny, {
8
+ maxItems?: number | undefined;
9
+ listId?: string | undefined;
10
+ includeCompleted?: boolean | undefined;
11
+ }, {
12
+ maxItems?: number | undefined;
13
+ listId?: string | undefined;
14
+ includeCompleted?: boolean | undefined;
15
+ }>;
16
+ export declare const createTaskSchema: z.ZodObject<{
17
+ title: z.ZodString;
18
+ listId: z.ZodOptional<z.ZodString>;
19
+ dueDate: z.ZodOptional<z.ZodString>;
20
+ importance: z.ZodOptional<z.ZodEnum<["low", "normal", "high"]>>;
21
+ body: z.ZodOptional<z.ZodString>;
22
+ }, "strip", z.ZodTypeAny, {
23
+ title: string;
24
+ body?: string | undefined;
25
+ listId?: string | undefined;
26
+ dueDate?: string | undefined;
27
+ importance?: "low" | "normal" | "high" | undefined;
28
+ }, {
29
+ title: string;
30
+ body?: string | undefined;
31
+ listId?: string | undefined;
32
+ dueDate?: string | undefined;
33
+ importance?: "low" | "normal" | "high" | undefined;
34
+ }>;
35
+ export declare const updateTaskSchema: z.ZodObject<{
36
+ taskId: z.ZodString;
37
+ listId: z.ZodOptional<z.ZodString>;
38
+ title: z.ZodOptional<z.ZodString>;
39
+ dueDate: z.ZodOptional<z.ZodString>;
40
+ importance: z.ZodOptional<z.ZodEnum<["low", "normal", "high"]>>;
41
+ body: z.ZodOptional<z.ZodString>;
42
+ }, "strip", z.ZodTypeAny, {
43
+ taskId: string;
44
+ body?: string | undefined;
45
+ listId?: string | undefined;
46
+ title?: string | undefined;
47
+ dueDate?: string | undefined;
48
+ importance?: "low" | "normal" | "high" | undefined;
49
+ }, {
50
+ taskId: string;
51
+ body?: string | undefined;
52
+ listId?: string | undefined;
53
+ title?: string | undefined;
54
+ dueDate?: string | undefined;
55
+ importance?: "low" | "normal" | "high" | undefined;
56
+ }>;
57
+ export declare const completeTaskSchema: z.ZodObject<{
58
+ taskId: z.ZodString;
59
+ listId: z.ZodOptional<z.ZodString>;
60
+ }, "strip", z.ZodTypeAny, {
61
+ taskId: string;
62
+ listId?: string | undefined;
63
+ }, {
64
+ taskId: string;
65
+ listId?: string | undefined;
66
+ }>;
67
+ export declare const deleteTaskSchema: z.ZodObject<{
68
+ taskId: z.ZodString;
69
+ listId: z.ZodOptional<z.ZodString>;
70
+ }, "strip", z.ZodTypeAny, {
71
+ taskId: string;
72
+ listId?: string | undefined;
73
+ }, {
74
+ taskId: string;
75
+ listId?: string | undefined;
76
+ }>;
77
+ export declare function listTaskLists(): Promise<{
78
+ id: string;
79
+ name: string;
80
+ }[]>;
81
+ export declare function listTasks(params: z.infer<typeof listTasksSchema>): Promise<{
82
+ id: string;
83
+ title: string;
84
+ status: "notStarted" | "inProgress" | "completed";
85
+ importance: "low" | "normal" | "high";
86
+ dueDate: string | undefined;
87
+ created: string;
88
+ }[]>;
89
+ export declare function createTask(params: z.infer<typeof createTaskSchema>): Promise<{
90
+ success: boolean;
91
+ taskId: string;
92
+ title: string;
93
+ }>;
94
+ export declare function updateTask(params: z.infer<typeof updateTaskSchema>): Promise<{
95
+ success: boolean;
96
+ taskId: string;
97
+ title: string;
98
+ }>;
99
+ export declare function completeTask(params: z.infer<typeof completeTaskSchema>): Promise<{
100
+ success: boolean;
101
+ message: string;
102
+ }>;
103
+ export declare function deleteTask(params: z.infer<typeof deleteTaskSchema>): Promise<{
104
+ success: boolean;
105
+ message: string;
106
+ }>;
107
+ //# sourceMappingURL=tasks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAqBxB,eAAO,MAAM,mBAAmB,gDAAe,CAAC;AAEhD,eAAO,MAAM,eAAe;;;;;;;;;;;;EAI1B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;EAM3B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;EAO3B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;EAG7B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;EAG3B,CAAC;AAaH,wBAAsB,aAAa;;;KAMlC;AAED,wBAAsB,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC;;;;;;;KAuBtE;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC;;;;GA4BxE;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC;;;;GAqBxE;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC;;;GAW5E;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC;;;GAUxE"}
@@ -0,0 +1,131 @@
1
+ import { z } from 'zod';
2
+ import { graphRequest, graphList } from '../utils/graph-client.js';
3
+ // Schemas
4
+ export const listTaskListsSchema = z.object({});
5
+ export const listTasksSchema = z.object({
6
+ listId: z.string().optional().describe('Task list ID. If not provided, uses the default task list'),
7
+ includeCompleted: z.boolean().optional().describe('Include completed tasks. Default: false'),
8
+ maxItems: z.number().optional().describe('Maximum number of tasks. Default: 50'),
9
+ });
10
+ export const createTaskSchema = z.object({
11
+ title: z.string().describe('Task title'),
12
+ listId: z.string().optional().describe('Task list ID. Default: default list'),
13
+ dueDate: z.string().optional().describe('Due date (ISO format)'),
14
+ importance: z.enum(['low', 'normal', 'high']).optional().describe('Task importance'),
15
+ body: z.string().optional().describe('Task notes/description'),
16
+ });
17
+ export const updateTaskSchema = z.object({
18
+ taskId: z.string().describe('The ID of the task to update'),
19
+ listId: z.string().optional().describe('Task list ID. Default: default list'),
20
+ title: z.string().optional().describe('New title'),
21
+ dueDate: z.string().optional().describe('New due date'),
22
+ importance: z.enum(['low', 'normal', 'high']).optional().describe('New importance'),
23
+ body: z.string().optional().describe('New notes'),
24
+ });
25
+ export const completeTaskSchema = z.object({
26
+ taskId: z.string().describe('The ID of the task to complete'),
27
+ listId: z.string().optional().describe('Task list ID. Default: default list'),
28
+ });
29
+ export const deleteTaskSchema = z.object({
30
+ taskId: z.string().describe('The ID of the task to delete'),
31
+ listId: z.string().optional().describe('Task list ID. Default: default list'),
32
+ });
33
+ // Helper to get default task list
34
+ async function getDefaultListId() {
35
+ const lists = await graphList('/me/todo/lists');
36
+ const defaultList = lists.find((l) => l.displayName === 'Tasks') || lists[0];
37
+ if (!defaultList) {
38
+ throw new Error('No task lists found');
39
+ }
40
+ return defaultList.id;
41
+ }
42
+ // Tool implementations
43
+ export async function listTaskLists() {
44
+ const lists = await graphList('/me/todo/lists');
45
+ return lists.map((l) => ({
46
+ id: l.id,
47
+ name: l.displayName,
48
+ }));
49
+ }
50
+ export async function listTasks(params) {
51
+ const { listId, includeCompleted = false, maxItems = 50 } = params;
52
+ const actualListId = listId || (await getDefaultListId());
53
+ // Note: To Do API has limited OData support - keep query simple
54
+ const path = `/me/todo/lists/${actualListId}/tasks?$top=${maxItems}`;
55
+ let tasks = await graphList(path, { maxItems });
56
+ // Filter completed tasks client-side
57
+ if (!includeCompleted) {
58
+ tasks = tasks.filter((t) => t.status !== 'completed');
59
+ }
60
+ return tasks.map((t) => ({
61
+ id: t.id,
62
+ title: t.title,
63
+ status: t.status,
64
+ importance: t.importance,
65
+ dueDate: t.dueDateTime?.dateTime,
66
+ created: t.createdDateTime,
67
+ }));
68
+ }
69
+ export async function createTask(params) {
70
+ const { title, listId, dueDate, importance = 'normal', body } = params;
71
+ const actualListId = listId || (await getDefaultListId());
72
+ const taskData = {
73
+ title,
74
+ importance,
75
+ };
76
+ if (dueDate) {
77
+ taskData.dueDateTime = { dateTime: dueDate, timeZone: 'UTC' };
78
+ }
79
+ if (body) {
80
+ taskData.body = { content: body, contentType: 'text' };
81
+ }
82
+ const created = await graphRequest(`/me/todo/lists/${actualListId}/tasks`, {
83
+ method: 'POST',
84
+ body: taskData,
85
+ });
86
+ return {
87
+ success: true,
88
+ taskId: created.id,
89
+ title: created.title,
90
+ };
91
+ }
92
+ export async function updateTask(params) {
93
+ const { taskId, listId, title, dueDate, importance, body } = params;
94
+ const actualListId = listId || (await getDefaultListId());
95
+ const updates = {};
96
+ if (title)
97
+ updates.title = title;
98
+ if (importance)
99
+ updates.importance = importance;
100
+ if (dueDate)
101
+ updates.dueDateTime = { dateTime: dueDate, timeZone: 'UTC' };
102
+ if (body)
103
+ updates.body = { content: body, contentType: 'text' };
104
+ const updated = await graphRequest(`/me/todo/lists/${actualListId}/tasks/${taskId}`, {
105
+ method: 'PATCH',
106
+ body: updates,
107
+ });
108
+ return {
109
+ success: true,
110
+ taskId: updated.id,
111
+ title: updated.title,
112
+ };
113
+ }
114
+ export async function completeTask(params) {
115
+ const { taskId, listId } = params;
116
+ const actualListId = listId || (await getDefaultListId());
117
+ await graphRequest(`/me/todo/lists/${actualListId}/tasks/${taskId}`, {
118
+ method: 'PATCH',
119
+ body: { status: 'completed' },
120
+ });
121
+ return { success: true, message: 'Task completed' };
122
+ }
123
+ export async function deleteTask(params) {
124
+ const { taskId, listId } = params;
125
+ const actualListId = listId || (await getDefaultListId());
126
+ await graphRequest(`/me/todo/lists/${actualListId}/tasks/${taskId}`, {
127
+ method: 'DELETE',
128
+ });
129
+ return { success: true, message: 'Task deleted' };
130
+ }
131
+ //# sourceMappingURL=tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import { z } from 'zod';
2
+ export declare const listTeamsSchema: z.ZodObject<{
3
+ maxItems: z.ZodOptional<z.ZodNumber>;
4
+ }, "strip", z.ZodTypeAny, {
5
+ maxItems?: number | undefined;
6
+ }, {
7
+ maxItems?: number | undefined;
8
+ }>;
9
+ export declare const listChannelsSchema: z.ZodObject<{
10
+ teamId: z.ZodString;
11
+ }, "strip", z.ZodTypeAny, {
12
+ teamId: string;
13
+ }, {
14
+ teamId: string;
15
+ }>;
16
+ export declare const listChannelMessagesSchema: z.ZodObject<{
17
+ teamId: z.ZodString;
18
+ channelId: z.ZodString;
19
+ maxItems: z.ZodOptional<z.ZodNumber>;
20
+ }, "strip", z.ZodTypeAny, {
21
+ teamId: string;
22
+ channelId: string;
23
+ maxItems?: number | undefined;
24
+ }, {
25
+ teamId: string;
26
+ channelId: string;
27
+ maxItems?: number | undefined;
28
+ }>;
29
+ export declare const postChannelMessageSchema: z.ZodObject<{
30
+ teamId: z.ZodString;
31
+ channelId: z.ZodString;
32
+ content: z.ZodString;
33
+ }, "strip", z.ZodTypeAny, {
34
+ content: string;
35
+ teamId: string;
36
+ channelId: string;
37
+ }, {
38
+ content: string;
39
+ teamId: string;
40
+ channelId: string;
41
+ }>;
42
+ export declare function listTeams(params: z.infer<typeof listTeamsSchema>): Promise<{
43
+ id: string;
44
+ displayName: string;
45
+ description: string | undefined;
46
+ }[]>;
47
+ export declare function listChannels(params: z.infer<typeof listChannelsSchema>): Promise<{
48
+ id: string;
49
+ displayName: string;
50
+ description: string | undefined;
51
+ membershipType: string | undefined;
52
+ }[]>;
53
+ export declare function listChannelMessages(params: z.infer<typeof listChannelMessagesSchema>): Promise<{
54
+ id: string;
55
+ createdAt: string;
56
+ from: string;
57
+ content: string;
58
+ contentType: string;
59
+ subject: string | undefined;
60
+ }[]>;
61
+ export declare function postChannelMessage(params: z.infer<typeof postChannelMessageSchema>): Promise<{
62
+ success: boolean;
63
+ messageId: string;
64
+ message: string;
65
+ }>;
66
+ //# sourceMappingURL=teams.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teams.d.ts","sourceRoot":"","sources":["../../src/tools/teams.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAwCxB,eAAO,MAAM,eAAe;;;;;;EAE1B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;EAE7B,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;EAIpC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;EAInC,CAAC;AAGH,wBAAsB,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC;;;;KAatE;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC;;;;;KAa5E;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC;;;;;;;KAgB1F;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC;;;;GAqBxF"}
@@ -0,0 +1,69 @@
1
+ import { z } from 'zod';
2
+ import { graphRequest, graphList } from '../utils/graph-client.js';
3
+ // Schemas
4
+ export const listTeamsSchema = z.object({
5
+ maxItems: z.number().optional().describe('Maximum number of teams to return. Default: 50'),
6
+ });
7
+ export const listChannelsSchema = z.object({
8
+ teamId: z.string().describe('The ID of the team'),
9
+ });
10
+ export const listChannelMessagesSchema = z.object({
11
+ teamId: z.string().describe('The ID of the team'),
12
+ channelId: z.string().describe('The ID of the channel'),
13
+ maxItems: z.number().optional().describe('Maximum number of messages to return. Default: 25'),
14
+ });
15
+ export const postChannelMessageSchema = z.object({
16
+ teamId: z.string().describe('The ID of the team'),
17
+ channelId: z.string().describe('The ID of the channel'),
18
+ content: z.string().describe('Message content (supports HTML)'),
19
+ });
20
+ // Tool implementations
21
+ export async function listTeams(params) {
22
+ const { maxItems = 50 } = params;
23
+ const teams = await graphList('/me/joinedTeams?$select=id,displayName,description', { maxItems });
24
+ return teams.map((t) => ({
25
+ id: t.id,
26
+ displayName: t.displayName,
27
+ description: t.description,
28
+ }));
29
+ }
30
+ export async function listChannels(params) {
31
+ const { teamId } = params;
32
+ const channels = await graphList(`/teams/${teamId}/channels?$select=id,displayName,description,membershipType`);
33
+ return channels.map((c) => ({
34
+ id: c.id,
35
+ displayName: c.displayName,
36
+ description: c.description,
37
+ membershipType: c.membershipType,
38
+ }));
39
+ }
40
+ export async function listChannelMessages(params) {
41
+ const { teamId, channelId, maxItems = 25 } = params;
42
+ const messages = await graphList(`/teams/${teamId}/channels/${channelId}/messages?$top=${maxItems}`, { maxItems });
43
+ return messages.map((m) => ({
44
+ id: m.id,
45
+ createdAt: m.createdDateTime,
46
+ from: m.from?.user?.displayName || m.from?.application?.displayName || 'Unknown',
47
+ content: m.body.content,
48
+ contentType: m.body.contentType,
49
+ subject: m.subject,
50
+ }));
51
+ }
52
+ export async function postChannelMessage(params) {
53
+ const { teamId, channelId, content } = params;
54
+ const message = await graphRequest(`/teams/${teamId}/channels/${channelId}/messages`, {
55
+ method: 'POST',
56
+ body: {
57
+ body: {
58
+ contentType: 'html',
59
+ content,
60
+ },
61
+ },
62
+ });
63
+ return {
64
+ success: true,
65
+ messageId: message.id,
66
+ message: 'Message posted to channel',
67
+ };
68
+ }
69
+ //# sourceMappingURL=teams.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teams.js","sourceRoot":"","sources":["../../src/tools/teams.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface GraphRequestOptions {
2
+ method?: 'GET' | 'POST' | 'PATCH' | 'DELETE';
3
+ body?: unknown;
4
+ headers?: Record<string, string>;
5
+ }
6
+ export declare function graphRequest<T>(path: string, options?: GraphRequestOptions): Promise<T>;
7
+ export declare function graphList<T>(path: string, options?: {
8
+ maxItems?: number;
9
+ }): Promise<T[]>;
10
+ //# sourceMappingURL=graph-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-client.d.ts","sourceRoot":"","sources":["../../src/utils/graph-client.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC7C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,wBAAsB,YAAY,CAAC,CAAC,EAClC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,CAAC,CAAC,CAmCZ;AAED,wBAAsB,SAAS,CAAC,CAAC,EAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAClC,OAAO,CAAC,CAAC,EAAE,CAAC,CAoBd"}
@@ -0,0 +1,49 @@
1
+ import { getAccessToken } from '../auth/index.js';
2
+ const GRAPH_BASE_URL = 'https://graph.microsoft.com/v1.0';
3
+ export async function graphRequest(path, options = {}) {
4
+ const { method = 'GET', body, headers = {} } = options;
5
+ const accessToken = await getAccessToken();
6
+ const response = await fetch(`${GRAPH_BASE_URL}${path}`, {
7
+ method,
8
+ headers: {
9
+ Authorization: `Bearer ${accessToken}`,
10
+ 'Content-Type': 'application/json',
11
+ ...headers,
12
+ },
13
+ body: body ? JSON.stringify(body) : undefined,
14
+ });
15
+ if (!response.ok) {
16
+ const errorText = await response.text();
17
+ let errorMessage;
18
+ try {
19
+ const errorJson = JSON.parse(errorText);
20
+ errorMessage = errorJson.error?.message || errorText;
21
+ }
22
+ catch {
23
+ errorMessage = errorText;
24
+ }
25
+ throw new Error(`Graph API error (${response.status}): ${errorMessage}`);
26
+ }
27
+ // Handle 204 No Content and 202 Accepted (e.g., sendMail)
28
+ if (response.status === 204 || response.status === 202) {
29
+ return {};
30
+ }
31
+ return response.json();
32
+ }
33
+ export async function graphList(path, options = {}) {
34
+ const { maxItems = 100 } = options;
35
+ const items = [];
36
+ let nextLink = path;
37
+ while (nextLink && items.length < maxItems) {
38
+ const url = nextLink.startsWith('http')
39
+ ? nextLink.replace(GRAPH_BASE_URL, '')
40
+ : nextLink;
41
+ const response = await graphRequest(url);
42
+ if (response.value) {
43
+ items.push(...response.value);
44
+ }
45
+ nextLink = response['@odata.nextLink'];
46
+ }
47
+ return items.slice(0, maxItems);
48
+ }
49
+ //# sourceMappingURL=graph-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-client.js","sourceRoot":"","sources":["../../src/utils/graph-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,cAAc,GAAG,kCAAkC,CAAC;AAc1D,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAY,EACZ,UAA+B,EAAE;IAEjC,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;IAEvD,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAC;IAE3C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,cAAc,GAAG,IAAI,EAAE,EAAE;QACvD,MAAM;QACN,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,WAAW,EAAE;YACtC,cAAc,EAAE,kBAAkB;YAClC,GAAG,OAAO;SACX;QACD,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;KAC9C,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,YAAoB,CAAC;QAEzB,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACxC,YAAY,GAAG,SAAS,CAAC,KAAK,EAAE,OAAO,IAAI,SAAS,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YACP,YAAY,GAAG,SAAS,CAAC;QAC3B,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,oBAAoB,QAAQ,CAAC,MAAM,MAAM,YAAY,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,0DAA0D;IAC1D,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvD,OAAO,EAAO,CAAC;IACjB,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAgB,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,IAAY,EACZ,UAAiC,EAAE;IAEnC,MAAM,EAAE,QAAQ,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC;IACnC,MAAM,KAAK,GAAQ,EAAE,CAAC;IACtB,IAAI,QAAQ,GAAuB,IAAI,CAAC;IAExC,OAAO,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;QAC3C,MAAM,GAAG,GAAW,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;YAC7C,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;YACtC,CAAC,CAAC,QAAQ,CAAC;QAEb,MAAM,QAAQ,GAAqB,MAAM,YAAY,CAAmB,GAAG,CAAC,CAAC;QAE7E,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QAED,QAAQ,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function getSignature(): string | null;
2
+ //# sourceMappingURL=signature.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signature.d.ts","sourceRoot":"","sources":["../../src/utils/signature.ts"],"names":[],"mappings":"AAMA,wBAAgB,YAAY,IAAI,MAAM,GAAG,IAAI,CAU5C"}