@aaronsb/google-workspace-mcp 2.7.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 (273) hide show
  1. package/LICENSE +201 -21
  2. package/LICENSE-MIT +21 -0
  3. package/NOTICE +24 -0
  4. package/README.md +87 -57
  5. package/build/accounts/auth.d.ts +1 -1
  6. package/build/accounts/auth.js +1 -1
  7. package/build/accounts/oauth.js +3 -3
  8. package/build/accounts/oauth.js.map +1 -1
  9. package/build/accounts/token-service.js +1 -1
  10. package/build/accounts/token-service.js.map +1 -1
  11. package/build/coverage/analyze.d.ts +1 -1
  12. package/build/coverage/analyze.js +6 -4
  13. package/build/coverage/analyze.js.map +1 -1
  14. package/build/coverage/baseline.js +37 -20
  15. package/build/coverage/baseline.js.map +1 -1
  16. package/build/coverage/compare.d.ts +1 -1
  17. package/build/coverage/compare.js +19 -10
  18. package/build/coverage/compare.js.map +1 -1
  19. package/build/coverage/discover.d.ts +5 -5
  20. package/build/coverage/discover.js +71 -155
  21. package/build/coverage/discover.js.map +1 -1
  22. package/build/coverage/report.js +3 -3
  23. package/build/coverage/report.js.map +1 -1
  24. package/build/coverage/types.d.ts +19 -4
  25. package/build/executor/index.d.ts +0 -3
  26. package/build/executor/index.js +1 -2
  27. package/build/executor/index.js.map +1 -1
  28. package/build/factory/defaults.js +30 -4
  29. package/build/factory/defaults.js.map +1 -1
  30. package/build/factory/generator.d.ts +10 -4
  31. package/build/factory/generator.js +86 -96
  32. package/build/factory/generator.js.map +1 -1
  33. package/build/factory/manifest/README.md +4 -3
  34. package/build/factory/manifest/calendar.yaml +1 -11
  35. package/build/factory/manifest/docs.yaml +15 -6
  36. package/build/factory/manifest/drive.yaml +1 -5
  37. package/build/factory/manifest/gmail.yaml +32 -25
  38. package/build/factory/manifest/meet.yaml +1 -1
  39. package/build/factory/manifest/sheets.yaml +2 -5
  40. package/build/factory/manifest/tasks.yaml +40 -2
  41. package/build/factory/patches.js +2 -0
  42. package/build/factory/patches.js.map +1 -1
  43. package/build/factory/registry.d.ts +2 -3
  44. package/build/factory/registry.js +3 -9
  45. package/build/factory/registry.js.map +1 -1
  46. package/build/factory/safety.js +4 -4
  47. package/build/factory/safety.js.map +1 -1
  48. package/build/factory/types.d.ts +16 -15
  49. package/build/google/client.d.ts +45 -0
  50. package/build/google/client.js +232 -0
  51. package/build/google/client.js.map +1 -0
  52. package/build/google/descriptor.d.ts +40 -0
  53. package/build/google/descriptor.js +37 -0
  54. package/build/google/descriptor.js.map +1 -0
  55. package/build/google/descriptor.json +5271 -0
  56. package/build/google/errors.d.ts +45 -0
  57. package/build/google/errors.js +44 -0
  58. package/build/google/errors.js.map +1 -0
  59. package/build/google/methods.d.ts +37 -0
  60. package/build/google/methods.js +13 -0
  61. package/build/google/methods.js.map +1 -0
  62. package/build/index.js +30 -4
  63. package/build/index.js.map +1 -1
  64. package/build/node-floor.d.ts +16 -0
  65. package/build/node-floor.js +73 -0
  66. package/build/node-floor.js.map +1 -0
  67. package/build/server/formatting/markdown.d.ts +1 -1
  68. package/build/server/formatting/markdown.js +1 -1
  69. package/build/server/formatting/next-steps.js +1 -1
  70. package/build/server/formatting/next-steps.js.map +1 -1
  71. package/build/server/handlers/accounts.js +2 -2
  72. package/build/server/handlers/accounts.js.map +1 -1
  73. package/build/server/scratchpad/adapters/import-doc.js +15 -13
  74. package/build/server/scratchpad/adapters/import-doc.js.map +1 -1
  75. package/build/server/scratchpad/adapters/import-drive.js +16 -11
  76. package/build/server/scratchpad/adapters/import-drive.js.map +1 -1
  77. package/build/server/scratchpad/adapters/import-email.js +3 -15
  78. package/build/server/scratchpad/adapters/import-email.js.map +1 -1
  79. package/build/server/scratchpad/adapters/import-meet.js +5 -17
  80. package/build/server/scratchpad/adapters/import-meet.js.map +1 -1
  81. package/build/server/scratchpad/adapters/import-sheet.js +5 -6
  82. package/build/server/scratchpad/adapters/import-sheet.js.map +1 -1
  83. package/build/server/scratchpad/adapters/send-calendar.js +18 -13
  84. package/build/server/scratchpad/adapters/send-calendar.js.map +1 -1
  85. package/build/server/scratchpad/adapters/send-doc.js +22 -17
  86. package/build/server/scratchpad/adapters/send-doc.js.map +1 -1
  87. package/build/server/scratchpad/adapters/send-email-draft.d.ts +1 -1
  88. package/build/server/scratchpad/adapters/send-email-draft.js +17 -25
  89. package/build/server/scratchpad/adapters/send-email-draft.js.map +1 -1
  90. package/build/server/scratchpad/adapters/send-email.d.ts +2 -2
  91. package/build/server/scratchpad/adapters/send-email.js +21 -25
  92. package/build/server/scratchpad/adapters/send-email.js.map +1 -1
  93. package/build/server/scratchpad/adapters/send-sheet.js +10 -10
  94. package/build/server/scratchpad/adapters/send-sheet.js.map +1 -1
  95. package/build/server/scratchpad/adapters/send-task.js +9 -8
  96. package/build/server/scratchpad/adapters/send-task.js.map +1 -1
  97. package/build/server/scratchpad/handler.js +22 -28
  98. package/build/server/scratchpad/handler.js.map +1 -1
  99. package/build/server/scratchpad/manager.d.ts +1 -1
  100. package/build/server/server.js +13 -10
  101. package/build/server/server.js.map +1 -1
  102. package/build/server/session/tracker.js +21 -25
  103. package/build/server/session/tracker.js.map +1 -1
  104. package/build/server/tools.d.ts +1 -1
  105. package/build/server/tools.js +3 -3
  106. package/build/server/tools.js.map +1 -1
  107. package/build/services/calendar/patch.js +178 -68
  108. package/build/services/calendar/patch.js.map +1 -1
  109. package/build/services/docs/patch.d.ts +5 -3
  110. package/build/services/docs/patch.js +89 -19
  111. package/build/services/docs/patch.js.map +1 -1
  112. package/build/services/drive/patch.d.ts +1 -1
  113. package/build/services/drive/patch.js +115 -143
  114. package/build/services/drive/patch.js.map +1 -1
  115. package/build/services/gmail/attachments.js +10 -15
  116. package/build/services/gmail/attachments.js.map +1 -1
  117. package/build/services/gmail/mail.d.ts +34 -0
  118. package/build/services/gmail/mail.js +245 -0
  119. package/build/services/gmail/mail.js.map +1 -0
  120. package/build/services/gmail/mime.d.ts +45 -4
  121. package/build/services/gmail/mime.js +138 -4
  122. package/build/services/gmail/mime.js.map +1 -1
  123. package/build/services/gmail/patch.js +103 -53
  124. package/build/services/gmail/patch.js.map +1 -1
  125. package/build/services/meet/patch.js +24 -31
  126. package/build/services/meet/patch.js.map +1 -1
  127. package/build/services/sheets/patch.js +30 -35
  128. package/build/services/sheets/patch.js.map +1 -1
  129. package/build/services/tasks/patch.d.ts +18 -0
  130. package/build/services/tasks/patch.js +37 -0
  131. package/build/services/tasks/patch.js.map +1 -0
  132. package/build/version.d.ts +1 -1
  133. package/build/version.js +2 -2
  134. package/build/version.js.map +1 -1
  135. package/package.json +23 -12
  136. package/build/__helpers__/testSetup.d.ts +0 -1
  137. package/build/__helpers__/testSetup.js +0 -6
  138. package/build/__helpers__/testSetup.js.map +0 -1
  139. package/build/__tests__/accounts/credentials.test.d.ts +0 -1
  140. package/build/__tests__/accounts/credentials.test.js +0 -127
  141. package/build/__tests__/accounts/credentials.test.js.map +0 -1
  142. package/build/__tests__/accounts/oauth.test.d.ts +0 -1
  143. package/build/__tests__/accounts/oauth.test.js +0 -71
  144. package/build/__tests__/accounts/oauth.test.js.map +0 -1
  145. package/build/__tests__/accounts/registry.test.d.ts +0 -1
  146. package/build/__tests__/accounts/registry.test.js +0 -74
  147. package/build/__tests__/accounts/registry.test.js.map +0 -1
  148. package/build/__tests__/accounts/token-service.test.d.ts +0 -1
  149. package/build/__tests__/accounts/token-service.test.js +0 -126
  150. package/build/__tests__/accounts/token-service.test.js.map +0 -1
  151. package/build/__tests__/executor/errors.test.d.ts +0 -1
  152. package/build/__tests__/executor/errors.test.js +0 -42
  153. package/build/__tests__/executor/errors.test.js.map +0 -1
  154. package/build/__tests__/executor/gws.test.d.ts +0 -1
  155. package/build/__tests__/executor/gws.test.js +0 -187
  156. package/build/__tests__/executor/gws.test.js.map +0 -1
  157. package/build/__tests__/executor/paths.test.d.ts +0 -1
  158. package/build/__tests__/executor/paths.test.js +0 -60
  159. package/build/__tests__/executor/paths.test.js.map +0 -1
  160. package/build/__tests__/executor/resolve-binary.test.d.ts +0 -1
  161. package/build/__tests__/executor/resolve-binary.test.js +0 -58
  162. package/build/__tests__/executor/resolve-binary.test.js.map +0 -1
  163. package/build/__tests__/executor/workspace.test.d.ts +0 -1
  164. package/build/__tests__/executor/workspace.test.js +0 -143
  165. package/build/__tests__/executor/workspace.test.js.map +0 -1
  166. package/build/__tests__/factory/calendar-patch.test.d.ts +0 -5
  167. package/build/__tests__/factory/calendar-patch.test.js +0 -269
  168. package/build/__tests__/factory/calendar-patch.test.js.map +0 -1
  169. package/build/__tests__/factory/drive-patch.test.d.ts +0 -5
  170. package/build/__tests__/factory/drive-patch.test.js +0 -344
  171. package/build/__tests__/factory/drive-patch.test.js.map +0 -1
  172. package/build/__tests__/factory/generator.test.d.ts +0 -1
  173. package/build/__tests__/factory/generator.test.js +0 -240
  174. package/build/__tests__/factory/generator.test.js.map +0 -1
  175. package/build/__tests__/factory/patch-coverage.test.d.ts +0 -10
  176. package/build/__tests__/factory/patch-coverage.test.js +0 -182
  177. package/build/__tests__/factory/patch-coverage.test.js.map +0 -1
  178. package/build/__tests__/factory/safety.test.d.ts +0 -1
  179. package/build/__tests__/factory/safety.test.js +0 -107
  180. package/build/__tests__/factory/safety.test.js.map +0 -1
  181. package/build/__tests__/factory/sheets-patch.test.d.ts +0 -6
  182. package/build/__tests__/factory/sheets-patch.test.js +0 -498
  183. package/build/__tests__/factory/sheets-patch.test.js.map +0 -1
  184. package/build/__tests__/integration/executor.test.d.ts +0 -5
  185. package/build/__tests__/integration/executor.test.js +0 -38
  186. package/build/__tests__/integration/executor.test.js.map +0 -1
  187. package/build/__tests__/integration/handlers.test.d.ts +0 -6
  188. package/build/__tests__/integration/handlers.test.js +0 -95
  189. package/build/__tests__/integration/handlers.test.js.map +0 -1
  190. package/build/__tests__/integration/setup.d.ts +0 -19
  191. package/build/__tests__/integration/setup.js +0 -61
  192. package/build/__tests__/integration/setup.js.map +0 -1
  193. package/build/__tests__/server/formatting/html-sanitize.test.d.ts +0 -7
  194. package/build/__tests__/server/formatting/html-sanitize.test.js +0 -174
  195. package/build/__tests__/server/formatting/html-sanitize.test.js.map +0 -1
  196. package/build/__tests__/server/formatting/markdown.test.d.ts +0 -1
  197. package/build/__tests__/server/formatting/markdown.test.js +0 -259
  198. package/build/__tests__/server/formatting/markdown.test.js.map +0 -1
  199. package/build/__tests__/server/formatting/next-steps.test.d.ts +0 -1
  200. package/build/__tests__/server/formatting/next-steps.test.js +0 -42
  201. package/build/__tests__/server/formatting/next-steps.test.js.map +0 -1
  202. package/build/__tests__/server/handler.test.d.ts +0 -1
  203. package/build/__tests__/server/handler.test.js +0 -97
  204. package/build/__tests__/server/handler.test.js.map +0 -1
  205. package/build/__tests__/server/handlers/__mocks__/executor.d.ts +0 -173
  206. package/build/__tests__/server/handlers/__mocks__/executor.js +0 -135
  207. package/build/__tests__/server/handlers/__mocks__/executor.js.map +0 -1
  208. package/build/__tests__/server/handlers/accounts.test.d.ts +0 -1
  209. package/build/__tests__/server/handlers/accounts.test.js +0 -129
  210. package/build/__tests__/server/handlers/accounts.test.js.map +0 -1
  211. package/build/__tests__/server/handlers/calendar.test.d.ts +0 -1
  212. package/build/__tests__/server/handlers/calendar.test.js +0 -96
  213. package/build/__tests__/server/handlers/calendar.test.js.map +0 -1
  214. package/build/__tests__/server/handlers/drive.test.d.ts +0 -1
  215. package/build/__tests__/server/handlers/drive.test.js +0 -68
  216. package/build/__tests__/server/handlers/drive.test.js.map +0 -1
  217. package/build/__tests__/server/handlers/email.test.d.ts +0 -1
  218. package/build/__tests__/server/handlers/email.test.js +0 -99
  219. package/build/__tests__/server/handlers/email.test.js.map +0 -1
  220. package/build/__tests__/server/handlers/validate.test.d.ts +0 -1
  221. package/build/__tests__/server/handlers/validate.test.js +0 -88
  222. package/build/__tests__/server/handlers/validate.test.js.map +0 -1
  223. package/build/__tests__/server/queue.test.d.ts +0 -1
  224. package/build/__tests__/server/queue.test.js +0 -199
  225. package/build/__tests__/server/queue.test.js.map +0 -1
  226. package/build/__tests__/server/server.test.d.ts +0 -7
  227. package/build/__tests__/server/server.test.js +0 -135
  228. package/build/__tests__/server/server.test.js.map +0 -1
  229. package/build/__tests__/server/session/context.test.d.ts +0 -1
  230. package/build/__tests__/server/session/context.test.js +0 -101
  231. package/build/__tests__/server/session/context.test.js.map +0 -1
  232. package/build/__tests__/server/session/tracker.test.d.ts +0 -1
  233. package/build/__tests__/server/session/tracker.test.js +0 -146
  234. package/build/__tests__/server/session/tracker.test.js.map +0 -1
  235. package/build/__tests__/server/tools.test.d.ts +0 -1
  236. package/build/__tests__/server/tools.test.js +0 -91
  237. package/build/__tests__/server/tools.test.js.map +0 -1
  238. package/build/__tests__/services/gmail/mime.test.d.ts +0 -1
  239. package/build/__tests__/services/gmail/mime.test.js +0 -23
  240. package/build/__tests__/services/gmail/mime.test.js.map +0 -1
  241. package/build/__tests__/services/meet/patch.test.d.ts +0 -4
  242. package/build/__tests__/services/meet/patch.test.js +0 -374
  243. package/build/__tests__/services/meet/patch.test.js.map +0 -1
  244. package/build/executor/errors.d.ts +0 -15
  245. package/build/executor/errors.js +0 -37
  246. package/build/executor/errors.js.map +0 -1
  247. package/build/executor/gws.d.ts +0 -26
  248. package/build/executor/gws.js +0 -197
  249. package/build/executor/gws.js.map +0 -1
  250. package/build/server/handlers/calendar.d.ts +0 -2
  251. package/build/server/handlers/calendar.js +0 -97
  252. package/build/server/handlers/calendar.js.map +0 -1
  253. package/build/server/handlers/drive.d.ts +0 -2
  254. package/build/server/handlers/drive.js +0 -58
  255. package/build/server/handlers/drive.js.map +0 -1
  256. package/build/server/handlers/email.d.ts +0 -2
  257. package/build/server/handlers/email.js +0 -119
  258. package/build/server/handlers/email.js.map +0 -1
  259. package/build/server/scratchpad/__tests__/docs-sync-integration.test.d.ts +0 -11
  260. package/build/server/scratchpad/__tests__/docs-sync-integration.test.js +0 -187
  261. package/build/server/scratchpad/__tests__/docs-sync-integration.test.js.map +0 -1
  262. package/build/server/scratchpad/__tests__/docs-sync.test.d.ts +0 -16
  263. package/build/server/scratchpad/__tests__/docs-sync.test.js +0 -213
  264. package/build/server/scratchpad/__tests__/docs-sync.test.js.map +0 -1
  265. package/build/server/scratchpad/__tests__/json-path.test.d.ts +0 -4
  266. package/build/server/scratchpad/__tests__/json-path.test.js +0 -121
  267. package/build/server/scratchpad/__tests__/json-path.test.js.map +0 -1
  268. package/build/server/scratchpad/__tests__/manager.test.d.ts +0 -5
  269. package/build/server/scratchpad/__tests__/manager.test.js +0 -886
  270. package/build/server/scratchpad/__tests__/manager.test.js.map +0 -1
  271. package/build/server/scratchpad/__tests__/validate.test.d.ts +0 -4
  272. package/build/server/scratchpad/__tests__/validate.test.js +0 -112
  273. package/build/server/scratchpad/__tests__/validate.test.js.map +0 -1
