@squadbase/vite-server 0.1.17-dev.24af54e → 0.1.17-dev.423ee34

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 (77) hide show
  1. package/dist/cli/index.js +4873 -1073
  2. package/dist/connectors/airtable-oauth.js +78 -11
  3. package/dist/connectors/airtable.js +74 -11
  4. package/dist/connectors/amplitude.js +38 -11
  5. package/dist/connectors/anthropic.js +4 -2
  6. package/dist/connectors/asana.js +67 -13
  7. package/dist/connectors/attio.js +60 -16
  8. package/dist/connectors/aws-billing.js +38 -11
  9. package/dist/connectors/azure-sql.js +64 -13
  10. package/dist/connectors/backlog-api-key.js +70 -18
  11. package/dist/connectors/clickup.js +80 -13
  12. package/dist/connectors/cosmosdb.js +42 -15
  13. package/dist/connectors/customerio.js +39 -12
  14. package/dist/connectors/dbt.js +716 -28
  15. package/dist/connectors/freshdesk.js +112 -11
  16. package/dist/connectors/freshsales.js +38 -11
  17. package/dist/connectors/freshservice.js +38 -11
  18. package/dist/connectors/gamma.js +47 -20
  19. package/dist/connectors/gemini.js +4 -2
  20. package/dist/connectors/github.js +42 -15
  21. package/dist/connectors/gmail-oauth.js +38 -13
  22. package/dist/connectors/gmail.js +34 -7
  23. package/dist/connectors/google-ads.js +38 -11
  24. package/dist/connectors/google-analytics-oauth.js +182 -28
  25. package/dist/connectors/google-analytics.js +653 -104
  26. package/dist/connectors/google-audit-log.js +34 -7
  27. package/dist/connectors/google-calendar-oauth.js +91 -18
  28. package/dist/connectors/google-calendar.js +91 -14
  29. package/dist/connectors/google-docs.js +38 -13
  30. package/dist/connectors/google-drive.js +60 -13
  31. package/dist/connectors/google-search-console-oauth.js +156 -20
  32. package/dist/connectors/google-sheets.js +36 -9
  33. package/dist/connectors/google-slides.js +38 -13
  34. package/dist/connectors/grafana.js +75 -13
  35. package/dist/connectors/hubspot-oauth.js +69 -12
  36. package/dist/connectors/hubspot.js +55 -12
  37. package/dist/connectors/influxdb.js +38 -11
  38. package/dist/connectors/intercom-oauth.js +100 -15
  39. package/dist/connectors/intercom.js +42 -15
  40. package/dist/connectors/jdbc.js +36 -9
  41. package/dist/connectors/jira-api-key.js +98 -14
  42. package/dist/connectors/kintone-api-token.js +96 -21
  43. package/dist/connectors/kintone.js +84 -14
  44. package/dist/connectors/linear.js +84 -15
  45. package/dist/connectors/linkedin-ads.js +71 -17
  46. package/dist/connectors/mailchimp-oauth.js +36 -9
  47. package/dist/connectors/mailchimp.js +36 -9
  48. package/dist/connectors/meta-ads-oauth.js +63 -17
  49. package/dist/connectors/meta-ads.js +65 -17
  50. package/dist/connectors/mixpanel.js +38 -11
  51. package/dist/connectors/monday.js +39 -12
  52. package/dist/connectors/mongodb.js +38 -11
  53. package/dist/connectors/notion-oauth.js +88 -14
  54. package/dist/connectors/notion.js +90 -14
  55. package/dist/connectors/openai.js +4 -2
  56. package/dist/connectors/oracle.js +78 -20
  57. package/dist/connectors/outlook-oauth.js +48 -23
  58. package/dist/connectors/powerbi-oauth.js +321 -49
  59. package/dist/connectors/salesforce.js +72 -12
  60. package/dist/connectors/semrush.js +374 -52
  61. package/dist/connectors/sentry.js +66 -13
  62. package/dist/connectors/shopify-oauth.js +71 -13
  63. package/dist/connectors/shopify.js +38 -11
  64. package/dist/connectors/sqlserver.js +64 -13
  65. package/dist/connectors/stripe-api-key.js +96 -18
  66. package/dist/connectors/stripe-oauth.js +98 -22
  67. package/dist/connectors/supabase.js +55 -11
  68. package/dist/connectors/tableau.js +262 -92
  69. package/dist/connectors/tiktok-ads.js +67 -19
  70. package/dist/connectors/wix-store.js +38 -11
  71. package/dist/connectors/zendesk-oauth.js +83 -15
  72. package/dist/connectors/zendesk.js +42 -15
  73. package/dist/index.d.ts +1 -0
  74. package/dist/index.js +4902 -1077
  75. package/dist/main.js +4891 -1071
  76. package/dist/vite-plugin.js +4871 -1071
  77. package/package.json +1 -1
