@jbctechsolutions/mcp-office365 2.5.1 → 4.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.
Files changed (369) hide show
  1. package/README.md +66 -57
  2. package/dist/approval/hash.d.ts +8 -8
  3. package/dist/approval/token-manager.d.ts +37 -19
  4. package/dist/approval/token-manager.d.ts.map +1 -1
  5. package/dist/approval/token-manager.js +133 -37
  6. package/dist/approval/token-manager.js.map +1 -1
  7. package/dist/approval/types.d.ts +7 -3
  8. package/dist/approval/types.d.ts.map +1 -1
  9. package/dist/cli.d.ts +21 -0
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +100 -2
  12. package/dist/cli.js.map +1 -1
  13. package/dist/database/repository.d.ts +48 -48
  14. package/dist/database/repository.d.ts.map +1 -1
  15. package/dist/database/repository.js.map +1 -1
  16. package/dist/delta/mirror.d.ts +67 -0
  17. package/dist/delta/mirror.d.ts.map +1 -0
  18. package/dist/delta/mirror.js +183 -0
  19. package/dist/delta/mirror.js.map +1 -0
  20. package/dist/graph/auth/account-id.d.ts +19 -0
  21. package/dist/graph/auth/account-id.d.ts.map +1 -0
  22. package/dist/graph/auth/account-id.js +55 -0
  23. package/dist/graph/auth/account-id.js.map +1 -0
  24. package/dist/graph/auth/config.d.ts +1 -1
  25. package/dist/graph/auth/config.d.ts.map +1 -1
  26. package/dist/graph/auth/config.js +13 -1
  27. package/dist/graph/auth/config.js.map +1 -1
  28. package/dist/graph/auth/device-code-flow.d.ts +3 -1
  29. package/dist/graph/auth/device-code-flow.d.ts.map +1 -1
  30. package/dist/graph/auth/device-code-flow.js +42 -14
  31. package/dist/graph/auth/device-code-flow.js.map +1 -1
  32. package/dist/graph/auth/index.d.ts +1 -0
  33. package/dist/graph/auth/index.d.ts.map +1 -1
  34. package/dist/graph/auth/index.js +1 -0
  35. package/dist/graph/auth/index.js.map +1 -1
  36. package/dist/graph/auth/token-cache.js +2 -2
  37. package/dist/graph/auth/token-cache.js.map +1 -1
  38. package/dist/graph/client/graph-client.d.ts +141 -8
  39. package/dist/graph/client/graph-client.d.ts.map +1 -1
  40. package/dist/graph/client/graph-client.js +536 -48
  41. package/dist/graph/client/graph-client.js.map +1 -1
  42. package/dist/graph/client/immutable-id-middleware.d.ts +50 -0
  43. package/dist/graph/client/immutable-id-middleware.d.ts.map +1 -0
  44. package/dist/graph/client/immutable-id-middleware.js +137 -0
  45. package/dist/graph/client/immutable-id-middleware.js.map +1 -0
  46. package/dist/graph/content-readers.d.ts +0 -12
  47. package/dist/graph/content-readers.d.ts.map +1 -1
  48. package/dist/graph/content-readers.js +0 -21
  49. package/dist/graph/content-readers.js.map +1 -1
  50. package/dist/graph/index.d.ts +5 -6
  51. package/dist/graph/index.d.ts.map +1 -1
  52. package/dist/graph/index.js +5 -6
  53. package/dist/graph/index.js.map +1 -1
  54. package/dist/graph/mailbox-adapter.d.ts +15 -15
  55. package/dist/graph/mappers/contact-mapper.d.ts +4 -1
  56. package/dist/graph/mappers/contact-mapper.d.ts.map +1 -1
  57. package/dist/graph/mappers/contact-mapper.js +7 -3
  58. package/dist/graph/mappers/contact-mapper.js.map +1 -1
  59. package/dist/graph/mappers/email-mapper.d.ts.map +1 -1
  60. package/dist/graph/mappers/email-mapper.js +7 -4
  61. package/dist/graph/mappers/email-mapper.js.map +1 -1
  62. package/dist/graph/mappers/event-mapper.d.ts.map +1 -1
  63. package/dist/graph/mappers/event-mapper.js +6 -3
  64. package/dist/graph/mappers/event-mapper.js.map +1 -1
  65. package/dist/graph/mappers/folder-mapper.d.ts +0 -4
  66. package/dist/graph/mappers/folder-mapper.d.ts.map +1 -1
  67. package/dist/graph/mappers/folder-mapper.js +9 -19
  68. package/dist/graph/mappers/folder-mapper.js.map +1 -1
  69. package/dist/graph/mappers/index.d.ts +2 -2
  70. package/dist/graph/mappers/index.d.ts.map +1 -1
  71. package/dist/graph/mappers/index.js +2 -2
  72. package/dist/graph/mappers/index.js.map +1 -1
  73. package/dist/graph/mappers/task-mapper.d.ts +4 -2
  74. package/dist/graph/mappers/task-mapper.d.ts.map +1 -1
  75. package/dist/graph/mappers/task-mapper.js +7 -5
  76. package/dist/graph/mappers/task-mapper.js.map +1 -1
  77. package/dist/graph/mappers/utils.d.ts +0 -10
  78. package/dist/graph/mappers/utils.d.ts.map +1 -1
  79. package/dist/graph/mappers/utils.js +0 -19
  80. package/dist/graph/mappers/utils.js.map +1 -1
  81. package/dist/graph/repository.d.ts +409 -276
  82. package/dist/graph/repository.d.ts.map +1 -1
  83. package/dist/graph/repository.js +772 -1082
  84. package/dist/graph/repository.js.map +1 -1
  85. package/dist/ids/mint.d.ts +31 -0
  86. package/dist/ids/mint.d.ts.map +1 -0
  87. package/dist/ids/mint.js +36 -0
  88. package/dist/ids/mint.js.map +1 -0
  89. package/dist/ids/next-action.d.ts +29 -0
  90. package/dist/ids/next-action.d.ts.map +1 -0
  91. package/dist/ids/next-action.js +58 -0
  92. package/dist/ids/next-action.js.map +1 -0
  93. package/dist/ids/resolver.d.ts +31 -0
  94. package/dist/ids/resolver.d.ts.map +1 -0
  95. package/dist/ids/resolver.js +52 -0
  96. package/dist/ids/resolver.js.map +1 -0
  97. package/dist/ids/schema.d.ts +91 -0
  98. package/dist/ids/schema.d.ts.map +1 -0
  99. package/dist/ids/schema.js +131 -0
  100. package/dist/ids/schema.js.map +1 -0
  101. package/dist/ids/token.d.ts +62 -0
  102. package/dist/ids/token.d.ts.map +1 -0
  103. package/dist/ids/token.js +225 -0
  104. package/dist/ids/token.js.map +1 -0
  105. package/dist/index.d.ts +10 -6
  106. package/dist/index.d.ts.map +1 -1
  107. package/dist/index.js +255 -5925
  108. package/dist/index.js.map +1 -1
  109. package/dist/parsers/index.d.ts +0 -1
  110. package/dist/parsers/index.d.ts.map +1 -1
  111. package/dist/parsers/index.js +0 -1
  112. package/dist/parsers/index.js.map +1 -1
  113. package/dist/registry/all-tools.d.ts +14 -0
  114. package/dist/registry/all-tools.d.ts.map +1 -0
  115. package/dist/registry/all-tools.js +68 -0
  116. package/dist/registry/all-tools.js.map +1 -0
  117. package/dist/registry/context.d.ts +19 -0
  118. package/dist/registry/context.d.ts.map +1 -0
  119. package/dist/registry/context.js +20 -0
  120. package/dist/registry/context.js.map +1 -0
  121. package/dist/registry/define-tool.d.ts +15 -0
  122. package/dist/registry/define-tool.d.ts.map +1 -0
  123. package/dist/registry/define-tool.js +8 -0
  124. package/dist/registry/define-tool.js.map +1 -0
  125. package/dist/registry/elicit-links.d.ts +35 -0
  126. package/dist/registry/elicit-links.d.ts.map +1 -0
  127. package/dist/registry/elicit-links.js +102 -0
  128. package/dist/registry/elicit-links.js.map +1 -0
  129. package/dist/registry/elicitor.d.ts +24 -0
  130. package/dist/registry/elicitor.d.ts.map +1 -0
  131. package/dist/registry/elicitor.js +51 -0
  132. package/dist/registry/elicitor.js.map +1 -0
  133. package/dist/registry/index.d.ts +13 -0
  134. package/dist/registry/index.d.ts.map +1 -0
  135. package/dist/registry/index.js +8 -0
  136. package/dist/registry/index.js.map +1 -0
  137. package/dist/registry/registry.d.ts +73 -0
  138. package/dist/registry/registry.d.ts.map +1 -0
  139. package/dist/registry/registry.js +221 -0
  140. package/dist/registry/registry.js.map +1 -0
  141. package/dist/registry/types.d.ts +146 -0
  142. package/dist/registry/types.d.ts.map +1 -0
  143. package/dist/registry/types.js +6 -0
  144. package/dist/registry/types.js.map +1 -0
  145. package/dist/search/compiler.d.ts +49 -0
  146. package/dist/search/compiler.d.ts.map +1 -0
  147. package/dist/search/compiler.js +168 -0
  148. package/dist/search/compiler.js.map +1 -0
  149. package/dist/signature.js +2 -2
  150. package/dist/signature.js.map +1 -1
  151. package/dist/state/delta-store.d.ts +85 -0
  152. package/dist/state/delta-store.d.ts.map +1 -0
  153. package/dist/state/delta-store.js +124 -0
  154. package/dist/state/delta-store.js.map +1 -0
  155. package/dist/state/migrate.d.ts +23 -0
  156. package/dist/state/migrate.d.ts.map +1 -0
  157. package/dist/state/migrate.js +81 -0
  158. package/dist/state/migrate.js.map +1 -0
  159. package/dist/state/schema.d.ts +26 -0
  160. package/dist/state/schema.d.ts.map +1 -0
  161. package/dist/state/schema.js +77 -0
  162. package/dist/state/schema.js.map +1 -0
  163. package/dist/state/store.d.ts +155 -0
  164. package/dist/state/store.d.ts.map +1 -0
  165. package/dist/state/store.js +321 -0
  166. package/dist/state/store.js.map +1 -0
  167. package/dist/tools/calendar-graph.d.ts +41 -0
  168. package/dist/tools/calendar-graph.d.ts.map +1 -0
  169. package/dist/tools/calendar-graph.js +299 -0
  170. package/dist/tools/calendar-graph.js.map +1 -0
  171. package/dist/tools/calendar-permissions.d.ts +17 -7
  172. package/dist/tools/calendar-permissions.d.ts.map +1 -1
  173. package/dist/tools/calendar-permissions.js +60 -4
  174. package/dist/tools/calendar-permissions.js.map +1 -1
  175. package/dist/tools/calendar.d.ts +133 -82
  176. package/dist/tools/calendar.d.ts.map +1 -1
  177. package/dist/tools/calendar.js +249 -136
  178. package/dist/tools/calendar.js.map +1 -1
  179. package/dist/tools/categories.d.ts +14 -4
  180. package/dist/tools/categories.d.ts.map +1 -1
  181. package/dist/tools/categories.js +59 -2
  182. package/dist/tools/categories.js.map +1 -1
  183. package/dist/tools/checklist-items.d.ts +19 -9
  184. package/dist/tools/checklist-items.d.ts.map +1 -1
  185. package/dist/tools/checklist-items.js +71 -5
  186. package/dist/tools/checklist-items.js.map +1 -1
  187. package/dist/tools/contact-folders.d.ts +50 -0
  188. package/dist/tools/contact-folders.d.ts.map +1 -0
  189. package/dist/tools/contact-folders.js +136 -0
  190. package/dist/tools/contact-folders.js.map +1 -0
  191. package/dist/tools/contacts-graph.d.ts +45 -0
  192. package/dist/tools/contacts-graph.d.ts.map +1 -0
  193. package/dist/tools/contacts-graph.js +174 -0
  194. package/dist/tools/contacts-graph.js.map +1 -0
  195. package/dist/tools/contacts.d.ts +61 -30
  196. package/dist/tools/contacts.d.ts.map +1 -1
  197. package/dist/tools/contacts.js +150 -93
  198. package/dist/tools/contacts.js.map +1 -1
  199. package/dist/tools/excel.d.ts +20 -10
  200. package/dist/tools/excel.d.ts.map +1 -1
  201. package/dist/tools/excel.js +82 -6
  202. package/dist/tools/excel.js.map +1 -1
  203. package/dist/tools/focused-overrides.d.ts +14 -4
  204. package/dist/tools/focused-overrides.d.ts.map +1 -1
  205. package/dist/tools/focused-overrides.js +59 -2
  206. package/dist/tools/focused-overrides.js.map +1 -1
  207. package/dist/tools/index.d.ts +4 -5
  208. package/dist/tools/index.d.ts.map +1 -1
  209. package/dist/tools/index.js +4 -6
  210. package/dist/tools/index.js.map +1 -1
  211. package/dist/tools/linked-resources.d.ts +17 -7
  212. package/dist/tools/linked-resources.d.ts.map +1 -1
  213. package/dist/tools/linked-resources.js +60 -4
  214. package/dist/tools/linked-resources.js.map +1 -1
  215. package/dist/tools/mail-graph.d.ts +38 -0
  216. package/dist/tools/mail-graph.d.ts.map +1 -0
  217. package/dist/tools/mail-graph.js +187 -0
  218. package/dist/tools/mail-graph.js.map +1 -0
  219. package/dist/tools/mail-rules.d.ts +20 -8
  220. package/dist/tools/mail-rules.d.ts.map +1 -1
  221. package/dist/tools/mail-rules.js +63 -7
  222. package/dist/tools/mail-rules.js.map +1 -1
  223. package/dist/tools/mail-send.d.ts +39 -27
  224. package/dist/tools/mail-send.d.ts.map +1 -1
  225. package/dist/tools/mail-send.js +249 -24
  226. package/dist/tools/mail-send.js.map +1 -1
  227. package/dist/tools/mail.d.ts +91 -68
  228. package/dist/tools/mail.d.ts.map +1 -1
  229. package/dist/tools/mail.js +232 -243
  230. package/dist/tools/mail.js.map +1 -1
  231. package/dist/tools/mailbox-organization.d.ts +51 -34
  232. package/dist/tools/mailbox-organization.d.ts.map +1 -1
  233. package/dist/tools/mailbox-organization.js +318 -35
  234. package/dist/tools/mailbox-organization.js.map +1 -1
  235. package/dist/tools/mailbox-settings.d.ts +59 -0
  236. package/dist/tools/mailbox-settings.d.ts.map +1 -0
  237. package/dist/tools/mailbox-settings.js +136 -0
  238. package/dist/tools/mailbox-settings.js.map +1 -0
  239. package/dist/tools/meetings.d.ts +24 -14
  240. package/dist/tools/meetings.d.ts.map +1 -1
  241. package/dist/tools/meetings.js +82 -6
  242. package/dist/tools/meetings.js.map +1 -1
  243. package/dist/tools/onedrive.d.ts +26 -16
  244. package/dist/tools/onedrive.d.ts.map +1 -1
  245. package/dist/tools/onedrive.js +140 -11
  246. package/dist/tools/onedrive.js.map +1 -1
  247. package/dist/tools/onenote.d.ts +63 -0
  248. package/dist/tools/onenote.d.ts.map +1 -0
  249. package/dist/tools/onenote.js +221 -0
  250. package/dist/tools/onenote.js.map +1 -0
  251. package/dist/tools/people.d.ts +10 -0
  252. package/dist/tools/people.d.ts.map +1 -1
  253. package/dist/tools/people.js +94 -0
  254. package/dist/tools/people.js.map +1 -1
  255. package/dist/tools/planner-visualization.d.ts +15 -5
  256. package/dist/tools/planner-visualization.d.ts.map +1 -1
  257. package/dist/tools/planner-visualization.js +58 -4
  258. package/dist/tools/planner-visualization.js.map +1 -1
  259. package/dist/tools/planner.d.ts +69 -39
  260. package/dist/tools/planner.d.ts.map +1 -1
  261. package/dist/tools/planner.js +231 -23
  262. package/dist/tools/planner.js.map +1 -1
  263. package/dist/tools/scheduling.d.ts +12 -0
  264. package/dist/tools/scheduling.d.ts.map +1 -1
  265. package/dist/tools/scheduling.js +38 -0
  266. package/dist/tools/scheduling.js.map +1 -1
  267. package/dist/tools/shared-mailbox.d.ts +164 -0
  268. package/dist/tools/shared-mailbox.d.ts.map +1 -0
  269. package/dist/tools/shared-mailbox.js +318 -0
  270. package/dist/tools/shared-mailbox.js.map +1 -0
  271. package/dist/tools/sharepoint-lists.d.ts +131 -0
  272. package/dist/tools/sharepoint-lists.d.ts.map +1 -0
  273. package/dist/tools/sharepoint-lists.js +246 -0
  274. package/dist/tools/sharepoint-lists.js.map +1 -0
  275. package/dist/tools/sharepoint.d.ts +24 -14
  276. package/dist/tools/sharepoint.d.ts.map +1 -1
  277. package/dist/tools/sharepoint.js +85 -9
  278. package/dist/tools/sharepoint.js.map +1 -1
  279. package/dist/tools/task-attachments.d.ts +17 -7
  280. package/dist/tools/task-attachments.d.ts.map +1 -1
  281. package/dist/tools/task-attachments.js +60 -4
  282. package/dist/tools/task-attachments.js.map +1 -1
  283. package/dist/tools/task-lists.d.ts +56 -0
  284. package/dist/tools/task-lists.d.ts.map +1 -0
  285. package/dist/tools/task-lists.js +155 -0
  286. package/dist/tools/task-lists.js.map +1 -0
  287. package/dist/tools/tasks-graph.d.ts +49 -0
  288. package/dist/tools/tasks-graph.d.ts.map +1 -0
  289. package/dist/tools/tasks-graph.js +193 -0
  290. package/dist/tools/tasks-graph.js.map +1 -0
  291. package/dist/tools/tasks.d.ts +121 -29
  292. package/dist/tools/tasks.d.ts.map +1 -1
  293. package/dist/tools/tasks.js +136 -84
  294. package/dist/tools/tasks.js.map +1 -1
  295. package/dist/tools/teams.d.ts +57 -46
  296. package/dist/tools/teams.d.ts.map +1 -1
  297. package/dist/tools/teams.js +288 -26
  298. package/dist/tools/teams.js.map +1 -1
  299. package/dist/tools/what-changed.d.ts +48 -0
  300. package/dist/tools/what-changed.d.ts.map +1 -0
  301. package/dist/tools/what-changed.js +149 -0
  302. package/dist/tools/what-changed.js.map +1 -0
  303. package/dist/types/calendar.d.ts +1 -1
  304. package/dist/types/calendar.d.ts.map +1 -1
  305. package/dist/types/calendar.js.map +1 -1
  306. package/dist/types/contacts.d.ts +1 -1
  307. package/dist/types/contacts.d.ts.map +1 -1
  308. package/dist/types/contacts.js.map +1 -1
  309. package/dist/types/mail.d.ts +1 -1
  310. package/dist/types/mail.d.ts.map +1 -1
  311. package/dist/types/mail.js.map +1 -1
  312. package/dist/utils/errors.d.ts +110 -38
  313. package/dist/utils/errors.d.ts.map +1 -1
  314. package/dist/utils/errors.js +239 -56
  315. package/dist/utils/errors.js.map +1 -1
  316. package/dist/visualization/types.d.ts +4 -4
  317. package/package.json +2 -3
  318. package/dist/applescript/account-repository.d.ts +0 -30
  319. package/dist/applescript/account-repository.d.ts.map +0 -1
  320. package/dist/applescript/account-repository.js +0 -38
  321. package/dist/applescript/account-repository.js.map +0 -1
  322. package/dist/applescript/account-scripts.d.ts +0 -21
  323. package/dist/applescript/account-scripts.d.ts.map +0 -1
  324. package/dist/applescript/account-scripts.js +0 -180
  325. package/dist/applescript/account-scripts.js.map +0 -1
  326. package/dist/applescript/calendar-manager.d.ts +0 -44
  327. package/dist/applescript/calendar-manager.d.ts.map +0 -1
  328. package/dist/applescript/calendar-manager.js +0 -92
  329. package/dist/applescript/calendar-manager.js.map +0 -1
  330. package/dist/applescript/calendar-writer.d.ts +0 -36
  331. package/dist/applescript/calendar-writer.d.ts.map +0 -1
  332. package/dist/applescript/calendar-writer.js +0 -94
  333. package/dist/applescript/calendar-writer.js.map +0 -1
  334. package/dist/applescript/content-readers.d.ts +0 -114
  335. package/dist/applescript/content-readers.d.ts.map +0 -1
  336. package/dist/applescript/content-readers.js +0 -328
  337. package/dist/applescript/content-readers.js.map +0 -1
  338. package/dist/applescript/executor.d.ts +0 -60
  339. package/dist/applescript/executor.d.ts.map +0 -1
  340. package/dist/applescript/executor.js +0 -173
  341. package/dist/applescript/executor.js.map +0 -1
  342. package/dist/applescript/index.d.ts +0 -20
  343. package/dist/applescript/index.d.ts.map +0 -1
  344. package/dist/applescript/index.js +0 -29
  345. package/dist/applescript/index.js.map +0 -1
  346. package/dist/applescript/mail-sender.d.ts +0 -38
  347. package/dist/applescript/mail-sender.d.ts.map +0 -1
  348. package/dist/applescript/mail-sender.js +0 -67
  349. package/dist/applescript/mail-sender.js.map +0 -1
  350. package/dist/applescript/parser.d.ts +0 -235
  351. package/dist/applescript/parser.d.ts.map +0 -1
  352. package/dist/applescript/parser.js +0 -496
  353. package/dist/applescript/parser.js.map +0 -1
  354. package/dist/applescript/repository.d.ts +0 -64
  355. package/dist/applescript/repository.d.ts.map +0 -1
  356. package/dist/applescript/repository.js +0 -444
  357. package/dist/applescript/repository.js.map +0 -1
  358. package/dist/applescript/scripts.d.ts +0 -265
  359. package/dist/applescript/scripts.d.ts.map +0 -1
  360. package/dist/applescript/scripts.js +0 -1483
  361. package/dist/applescript/scripts.js.map +0 -1
  362. package/dist/parsers/olk15.d.ts +0 -87
  363. package/dist/parsers/olk15.d.ts.map +0 -1
  364. package/dist/parsers/olk15.js +0 -368
  365. package/dist/parsers/olk15.js.map +0 -1
  366. package/dist/tools/notes.d.ts +0 -74
  367. package/dist/tools/notes.d.ts.map +0 -1
  368. package/dist/tools/notes.js +0 -136
  369. package/dist/tools/notes.js.map +0 -1