@@ -1,7 +1,7 @@
1
1
  tool_name: manage_email
2
2
  description: "Search, read, send, forward, or manage emails in a Google Workspace account. Supports Gmail search syntax."
3
3
  requires_email: true
4
- gws_service: gmail
4
+ google_service: gmail
5
5
  operations:
6
6
 
7
7
  # --- Core message operations ---
@@ -49,7 +49,6 @@ operations:
49
49
  send:
50
50
  type: action
51
51
  description: "compose and send a new email (creates draft when attachments present, 35MB attachment limit via upload endpoint)"
52
- helper: "+send"
53
52
  params:
54
53
  to:
55
54
  type: string
@@ -63,6 +62,9 @@ operations:
63
62
  type: string
64
63
  description: "Email body text"
65
64
  required: true
65
+ from:
66
+ type: string
67
+ description: "Sender email or RFC 2822 mailbox for a verified Gmail Send As alias"
66
68
  cc:
67
69
  type: string
68
70
  description: "CC email(s), comma-separated"
@@ -78,17 +80,10 @@ operations:
78
80
  draft:
79
81
  type: boolean
80
82
  description: "Save as draft instead of sending (default: false, forced true when attachments present)"
81
- cli_args:
82
- to: "--to"
83
- subject: "--subject"
84
- body: "--body"
85
- cc: "--cc"
86
- bcc: "--bcc"
87
83
 