@@ -16,6 +16,7 @@ var init_parameter_definition = __esm({
16
16
  type;
17
17
  secret;
18
18
  required;
19
+ isDeprecated;
19
20
  constructor(config) {
20
21
  this.slug = config.slug;
21
22
  this.name = config.name;
@@ -24,6 +25,7 @@ var init_parameter_definition = __esm({
24
25
  this.type = config.type;
25
26
  this.secret = config.secret;
26
27
  this.required = config.required;
28
+ this.isDeprecated = config.isDeprecated ?? false;
27
29
  }
28
30
  /**
29
31
  * Get the parameter value from a ConnectorConnectionObject.
@@ -224,7 +226,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
224
226
  /**
225
227
  * Create tools for connections that belong to this connector.
226
228
  * Filters connections by connectorKey internally.
227
- * Returns tools keyed as `${connectorKey}_${toolName}`.
229
+ * Returns tools keyed as `connector_${connectorKey}_${toolName}`.
228
230
  */
229
231
  createTools(connections, config, opts) {
230
232
  const myConnections = connections.filter(
@@ -234,7 +236,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
234
236
  for (const t of Object.values(this.tools)) {
235
237
  const tool = t.createTool(myConnections, config);
236
238
  const originalToModelOutput = tool.toModelOutput;
237
- result[`${this.connectorKey}_${t.name}`] = {
239
+ result[`connector_${this.connectorKey}_${t.name}`] = {
238
240
  ...tool,
239
241
  toModelOutput: async (options) => {
240
242
  if (!originalToModelOutput) {
@@ -290,19 +292,34 @@ async function runSetupFlow(flow, params, ctx, config) {
290
292
  };
291
293
  let state = flow.initialState();
292
294
  let answerIdx = 0;
295
+ const pendingParameterUpdates = [];
293
296
  for (const step of flow.steps) {
294
297
  const ans = ctx.answers[answerIdx];
295
298
  if (ans && ans.questionSlug === step.slug) {
296
299
  state = step.applyAnswer(state, ans.answer);
300
+ if (step.toParameterUpdates) {
301
+ pendingParameterUpdates.push(...step.toParameterUpdates(state));
302
+ }
297
303
  answerIdx += 1;
298
304
  continue;
299
305
  }
306
+ const resolvedAllowFreeText = step.allowFreeText !== void 0 ? step.allowFreeText : true;
300
307
  if (step.type === "text") {
308
+ if (step.fetchOptions) {
309
+ const options2 = await step.fetchOptions(state, runtime);
310
+ if (options2.length === 0) {
311
+ continue;
312
+ }
313
+ }
301
314
  return {
302
315
  type: "nextQuestion",
303
316
  questionSlug: step.slug,
304
317
  question: step.question[ctx.language],
305
- questionType: "text"
318
+ questionType: "text",
319
+ allowFreeText: resolvedAllowFreeText,
320
+ ...pendingParameterUpdates.length > 0 && {
321
+ parameterUpdates: pendingParameterUpdates
322
+ }
306
323
  };
307
324
  }
308
325
  const options = step.fetchOptions ? await step.fetchOptions(state, runtime) : [];
@@ -314,11 +331,21 @@ async function runSetupFlow(flow, params, ctx, config) {
314
331
  questionSlug: step.slug,
315
332
  question: step.question[ctx.language],
316
333
  questionType: step.type,
317
- options
334
+ options,
335
+ allowFreeText: resolvedAllowFreeText,
336
+ ...pendingParameterUpdates.length > 0 && {
337
+ parameterUpdates: pendingParameterUpdates
338
+ }
318
339
  };
319
340
  }
320
341
  const dataInvestigationResult = await flow.finalize(state, runtime);
321
- return { type: "fulfilled", dataInvestigationResult };
342
+ return {
343
+ type: "fulfilled",
344
+ dataInvestigationResult,
345
+ ...pendingParameterUpdates.length > 0 && {
346
+ parameterUpdates: pendingParameterUpdates
347
+ }
348
+ };
322
349
  }
323
350
  async function resolveSetupSelection(params) {
324
351
  const { selected, allSentinel, fetchAll, limit } = params;
@@ -781,7 +808,7 @@ var googleAuditLogConnector = new ConnectorPlugin({
781
808
  systemPrompt: {
782
809
  en: `### Tools
783
810
 
784
- - \`google-audit-log-service-account_request_with_delegation\`: Call the Google Workspace Admin SDK Reports API on behalf of a Workspace admin via Domain-wide Delegation. Pass \`subject\` as the admin email; the token will be issued as that user. Always pass \`scopes\`.
811
+ - \`connector_google-audit-log-service-account_request_with_delegation\`: Call the Google Workspace Admin SDK Reports API on behalf of a Workspace admin via Domain-wide Delegation. Pass \`subject\` as the admin email; the token will be issued as that user. Always pass \`scopes\`.
785
812
 
786
813
  ### OAuth Scopes (pass as \`scopes\` argument)
787
814
 
@@ -870,7 +897,7 @@ export default async function handler(c: Context) {
870
897
  \`\`\``,
871
898
  ja: `### \u30C4\u30FC\u30EB
872
899
 
873
- - \`google-audit-log-service-account_request_with_delegation\`: Domain-wide Delegation \u7D4C\u7531\u3067 Workspace \u7BA1\u7406\u8005\u306B\u306A\u308A\u3059\u307E\u3057\u3066 Google Workspace Admin SDK Reports API \u3092\u547C\u3073\u51FA\u3057\u307E\u3059\u3002\u4EE3\u7406\u5BFE\u8C61\u306E\u7BA1\u7406\u8005\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3092 \`subject\` \u3068\u3057\u3066\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u30C8\u30FC\u30AF\u30F3\u306F\u305D\u306E\u30E6\u30FC\u30B6\u30FC\u3068\u3057\u3066\u767A\u884C\u3055\u308C\u307E\u3059\u3002\`scopes\` \u3082\u6BCE\u56DE\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\u3002
900
+ - \`connector_google-audit-log-service-account_request_with_delegation\`: Domain-wide Delegation \u7D4C\u7531\u3067 Workspace \u7BA1\u7406\u8005\u306B\u306A\u308A\u3059\u307E\u3057\u3066 Google Workspace Admin SDK Reports API \u3092\u547C\u3073\u51FA\u3057\u307E\u3059\u3002\u4EE3\u7406\u5BFE\u8C61\u306E\u7BA1\u7406\u8005\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3092 \`subject\` \u3068\u3057\u3066\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u30C8\u30FC\u30AF\u30F3\u306F\u305D\u306E\u30E6\u30FC\u30B6\u30FC\u3068\u3057\u3066\u767A\u884C\u3055\u308C\u307E\u3059\u3002\`scopes\` \u3082\u6BCE\u56DE\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\u3002
874
901
 
875
902
  ### OAuth \u30B9\u30B3\u30FC\u30D7 (\`scopes\` \u5F15\u6570\u3067\u6E21\u3059)
876
903
 
@@ -16,6 +16,7 @@ var init_parameter_definition = __esm({
16
16
  type;
17
17
  secret;
18
18
  required;
19
+ isDeprecated;
19
20
  constructor(config) {
20
21
  this.slug = config.slug;
21
22
  this.name = config.name;
@@ -24,6 +25,7 @@ var init_parameter_definition = __esm({
24
25
  this.type = config.type;
25
26
  this.secret = config.secret;
26
27
  this.required = config.required;
28
+ this.isDeprecated = config.isDeprecated ?? false;
27
29
  }
28
30
  /**
29
31
  * Get the parameter value from a ConnectorConnectionObject.
@@ -240,7 +242,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
240
242
  /**
241
243
  * Create tools for connections that belong to this connector.
242
244
  * Filters connections by connectorKey internally.
243
- * Returns tools keyed as `${connectorKey}_${toolName}`.
245
+ * Returns tools keyed as `connector_${connectorKey}_${toolName}`.
244
246
  */
245
247
  createTools(connections, config, opts) {
246
248
  const myConnections = connections.filter(
@@ -250,7 +252,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
250
252
  for (const t of Object.values(this.tools)) {
251
253
  const tool = t.createTool(myConnections, config);
252
254
  const originalToModelOutput = tool.toModelOutput;
253
- result[`${this.connectorKey}_${t.name}`] = {
255
+ result[`connector_${this.connectorKey}_${t.name}`] = {
254
256
  ...tool,
255
257
  toModelOutput: async (options) => {
256
258
  if (!originalToModelOutput) {
@@ -306,19 +308,34 @@ async function runSetupFlow(flow, params, ctx, config) {
306
308
  };
307
309
  let state = flow.initialState();
308
310
  let answerIdx = 0;
311
+ const pendingParameterUpdates = [];
309
312
  for (const step of flow.steps) {
310
313
  const ans = ctx.answers[answerIdx];
311
314
  if (ans && ans.questionSlug === step.slug) {
312
315
  state = step.applyAnswer(state, ans.answer);
316
+ if (step.toParameterUpdates) {
317
+ pendingParameterUpdates.push(...step.toParameterUpdates(state));
318
+ }
313
319
  answerIdx += 1;
314
320
  continue;
315
321
  }
322
+ const resolvedAllowFreeText = step.allowFreeText !== void 0 ? step.allowFreeText : true;
316
323
  if (step.type === "text") {
324
+ if (step.fetchOptions) {
325
+ const options2 = await step.fetchOptions(state, runtime);
326
+ if (options2.length === 0) {
327
+ continue;
328
+ }
329
+ }
317
330
  return {
318
331
  type: "nextQuestion",
319
332
  questionSlug: step.slug,
320
333
  question: step.question[ctx.language],
321
- questionType: "text"
334
+ questionType: "text",
335
+ allowFreeText: resolvedAllowFreeText,
336
+ ...pendingParameterUpdates.length > 0 && {
337
+ parameterUpdates: pendingParameterUpdates
338
+ }
322
339
  };
323
340
  }
324
341
  const options = step.fetchOptions ? await step.fetchOptions(state, runtime) : [];
@@ -330,11 +347,21 @@ async function runSetupFlow(flow, params, ctx, config) {
330
347
  questionSlug: step.slug,
331
348
  question: step.question[ctx.language],
332
349
  questionType: step.type,
333
- options
350
+ options,
351
+ allowFreeText: resolvedAllowFreeText,
352
+ ...pendingParameterUpdates.length > 0 && {
353
+ parameterUpdates: pendingParameterUpdates
354
+ }
334
355
  };
335
356
  }
336
357
  const dataInvestigationResult = await flow.finalize(state, runtime);
337
- return { type: "fulfilled", dataInvestigationResult };
358
+ return {
359
+ type: "fulfilled",
360
+ dataInvestigationResult,
361
+ ...pendingParameterUpdates.length > 0 && {
362
+ parameterUpdates: pendingParameterUpdates
363
+ }
364
+ };
338
365
  }
339
366
  async function resolveSetupSelection(params) {
340
367
  const { selected, allSentinel, fetchAll, limit } = params;
@@ -510,10 +537,10 @@ var googleCalendarOauthOnboarding = new ConnectorOnboarding({
510
537
  - Write only 1 sentence between tool calls, then immediately call the next tool. Skip unnecessary explanations and proceed efficiently`
511
538
  },
512
539
  dataOverviewInstructions: {
513
- en: `1. Call google-calendar-oauth_request with GET /calendars/{calendarId} to get the default calendar's metadata
514
- 2. Call google-calendar-oauth_request with GET /calendars/{calendarId}/events with query params timeMin (current RFC3339 timestamp), singleEvents=true, orderBy=startTime, and maxResults=10 to sample upcoming events`,
515
- ja: `1. google-calendar-oauth_request \u3067 GET /calendars/{calendarId} \u3092\u547C\u3073\u51FA\u3057\u3001\u30C7\u30D5\u30A9\u30EB\u30C8\u30AB\u30EC\u30F3\u30C0\u30FC\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u3092\u53D6\u5F97
516
- 2. google-calendar-oauth_request \u3067 GET /calendars/{calendarId}/events \u3092\u30AF\u30A8\u30EA\u30D1\u30E9\u30E1\u30FC\u30BF timeMin\uFF08\u73FE\u5728\u306ERFC3339\u30BF\u30A4\u30E0\u30B9\u30BF\u30F3\u30D7\uFF09\u3001singleEvents=true\u3001orderBy=startTime\u3001maxResults=10 \u3067\u547C\u3073\u51FA\u3057\u3001\u76F4\u8FD1\u306E\u30A4\u30D9\u30F3\u30C8\u3092\u30B5\u30F3\u30D7\u30EA\u30F3\u30B0`
540
+ en: `1. Call connector_google-calendar-oauth_request with GET /calendars/{calendarId} to get the default calendar's metadata
541
+ 2. Call connector_google-calendar-oauth_request with GET /calendars/{calendarId}/events with query params timeMin (current RFC3339 timestamp), singleEvents=true, orderBy=startTime, and maxResults=10 to sample upcoming events`,
542
+ ja: `1. connector_google-calendar-oauth_request \u3067 GET /calendars/{calendarId} \u3092\u547C\u3073\u51FA\u3057\u3001\u30C7\u30D5\u30A9\u30EB\u30C8\u30AB\u30EC\u30F3\u30C0\u30FC\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u3092\u53D6\u5F97
543
+ 2. connector_google-calendar-oauth_request \u3067 GET /calendars/{calendarId}/events \u3092\u30AF\u30A8\u30EA\u30D1\u30E9\u30E1\u30FC\u30BF timeMin\uFF08\u73FE\u5728\u306ERFC3339\u30BF\u30A4\u30E0\u30B9\u30BF\u30F3\u30D7\uFF09\u3001singleEvents=true\u3001orderBy=startTime\u3001maxResults=10 \u3067\u547C\u3073\u51FA\u3057\u3001\u76F4\u8FD1\u306E\u30A4\u30D9\u30F3\u30C8\u3092\u30B5\u30F3\u30D7\u30EA\u30F3\u30B0`
517
544
  }
518
545
  });
519
546
 
@@ -537,6 +564,37 @@ async function listCalendars(config) {
537
564
  const data = await calendarApiFetch(config, url);
538
565
  return data.items ?? [];
539
566
  }
567
+ async function fetchEventActivity(config, calendarId) {
568
+ try {
569
+ const now = /* @__PURE__ */ new Date();
570
+ const thirtyDaysAgo = new Date(now.getTime() - 30 * 24 * 60 * 60 * 1e3);
571
+ const qs = new URLSearchParams({
572
+ maxResults: "250",
573
+ timeMin: thirtyDaysAgo.toISOString(),
574
+ timeMax: now.toISOString(),
575
+ showDeleted: "true"
576
+ });
577
+ const url = `https://www.googleapis.com/calendar/v3/calendars/${encodeURIComponent(
578
+ calendarId
579
+ )}/events?${qs.toString()}`;
580
+ const data = await calendarApiFetch(config, url);
581
+ const items = data.items ?? [];
582
+ const activity = {
583
+ total: items.length,
584
+ confirmed: 0,
585
+ tentative: 0,
586
+ cancelled: 0
587
+ };
588
+ for (const ev of items) {
589
+ if (ev.status === "confirmed") activity.confirmed += 1;
590
+ else if (ev.status === "tentative") activity.tentative += 1;
591
+ else if (ev.status === "cancelled") activity.cancelled += 1;
592
+ }
593
+ return activity;
594
+ } catch {
595
+ return null;
596
+ }
597
+ }
540
598
  function displayName(c) {
541
599
  return c.summaryOverride ?? c.summary ?? c.id;
542
600
  }
@@ -582,19 +640,34 @@ var googleCalendarOauthSetupFlow = {
582
640
  );
583
641
  return sections.join("\n");
584
642
  }
585
- sections.push("| Calendar | Time Zone | Primary | Access |");
586
- sections.push("|----------|-----------|---------|--------|");
587
- for (const id of targetIds) {
643
+ sections.push(
644
+ "| Calendar | Time Zone | Primary | Access | Events (30d) | Confirmed | Tentative | Cancelled |"
645
+ );
646
+ sections.push(
647
+ "|----------|-----------|---------|--------|--------------|-----------|-----------|-----------|"
648
+ );
649
+ const activities = await Promise.all(
650
+ targetIds.map((id) => fetchEventActivity(rt.config, id))
651
+ );
652
+ for (let i = 0; i < targetIds.length; i++) {
653
+ const id = targetIds[i];
588
654
  const c = byId.get(id);
655
+ const activity = activities[i] ?? null;
656
+ const total = activity ? String(activity.total) : "-";
657
+ const confirmed = activity ? String(activity.confirmed) : "-";
658
+ const tentative = activity ? String(activity.tentative) : "-";
659
+ const cancelled = activity ? String(activity.cancelled) : "-";
589
660
  if (!c) {
590
- sections.push(`| ${id} | - | - | - |`);
661
+ sections.push(
662
+ `| ${id} | - | - | - | ${total} | ${confirmed} | ${tentative} | ${cancelled} |`
663
+ );
591
664
  continue;
592
665
  }
593
666
  const tz = c.timeZone ?? "-";
594
667
  const primary = c.primary ? "yes" : "no";
595
668
  const access = c.accessRole ?? "-";
596
669
  sections.push(
597
- `| ${displayName(c)} | ${tz} | ${primary} | ${access} |`
670
+ `| ${displayName(c)} | ${tz} | ${primary} | ${access} | ${total} | ${confirmed} | ${tentative} | ${cancelled} |`
598
671
  );
599
672
  }
600
673
  sections.push("");
@@ -756,8 +829,8 @@ var googleCalendarOauthConnector = new ConnectorPlugin({
756
829
  systemPrompt: {
757
830
  en: `### Tools
758
831
 
759
- - \`google-calendar-oauth_request\`: Send authenticated requests to the Google Calendar API v3. Use it to list calendars, get events, and manage calendar data. The {calendarId} placeholder in paths is automatically replaced. Authentication is configured automatically via OAuth.
760
- - \`google-calendar-oauth_listCalendars\`: List accessible Google Calendars. Use during setup to discover available calendars.
832
+ - \`connector_google-calendar-oauth_request\`: Send authenticated requests to the Google Calendar API v3. Use it to list calendars, get events, and manage calendar data. The {calendarId} placeholder in paths is automatically replaced. Authentication is configured automatically via OAuth.
833
+ - \`connector_google-calendar-oauth_listCalendars\`: List accessible Google Calendars. Use during setup to discover available calendars.
761
834
 
762
835
  ### Google Calendar API v3 Reference
763
836
 
@@ -821,8 +894,8 @@ console.log(event.summary, event.attendees);
821
894
  \`\`\``,
822
895
  ja: `### \u30C4\u30FC\u30EB
823
896
 
824
- - \`google-calendar-oauth_request\`: Google Calendar API v3\u3078\u8A8D\u8A3C\u6E08\u307F\u30EA\u30AF\u30A8\u30B9\u30C8\u3092\u9001\u4FE1\u3057\u307E\u3059\u3002\u30AB\u30EC\u30F3\u30C0\u30FC\u306E\u4E00\u89A7\u53D6\u5F97\u3001\u30A4\u30D9\u30F3\u30C8\u306E\u53D6\u5F97\u3001\u30AB\u30EC\u30F3\u30C0\u30FC\u30C7\u30FC\u30BF\u306E\u7BA1\u7406\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002\u30D1\u30B9\u5185\u306E{calendarId}\u30D7\u30EC\u30FC\u30B9\u30DB\u30EB\u30C0\u30FC\u306F\u81EA\u52D5\u7684\u306B\u7F6E\u63DB\u3055\u308C\u307E\u3059\u3002OAuth\u7D4C\u7531\u3067\u8A8D\u8A3C\u306F\u81EA\u52D5\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002
825
- - \`google-calendar-oauth_listCalendars\`: \u30A2\u30AF\u30BB\u30B9\u53EF\u80FD\u306AGoogle Calendar\u306E\u4E00\u89A7\u3092\u53D6\u5F97\u3057\u307E\u3059\u3002\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306B\u5229\u7528\u53EF\u80FD\u306A\u30AB\u30EC\u30F3\u30C0\u30FC\u3092\u78BA\u8A8D\u3059\u308B\u305F\u3081\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002
897
+ - \`connector_google-calendar-oauth_request\`: Google Calendar API v3\u3078\u8A8D\u8A3C\u6E08\u307F\u30EA\u30AF\u30A8\u30B9\u30C8\u3092\u9001\u4FE1\u3057\u307E\u3059\u3002\u30AB\u30EC\u30F3\u30C0\u30FC\u306E\u4E00\u89A7\u53D6\u5F97\u3001\u30A4\u30D9\u30F3\u30C8\u306E\u53D6\u5F97\u3001\u30AB\u30EC\u30F3\u30C0\u30FC\u30C7\u30FC\u30BF\u306E\u7BA1\u7406\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002\u30D1\u30B9\u5185\u306E{calendarId}\u30D7\u30EC\u30FC\u30B9\u30DB\u30EB\u30C0\u30FC\u306F\u81EA\u52D5\u7684\u306B\u7F6E\u63DB\u3055\u308C\u307E\u3059\u3002OAuth\u7D4C\u7531\u3067\u8A8D\u8A3C\u306F\u81EA\u52D5\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002
898
+ - \`connector_google-calendar-oauth_listCalendars\`: \u30A2\u30AF\u30BB\u30B9\u53EF\u80FD\u306AGoogle Calendar\u306E\u4E00\u89A7\u3092\u53D6\u5F97\u3057\u307E\u3059\u3002\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306B\u5229\u7528\u53EF\u80FD\u306A\u30AB\u30EC\u30F3\u30C0\u30FC\u3092\u78BA\u8A8D\u3059\u308B\u305F\u3081\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002
826
899
 
827
900
  ### Google Calendar API v3 \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
828
901
 
@@ -16,6 +16,7 @@ var init_parameter_definition = __esm({
16
16
  type;
17
17
  secret;
18
18
  required;
19
+ isDeprecated;
19
20
  constructor(config) {
20
21
  this.slug = config.slug;
21
22
  this.name = config.name;
@@ -24,6 +25,7 @@ var init_parameter_definition = __esm({
24
25
  this.type = config.type;
25
26
  this.secret = config.secret;
26
27
  this.required = config.required;
28
+ this.isDeprecated = config.isDeprecated ?? false;
27
29
  }
28
30
  /**
29
31
  * Get the parameter value from a ConnectorConnectionObject.
@@ -245,7 +247,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
245
247
  /**
246
248
  * Create tools for connections that belong to this connector.
247
249
  * Filters connections by connectorKey internally.
248
- * Returns tools keyed as `${connectorKey}_${toolName}`.
250
+ * Returns tools keyed as `connector_${connectorKey}_${toolName}`.
249
251
  */
250
252
  createTools(connections, config, opts) {
251
253
  const myConnections = connections.filter(
@@ -255,7 +257,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
255
257
  for (const t of Object.values(this.tools)) {
256
258
  const tool = t.createTool(myConnections, config);
257
259
  const originalToModelOutput = tool.toModelOutput;
258
- result[`${this.connectorKey}_${t.name}`] = {
260
+ result[`connector_${this.connectorKey}_${t.name}`] = {
259
261
  ...tool,
260
262
  toModelOutput: async (options) => {
261
263
  if (!originalToModelOutput) {
@@ -311,19 +313,34 @@ async function runSetupFlow(flow, params, ctx, config) {
311
313
  };
312
314
  let state = flow.initialState();
313
315
  let answerIdx = 0;
316
+ const pendingParameterUpdates = [];
314
317
  for (const step of flow.steps) {
315
318
  const ans = ctx.answers[answerIdx];
316
319
  if (ans && ans.questionSlug === step.slug) {
317
320
  state = step.applyAnswer(state, ans.answer);
321
+ if (step.toParameterUpdates) {
322
+ pendingParameterUpdates.push(...step.toParameterUpdates(state));
323
+ }
318
324
  answerIdx += 1;
319
325
  continue;
320
326
  }
327
+ const resolvedAllowFreeText = step.allowFreeText !== void 0 ? step.allowFreeText : true;
321
328
  if (step.type === "text") {
329
+ if (step.fetchOptions) {
330
+ const options2 = await step.fetchOptions(state, runtime);
331
+ if (options2.length === 0) {
332
+ continue;
333
+ }
334
+ }
322
335
  return {
323
336
  type: "nextQuestion",
324
337
  questionSlug: step.slug,
325
338
  question: step.question[ctx.language],
326
- questionType: "text"
339
+ questionType: "text",
340
+ allowFreeText: resolvedAllowFreeText,
341
+ ...pendingParameterUpdates.length > 0 && {
342
+ parameterUpdates: pendingParameterUpdates
343
+ }
327
344
  };
328
345
  }
329
346
  const options = step.fetchOptions ? await step.fetchOptions(state, runtime) : [];
@@ -335,11 +352,21 @@ async function runSetupFlow(flow, params, ctx, config) {
335
352
  questionSlug: step.slug,
336
353
  question: step.question[ctx.language],
337
354
  questionType: step.type,
338
- options
355
+ options,
356
+ allowFreeText: resolvedAllowFreeText,
357
+ ...pendingParameterUpdates.length > 0 && {
358
+ parameterUpdates: pendingParameterUpdates
359
+ }
339
360
  };
340
361
  }
341
362
  const dataInvestigationResult = await flow.finalize(state, runtime);
342
- return { type: "fulfilled", dataInvestigationResult };
363
+ return {
364
+ type: "fulfilled",
365
+ dataInvestigationResult,
366
+ ...pendingParameterUpdates.length > 0 && {
367
+ parameterUpdates: pendingParameterUpdates
368
+ }
369
+ };
343
370
  }
344
371
  async function resolveSetupSelection(params) {
345
372
  const { selected, allSentinel, fetchAll, limit } = params;
@@ -905,6 +932,41 @@ async function listCalendars(params, subject) {
905
932
  );
906
933
  return data.items ?? [];
907
934
  }
935
+ async function fetchEventActivity(params, subject, calendarId) {
936
+ try {
937
+ const now = /* @__PURE__ */ new Date();
938
+ const thirtyDaysAgo = new Date(now.getTime() - 30 * 24 * 60 * 60 * 1e3);
939
+ const qs = new URLSearchParams({
940
+ maxResults: "250",
941
+ timeMin: thirtyDaysAgo.toISOString(),
942
+ timeMax: now.toISOString(),
943
+ showDeleted: "true"
944
+ });
945
+ const url = `https://www.googleapis.com/calendar/v3/calendars/${encodeURIComponent(
946
+ calendarId
947
+ )}/events?${qs.toString()}`;
948
+ const data = await calendarApiFetch(
949
+ params,
950
+ subject,
951
+ url
952
+ );
953
+ const items = data.items ?? [];
954
+ const activity = {
955
+ total: items.length,
956
+ confirmed: 0,
957
+ tentative: 0,
958
+ cancelled: 0
959
+ };
960
+ for (const ev of items) {
961
+ if (ev.status === "confirmed") activity.confirmed += 1;
962
+ else if (ev.status === "tentative") activity.tentative += 1;
963
+ else if (ev.status === "cancelled") activity.cancelled += 1;
964
+ }
965
+ return activity;
966
+ } catch {
967
+ return null;
968
+ }
969
+ }
908
970
  function displayName(c) {
909
971
  return c.summaryOverride ?? c.summary ?? c.id;
910
972
  }
@@ -971,19 +1033,34 @@ var googleCalendarSetupFlow = {
971
1033
  );
972
1034
  return sections.join("\n");
973
1035
  }
974
- sections.push("| Calendar | Time Zone | Primary | Access |");
975
- sections.push("|----------|-----------|---------|--------|");
976
- for (const id of targetIds) {
1036
+ sections.push(
1037
+ "| Calendar | Time Zone | Primary | Access | Events (30d) | Confirmed | Tentative | Cancelled |"
1038
+ );
1039
+ sections.push(
1040
+ "|----------|-----------|---------|--------|--------------|-----------|-----------|-----------|"
1041
+ );
1042
+ const activities = await Promise.all(
1043
+ targetIds.map((id) => fetchEventActivity(rt.params, subj, id))
1044
+ );
1045
+ for (let i = 0; i < targetIds.length; i++) {
1046
+ const id = targetIds[i];
977
1047
  const c = byId.get(id);
1048
+ const activity = activities[i] ?? null;
1049
+ const total = activity ? String(activity.total) : "-";
1050
+ const confirmed = activity ? String(activity.confirmed) : "-";
1051
+ const tentative = activity ? String(activity.tentative) : "-";
1052
+ const cancelled = activity ? String(activity.cancelled) : "-";
978
1053
  if (!c) {
979
- sections.push(`| ${id} | - | - | - |`);
1054
+ sections.push(
1055
+ `| ${id} | - | - | - | ${total} | ${confirmed} | ${tentative} | ${cancelled} |`
1056
+ );
980
1057
  continue;
981
1058
  }
982
1059
  const tz = c.timeZone ?? "-";
983
1060
  const primary = c.primary ? "yes" : "no";
984
1061
  const access = c.accessRole ?? "-";
985
1062
  sections.push(
986
- `| ${displayName(c)} | ${tz} | ${primary} | ${access} |`
1063
+ `| ${displayName(c)} | ${tz} | ${primary} | ${access} | ${total} | ${confirmed} | ${tentative} | ${cancelled} |`
987
1064
  );
988
1065
  }
989
1066
  sections.push("");
@@ -1011,8 +1088,8 @@ var googleCalendarConnector = new ConnectorPlugin({
1011
1088
 
1012
1089
  This connector exposes two request tools that correspond to the two ways a Service Account can authenticate against the Google Calendar API:
1013
1090
 
1014
- - \`google-calendar-service-account_request_with_delegation\`: Call the Calendar API on behalf of the specified Workspace user via Domain-wide Delegation. Pass \`subject\` as the target user email. Requires Domain-wide Delegation to be authorized for the service account in the Workspace admin console.
1015
- - \`google-calendar-service-account_request\`: Call the Calendar API as the service account itself (no delegation). Only calendars explicitly shared with the service account email are accessible.
1091
+ - \`connector_google-calendar-service-account_request_with_delegation\`: Call the Calendar API on behalf of the specified Workspace user via Domain-wide Delegation. Pass \`subject\` as the target user email. Requires Domain-wide Delegation to be authorized for the service account in the Workspace admin console.
1092
+ - \`connector_google-calendar-service-account_request\`: Call the Calendar API as the service account itself (no delegation). Only calendars explicitly shared with the service account email are accessible.
1016
1093
 
1017
1094
  Both tools require a \`scopes\` argument.
1018
1095
 
@@ -1109,8 +1186,8 @@ export default async function handler(c: Context) {
1109
1186
 
1110
1187
  \u3053\u306E\u30B3\u30CD\u30AF\u30BF\u30FC\u306F\u3001Service Account \u304C Google Calendar API \u306B\u8A8D\u8A3C\u3059\u308B 2 \u3064\u306E\u65B9\u6CD5\u306B\u5BFE\u5FDC\u3059\u308B 2 \u3064\u306E request \u30C4\u30FC\u30EB\u3092\u516C\u958B\u3057\u307E\u3059:
1111
1188
 
1112
- - \`google-calendar-service-account_request_with_delegation\`: \u6307\u5B9A\u3055\u308C\u305F Workspace \u30E6\u30FC\u30B6\u30FC\u306B\u4EE3\u308F\u3063\u3066 Domain-wide Delegation \u7D4C\u7531\u3067 Calendar API \u3092\u547C\u3073\u51FA\u3057\u307E\u3059\u3002\u4EE3\u7406\u5BFE\u8C61\u306E\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3092 \`subject\` \u3068\u3057\u3066\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\u3002Workspace \u7BA1\u7406\u30B3\u30F3\u30BD\u30FC\u30EB\u3067 Service Account \u306E Domain-wide Delegation \u304C\u627F\u8A8D\u3055\u308C\u3066\u3044\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002
1113
- - \`google-calendar-service-account_request\`: Service Account \u81EA\u8EAB\u3068\u3057\u3066 Calendar API \u3092\u547C\u3073\u51FA\u3057\u307E\u3059 (Domain-wide Delegation \u3092\u4F7F\u308F\u306A\u3044\u7D4C\u8DEF)\u3002Service Account \u306E\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u306B\u660E\u793A\u7684\u306B\u5171\u6709\u3055\u308C\u3066\u3044\u308B\u30AB\u30EC\u30F3\u30C0\u30FC\u306E\u307F\u30A2\u30AF\u30BB\u30B9\u53EF\u80FD\u3067\u3059\u3002
1189
+ - \`connector_google-calendar-service-account_request_with_delegation\`: \u6307\u5B9A\u3055\u308C\u305F Workspace \u30E6\u30FC\u30B6\u30FC\u306B\u4EE3\u308F\u3063\u3066 Domain-wide Delegation \u7D4C\u7531\u3067 Calendar API \u3092\u547C\u3073\u51FA\u3057\u307E\u3059\u3002\u4EE3\u7406\u5BFE\u8C61\u306E\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3092 \`subject\` \u3068\u3057\u3066\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\u3002Workspace \u7BA1\u7406\u30B3\u30F3\u30BD\u30FC\u30EB\u3067 Service Account \u306E Domain-wide Delegation \u304C\u627F\u8A8D\u3055\u308C\u3066\u3044\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002
1190
+ - \`connector_google-calendar-service-account_request\`: Service Account \u81EA\u8EAB\u3068\u3057\u3066 Calendar API \u3092\u547C\u3073\u51FA\u3057\u307E\u3059 (Domain-wide Delegation \u3092\u4F7F\u308F\u306A\u3044\u7D4C\u8DEF)\u3002Service Account \u306E\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u306B\u660E\u793A\u7684\u306B\u5171\u6709\u3055\u308C\u3066\u3044\u308B\u30AB\u30EC\u30F3\u30C0\u30FC\u306E\u307F\u30A2\u30AF\u30BB\u30B9\u53EF\u80FD\u3067\u3059\u3002
1114
1191
 
1115
1192
  \u4E21\u30C4\u30FC\u30EB\u3068\u3082 \`scopes\` \u5F15\u6570\u304C\u5FC5\u9808\u3067\u3059\u3002
1116
1193
 
@@ -160,7 +160,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
160
160
  /**
161
161
  * Create tools for connections that belong to this connector.
162
162
  * Filters connections by connectorKey internally.
163
- * Returns tools keyed as `${connectorKey}_${toolName}`.
163
+ * Returns tools keyed as `connector_${connectorKey}_${toolName}`.
164
164
  */
165
165
  createTools(connections, config, opts) {
166
166
  const myConnections = connections.filter(
@@ -170,7 +170,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
170
170
  for (const t of Object.values(this.tools)) {
171
171
  const tool = t.createTool(myConnections, config);
172
172
  const originalToModelOutput = tool.toModelOutput;
173
- result[`${this.connectorKey}_${t.name}`] = {
173
+ result[`connector_${this.connectorKey}_${t.name}`] = {
174
174
  ...tool,
175
175
  toModelOutput: async (options) => {
176
176
  if (!originalToModelOutput) {
@@ -226,19 +226,34 @@ async function runSetupFlow(flow, params, ctx, config) {
226
226
  };
227
227
  let state = flow.initialState();
228
228
  let answerIdx = 0;
229
+ const pendingParameterUpdates = [];
229
230
  for (const step of flow.steps) {
230
231
  const ans = ctx.answers[answerIdx];
231
232
  if (ans && ans.questionSlug === step.slug) {
232
233
  state = step.applyAnswer(state, ans.answer);
234
+ if (step.toParameterUpdates) {
235
+ pendingParameterUpdates.push(...step.toParameterUpdates(state));
236
+ }
233
237
  answerIdx += 1;
234
238
  continue;
235
239
  }
240
+ const resolvedAllowFreeText = step.allowFreeText !== void 0 ? step.allowFreeText : true;
236
241
  if (step.type === "text") {
242
+ if (step.fetchOptions) {
243
+ const options2 = await step.fetchOptions(state, runtime);
244
+ if (options2.length === 0) {
245
+ continue;
246
+ }
247
+ }
237
248
  return {
238
249
  type: "nextQuestion",
239
250
  questionSlug: step.slug,
240
251
  question: step.question[ctx.language],
241
- questionType: "text"
252
+ questionType: "text",
253
+ allowFreeText: resolvedAllowFreeText,
254
+ ...pendingParameterUpdates.length > 0 && {
255
+ parameterUpdates: pendingParameterUpdates
256
+ }
242
257
  };
243
258
  }
244
259
  const options = step.fetchOptions ? await step.fetchOptions(state, runtime) : [];
@@ -250,11 +265,21 @@ async function runSetupFlow(flow, params, ctx, config) {
250
265
  questionSlug: step.slug,
251
266
  question: step.question[ctx.language],
252
267
  questionType: step.type,
253
- options
268
+ options,
269
+ allowFreeText: resolvedAllowFreeText,
270
+ ...pendingParameterUpdates.length > 0 && {
271
+ parameterUpdates: pendingParameterUpdates
272
+ }
254
273
  };
255
274
  }
256
275
  const dataInvestigationResult = await flow.finalize(state, runtime);
257
- return { type: "fulfilled", dataInvestigationResult };
276
+ return {
277
+ type: "fulfilled",
278
+ dataInvestigationResult,
279
+ ...pendingParameterUpdates.length > 0 && {
280
+ parameterUpdates: pendingParameterUpdates
281
+ }
282
+ };
258
283
  }
259
284
  async function resolveSetupSelection(params) {
260
285
  const { selected, allSentinel, fetchAll, limit } = params;
@@ -285,10 +310,10 @@ function normalizeRequestPath(path2, basePathSegment) {
285
310
  // ../connectors/src/connectors/google-docs/setup.ts
286
311
  var googleDocsOnboarding = new ConnectorOnboarding({
287
312
  dataOverviewInstructions: {
288
- en: `1. Create a new document with google-docs-oauth_request (POST with body { title: "..." }) or use an existing document ID.
289
- 2. Call google-docs-oauth_request with GET /{documentId} to fetch the document's content and metadata.`,
290
- ja: `1. google-docs-oauth_request \u3092 POST\uFF08Body: { title: "..." }\uFF09\u3067\u547C\u3073\u51FA\u3057\u3066\u65B0\u3057\u3044\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u4F5C\u6210\u3059\u308B\u304B\u3001\u65E2\u5B58\u306E\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8ID\u3092\u5229\u7528\u3057\u307E\u3059\u3002
291
- 2. google-docs-oauth_request \u3067 GET /{documentId} \u3092\u547C\u3073\u51FA\u3057\u3001\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u306E\u5185\u5BB9\u3068\u30E1\u30BF\u30C7\u30FC\u30BF\u3092\u53D6\u5F97\u3057\u307E\u3059\u3002`
313
+ en: `1. Create a new document with connector_google-docs-oauth_request (POST with body { title: "..." }) or use an existing document ID.
314
+ 2. Call connector_google-docs-oauth_request with GET /{documentId} to fetch the document's content and metadata.`,
315
+ ja: `1. connector_google-docs-oauth_request \u3092 POST\uFF08Body: { title: "..." }\uFF09\u3067\u547C\u3073\u51FA\u3057\u3066\u65B0\u3057\u3044\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u4F5C\u6210\u3059\u308B\u304B\u3001\u65E2\u5B58\u306E\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8ID\u3092\u5229\u7528\u3057\u307E\u3059\u3002
316
+ 2. connector_google-docs-oauth_request \u3067 GET /{documentId} \u3092\u547C\u3073\u51FA\u3057\u3001\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u306E\u5185\u5BB9\u3068\u30E1\u30BF\u30C7\u30FC\u30BF\u3092\u53D6\u5F97\u3057\u307E\u3059\u3002`
292
317
  }
293
318
  });
294
319
 
@@ -541,9 +566,9 @@ var googleDocsConnector = new ConnectorPlugin({
541
566
  systemPrompt: {
542
567
  en: `### Tools (setup-time only)
543
568
 
544
- - \`google-docs-oauth_request\`: Call the Google Docs API directly during setup / data overview. Supports read and write operations. Use it to get document content, create new documents, and modify document content via batchUpdate. Authentication is configured automatically via OAuth.
569
+ - \`connector_google-docs-oauth_request\`: Call the Google Docs API directly during setup / data overview. Supports read and write operations. Use it to get document content, create new documents, and modify document content via batchUpdate. Authentication is configured automatically via OAuth.
545
570
 
546
- > **Important**: The \`google-docs-oauth_request\` tool is only available at setup time. Inside server-logic handlers, use the SDK (\`connection(id).createDocument\`, etc.) \u2014 the SDK's fetch is already wired through the OAuth proxy. **Do NOT** hand-roll HTTP calls to \`_sqcore/connections/*/request\` from a handler.
571
+ > **Important**: The \`connector_google-docs-oauth_request\` tool is only available at setup time. Inside server-logic handlers, use the SDK (\`connection(id).createDocument\`, etc.) \u2014 the SDK's fetch is already wired through the OAuth proxy. **Do NOT** hand-roll HTTP calls to \`_sqcore/connections/*/request\` from a handler.
547
572
 
548
573
  ### Google Docs API Reference
549
574
 
@@ -610,9 +635,9 @@ await docs.batchUpdate(documentId, [
610
635
  \`\`\``,
611
636
  ja: `### \u30C4\u30FC\u30EB\uFF08\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306E\u307F\uFF09
612
637
 
613
- - \`google-docs-oauth_request\`: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3084\u30C7\u30FC\u30BF\u6982\u8981\u628A\u63E1\u6642\u306B Google Docs API \u3092\u76F4\u63A5\u53E9\u304F\u30C4\u30FC\u30EB\u3067\u3059\u3002\u8AAD\u307F\u53D6\u308A\u3068\u66F8\u304D\u8FBC\u307F\u306E\u4E21\u65B9\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u307E\u3059\u3002\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u5185\u5BB9\u306E\u53D6\u5F97\u3001\u65B0\u3057\u3044\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u306E\u4F5C\u6210\u3001batchUpdate \u306B\u3088\u308B\u5185\u5BB9\u5909\u66F4\u306A\u3069\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002OAuth \u7D4C\u7531\u3067\u8A8D\u8A3C\u306F\u81EA\u52D5\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002
638
+ - \`connector_google-docs-oauth_request\`: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3084\u30C7\u30FC\u30BF\u6982\u8981\u628A\u63E1\u6642\u306B Google Docs API \u3092\u76F4\u63A5\u53E9\u304F\u30C4\u30FC\u30EB\u3067\u3059\u3002\u8AAD\u307F\u53D6\u308A\u3068\u66F8\u304D\u8FBC\u307F\u306E\u4E21\u65B9\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u307E\u3059\u3002\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u5185\u5BB9\u306E\u53D6\u5F97\u3001\u65B0\u3057\u3044\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u306E\u4F5C\u6210\u3001batchUpdate \u306B\u3088\u308B\u5185\u5BB9\u5909\u66F4\u306A\u3069\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002OAuth \u7D4C\u7531\u3067\u8A8D\u8A3C\u306F\u81EA\u52D5\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002
614
639
 
615
- > **\u91CD\u8981**: \`google-docs-oauth_request\` \u306F\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306E\u307F\u5229\u7528\u53EF\u80FD\u3067\u3059\u3002\u30B5\u30FC\u30D0\u30FC\u30ED\u30B8\u30C3\u30AF\u306E\u30CF\u30F3\u30C9\u30E9\u5185\u3067\u306F\u5FC5\u305A SDK\uFF08\`connection(id).createDocument\` \u306A\u3069\uFF09\u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002SDK \u306E fetch \u306F OAuth \u30D7\u30ED\u30AD\u30B7\u7D4C\u7531\u3067\u65E2\u306B\u914D\u7DDA\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u30CF\u30F3\u30C9\u30E9\u304B\u3089 \`_sqcore/connections/*/request\` \u3092\u624B\u66F8\u304D\u3067\u547C\u3073\u51FA\u3055\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002
640
+ > **\u91CD\u8981**: \`connector_google-docs-oauth_request\` \u306F\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306E\u307F\u5229\u7528\u53EF\u80FD\u3067\u3059\u3002\u30B5\u30FC\u30D0\u30FC\u30ED\u30B8\u30C3\u30AF\u306E\u30CF\u30F3\u30C9\u30E9\u5185\u3067\u306F\u5FC5\u305A SDK\uFF08\`connection(id).createDocument\` \u306A\u3069\uFF09\u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002SDK \u306E fetch \u306F OAuth \u30D7\u30ED\u30AD\u30B7\u7D4C\u7531\u3067\u65E2\u306B\u914D\u7DDA\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u30CF\u30F3\u30C9\u30E9\u304B\u3089 \`_sqcore/connections/*/request\` \u3092\u624B\u66F8\u304D\u3067\u547C\u3073\u51FA\u3055\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002
616
641
 
617
642
  ### Google Docs API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
618
643