@@ -9,20 +9,24 @@
9
9
  * approval pattern for destructive delete operations.
10
10
  */
11
11
  import { z } from 'zod';
12
+ import { Id } from '../ids/schema.js';
13
+ import { defineTool } from '../registry/define-tool.js';
14
+ import { approvalTokenLink } from '../registry/elicit-links.js';
15
+ import { requireGraphToolset } from '../registry/context.js';
12
16
  // =============================================================================
13
17
  // Input Schemas
14
18
  // =============================================================================
15
19
  export const ListTaskAttachmentsInput = z.strictObject({
16
- task_id: z.number().int().positive().describe('Task ID from list_tasks or search_tasks'),
20
+ task_id: Id.task,
17
21
  });
18
22
  export const CreateTaskAttachmentInput = z.strictObject({
19
- task_id: z.number().int().positive().describe('Task ID'),
23
+ task_id: Id.task,
20
24
  name: z.string().min(1).describe('File name of the attachment'),
21
25
  content_bytes: z.string().min(1).describe('Base64-encoded file content'),
22
26
  content_type: z.string().optional().describe('MIME type (default: application/octet-stream)'),
23
27
  });
24
28
  export const PrepareDeleteTaskAttachmentInput = z.strictObject({
25
- task_attachment_id: z.number().int().positive().describe('Task attachment ID to delete'),
29
+ task_attachment_id: Id.taskAttachment,
26
30
  });