88
84
  reply:
89
85
  type: action
90
- description: "reply to a message (thread-aware)"
91
- helper: "+reply"
86
+ description: "reply to a message (thread-aware, creates draft when attachments present)"
92
87
  params:
93
88
  messageId:
94
89
  type: string
@@ -98,14 +93,19 @@ operations:
98
93
  type: string
99
94
  description: "Reply body text"
100
95
  required: true
101
- cli_args:
102
- messageId: "--message-id"
103
- body: "--body"
96
+ attachments:
97
+ type: string
98
+ description: "Workspace filenames to attach, comma-separated (files must exist in workspace via manage_workspace). Creates draft when present."
99
+ html:
100
+ type: boolean
101
+ description: "Treat body as HTML content (default: plain text)"
102
+ draft:
103
+ type: boolean
104
+ description: "Save as draft instead of sending (default: false, forced true when attachments present)"
104
105
 
105
106
  replyAll:
106
107
  type: action
107
- description: "reply-all to a message (thread-aware, includes all recipients)"
108
- helper: "+reply-all"
108
+ description: "reply-all to a message (thread-aware, includes all recipients, creates draft when attachments present)"
109
109
  params:
110
110
  messageId:
111
111
  type: string
@@ -118,15 +118,19 @@ operations:
118
118
  cc:
