@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
@@ -28,7 +28,7 @@ export interface DiscoveredService {
28
28
  helpers: Record<string, DiscoveredHelper>;
29
29
  }
30
30
  export interface DiscoveredSurface {
31
- gwsVersion: string;
31
+ apiSurface: string;
32
32
  services: Record<string, DiscoveredService>;
33
33
  }
34
34
  export type BaselineStatus = 'covered' | 'gap' | 'excluded';
@@ -38,7 +38,7 @@ export interface BaselineEntry {
38
38
  params?: Record<string, 'covered' | 'gap'>;
39
39
  }
40
40
  export interface CoverageBaseline {
41
- gwsVersion: string;
41
+ apiSurface: string;
42
42
  generatedAt: string;
43
43
  services: Record<string, {
44
44
  operations: Record<string, BaselineEntry>;
@@ -46,7 +46,7 @@ export interface CoverageBaseline {
46
46
  }
47
47
  export interface ParamGap {
48
48
  paramName: string;
49
- inGws: boolean;
49
+ inGoogle: boolean;
50
50
  inManifest: boolean;
51
51
  details?: string;
52
52
  }
@@ -59,9 +59,24 @@ export interface ServiceCoverage {
59
59
  newOps: string[];
60
60
  removedOps: string[];
61
61
  paramGaps: Record<string, ParamGap[]>;
62
+ /**
63
+ * The Google methods this service's manifest actually covers.
64
+ *
65
+ * This exists because the baseline used to INFER coverage from `paramGaps` — an
66
+ * operation was recorded as covered only if it had a parameter gap. An operation
67
+ * covered *perfectly*, with every parameter mapped, therefore had no gap entry, fell
68
+ * through, and was written to the baseline as `status: "gap"`. The baseline called an
69
+ * operation uncovered BECAUSE it was flawlessly covered, and 25 of them were committed
70
+ * as uncovered work for contributors to pick up.
71
+ *
72
+ * `coveredOps` (the count) was right the whole time; only the persisted list was wrong,
73
+ * so the printed report and the committed artifact disagreed and nothing compared them.
74
+ * Coverage is now carried explicitly, from the manifest, and asserted against the count.
75
+ */
76
+ coveredPaths: string[];
62
77
  }
63
78
  export interface CoverageReport {
64
- gwsVersion: string;
79
+ apiSurface: string;
65
80
  timestamp: string;
66
81
  totalOps: number;
67
82
  coveredOps: number;
@@ -1,4 +1 @@
1
- export { execute, gwsVersion } from './gws.js';
2
- export type { GwsResult, GwsOptions } from './gws.js';
3
- export { GwsError, GwsExitCode, parseGwsError } from './errors.js';
4
1
  export { configDir, dataDir, credentialsDir, credentialPath, accountsFilePath, emailToSlug } from './paths.js';
@@ -1,4 +1,3 @@
1
- export { execute, gwsVersion } from './gws.js';
2
- export { GwsError, GwsExitCode, parseGwsError } from './errors.js';
1
+ // Local filesystem concerns: paths, and the workspace fence.
3
2
  export { configDir, dataDir, credentialsDir, credentialPath, accountsFilePath, emailToSlug } from './paths.js';
4
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE/C,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
@@ -66,18 +66,44 @@ function formatDefaultDetail(data) {
66
66
  refs: { id, ...extractScalarRefs(obj) },
67
67
  };
68
68
  }
69
- /** Generic action formatter — confirmation message with returned fields. */
69
+ /**
70
+ * Generic action formatter — confirm, and say WHAT was acted on.
71
+ *
72
+ * Google does not agree with itself about what an identifier is called: Tasks returns
73
+ * `id`, Docs returns `documentId`, Sheets returns `spreadsheetId`. This used to print
74
+ * only a key named exactly `id`, so creating a document produced the entire response
75
+ * "Operation completed." — no id, no title, nothing an agent could act on. The id was
76
+ * in `refs` (so `$0.documentId` chaining worked), but anything reading the text was
77
+ * told only that *something* had happened.
78
+ *
79
+ * So name the thing: whichever identifier came back, plus whatever the resource calls
80
+ * itself. A confirmation you cannot act on is barely a confirmation.
81
+ */
82
+ const ID_KEYS = ['id', 'documentId', 'spreadsheetId', 'fileId', 'eventId', 'threadId'];
83
+ const NAME_KEYS = ['title', 'name', 'summary'];
70
84
  function formatDefaultAction(data) {
71
85
  const obj = (data ?? {});
72
- const id = String(obj.id ?? 'unknown');
86
+ const idKey = ID_KEYS.find((k) => obj[k] !== undefined && obj[k] !== null);
87
+ const id = idKey ? String(obj[idKey]) : 'unknown';
88
+ const nameKey = NAME_KEYS.find((k) => typeof obj[k] === 'string' && obj[k] !== '');
73
89
  const parts = ['Operation completed.'];
74
- if (obj.id)
75
- parts.push(`\n**ID:** ${id}`);
90
+ if (nameKey)
91
+ parts.push(`\n\n**${titleCase(nameKey)}:** ${String(obj[nameKey])}`);
92
+ if (idKey)
93
+ parts.push(`\n**${titleCase(idKey)}:** ${id}`);
76
94
  return {
77
95
  text: parts.join(''),
96
+ // `id` stays populated whatever Google called the field, so next-steps and
97
+ // queue_operations references keep resolving.
78
98
  refs: { id, ...extractScalarRefs(obj) },
79
99
  };
80
100
  }
101
+ /** documentId -> "Document ID"; title -> "Title" */
102
+ function titleCase(key) {
103
+ return key
104
+ .replace(/Id$/, ' ID')
105
+ .replace(/^./, (c) => c.toUpperCase());
106
+ }
81
107
  /** Find the first array in a response object (items, files, messages, etc). */
82
108
  function findArray(obj) {
83
109
  if (Array.isArray(obj))
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/factory/defaults.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/factory/defaults.ts"],"names":[],"mappings":"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"}
@@ -3,13 +3,11 @@
3
3
  *
4
4
  * For each service in the manifest, generates:
5
5
  * 1. A JSON Schema tool definition (operation enum, typed params)
6
- * 2. A handler function (maps operations to gws CLI calls, applies formatting)
6
+ * 2. A handler function (maps operations to Google API calls, applies formatting)
7
7
  *
8
8
  * Patches are optional per-service hooks that override default behavior.
9
9
  */
10
- import type { Manifest, ServiceDef, ServicePatch, GeneratedTool, GeneratedToolSchema, GeneratedHandler } from './types.js';
11
- /** Called by registry.ts to inject the ESM module directory. */
12
- export declare function setModuleDir(dir: string): void;
10
+ import type { Manifest, ServiceDef, OperationDef, ServicePatch, GeneratedTool, GeneratedToolSchema, GeneratedHandler } from './types.js';
13
11
  /**
14
12
  * Load the manifest from `src/factory/manifest/` — one YAML file per service,
15
13
  * each file's root being that service's definition; the filename (minus
@@ -29,3 +27,11 @@ export declare function generateTools(manifest: Manifest, patches?: Record<strin
29
27
  export declare function generateSchema(service: ServiceDef): GeneratedToolSchema;
30
28
  /** Generate a handler function for a service. */
31
29
  export declare function generateHandler(service: ServiceDef, patch?: ServicePatch): GeneratedHandler;
30
+ /**
31
+ * Build the params a resource operation sends to Google.
32
+ *
33
+ * This is the manifest's mapping — declared params, `maps_to` renames, defaults,
34
+ * clamps. A resource operation never becomes a command line: the output here is
35
+ * the request params, handed straight to the client. See ADR-103.
36
+ */
37
+ export declare function buildResourceParams(opDef: OperationDef, params: Record<string, unknown>): Record<string, unknown>;
@@ -3,28 +3,30 @@
3
3
  *
4
4
  * For each service in the manifest, generates:
5
5
  * 1. A JSON Schema tool definition (operation enum, typed params)
6
- * 2. A handler function (maps operations to gws CLI calls, applies formatting)
6
+ * 2. A handler function (maps operations to Google API calls, applies formatting)
7
7
  *
8
8
  * Patches are optional per-service hooks that override default behavior.
9
9
  */
10
10
  import { readFileSync, readdirSync } from 'node:fs';
11
- import { basename, resolve } from 'node:path';
11
+ import { basename, dirname, resolve } from 'node:path';
12
+ import { fileURLToPath } from 'node:url';
12
13
  import { parse as parseYaml } from '../factory/yaml.js';
13
- import { execute } from '../executor/gws.js';
14
+ import { call as googleCall } from '../google/client.js';
14
15
  import { requireEmail, clamp } from '../server/handlers/validate.js';
15
16
  import { formatDefault } from './defaults.js';
16
17
  import { nextSteps } from '../server/formatting/next-steps.js';
17
18
  import { evaluatePolicies } from './safety.js';
18
19
  /**
19
- * Module directory for manifest resolution.
20
- * Set by registry.ts via setModuleDir() using import.meta.url (ESM only).
21
- * Null in Jest (CJS) — falls back to cwd-based resolution.
20
+ * This module's own directory, used to resolve the manifest relative to the
21
+ * built output — which is what makes `npx` and the .mcpb bundle work, where cwd
22
+ * is not the project root.
23
+ *
24
+ * This used to be injected by registry.ts via a `setModuleDir()` setter, purely
25
+ * because the CJS Jest runner could not parse `import.meta`. The test runner was
26
+ * shaping the source. Vitest runs ESM natively (ADR-101), so the module can just
27
+ * ask where it is.
22
28
  */
23
- let _moduleDir;
24
- /** Called by registry.ts to inject the ESM module directory. */
25
- export function setModuleDir(dir) {
26
- _moduleDir = dir;
27
- }
29
+ const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
28
30
  /**
29
31
  * Load the manifest from `src/factory/manifest/` — one YAML file per service,
30
32
  * each file's root being that service's definition; the filename (minus
@@ -51,28 +53,31 @@ export function loadManifest(dir) {
51
53
  return { services };
52
54
  }
53
55
  /**
54
- * Locate the manifest directory. moduleDir is injected by registry.ts using
55
- * import.meta.url (ESM only); cwd fallbacks handle Jest/dev where cwd is the
56
- * project root.
56
+ * Locate the manifest directory: always a sibling of this module.
57
+ *
58
+ * This resolves to `src/factory/manifest` when running the sources (vitest, tsx)
59
+ * and `build/factory/manifest` in the built server — which is what makes `npx`
60
+ * and the .mcpb bundle work, where cwd is not the project root.
61
+ *
62
+ * There is deliberately NO fallback chain. An earlier version tried three more
63
+ * candidates (back to `src/` from `build/`, then two cwd-relative paths), which
64
+ * sounds like resilience and is actually concealment: the only time a fallback
65
+ * fires is when the built manifest is missing, and the `src/` fallback exists
66
+ * *only in the dev checkout*. A build shipped without its manifest therefore
67
+ * resolved fine on this machine and in CI, and threw on the consumer's first
68
+ * `npx` start. Failing here, immediately and everywhere, is the point.
57
69
  */
58
70
  function resolveManifestDir() {
59
- const candidates = [];
60
- if (_moduleDir) {
61
- candidates.push(resolve(_moduleDir, 'manifest')); // build/factory/manifest/
62
- candidates.push(resolve(_moduleDir, '../../src/factory/manifest')); // dev: from build/ to src/
71
+ const dir = resolve(MODULE_DIR, 'manifest');
72
+ try {
73
+ readdirSync(dir);
63
74
  }
64
- candidates.push(resolve(process.cwd(), 'src/factory/manifest'));
65
- candidates.push(resolve(process.cwd(), 'build/factory/manifest'));
66
- for (const candidate of candidates) {
67
- try {
68
- if (readdirSync(candidate).some((f) => f.endsWith('.yaml')))
69
- return candidate;
70
- }
71
- catch {
72
- continue;
73
- }
75
+ catch {
76
+ throw new Error(`Could not read the manifest directory at ${dir}. ` +
77
+ `In a built server this directory is copied from src/factory/manifest by ` +
78
+ `the build; if it is missing, the build did not complete. Run \`npm run build\`.`);
74
79
  }
75
- throw new Error(`Could not find the manifest directory. Searched:\n${candidates.join('\n')}`);
80
+ return dir;
76
81
  }
77
82
  /** Generate all tools from the manifest with optional patches. */
78
83
  export function generateTools(manifest, patches) {
@@ -139,18 +144,18 @@ export function generateHandler(service, patch) {
139
144
  manage_calendar: 'calendar',
140
145
  manage_drive: 'drive',
141
146
  };
142
- const domain = domainMap[service.tool_name] ?? service.gws_service;
147
+ const domain = domainMap[service.tool_name] ?? service.google_service;
143
148
  return async (params) => {
144
149
  const operation = params.operation;
145
150
  const opDef = service.operations[operation];
146
151
  if (!opDef) {
147
- throw new Error(`Unknown ${service.gws_service} operation: ${operation}`);
152
+ throw new Error(`Unknown ${service.google_service} operation: ${operation}`);
148
153
  }
149
154
  const account = service.requires_email ? requireEmail(params) : '';
150
155
  const ctx = { operation, params, account };
151
156
  // Safety policies — run before anything else, including custom handlers.
152
- // A blocked operation never reaches the handler or gws.
153
- const policyResult = evaluatePolicies([], ctx, service.gws_service);
157
+ // A blocked operation never reaches the handler or Google.
158
+ const policyResult = evaluatePolicies([], ctx, service.google_service);
154
159
  if (policyResult.action === 'block') {
155
160
  return {
156
161
  text: `**Blocked by safety policy:** ${policyResult.reason}`,
@@ -178,18 +183,40 @@ export function generateHandler(service, patch) {
178
183
  text: response.text + framingFooter(),
179
184
  };
180
185
  }
181
- // Build gws args
182
- let args = policyResult.action === 'downgrade' && policyResult.replacementArgs
183
- ? policyResult.replacementArgs
184
- : buildArgs(service.gws_service, opDef, params);
185
- // beforeExecute hook (service-specific)
186
- if (patch?.beforeExecute?.[operation]) {
187
- args = await patch.beforeExecute[operation](args, ctx);
186
+ // THE SEAM (ADR-103). Every operation goes to the Google API client we own, driven
187
+ // by the generated descriptor. There is no second path, and nothing shells out. An
188
+ // operation names a Google method, or a custom handler composes several, or it does
189
+ // not exist.
190
+ let data;
191
+ if (opDef.resource) {
192
+ let callParams = buildResourceParams(opDef, params);
193
+ // beforeExecute takes PARAMS. Hooks mutate the param object directly; there is
194
+ // no command line to do surgery on.
195
+ if (patch?.beforeExecute?.[operation]) {
196
+ callParams = await patch.beforeExecute[operation](callParams, ctx);
197
+ }
198
+ // The one place a cast is honest. Here the service and the resource path come
199
+ // from the MANIFEST — YAML, read at runtime — so no compile-time type can
200
+ // check them. That is fine, because this path has its own guard at a
201
+ // different stage:
202
+ //
203
+ // hand-written call sites -> COMPILE time (ServiceMethods[S]; see src/google/methods.ts)
204
+ // manifest-driven ops -> BUILD time (check-conformance: manifest ⊆ descriptor)
205
+ //
206
+ // Between them, every route to Google is checked before it can reach a user.
207
+ // The conformance check is probed and goes red on a bogus resource path, so
208
+ // a typo in the YAML fails the build rather than the call.
209
+ data = await googleCall(service.google_service, opDef.resource, callParams, { account });
210
+ }
211
+ else {
212
+ // No resource, and no custom handler took it. There is nothing left to call.
213
+ // An operation is a Google method or a composition of them — there is no third
214
+ // kind. See ADR-103.
215
+ throw new Error(`${service.google_service}.${operation} declares no 'resource' and has no custom handler.`);
188
216
  }
189
- // Execute gws
190
- const result = await execute(args, { account, format: 'json' });
191
- // afterExecute hook
192
- let data = result.data;
217
+ // afterExecute hook — takes DATA. This is the hook that turns raw Google into OUR
218
+ // shape (see gmailPatch.afterExecute.search, which walks payload.headers). It is
219
+ // the right place for interpretation.
193
220
  if (patch?.afterExecute?.[operation]) {
194
221
  data = await patch.afterExecute[operation](data, ctx);
195
222
  }
@@ -213,72 +240,35 @@ export function generateHandler(service, patch) {
213
240
  };
214
241
  };
215
242
  }
216
- /** Build gws CLI args from an operation definition and user params. */
217
- function buildArgs(gwsService, opDef, params) {
218
- // Helper-based operations use positional/flag args
219
- if (opDef.helper) {
220
- return buildHelperArgs(gwsService, opDef, params);
221
- }
222
- // Resource-based operations use --params JSON
223
- if (opDef.resource) {
224
- return buildResourceArgs(gwsService, opDef, params);
225
- }
226
- throw new Error(`Operation must define either 'resource' or 'helper'`);
227
- }
228
- /** Build args for gws resource calls: `gws service resource method --params '{...}'` */
229
- function buildResourceArgs(gwsService, opDef, params) {
230
- const resourceParts = opDef.resource.split('.');
231
- const args = [gwsService, ...resourceParts];
232
- // Build the --params JSON object
233
- const gwsParams = { ...opDef.defaults };
243
+ /**
244
+ * Build the params a resource operation sends to Google.
245
+ *
246
+ * This is the manifest's mapping — declared params, `maps_to` renames, defaults,
247
+ * clamps. A resource operation never becomes a command line: the output here is
248
+ * the request params, handed straight to the client. See ADR-103.
249
+ */
250
+ export function buildResourceParams(opDef, params) {
251
+ const out = { ...opDef.defaults };
234
252
  if (opDef.params) {
235
253
  for (const [paramName, paramDef] of Object.entries(opDef.params)) {
236
254
  if (paramDef.client_only)
237
- continue; // formatter-only; never reaches gws
255
+ continue; // formatter-only; never reaches Google
238
256
  const value = params[paramName];
239
257
  const targetKey = paramDef.maps_to ?? paramName;
240
258
  if (value !== undefined && value !== null) {
241
- gwsParams[targetKey] = paramDef.max
259
+ out[targetKey] = paramDef.max
242
260
  ? clamp(value, paramDef.default ?? 10, paramDef.max)
243
261
  : value;
244
262
  }
245
263
  else if (paramDef.default !== undefined) {
246
- gwsParams[targetKey] = paramDef.default;
264
+ out[targetKey] = paramDef.default;
247
265
  }
248
266
  }
249
267
  }
250
- // Clean undefined values
251
- for (const [key, val] of Object.entries(gwsParams)) {
268
+ for (const [key, val] of Object.entries(out)) {
252
269
  if (val === undefined)
253
- delete gwsParams[key];
254
- }
255
- if (Object.keys(gwsParams).length > 0) {
256
- args.push('--params', JSON.stringify(gwsParams));
257
- }
258
- return args;
259
- }
260
- /** Build args for gws helper calls: `gws service +helper --flag value ...` */
261
- function buildHelperArgs(gwsService, opDef, params) {
262
- const args = [gwsService, opDef.helper];
263
- // Some helpers take a positional arg (e.g. +reply messageId)
264
- // Check for required params that aren't in cli_args — those are positional
265
- if (opDef.params) {
266
- for (const [paramName, paramDef] of Object.entries(opDef.params)) {
267
- if (paramDef.client_only)
268
- continue; // formatter-only; never reaches gws
269
- const value = params[paramName];
270
- if (value === undefined || value === null)
271
- continue;
272
- if (opDef.cli_args?.[paramName]) {
273
- // Flag-style arg
274
- args.push(opDef.cli_args[paramName], String(value));
275
- }
276
- else if (paramDef.required) {
277
- // Positional arg
278
- args.push(String(value));
279
- }
280
- }
270
+ delete out[key];
281
271
  }
282
- return args;
272
+ return out;
283
273
  }
284
274
  //# sourceMappingURL=generator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/factory/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/factory/generator.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ the `Manifest`.
7
7
 
8
8
  ## Notes
9
9
 
10
- - People (contacts) are supported by gws but excluded here because `gws auth login` does not
11
- offer the `contacts.readonly` scope — see https://github.com/googleworkspace/cli/issues/556
12
- - Meet scopes are resolved — authorize with `gws auth login -s ...,meet`.
10
+ - People (contacts) is excluded: the OAuth flow declares no contacts scope
11
+ (see `SERVICE_SCOPES` in `../../accounts/oauth.ts`).
12
+ - Meet is supported — authorize it by including `meet` in the services list
13
+ (`manage_accounts`, operation `scopes`).
@@ -1,7 +1,7 @@
1
1
  tool_name: manage_calendar
2
2
  description: "List events, view agenda, check availability, or manage calendar events."
3
3
  requires_email: true
4
- gws_service: calendar
4
+ google_service: calendar
5
5
  operations:
6
6
 
7
7
  # --- Event viewing ---
@@ -37,7 +37,6 @@ operations:
37
37
  agenda:
38
38
  type: list
39
39
  description: "today's schedule at a glance (all calendars). Returns calendarId per event for follow-up get calls."
40
- helper: "+agenda"
41
40
  params:
42
41
  calendarId:
43
42
  type: string
@@ -72,7 +71,6 @@ operations:
72
71
  create:
73
72
  type: action
74
73
  description: "create a new calendar event"
75
- helper: "+insert"
76
74
  params:
77
75
  calendarId:
78
76
  type: string
@@ -101,14 +99,6 @@ operations:
101
99
  meet:
102
100
  type: boolean
103
101
  description: "Add a Google Meet video conference link to the event"
104
- cli_args:
105
- calendarId: "--calendar"
106
- summary: "--summary"
107
- start: "--start"
108
- end: "--end"
109
- description: "--description"
110
- location: "--location"
111
- attendees: "--attendee"
112
102
 
113
103
  quickAdd:
114
104
  type: action
@@ -1,7 +1,7 @@
1
1
  tool_name: manage_docs
2
2
  description: "Read, write, insert, and find-replace text in Google Docs documents."
3
3
  requires_email: true
4
- gws_service: docs
4
+ google_service: docs
5
5
  operations:
6
6
 
7
7
  get:
@@ -14,15 +14,27 @@ operations:
14
14
  description: "Document ID"
15
15
  required: true
16
16
 
17
+ # `title` rides in the BODY — documents.create declares no parameters at all
18
+ # (Discovery: `"parameters": {}`), so everything goes into the Document resource.
19
+ # Without this the tool could only ever produce documents called "Untitled document",
20
+ # and a caller passing a title got no error — the argument was simply not in the
21
+ # schema, so it was dropped in silence. manage_sheets.create has always taken one.
17
22
  create:
18
23
  type: action
19
- description: "create a new blank document"
24
+ description: "create a new document"
20
25
  resource: documents.create
26
+ params:
27
+ title:
28
+ type: string
29
+ description: "Document title (default: 'Untitled document')"
21
30
 
31
+ # One documents.batchUpdate with a single insertText at endOfSegmentLocation —
32
+ # append to end of body. It needs a request body, so it is a custom handler
33
+ # rather than a bare resource op (docsPatch.write).
22
34
  write:
23
35
  type: action
24
36
  description: "append text to the end of a document"
25
- helper: "+write"
37
+ resource: documents.batchUpdate
26
38
  params:
27
39
  documentId:
28
40
  type: string
@@ -32,9 +44,6 @@ operations:
32
44
  type: string
33
45
  description: "Text to append (plain text)"
34
46
  required: true
35
- cli_args:
36
- documentId: "--document"
37
- text: "--text"
38
47
 
39
48
  insertText:
40
49
  type: action
@@ -1,7 +1,7 @@
1
1
  tool_name: manage_drive
2
2
  description: "Search, upload, download, share, comment on, or manage files in Google Drive."
3
3
  requires_email: true
4
- gws_service: drive
4
+ google_service: drive
5
5
  operations:
6
6
 
7
7
  # --- File discovery ---
@@ -44,7 +44,6 @@ operations:
44
44
  upload:
45
45
  type: action
46
46
  description: "upload a local file to Drive"
47
- helper: "+upload"
48
47
  params:
49
48
  filePath:
50
49
  type: string
@@ -56,9 +55,6 @@ operations:
56
55
  parentFolderId:
57
56
  type: string
58
57
  description: "Destination folder ID"
59
- cli_args:
60
- name: "--name"
61
- parentFolderId: "--parent"
62
58
 
63
59
  viewImage:
64
60
  type: detail