27
31
  export const ConfirmDeleteTaskAttachmentInput = z.strictObject({
28
32
  approval_token: z.string().describe('Approval token from prepare_delete_task_attachment'),
@@ -110,7 +114,7 @@ export class TaskAttachmentsTools {
110
114
  }],
111
115
  };
112
116
  }
113
- await this.repo.deleteTaskAttachmentAsync(result.token.targetId);
117
+ await this.repo.deleteTaskAttachmentAsync((result.token.targetId));
114
118
  return {
115
119
  content: [{
116
120
  type: 'text',
@@ -119,4 +123,56 @@ export class TaskAttachmentsTools {
119
123
  };
120
124
  }
121
125
  }
126
+ // =============================================================================
127
+ // Registry Definitions (v3 registry-driven architecture, U2)
128
+ // =============================================================================
129
+ /**
130
+ * Registry tool definitions for the task-attachments domain.
131
+ */
132
+ export function taskAttachmentsToolDefinitions() {
133
+ const tools = (ctx) => requireGraphToolset(ctx, 'taskAttachments');
134
+ return [
135
+ defineTool({
136
+ name: 'list_task_attachments',
137
+ description: 'List attachments on a To Do task (Graph API)',
138
+ input: ListTaskAttachmentsInput,
139
+ annotations: { readOnlyHint: true, openWorldHint: true },
140
+ destructive: false,
141
+ presets: ['tasks'],
142
+ backends: ['graph'],
143
+ handler: (ctx, params) => tools(ctx).listTaskAttachments(params),
144
+ }),
145
+ defineTool({
146
+ name: 'create_task_attachment',
147
+ description: 'Attach a file to a To Do task (small files only, base64 encoded) (Graph API)',
148
+ input: CreateTaskAttachmentInput,
149
+ annotations: { readOnlyHint: false, destructiveHint: false, openWorldHint: true },
150
+ destructive: false,
151
+ presets: ['tasks'],
152
+ backends: ['graph'],
153
+ handler: (ctx, params) => tools(ctx).createTaskAttachment(params),
154
+ }),
155
+ defineTool({
156
+ name: 'prepare_delete_task_attachment',
157
+ description: 'Prepare to delete a task attachment. Returns an approval token. Call confirm_delete_task_attachment to execute. (Graph API)',
158
+ input: PrepareDeleteTaskAttachmentInput,
159
+ annotations: { readOnlyHint: false, destructiveHint: false, openWorldHint: true },
160
+ destructive: true,
161
+ presets: ['tasks'],
162
+ backends: ['graph'],
163
+ handler: (ctx, params) => tools(ctx).prepareDeleteTaskAttachment(params),
164
+ onElicit: approvalTokenLink('confirm_delete_task_attachment'),
165
+ }),
166
+ defineTool({
167
+ name: 'confirm_delete_task_attachment',
168
+ description: 'Confirm deletion of a task attachment with approval token (Graph API)',
169
+ input: ConfirmDeleteTaskAttachmentInput,
170
+ annotations: { readOnlyHint: false, destructiveHint: true, openWorldHint: true },
171
+ destructive: true,
172
+ presets: ['tasks'],
173
+ backends: ['graph'],
174
+ handler: (ctx, params) => tools(ctx).confirmDeleteTaskAttachment(params),
175
+ }),
176
+ ];
177
+ }
122
178
  //# sourceMappingURL=task-attachments.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"task-attachments.js","sourceRoot":"","sources":["../../src/tools/task-attachments.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task-attachments.js","sourceRoot":"","sources":["../../src/tools/task-attachments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
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 task list tools (v3 registry-driven architecture, U2). Holds
7
+ * the Microsoft To Do task list logic that previously lived inline in the
8
+ * `handleGraphToolCall` switch, with a two-phase approval pattern for the
9
+ * destructive delete operation.
10
+ */
11
+ import { z } from 'zod';
12
+ import type { GraphRepository } from '../graph/repository.js';
13
+ import type { ApprovalTokenManager } from '../approval/index.js';
14
+ import type { ToolDefinition, ToolResult } from '../registry/types.js';
15
+ declare module '../registry/types.js' {
16
+ interface GraphToolsets {
17
+ taskLists: GraphTaskListsTools;
18
+ }
19
+ }
20
+ export declare const ListTaskListsInput: z.ZodObject<{}, z.core.$strict>;
21
+ export declare const CreateTaskListInput: z.ZodObject<{
22
+ display_name: z.ZodString;
23
+ }, z.core.$strict>;
24
+ export declare const RenameTaskListInput: z.ZodObject<{
25
+ task_list_id: z.ZodString;
26
+ name: z.ZodString;
27
+ }, z.core.$strict>;
28
+ export declare const PrepareDeleteTaskListInput: z.ZodObject<{
29
+ task_list_id: z.ZodString;
30
+ }, z.core.$strict>;
31
+ export declare const ConfirmDeleteTaskListInput: z.ZodObject<{
32
+ token_id: z.ZodString;
33
+ task_list_id: z.ZodString;
34
+ }, z.core.$strict>;
35
+ export type CreateTaskListParams = z.infer<typeof CreateTaskListInput>;
36
+ export type RenameTaskListParams = z.infer<typeof RenameTaskListInput>;
37
+ export type PrepareDeleteTaskListParams = z.infer<typeof PrepareDeleteTaskListInput>;
38
+ export type ConfirmDeleteTaskListParams = z.infer<typeof ConfirmDeleteTaskListInput>;
39
+ /**
40
+ * Task list tools with two-phase approval for delete operations.
41
+ */
42
+ export declare class GraphTaskListsTools {
43
+ private readonly repository;
44
+ private readonly tokenManager;
45
+ constructor(repository: GraphRepository, tokenManager: ApprovalTokenManager);
46
+ listTaskLists(): Promise<ToolResult>;
47
+ createTaskList(params: CreateTaskListParams): Promise<ToolResult>;
48
+ renameTaskList(params: RenameTaskListParams): Promise<ToolResult>;
49
+ prepareDeleteTaskList(params: PrepareDeleteTaskListParams): ToolResult;
50
+ confirmDeleteTaskList(params: ConfirmDeleteTaskListParams): Promise<ToolResult>;
51
+ }
52
+ /**
53
+ * Registry tool definitions for the task-lists domain.
54
+ */
55
+ export declare function taskListsToolDefinitions(): ToolDefinition[];
56
+ //# sourceMappingURL=task-lists.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-lists.d.ts","sourceRoot":"","sources":["../../src/tools/task-lists.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAIjE,OAAO,KAAK,EAAe,cAAc,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEpF,OAAO,QAAQ,sBAAsB,CAAC;IACpC,UAAU,aAAa;QACrB,SAAS,EAAE,mBAAmB,CAAC;KAChC;CACF;AAMD,eAAO,MAAM,kBAAkB,iCAAqB,CAAC;AAErD,eAAO,MAAM,mBAAmB;;kBAE9B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;kBAG9B,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,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;AAUrF;;GAEG;AACH,qBAAa,mBAAmB;IAE5B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY;gBADZ,UAAU,EAAE,eAAe,EAC3B,YAAY,EAAE,oBAAoB;IAG/C,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;IAKpC,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,UAAU,CAAC;IAKjE,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,UAAU,CAAC;IAKvE,qBAAqB,CAAC,MAAM,EAAE,2BAA2B,GAAG,UAAU;IAgBhE,qBAAqB,CAAC,MAAM,EAAE,2BAA2B,GAAG,OAAO,CAAC,UAAU,CAAC;CAgBtF;AAMD;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,cAAc,EAAE,CAwD3D"}
@@ -0,0 +1,155 @@
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 task list tools (v3 registry-driven architecture, U2). Holds
7
+ * the Microsoft To Do task list logic that previously lived inline in the
8
+ * `handleGraphToolCall` switch, with a two-phase approval pattern for the
9
+ * destructive delete operation.
10
+ */
11
+ import { z } from 'zod';
12
+ import { Id } from '../ids/schema.js';
13
+ import { nextActionFor } from '../ids/next-action.js';
14
+ import { defineTool } from '../registry/define-tool.js';
15
+ import { tokenIdLink } from '../registry/elicit-links.js';
16
+ import { requireGraphToolset } from '../registry/context.js';
17
+ // =============================================================================
18
+ // Input Schemas
19
+ // =============================================================================
20
+ export const ListTaskListsInput = z.strictObject({});
21
+ export const CreateTaskListInput = z.strictObject({
22
+ display_name: z.string().min(1).describe('Name for the new task list'),
23
+ });
24
+ export const RenameTaskListInput = z.strictObject({
25
+ task_list_id: Id.taskList,
26
+ name: z.string().min(1).describe('New name for the task list'),
27
+ });
28
+ export const PrepareDeleteTaskListInput = z.strictObject({
29
+ task_list_id: Id.taskList,
30
+ });
31
+ export const ConfirmDeleteTaskListInput = z.strictObject({
32
+ token_id: z.string().uuid().describe('Approval token from prepare_delete_task_list'),
33
+ task_list_id: Id.taskList,
34
+ });
35
+ // =============================================================================
36
+ // Task Lists Tools
37
+ // =============================================================================
38
+ function jsonResult(data) {
39
+ return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
40
+ }
41
+ /**
42
+ * Task list tools with two-phase approval for delete operations.
43
+ */
44
+ export class GraphTaskListsTools {
45
+ repository;
46
+ tokenManager;
47
+ constructor(repository, tokenManager) {
48
+ this.repository = repository;
49
+ this.tokenManager = tokenManager;
50
+ }
51
+ async listTaskLists() {
52
+ const lists = await this.repository.listTaskListsAsync();
53
+ return jsonResult({ task_lists: lists, next: nextActionFor('taskList') ?? undefined });
54
+ }
55
+ async createTaskList(params) {
56
+ const listId = await this.repository.createTaskListAsync(params.display_name);
57
+ return jsonResult({ id: listId, display_name: params.display_name, status: 'created', next: nextActionFor('taskList') ?? undefined });
58
+ }
59
+ async renameTaskList(params) {
60
+ await this.repository.renameTaskListAsync(params.task_list_id, params.name);
61
+ return jsonResult({ success: true, message: 'Task list renamed' });
62
+ }
63
+ prepareDeleteTaskList(params) {
64
+ const token = this.tokenManager.generateToken({
65
+ operation: 'delete_task_list',
66
+ targetType: 'task_list',
67
+ targetId: params.task_list_id,
68
+ targetHash: String(params.task_list_id),
69
+ });
70
+ return jsonResult({
71
+ token_id: token.tokenId,
72
+ expires_at: new Date(token.expiresAt).toISOString(),
73
+ task_list_id: params.task_list_id,
74
+ action: `To confirm deleting task list ${params.task_list_id}, call confirm_delete_task_list with the token_id and task_list_id.`,
75
+ });
76
+ }
77
+ async confirmDeleteTaskList(params) {
78
+ const validation = this.tokenManager.consumeToken(params.token_id, 'delete_task_list', params.task_list_id);
79
+ if (!validation.valid) {
80
+ const errorMessages = {
81
+ NOT_FOUND: 'Token not found or already used',
82
+ EXPIRED: 'Token has expired. Please call prepare_delete_task_list again.',
83
+ OPERATION_MISMATCH: 'Token was not generated for delete_task_list',
84
+ TARGET_MISMATCH: 'Token was generated for a different task list',
85
+ ALREADY_CONSUMED: 'Token has already been used',
86
+ };
87
+ return jsonResult({ success: false, error: errorMessages[validation.error ?? ''] ?? 'Invalid token' });
88
+ }
89
+ await this.repository.deleteTaskListAsync(params.task_list_id);
90
+ return jsonResult({ success: true, message: 'Task list deleted' });
91
+ }
92
+ }
93
+ // =============================================================================
94
+ // Registry Definitions (v3 registry-driven architecture, U2)
95
+ // =============================================================================
96
+ /**
97
+ * Registry tool definitions for the task-lists domain.
98
+ */
99
+ export function taskListsToolDefinitions() {
100
+ const tools = (ctx) => requireGraphToolset(ctx, 'taskLists');
101
+ return [
102
+ defineTool({
103
+ name: 'list_task_lists',
104
+ description: 'List all task lists (Microsoft To Do) (Graph API)',
105
+ input: ListTaskListsInput,
106
+ annotations: { readOnlyHint: true },
107
+ destructive: false,
108
+ presets: ['tasks'],
109
+ backends: ['graph'],
110
+ handler: (ctx) => tools(ctx).listTaskLists(),
111
+ }),
112
+ defineTool({
113
+ name: 'create_task_list',
114
+ description: 'Create a new task list',
115
+ input: CreateTaskListInput,
116
+ annotations: { readOnlyHint: false, destructiveHint: false },
117
+ destructive: false,
118
+ presets: ['tasks'],
119
+ backends: ['graph'],
120
+ handler: (ctx, params) => tools(ctx).createTaskList(params),
121
+ }),
122
+ defineTool({
123
+ name: 'rename_task_list',
124
+ description: 'Rename a task list (Graph API)',
125
+ input: RenameTaskListInput,
126
+ annotations: { readOnlyHint: false, destructiveHint: false, openWorldHint: true },
127
+ destructive: false,
128
+ presets: ['tasks'],
129
+ backends: ['graph'],
130
+ handler: (ctx, params) => tools(ctx).renameTaskList(params),
131
+ }),
132
+ defineTool({
133
+ name: 'prepare_delete_task_list',
134
+ description: 'Prepare to delete a task list. Returns an approval token. Call confirm_delete_task_list to execute. (Graph API)',
135
+ input: PrepareDeleteTaskListInput,
136
+ annotations: { readOnlyHint: false, destructiveHint: false, openWorldHint: true },
137
+ destructive: true,
138
+ presets: ['tasks'],
139
+ backends: ['graph'],
140
+ handler: (ctx, params) => tools(ctx).prepareDeleteTaskList(params),
141
+ onElicit: tokenIdLink('confirm_delete_task_list', ['task_list_id']),
142
+ }),
143
+ defineTool({
144
+ name: 'confirm_delete_task_list',
145
+ description: 'Confirm task list deletion with approval token (Graph API)',
146
+ input: ConfirmDeleteTaskListInput,
147
+ annotations: { readOnlyHint: false, destructiveHint: true, openWorldHint: true },
148
+ destructive: true,
149
+ presets: ['tasks'],
150
+ backends: ['graph'],
151
+ handler: (ctx, params) => tools(ctx).confirmDeleteTaskList(params),
152
+ }),
153
+ ];
154
+ }
155
+ //# sourceMappingURL=task-lists.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-lists.js","sourceRoot":"","sources":["../../src/tools/task-lists.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
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 task tools (v3 registry-driven architecture, U2 — dual
7
+ * backend). Holds the task 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 { TaskRow } from '../database/repository.js';
14
+ import type { ApprovalTokenManager } from '../approval/index.js';
15
+ import type { ToolResult } from '../registry/types.js';
16
+ import type { ListTasksParams, SearchTasksParams, GetTaskParams, CreateTaskParams, UpdateTaskParams, CompleteTaskParams, PrepareDeleteTaskParams, ConfirmDeleteTaskParams } from './tasks.js';
17
+ /**
18
+ * Transforms a Graph task row to the summary shape returned by the graph
19
+ * backend's task tools.
20
+ */
21
+ export declare function transformTaskRow(row: TaskRow): {
22
+ id: string;
23
+ folderId: string;
24
+ name: string | null;
25
+ isCompleted: boolean;
26
+ dueDate: string | null;
27
+ startDate: string | null;
28
+ priority: number | null;
29
+ hasReminder: boolean;
30
+ };
31
+ /**
32
+ * Graph task tools. Each method mirrors the extracted inline graph case body
33
+ * and returns an MCP `ToolResult`.
34
+ */
35
+ export declare class GraphTasksTools {
36
+ private readonly repository;
37
+ private readonly contentReaders;
38
+ private readonly tokenManager;
39
+ constructor(repository: GraphRepository, contentReaders: GraphContentReaders, tokenManager: ApprovalTokenManager);
40
+ listTasks(params: ListTasksParams): Promise<ToolResult>;
41
+ searchTasks(params: SearchTasksParams): Promise<ToolResult>;
42
+ getTask(params: GetTaskParams): Promise<ToolResult>;
43
+ createTask(params: CreateTaskParams): Promise<ToolResult>;
44
+ updateTask(params: UpdateTaskParams): Promise<ToolResult>;
45
+ completeTask(params: CompleteTaskParams): Promise<ToolResult>;
46
+ prepareDeleteTask(params: PrepareDeleteTaskParams): Promise<ToolResult>;
47
+ confirmDeleteTask(params: ConfirmDeleteTaskParams): Promise<ToolResult>;
48
+ }
49
+ //# sourceMappingURL=tasks-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks-graph.d.ts","sourceRoot":"","sources":["../../src/tools/tasks-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;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAIjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,YAAY,CAAC;AAMpB;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG;IAC9C,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;CACtB,CAWA;AAED;;;GAGG;AACH,qBAAa,eAAe;IAExB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAFZ,UAAU,EAAE,eAAe,EAC3B,cAAc,EAAE,mBAAmB,EACnC,YAAY,EAAE,oBAAoB;IAG/C,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC;IAOvD,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;IAK3D,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC;IAUnD,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IAqBzD,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IA6CzD,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;IAK7D,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,UAAU,CAAC;IA+BvE,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,UAAU,CAAC;CAsC9E"}
@@ -0,0 +1,193 @@
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 { hashTaskForApproval } from '../approval/index.js';
6
+ import { unixTimestampToLocalIso } from '../graph/mappers/utils.js';
7
+ import { nextActionFor } from '../ids/next-action.js';
8
+ function jsonResult(data) {
9
+ return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
10
+ }
11
+ /**
12
+ * Transforms a Graph task row to the summary shape returned by the graph
13
+ * backend's task tools.
14
+ */
15
+ export function transformTaskRow(row) {
16
+ return {
17
+ id: row.id,
18
+ folderId: row.folderId,
19
+ name: row.name,
20
+ isCompleted: row.isCompleted === 1,
21
+ dueDate: unixTimestampToLocalIso(row.dueDate),
22
+ startDate: unixTimestampToLocalIso(row.startDate),
23
+ priority: row.priority,
24
+ hasReminder: row.hasReminder === 1,
25
+ };
26
+ }
27
+ /**
28
+ * Graph task tools. Each method mirrors the extracted inline graph case body
29
+ * and returns an MCP `ToolResult`.
30
+ */
31
+ export class GraphTasksTools {
32
+ repository;
33
+ contentReaders;
34
+ tokenManager;
35
+ constructor(repository, contentReaders, tokenManager) {
36
+ this.repository = repository;
37
+ this.contentReaders = contentReaders;
38
+ this.tokenManager = tokenManager;
39
+ }
40
+ async listTasks(params) {
41
+ const tasks = params.include_completed
42
+ ? await this.repository.listTasksAsync(params.limit, params.offset)
43
+ : await this.repository.listIncompleteTasksAsync(params.limit, params.offset);
44
+ return jsonResult({ tasks: tasks.map(transformTaskRow), next: nextActionFor('task') ?? undefined });
45
+ }
46
+ async searchTasks(params) {
47
+ const tasks = await this.repository.searchTasksAsync(params.query, params.limit);
48
+ return jsonResult({ tasks: tasks.map(transformTaskRow), next: nextActionFor('task') ?? undefined });
49
+ }
50
+ async getTask(params) {
51
+ const task = await this.repository.getTaskAsync(params.task_id);
52
+ if (task == null) {
53
+ return { content: [{ type: 'text', text: 'Task not found' }], isError: true };
54
+ }
55
+ const details = await this.contentReaders.task.readTaskDetailsAsync(task.dataFilePath);
56
+ return jsonResult({ ...transformTaskRow(task), ...details });
57
+ }
58
+ async createTask(params) {
59
+ const taskId = await this.repository.createTaskAsync({
60
+ title: params.title,
61
+ task_list_id: params.task_list_id,
62
+ ...(params.body != null ? { body: params.body } : {}),
63
+ ...(params.body_type != null ? { body_type: params.body_type } : {}),
64
+ ...(params.due_date != null ? { due_date: params.due_date } : {}),
65
+ ...(params.importance != null ? { importance: params.importance } : {}),
66
+ ...(params.reminder_date != null ? { reminder_date: params.reminder_date } : {}),
67
+ ...(params.recurrence != null ? { recurrence: params.recurrence } : {}),
68
+ ...(params.categories != null ? { categories: params.categories } : {}),
69
+ });
70
+ return jsonResult({
71
+ id: taskId,
72
+ title: params.title,
73
+ task_list_id: params.task_list_id,
74
+ status: 'created',
75
+ next: nextActionFor('task') ?? undefined,
76
+ });
77
+ }
78
+ async updateTask(params) {
79
+ const updates = {};
80
+ if (params.title != null)
81
+ updates.title = params.title;
82
+ if (params.body != null) {
83
+ updates.body = {
84
+ contentType: params.body_type ?? 'text',
85
+ content: params.body,
86
+ };
87
+ }
88
+ if (params.due_date != null) {
89
+ updates.dueDateTime = {
90
+ dateTime: params.due_date,
91
+ timeZone: 'UTC',
92
+ };
93
+ }
94
+ if (params.importance != null)
95
+ updates.importance = params.importance;
96
+ if (params.reminder_date != null) {
97
+ updates.isReminderOn = true;
98
+ updates.reminderDateTime = {
99
+ dateTime: params.reminder_date,
100
+ timeZone: 'UTC',
101
+ };
102
+ }
103
+ if (params.status != null)
104
+ updates.status = params.status;
105
+ if (params.recurrence != null) {
106
+ updates.recurrence = {
107
+ pattern: {
108
+ type: params.recurrence.pattern,
109
+ interval: params.recurrence.interval ?? 1,
110
+ ...(params.recurrence.days_of_week != null ? { daysOfWeek: params.recurrence.days_of_week } : {}),
111
+ ...(params.recurrence.day_of_month != null ? { dayOfMonth: params.recurrence.day_of_month } : {}),
112
+ },
113
+ range: {
114
+ type: params.recurrence.range_type,
115
+ startDate: params.recurrence.start_date,
116
+ ...(params.recurrence.end_date != null ? { endDate: params.recurrence.end_date } : {}),
117
+ ...(params.recurrence.occurrences != null ? { numberOfOccurrences: params.recurrence.occurrences } : {}),
118
+ },
119
+ };
120
+ }
121
+ if (params.categories != null)
122
+ updates.categories = params.categories;
123
+ await this.repository.updateTaskAsync(params.task_id, updates);
124
+ return { content: [{ type: 'text', text: `Successfully updated task ${params.task_id}` }] };
125
+ }
126
+ async completeTask(params) {
127
+ await this.repository.completeTaskAsync(params.task_id);
128
+ return { content: [{ type: 'text', text: `Successfully completed task ${params.task_id}` }] };
129
+ }
130
+ async prepareDeleteTask(params) {
131
+ const task = await this.repository.getTaskAsync(params.task_id);
132
+ if (task == null) {
133
+ return { content: [{ type: 'text', text: 'Task not found' }], isError: true };
134
+ }
135
+ const taskInfo = this.repository.getTaskInfo(params.task_id);
136
+ const graphTask = taskInfo != null
137
+ ? await this.repository.getClient().getTask(taskInfo.taskListId, taskInfo.taskId)
138
+ : null;
139
+ const hash = hashTaskForApproval({
140
+ taskId: taskInfo?.taskId ?? '',
141
+ title: graphTask?.title ?? null,
142
+ listId: taskInfo?.taskListId ?? '',
143
+ });
144
+ const token = this.tokenManager.generateToken({
145
+ operation: 'delete_task',
146
+ targetType: 'task',
147
+ targetId: params.task_id,
148
+ targetHash: hash,
149
+ });
150
+ return jsonResult({
151
+ token_id: token.tokenId,
152
+ expires_at: new Date(token.expiresAt).toISOString(),
153
+ task: transformTaskRow(task),
154
+ action: 'This task will be permanently deleted.',
155
+ });
156
+ }
157
+ async confirmDeleteTask(params) {
158
+ // Re-fetch the task and compute fresh hash for comparison
159
+ const taskInfo = this.repository.getTaskInfo(params.task_id);
160
+ const graphTask = taskInfo != null
161
+ ? await this.repository.getClient().getTask(taskInfo.taskListId, taskInfo.taskId)
162
+ : null;
163
+ const currentHash = hashTaskForApproval({
164
+ taskId: taskInfo?.taskId ?? '',
165
+ title: graphTask?.title ?? null,
166
+ listId: taskInfo?.taskListId ?? '',
167
+ });
168
+ const validation = this.tokenManager.consumeToken(params.token_id, 'delete_task', params.task_id);
169
+ if (!validation.valid) {
170
+ const errorMessages = {
171
+ NOT_FOUND: 'Token not found or already used',
172
+ EXPIRED: 'Token has expired. Please call prepare_delete_task again.',
173
+ OPERATION_MISMATCH: 'Token was not generated for delete_task',
174
+ TARGET_MISMATCH: 'Token was generated for a different task',
175
+ ALREADY_CONSUMED: 'Token has already been used',
176
+ };
177
+ return {
178
+ content: [{ type: 'text', text: errorMessages[validation.error ?? ''] ?? 'Invalid token' }],
179
+ isError: true,
180
+ };
181
+ }
182
+ // Check that the task hasn't changed since prepare
183
+ if (validation.token.targetHash !== currentHash) {
184
+ return {
185
+ content: [{ type: 'text', text: 'Task has changed since prepare was called. Please call prepare_delete_task again.' }],
186
+ isError: true,
187
+ };
188
+ }
189
+ await this.repository.deleteTaskAsync(params.task_id);
190
+ return { content: [{ type: 'text', text: `Successfully deleted task ${params.task_id}` }] };
191
+ }
192
+ }
193
+ //# sourceMappingURL=tasks-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks-graph.js","sourceRoot":"","sources":["../../src/tools/tasks-graph.ts"],"names":[],"mappings":"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"}