119
119
  type: string
120
120
  description: "Additional CC email(s), comma-separated"
121
- cli_args:
122
- messageId: "--message-id"
123
- body: "--body"
124
- cc: "--cc"
121
+ attachments:
122
+ type: string
123
+ description: "Workspace filenames to attach, comma-separated (files must exist in workspace via manage_workspace). Creates draft when present."
124
+ html:
125
+ type: boolean
126
+ description: "Treat body as HTML content (default: plain text)"
127
+ draft:
128
+ type: boolean
129
+ description: "Save as draft instead of sending (default: false, forced true when attachments present)"
125
130
 
126
131
  forward:
127
132
  type: action
128
133
  description: "forward a message to new recipients (includes original attachments by default)"
129
- helper: "+forward"
130
134
  params:
131
135
  messageId:
132
136
  type: string
@@ -139,17 +143,20 @@ operations:
139
143
  body:
140
144
  type: string
141
145
  description: "Optional note to prepend above forwarded message"
142
- cli_args:
143
- messageId: "--message-id"
144
- to: "--to"
145
- body: "--body"
146
146
 
147
147
  # --- Inbox management ---
148
148
 
149
+ # triage is just a filtered list: messages.list with an unread query. The
150
+ # hydration walk (messages.get per id) is already done by gmailPatch.afterExecute,
151
+ # which also carries threadId and snippet.
149
152
  triage:
