@aaronsb/google-workspace-mcp 3.0.0 → 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 (145) hide show
  1. package/LICENSE +201 -21
  2. package/LICENSE-MIT +21 -0
  3. package/NOTICE +24 -0
  4. package/README.md +71 -52
  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 -2
  31. package/build/factory/generator.js +54 -69
  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 +9 -24
  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/safety.js +4 -4
  44. package/build/factory/safety.js.map +1 -1
  45. package/build/factory/types.d.ts +16 -15
  46. package/build/google/client.d.ts +45 -0
  47. package/build/google/client.js +232 -0
  48. package/build/google/client.js.map +1 -0
  49. package/build/google/descriptor.d.ts +40 -0
  50. package/build/google/descriptor.js +37 -0
  51. package/build/google/descriptor.js.map +1 -0
  52. package/build/google/descriptor.json +5271 -0
  53. package/build/google/errors.d.ts +45 -0
  54. package/build/google/errors.js +44 -0
  55. package/build/google/errors.js.map +1 -0
  56. package/build/google/methods.d.ts +37 -0
  57. package/build/google/methods.js +13 -0
  58. package/build/google/methods.js.map +1 -0
  59. package/build/index.js +3 -3
  60. package/build/index.js.map +1 -1
  61. package/build/node-floor.js +1 -1
  62. package/build/node-floor.js.map +1 -1
  63. package/build/server/formatting/markdown.d.ts +1 -1
  64. package/build/server/formatting/markdown.js +1 -1
  65. package/build/server/formatting/next-steps.js +1 -1
  66. package/build/server/formatting/next-steps.js.map +1 -1
  67. package/build/server/handlers/accounts.js +2 -2
  68. package/build/server/handlers/accounts.js.map +1 -1
  69. package/build/server/scratchpad/adapters/import-doc.js +15 -13
  70. package/build/server/scratchpad/adapters/import-doc.js.map +1 -1
  71. package/build/server/scratchpad/adapters/import-drive.js +16 -11
  72. package/build/server/scratchpad/adapters/import-drive.js.map +1 -1
  73. package/build/server/scratchpad/adapters/import-email.js +3 -15
  74. package/build/server/scratchpad/adapters/import-email.js.map +1 -1
  75. package/build/server/scratchpad/adapters/import-meet.js +5 -17
  76. package/build/server/scratchpad/adapters/import-meet.js.map +1 -1
  77. package/build/server/scratchpad/adapters/import-sheet.js +5 -6
  78. package/build/server/scratchpad/adapters/import-sheet.js.map +1 -1
  79. package/build/server/scratchpad/adapters/send-calendar.js +18 -13
  80. package/build/server/scratchpad/adapters/send-calendar.js.map +1 -1
  81. package/build/server/scratchpad/adapters/send-doc.js +22 -17
  82. package/build/server/scratchpad/adapters/send-doc.js.map +1 -1
  83. package/build/server/scratchpad/adapters/send-email-draft.d.ts +1 -1
  84. package/build/server/scratchpad/adapters/send-email-draft.js +17 -25
  85. package/build/server/scratchpad/adapters/send-email-draft.js.map +1 -1
  86. package/build/server/scratchpad/adapters/send-email.d.ts +2 -2
  87. package/build/server/scratchpad/adapters/send-email.js +21 -25
  88. package/build/server/scratchpad/adapters/send-email.js.map +1 -1
  89. package/build/server/scratchpad/adapters/send-sheet.js +10 -10
  90. package/build/server/scratchpad/adapters/send-sheet.js.map +1 -1
  91. package/build/server/scratchpad/adapters/send-task.js +9 -8
  92. package/build/server/scratchpad/adapters/send-task.js.map +1 -1
  93. package/build/server/scratchpad/handler.js +22 -28
  94. package/build/server/scratchpad/handler.js.map +1 -1
  95. package/build/server/scratchpad/manager.d.ts +1 -1
  96. package/build/server/server.js +13 -10
  97. package/build/server/server.js.map +1 -1
  98. package/build/server/session/tracker.js +21 -25
  99. package/build/server/session/tracker.js.map +1 -1
  100. package/build/server/tools.d.ts +1 -1
  101. package/build/server/tools.js +3 -3
  102. package/build/server/tools.js.map +1 -1
  103. package/build/services/calendar/patch.js +178 -68
  104. package/build/services/calendar/patch.js.map +1 -1
  105. package/build/services/docs/patch.d.ts +5 -3
  106. package/build/services/docs/patch.js +89 -19
  107. package/build/services/docs/patch.js.map +1 -1
  108. package/build/services/drive/patch.d.ts +1 -1
  109. package/build/services/drive/patch.js +115 -143
  110. package/build/services/drive/patch.js.map +1 -1
  111. package/build/services/gmail/attachments.js +10 -15
  112. package/build/services/gmail/attachments.js.map +1 -1
  113. package/build/services/gmail/mail.d.ts +34 -0
  114. package/build/services/gmail/mail.js +245 -0
  115. package/build/services/gmail/mail.js.map +1 -0
  116. package/build/services/gmail/mime.d.ts +45 -4
  117. package/build/services/gmail/mime.js +138 -4
  118. package/build/services/gmail/mime.js.map +1 -1
  119. package/build/services/gmail/patch.js +69 -83
  120. package/build/services/gmail/patch.js.map +1 -1
  121. package/build/services/meet/patch.js +24 -31
  122. package/build/services/meet/patch.js.map +1 -1
  123. package/build/services/sheets/patch.js +30 -35
  124. package/build/services/sheets/patch.js.map +1 -1
  125. package/build/services/tasks/patch.d.ts +18 -0
  126. package/build/services/tasks/patch.js +37 -0
  127. package/build/services/tasks/patch.js.map +1 -0
  128. package/build/version.d.ts +1 -1
  129. package/build/version.js +1 -1
  130. package/package.json +11 -6
  131. package/build/executor/errors.d.ts +0 -15
  132. package/build/executor/errors.js +0 -37
  133. package/build/executor/errors.js.map +0 -1
  134. package/build/executor/gws.d.ts +0 -26
  135. package/build/executor/gws.js +0 -197
  136. package/build/executor/gws.js.map +0 -1
  137. package/build/server/handlers/calendar.d.ts +0 -2
  138. package/build/server/handlers/calendar.js +0 -97
  139. package/build/server/handlers/calendar.js.map +0 -1
  140. package/build/server/handlers/drive.d.ts +0 -2
  141. package/build/server/handlers/drive.js +0 -58
  142. package/build/server/handlers/drive.js.map +0 -1
  143. package/build/server/handlers/email.d.ts +0 -2
  144. package/build/server/handlers/email.js +0 -119
  145. package/build/server/handlers/email.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"import-meet.js","sourceRoot":"","sources":["../../../../src/server/scratchpad/adapters/import-meet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"import-meet.js","sourceRoot":"","sources":["../../../../src/server/scratchpad/adapters/import-meet.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Import adapter: sheet — loads a Google Sheet as CSV lines into a scratchpad.
3
3
  */
4
- import { execute } from '../../../executor/gws.js';
4
+ import { call } from '../../../google/client.js';
5
5
  export async function importSheet(scratchpads, scratchpadId, sourceParams) {
6
6
  const { email, spreadsheetId, range } = sourceParams;
7
7
  if (!email || !spreadsheetId) {
@@ -13,11 +13,10 @@ export async function importSheet(scratchpads, scratchpadId, sourceParams) {
13
13
  params.range = range;
14
14
  // Default to first sheet if no range specified
15
15
  const rangeArg = range ?? 'Sheet1';
16
- const result = await execute([
17
- 'sheets', 'spreadsheets', 'values', 'get',
18
- '--params', JSON.stringify({ spreadsheetId, range: rangeArg }),
19
- ], { account: email });
20
- const data = result.data;
16
+ const data = await call('sheets', 'spreadsheets.values.get', {
17
+ spreadsheetId,
18
+ range: rangeArg,
19
+ }, { account: email });
21
20
  const values = (data.values ?? []);
22
21
  if (values.length === 0) {
23
22
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"import-sheet.js","sourceRoot":"","sources":["../../../../src/server/scratchpad/adapters/import-sheet.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAUnD,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,WAA8B,EAC9B,YAAoB,EACpB,YAA+B;IAE/B,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC;IACrD,IAAI,CAAC,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC;QAC7B,OAAO,EAAE,IAAI,EAAE,wDAAwD,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;IACnG,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAA4B,EAAE,aAAa,EAAE,CAAC;QAC1D,IAAI,KAAK;YAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QAEhC,+CAA+C;QAC/C,MAAM,QAAQ,GAAG,KAAK,IAAI,QAAQ,CAAC;QAEnC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC3B,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK;YACzC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;SAC/D,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAEvB,MAAM,IAAI,GAAG,MAAM,CAAC,IAA+B,CAAC;QACpD,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAe,CAAC;QAEjD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO;gBACL,IAAI,EAAE,SAAS,aAAa,KAAK,QAAQ,8BAA8B,YAAY,aAAa;gBAChG,IAAI,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE;aACtC,CAAC;QACJ,CAAC;QAED,uBAAuB;QACvB,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAEtE,WAAW,CAAC,cAAc,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QACnD,WAAW,CAAC,SAAS,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAE3C,OAAO;YACL,IAAI,EAAE,0BAA0B,QAAQ,CAAC,MAAM,0BAA0B,YAAY,GAAG;YACxF,IAAI,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE;SACtF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO;YACL,IAAI,EAAE,kBAAkB,OAAO,EAAE;YACjC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE;SACpC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,SAAS,cAAc,CAAC,KAAa;IACnC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IACrD,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACxB,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3D,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;IACtC,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}
1
+ {"version":3,"file":"import-sheet.js","sourceRoot":"","sources":["../../../../src/server/scratchpad/adapters/import-sheet.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AAUjD,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,WAA8B,EAC9B,YAAoB,EACpB,YAA+B;IAE/B,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC;IACrD,IAAI,CAAC,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC;QAC7B,OAAO,EAAE,IAAI,EAAE,wDAAwD,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;IACnG,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAA4B,EAAE,aAAa,EAAE,CAAC;QAC1D,IAAI,KAAK;YAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QAEhC,+CAA+C;QAC/C,MAAM,QAAQ,GAAG,KAAK,IAAI,QAAQ,CAAC;QAEnC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,yBAAyB,EAAE;YAC3D,aAAa;YACb,KAAK,EAAE,QAAQ;SAChB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAA4B,CAAC;QAElD,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAe,CAAC;QAEjD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO;gBACL,IAAI,EAAE,SAAS,aAAa,KAAK,QAAQ,8BAA8B,YAAY,aAAa;gBAChG,IAAI,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE;aACtC,CAAC;QACJ,CAAC;QAED,uBAAuB;QACvB,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAEtE,WAAW,CAAC,cAAc,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QACnD,WAAW,CAAC,SAAS,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAE3C,OAAO;YACL,IAAI,EAAE,0BAA0B,QAAQ,CAAC,MAAM,0BAA0B,YAAY,GAAG;YACxF,IAAI,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE;SACtF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO;YACL,IAAI,EAAE,kBAAkB,OAAO,EAAE;YACjC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE;SACpC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,SAAS,cAAc,CAAC,KAAa;IACnC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IACrD,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACxB,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3D,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;IACtC,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Send adapter: calendar_event — creates a calendar event with scratchpad content as description.
3
3
  */
4
- import { execute } from '../../../executor/gws.js';
4
+ import { call } from '../../../google/client.js';
5
5
  import { nextSteps } from '../../formatting/next-steps.js';
6
6
  export async function sendCalendarEvent(scratchpads, scratchpadId, targetParams) {
7
7
  const content = scratchpads.getContent(scratchpadId);
@@ -15,20 +15,25 @@ export async function sendCalendarEvent(scratchpads, scratchpadId, targetParams)
15
15
  refs: { error: true, scratchpadId },
16
16
  };
17
17
  }
18
- const args = [
19
- 'calendar', '+insert',
20
- '--summary', summary,
21
- '--start', start,
22
- '--end', end,
23
- '--description', content,
24
- ];
18
+ // `calendarId` is the one PATH param the descriptor declares; everything else
19
+ // here is the Event resource and lands in the body. Same shape as
20
+ // services/calendar/patch.ts `create`.
21
+ const body = {
22
+ calendarId: 'primary',
23
+ summary,
24
+ start: { dateTime: start },
25
+ end: { dateTime: end },
26
+ description: content,
27
+ };
25
28
  if (location)
26
- args.push('--location', location);
27
- if (attendees)
28
- args.push('--attendee', attendees);
29
+ body.location = location;
30
+ if (attendees) {
31
+ body.attendees = attendees
32
+ .split(',').map((e) => e.trim()).filter(Boolean)
33
+ .map((address) => ({ email: address }));
34
+ }
29
35
  try {
30
- const result = await execute(args, { account: email });
31
- const data = result.data;
36
+ const data = await call('calendar', 'events.insert', body, { account: email });
32
37
  return {
33
38
  text: `Event created: **${summary}**\n\n` +
34
39
  `**When:** ${start} – ${end}\n` +
@@ -1 +1 @@
1
- {"version":3,"file":"send-calendar.js","sourceRoot":"","sources":["../../../../src/server/scratchpad/adapters/send-calendar.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAGnD,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAW3D,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,WAA8B,EAC9B,YAAoB,EACpB,YAAiC;IAEjC,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IACrD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO,EAAE,IAAI,EAAE,cAAc,YAAY,aAAa,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;IAClF,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,YAAY,CAAC;IACzE,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC;QACzC,OAAO;YACL,IAAI,EAAE,4FAA4F,YAAY,mBAAmB;YACjI,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE;SACpC,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG;QACX,UAAU,EAAE,SAAS;QACrB,WAAW,EAAE,OAAO;QACpB,SAAS,EAAE,KAAK;QAChB,OAAO,EAAE,GAAG;QACZ,eAAe,EAAE,OAAO;KACzB,CAAC;IACF,IAAI,QAAQ;QAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IAChD,IAAI,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAElD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,MAAM,CAAC,IAA+B,CAAC;QAEpD,OAAO;YACL,IAAI,EAAE,oBAAoB,OAAO,QAAQ;gBACvC,aAAa,KAAK,MAAM,GAAG,IAAI;gBAC/B,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5C,wCAAwC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,WAAW;gBAC7E,iBAAiB,IAAI,CAAC,EAAE,IAAI,SAAS,EAAE;gBACvC,SAAS,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC;YAC5C,IAAI,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE;SAC9D,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO;YACL,IAAI,EAAE,gBAAgB,OAAO,gBAAgB,YAAY,mBAAmB;YAC5E,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE;SACpC,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"send-calendar.js","sourceRoot":"","sources":["../../../../src/server/scratchpad/adapters/send-calendar.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AAGjD,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAW3D,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,WAA8B,EAC9B,YAAoB,EACpB,YAAiC;IAEjC,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IACrD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO,EAAE,IAAI,EAAE,cAAc,YAAY,aAAa,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;IAClF,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,YAAY,CAAC;IACzE,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC;QACzC,OAAO;YACL,IAAI,EAAE,4FAA4F,YAAY,mBAAmB;YACjI,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE;SACpC,CAAC;IACJ,CAAC;IAED,8EAA8E;IAC9E,kEAAkE;IAClE,uCAAuC;IACvC,MAAM,IAAI,GAA4B;QACpC,UAAU,EAAE,SAAS;QACrB,OAAO;QACP,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;QAC1B,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE;QACtB,WAAW,EAAE,OAAO;KACrB,CAAC;IACF,IAAI,QAAQ;QAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACvC,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,CAAC,SAAS,GAAG,SAAS;aACvB,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;aAC/C,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAA4B,CAAC;QAE1G,OAAO;YACL,IAAI,EAAE,oBAAoB,OAAO,QAAQ;gBACvC,aAAa,KAAK,MAAM,GAAG,IAAI;gBAC/B,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5C,wCAAwC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,WAAW;gBAC7E,iBAAiB,IAAI,CAAC,EAAE,IAAI,SAAS,EAAE;gBACvC,SAAS,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC;YAC5C,IAAI,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE;SAC9D,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO;YACL,IAAI,EAAE,gBAAgB,OAAO,gBAAgB,YAAY,mBAAmB;YAC5E,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE;SACpC,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -3,7 +3,23 @@
3
3
  * doc_create: creates a new Google Doc and writes scratchpad content.
4
4
  * doc_write: appends scratchpad content to an existing Google Doc.
5
5
  */
6
- import { execute } from '../../../executor/gws.js';
6
+ import { call } from '../../../google/client.js';
7
+ /**
8
+ * Append text to the end of a document's body.
9
+ *
10
+ * `documentId` is the only declared path param;
11
+ * `requests` is the batchUpdate body. `endOfSegmentLocation` with an empty
12
+ * `segmentId` means "the end of the document body" — the append semantics the
13
+ * adapter has always claimed.
14
+ */
15
+ async function appendText(account, documentId, text) {
16
+ await call('docs', 'documents.batchUpdate', {
17
+ documentId,
18
+ requests: [
19
+ { insertText: { text, endOfSegmentLocation: { segmentId: '' } } },
20
+ ],
21
+ }, { account });
22
+ }
7
23
  export async function sendDocCreate(scratchpads, scratchpadId, targetParams) {
8
24
  const content = scratchpads.getContent(scratchpadId);
9
25
  if (content === null) {
@@ -17,19 +33,12 @@ export async function sendDocCreate(scratchpads, scratchpadId, targetParams) {
17
33
  };
18
34
  }
19
35
  try {
20
- // Step 1: Create empty doc (title goes in --json request body)
21
- const createResult = await execute([
22
- 'docs', 'documents', 'create',
23
- '--json', JSON.stringify({ title }),
24
- ], { account: email });
25
- const doc = createResult.data;
36
+ // Step 1: Create empty doc (title is the request body — documents.create
37
+ // declares no path/query params, so it lands in the body).
38
+ const doc = await call('docs', 'documents.create', { title }, { account: email });
26
39
  const documentId = doc.documentId;
27
40
  // Step 2: Write content
28
- await execute([
29
- 'docs', '+write',
30
- '--document', documentId,
31
- '--text', content,
32
- ], { account: email });
41
+ await appendText(email, documentId, content);
33
42
  return {
34
43
  text: `Document created from scratchpad.\n\n**Title:** ${title}\n**Document ID:** ${documentId}`,
35
44
  refs: { scratchpadId, documentId, title },
@@ -56,11 +65,7 @@ export async function sendDocWrite(scratchpads, scratchpadId, targetParams) {
56
65
  };
57
66
  }
58
67
  try {
59
- await execute([
60
- 'docs', '+write',
61
- '--document', documentId,
62
- '--text', content,
63
- ], { account: email });
68
+ await appendText(email, documentId, content);
64
69
  return {
65
70
  text: `Content appended to document ${documentId}.`,
66
71
  refs: { scratchpadId, documentId },
@@ -1 +1 @@
1
- {"version":3,"file":"send-doc.js","sourceRoot":"","sources":["../../../../src/server/scratchpad/adapters/send-doc.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"send-doc.js","sourceRoot":"","sources":["../../../../src/server/scratchpad/adapters/send-doc.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Send adapter: email_draft — creates a Gmail draft from scratchpad content.
3
- * Uses gws +send --draft for proper MIME construction and attachment support.
3
+ * sendMail(..., { draft: true }) builds the MIME message and uploads it.
4
4
  */
5
5
  import type { HandlerResponse } from '../../handler.js';
6
6
  import type { ScratchpadManager } from '../manager.js';
@@ -1,9 +1,9 @@
1
1
  /**
2
2
  * Send adapter: email_draft — creates a Gmail draft from scratchpad content.
3
- * Uses gws +send --draft for proper MIME construction and attachment support.
3
+ * sendMail(..., { draft: true }) builds the MIME message and uploads it.
4
4
  */
5
5
  import * as path from 'node:path';
6
- import { execute } from '../../../executor/gws.js';
6
+ import { sendMail } from '../../../services/gmail/mail.js';
7
7
  import { getWorkspaceDir } from '../../../executor/workspace.js';
8
8
  export async function sendEmailDraft(scratchpads, scratchpadId, targetParams) {
9
9
  const content = scratchpads.getContent(scratchpadId);
@@ -17,33 +17,25 @@ export async function sendEmailDraft(scratchpads, scratchpadId, targetParams) {
17
17
  refs: { error: true, scratchpadId },
18
18
  };
19
19
  }
20
- // gws +send requires --to and --subject even for drafts
21
- const args = [
22
- 'gmail', '+send', '--draft',
23
- '--to', to || email,
24
- '--subject', subject || '(draft)',
25
- '--body', content,
26
- ];
27
- // Attach workspace files if scratchpad has attachments
20
+ // Attach workspace files if the scratchpad has attachments. sendMail() takes
21
+ // workspace-relative names and resolves + path-checks them itself.
28
22
  const attachments = scratchpads.getAttachments(scratchpadId);
29
- const attachmentPaths = attachments
30
- ? [...attachments.values()].filter(a => a.location).map(a => a.location)
23
+ const wsDir = getWorkspaceDir();
24
+ const attachmentNames = attachments
25
+ ? [...attachments.values()].filter(a => a.location).map(a => path.relative(wsDir, a.location))
31
26
  : [];
32
- // gws validates --attach paths are within cwd, so set cwd to workspace dir
33
- let execOptions = { account: email };
34
- if (attachmentPaths.length > 0) {
35
- const wsDir = getWorkspaceDir();
36
- for (const p of attachmentPaths) {
37
- args.push('--attach', path.relative(wsDir, p));
38
- }
39
- execOptions = { account: email, cwd: wsDir };
40
- }
41
27
  try {
42
- const result = await execute(args, execOptions);
43
- const data = result.data;
28
+ // A draft still needs To and Subject headers; fall back to the account itself.
29
+ const data = await sendMail(email, {
30
+ to: to || email,
31
+ subject: subject || '(draft)',
32
+ body: content,
33
+ draft: true,
34
+ ...(attachmentNames.length > 0 ? { attachments: attachmentNames } : {}),
35
+ });
44
36
  const draftId = data.id ?? 'unknown';
45
- const attNote = attachmentPaths.length > 0
46
- ? `\n**Attachments:** ${attachmentPaths.length}`
37
+ const attNote = attachmentNames.length > 0
38
+ ? `\n**Attachments:** ${attachmentNames.length}`
47
39
  : '';
48
40
  return {
49
41
  text: `Draft created.\n\n**Draft ID:** ${draftId}${to ? `\n**To:** ${to}` : ''}${subject ? `\n**Subject:** ${subject}` : ''}${attNote}`,
@@ -1 +1 @@
1
- {"version":3,"file":"send-email-draft.js","sourceRoot":"","sources":["../../../../src/server/scratchpad/adapters/send-email-draft.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"send-email-draft.js","sourceRoot":"","sources":["../../../../src/server/scratchpad/adapters/send-email-draft.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAUjE,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,WAA8B,EAC9B,YAAoB,EACpB,YAAoC;IAEpC,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IACrD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO,EAAE,IAAI,EAAE,cAAc,YAAY,aAAa,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;IAClF,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC;IAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,IAAI,EAAE,yDAAyD,YAAY,mBAAmB;YAC9F,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE;SACpC,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,mEAAmE;IACnE,MAAM,WAAW,GAAG,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,MAAM,eAAe,GAAG,WAAW;QACjC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC9F,CAAC,CAAC,EAAE,CAAC;IAEP,IAAI,CAAC;QACH,+EAA+E;QAC/E,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE;YACjC,EAAE,EAAE,EAAE,IAAI,KAAK;YACf,OAAO,EAAE,OAAO,IAAI,SAAS;YAC7B,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,IAAI;YACX,GAAG,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxE,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,IAAI,SAAS,CAAC;QACrC,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC;YACxC,CAAC,CAAC,sBAAsB,eAAe,CAAC,MAAM,EAAE;YAChD,CAAC,CAAC,EAAE,CAAC;QACP,OAAO;YACL,IAAI,EAAE,mCAAmC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,kBAAkB,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE;YACvI,IAAI,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE;SAChC,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO;YACL,IAAI,EAAE,gBAAgB,OAAO,gBAAgB,YAAY,mBAAmB;YAC5E,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE;SACpC,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Send adapter: email — delivers scratchpad content as an email.
3
- * When attachments are present, creates a draft (with --attach and --draft flags)
4
- * so the agent can review before sending. Without attachments, sends directly.
3
+ * When attachments are present, creates a draft so the agent can review before
4
+ * sending. Without attachments, sends directly.
5
5
  */
6
6
  import type { HandlerResponse } from '../../handler.js';
7
7
  import type { ScratchpadManager } from '../manager.js';
@@ -1,10 +1,10 @@
1
1
  /**
2
2
  * Send adapter: email — delivers scratchpad content as an email.
3
- * When attachments are present, creates a draft (with --attach and --draft flags)
4
- * so the agent can review before sending. Without attachments, sends directly.
3
+ * When attachments are present, creates a draft so the agent can review before
4
+ * sending. Without attachments, sends directly.
5
5
  */
6
6
  import * as path from 'node:path';
7
- import { execute } from '../../../executor/gws.js';
7
+ import { sendMail } from '../../../services/gmail/mail.js';
8
8
  import { getWorkspaceDir } from '../../../executor/workspace.js';
9
9
  import { nextSteps } from '../../formatting/next-steps.js';
10
10
  export async function sendEmail(scratchpads, scratchpadId, targetParams) {
@@ -19,30 +19,26 @@ export async function sendEmail(scratchpads, scratchpadId, targetParams) {
19
19
  refs: { error: true, scratchpadId },
20
20
  };
21
21
  }
22
+ // sendMail() takes WORKSPACE-RELATIVE names — it resolves and path-safety-checks
23
+ // them itself. The side-table stores absolute locations, so relativise them here.
22
24
  const attachments = scratchpads.getAttachments(scratchpadId);
23
- const attachmentRefs = attachments ? [...attachments.values()] : [];
24
- const attachmentPaths = attachmentRefs.filter(a => a.location).map(a => a.location);
25
+ const wsDir = getWorkspaceDir();
26
+ const attachmentNames = attachments
27
+ ? [...attachments.values()].filter(a => a.location).map(a => path.relative(wsDir, a.location))
28
+ : [];
25
29
  try {
26
- const args = ['gmail', '+send', '--to', to, '--subject', subject, '--body', content];
27
- if (cc)
28
- args.push('--cc', cc);
29
- if (bcc)
30
- args.push('--bcc', bcc);
31
- // Attachments present → create draft (gws handles MIME + upload endpoint, 35MB limit)
32
- // gws validates --attach paths are within cwd, so set cwd to workspace dir
33
- let execOptions = { account: email };
34
- if (attachmentPaths.length > 0) {
35
- const wsDir = getWorkspaceDir();
36
- args.push('--draft');
37
- for (const p of attachmentPaths) {
38
- args.push('--attach', path.relative(wsDir, p));
39
- }
40
- execOptions = { account: email, cwd: wsDir };
41
- }
42
- const result = await execute(args, execOptions);
43
- const data = result.data;
44
- if (attachmentPaths.length > 0) {
45
- const attNote = ` (${attachmentPaths.length} attachment(s))`;
30
+ // Attachments present → draft, so the agent can review before it goes out.
31
+ const isDraft = attachmentNames.length > 0;
32
+ const data = await sendMail(email, {
33
+ to,
34
+ subject,
35
+ body: content,
36
+ cc,
37
+ bcc,
38
+ ...(isDraft ? { draft: true, attachments: attachmentNames } : {}),
39
+ });
40
+ if (isDraft) {
41
+ const attNote = ` (${attachmentNames.length} attachment(s))`;
46
42
  return {
47
43
  text: `Draft created for ${to}${attNote}.\n\n**Subject:** ${subject}\n**Draft ID:** ${data.id ?? 'unknown'}\n\n` +
48
44
  `_Draft with attachments saved to Gmail. Review and send from Gmail or use manage_email to send the draft._` +
@@ -1 +1 @@
1
- {"version":3,"file":"send-email.js","sourceRoot":"","sources":["../../../../src/server/scratchpad/adapters/send-email.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"send-email.js","sourceRoot":"","sources":["../../../../src/server/scratchpad/adapters/send-email.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  * Send adapter: sheet_write — writes scratchpad CSV content to a Google Sheet.
3
3
  * Parses CSV lines back into a values array for spreadsheets.values.update.
4
4
  */
5
- import { execute } from '../../../executor/gws.js';
5
+ import { call } from '../../../google/client.js';
6
6
  export async function sendSheetWrite(scratchpads, scratchpadId, targetParams) {
7
7
  const content = scratchpads.getContent(scratchpadId);
8
8
  if (content === null) {
@@ -19,15 +19,15 @@ export async function sendSheetWrite(scratchpads, scratchpadId, targetParams) {
19
19
  const lines = content.split('\n').filter(l => l.trim());
20
20
  const values = lines.map(parseCsvLine);
21
21
  try {
22
- await execute([
23
- 'sheets', 'spreadsheets', 'values', 'update',
24
- '--params', JSON.stringify({
25
- spreadsheetId,
26
- range,
27
- valueInputOption: 'USER_ENTERED',
28
- requestBody: { values },
29
- }),
30
- ], { account: email });
22
+ // `values` is the request BODY; the descriptor declares only
23
+ // spreadsheetId/range/valueInputOption, so it goes at the top level
24
+ // rather than nested under a `requestBody` key.
25
+ await call('sheets', 'spreadsheets.values.update', {
26
+ spreadsheetId,
27
+ range,
28
+ valueInputOption: 'USER_ENTERED',
29
+ values,
30
+ }, { account: email });
31
31
  return {
32
32
  text: `Written ${values.length} rows to sheet ${spreadsheetId} (${range}).`,
33
33
  refs: { scratchpadId, spreadsheetId, range, rows: values.length },
@@ -1 +1 @@
1
- {"version":3,"file":"send-sheet.js","sourceRoot":"","sources":["../../../../src/server/scratchpad/adapters/send-sheet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"send-sheet.js","sourceRoot":"","sources":["../../../../src/server/scratchpad/adapters/send-sheet.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  * Send adapter: task_create — creates a Google Task from scratchpad content.
3
3
  * First line becomes the task title, remaining lines become the notes.
4
4
  */
5
- import { execute } from '../../../executor/gws.js';
5
+ import { call } from '../../../google/client.js';
6
6
  export async function sendTaskCreate(scratchpads, scratchpadId, targetParams) {
7
7
  const content = scratchpads.getContent(scratchpadId);
8
8
  if (content === null) {
@@ -26,15 +26,16 @@ export async function sendTaskCreate(scratchpads, scratchpadId, targetParams) {
26
26
  }
27
27
  const title = lines[titleLine].replace(/^#+\s*/, '').trim(); // strip markdown heading prefix
28
28
  const notes = lines.slice(titleLine + 1).join('\n').trim();
29
- const requestBody = { title };
29
+ const body = { title };
30
30
  if (notes)
31
- requestBody.notes = notes;
31
+ body.notes = notes;
32
32
  try {
33
- const result = await execute([
34
- 'tasks', 'tasks', 'insert',
35
- '--params', JSON.stringify({ tasklist: taskListId, requestBody }),
36
- ], { account: email });
37
- const data = result.data;
33
+ // `tasklist` is the path param; title/notes are the request body, and the body
34
+ // goes at the top level — not nested under `requestBody`.
35
+ const data = await call('tasks', 'tasks.insert', {
36
+ tasklist: taskListId,
37
+ ...body,
38
+ }, { account: email });
38
39
  return {
39
40
  text: `Task created: **${title}**\n\n` +
40
41
  (notes ? `**Notes:** ${notes.split('\n').length} lines\n` : '') +
@@ -1 +1 @@
1
- {"version":3,"file":"send-task.js","sourceRoot":"","sources":["../../../../src/server/scratchpad/adapters/send-task.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AASnD,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,WAA8B,EAC9B,YAAoB,EACpB,YAA8B;IAE9B,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IACrD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO,EAAE,IAAI,EAAE,cAAc,YAAY,aAAa,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;IAClF,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,UAAU,EAAE,GAAG,YAAY,CAAC;IACxD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,IAAI,EAAE,+DAA+D,YAAY,mBAAmB;YACpG,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE;SACpC,CAAC;IACJ,CAAC;IAED,6CAA6C;IAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC5D,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;QACrB,OAAO;YACL,IAAI,EAAE,gEAAgE,YAAY,mBAAmB;YACrG,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE;SACpC,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,gCAAgC;IAC7F,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAE3D,MAAM,WAAW,GAA2B,EAAE,KAAK,EAAE,CAAC;IACtD,IAAI,KAAK;QAAE,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC;IAErC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC3B,OAAO,EAAE,OAAO,EAAE,QAAQ;YAC1B,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;SAClE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAEvB,MAAM,IAAI,GAAG,MAAM,CAAC,IAA+B,CAAC;QAEpD,OAAO;YACL,IAAI,EAAE,mBAAmB,KAAK,QAAQ;gBACpC,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/D,gBAAgB,IAAI,CAAC,EAAE,IAAI,SAAS,EAAE;YACxC,IAAI,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE;SAC/C,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO;YACL,IAAI,EAAE,gBAAgB,OAAO,gBAAgB,YAAY,mBAAmB;YAC5E,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE;SACpC,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"send-task.js","sourceRoot":"","sources":["../../../../src/server/scratchpad/adapters/send-task.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AASjD,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,WAA8B,EAC9B,YAAoB,EACpB,YAA8B;IAE9B,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IACrD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO,EAAE,IAAI,EAAE,cAAc,YAAY,aAAa,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;IAClF,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,UAAU,EAAE,GAAG,YAAY,CAAC;IACxD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,IAAI,EAAE,+DAA+D,YAAY,mBAAmB;YACpG,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE;SACpC,CAAC;IACJ,CAAC;IAED,6CAA6C;IAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC5D,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;QACrB,OAAO;YACL,IAAI,EAAE,gEAAgE,YAAY,mBAAmB;YACrG,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE;SACpC,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,gCAAgC;IAC7F,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAE3D,MAAM,IAAI,GAA2B,EAAE,KAAK,EAAE,CAAC;IAC/C,IAAI,KAAK;QAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IAE9B,IAAI,CAAC;QACH,+EAA+E;QAC/E,0DAA0D;QAC1D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE;YAC/C,QAAQ,EAAE,UAAU;YACpB,GAAG,IAAI;SACR,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAA4B,CAAC;QAElD,OAAO;YACL,IAAI,EAAE,mBAAmB,KAAK,QAAQ;gBACpC,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/D,gBAAgB,IAAI,CAAC,EAAE,IAAI,SAAS,EAAE;YACxC,IAAI,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE;SAC/C,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO;YACL,IAAI,EAAE,gBAAgB,OAAO,gBAAgB,YAAY,mBAAmB;YAC5E,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE;SACpC,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -6,7 +6,7 @@ import { ScratchpadManager } from './manager.js';
6
6
  import { translateMutation, isRejection } from './docs-sync.js';
7
7
  import * as fs from 'node:fs/promises';
8
8
  import { sendEmail, sendEmailDraft, sendDocCreate, sendDocWrite, sendWorkspace, sendSheetWrite, sendCalendarEvent, sendTaskCreate, importEmail, importDoc, importSheet, importDriveFile, importMeet, } from './adapters/index.js';
9
- import { execute } from '../../executor/gws.js';
9
+ import { call } from '../../google/client.js';
10
10
  import { resolveWorkspacePath, verifyPathSafety } from '../../executor/workspace.js';
11
11
  import { lookupMimeType } from '../../services/gmail/mime.js';
12
12
  const scratchpads = new ScratchpadManager();
@@ -313,11 +313,10 @@ async function maybeHandleDocsBoundMutation(id, intent) {
313
313
  return scratchpadNotFound(id);
314
314
  // Push to the Docs API.
315
315
  try {
316
- await execute([
317
- 'docs', 'documents', 'batchUpdate',
318
- '--params', JSON.stringify({ documentId: binding.resourceId }),
319
- '--json', JSON.stringify(translated.body),
320
- ], { account: binding.account });
316
+ await call('docs', 'documents.batchUpdate', {
317
+ documentId: binding.resourceId,
318
+ ...translated.body,
319
+ }, { account: binding.account });
321
320
  }
322
321
  catch (err) {
323
322
  // The buffer has the local change; the doc doesn't. Match the sheets
@@ -346,11 +345,9 @@ function applyMutation(id, intent) {
346
345
  }
347
346
  /** Re-fetch the doc, replace the buffer, and update the binding's revisionId. */
348
347
  async function reloadDocsBuffer(id, binding) {
349
- const result = await execute([
350
- 'docs', 'documents', 'get',
351
- '--params', JSON.stringify({ documentId: binding.resourceId }),
352
- ], { account: binding.account });
353
- const doc = result.data;
348
+ const doc = await call('docs', 'documents.get', {
349
+ documentId: binding.resourceId,
350
+ }, { account: binding.account });
354
351
  const freshJson = JSON.stringify(doc, null, 2);
355
352
  const sp = scratchpads.get(id);
356
353
  if (!sp)
@@ -388,25 +385,22 @@ async function syncIfBound(id) {
388
385
  const values = data.values;
389
386
  const range = data.range;
390
387
  if (values && range) {
391
- await execute([
392
- 'sheets', 'spreadsheets', 'values', 'update',
393
- '--params', JSON.stringify({
394
- spreadsheetId: binding.resourceId,
395
- range,
396
- valueInputOption: 'USER_ENTERED',
397
- requestBody: { values },
398
- }),
399
- ], { account: binding.account });
388
+ // `values` is the request BODY (the descriptor declares only
389
+ // spreadsheetId/range/valueInputOption), so it goes at the top level —
390
+ // not nested under `requestBody`.
391
+ await call('sheets', 'spreadsheets.values.update', {
392
+ spreadsheetId: binding.resourceId,
393
+ range,
394
+ valueInputOption: 'USER_ENTERED',
395
+ values,
396
+ }, { account: binding.account });
400
397
  }
401
398
  // Reload from API
402
- const result = await execute([
403
- 'sheets', 'spreadsheets', 'values', 'get',
404
- '--params', JSON.stringify({
405
- spreadsheetId: binding.resourceId,
406
- range: range ?? 'Sheet1',
407
- }),
408
- ], { account: binding.account });
409
- const freshJson = JSON.stringify(result.data, null, 2);
399
+ const fresh = await call('sheets', 'spreadsheets.values.get', {
400
+ spreadsheetId: binding.resourceId,
401
+ range: range ?? 'Sheet1',
402
+ }, { account: binding.account });
403
+ const freshJson = JSON.stringify(fresh, null, 2);
410
404
  const sp = scratchpads.get(id);
411
405
  if (sp) {
412
406
  sp.lines = freshJson.split('\n');