150
153
  type: list
151
154
  description: "unread inbox summary (sender, subject, date)"
152
- helper: "+triage"
155
+ resource: users.messages.list
156
+ defaults:
157
+ userId: me
158
+ q: "is:unread in:inbox"
159
+ maxResults: 20
153
160
 
154
161
  trash:
155
162
  type: action
@@ -1,7 +1,7 @@
1
1
  tool_name: manage_meet
2
2
  description: "Browse past Google Meet conferences, participants, transcripts, recordings, and AI-generated smart notes. Requires Workspace Business Standard+ for transcripts/recordings."
3
3
  requires_email: true
4
- gws_service: meet
4
+ google_service: meet
5
5
  operations:
6
6
 
7
7
  # --- Conference records ---
@@ -1,7 +1,7 @@
1
1
  tool_name: manage_sheets
2
2
  description: "Read, write, and manage Google Sheets spreadsheets."
3
3
  requires_email: true
4
- gws_service: sheets
4
+ google_service: sheets
5
5
  operations:
6
6
 
7
7
  get:
@@ -26,7 +26,7 @@ operations:
26
26
  read:
27
27
  type: detail
28
28
  description: "read cell values from a range; rendered rows are prefixed with their sheet row number (e.g. 'R3: …') since blank rows are otherwise invisible"
29
- helper: "+read"
29
+ resource: spreadsheets.values.get
30
30
  params:
31
31
  spreadsheetId:
32
32
  type: string
@@ -36,9 +36,6 @@ operations:
36
36
  type: string
37
37
  description: "Range to read (e.g. 'Sheet1!A1:D10' or just 'Sheet1')"
38
38
  required: true
39
- cli_args:
40
- spreadsheetId: "--spreadsheet"
41
- range: "--range"
42
39
 
43
40
  append:
44
41
  type: action
@@ -1,7 +1,7 @@
1
1
  tool_name: manage_tasks
2
2
  description: "Manage task lists and tasks in Google Tasks."
3
3
  requires_email: true
4
- gws_service: tasks
4
+ google_service: tasks
5
5
  operations:
6
6
 
7
7
  # --- Task lists ---
@@ -22,10 +22,18 @@ operations:
22
22
  required: true
23
23
  maps_to: tasklist
24
24
 
25
+ # A TaskList's only meaningful field is its title, and it rides in the BODY —
26
+ # tasklists.insert declares no parameters. Without it this could only ever create
27
+ # nameless task lists, and did so without complaint.
25
28
  createTaskList:
26
29
  type: action
27
30
  description: "create a new task list"
28
31
  resource: tasklists.insert
32
+ params:
33
+ title:
34
+ type: string
35
+ description: "Task list name"
36
+ required: true
29
37
 
30
38
  deleteTaskList:
31
39
  type: action
@@ -75,6 +83,10 @@ operations:
75
83
  required: true
76
84
  maps_to: task
77
85
 
86
+ # title / notes / due are BODY fields (the Task resource). tasks.insert declares only
87
+ # `tasklist` (path) and `parent`/`previous` (query), so anything else goes in the body.
88
+ # Without them, `create` sent an empty Task and produced a BLANK task — no title, no
89
+ # content, no error. A titleless task is not a degraded task; it is a useless one.
78
90
  create:
79
91
  type: action
80
92
  description: "create a new task"
@@ -85,10 +97,23 @@ operations:
85
97
  description: "Task list ID"
86
98
  required: true
87
99
  maps_to: tasklist
100
+ title:
101
+ type: string
102
+ description: "Task title"
103
+ required: true
104
+ notes:
105
+ type: string
106
+ description: "Task notes / details"
107
+ due:
108
+ type: string
109
+ description: "Due date (RFC 3339, e.g. 2026-07-20T00:00:00.000Z — Google stores the date, not the time)"
88
110
 
111
+ # An `update` with no updatable fields could only ever PATCH an empty body, which
112
+ # Google Tasks answers with a 500 "Internal error encountered". So this operation did
113
+ # not merely fail to update — it failed EVERY time, and blamed Google while doing it.
89
114
  update:
90
115
  type: action
91
- description: "update a task (patch semantics)"
116
+ description: "update a task (patch semantics — only the fields you pass are changed)"
92
117
  resource: tasks.patch
93
118
  params:
94
119
  taskListId:
@@ -101,6 +126,19 @@ operations:
101
126
  description: "Task ID"
102
127
  required: true
103
128
  maps_to: task
129
+ title:
130
+ type: string
131
+ description: "New task title"
132
+ notes:
133
+ type: string
134
+ description: "New task notes / details"
135
+ due:
136
+ type: string
137
+ description: "New due date (RFC 3339)"
138
+ status:
139
+ type: string
140
+ description: "Task status"
141
+ enum: [needsAction, completed]
104
142
 
105
143
  complete:
106
144
  type: action
@@ -8,6 +8,7 @@ import { drivePatch } from '../services/drive/patch.js';
8
8
  import { docsPatch } from '../services/docs/patch.js';
9
9
  import { meetPatch } from '../services/meet/patch.js';
10
10
  import { sheetsPatch } from '../services/sheets/patch.js';
11
+ import { tasksPatch } from '../services/tasks/patch.js';
11
12
  export const patches = {
12
13
  gmail: gmailPatch,
13
14
  calendar: calendarPatch,
@@ -15,5 +16,6 @@ export const patches = {
15
16
  docs: docsPatch,
16
17
  meet: meetPatch,
17
18
  sheets: sheetsPatch,
19
+ tasks: tasksPatch,
18
20
  };
19
21
  //# sourceMappingURL=patches.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"patches.js","sourceRoot":"","sources":["../../src/factory/patches.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG1D,MAAM,CAAC,MAAM,OAAO,GAAiC;IACnD,KAAK,EAAE,UAAU;IACjB,QAAQ,EAAE,aAAa;IACvB,KAAK,EAAE,UAAU;IACjB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,WAAW;CACpB,CAAC"}
1
+ {"version":3,"file":"patches.js","sourceRoot":"","sources":["../../src/factory/patches.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAGxD,MAAM,CAAC,MAAM,OAAO,GAAiC;IACnD,KAAK,EAAE,UAAU;IACjB,QAAQ,EAAE,aAAa;IACvB,KAAK,EAAE,UAAU;IACjB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,WAAW;IACnB,KAAK,EAAE,UAAU;CAClB,CAAC"}
@@ -2,9 +2,8 @@
2
2
  * Shared factory registry — single instance of manifest + generated tools.
3
3
  * Both handler.ts and tools.ts import from here instead of loading independently.
4
4
  *
5
- * This module uses import.meta.url (ESM only) to resolve the manifest
6
- * directory relative to the built output, which works when running via npx
7
- * or mcpb where cwd is NOT the project root.
5
+ * generator.ts resolves the manifest relative to its own module directory, so
6
+ * this works under npx and .mcpb where cwd is NOT the project root.
8
7
  */
9
8
  import type { GeneratedTool } from './types.js';
10
9
  import type { Manifest } from './types.js';
@@ -2,17 +2,11 @@
2
2
  * Shared factory registry — single instance of manifest + generated tools.
3
3
  * Both handler.ts and tools.ts import from here instead of loading independently.
4
4
  *
5
- * This module uses import.meta.url (ESM only) to resolve the manifest
6
- * directory relative to the built output, which works when running via npx
7
- * or mcpb where cwd is NOT the project root.
5
+ * generator.ts resolves the manifest relative to its own module directory, so
6
+ * this works under npx and .mcpb where cwd is NOT the project root.
8
7
  */
9
- import { dirname } from 'node:path';
10
- import { fileURLToPath } from 'node:url';
11
- import { setModuleDir, loadManifest, generateTools } from './generator.js';
8
+ import { loadManifest, generateTools } from './generator.js';
12
9
  import { patches } from './patches.js';
13
- // Inject module directory so loadManifest can find the manifest directory
14
- // relative to the built output (build/factory/registry.js → build/factory/manifest/)
15
- setModuleDir(dirname(fileURLToPath(import.meta.url)));
16
10
  export const manifest = loadManifest();
17
11
  export const generatedTools = generateTools(manifest, patches);
18
12
  //# sourceMappingURL=registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/factory/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAIvC,0EAA0E;AAC1E,qFAAqF;AACrF,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAEtD,MAAM,CAAC,MAAM,QAAQ,GAAa,YAAY,EAAE,CAAC;AACjD,MAAM,CAAC,MAAM,cAAc,GAAoB,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/factory/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAIvC,MAAM,CAAC,MAAM,QAAQ,GAAa,YAAY,EAAE,CAAC;AACjD,MAAM,CAAC,MAAM,cAAc,GAAoB,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC"}
@@ -113,7 +113,7 @@ export const auditLog = {
113
113
  applies: () => true,
114
114
  evaluate: (_args, ctx, service) => {
115
115
  if (!isReadOperation(ctx.operation)) {
116
- process.stderr.write(`[gws-mcp] AUDIT: ${service}.${ctx.operation} account=${ctx.account} ` +
116
+ process.stderr.write(`[google-workspace-mcp] AUDIT: ${service}.${ctx.operation} account=${ctx.account} ` +
117
117
  `args=${JSON.stringify(ctx.params)}\n`);
118
118
  }
119
119
  return { action: 'allow' };
@@ -126,7 +126,7 @@ let activePolicies = [];
126
126
  export function configurePolicies(policies) {
127
127
  activePolicies = policies;
128
128
  if (policies.length > 0) {
129
- process.stderr.write(`[gws-mcp] safety: ${policies.length} policy(ies) active: ` +
129
+ process.stderr.write(`[google-workspace-mcp] safety: ${policies.length} policy(ies) active: ` +
130
130
  `${policies.map(p => p.name).join(', ')}\n`);
131
131
  }
132
132
  }
@@ -144,11 +144,11 @@ export function evaluatePolicies(args, ctx, service) {
144
144
  continue;
145
145
  const result = policy.evaluate(args, ctx, service);
146
146
  if (result.action === 'block') {
147
- process.stderr.write(`[gws-mcp] safety: BLOCKED ${service}.${ctx.operation} by ${policy.name}: ${result.reason}\n`);
147
+ process.stderr.write(`[google-workspace-mcp] safety: BLOCKED ${service}.${ctx.operation} by ${policy.name}: ${result.reason}\n`);
148
148
  return result;
149
149
  }
150
150
  if (result.action === 'downgrade' && result.replacementArgs) {
151
- process.stderr.write(`[gws-mcp] safety: DOWNGRADED ${service}.${ctx.operation} by ${policy.name}: ${result.reason}\n`);
151
+ process.stderr.write(`[google-workspace-mcp] safety: DOWNGRADED ${service}.${ctx.operation} by ${policy.name}: ${result.reason}\n`);
152
152
  return result;
153
153
  }
154
154
  }
@@ -1 +1 @@
1
- {"version":3,"file":"safety.js","sourceRoot":"","sources":["../../src/factory/safety.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAyBH,wEAAwE;AAExE;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAiB;IAC1C,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,qDAAqD;IAClE,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,OAAO;IACzC,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACvB,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACpC,OAAO;gBACL,MAAM,EAAE,OAAO;gBACf,MAAM,EAAE,cAAc,GAAG,CAAC,SAAS,2CAA2C;oBAC5E,sFAAsF;aACzF,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC7B,CAAC;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAiB;IACpC,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,4DAA4D;IACzE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;IACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;QAChC,0DAA0D;QAC1D,oCAAoC;QACpC,+BAA+B;QAC/B,MAAM,gBAAgB,GAA6B;YACjD,KAAK,EAAE,EAAE,EAAW,uCAAuC;YAC3D,QAAQ,EAAE,CAAC,QAAQ,CAAC;YACpB,KAAK,EAAE,CAAC,QAAQ,CAAC;YACjB,KAAK,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC;YACnC,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,EAAE;SACX,CAAC;QAEF,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAChD,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACpC,OAAO;gBACL,MAAM,EAAE,OAAO;gBACf,MAAM,EAAE,cAAc,GAAG,CAAC,SAAS,QAAQ,OAAO,mCAAmC;oBACnF,sFAAsF;aACzF,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC7B,CAAC;CACF,CAAC;AAEF;;;;GAIG;AACH,SAAS,eAAe,CAAC,SAAiB;IACxC,MAAM,EAAE,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;IACnC,wCAAwC;IACxC,IAAI,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1F,wBAAwB;IACxB,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;IAC3F,OAAO,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAiB;IACpC,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,+CAA+C;IAC5D,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;IACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACvB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACpC,OAAO;gBACL,MAAM,EAAE,OAAO;gBACf,MAAM,EAAE,cAAc,GAAG,CAAC,SAAS,oCAAoC;oBACrE,0DAA0D;aAC7D,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC7B,CAAC;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAiB;IACpC,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,kDAAkD;IAC/D,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;IACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;QAChC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,oBAAoB,OAAO,IAAI,GAAG,CAAC,SAAS,YAAY,GAAG,CAAC,OAAO,GAAG;gBACtE,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CACvC,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC7B,CAAC;CACF,CAAC;AAEF,wEAAwE;AAExE,+CAA+C;AAC/C,IAAI,cAAc,GAAmB,EAAE,CAAC;AAExC,sCAAsC;AACtC,MAAM,UAAU,iBAAiB,CAAC,QAAwB;IACxD,cAAc,GAAG,QAAQ,CAAC;IAC1B,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,qBAAqB,QAAQ,CAAC,MAAM,uBAAuB;YAC3D,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAC5C,CAAC;IACJ,CAAC;AACH,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,iBAAiB;IAC/B,OAAO,CAAC,GAAG,cAAc,CAAC,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,IAAc,EACd,GAAiB,EACjB,OAAe;IAEf,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC;YAAE,SAAS;QAEtD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QACnD,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,6BAA6B,OAAO,IAAI,GAAG,CAAC,SAAS,OAAO,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,IAAI,CAC9F,CAAC;YACF,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YAC5D,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,gCAAgC,OAAO,IAAI,GAAG,CAAC,SAAS,OAAO,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,IAAI,CACjG,CAAC;YACF,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"safety.js","sourceRoot":"","sources":["../../src/factory/safety.ts"],"names":[],"mappings":"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"}
@@ -10,19 +10,19 @@ export interface ParamDef {
10
10
  required?: boolean;
11
11
  default?: string | number | boolean;
12
12
  max?: number;
13
- /** Maps this param name to a different key in the gws --params JSON. */
13
+ /** Maps this param name to a different key in the params sent to Google. */
14
14
  maps_to?: string;
15
15
  enum?: string[];
16
16
  /**
17
17
  * If true, the param is for the formatter/handler only and is NOT forwarded
18
- * to the gws CLI. Used for client-side controls like `bodyFormat` (ADR-305)
18
+ * to Google. Used for client-side controls like `bodyFormat` (ADR-305)
19
19
  * that affect rendering, not the API call itself.
20
20
  */
21
21
  client_only?: boolean;
22
22
  }
23
23
  /** Hydration config — fetch detail for each item in a list result. */
24
24
  export interface HydrationDef {
25
- /** gws resource path for the detail call (e.g. "users.messages.get"). */
25
+ /** Google resource path for the detail call (e.g. "users.messages.get"). */
26
26
  resource: string;
27
27
  /** Format parameter passed to the detail call. */
28
28
  format?: string;
@@ -34,20 +34,16 @@ export interface OperationDef {
34
34
  /** Categorizes the operation for default formatting. */
35
35
  type: 'list' | 'detail' | 'action';
36
36
  description: string;
37
- /** gws resource path (e.g. "users.messages.list"). */
37
+ /** Google resource path (e.g. "users.messages.list"). */
38
38
  resource?: string;
39
- /** gws helper shorthand (e.g. "+triage", "+send"). */
40
- helper?: string;
41
39
  /** Named parameters the caller can provide. */
42
40
  params?: Record<string, ParamDef>;
43
- /** Default values merged into the gws --params JSON. */
41
+ /** Default values merged into the params sent to Google. */
44
42
  defaults?: Record<string, unknown>;
45
43
  /** Post-fetch hydration (list operations only). */
46
44
  hydration?: HydrationDef;
47
- /** Fields to extract from the gws response for the result. */
45
+ /** Fields to extract from Google's response for the result. */
48
46
  fields?: string;
49
- /** CLI-style args instead of --params JSON (for helpers). */
50
- cli_args?: Record<string, string>;
51
47
  }
52
48
  /** A service declaration in the manifest. */
53
49
  export interface ServiceDef {
@@ -55,8 +51,8 @@ export interface ServiceDef {
55
51
  description: string;
56
52
  /** Whether this service requires an email account param. */
57
53
  requires_email: boolean;
58
- /** The gws service name (e.g. "gmail", "calendar", "drive"). */
59
- gws_service: string;
54
+ /** The Google service name (e.g. "gmail", "calendar", "drive"). */
55
+ google_service: string;
60
56
  operations: Record<string, OperationDef>;
61
57
  }
62
58
  /** Top-level manifest shape. */
@@ -69,9 +65,14 @@ export interface PatchContext {
69
65
  params: Record<string, unknown>;
70
66
  account: string;
71
67
  }
72
- /** A patch hook that runs after arg construction, before gws execution. */
73
- export type BeforeExecuteHook = (args: string[], ctx: PatchContext) => Promise<string[]> | string[];
74
- /** A patch hook that runs after gws returns, before formatting. */
68
+ /**
69
+ * A patch hook that runs after the manifest's param mapping, before the call.
70
+ *
71
+ * It receives the PARAMS Google will be sent. Hooks operate on the param object
72
+ * directly — never on a serialised command line. See ADR-103.
73
+ */
74
+ export type BeforeExecuteHook = (params: Record<string, unknown>, ctx: PatchContext) => Promise<Record<string, unknown>> | Record<string, unknown>;
75
+ /** A patch hook that runs after Google returns, before formatting. */
75
76
  export type AfterExecuteHook = (result: unknown, ctx: PatchContext) => Promise<unknown> | unknown;
76
77
  /** A formatter override for a specific operation type. */
77
78
  export type FormatHook = (data: unknown, ctx: PatchContext) => HandlerResponse;
@@ -0,0 +1,45 @@
1
+ import { type ApiDescriptor } from './descriptor.js';
2
+ import type { GoogleService, ServiceMethods } from './methods.js';
3
+ export interface CallOptions {
4
+ /** Account email — the token is minted for this identity. */
5
+ account: string;
6
+ descriptor?: ApiDescriptor;
7
+ fetchImpl?: typeof fetch;
8
+ }
9
+ export interface BuiltRequest {
10
+ url: string;
11
+ method: string;
12
+ body?: Record<string, unknown>;
13
+ }
14
+ /** Pure: descriptor + params -> the request. No I/O, so it is testable offline. */
15
+ export declare function buildRequest(descriptor: ApiDescriptor, service: string, resourcePath: string, params?: Record<string, unknown>): BuiltRequest;
16
+ /**
17
+ * Call a Google API method. Returns RAW Google JSON — no envelope, no reshaping.
18
+ * Throws GoogleApiError carrying Google's real error body.
19
+ */
20
+ export declare function call<S extends GoogleService>(service: S, resourcePath: ServiceMethods[S], params: Record<string, unknown>, options: CallOptions): Promise<unknown>;
21
+ /**
22
+ * Download media to disk.
23
+ *
24
+ * STREAMED, deliberately. The bytes go from the socket to the file and are never a
25
+ * string at all. Never buffer a download through an in-memory string: accumulating
26
+ * the whole response and JSON.parse-ing it turns a 30 MB attachment into a ~40 MB
27
+ * string, then an object, then a Buffer — uncapped, for every download.
28
+ */
29
+ export declare function download<S extends GoogleService>(service: S, resourcePath: ServiceMethods[S], params: Record<string, unknown>, outputPath: string, options: CallOptions): Promise<string>;
30
+ export interface UploadOptions extends CallOptions {
31
+ media: Buffer;
32
+ contentType: string;
33
+ metadata?: Record<string, unknown>;
34
+ /** Non-final chunks must be a multiple of 256 KiB. */
35
+ chunkSize?: number;
36
+ }
37
+ /**
38
+ * Resumable, chunked media upload.
39
+ *
40
+ * The descriptor carries the upload paths for both protocols because Discovery
41
+ * DECLARES them. Verified live (ADR-103 item 4): a 25 MB attachment — 34.2 MB as
42
+ * RFC822, 93% of Google's declared 36,700,160-byte cap — uploaded in 5 chunks and
43
+ * read back byte-for-byte identical.
44
+ */
45
+ export declare function upload<S extends GoogleService>(service: S, resourcePath: ServiceMethods[S], params: Record<string, unknown>, options: UploadOptions): Promise<unknown>;