@squadbase/vite-server 0.1.4 → 0.1.5-dev.1

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 (48) hide show
  1. package/dist/cli/index.js +819 -258
  2. package/dist/connectors/airtable-oauth.js +0 -8
  3. package/dist/connectors/amplitude.js +1 -1
  4. package/dist/connectors/asana.js +1 -1
  5. package/dist/connectors/attio.js +1 -1
  6. package/dist/connectors/backlog-api-key.js +1 -1
  7. package/dist/connectors/customerio.js +1 -1
  8. package/dist/connectors/gamma.js +1 -1
  9. package/dist/connectors/gmail-oauth.js +0 -8
  10. package/dist/connectors/gmail.js +1 -9
  11. package/dist/connectors/google-ads.js +0 -8
  12. package/dist/connectors/google-analytics-oauth.js +0 -8
  13. package/dist/connectors/google-calendar-oauth.js +0 -8
  14. package/dist/connectors/google-calendar.js +0 -10
  15. package/dist/connectors/google-docs.js +3 -1
  16. package/dist/connectors/hubspot-oauth.js +0 -6
  17. package/dist/connectors/hubspot.js +1 -1
  18. package/dist/connectors/influxdb.d.ts +5 -0
  19. package/dist/connectors/influxdb.js +767 -0
  20. package/dist/connectors/intercom-oauth.js +0 -6
  21. package/dist/connectors/intercom.js +1 -1
  22. package/dist/connectors/jira-api-key.js +1 -1
  23. package/dist/connectors/kintone-api-token.js +1 -1
  24. package/dist/connectors/linear.d.ts +5 -0
  25. package/dist/connectors/linear.js +688 -0
  26. package/dist/connectors/linkedin-ads.js +0 -8
  27. package/dist/connectors/mailchimp.js +1 -1
  28. package/dist/connectors/meta-ads-oauth.d.ts +5 -0
  29. package/dist/connectors/meta-ads-oauth.js +795 -0
  30. package/dist/connectors/meta-ads.d.ts +5 -0
  31. package/dist/connectors/meta-ads.js +780 -0
  32. package/dist/connectors/mixpanel.js +1 -1
  33. package/dist/connectors/notion-oauth.js +1 -7
  34. package/dist/connectors/notion.js +1 -1
  35. package/dist/connectors/salesforce.d.ts +5 -0
  36. package/dist/connectors/salesforce.js +862 -0
  37. package/dist/connectors/sentry.js +1 -1
  38. package/dist/connectors/shopify-oauth.js +0 -6
  39. package/dist/connectors/stripe-api-key.js +1 -5
  40. package/dist/connectors/stripe-oauth.js +0 -6
  41. package/dist/connectors/tiktok-ads.d.ts +5 -0
  42. package/dist/connectors/tiktok-ads.js +840 -0
  43. package/dist/connectors/zendesk-oauth.js +0 -6
  44. package/dist/connectors/zendesk.js +1 -1
  45. package/dist/index.js +819 -258
  46. package/dist/main.js +819 -258
  47. package/dist/vite-plugin.js +819 -258
  48. package/package.json +25 -1
package/dist/cli/index.js CHANGED
@@ -18864,14 +18864,14 @@ var init_NormalizedSchema = __esm({
18864
18864
  throw new Error("@smithy/core/schema - cannot iterate non-struct schema.");
18865
18865
  }
18866
18866
  const struct = this.getSchema();
18867
- const z78 = struct[4].length;
18867
+ const z80 = struct[4].length;
18868
18868
  let it = struct[anno.it];
18869
- if (it && z78 === it.length) {
18869
+ if (it && z80 === it.length) {
18870
18870
  yield* it;
18871
18871
  return;
18872
18872
  }
18873
- it = Array(z78);
18874
- for (let i6 = 0; i6 < z78; ++i6) {
18873
+ it = Array(z80);
18874
+ for (let i6 = 0; i6 < z80; ++i6) {
18875
18875
  const k6 = struct[4][i6];
18876
18876
  const v7 = member([struct[5][i6], 0], k6);
18877
18877
  yield it[i6] = [k6, v7];
@@ -19547,12 +19547,12 @@ var init_split_header = __esm({
19547
19547
  "../../node_modules/@smithy/core/dist-es/submodules/serde/split-header.js"() {
19548
19548
  "use strict";
19549
19549
  splitHeader = (value) => {
19550
- const z78 = value.length;
19550
+ const z80 = value.length;
19551
19551
  const values = [];
19552
19552
  let withinQuotes = false;
19553
19553
  let prevChar = void 0;
19554
19554
  let anchor = 0;
19555
- for (let i6 = 0; i6 < z78; ++i6) {
19555
+ for (let i6 = 0; i6 < z80; ++i6) {
19556
19556
  const char = value[i6];
19557
19557
  switch (char) {
19558
19558
  case `"`:
@@ -19573,12 +19573,12 @@ var init_split_header = __esm({
19573
19573
  values.push(value.slice(anchor));
19574
19574
  return values.map((v7) => {
19575
19575
  v7 = v7.trim();
19576
- const z79 = v7.length;
19577
- if (z79 < 2) {
19576
+ const z81 = v7.length;
19577
+ if (z81 < 2) {
19578
19578
  return v7;
19579
19579
  }
19580
- if (v7[0] === `"` && v7[z79 - 1] === `"`) {
19581
- v7 = v7.slice(1, z79 - 1);
19580
+ if (v7[0] === `"` && v7[z81 - 1] === `"`) {
19581
+ v7 = v7.slice(1, z81 - 1);
19582
19582
  }
19583
19583
  return v7.replace(/\\"/g, '"');
19584
19584
  });
@@ -20976,11 +20976,11 @@ var init_EndpointCache = __esm({
20976
20976
  }
20977
20977
  hash(endpointParams) {
20978
20978
  let buffer = "";
20979
- const { parameters: parameters62 } = this;
20980
- if (parameters62.length === 0) {
20979
+ const { parameters: parameters64 } = this;
20980
+ if (parameters64.length === 0) {
20981
20981
  return false;
20982
20982
  }
20983
- for (const param of parameters62) {
20983
+ for (const param of parameters64) {
20984
20984
  const val = String(endpointParams[param] ?? "");
20985
20985
  if (val.includes("|;")) {
20986
20986
  return false;
@@ -21697,15 +21697,15 @@ var init_resolveEndpoint = __esm({
21697
21697
  init_utils();
21698
21698
  resolveEndpoint = (ruleSetObject, options) => {
21699
21699
  const { endpointParams, logger: logger2 } = options;
21700
- const { parameters: parameters62, rules } = ruleSetObject;
21700
+ const { parameters: parameters64, rules } = ruleSetObject;
21701
21701
  options.logger?.debug?.(`${debugId} Initial EndpointParams: ${toDebugString(endpointParams)}`);
21702
- const paramsWithDefault = Object.entries(parameters62).filter(([, v7]) => v7.default != null).map(([k6, v7]) => [k6, v7.default]);
21702
+ const paramsWithDefault = Object.entries(parameters64).filter(([, v7]) => v7.default != null).map(([k6, v7]) => [k6, v7.default]);
21703
21703
  if (paramsWithDefault.length > 0) {
21704
21704
  for (const [paramKey, paramDefaultValue] of paramsWithDefault) {
21705
21705
  endpointParams[paramKey] = endpointParams[paramKey] ?? paramDefaultValue;
21706
21706
  }
21707
21707
  }
21708
- const requiredParams = Object.entries(parameters62).filter(([, v7]) => v7.required).map(([k6]) => k6);
21708
+ const requiredParams = Object.entries(parameters64).filter(([, v7]) => v7.required).map(([k6]) => k6);
21709
21709
  for (const requiredParam of requiredParams) {
21710
21710
  if (endpointParams[requiredParam] == null) {
21711
21711
  throw new EndpointError(`Missing required parameter: '${requiredParam}'`);
@@ -27315,8 +27315,8 @@ var init_ProtocolLib = __esm({
27315
27315
  constructor(queryCompat = false) {
27316
27316
  this.queryCompat = queryCompat;
27317
27317
  }
27318
- resolveRestContentType(defaultContentType, inputSchema75) {
27319
- const members = inputSchema75.getMemberSchemas();
27318
+ resolveRestContentType(defaultContentType, inputSchema77) {
27319
+ const members = inputSchema77.getMemberSchemas();
27320
27320
  const httpPayloadMember = Object.values(members).find((m6) => {
27321
27321
  return !!m6.getMergedTraits().httpPayload;
27322
27322
  });
@@ -27331,7 +27331,7 @@ var init_ProtocolLib = __esm({
27331
27331
  } else {
27332
27332
  return defaultContentType;
27333
27333
  }
27334
- } else if (!inputSchema75.isUnitSchema()) {
27334
+ } else if (!inputSchema77.isUnitSchema()) {
27335
27335
  const hasBody = Object.values(members).find((m6) => {
27336
27336
  const { httpQuery, httpQueryParams, httpHeader, httpLabel, httpPrefixHeaders } = m6.getMergedTraits();
27337
27337
  const noPrefixHeaders = httpPrefixHeaders === void 0;
@@ -28174,9 +28174,9 @@ var init_AwsRestJsonProtocol = __esm({
28174
28174
  }
28175
28175
  async serializeRequest(operationSchema, input, context) {
28176
28176
  const request2 = await super.serializeRequest(operationSchema, input, context);
28177
- const inputSchema75 = NormalizedSchema.of(operationSchema.input);
28177
+ const inputSchema77 = NormalizedSchema.of(operationSchema.input);
28178
28178
  if (!request2.headers["content-type"]) {
28179
- const contentType = this.mixin.resolveRestContentType(this.getDefaultContentType(), inputSchema75);
28179
+ const contentType = this.mixin.resolveRestContentType(this.getDefaultContentType(), inputSchema77);
28180
28180
  if (contentType) {
28181
28181
  request2.headers["content-type"] = contentType;
28182
28182
  }
@@ -28188,8 +28188,8 @@ var init_AwsRestJsonProtocol = __esm({
28188
28188
  }
28189
28189
  async deserializeResponse(operationSchema, context, response) {
28190
28190
  const output = await super.deserializeResponse(operationSchema, context, response);
28191
- const outputSchema75 = NormalizedSchema.of(operationSchema.output);
28192
- for (const [name, member2] of outputSchema75.structIterator()) {
28191
+ const outputSchema77 = NormalizedSchema.of(operationSchema.output);
28192
+ for (const [name, member2] of outputSchema77.structIterator()) {
28193
28193
  if (member2.getMemberTraits().httpPayload && !(name in output)) {
28194
28194
  output[name] = null;
28195
28195
  }
@@ -32053,22 +32053,22 @@ var init_loadCognitoIdentity = __esm({
32053
32053
  });
32054
32054
 
32055
32055
  // ../../node_modules/@aws-sdk/credential-provider-cognito-identity/dist-es/fromCognitoIdentity.js
32056
- function fromCognitoIdentity(parameters62) {
32056
+ function fromCognitoIdentity(parameters64) {
32057
32057
  return async (awsIdentityProperties) => {
32058
- parameters62.logger?.debug("@aws-sdk/credential-provider-cognito-identity - fromCognitoIdentity");
32058
+ parameters64.logger?.debug("@aws-sdk/credential-provider-cognito-identity - fromCognitoIdentity");
32059
32059
  const { GetCredentialsForIdentityCommand: GetCredentialsForIdentityCommand2, CognitoIdentityClient: CognitoIdentityClient2 } = await Promise.resolve().then(() => (init_loadCognitoIdentity(), loadCognitoIdentity_exports));
32060
- const fromConfigs = (property) => parameters62.clientConfig?.[property] ?? parameters62.parentClientConfig?.[property] ?? awsIdentityProperties?.callerClientConfig?.[property];
32061
- const { Credentials: { AccessKeyId = throwOnMissingAccessKeyId(parameters62.logger), Expiration, SecretKey = throwOnMissingSecretKey(parameters62.logger), SessionToken } = throwOnMissingCredentials(parameters62.logger) } = await (parameters62.client ?? new CognitoIdentityClient2(Object.assign({}, parameters62.clientConfig ?? {}, {
32060
+ const fromConfigs = (property) => parameters64.clientConfig?.[property] ?? parameters64.parentClientConfig?.[property] ?? awsIdentityProperties?.callerClientConfig?.[property];
32061
+ const { Credentials: { AccessKeyId = throwOnMissingAccessKeyId(parameters64.logger), Expiration, SecretKey = throwOnMissingSecretKey(parameters64.logger), SessionToken } = throwOnMissingCredentials(parameters64.logger) } = await (parameters64.client ?? new CognitoIdentityClient2(Object.assign({}, parameters64.clientConfig ?? {}, {
32062
32062
  region: fromConfigs("region"),
32063
32063
  profile: fromConfigs("profile"),
32064
32064
  userAgentAppId: fromConfigs("userAgentAppId")
32065
32065
  }))).send(new GetCredentialsForIdentityCommand2({
32066
- CustomRoleArn: parameters62.customRoleArn,
32067
- IdentityId: parameters62.identityId,
32068
- Logins: parameters62.logins ? await resolveLogins(parameters62.logins) : void 0
32066
+ CustomRoleArn: parameters64.customRoleArn,
32067
+ IdentityId: parameters64.identityId,
32068
+ Logins: parameters64.logins ? await resolveLogins(parameters64.logins) : void 0
32069
32069
  }));
32070
32070
  return {
32071
- identityId: parameters62.identityId,
32071
+ identityId: parameters64.identityId,
32072
32072
  accessKeyId: AccessKeyId,
32073
32073
  secretAccessKey: SecretKey,
32074
32074
  sessionToken: SessionToken,
@@ -44629,11 +44629,11 @@ var require_bignumber = __commonJS({
44629
44629
  return n6 > 0 || n6 === i6 ? i6 : i6 - 1;
44630
44630
  }
44631
44631
  function coeffToString(a6) {
44632
- var s6, z78, i6 = 1, j6 = a6.length, r6 = a6[0] + "";
44632
+ var s6, z80, i6 = 1, j6 = a6.length, r6 = a6[0] + "";
44633
44633
  for (; i6 < j6; ) {
44634
44634
  s6 = a6[i6++] + "";
44635
- z78 = LOG_BASE - s6.length;
44636
- for (; z78--; s6 = "0" + s6) ;
44635
+ z80 = LOG_BASE - s6.length;
44636
+ for (; z80--; s6 = "0" + s6) ;
44637
44637
  r6 += s6;
44638
44638
  }
44639
44639
  for (j6 = r6.length; r6.charCodeAt(--j6) === 48; ) ;
@@ -44666,15 +44666,15 @@ var require_bignumber = __commonJS({
44666
44666
  function toExponential(str, e6) {
44667
44667
  return (str.length > 1 ? str.charAt(0) + "." + str.slice(1) : str) + (e6 < 0 ? "e" : "e+") + e6;
44668
44668
  }
44669
- function toFixedPoint(str, e6, z78) {
44669
+ function toFixedPoint(str, e6, z80) {
44670
44670
  var len, zs;
44671
44671
  if (e6 < 0) {
44672
- for (zs = z78 + "."; ++e6; zs += z78) ;
44672
+ for (zs = z80 + "."; ++e6; zs += z80) ;
44673
44673
  str = zs + str;
44674
44674
  } else {
44675
44675
  len = str.length;
44676
44676
  if (++e6 > len) {
44677
- for (zs = z78, e6 -= len; --e6; zs += z78) ;
44677
+ for (zs = z80, e6 -= len; --e6; zs += z80) ;
44678
44678
  str += zs;
44679
44679
  } else if (e6 < len) {
44680
44680
  str = str.slice(0, e6) + "." + str.slice(e6);
@@ -66503,11 +66503,7 @@ var snowflakeOnboarding = new ConnectorOnboarding({
66503
66503
  8. \u7D50\u679C\u306B\u5FDC\u3058\u3066\u5206\u5C90:
66504
66504
  - **\u30C6\u30FC\u30D6\u30EB\u304C2\u3064\u4EE5\u4E0A**: \`askUserQuestion\`\uFF08multiSelect: true\uFF09\u3067\u30E6\u30FC\u30B6\u30FC\u306B\u63D0\u793A\u3057\u3001\u4F7F\u7528\u3059\u308B\u30C6\u30FC\u30D6\u30EB\u3092\u9078\u629E\u3055\u305B\u308B\u3002description \u306B\u306F\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u540D.\u30B9\u30AD\u30FC\u30DE\u540D\u3092\u8A18\u8F09\u3059\u308B
66505
66505
  - **\u30C6\u30FC\u30D6\u30EB\u304C1\u3064\u3060\u3051**: askUserQuestion \u306F\u4F7F\u308F\u305A\u81EA\u52D5\u63A1\u7528
66506
- 9. \`updateConnectionContext\` \u3067\u4EE5\u4E0B\u3092\u4FDD\u5B58\u3059\u308B:
66507
- - \`database\`: \u9078\u629E\u3055\u308C\u305F\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u540D\uFF08\u8907\u6570\u306E\u5834\u5408\u306F\u30AB\u30F3\u30DE\u533A\u5207\u308A\uFF09
66508
- - \`schema\`: \u9078\u629E\u3055\u308C\u305F\u30B9\u30AD\u30FC\u30DE\u540D\uFF08\u8907\u6570\u306E\u5834\u5408\u306F\u30AB\u30F3\u30DE\u533A\u5207\u308A\uFF09
66509
- - \`tables\`: \u9078\u629E\u3055\u308C\u305F\u30C6\u30FC\u30D6\u30EB\u540D\uFF08\u5B8C\u5168\u4FEE\u98FE\u540D database.schema.table\u3001\u8907\u6570\u306E\u5834\u5408\u306F\u30AB\u30F3\u30DE\u533A\u5207\u308A\u3002\u300C\u5168\u30C6\u30FC\u30D6\u30EB\u300D\u306E\u5834\u5408\u306F "{database}.{schema}.*"\uFF09
66510
- - \`note\`: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u5185\u5BB9\u306E\u7C21\u5358\u306A\u8AAC\u660E
66506
+ 9. Phase 5 \u306E \`finalizeSetup\` \u306B\u6E21\u3059 \`projectKnowledge\` \u3067\u306F\u3001\u30B9\u30C6\u30C3\u30D72\u3067\u9078\u629E\u3057\u305F\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u3092 \`#### \u30B9\u30B3\u30FC\u30D7\` \u7BC0\u306B \`- database: <\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u540D>\` \u3068\u3057\u3066\u3001\u30B9\u30C6\u30C3\u30D75\u3067\u9078\u629E\u3057\u305F\u30B9\u30AD\u30FC\u30DE\u3092 \`- schema: <\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u540D>.<\u30B9\u30AD\u30FC\u30DE\u540D>\` \u3068\u3057\u3066\u8A18\u9332\u3059\u308B\u3053\u3068\uFF08\u8907\u6570\u9078\u629E\u3057\u305F\u5834\u5408\u306F\u8907\u6570\u884C\u3067\u5217\u6319\u3059\u308B\uFF09\u3002\u300C\u5168\u30C6\u30FC\u30D6\u30EB\u300D\u304C\u9078\u3070\u308C\u305F\u30B9\u30AD\u30FC\u30DE\u306B\u3064\u3044\u3066\u306F \`#### \u30C6\u30FC\u30D6\u30EB\` \u3067\u500B\u5225\u5217\u6319\u3067\u304D\u306A\u3044\u305F\u3081\u3001\u30B9\u30B3\u30FC\u30D7\u7BC0\u306B \`- allTables: <\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u540D>.<\u30B9\u30AD\u30FC\u30DE\u540D>.*\` \u306E\u5F62\u3067\u30EF\u30A4\u30EB\u30C9\u30AB\u30FC\u30C9\u7BC4\u56F2\u3092\u660E\u793A\u7684\u306B\u8A18\u9332\u3059\u308B\u3002\u500B\u5225\u306B\u9078\u629E\u3055\u308C\u305F\u30C6\u30FC\u30D6\u30EB\u306F \`#### \u30C6\u30FC\u30D6\u30EB\` \u7BC0\u3067\u5217\u6319\u3055\u308C\u308B\u305F\u3081\u3001\u30B9\u30B3\u30FC\u30D7\u7BC0\u306B\u306F\u66F8\u304B\u306A\u3044\u3002
66511
66507
 
66512
66508
  #### \u5236\u7D04
66513
66509
  - askUserQuestion \u306E options \u306B\u306F\u6700\u4F4E2\u4EF6\u5FC5\u8981\u30021\u4EF6\u3057\u304B\u306A\u3044\u5834\u5408\u306F askUserQuestion \u3092\u547C\u3070\u305A\u6B21\u306E\u30B9\u30C6\u30C3\u30D7\u306B\u9032\u3080\u3053\u3068
@@ -66530,11 +66526,7 @@ var snowflakeOnboarding = new ConnectorOnboarding({
66530
66526
  8. Branch based on results:
66531
66527
  - **2 or more tables**: Present them to the user via \`askUserQuestion\` (multiSelect: true) and let them select which tables to use. Include database.schema in the description
66532
66528
  - **Exactly 1 table**: Do NOT call askUserQuestion. Auto-select it
66533
- 9. Call \`updateConnectionContext\` to save:
66534
- - \`database\`: Selected database name(s) (comma-separated if multiple)
66535
- - \`schema\`: Selected schema name(s) (comma-separated if multiple)
66536
- - \`tables\`: Selected table names (fully qualified database.schema.table, comma-separated if multiple. Use "{database}.{schema}.*" for "all tables" schemas)
66537
- - \`note\`: Brief description of the setup
66529
+ 9. When passing \`projectKnowledge\` to \`finalizeSetup\` in Phase 5, record each database selected in step 2 under the \`#### \u30B9\u30B3\u30FC\u30D7\` subsection as \`- database: <database_name>\` and each schema selected in step 5 as \`- schema: <database_name>.<schema_name>\` (one bullet per selection if multiple were chosen). For schemas where "all tables" was chosen, the wildcard range cannot be expressed by the per-table enumeration under \`#### \u30C6\u30FC\u30D6\u30EB\`, so record it in the scope section as \`- allTables: <database_name>.<schema_name>.*\`. Individually selected tables are listed under \`#### \u30C6\u30FC\u30D6\u30EB\`, so do NOT repeat them in the scope section.
66538
66530
 
66539
66531
  #### Constraints
66540
66532
  - askUserQuestion options requires at least 2 items. If there is only 1 item, do NOT call askUserQuestion \u2014 proceed to the next step directly
@@ -67668,10 +67660,7 @@ var bigqueryOnboarding = new ConnectorOnboarding({
67668
67660
  7. \u7D50\u679C\u306B\u5FDC\u3058\u3066\u5206\u5C90:
67669
67661
  - **\u30C6\u30FC\u30D6\u30EB\u304C2\u3064\u4EE5\u4E0A**: \`askUserQuestion\`\uFF08multiSelect: true\uFF09\u3067\u30E6\u30FC\u30B6\u30FC\u306B\u63D0\u793A\u3057\u3001\u4F7F\u7528\u3059\u308B\u30C6\u30FC\u30D6\u30EB\u3092\u9078\u629E\u3055\u305B\u308B\u3002description \u306B\u306F\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u540D\u3092\u8A18\u8F09\u3059\u308B
67670
67662
  - **\u30C6\u30FC\u30D6\u30EB\u304C1\u3064\u3060\u3051**: askUserQuestion \u306F\u4F7F\u308F\u305A\u81EA\u52D5\u63A1\u7528
67671
- 8. \`updateConnectionContext\` \u3092\u547C\u3073\u51FA\u3059:
67672
- - \`dataset\`: \u9078\u629E\u3055\u308C\u305F\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u540D\uFF08\u8907\u6570\u306E\u5834\u5408\u306F\u30AB\u30F3\u30DE\u533A\u5207\u308A\uFF09\u3002\u30D1\u30D6\u30EA\u30C3\u30AF\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u306F \`bigquery-public-data.{dataset}\` \u306E\u5F62\u5F0F\u3067\u8A18\u9332\u3059\u308B
67673
- - \`tables\`: \u9078\u629E\u3055\u308C\u305F\u30C6\u30FC\u30D6\u30EB\u540D\uFF08\u8907\u6570\u306E\u5834\u5408\u306F\u30AB\u30F3\u30DE\u533A\u5207\u308A\uFF09
67674
- - \`note\`: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u5185\u5BB9\u306E\u7C21\u5358\u306A\u8AAC\u660E
67663
+ 8. Phase 5 \u306E \`finalizeSetup\` \u306B\u6E21\u3059 \`projectKnowledge\` \u3067\u306F\u3001\u30B9\u30C6\u30C3\u30D75\u3067\u30E6\u30FC\u30B6\u30FC\u304C\u9078\u629E\u3057\u305F\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u3092 \`#### \u30B9\u30B3\u30FC\u30D7\` \u7BC0\u306B \`- dataset: <\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u540D>\` \u3068\u3057\u3066\u8A18\u9332\u3059\u308B\u3053\u3068\uFF08\u8907\u6570\u9078\u629E\u3057\u305F\u5834\u5408\u306F\u8907\u6570\u884C\u3067\u5217\u6319\u3059\u308B\uFF09\u3002\u30D1\u30D6\u30EA\u30C3\u30AF\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u306F \`bigquery-public-data.{dataset}\` \u306E\u5F62\u5F0F\u3067\u8A18\u9332\u3059\u308B\u3002\u9078\u629E\u3057\u305F\u30C6\u30FC\u30D6\u30EB\u306F \`#### \u30C6\u30FC\u30D6\u30EB\` \u7BC0\u3067\u5217\u6319\u3055\u308C\u308B\u305F\u3081\u3001\u30B9\u30B3\u30FC\u30D7\u7BC0\u306B \`tables\` \u306F\u66F8\u304B\u306A\u3044\u3002
67675
67664
 
67676
67665
  #### \u5236\u7D04
67677
67666
  - **\u30C6\u30FC\u30D6\u30EB\u306E\u884C\u30C7\u30FC\u30BF\u3092\u8AAD\u307F\u53D6\u3089\u306A\u3044\u3053\u3068**\u3002\u5B9F\u884C\u3057\u3066\u3088\u3044\u306E\u306F\u4E0A\u8A18\u624B\u9806\u3067\u6307\u5B9A\u3055\u308C\u305F\u30E1\u30BF\u30C7\u30FC\u30BF\u53D6\u5F97\u30AF\u30A8\u30EA\u306E\u307F\u3002\u305D\u308C\u4EE5\u5916\u306E\u30AF\u30A8\u30EA\u306F\u5B9F\u884C\u7981\u6B62
@@ -67700,10 +67689,7 @@ var bigqueryOnboarding = new ConnectorOnboarding({
67700
67689
  7. Branch based on results:
67701
67690
  - **2 or more tables**: Present them to the user via \`askUserQuestion\` (multiSelect: true) and let them select which tables to use. Include the dataset name in the description
67702
67691
  - **Exactly 1 table**: Do NOT call askUserQuestion. Auto-select it
67703
- 8. Call \`updateConnectionContext\`:
67704
- - \`dataset\`: Selected dataset name(s) (comma-separated if multiple). Record public datasets in the format \`bigquery-public-data.{dataset}\`
67705
- - \`tables\`: Selected table name(s) (comma-separated if multiple)
67706
- - \`note\`: Brief description of the setup
67692
+ 8. When passing \`projectKnowledge\` to \`finalizeSetup\` in Phase 5, record each dataset selected in step 5 under the \`#### \u30B9\u30B3\u30FC\u30D7\` subsection as \`- dataset: <dataset_name>\` (one bullet per dataset if multiple were chosen). Use the form \`bigquery-public-data.{dataset}\` for public datasets. Selected tables are listed under \`#### \u30C6\u30FC\u30D6\u30EB\`, so do NOT add a \`tables:\` entry to the scope section.
67707
67693
 
67708
67694
  #### Constraints
67709
67695
  - **Do NOT read table row data**. Only the metadata queries specified in the steps above are allowed. All other queries are forbidden
@@ -68130,10 +68116,7 @@ var bigqueryOnboarding2 = new ConnectorOnboarding({
68130
68116
  7. \u7D50\u679C\u306B\u5FDC\u3058\u3066\u5206\u5C90:
68131
68117
  - **\u30C6\u30FC\u30D6\u30EB\u304C2\u3064\u4EE5\u4E0A**: \`askUserQuestion\`\uFF08multiSelect: true\uFF09\u3067\u30E6\u30FC\u30B6\u30FC\u306B\u63D0\u793A\u3057\u3001\u4F7F\u7528\u3059\u308B\u30C6\u30FC\u30D6\u30EB\u3092\u9078\u629E\u3055\u305B\u308B\u3002description \u306B\u306F\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u540D\u3092\u8A18\u8F09\u3059\u308B
68132
68118
  - **\u30C6\u30FC\u30D6\u30EB\u304C1\u3064\u3060\u3051**: askUserQuestion \u306F\u4F7F\u308F\u305A\u81EA\u52D5\u63A1\u7528
68133
- 8. \`updateConnectionContext\` \u3092\u547C\u3073\u51FA\u3059:
68134
- - \`dataset\`: \u9078\u629E\u3055\u308C\u305F\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u540D\uFF08\u8907\u6570\u306E\u5834\u5408\u306F\u30AB\u30F3\u30DE\u533A\u5207\u308A\uFF09\u3002\u30D1\u30D6\u30EA\u30C3\u30AF\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u306F \`bigquery-public-data.{dataset}\` \u306E\u5F62\u5F0F\u3067\u8A18\u9332\u3059\u308B
68135
- - \`tables\`: \u9078\u629E\u3055\u308C\u305F\u30C6\u30FC\u30D6\u30EB\u540D\uFF08\u8907\u6570\u306E\u5834\u5408\u306F\u30AB\u30F3\u30DE\u533A\u5207\u308A\uFF09
68136
- - \`note\`: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u5185\u5BB9\u306E\u7C21\u5358\u306A\u8AAC\u660E
68119
+ 8. Phase 5 \u306E \`finalizeSetup\` \u306B\u6E21\u3059 \`projectKnowledge\` \u3067\u306F\u3001\u30B9\u30C6\u30C3\u30D75\u3067\u30E6\u30FC\u30B6\u30FC\u304C\u9078\u629E\u3057\u305F\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u3092 \`#### \u30B9\u30B3\u30FC\u30D7\` \u7BC0\u306B \`- dataset: <\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u540D>\` \u3068\u3057\u3066\u8A18\u9332\u3059\u308B\u3053\u3068\uFF08\u8907\u6570\u9078\u629E\u3057\u305F\u5834\u5408\u306F\u8907\u6570\u884C\u3067\u5217\u6319\u3059\u308B\uFF09\u3002\u30D1\u30D6\u30EA\u30C3\u30AF\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u306F \`bigquery-public-data.{dataset}\` \u306E\u5F62\u5F0F\u3067\u8A18\u9332\u3059\u308B\u3002\u9078\u629E\u3057\u305F\u30C6\u30FC\u30D6\u30EB\u306F \`#### \u30C6\u30FC\u30D6\u30EB\` \u7BC0\u3067\u5217\u6319\u3055\u308C\u308B\u305F\u3081\u3001\u30B9\u30B3\u30FC\u30D7\u7BC0\u306B \`tables\` \u306F\u66F8\u304B\u306A\u3044\u3002
68137
68120
 
68138
68121
  #### \u5236\u7D04
68139
68122
  - **\u30C6\u30FC\u30D6\u30EB\u306E\u884C\u30C7\u30FC\u30BF\u3092\u8AAD\u307F\u53D6\u3089\u306A\u3044\u3053\u3068**\u3002\u5B9F\u884C\u3057\u3066\u3088\u3044\u306E\u306F\u4E0A\u8A18\u624B\u9806\u3067\u6307\u5B9A\u3055\u308C\u305F\u30E1\u30BF\u30C7\u30FC\u30BF\u53D6\u5F97\u30AF\u30A8\u30EA\u306E\u307F\u3002\u305D\u308C\u4EE5\u5916\u306E\u30AF\u30A8\u30EA\u306F\u5B9F\u884C\u7981\u6B62
@@ -68162,10 +68145,7 @@ var bigqueryOnboarding2 = new ConnectorOnboarding({
68162
68145
  7. Branch based on results:
68163
68146
  - **2 or more tables**: Present them to the user via \`askUserQuestion\` (multiSelect: true) and let them select which tables to use. Include the dataset name in the description
68164
68147
  - **Exactly 1 table**: Do NOT call askUserQuestion. Auto-select it
68165
- 8. Call \`updateConnectionContext\`:
68166
- - \`dataset\`: Selected dataset name(s) (comma-separated if multiple). Record public datasets in the format \`bigquery-public-data.{dataset}\`
68167
- - \`tables\`: Selected table name(s) (comma-separated if multiple)
68168
- - \`note\`: Brief description of the setup
68148
+ 8. When passing \`projectKnowledge\` to \`finalizeSetup\` in Phase 5, record each dataset selected in step 5 under the \`#### \u30B9\u30B3\u30FC\u30D7\` subsection as \`- dataset: <dataset_name>\` (one bullet per dataset if multiple were chosen). Use the form \`bigquery-public-data.{dataset}\` for public datasets. Selected tables are listed under \`#### \u30C6\u30FC\u30D6\u30EB\`, so do NOT add a \`tables:\` entry to the scope section.
68169
68149
 
68170
68150
  #### Constraints
68171
68151
  - **Do NOT read table row data**. Only the metadata queries specified in the steps above are allowed. All other queries are forbidden
@@ -69785,10 +69765,6 @@ var googleAdsOnboarding = new ConnectorOnboarding({
69785
69765
  - \`parameterSlug\`: \`"customer-id"\`
69786
69766
  - \`options\`: \u30AB\u30B9\u30BF\u30DE\u30FC\u4E00\u89A7\u3002\u5404 option \u306E \`label\` \u306F \`\u30A2\u30AB\u30A6\u30F3\u30C8\u540D (id: \u30AB\u30B9\u30BF\u30DE\u30FCID)\` \u306E\u5F62\u5F0F\u3001\`value\` \u306F\u30AB\u30B9\u30BF\u30DE\u30FCID
69787
69767
  5. \u30E6\u30FC\u30B6\u30FC\u304C\u9078\u629E\u3057\u305F\u30AB\u30B9\u30BF\u30DE\u30FC\u306E \`label\` \u304C\u30E1\u30C3\u30BB\u30FC\u30B8\u3068\u3057\u3066\u5C4A\u304F\u306E\u3067\u3001\u6B21\u306E\u30B9\u30C6\u30C3\u30D7\u306B\u9032\u3080
69788
- 6. \`updateConnectionContext\` \u3092\u547C\u3073\u51FA\u3059:
69789
- - \`customer\`: \u9078\u629E\u3055\u308C\u305F\u30AB\u30B9\u30BF\u30DE\u30FC\u306E\u8868\u793A\u540D
69790
- - \`customerId\`: \u9078\u629E\u3055\u308C\u305F\u30AB\u30B9\u30BF\u30DE\u30FCID
69791
- - \`note\`: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u5185\u5BB9\u306E\u7C21\u5358\u306A\u8AAC\u660E
69792
69768
 
69793
69769
  #### \u5236\u7D04
69794
69770
  - **\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u4E2D\u306B\u30EC\u30DD\u30FC\u30C8\u30C7\u30FC\u30BF\u3092\u53D6\u5F97\u3057\u306A\u3044\u3053\u3068**\u3002\u5B9F\u884C\u3057\u3066\u3088\u3044\u306E\u306F\u4E0A\u8A18\u624B\u9806\u3067\u6307\u5B9A\u3055\u308C\u305F\u30E1\u30BF\u30C7\u30FC\u30BF\u53D6\u5F97\u306E\u307F
@@ -69804,10 +69780,6 @@ var googleAdsOnboarding = new ConnectorOnboarding({
69804
69780
  - \`parameterSlug\`: \`"customer-id"\`
69805
69781
  - \`options\`: The customer list. Each option's \`label\` should be \`Account Name (id: customerId)\`, \`value\` should be the customer ID
69806
69782
  5. The \`label\` of the user's selected customer will arrive as a message. Proceed to the next step
69807
- 6. Call \`updateConnectionContext\`:
69808
- - \`customer\`: The selected customer's display name
69809
- - \`customerId\`: The selected customer ID
69810
- - \`note\`: Brief description of the setup
69811
69783
 
69812
69784
  #### Constraints
69813
69785
  - **Do NOT fetch report data during setup**. Only the metadata requests specified in the steps above are allowed
@@ -70650,10 +70622,6 @@ var googleAnalyticsOauthOnboarding = new ConnectorOnboarding({
70650
70622
  - \`options\`: \u30D7\u30ED\u30D1\u30C6\u30A3\u4E00\u89A7\u3002\u5404 option \u306E \`label\` \u306F \`\u8868\u793A\u540D (id: \u30D7\u30ED\u30D1\u30C6\u30A3ID)\` \u306E\u5F62\u5F0F\u3001\`value\` \u306F\u30D7\u30ED\u30D1\u30C6\u30A3ID
70651
70623
  - \u30D7\u30ED\u30D1\u30C6\u30A3\u304C **0\u4EF6** \u306E\u5834\u5408\u306F\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u4E2D\u65AD\u3057\u3001\u30E6\u30FC\u30B6\u30FC\u306B\u30A2\u30AF\u30BB\u30B9\u53EF\u80FD\u306A\u30D7\u30ED\u30D1\u30C6\u30A3\u304C\u306A\u3044\u65E8\u3092\u4F1D\u3048\u308B
70652
70624
  5. \u30E6\u30FC\u30B6\u30FC\u304C\u9078\u629E\u3057\u305F\u30D7\u30ED\u30D1\u30C6\u30A3\u306E \`label\` \u304C\u30E1\u30C3\u30BB\u30FC\u30B8\u3068\u3057\u3066\u5C4A\u304F\u306E\u3067\u3001\u6B21\u306E\u30B9\u30C6\u30C3\u30D7\u306B\u9032\u3080
70653
- 6. \`updateConnectionContext\` \u3092\u547C\u3073\u51FA\u3059:
70654
- - \`property\`: \u9078\u629E\u3055\u308C\u305F\u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u8868\u793A\u540D
70655
- - \`propertyId\`: \u9078\u629E\u3055\u308C\u305F\u30D7\u30ED\u30D1\u30C6\u30A3ID
70656
- - \`note\`: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u5185\u5BB9\u306E\u7C21\u5358\u306A\u8AAC\u660E
70657
70625
 
70658
70626
  #### \u5236\u7D04
70659
70627
  - **\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u4E2D\u306B\u30EC\u30DD\u30FC\u30C8\u30C7\u30FC\u30BF\u3092\u53D6\u5F97\u3057\u306A\u3044\u3053\u3068**\u3002\u5B9F\u884C\u3057\u3066\u3088\u3044\u306E\u306F\u4E0A\u8A18\u624B\u9806\u3067\u6307\u5B9A\u3055\u308C\u305F\u30E1\u30BF\u30C7\u30FC\u30BF\u53D6\u5F97\u306E\u307F
@@ -70672,10 +70640,6 @@ var googleAnalyticsOauthOnboarding = new ConnectorOnboarding({
70672
70640
  - \`options\`: The property list. Each option's \`label\` should be \`Display Name (id: propertyId)\`, \`value\` should be the property ID
70673
70641
  - If **0 properties** are returned, abort setup and inform the user that no accessible properties are available
70674
70642
  5. The \`label\` of the user's selected property will arrive as a message. Proceed to the next step
70675
- 6. Call \`updateConnectionContext\`:
70676
- - \`property\`: The selected property's display name
70677
- - \`propertyId\`: The selected property ID
70678
- - \`note\`: Brief description of the setup
70679
70643
 
70680
70644
  #### Constraints
70681
70645
  - **Do NOT fetch report data during setup**. Only the metadata requests specified in the steps above are allowed
@@ -71247,11 +71211,6 @@ var googleCalendarOnboarding = new ConnectorOnboarding({
71247
71211
  5. \u30E6\u30FC\u30B6\u30FC\u304C\u9078\u629E\u3057\u305F\u30AB\u30EC\u30F3\u30C0\u30FC\u306E \`label\` \u304B\u3089 owner \u306E\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3092\u62BD\u51FA\u3057\u3001\`updateConnectionParameters\` \u3092\u547C\u3073\u51FA\u3057\u3066 \`impersonate-email\` \u3092\u6700\u7D42\u5024\u3067\u4E0A\u66F8\u304D\u3059\u308B:
71248
71212
  - \`parameterSlug\`: \`"impersonate-email"\`
71249
71213
  - \`options\`: \`[{ value: <ownerEmail>, label: <ownerEmail> }]\`
71250
- 6. \`updateConnectionContext\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u5BFE\u8C61\u60C5\u5831\u3092\u8A18\u9332\u3059\u308B:
71251
- - \`user\`: \u6700\u7D42\u7684\u306B\u8A2D\u5B9A\u3057\u305F\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9
71252
- - \`calendar\`: \u9078\u629E\u3055\u308C\u305F\u30AB\u30EC\u30F3\u30C0\u30FC\u540D
71253
- - \`calendarId\`: \u9078\u629E\u3055\u308C\u305F\u30AB\u30EC\u30F3\u30C0\u30FCID
71254
- - \`note\`: \u300CDomain-wide Delegation\u3067 {email} \u306E {calendar} \u306B\u30A2\u30AF\u30BB\u30B9\u300D\u306A\u3069\u306E\u8AAC\u660E
71255
71214
 
71256
71215
  #### \u5236\u7D04
71257
71216
  - **\u30B5\u30FC\u30D3\u30B9\u30A2\u30AB\u30A6\u30F3\u30C8\u306E\u30C9\u30E1\u30A4\u30F3\u5168\u4F53\u306E\u59D4\u4EFB\u8A2D\u5B9A\u304C\u5FC5\u8981\u3067\u3059**\u3002\`${listCalendarsToolName}\` \u306E \`errors\` \u306B\u6A29\u9650\u30A8\u30E9\u30FC\u304C\u51FA\u308B\u5834\u5408\u3001Google Workspace\u7BA1\u7406\u8005\u306BDomain-wide Delegation\u306E\u8A2D\u5B9A\u78BA\u8A8D\u3092\u4FC3\u3057\u3066\u304F\u3060\u3055\u3044
@@ -71274,11 +71233,6 @@ var googleCalendarOnboarding = new ConnectorOnboarding({
71274
71233
  5. Extract the owner email from the \`label\` of the user's selected calendar, then call \`updateConnectionParameters\` to overwrite \`impersonate-email\` with the final value:
71275
71234
  - \`parameterSlug\`: \`"impersonate-email"\`
71276
71235
  - \`options\`: \`[{ value: <ownerEmail>, label: <ownerEmail> }]\`
71277
- 6. Call \`updateConnectionContext\` to record the target:
71278
- - \`user\`: The final configured email address
71279
- - \`calendar\`: The selected calendar's name
71280
- - \`calendarId\`: The selected calendar ID
71281
- - \`note\`: A description such as "Accessing {email}'s {calendar} via Domain-wide Delegation"
71282
71236
 
71283
71237
  #### Constraints
71284
71238
  - **Domain-wide Delegation must be configured on the service account**. If \`${listCalendarsToolName}\` returns permission errors in the \`errors\` field, ask the user to verify the Domain-wide Delegation setup with their Google Workspace administrator
@@ -71704,10 +71658,6 @@ var googleCalendarOauthOnboarding = new ConnectorOnboarding({
71704
71658
  3. \`updateConnectionParameters\` \u3092\u547C\u3073\u51FA\u3059:
71705
71659
  - \`parameterSlug\`: \`"calendar-id"\`
71706
71660
  - \`value\`: \u9078\u629E\u3055\u308C\u305F\u30AB\u30EC\u30F3\u30C0\u30FCID
71707
- 4. \`updateConnectionContext\` \u3092\u547C\u3073\u51FA\u3059:
71708
- - \`calendar\`: \u9078\u629E\u3055\u308C\u305F\u30AB\u30EC\u30F3\u30C0\u30FC\u540D
71709
- - \`calendarId\`: \u9078\u629E\u3055\u308C\u305F\u30AB\u30EC\u30F3\u30C0\u30FCID
71710
- - \`note\`: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u5185\u5BB9\u306E\u7C21\u5358\u306A\u8AAC\u660E
71711
71661
 
71712
71662
  #### \u5236\u7D04
71713
71663
  - **\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u4E2D\u306B\u30A4\u30D9\u30F3\u30C8\u30C7\u30FC\u30BF\u3092\u53D6\u5F97\u3057\u306A\u3044\u3053\u3068**\u3002\u5B9F\u884C\u3057\u3066\u3088\u3044\u306E\u306F\u4E0A\u8A18\u624B\u9806\u3067\u6307\u5B9A\u3055\u308C\u305F\u30E1\u30BF\u30C7\u30FC\u30BF\u53D6\u5F97\u306E\u307F
@@ -71720,10 +71670,6 @@ var googleCalendarOauthOnboarding = new ConnectorOnboarding({
71720
71670
  3. Call \`updateConnectionParameters\`:
71721
71671
  - \`parameterSlug\`: \`"calendar-id"\`
71722
71672
  - \`value\`: The selected calendar ID
71723
- 4. Call \`updateConnectionContext\`:
71724
- - \`calendar\`: The selected calendar's name
71725
- - \`calendarId\`: The selected calendar ID
71726
- - \`note\`: Brief description of the setup
71727
71673
 
71728
71674
  #### Constraints
71729
71675
  - **Do NOT fetch event data during setup**. Only the metadata requests specified in the steps above are allowed
@@ -72164,7 +72110,9 @@ Authentication is handled automatically via OAuth proxy.`,
72164
72110
  });
72165
72111
  const data = await response.json();
72166
72112
  if (!response.ok) {
72167
- const errorMessage = typeof data?.error === "string" ? data.error : typeof data?.message === "string" ? data.message : `HTTP ${response.status} ${response.statusText}`;
72113
+ const googleError = data?.error && typeof data.error === "object" ? data.error : null;
72114
+ const googleErrorMessage = googleError && typeof googleError.message === "string" ? googleError.status && typeof googleError.status === "string" ? `${googleError.status}: ${googleError.message}` : googleError.message : null;
72115
+ const errorMessage = googleErrorMessage ?? (typeof data?.error === "string" ? data.error : typeof data?.message === "string" ? data.message : `HTTP ${response.status} ${response.statusText}`);
72168
72116
  return { success: false, error: errorMessage };
72169
72117
  }
72170
72118
  return { success: true, status: response.status, data };
@@ -73523,9 +73471,6 @@ var hubspotOnboarding = new ConnectorOnboarding({
73523
73471
  - \`method\`: \`"GET"\`
73524
73472
  - \`path\`: \`"/account-info/v3/details"\`
73525
73473
  2. \u30A8\u30E9\u30FC\u304C\u8FD4\u3055\u308C\u305F\u5834\u5408\u3001\u30E6\u30FC\u30B6\u30FC\u306BOAuth\u63A5\u7D9A\u306E\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3059\u308B\u3088\u3046\u4F1D\u3048\u308B
73526
- 3. \`updateConnectionContext\` \u3092\u547C\u3073\u51FA\u3059:
73527
- - \`account\`: HubSpot\u30A2\u30AB\u30A6\u30F3\u30C8\u540D\u307E\u305F\u306FID
73528
- - \`note\`: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u5185\u5BB9\u306E\u7C21\u5358\u306A\u8AAC\u660E
73529
73474
 
73530
73475
  #### \u5236\u7D04
73531
73476
  - **\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u4E2D\u306B\u30D3\u30B8\u30CD\u30B9\u30C7\u30FC\u30BF\u3092\u8AAD\u307F\u53D6\u3089\u306A\u3044\u3053\u3068**\u3002\u5B9F\u884C\u3057\u3066\u3088\u3044\u306E\u306F\u4E0A\u8A18\u624B\u9806\u3067\u6307\u5B9A\u3055\u308C\u305F\u30E1\u30BF\u30C7\u30FC\u30BF\u53D6\u5F97\u30EA\u30AF\u30A8\u30B9\u30C8\u306E\u307F
@@ -73536,9 +73481,6 @@ var hubspotOnboarding = new ConnectorOnboarding({
73536
73481
  - \`method\`: \`"GET"\`
73537
73482
  - \`path\`: \`"/account-info/v3/details"\`
73538
73483
  2. If an error is returned, ask the user to check the OAuth connection settings
73539
- 3. Call \`updateConnectionContext\`:
73540
- - \`account\`: HubSpot account name or ID
73541
- - \`note\`: Brief description of the setup
73542
73484
 
73543
73485
  #### Constraints
73544
73486
  - **Do NOT read business data during setup**. Only the metadata request specified in the steps above is allowed
@@ -73818,9 +73760,6 @@ var stripeOnboarding = new ConnectorOnboarding({
73818
73760
  - \`method\`: \`"GET"\`
73819
73761
  - \`path\`: \`"/v1/accounts"\`
73820
73762
  2. \u30A8\u30E9\u30FC\u304C\u8FD4\u3055\u308C\u305F\u5834\u5408\u3001\u30E6\u30FC\u30B6\u30FC\u306BOAuth\u63A5\u7D9A\u306E\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3059\u308B\u3088\u3046\u4F1D\u3048\u308B
73821
- 3. \`updateConnectionContext\` \u3092\u547C\u3073\u51FA\u3059:
73822
- - \`account\`: Stripe\u30A2\u30AB\u30A6\u30F3\u30C8\u60C5\u5831
73823
- - \`note\`: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u5185\u5BB9\u306E\u7C21\u5358\u306A\u8AAC\u660E
73824
73763
 
73825
73764
  #### \u5236\u7D04
73826
73765
  - **\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u4E2D\u306B\u6C7A\u6E08\u30C7\u30FC\u30BF\u3092\u8AAD\u307F\u53D6\u3089\u306A\u3044\u3053\u3068**\u3002\u5B9F\u884C\u3057\u3066\u3088\u3044\u306E\u306F\u4E0A\u8A18\u624B\u9806\u3067\u6307\u5B9A\u3055\u308C\u305F\u30E1\u30BF\u30C7\u30FC\u30BF\u53D6\u5F97\u30EA\u30AF\u30A8\u30B9\u30C8\u306E\u307F
@@ -73831,9 +73770,6 @@ var stripeOnboarding = new ConnectorOnboarding({
73831
73770
  - \`method\`: \`"GET"\`
73832
73771
  - \`path\`: \`"/v1/accounts"\`
73833
73772
  2. If an error is returned, ask the user to check the OAuth connection settings
73834
- 3. Call \`updateConnectionContext\`:
73835
- - \`account\`: Stripe account info
73836
- - \`note\`: Brief description of the setup
73837
73773
 
73838
73774
  #### Constraints
73839
73775
  - **Do NOT read payment data during setup**. Only the metadata request specified in the steps above is allowed
@@ -74114,8 +74050,6 @@ var stripeApiKeyOnboarding = new ConnectorOnboarding({
74114
74050
  - \`method\`: \`"GET"\`
74115
74051
  - \`path\`: \`"/v1/balance"\`
74116
74052
  2. \u30A8\u30E9\u30FC\u304C\u8FD4\u3055\u308C\u305F\u5834\u5408\u3001\u30E6\u30FC\u30B6\u30FC\u306BAPI\u30AD\u30FC\u306E\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3059\u308B\u3088\u3046\u4F1D\u3048\u308B\uFF08Secret API Key\u307E\u305F\u306FRestricted API Key\u304C\u6B63\u3057\u304F\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u308B\u304B\uFF09
74117
- 3. \`updateConnectionContext\` \u3092\u547C\u3073\u51FA\u3059:
74118
- - \`note\`: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u5185\u5BB9\u306E\u7C21\u5358\u306A\u8AAC\u660E
74119
74053
 
74120
74054
  #### \u5236\u7D04
74121
74055
  - **\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u4E2D\u306B\u6C7A\u6E08\u30C7\u30FC\u30BF\u3092\u8AAD\u307F\u53D6\u3089\u306A\u3044\u3053\u3068**\u3002\u5B9F\u884C\u3057\u3066\u3088\u3044\u306E\u306F\u4E0A\u8A18\u624B\u9806\u3067\u6307\u5B9A\u3055\u308C\u305F\u30E1\u30BF\u30C7\u30FC\u30BF\u53D6\u5F97\u30EA\u30AF\u30A8\u30B9\u30C8\u306E\u307F
@@ -74126,8 +74060,6 @@ var stripeApiKeyOnboarding = new ConnectorOnboarding({
74126
74060
  - \`method\`: \`"GET"\`
74127
74061
  - \`path\`: \`"/v1/balance"\`
74128
74062
  2. If an error is returned, ask the user to check the API key settings (verify that the Secret API Key or Restricted API Key is configured correctly)
74129
- 3. Call \`updateConnectionContext\`:
74130
- - \`note\`: Brief description of the setup
74131
74063
 
74132
74064
  #### Constraints
74133
74065
  - **Do NOT read payment data during setup**. Only the metadata request specified in the steps above is allowed
@@ -74152,7 +74084,7 @@ var stripeApiKeyConnector = new ConnectorPlugin({
74152
74084
  description: "Connect to Stripe for payment, customer, and subscription data using a Secret API Key or Restricted API Key.",
74153
74085
  iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/2QNK0u2doqp41uL0POS4Ks/7a92367e2388ec77c7f4ada143606f9a/stripe.jpeg",
74154
74086
  parameters: parameters22,
74155
- releaseFlag: { dev1: true, dev2: false, prod: false },
74087
+ releaseFlag: { dev1: true, dev2: true, prod: true },
74156
74088
  onboarding: stripeApiKeyOnboarding,
74157
74089
  systemPrompt: {
74158
74090
  en: `### Tools
@@ -74437,10 +74369,6 @@ var airtableOauthOnboarding = new ConnectorOnboarding({
74437
74369
  - \`method\`: \`"GET"\`
74438
74370
  - \`path\`: \`"/meta/bases/{baseId}/tables"\`
74439
74371
  5. \u30A8\u30E9\u30FC\u304C\u8FD4\u3055\u308C\u305F\u5834\u5408\u3001\u30E6\u30FC\u30B6\u30FC\u306B\u30D9\u30FC\u30B9\u306E\u5171\u6709\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3059\u308B\u3088\u3046\u4F1D\u3048\u308B
74440
- 6. \`updateConnectionContext\` \u3092\u547C\u3073\u51FA\u3059:
74441
- - \`base\`: \u30D9\u30FC\u30B9ID
74442
- - \`tables\`: \u30C6\u30FC\u30D6\u30EB\u540D\u4E00\u89A7\uFF08\u30AB\u30F3\u30DE\u533A\u5207\u308A\uFF09
74443
- - \`note\`: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u5185\u5BB9\u306E\u7C21\u5358\u306A\u8AAC\u660E
74444
74372
 
74445
74373
  #### \u5236\u7D04
74446
74374
  - **\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u4E2D\u306B\u30C6\u30FC\u30D6\u30EB\u306E\u30EC\u30B3\u30FC\u30C9\u30C7\u30FC\u30BF\u3092\u8AAD\u307F\u53D6\u3089\u306A\u3044\u3053\u3068**\u3002\u5B9F\u884C\u3057\u3066\u3088\u3044\u306E\u306F\u4E0A\u8A18\u624B\u9806\u3067\u6307\u5B9A\u3055\u308C\u305F\u30E1\u30BF\u30C7\u30FC\u30BF\u53D6\u5F97\u30EA\u30AF\u30A8\u30B9\u30C8\u306E\u307F
@@ -74456,10 +74384,6 @@ var airtableOauthOnboarding = new ConnectorOnboarding({
74456
74384
  - \`method\`: \`"GET"\`
74457
74385
  - \`path\`: \`"/meta/bases/{baseId}/tables"\`
74458
74386
  5. If an error is returned, ask the user to check the base sharing settings
74459
- 6. Call \`updateConnectionContext\`:
74460
- - \`base\`: The base ID
74461
- - \`tables\`: Table names (comma-separated)
74462
- - \`note\`: Brief description of the setup
74463
74387
 
74464
74388
  #### Constraints
74465
74389
  - **Do NOT read table record data during setup**. Only the metadata request specified in the steps above is allowed
@@ -75043,7 +74967,7 @@ var kintoneApiTokenConnector = new ConnectorPlugin({
75043
74967
  description: "Connect to kintone for business application data retrieval and analytics using API token authentication.",
75044
74968
  iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/76nPGMJFZkMFE3UQNo2JFy/e71dc5f5d5cec1306ce0e17aafbfd9f0/kintone.png",
75045
74969
  parameters: parameters25,
75046
- releaseFlag: { dev1: true, dev2: false, prod: false },
74970
+ releaseFlag: { dev1: true, dev2: true, prod: true },
75047
74971
  onboarding: kintoneApiTokenOnboarding,
75048
74972
  systemPrompt: {
75049
74973
  en: `### Tools
@@ -76381,7 +76305,7 @@ var amplitudeConnector = new ConnectorPlugin({
76381
76305
  description: "Connect to Amplitude for product analytics and user behavior data.",
76382
76306
  iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/2UBJSdRlFJaLq52WUCTBEB/308b59b374cf6c662ac70989860bffd7/amplitude-icon.svg",
76383
76307
  parameters: parameters32,
76384
- releaseFlag: { dev1: true, dev2: false, prod: false },
76308
+ releaseFlag: { dev1: true, dev2: true, prod: true },
76385
76309
  onboarding: amplitudeOnboarding,
76386
76310
  systemPrompt: {
76387
76311
  en: `### Tools
@@ -76634,7 +76558,7 @@ var attioConnector = new ConnectorPlugin({
76634
76558
  description: "Connect to Attio for CRM data and relationship intelligence.",
76635
76559
  iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/2qqx99vvXJojUM3tSrSWPX/1e7c35e13da6b365b8b475c1effe568f/attio.svg",
76636
76560
  parameters: parameters33,
76637
- releaseFlag: { dev1: true, dev2: false, prod: false },
76561
+ releaseFlag: { dev1: true, dev2: true, prod: true },
76638
76562
  onboarding: attioOnboarding,
76639
76563
  systemPrompt: {
76640
76564
  en: `### Tools
@@ -77366,9 +77290,6 @@ var shopifyOauthOnboarding = new ConnectorOnboarding({
77366
77290
  - \`method\`: \`"GET"\`
77367
77291
  - \`path\`: \`"/admin/api/2024-10/shop.json"\`
77368
77292
  2. \u30A8\u30E9\u30FC\u304C\u8FD4\u3055\u308C\u305F\u5834\u5408\u3001\u30E6\u30FC\u30B6\u30FC\u306BOAuth\u63A5\u7D9A\u306E\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3059\u308B\u3088\u3046\u4F1D\u3048\u308B
77369
- 3. \`updateConnectionContext\` \u3092\u547C\u3073\u51FA\u3059:
77370
- - \`shop\`: Shopify\u30B7\u30E7\u30C3\u30D7\u60C5\u5831
77371
- - \`note\`: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u5185\u5BB9\u306E\u7C21\u5358\u306A\u8AAC\u660E
77372
77293
 
77373
77294
  #### \u5236\u7D04
77374
77295
  - **\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u4E2D\u306B\u30D3\u30B8\u30CD\u30B9\u30C7\u30FC\u30BF\uFF08\u6CE8\u6587\u3001\u9867\u5BA2\u306A\u3069\uFF09\u3092\u8AAD\u307F\u53D6\u3089\u306A\u3044\u3053\u3068**\u3002\u5B9F\u884C\u3057\u3066\u3088\u3044\u306E\u306F\u4E0A\u8A18\u624B\u9806\u3067\u6307\u5B9A\u3055\u308C\u305F\u30E1\u30BF\u30C7\u30FC\u30BF\u53D6\u5F97\u30EA\u30AF\u30A8\u30B9\u30C8\u306E\u307F
@@ -77379,9 +77300,6 @@ var shopifyOauthOnboarding = new ConnectorOnboarding({
77379
77300
  - \`method\`: \`"GET"\`
77380
77301
  - \`path\`: \`"/admin/api/2024-10/shop.json"\`
77381
77302
  2. If an error is returned, ask the user to check the OAuth connection settings
77382
- 3. Call \`updateConnectionContext\`:
77383
- - \`shop\`: Shopify shop info
77384
- - \`note\`: Brief description of the setup
77385
77303
 
77386
77304
  #### Constraints
77387
77305
  - **Do NOT read business data (orders, customers, etc.) during setup**. Only the metadata request specified in the steps above is allowed
@@ -77651,7 +77569,7 @@ var hubspotConnector = new ConnectorPlugin({
77651
77569
  description: "Connect to HubSpot CRM for contacts, deals, companies, and marketing data using a Personal Access Key.",
77652
77570
  iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/5UcSkKkzhUMA4RsM45ynuo/43b967e36915ca0fc5d277684b204320/hubspot.svg",
77653
77571
  parameters: parameters36,
77654
- releaseFlag: { dev1: true, dev2: false, prod: false },
77572
+ releaseFlag: { dev1: true, dev2: true, prod: true },
77655
77573
  onboarding: hubspotOnboarding2,
77656
77574
  systemPrompt: {
77657
77575
  en: `### Tools
@@ -77919,7 +77837,7 @@ var jiraConnector = new ConnectorPlugin({
77919
77837
  description: "Connect to Jira Cloud for issue tracking, project management, and workflow data retrieval using API token authentication.",
77920
77838
  iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/5zt4yjb36szSPPkCECYlPL/bc3e7223dc84fb16a1cce53a80f5afcc/jira.png",
77921
77839
  parameters: parameters37,
77922
- releaseFlag: { dev1: true, dev2: false, prod: false },
77840
+ releaseFlag: { dev1: true, dev2: true, prod: true },
77923
77841
  onboarding: jiraOnboarding,
77924
77842
  systemPrompt: {
77925
77843
  en: `### Tools
@@ -78194,7 +78112,7 @@ var linearConnector = new ConnectorPlugin({
78194
78112
  description: "Connect to Linear for project management data \u2014 issues, projects, teams, cycles, and more.",
78195
78113
  iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/6oR77h6TeniXGdmnp2P2LX/a2ac8630ae52d164363adb0c695d9f0b/linear.webp",
78196
78114
  parameters: parameters38,
78197
- releaseFlag: { dev1: true, dev2: false, prod: false },
78115
+ releaseFlag: { dev1: true, dev2: true, prod: true },
78198
78116
  onboarding: linearOnboarding,
78199
78117
  systemPrompt: {
78200
78118
  en: `### Tools
@@ -78456,7 +78374,7 @@ var asanaConnector = new ConnectorPlugin({
78456
78374
  description: "Connect to Asana for project management, task tracking, and team collaboration data.",
78457
78375
  iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/3eIdaoqzIIZs2Md0OoDJMf/2fa66e0841adb985da4d3120466f3ec4/asana-icon.png",
78458
78376
  parameters: parameters39,
78459
- releaseFlag: { dev1: true, dev2: false, prod: false },
78377
+ releaseFlag: { dev1: true, dev2: true, prod: true },
78460
78378
  onboarding: asanaOnboarding,
78461
78379
  systemPrompt: {
78462
78380
  en: `### Tools
@@ -78781,7 +78699,7 @@ var clickhouseConnector = new ConnectorPlugin({
78781
78699
  description: "Connect to ClickHouse for high-performance columnar analytics and real-time data processing.",
78782
78700
  iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/MencimqP92UmucqstLl51/d9f2b6160206f5454b26e223a763ab8f/clickhouse.png",
78783
78701
  parameters: parameters40,
78784
- releaseFlag: { dev1: true, dev2: false, prod: false },
78702
+ releaseFlag: { dev1: true, dev2: true, prod: true },
78785
78703
  onboarding: clickhouseOnboarding,
78786
78704
  systemPrompt: {
78787
78705
  en: `### Tools
@@ -79189,7 +79107,7 @@ var mongodbConnector = new ConnectorPlugin({
79189
79107
  description: "Connect to MongoDB for document-oriented data storage and querying.",
79190
79108
  iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/48JSUx9HE6oSa9JrHGg2E1/12b4cac65924cac3641d4bafcef37dbe/mongodb-icon.webp",
79191
79109
  parameters: parameters41,
79192
- releaseFlag: { dev1: true, dev2: false, prod: false },
79110
+ releaseFlag: { dev1: true, dev2: true, prod: true },
79193
79111
  onboarding: mongodbOnboarding,
79194
79112
  systemPrompt: {
79195
79113
  en: `### Tools
@@ -79373,7 +79291,7 @@ var notionConnector = new ConnectorPlugin({
79373
79291
  description: "Connect to Notion to query databases, pages, and workspace content using an Internal Integration Token.",
79374
79292
  iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/797V5GDDTA8bsfKUHBCoQO/290ec49b70b68ddb4acd3bf0a6ab8bda/notion-icon.webp",
79375
79293
  parameters: parameters42,
79376
- releaseFlag: { dev1: true, dev2: false, prod: false },
79294
+ releaseFlag: { dev1: true, dev2: true, prod: true },
79377
79295
  onboarding: notionOnboarding,
79378
79296
  systemPrompt: {
79379
79297
  en: `### Tools
@@ -79644,9 +79562,6 @@ var notionOauthOnboarding = new ConnectorOnboarding({
79644
79562
  - \`method\`: \`"GET"\`
79645
79563
  - \`path\`: \`"/users/me"\`
79646
79564
  2. \u30A8\u30E9\u30FC\u304C\u8FD4\u3055\u308C\u305F\u5834\u5408\u3001\u30E6\u30FC\u30B6\u30FC\u306BOAuth\u63A5\u7D9A\u306E\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3059\u308B\u3088\u3046\u4F1D\u3048\u308B
79647
- 3. \`updateConnectionContext\` \u3092\u547C\u3073\u51FA\u3059:
79648
- - \`account\`: Notion\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u540D\u307E\u305F\u306F\u30DC\u30C3\u30C8\u540D
79649
- - \`note\`: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u5185\u5BB9\u306E\u7C21\u5358\u306A\u8AAC\u660E
79650
79565
 
79651
79566
  #### \u5236\u7D04
79652
79567
  - **\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u4E2D\u306B\u30D3\u30B8\u30CD\u30B9\u30C7\u30FC\u30BF\u3092\u8AAD\u307F\u53D6\u3089\u306A\u3044\u3053\u3068**\u3002\u5B9F\u884C\u3057\u3066\u3088\u3044\u306E\u306F\u4E0A\u8A18\u624B\u9806\u3067\u6307\u5B9A\u3055\u308C\u305F\u30E1\u30BF\u30C7\u30FC\u30BF\u53D6\u5F97\u30EA\u30AF\u30A8\u30B9\u30C8\u306E\u307F
@@ -79657,9 +79572,6 @@ var notionOauthOnboarding = new ConnectorOnboarding({
79657
79572
  - \`method\`: \`"GET"\`
79658
79573
  - \`path\`: \`"/users/me"\`
79659
79574
  2. If an error is returned, ask the user to check the OAuth connection settings
79660
- 3. Call \`updateConnectionContext\`:
79661
- - \`account\`: Notion workspace name or bot name
79662
- - \`note\`: Brief description of the setup
79663
79575
 
79664
79576
  #### Constraints
79665
79577
  - **Do NOT read business data during setup**. Only the metadata request specified in the steps above is allowed
@@ -79689,7 +79601,7 @@ var notionOauthConnector = new ConnectorPlugin({
79689
79601
  description: "Connect to Notion to query databases, pages, and workspace content using OAuth.",
79690
79602
  iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/797V5GDDTA8bsfKUHBCoQO/290ec49b70b68ddb4acd3bf0a6ab8bda/notion-icon.webp",
79691
79603
  parameters: parameters43,
79692
- releaseFlag: { dev1: true, dev2: false, prod: false },
79604
+ releaseFlag: { dev1: true, dev2: true, prod: true },
79693
79605
  onboarding: notionOauthOnboarding,
79694
79606
  proxyPolicy: {
79695
79607
  allowlist: [
@@ -79933,10 +79845,6 @@ var metaAdsOnboarding = new ConnectorOnboarding({
79933
79845
  - \`parameterSlug\`: \`"ad-account-id"\`
79934
79846
  - \`options\`: \u5E83\u544A\u30A2\u30AB\u30A6\u30F3\u30C8\u4E00\u89A7\u3002\u5404 option \u306E \`label\` \u306F \`\u30A2\u30AB\u30A6\u30F3\u30C8\u540D (id: \u30A2\u30AB\u30A6\u30F3\u30C8ID)\` \u306E\u5F62\u5F0F\u3001\`value\` \u306F\u30A2\u30AB\u30A6\u30F3\u30C8ID
79935
79847
  4. \u30E6\u30FC\u30B6\u30FC\u304C\u9078\u629E\u3057\u305F\u30A2\u30AB\u30A6\u30F3\u30C8\u306E \`label\` \u304C\u30E1\u30C3\u30BB\u30FC\u30B8\u3068\u3057\u3066\u5C4A\u304F\u306E\u3067\u3001\u6B21\u306E\u30B9\u30C6\u30C3\u30D7\u306B\u9032\u3080
79936
- 5. \`updateConnectionContext\` \u3092\u547C\u3073\u51FA\u3059:
79937
- - \`adAccount\`: \u9078\u629E\u3055\u308C\u305F\u30A2\u30AB\u30A6\u30F3\u30C8\u306E\u8868\u793A\u540D
79938
- - \`adAccountId\`: \u9078\u629E\u3055\u308C\u305F\u30A2\u30AB\u30A6\u30F3\u30C8ID
79939
- - \`note\`: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u5185\u5BB9\u306E\u7C21\u5358\u306A\u8AAC\u660E
79940
79848
 
79941
79849
  #### \u5236\u7D04
79942
79850
  - **\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u4E2D\u306B\u30EC\u30DD\u30FC\u30C8\u30C7\u30FC\u30BF\u3092\u53D6\u5F97\u3057\u306A\u3044\u3053\u3068**\u3002\u5B9F\u884C\u3057\u3066\u3088\u3044\u306E\u306F\u4E0A\u8A18\u624B\u9806\u3067\u6307\u5B9A\u3055\u308C\u305F\u30E1\u30BF\u30C7\u30FC\u30BF\u53D6\u5F97\u306E\u307F
@@ -79949,10 +79857,6 @@ var metaAdsOnboarding = new ConnectorOnboarding({
79949
79857
  - \`parameterSlug\`: \`"ad-account-id"\`
79950
79858
  - \`options\`: The ad account list. Each option's \`label\` should be \`Account Name (id: accountId)\`, \`value\` should be the account ID
79951
79859
  4. The \`label\` of the user's selected account will arrive as a message. Proceed to the next step
79952
- 5. Call \`updateConnectionContext\`:
79953
- - \`adAccount\`: The selected account's display name
79954
- - \`adAccountId\`: The selected account ID
79955
- - \`note\`: Brief description of the setup
79956
79860
 
79957
79861
  #### Constraints
79958
79862
  - **Do NOT fetch report data during setup**. Only the metadata requests specified in the steps above are allowed
@@ -80342,10 +80246,6 @@ var metaAdsOauthOnboarding = new ConnectorOnboarding({
80342
80246
  - \`parameterSlug\`: \`"ad-account-id"\`
80343
80247
  - \`options\`: \u5E83\u544A\u30A2\u30AB\u30A6\u30F3\u30C8\u4E00\u89A7\u3002\u5404 option \u306E \`label\` \u306F \`\u30A2\u30AB\u30A6\u30F3\u30C8\u540D (id: \u30A2\u30AB\u30A6\u30F3\u30C8ID)\` \u306E\u5F62\u5F0F\u3001\`value\` \u306F\u30A2\u30AB\u30A6\u30F3\u30C8ID
80344
80248
  4. \u30E6\u30FC\u30B6\u30FC\u304C\u9078\u629E\u3057\u305F\u30A2\u30AB\u30A6\u30F3\u30C8\u306E \`label\` \u304C\u30E1\u30C3\u30BB\u30FC\u30B8\u3068\u3057\u3066\u5C4A\u304F\u306E\u3067\u3001\u6B21\u306E\u30B9\u30C6\u30C3\u30D7\u306B\u9032\u3080
80345
- 5. \`updateConnectionContext\` \u3092\u547C\u3073\u51FA\u3059:
80346
- - \`adAccount\`: \u9078\u629E\u3055\u308C\u305F\u30A2\u30AB\u30A6\u30F3\u30C8\u306E\u8868\u793A\u540D
80347
- - \`adAccountId\`: \u9078\u629E\u3055\u308C\u305F\u30A2\u30AB\u30A6\u30F3\u30C8ID
80348
- - \`note\`: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u5185\u5BB9\u306E\u7C21\u5358\u306A\u8AAC\u660E
80349
80249
 
80350
80250
  #### \u5236\u7D04
80351
80251
  - **\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u4E2D\u306B\u30EC\u30DD\u30FC\u30C8\u30C7\u30FC\u30BF\u3092\u53D6\u5F97\u3057\u306A\u3044\u3053\u3068**\u3002\u5B9F\u884C\u3057\u3066\u3088\u3044\u306E\u306F\u4E0A\u8A18\u624B\u9806\u3067\u6307\u5B9A\u3055\u308C\u305F\u30E1\u30BF\u30C7\u30FC\u30BF\u53D6\u5F97\u306E\u307F
@@ -80358,10 +80258,6 @@ var metaAdsOauthOnboarding = new ConnectorOnboarding({
80358
80258
  - \`parameterSlug\`: \`"ad-account-id"\`
80359
80259
  - \`options\`: The ad account list. Each option's \`label\` should be \`Account Name (id: accountId)\`, \`value\` should be the account ID
80360
80260
  4. The \`label\` of the user's selected account will arrive as a message. Proceed to the next step
80361
- 5. Call \`updateConnectionContext\`:
80362
- - \`adAccount\`: The selected account's display name
80363
- - \`adAccountId\`: The selected account ID
80364
- - \`note\`: Brief description of the setup
80365
80261
 
80366
80262
  #### Constraints
80367
80263
  - **Do NOT fetch report data during setup**. Only the metadata requests specified in the steps above are allowed
@@ -80804,10 +80700,6 @@ var tiktokAdsOnboarding = new ConnectorOnboarding({
80804
80700
  - \`parameterSlug\`: \`"advertiser-id"\`
80805
80701
  - \`options\`: \u5E83\u544A\u4E3B\u4E00\u89A7\u3002\u5404 option \u306E \`label\` \u306F \`\u5E83\u544A\u4E3B\u540D (id: \u5E83\u544A\u4E3BID)\` \u306E\u5F62\u5F0F\u3001\`value\` \u306F\u5E83\u544A\u4E3BID
80806
80702
  4. \u30E6\u30FC\u30B6\u30FC\u304C\u9078\u629E\u3057\u305F\u5E83\u544A\u4E3B\u306E \`label\` \u304C\u30E1\u30C3\u30BB\u30FC\u30B8\u3068\u3057\u3066\u5C4A\u304F\u306E\u3067\u3001\u6B21\u306E\u30B9\u30C6\u30C3\u30D7\u306B\u9032\u3080
80807
- 5. \`updateConnectionContext\` \u3092\u547C\u3073\u51FA\u3059:
80808
- - \`advertiser\`: \u9078\u629E\u3055\u308C\u305F\u5E83\u544A\u4E3B\u306E\u8868\u793A\u540D
80809
- - \`advertiserId\`: \u9078\u629E\u3055\u308C\u305F\u5E83\u544A\u4E3BID
80810
- - \`note\`: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u5185\u5BB9\u306E\u7C21\u5358\u306A\u8AAC\u660E
80811
80703
 
80812
80704
  #### \u5236\u7D04
80813
80705
  - **\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u4E2D\u306B\u30EC\u30DD\u30FC\u30C8\u30C7\u30FC\u30BF\u3092\u53D6\u5F97\u3057\u306A\u3044\u3053\u3068**\u3002\u5B9F\u884C\u3057\u3066\u3088\u3044\u306E\u306F\u4E0A\u8A18\u624B\u9806\u3067\u6307\u5B9A\u3055\u308C\u305F\u30E1\u30BF\u30C7\u30FC\u30BF\u53D6\u5F97\u306E\u307F
@@ -80820,10 +80712,6 @@ var tiktokAdsOnboarding = new ConnectorOnboarding({
80820
80712
  - \`parameterSlug\`: \`"advertiser-id"\`
80821
80713
  - \`options\`: The advertiser list. Each option's \`label\` should be \`Advertiser Name (id: advertiserId)\`, \`value\` should be the advertiser ID
80822
80714
  4. The \`label\` of the user's selected advertiser will arrive as a message. Proceed to the next step
80823
- 5. Call \`updateConnectionContext\`:
80824
- - \`advertiser\`: The selected advertiser's display name
80825
- - \`advertiserId\`: The selected advertiser ID
80826
- - \`note\`: Brief description of the setup
80827
80715
 
80828
80716
  #### Constraints
80829
80717
  - **Do NOT fetch report data during setup**. Only the metadata requests specified in the steps above are allowed
@@ -81302,7 +81190,7 @@ var mailchimpConnector = new ConnectorPlugin({
81302
81190
  description: "Connect to Mailchimp for email marketing, audiences, campaigns, and analytics.",
81303
81191
  iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/19Rac6B8eGiLpQb4lKMbG3/10f567f85572aeb16f2ee6aaa6602987/mailchimp.png",
81304
81192
  parameters: parameters47,
81305
- releaseFlag: { dev1: true, dev2: false, prod: false },
81193
+ releaseFlag: { dev1: true, dev2: true, prod: true },
81306
81194
  onboarding: mailchimpOnboarding,
81307
81195
  systemPrompt: {
81308
81196
  en: `### Tools
@@ -81948,7 +81836,7 @@ var customerioConnector = new ConnectorPlugin({
81948
81836
  description: "Connect to Customer.io App API for reading customer data, managing campaigns, segments, and sending transactional messages.",
81949
81837
  iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/nngohabT7oHDIgQYAVBpz/6f6c7662ef4692eb9869e3e69dd57114/customerio.png",
81950
81838
  parameters: parameters49,
81951
- releaseFlag: { dev1: true, dev2: false, prod: false },
81839
+ releaseFlag: { dev1: true, dev2: true, prod: true },
81952
81840
  onboarding: customerioOnboarding,
81953
81841
  systemPrompt: {
81954
81842
  en: `### Tools
@@ -82269,10 +82157,6 @@ var gmailOnboarding = new ConnectorOnboarding({
82269
82157
  5. \`${requestToolName7}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u30E9\u30D9\u30EB\u4E00\u89A7\u3092\u53D6\u5F97\u3059\u308B:
82270
82158
  - \`method\`: \`"GET"\`
82271
82159
  - \`path\`: \`"/me/labels"\`
82272
- 6. \`updateConnectionContext\` \u3092\u547C\u3073\u51FA\u3059:
82273
- - \`email\`: \u8A2D\u5B9A\u3057\u305F\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9
82274
- - \`labels\`: \u4E3B\u8981\u306A\u30E9\u30D9\u30EB\u540D\u4E00\u89A7\uFF08\u30AB\u30F3\u30DE\u533A\u5207\u308A\u3001INBOX, SENT, DRAFT, SPAM, TRASH\u7B49\u306E\u30B7\u30B9\u30C6\u30E0\u30E9\u30D9\u30EB\u3092\u542B\u3080\uFF09
82275
- - \`note\`: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u5185\u5BB9\u306E\u7C21\u5358\u306A\u8AAC\u660E
82276
82160
 
82277
82161
  #### \u5236\u7D04
82278
82162
  - **\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u4E2D\u306B\u30E1\u30C3\u30BB\u30FC\u30B8\u672C\u6587\u3092\u8AAD\u307F\u53D6\u3089\u306A\u3044\u3053\u3068**\u3002\u5B9F\u884C\u3057\u3066\u3088\u3044\u306E\u306F\u4E0A\u8A18\u624B\u9806\u3067\u6307\u5B9A\u3055\u308C\u305F\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB\u53D6\u5F97\u3068\u30E9\u30D9\u30EB\u4E00\u89A7\u53D6\u5F97\u306E\u307F
@@ -82296,10 +82180,6 @@ var gmailOnboarding = new ConnectorOnboarding({
82296
82180
  5. Call \`${requestToolName7}\` to get the label list:
82297
82181
  - \`method\`: \`"GET"\`
82298
82182
  - \`path\`: \`"/me/labels"\`
82299
- 6. Call \`updateConnectionContext\`:
82300
- - \`email\`: The configured email address
82301
- - \`labels\`: Key label names (comma-separated, including system labels like INBOX, SENT, DRAFT, SPAM, TRASH)
82302
- - \`note\`: Brief description of the setup
82303
82183
 
82304
82184
  #### Constraints
82305
82185
  - **Do NOT read message bodies during setup**. Only the profile and label list requests specified above are allowed
@@ -82324,7 +82204,7 @@ var gmailConnector = new ConnectorPlugin({
82324
82204
  description: "Connect to Gmail for email data access using a service account with domain-wide delegation. Read-only access to messages, threads, and labels.",
82325
82205
  iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/4V3rfaSc1ksFIt2eHBNIwJ/7f3be41a154a6d96dcf229ed0e5858c9/Gmail_icon__2020_.svg.png",
82326
82206
  parameters: parameters50,
82327
- releaseFlag: { dev1: true, dev2: false, prod: false },
82207
+ releaseFlag: { dev1: true, dev2: true, prod: true },
82328
82208
  onboarding: gmailOnboarding,
82329
82209
  systemPrompt: {
82330
82210
  en: `### Tools
@@ -82661,10 +82541,6 @@ var gmailOnboarding2 = new ConnectorOnboarding({
82661
82541
  3. \`${requestToolName8}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u30E9\u30D9\u30EB\u4E00\u89A7\u3092\u53D6\u5F97\u3059\u308B:
82662
82542
  - \`method\`: \`"GET"\`
82663
82543
  - \`path\`: \`"/me/labels"\`
82664
- 4. \`updateConnectionContext\` \u3092\u547C\u3073\u51FA\u3059:
82665
- - \`email\`: \u30E6\u30FC\u30B6\u30FC\u306E\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9
82666
- - \`labels\`: \u4E3B\u8981\u306A\u30E9\u30D9\u30EB\u540D\u4E00\u89A7\uFF08\u30AB\u30F3\u30DE\u533A\u5207\u308A\u3001INBOX, SENT, DRAFT, SPAM, TRASH\u7B49\u306E\u30B7\u30B9\u30C6\u30E0\u30E9\u30D9\u30EB\u3092\u542B\u3080\uFF09
82667
- - \`note\`: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u5185\u5BB9\u306E\u7C21\u5358\u306A\u8AAC\u660E
82668
82544
 
82669
82545
  #### \u5236\u7D04
82670
82546
  - **\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u4E2D\u306B\u30E1\u30C3\u30BB\u30FC\u30B8\u672C\u6587\u3092\u8AAD\u307F\u53D6\u3089\u306A\u3044\u3053\u3068**\u3002\u5B9F\u884C\u3057\u3066\u3088\u3044\u306E\u306F\u4E0A\u8A18\u624B\u9806\u3067\u6307\u5B9A\u3055\u308C\u305F\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB\u53D6\u5F97\u3068\u30E9\u30D9\u30EB\u4E00\u89A7\u53D6\u5F97\u306E\u307F
@@ -82678,10 +82554,6 @@ var gmailOnboarding2 = new ConnectorOnboarding({
82678
82554
  3. Call \`${requestToolName8}\` to get the label list:
82679
82555
  - \`method\`: \`"GET"\`
82680
82556
  - \`path\`: \`"/me/labels"\`
82681
- 4. Call \`updateConnectionContext\`:
82682
- - \`email\`: The user's email address
82683
- - \`labels\`: Key label names (comma-separated, including system labels like INBOX, SENT, DRAFT, SPAM, TRASH)
82684
- - \`note\`: Brief description of the setup
82685
82557
 
82686
82558
  #### Constraints
82687
82559
  - **Do NOT read message bodies during setup**. Only the profile and label list requests specified above are allowed
@@ -83037,10 +82909,6 @@ var linkedinAdsOnboarding = new ConnectorOnboarding({
83037
82909
  - \`parameterSlug\`: \`"ad-account-id"\`
83038
82910
  - \`options\`: \u5E83\u544A\u30A2\u30AB\u30A6\u30F3\u30C8\u4E00\u89A7\u3002\u5404 option \u306E \`label\` \u306F \`\u30A2\u30AB\u30A6\u30F3\u30C8\u540D (id: \u30A2\u30AB\u30A6\u30F3\u30C8ID)\` \u306E\u5F62\u5F0F\u3001\`value\` \u306F\u30A2\u30AB\u30A6\u30F3\u30C8ID
83039
82911
  4. \u30E6\u30FC\u30B6\u30FC\u304C\u9078\u629E\u3057\u305F\u30A2\u30AB\u30A6\u30F3\u30C8\u306E \`label\` \u304C\u30E1\u30C3\u30BB\u30FC\u30B8\u3068\u3057\u3066\u5C4A\u304F\u306E\u3067\u3001\u6B21\u306E\u30B9\u30C6\u30C3\u30D7\u306B\u9032\u3080
83040
- 5. \`updateConnectionContext\` \u3092\u547C\u3073\u51FA\u3059:
83041
- - \`adAccount\`: \u9078\u629E\u3055\u308C\u305F\u30A2\u30AB\u30A6\u30F3\u30C8\u306E\u8868\u793A\u540D
83042
- - \`adAccountId\`: \u9078\u629E\u3055\u308C\u305F\u30A2\u30AB\u30A6\u30F3\u30C8ID
83043
- - \`note\`: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u5185\u5BB9\u306E\u7C21\u5358\u306A\u8AAC\u660E
83044
82912
 
83045
82913
  #### \u5236\u7D04
83046
82914
  - **\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u4E2D\u306B\u30EC\u30DD\u30FC\u30C8\u30C7\u30FC\u30BF\u3092\u53D6\u5F97\u3057\u306A\u3044\u3053\u3068**\u3002\u5B9F\u884C\u3057\u3066\u3088\u3044\u306E\u306F\u4E0A\u8A18\u624B\u9806\u3067\u6307\u5B9A\u3055\u308C\u305F\u30E1\u30BF\u30C7\u30FC\u30BF\u53D6\u5F97\u306E\u307F
@@ -83053,10 +82921,6 @@ var linkedinAdsOnboarding = new ConnectorOnboarding({
83053
82921
  - \`parameterSlug\`: \`"ad-account-id"\`
83054
82922
  - \`options\`: The ad account list. Each option's \`label\` should be \`Account Name (id: accountId)\`, \`value\` should be the account ID
83055
82923
  4. The \`label\` of the user's selected account will arrive as a message. Proceed to the next step
83056
- 5. Call \`updateConnectionContext\`:
83057
- - \`adAccount\`: The selected account's display name
83058
- - \`adAccountId\`: The selected account ID
83059
- - \`note\`: Brief description of the setup
83060
82924
 
83061
82925
  #### Constraints
83062
82926
  - **Do NOT fetch report data during setup**. Only the metadata requests specified in the steps above are allowed
@@ -83593,7 +83457,7 @@ var zendeskConnector = new ConnectorPlugin({
83593
83457
  description: "Connect to Zendesk Support for tickets, users, organizations, and customer service data using an API token.",
83594
83458
  iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/7e9Q7PwV6MJRJMj543m2gl/55385fae903ccfa1599e35be9d3516aa/zendesk-icon.svg",
83595
83459
  parameters: parameters53,
83596
- releaseFlag: { dev1: true, dev2: false, prod: false },
83460
+ releaseFlag: { dev1: true, dev2: true, prod: true },
83597
83461
  onboarding: zendeskOnboarding,
83598
83462
  systemPrompt: {
83599
83463
  en: `### Tools
@@ -83899,9 +83763,6 @@ var zendeskOauthOnboarding = new ConnectorOnboarding({
83899
83763
  - \`method\`: \`"GET"\`
83900
83764
  - \`path\`: \`"/api/v2/account/settings.json"\`
83901
83765
  2. If an error is returned, ask the user to check the OAuth connection settings
83902
- 3. Call \`updateConnectionContext\`:
83903
- - \`account\`: Zendesk subdomain or account name
83904
- - \`note\`: Brief description of the setup
83905
83766
 
83906
83767
  #### Constraints
83907
83768
  - **Do NOT read business data during setup**. Only the metadata request specified in the steps above is allowed
@@ -83912,9 +83773,6 @@ var zendeskOauthOnboarding = new ConnectorOnboarding({
83912
83773
  - \`method\`: \`"GET"\`
83913
83774
  - \`path\`: \`"/api/v2/account/settings.json"\`
83914
83775
  2. \u30A8\u30E9\u30FC\u304C\u8FD4\u3055\u308C\u305F\u5834\u5408\u3001\u30E6\u30FC\u30B6\u30FC\u306BOAuth\u63A5\u7D9A\u306E\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3059\u308B\u3088\u3046\u4F1D\u3048\u308B
83915
- 3. \`updateConnectionContext\` \u3092\u547C\u3073\u51FA\u3059:
83916
- - \`account\`: Zendesk\u30B5\u30D6\u30C9\u30E1\u30A4\u30F3\u307E\u305F\u306F\u30A2\u30AB\u30A6\u30F3\u30C8\u540D
83917
- - \`note\`: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u5185\u5BB9\u306E\u7C21\u5358\u306A\u8AAC\u660E
83918
83776
 
83919
83777
  #### \u5236\u7D04
83920
83778
  - **\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u4E2D\u306B\u30D3\u30B8\u30CD\u30B9\u30C7\u30FC\u30BF\u3092\u8AAD\u307F\u53D6\u3089\u306A\u3044\u3053\u3068**\u3002\u5B9F\u884C\u3057\u3066\u3088\u3044\u306E\u306F\u4E0A\u8A18\u624B\u9806\u3067\u6307\u5B9A\u3055\u308C\u305F\u30E1\u30BF\u30C7\u30FC\u30BF\u53D6\u5F97\u30EA\u30AF\u30A8\u30B9\u30C8\u306E\u307F
@@ -84216,7 +84074,7 @@ var intercomConnector = new ConnectorPlugin({
84216
84074
  description: "Connect to Intercom for contacts, conversations, companies, and customer engagement data using an Access Token.",
84217
84075
  iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/sb2cRMGClpId0LKiSqsok/ae90a0849f21ffe3faf73e04a5676b45/intercom.svg",
84218
84076
  parameters: parameters55,
84219
- releaseFlag: { dev1: true, dev2: false, prod: false },
84077
+ releaseFlag: { dev1: true, dev2: true, prod: true },
84220
84078
  onboarding: intercomOnboarding,
84221
84079
  systemPrompt: {
84222
84080
  en: `### Tools
@@ -84545,9 +84403,6 @@ var intercomOauthOnboarding = new ConnectorOnboarding({
84545
84403
  - \`method\`: \`"GET"\`
84546
84404
  - \`path\`: \`"/me"\`
84547
84405
  2. If an error is returned, ask the user to check the OAuth connection settings
84548
- 3. Call \`updateConnectionContext\`:
84549
- - \`account\`: Intercom workspace name or admin email
84550
- - \`note\`: Brief description of the setup
84551
84406
 
84552
84407
  #### Constraints
84553
84408
  - **Do NOT read business data during setup**. Only the metadata request specified in the steps above is allowed
@@ -84558,9 +84413,6 @@ var intercomOauthOnboarding = new ConnectorOnboarding({
84558
84413
  - \`method\`: \`"GET"\`
84559
84414
  - \`path\`: \`"/me"\`
84560
84415
  2. \u30A8\u30E9\u30FC\u304C\u8FD4\u3055\u308C\u305F\u5834\u5408\u3001\u30E6\u30FC\u30B6\u30FC\u306BOAuth\u63A5\u7D9A\u306E\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3059\u308B\u3088\u3046\u4F1D\u3048\u308B
84561
- 3. \`updateConnectionContext\` \u3092\u547C\u3073\u51FA\u3059:
84562
- - \`account\`: Intercom\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u540D\u307E\u305F\u306F\u7BA1\u7406\u8005\u30E1\u30FC\u30EB
84563
- - \`note\`: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u5185\u5BB9\u306E\u7C21\u5358\u306A\u8AAC\u660E
84564
84416
 
84565
84417
  #### \u5236\u7D04
84566
84418
  - **\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u4E2D\u306B\u30D3\u30B8\u30CD\u30B9\u30C7\u30FC\u30BF\u3092\u8AAD\u307F\u53D6\u3089\u306A\u3044\u3053\u3068**\u3002\u5B9F\u884C\u3057\u3066\u3088\u3044\u306E\u306F\u4E0A\u8A18\u624B\u9806\u3067\u6307\u5B9A\u3055\u308C\u305F\u30E1\u30BF\u30C7\u30FC\u30BF\u53D6\u5F97\u30EA\u30AF\u30A8\u30B9\u30C8\u306E\u307F
@@ -84936,7 +84788,7 @@ var mixpanelConnector = new ConnectorPlugin({
84936
84788
  description: "Connect to Mixpanel for product analytics, event tracking, and user behavior analysis.",
84937
84789
  iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/7ykz0vNRjMqvTVrxS8wsj1/b2cd795be5b373877dee77cc6147c758/images__3_.png",
84938
84790
  parameters: parameters57,
84939
- releaseFlag: { dev1: true, dev2: false, prod: false },
84791
+ releaseFlag: { dev1: true, dev2: true, prod: true },
84940
84792
  onboarding: mixpanelOnboarding,
84941
84793
  systemPrompt: {
84942
84794
  en: `### Tools
@@ -85431,7 +85283,7 @@ var backlogConnector = new ConnectorPlugin({
85431
85283
  description: "Connect to Nulab Backlog for project management, issue tracking, and wiki data retrieval using API key authentication.",
85432
85284
  iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/6KcVBGf3mUHnuCOQgQMvtT/e8558c7990e40e3be46948e9476190fb/backlog-favicon.svg",
85433
85285
  parameters: parameters59,
85434
- releaseFlag: { dev1: true, dev2: true, prod: false },
85286
+ releaseFlag: { dev1: true, dev2: true, prod: true },
85435
85287
  onboarding: backlogOnboarding,
85436
85288
  systemPrompt: {
85437
85289
  en: `### Tools
@@ -85869,7 +85721,7 @@ var gammaConnector = new ConnectorPlugin({
85869
85721
  description: "Connect to Gamma for AI-powered presentation, document, webpage, and social post generation.",
85870
85722
  iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/KoMGPpPcgtB9oDYe1OBjS/1ba7eb061c4497106bf6d249866dc471/gamma.svg",
85871
85723
  parameters: parameters60,
85872
- releaseFlag: { dev1: true, dev2: false, prod: false },
85724
+ releaseFlag: { dev1: true, dev2: true, prod: true },
85873
85725
  onboarding: gammaOnboarding,
85874
85726
  systemPrompt: {
85875
85727
  en: `### Tools
@@ -86149,7 +86001,7 @@ var sentryConnector = new ConnectorPlugin({
86149
86001
  description: "Connect to Sentry for error tracking and performance monitoring data.",
86150
86002
  iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/4B8ZEGFGjTeMWNnXQb1dAL/ac10f813f02353f5b0cbe64fb5c06d8f/sentry.svg",
86151
86003
  parameters: parameters61,
86152
- releaseFlag: { dev1: true, dev2: false, prod: false },
86004
+ releaseFlag: { dev1: true, dev2: true, prod: true },
86153
86005
  onboarding: sentryOnboarding,
86154
86006
  systemPrompt: {
86155
86007
  en: `### Tools
@@ -86353,6 +86205,713 @@ await sentry.updateIssue("12345", { status: "resolved" });
86353
86205
  }
86354
86206
  });
86355
86207
 
86208
+ // ../connectors/src/connectors/salesforce/setup.ts
86209
+ var salesforceOnboarding = new ConnectorOnboarding({
86210
+ connectionSetupInstructions: {
86211
+ en: `#### Create a Connected App in Salesforce
86212
+ 1. In Salesforce Setup, go to App Manager \u2192 New Connected App
86213
+ 2. Under API (Enable OAuth Settings), check "Enable OAuth Settings"
86214
+ 3. Add OAuth scopes: "Manage user data via APIs (api)" and "Perform requests at any time (refresh_token, offline_access)"
86215
+ 4. Save and note the Consumer Key (client_id) and Consumer Secret (client_secret)
86216
+
86217
+ #### Allow Username-Password Flow
86218
+ 1. Go to Setup \u2192 Identity \u2192 OAuth and OpenID Connect Settings
86219
+ 2. Enable "Allow OAuth Username-Password Flows"
86220
+
86221
+ #### Reset your Security Token
86222
+ 1. Go to Settings \u2192 My Personal Information \u2192 Reset My Security Token
86223
+ 2. Salesforce emails you a new security token \u2014 append it to your password when entering the Password parameter (password + securityToken)
86224
+
86225
+ #### Sandbox vs Production
86226
+ - Leave Use Sandbox as "false" (or empty) to connect to production (login.salesforce.com)
86227
+ - Set Use Sandbox to "true" to connect to a sandbox (test.salesforce.com)`,
86228
+ ja: `#### Salesforce \u3067 Connected App \u3092\u4F5C\u6210
86229
+ 1. Setup \u2192 App Manager \u2192 New Connected App
86230
+ 2. API (Enable OAuth Settings) \u30BB\u30AF\u30B7\u30E7\u30F3\u3067 "Enable OAuth Settings" \u3092\u6709\u52B9\u5316
86231
+ 3. OAuth \u30B9\u30B3\u30FC\u30D7\u306B "Manage user data via APIs (api)" \u3068 "Perform requests at any time (refresh_token, offline_access)" \u3092\u8FFD\u52A0
86232
+ 4. \u4FDD\u5B58\u5F8C\u3001Consumer Key (client_id) \u3068 Consumer Secret (client_secret) \u3092\u63A7\u3048\u308B
86233
+
86234
+ #### Username-Password Flow \u3092\u8A31\u53EF
86235
+ 1. Setup \u2192 Identity \u2192 OAuth and OpenID Connect Settings
86236
+ 2. "Allow OAuth Username-Password Flows" \u3092\u6709\u52B9\u5316
86237
+
86238
+ #### Security Token \u306E\u767A\u884C
86239
+ 1. \u500B\u4EBA\u8A2D\u5B9A \u2192 My Personal Information \u2192 Reset My Security Token
86240
+ 2. Salesforce \u304B\u3089\u9001\u3089\u308C\u308B\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3\u30C8\u30FC\u30AF\u30F3\u3092\u30D1\u30B9\u30EF\u30FC\u30C9\u306B\u9023\u7D50\u3057\u3066\u5165\u529B\uFF08password + securityToken\uFF09
86241
+
86242
+ #### Sandbox / Production
86243
+ - \u672C\u756A (login.salesforce.com) \u306E\u5834\u5408: Use Sandbox \u3092 "false" \u307E\u305F\u306F\u672A\u5165\u529B
86244
+ - Sandbox (test.salesforce.com) \u306E\u5834\u5408: Use Sandbox \u3092 "true" \u306B\u8A2D\u5B9A`
86245
+ },
86246
+ dataOverviewInstructions: {
86247
+ en: `1. Call salesforce_request with GET /services/data/v60.0/sobjects/ to list available sObjects (standard + custom)
86248
+ 2. Call salesforce_request with GET /services/data/v60.0/sobjects/Account/describe to inspect Account fields; repeat for Contact, Opportunity, Lead as needed
86249
+ 3. Run a sample SOQL query: GET /services/data/v60.0/query?q=SELECT+Id,Name,Industry+FROM+Account+LIMIT+5 to verify access and explore data`,
86250
+ ja: `1. salesforce_request \u3067 GET /services/data/v60.0/sobjects/ \u3092\u547C\u3073\u51FA\u3057\u3001\u5229\u7528\u53EF\u80FD\u306A sObject\uFF08\u6A19\u6E96 + \u30AB\u30B9\u30BF\u30E0\uFF09\u3092\u4E00\u89A7\u53D6\u5F97
86251
+ 2. salesforce_request \u3067 GET /services/data/v60.0/sobjects/Account/describe \u3092\u547C\u3073\u51FA\u3057 Account \u306E\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u78BA\u8A8D\u3002Contact / Opportunity / Lead \u306A\u3069\u5FC5\u8981\u306A sObject \u306B\u5BFE\u3057\u3066\u540C\u69D8\u306B\u5B9F\u884C
86252
+ 3. \u30B5\u30F3\u30D7\u30EB SOQL \u3092\u5B9F\u884C: GET /services/data/v60.0/query?q=SELECT+Id,Name,Industry+FROM+Account+LIMIT+5 \u3067\u30A2\u30AF\u30BB\u30B9\u53EF\u5426\u3068\u30C7\u30FC\u30BF\u69CB\u9020\u3092\u78BA\u8A8D`
86253
+ }
86254
+ });
86255
+
86256
+ // ../connectors/src/connectors/salesforce/parameters.ts
86257
+ var parameters62 = {
86258
+ username: new ParameterDefinition({
86259
+ slug: "username",
86260
+ name: "Username",
86261
+ description: "Your Salesforce account username (the email you use to sign in).",
86262
+ envVarBaseKey: "SALESFORCE_USERNAME",
86263
+ type: "text",
86264
+ secret: false,
86265
+ required: true
86266
+ }),
86267
+ password: new ParameterDefinition({
86268
+ slug: "password",
86269
+ name: "Password",
86270
+ description: "Your Salesforce account password concatenated with your security token (password + securityToken). The security token is emailed to you when you reset it from Settings \u2192 My Personal Information \u2192 Reset My Security Token.",
86271
+ envVarBaseKey: "SALESFORCE_PASSWORD",
86272
+ type: "text",
86273
+ secret: true,
86274
+ required: true
86275
+ }),
86276
+ clientId: new ParameterDefinition({
86277
+ slug: "client-id",
86278
+ name: "Consumer Key",
86279
+ description: "The Consumer Key (client_id) of your Salesforce Connected App. Enable OAuth Settings and 'Allow OAuth Username-Password Flows' in your org's identity settings.",
86280
+ envVarBaseKey: "SALESFORCE_CLIENT_ID",
86281
+ type: "text",
86282
+ secret: false,
86283
+ required: true
86284
+ }),
86285
+ clientSecret: new ParameterDefinition({
86286
+ slug: "client-secret",
86287
+ name: "Consumer Secret",
86288
+ description: "The Consumer Secret (client_secret) of your Salesforce Connected App.",
86289
+ envVarBaseKey: "SALESFORCE_CLIENT_SECRET",
86290
+ type: "text",
86291
+ secret: true,
86292
+ required: true
86293
+ }),
86294
+ isSandbox: new ParameterDefinition({
86295
+ slug: "is-sandbox",
86296
+ name: "Use Sandbox",
86297
+ description: 'Set to "true" to authenticate against a Salesforce sandbox (test.salesforce.com) instead of production (login.salesforce.com). Defaults to "false".',
86298
+ envVarBaseKey: "SALESFORCE_IS_SANDBOX",
86299
+ type: "text",
86300
+ secret: false,
86301
+ required: false
86302
+ })
86303
+ };
86304
+
86305
+ // ../connectors/src/connectors/salesforce/tools/request.ts
86306
+ import { z as z77 } from "zod";
86307
+ var REQUEST_TIMEOUT_MS59 = 6e4;
86308
+ var inputSchema75 = z77.object({
86309
+ toolUseIntent: z77.string().optional().describe(
86310
+ "Brief description of what you intend to accomplish with this tool call"
86311
+ ),
86312
+ connectionId: z77.string().describe("ID of the Salesforce connection to use"),
86313
+ method: z77.enum(["GET", "POST", "PATCH", "DELETE"]).describe(
86314
+ "HTTP method. GET for reading resources and SOQL queries, POST for creating, PATCH for updating, DELETE for removing."
86315
+ ),
86316
+ path: z77.string().describe(
86317
+ "API path appended to the instance URL (e.g., '/services/data/v60.0/sobjects/Account', '/services/data/v60.0/query?q=SELECT+Id,Name+FROM+Account+LIMIT+5'). Always start the path with '/services/data/'."
86318
+ ),
86319
+ body: z77.record(z77.string(), z77.unknown()).optional().describe("Request body (JSON) for POST/PATCH requests")
86320
+ });
86321
+ var outputSchema75 = z77.discriminatedUnion("success", [
86322
+ z77.object({
86323
+ success: z77.literal(true),
86324
+ status: z77.number(),
86325
+ data: z77.record(z77.string(), z77.unknown())
86326
+ }),
86327
+ z77.object({
86328
+ success: z77.literal(false),
86329
+ error: z77.string()
86330
+ })
86331
+ ]);
86332
+ var requestTool47 = new ConnectorTool({
86333
+ name: "request",
86334
+ description: `Send authenticated requests to the Salesforce REST API.
86335
+ Authentication is handled automatically using the OAuth 2.0 username-password flow (Connected App Consumer Key + Secret with the Salesforce account credentials). An access token and instance URL are obtained on each request, so the tool user only provides the API path.
86336
+ Use this tool for all Salesforce interactions: describing sObjects, running SOQL queries (GET /services/data/vXX.X/query?q=...), reading/creating/updating standard (Account, Contact, Opportunity, Lead, Case) and custom objects.
86337
+ Prefer SOQL via the /query endpoint for filtered, joined, or aggregated reads rather than paginating /sobjects/{Type} endpoints.`,
86338
+ inputSchema: inputSchema75,
86339
+ outputSchema: outputSchema75,
86340
+ async execute({ connectionId, method, path: path5, body }, connections) {
86341
+ const connection = connections.find((c6) => c6.id === connectionId);
86342
+ if (!connection) {
86343
+ return {
86344
+ success: false,
86345
+ error: `Connection ${connectionId} not found`
86346
+ };
86347
+ }
86348
+ console.log(
86349
+ `[connector-request] salesforce/${connection.name}: ${method} ${path5}`
86350
+ );
86351
+ try {
86352
+ const username = parameters62.username.getValue(connection);
86353
+ const password = parameters62.password.getValue(connection);
86354
+ const clientId = parameters62.clientId.getValue(connection);
86355
+ const clientSecret = parameters62.clientSecret.getValue(connection);
86356
+ const isSandbox = parameters62.isSandbox.tryGetValue(connection)?.toLowerCase() === "true";
86357
+ const loginHost = isSandbox ? "https://test.salesforce.com" : "https://login.salesforce.com";
86358
+ const tokenBody = new URLSearchParams({
86359
+ grant_type: "password",
86360
+ client_id: clientId,
86361
+ client_secret: clientSecret,
86362
+ username,
86363
+ password
86364
+ });
86365
+ const tokenRes = await fetch(`${loginHost}/services/oauth2/token`, {
86366
+ method: "POST",
86367
+ headers: {
86368
+ "Content-Type": "application/x-www-form-urlencoded"
86369
+ },
86370
+ body: tokenBody.toString()
86371
+ });
86372
+ if (!tokenRes.ok) {
86373
+ const errText = await tokenRes.text().catch(() => "(unreadable body)");
86374
+ return {
86375
+ success: false,
86376
+ error: `Failed to obtain access token: ${tokenRes.status} ${tokenRes.statusText} \u2014 ${errText}`
86377
+ };
86378
+ }
86379
+ const tokenJson = await tokenRes.json();
86380
+ if (!tokenJson.access_token || !tokenJson.instance_url) {
86381
+ return {
86382
+ success: false,
86383
+ error: "access_token or instance_url not found in token response"
86384
+ };
86385
+ }
86386
+ const url = `${tokenJson.instance_url}${path5.startsWith("/") ? "" : "/"}${path5}`;
86387
+ const controller = new AbortController();
86388
+ const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS59);
86389
+ try {
86390
+ const response = await fetch(url, {
86391
+ method,
86392
+ headers: {
86393
+ Authorization: `Bearer ${tokenJson.access_token}`,
86394
+ "Content-Type": "application/json"
86395
+ },
86396
+ body: body ? JSON.stringify(body) : void 0,
86397
+ signal: controller.signal
86398
+ });
86399
+ const text = await response.text();
86400
+ let data;
86401
+ try {
86402
+ data = text ? JSON.parse(text) : {};
86403
+ } catch {
86404
+ data = { raw: text };
86405
+ }
86406
+ if (!response.ok) {
86407
+ let errorMessage = `HTTP ${response.status} ${response.statusText}`;
86408
+ if (Array.isArray(data) && data.length > 0) {
86409
+ const first = data[0];
86410
+ if (first.message) {
86411
+ errorMessage = first.errorCode ? `${first.errorCode}: ${first.message}` : first.message;
86412
+ }
86413
+ } else if (typeof data.message === "string") {
86414
+ errorMessage = data.message;
86415
+ } else if (typeof data.error === "string") {
86416
+ errorMessage = data.error;
86417
+ }
86418
+ return { success: false, error: errorMessage };
86419
+ }
86420
+ return { success: true, status: response.status, data };
86421
+ } finally {
86422
+ clearTimeout(timeout);
86423
+ }
86424
+ } catch (err) {
86425
+ const msg = err instanceof Error ? err.message : String(err);
86426
+ return { success: false, error: msg };
86427
+ }
86428
+ }
86429
+ });
86430
+
86431
+ // ../connectors/src/connectors/salesforce/index.ts
86432
+ var tools62 = { request: requestTool47 };
86433
+ var salesforceConnector = new ConnectorPlugin({
86434
+ slug: "salesforce",
86435
+ authType: AUTH_TYPES.USER_PASSWORD,
86436
+ name: "Salesforce",
86437
+ description: "Connect to Salesforce CRM for accounts, contacts, opportunities, leads, cases, and custom objects via SOQL and the REST API.",
86438
+ iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/6vZlbrUKhxXIiuvWJlb8YB/bbc5e08b88de46c8ed338a74c7d0abb3/salesforce-icon.png",
86439
+ parameters: parameters62,
86440
+ releaseFlag: { dev1: true, dev2: false, prod: false },
86441
+ onboarding: salesforceOnboarding,
86442
+ systemPrompt: {
86443
+ en: `### Tools
86444
+
86445
+ - \`salesforce_request\`: The only way to call the Salesforce REST API. Use it to run SOQL queries, describe sObjects, and read/create/update/delete standard (Account, Contact, Opportunity, Lead, Case) and custom objects. Authentication (OAuth 2.0 username-password flow against the Connected App) is configured automatically \u2014 an access token and the org's instance URL are resolved on each request. Prefer SOQL via \`GET /services/data/v60.0/query?q=...\` over paginating \`/sobjects/{Type}\` endpoints for filtered or joined reads.
86446
+
86447
+ ### Business Logic
86448
+
86449
+ The business logic type for this connector is "typescript". Use the connector SDK in your handler. Do NOT read credentials from environment variables.
86450
+
86451
+ SDK methods (client created via \`connection(connectionId)\`):
86452
+ - \`client.request(path, init?)\` \u2014 low-level authenticated fetch against the Salesforce instance URL
86453
+ - \`client.query(soql)\` \u2014 run a SOQL query and return \`{ totalSize, done, records, nextRecordsUrl? }\`
86454
+ - \`client.queryMore(nextRecordsUrl)\` \u2014 fetch the next page of SOQL results
86455
+ - \`client.describeSObject(objectType)\` \u2014 describe an sObject's metadata
86456
+ - \`client.getRecord(objectType, id, options?)\` \u2014 fetch a single record (optionally restrict fields)
86457
+ - \`client.createRecord(objectType, fields)\` \u2014 create a new record
86458
+ - \`client.updateRecord(objectType, id, fields)\` \u2014 patch an existing record
86459
+ - \`client.deleteRecord(objectType, id)\` \u2014 delete a record
86460
+
86461
+ \`\`\`ts
86462
+ import type { Context } from "hono";
86463
+ import { connection } from "@squadbase/vite-server/connectors/salesforce";
86464
+
86465
+ const salesforce = connection("<connectionId>");
86466
+
86467
+ export default async function handler(c: Context) {
86468
+ const { industry, limit = 50 } = await c.req.json<{
86469
+ industry?: string;
86470
+ limit?: number;
86471
+ }>();
86472
+
86473
+ const where = industry
86474
+ ? \`WHERE Industry = '\${industry.replace(/'/g, "\\\\'")}'\`
86475
+ : "";
86476
+ const soql = \`SELECT Id, Name, Industry, AnnualRevenue FROM Account \${where} ORDER BY AnnualRevenue DESC NULLS LAST LIMIT \${limit}\`;
86477
+
86478
+ const { records } = await salesforce.query<{
86479
+ Id: string;
86480
+ Name: string;
86481
+ Industry: string | null;
86482
+ AnnualRevenue: number | null;
86483
+ }>(soql);
86484
+
86485
+ return c.json({ accounts: records });
86486
+ }
86487
+ \`\`\`
86488
+
86489
+ ### Salesforce REST API Reference
86490
+
86491
+ - Login host: \`https://login.salesforce.com\` (production) or \`https://test.salesforce.com\` (sandbox)
86492
+ - Token endpoint: \`POST /services/oauth2/token\` (grant_type=password + client_id/secret + username/password)
86493
+ - Base path after login: \`{instance_url}/services/data/v60.0\`
86494
+ - Authentication: Bearer token (handled automatically per request)
86495
+ - Pagination (SOQL): follow \`nextRecordsUrl\` from the response (absolute path starting with \`/services/data/v60.0/query/...\`)
86496
+
86497
+ #### Common Endpoints
86498
+ - GET \`/services/data/\` \u2014 List available API versions
86499
+ - GET \`/services/data/v60.0/sobjects/\` \u2014 List all sObjects (standard + custom)
86500
+ - GET \`/services/data/v60.0/sobjects/{Type}/describe\` \u2014 Describe an sObject (fields, relationships, picklists)
86501
+ - GET \`/services/data/v60.0/sobjects/{Type}/{id}\` \u2014 Get a record (supports \`?fields=...\`)
86502
+ - POST \`/services/data/v60.0/sobjects/{Type}\` \u2014 Create a record
86503
+ - PATCH \`/services/data/v60.0/sobjects/{Type}/{id}\` \u2014 Update a record
86504
+ - DELETE \`/services/data/v60.0/sobjects/{Type}/{id}\` \u2014 Delete a record
86505
+ - GET \`/services/data/v60.0/query?q={soql}\` \u2014 Run SOQL
86506
+ - GET \`/services/data/v60.0/search?q={sosl}\` \u2014 Run SOSL
86507
+
86508
+ #### SOQL Reference
86509
+ - SELECT column list is required (no \`SELECT *\`)
86510
+ - Filter: \`WHERE\`, \`AND\` / \`OR\`, parent/child relationship fields (e.g., \`Account.Name\`)
86511
+ - Sort: \`ORDER BY field [ASC|DESC] [NULLS FIRST|NULLS LAST]\`
86512
+ - Paginate: \`LIMIT n\`, \`OFFSET m\`; for large result sets, follow \`nextRecordsUrl\` instead of OFFSET
86513
+ - Aggregate: \`GROUP BY\`, \`HAVING\`, \`COUNT()\`, \`SUM()\`, \`AVG()\`, \`MIN()\`, \`MAX()\`
86514
+ - Parent-to-child subquery: \`SELECT Id, Name, (SELECT Id, Email FROM Contacts) FROM Account\``,
86515
+ ja: `### \u30C4\u30FC\u30EB
86516
+
86517
+ - \`salesforce_request\`: Salesforce REST API \u3092\u547C\u3073\u51FA\u3059\u552F\u4E00\u306E\u624B\u6BB5\u3067\u3059\u3002SOQL \u30AF\u30A8\u30EA\u306E\u5B9F\u884C\u3001sObject \u306E describe\u3001\u6A19\u6E96\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\uFF08Account, Contact, Opportunity, Lead, Case\uFF09\u3084\u30AB\u30B9\u30BF\u30E0\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u8AAD\u307F\u66F8\u304D\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002\u8A8D\u8A3C\uFF08Connected App + OAuth 2.0 Username-Password Flow\uFF09\u306F\u81EA\u52D5\u3067\u884C\u308F\u308C\u3001\u30EA\u30AF\u30A8\u30B9\u30C8\u3054\u3068\u306B\u30A2\u30AF\u30BB\u30B9\u30C8\u30FC\u30AF\u30F3\u3068\u7D44\u7E54\u306E instance URL \u304C\u89E3\u6C7A\u3055\u308C\u307E\u3059\u3002\u30D5\u30A3\u30EB\u30BF\u3084\u7D50\u5408\u306E\u3042\u308B\u8AAD\u307F\u53D6\u308A\u3067\u306F \`/sobjects/{Type}\` \u3092\u30DA\u30FC\u30B8\u30F3\u30B0\u3059\u308B\u306E\u3067\u306F\u306A\u304F\u3001\`GET /services/data/v60.0/query?q=...\` \u306E SOQL \u3092\u512A\u5148\u3057\u3066\u304F\u3060\u3055\u3044\u3002
86518
+
86519
+ ### Business Logic
86520
+
86521
+ \u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "typescript" \u3067\u3059\u3002\u30CF\u30F3\u30C9\u30E9\u5185\u3067\u306F\u30B3\u30CD\u30AF\u30BF SDK \u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u74B0\u5883\u5909\u6570\u304B\u3089\u8A8D\u8A3C\u60C5\u5831\u3092\u8AAD\u307F\u53D6\u3089\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002
86522
+
86523
+ SDK\u30E1\u30BD\u30C3\u30C9 (\`connection(connectionId)\` \u3067\u4F5C\u6210\u3057\u305F\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8):
86524
+ - \`client.request(path, init?)\` \u2014 Salesforce \u306E instance URL \u306B\u5BFE\u3059\u308B\u4F4E\u30EC\u30D9\u30EB\u306E\u8A8D\u8A3C\u4ED8\u304D fetch
86525
+ - \`client.query(soql)\` \u2014 SOQL \u30AF\u30A8\u30EA\u3092\u5B9F\u884C\u3057 \`{ totalSize, done, records, nextRecordsUrl? }\` \u3092\u8FD4\u5374
86526
+ - \`client.queryMore(nextRecordsUrl)\` \u2014 SOQL \u7D50\u679C\u306E\u6B21\u30DA\u30FC\u30B8\u3092\u53D6\u5F97
86527
+ - \`client.describeSObject(objectType)\` \u2014 sObject \u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u3092\u53D6\u5F97
86528
+ - \`client.getRecord(objectType, id, options?)\` \u2014 1 \u4EF6\u306E\u30EC\u30B3\u30FC\u30C9\u3092\u53D6\u5F97\uFF08\u4EFB\u610F\u3067\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u6307\u5B9A\uFF09
86529
+ - \`client.createRecord(objectType, fields)\` \u2014 \u30EC\u30B3\u30FC\u30C9\u3092\u65B0\u898F\u4F5C\u6210
86530
+ - \`client.updateRecord(objectType, id, fields)\` \u2014 \u65E2\u5B58\u30EC\u30B3\u30FC\u30C9\u3092\u66F4\u65B0\uFF08PATCH\uFF09
86531
+ - \`client.deleteRecord(objectType, id)\` \u2014 \u30EC\u30B3\u30FC\u30C9\u3092\u524A\u9664
86532
+
86533
+ \`\`\`ts
86534
+ import type { Context } from "hono";
86535
+ import { connection } from "@squadbase/vite-server/connectors/salesforce";
86536
+
86537
+ const salesforce = connection("<connectionId>");
86538
+
86539
+ export default async function handler(c: Context) {
86540
+ const { industry, limit = 50 } = await c.req.json<{
86541
+ industry?: string;
86542
+ limit?: number;
86543
+ }>();
86544
+
86545
+ const where = industry
86546
+ ? \`WHERE Industry = '\${industry.replace(/'/g, "\\\\'")}'\`
86547
+ : "";
86548
+ const soql = \`SELECT Id, Name, Industry, AnnualRevenue FROM Account \${where} ORDER BY AnnualRevenue DESC NULLS LAST LIMIT \${limit}\`;
86549
+
86550
+ const { records } = await salesforce.query<{
86551
+ Id: string;
86552
+ Name: string;
86553
+ Industry: string | null;
86554
+ AnnualRevenue: number | null;
86555
+ }>(soql);
86556
+
86557
+ return c.json({ accounts: records });
86558
+ }
86559
+ \`\`\`
86560
+
86561
+ ### Salesforce REST API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
86562
+
86563
+ - \u30ED\u30B0\u30A4\u30F3\u30DB\u30B9\u30C8: \`https://login.salesforce.com\`\uFF08\u672C\u756A\uFF09\u307E\u305F\u306F \`https://test.salesforce.com\`\uFF08Sandbox\uFF09
86564
+ - \u30C8\u30FC\u30AF\u30F3\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8: \`POST /services/oauth2/token\`\uFF08grant_type=password + client_id/secret + username/password\uFF09
86565
+ - \u30ED\u30B0\u30A4\u30F3\u5F8C\u306E\u30D9\u30FC\u30B9\u30D1\u30B9: \`{instance_url}/services/data/v60.0\`
86566
+ - \u8A8D\u8A3C: Bearer \u30C8\u30FC\u30AF\u30F3\uFF08\u30EA\u30AF\u30A8\u30B9\u30C8\u3054\u3068\u306B\u81EA\u52D5\u8A2D\u5B9A\uFF09
86567
+ - \u30DA\u30FC\u30B8\u30CD\u30FC\u30B7\u30E7\u30F3\uFF08SOQL\uFF09: \u30EC\u30B9\u30DD\u30F3\u30B9\u306E \`nextRecordsUrl\`\uFF08\`/services/data/v60.0/query/...\` \u304B\u3089\u59CB\u307E\u308B\u7D76\u5BFE\u30D1\u30B9\uFF09\u3092\u8FBF\u308B
86568
+
86569
+ #### \u4E3B\u8981\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8
86570
+ - GET \`/services/data/\` \u2014 \u5229\u7528\u53EF\u80FD\u306A API \u30D0\u30FC\u30B8\u30E7\u30F3\u4E00\u89A7
86571
+ - GET \`/services/data/v60.0/sobjects/\` \u2014 sObject \u4E00\u89A7\uFF08\u6A19\u6E96 + \u30AB\u30B9\u30BF\u30E0\uFF09
86572
+ - GET \`/services/data/v60.0/sobjects/{Type}/describe\` \u2014 sObject \u306E\u30D5\u30A3\u30FC\u30EB\u30C9\u30FB\u30EA\u30EC\u30FC\u30B7\u30E7\u30F3\u30FB\u30D4\u30C3\u30AF\u30EA\u30B9\u30C8\u3092\u53D6\u5F97
86573
+ - GET \`/services/data/v60.0/sobjects/{Type}/{id}\` \u2014 \u30EC\u30B3\u30FC\u30C9\u53D6\u5F97\uFF08\`?fields=...\` \u3067\u7D5E\u308A\u8FBC\u307F\u53EF\uFF09
86574
+ - POST \`/services/data/v60.0/sobjects/{Type}\` \u2014 \u30EC\u30B3\u30FC\u30C9\u4F5C\u6210
86575
+ - PATCH \`/services/data/v60.0/sobjects/{Type}/{id}\` \u2014 \u30EC\u30B3\u30FC\u30C9\u66F4\u65B0
86576
+ - DELETE \`/services/data/v60.0/sobjects/{Type}/{id}\` \u2014 \u30EC\u30B3\u30FC\u30C9\u524A\u9664
86577
+ - GET \`/services/data/v60.0/query?q={soql}\` \u2014 SOQL \u3092\u5B9F\u884C
86578
+ - GET \`/services/data/v60.0/search?q={sosl}\` \u2014 SOSL \u3092\u5B9F\u884C
86579
+
86580
+ #### SOQL \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
86581
+ - SELECT \u5217\u306E\u660E\u793A\u304C\u5FC5\u9808\uFF08\`SELECT *\` \u306F\u4E0D\u53EF\uFF09
86582
+ - \u30D5\u30A3\u30EB\u30BF: \`WHERE\`\u3001\`AND\` / \`OR\`\u3001\u89AA\u5B50\u30EA\u30EC\u30FC\u30B7\u30E7\u30F3\u53C2\u7167\uFF08\u4F8B: \`Account.Name\`\uFF09
86583
+ - \u4E26\u3073\u66FF\u3048: \`ORDER BY field [ASC|DESC] [NULLS FIRST|NULLS LAST]\`
86584
+ - \u30DA\u30FC\u30B8\u30F3\u30B0: \`LIMIT n\`, \`OFFSET m\`\u3002\u5927\u91CF\u30C7\u30FC\u30BF\u3067\u306F OFFSET \u3067\u306F\u306A\u304F \`nextRecordsUrl\` \u3092\u5229\u7528\u3059\u308B
86585
+ - \u96C6\u8A08: \`GROUP BY\`, \`HAVING\`, \`COUNT()\`, \`SUM()\`, \`AVG()\`, \`MIN()\`, \`MAX()\`
86586
+ - \u89AA\u2192\u5B50\u30B5\u30D6\u30AF\u30A8\u30EA: \`SELECT Id, Name, (SELECT Id, Email FROM Contacts) FROM Account\``
86587
+ },
86588
+ tools: tools62
86589
+ });
86590
+
86591
+ // ../connectors/src/connectors/influxdb/setup.ts
86592
+ var influxdbOnboarding = new ConnectorOnboarding({
86593
+ connectionSetupInstructions: {
86594
+ en: `#### Generate an API Token
86595
+ 1. Sign in to your InfluxDB Cloud / OSS instance
86596
+ 2. Go to Load Data \u2192 API Tokens \u2192 Generate API Token
86597
+ 3. Create an All-Access or Custom token with at least read permission on your target database/bucket
86598
+ 4. Copy the token into the API Token parameter
86599
+
86600
+ #### Confirm the Database (or Bucket) Name
86601
+ - InfluxDB 3: use the database name
86602
+ - InfluxDB 2: use the bucket name (buckets act as databases in the v1/v3 compatibility endpoints)
86603
+
86604
+ #### Organization (InfluxDB 2 only)
86605
+ - If you are on InfluxDB 2, set the Organization parameter to the org that owns the bucket
86606
+ - For InfluxDB 3 Cloud you can leave Organization blank`,
86607
+ ja: `#### API \u30C8\u30FC\u30AF\u30F3\u306E\u767A\u884C
86608
+ 1. InfluxDB Cloud / OSS \u306B\u30B5\u30A4\u30F3\u30A4\u30F3
86609
+ 2. Load Data \u2192 API Tokens \u2192 Generate API Token
86610
+ 3. \u5BFE\u8C61\u306E database / bucket \u306B\u5BFE\u3057\u3066\u6700\u4F4E\u9650 read \u6A29\u9650\u3092\u6301\u3064 All-Access \u307E\u305F\u306F Custom \u30C8\u30FC\u30AF\u30F3\u3092\u4F5C\u6210
86611
+ 4. \u767A\u884C\u3057\u305F\u30C8\u30FC\u30AF\u30F3\u3092 API Token \u30D1\u30E9\u30E1\u30FC\u30BF\u306B\u8CBC\u308A\u4ED8\u3051
86612
+
86613
+ #### Database (\u307E\u305F\u306F Bucket) \u540D\u306E\u78BA\u8A8D
86614
+ - InfluxDB 3: database \u540D\u3092\u4F7F\u7528
86615
+ - InfluxDB 2: bucket \u540D\u3092\u4F7F\u7528\uFF08v1/v3 \u4E92\u63DB\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\u3067\u306F bucket \u304C database \u3068\u3057\u3066\u6271\u308F\u308C\u308B\uFF09
86616
+
86617
+ #### Organization\uFF08InfluxDB 2 \u306E\u307F\uFF09
86618
+ - InfluxDB 2 \u306E\u5834\u5408\u3001bucket \u3092\u4FDD\u6709\u3059\u308B\u7D44\u7E54\u540D\u3092 Organization \u30D1\u30E9\u30E1\u30FC\u30BF\u306B\u8A2D\u5B9A
86619
+ - InfluxDB 3 Cloud \u306E\u5834\u5408\u306F\u7A7A\u306E\u307E\u307E\u3067\u554F\u984C\u306A\u3044`
86620
+ },
86621
+ dataOverviewInstructions: {
86622
+ en: `1. For InfluxDB 3: call influxdb_request with POST /api/v3/query_sql, body { "db": "<database>", "q": "SHOW TABLES" } to list measurements
86623
+ 2. For InfluxDB 3: inspect a sample measurement with POST /api/v3/query_sql, body { "db": "<database>", "q": "SELECT * FROM <measurement> ORDER BY time DESC LIMIT 5" }
86624
+ 3. For InfluxDB 2: call influxdb_request with POST /api/v2/query?org=<org>, contentType 'application/vnd.flux', body 'buckets()' to list buckets, then 'from(bucket:"<bucket>") |> range(start: -1h) |> limit(n:5)' to inspect data`,
86625
+ ja: `1. InfluxDB 3 \u306E\u5834\u5408: influxdb_request \u3067 POST /api/v3/query_sql\u3001body { "db": "<database>", "q": "SHOW TABLES" } \u3092\u5B9F\u884C\u3057 measurement \u4E00\u89A7\u3092\u53D6\u5F97
86626
+ 2. InfluxDB 3 \u306E\u5834\u5408: POST /api/v3/query_sql\u3001body { "db": "<database>", "q": "SELECT * FROM <measurement> ORDER BY time DESC LIMIT 5" } \u3067\u4EE3\u8868\u7684\u306A measurement \u306E\u69CB\u9020\u3092\u78BA\u8A8D
86627
+ 3. InfluxDB 2 \u306E\u5834\u5408: POST /api/v2/query?org=<org>\u3001contentType 'application/vnd.flux'\u3001body 'buckets()' \u3067 bucket \u4E00\u89A7\u3092\u53D6\u5F97\u3057\u3001\u7D9A\u3044\u3066 'from(bucket:"<bucket>") |> range(start: -1h) |> limit(n:5)' \u3067\u30C7\u30FC\u30BF\u3092\u78BA\u8A8D`
86628
+ }
86629
+ });
86630
+
86631
+ // ../connectors/src/connectors/influxdb/parameters.ts
86632
+ var parameters63 = {
86633
+ url: new ParameterDefinition({
86634
+ slug: "url",
86635
+ name: "InfluxDB URL",
86636
+ description: "The base URL of your InfluxDB instance (e.g., 'https://us-east-1-1.aws.cloud2.influxdata.com' for InfluxDB Cloud). Do not include a trailing slash.",
86637
+ envVarBaseKey: "INFLUXDB_URL",
86638
+ type: "text",
86639
+ secret: false,
86640
+ required: true
86641
+ }),
86642
+ token: new ParameterDefinition({
86643
+ slug: "token",
86644
+ name: "API Token",
86645
+ description: "The API token used to authenticate against your InfluxDB instance. Generate one from the InfluxDB UI (Load Data \u2192 API Tokens).",
86646
+ envVarBaseKey: "INFLUXDB_TOKEN",
86647
+ type: "text",
86648
+ secret: true,
86649
+ required: true
86650
+ }),
86651
+ database: new ParameterDefinition({
86652
+ slug: "database",
86653
+ name: "Database",
86654
+ description: "The default database to query. For InfluxDB 3 this is the database name; for InfluxDB 2 use the bucket name.",
86655
+ envVarBaseKey: "INFLUXDB_DATABASE",
86656
+ type: "text",
86657
+ secret: false,
86658
+ required: true
86659
+ }),
86660
+ org: new ParameterDefinition({
86661
+ slug: "org",
86662
+ name: "Organization",
86663
+ description: "The InfluxDB organization name. Required for InfluxDB 2.x Flux queries and writes; optional for InfluxDB 3.",
86664
+ envVarBaseKey: "INFLUXDB_ORG",
86665
+ type: "text",
86666
+ secret: false,
86667
+ required: false
86668
+ })
86669
+ };
86670
+
86671
+ // ../connectors/src/connectors/influxdb/tools/request.ts
86672
+ import { z as z78 } from "zod";
86673
+ var REQUEST_TIMEOUT_MS60 = 6e4;
86674
+ var inputSchema76 = z78.object({
86675
+ toolUseIntent: z78.string().optional().describe(
86676
+ "Brief description of what you intend to accomplish with this tool call"
86677
+ ),
86678
+ connectionId: z78.string().describe("ID of the InfluxDB connection to use"),
86679
+ method: z78.enum(["GET", "POST", "DELETE"]).describe(
86680
+ "HTTP method. POST for SQL/InfluxQL/Flux queries and writes, GET for metadata endpoints, DELETE for delete endpoints."
86681
+ ),
86682
+ path: z78.string().describe(
86683
+ "API path appended to the InfluxDB base URL. Use '/api/v3/query_sql' for InfluxDB 3 SQL, '/api/v3/query_influxql' for InfluxDB 3 InfluxQL, '/api/v2/query?org={org}' for InfluxDB 2 Flux, '/api/v2/write?org={org}&bucket={bucket}' for writes."
86684
+ ),
86685
+ body: z78.union([z78.record(z78.string(), z78.unknown()), z78.string()]).optional().describe(
86686
+ "Request body. JSON object for query endpoints ({ db, q } for InfluxDB 3 SQL; { query, type } for v2 query); raw string for Flux queries and line-protocol writes."
86687
+ ),
86688
+ contentType: z78.string().optional().describe(
86689
+ "Content-Type header override. Use 'application/vnd.flux' for Flux queries and 'text/plain; charset=utf-8' for line-protocol writes. Defaults to 'application/json'."
86690
+ )
86691
+ });
86692
+ var outputSchema76 = z78.discriminatedUnion("success", [
86693
+ z78.object({
86694
+ success: z78.literal(true),
86695
+ status: z78.number(),
86696
+ data: z78.unknown()
86697
+ }),
86698
+ z78.object({
86699
+ success: z78.literal(false),
86700
+ error: z78.string()
86701
+ })
86702
+ ]);
86703
+ var requestTool48 = new ConnectorTool({
86704
+ name: "request",
86705
+ description: `Send authenticated requests to the InfluxDB HTTP API.
86706
+ Authentication is handled automatically using the API token (\`Authorization: Token {token}\`). The instance URL is resolved from the connection.
86707
+ Use this tool for all InfluxDB interactions: running SQL / InfluxQL / Flux queries, writing line protocol, and managing buckets / databases.
86708
+ For read-only data exploration prefer SQL (InfluxDB 3) or InfluxQL queries \u2014 they return JSON that is straightforward to parse. Flux queries return annotated CSV.`,
86709
+ inputSchema: inputSchema76,
86710
+ outputSchema: outputSchema76,
86711
+ async execute({ connectionId, method, path: path5, body, contentType }, connections) {
86712
+ const connection = connections.find((c6) => c6.id === connectionId);
86713
+ if (!connection) {
86714
+ return {
86715
+ success: false,
86716
+ error: `Connection ${connectionId} not found`
86717
+ };
86718
+ }
86719
+ console.log(
86720
+ `[connector-request] influxdb/${connection.name}: ${method} ${path5}`
86721
+ );
86722
+ try {
86723
+ const url = parameters63.url.getValue(connection).replace(/\/$/, "");
86724
+ const token = parameters63.token.getValue(connection);
86725
+ const fullUrl = `${url}${path5.startsWith("/") ? "" : "/"}${path5}`;
86726
+ const controller = new AbortController();
86727
+ const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS60);
86728
+ const resolvedContentType = contentType ?? (typeof body === "string" ? "text/plain; charset=utf-8" : "application/json");
86729
+ const serializedBody = body === void 0 ? void 0 : typeof body === "string" ? body : JSON.stringify(body);
86730
+ try {
86731
+ const response = await fetch(fullUrl, {
86732
+ method,
86733
+ headers: {
86734
+ Authorization: `Token ${token}`,
86735
+ "Content-Type": resolvedContentType,
86736
+ Accept: "application/json"
86737
+ },
86738
+ body: serializedBody,
86739
+ signal: controller.signal
86740
+ });
86741
+ const text = await response.text();
86742
+ let data;
86743
+ const resContentType = response.headers.get("content-type") ?? "";
86744
+ if (resContentType.includes("application/json")) {
86745
+ try {
86746
+ data = text ? JSON.parse(text) : null;
86747
+ } catch {
86748
+ data = { raw: text };
86749
+ }
86750
+ } else {
86751
+ data = text;
86752
+ }
86753
+ if (!response.ok) {
86754
+ let errorMessage = `HTTP ${response.status} ${response.statusText}`;
86755
+ if (data && typeof data === "object" && !Array.isArray(data) && typeof data.message === "string") {
86756
+ errorMessage = data.message;
86757
+ } else if (typeof data === "string" && data) {
86758
+ errorMessage = data;
86759
+ }
86760
+ return { success: false, error: errorMessage };
86761
+ }
86762
+ return { success: true, status: response.status, data };
86763
+ } finally {
86764
+ clearTimeout(timeout);
86765
+ }
86766
+ } catch (err) {
86767
+ const msg = err instanceof Error ? err.message : String(err);
86768
+ return { success: false, error: msg };
86769
+ }
86770
+ }
86771
+ });
86772
+
86773
+ // ../connectors/src/connectors/influxdb/index.ts
86774
+ var tools63 = { request: requestTool48 };
86775
+ var influxdbConnector = new ConnectorPlugin({
86776
+ slug: "influxdb",
86777
+ authType: AUTH_TYPES.API_KEY,
86778
+ name: "InfluxDB",
86779
+ description: "Connect to InfluxDB (Cloud or OSS) to query time-series data with SQL, InfluxQL, or Flux and to write line protocol.",
86780
+ iconUrl: "https://upload.wikimedia.org/wikipedia/commons/b/b2/Influxdb_logo.svg",
86781
+ parameters: parameters63,
86782
+ releaseFlag: { dev1: true, dev2: false, prod: false },
86783
+ onboarding: influxdbOnboarding,
86784
+ systemPrompt: {
86785
+ en: `### Tools
86786
+
86787
+ - \`influxdb_request\`: The only way to call the InfluxDB HTTP API. Use it to run SQL / InfluxQL / Flux queries, write line protocol, and inspect buckets / databases. Authentication (\`Authorization: Token {token}\`) and the instance URL are configured automatically. For InfluxDB 3 prefer SQL (\`POST /api/v3/query_sql\`) \u2014 it returns JSON rows that are directly usable. For InfluxDB 2 use Flux (\`POST /api/v2/query?org={org}\`) \u2014 the response is annotated CSV. Writes use \`POST /api/v3/write_lp?db={db}\` (v3) or \`POST /api/v2/write?org={org}&bucket={bucket}\` (v2) with a line-protocol body and \`contentType\` set to \`text/plain; charset=utf-8\`.
86788
+
86789
+ ### Business Logic
86790
+
86791
+ The business logic type for this connector is "typescript". Use the connector SDK in your handler. Do NOT read credentials from environment variables.
86792
+
86793
+ SDK methods (client created via \`connection(connectionId)\`):
86794
+ - \`client.request(path, init?)\` \u2014 low-level authenticated fetch against the InfluxDB base URL
86795
+ - \`client.querySql<T>(sql, options?)\` \u2014 InfluxDB 3 SQL query; returns an array of row objects, defaults \`db\` to the configured database
86796
+ - \`client.queryInfluxql<T>(influxql, options?)\` \u2014 InfluxDB 3 InfluxQL query; same shape as \`querySql\`
86797
+ - \`client.queryFlux(flux, options?)\` \u2014 InfluxDB 2 Flux query; returns raw annotated CSV (parse as needed)
86798
+ - \`client.writeLineProtocol(lineProtocol, options?)\` \u2014 append-only write; uses v3 or v2 endpoint depending on whether \`org\` is configured
86799
+ - \`client.database\` / \`client.org\` \u2014 connection-level defaults
86800
+
86801
+ \`\`\`ts
86802
+ import type { Context } from "hono";
86803
+ import { connection } from "@squadbase/vite-server/connectors/influxdb";
86804
+
86805
+ const influx = connection("<connectionId>");
86806
+
86807
+ export default async function handler(c: Context) {
86808
+ const { measurement = "cpu", limit = 60 } = await c.req.json<{
86809
+ measurement?: string;
86810
+ limit?: number;
86811
+ }>();
86812
+
86813
+ const rows = await influx.querySql<{
86814
+ time: string;
86815
+ usage_user: number;
86816
+ host: string;
86817
+ }>(
86818
+ \`SELECT time, usage_user, host FROM \${measurement} ORDER BY time DESC LIMIT \${limit}\`,
86819
+ );
86820
+
86821
+ return c.json({ series: rows });
86822
+ }
86823
+ \`\`\`
86824
+
86825
+ ### InfluxDB HTTP API Reference
86826
+
86827
+ - Base URL: the \`url\` parameter (e.g., \`https://us-east-1-1.aws.cloud2.influxdata.com\`)
86828
+ - Authentication: \`Authorization: Token {token}\` (handled automatically)
86829
+ - Response content types: \`application/json\` for SQL/InfluxQL, annotated CSV for Flux
86830
+
86831
+ #### InfluxDB 3 Endpoints
86832
+ - POST \`/api/v3/query_sql\` \u2014 Body: \`{ "db": "<database>", "q": "<sql>" }\` \u2192 JSON rows
86833
+ - POST \`/api/v3/query_influxql\` \u2014 Body: \`{ "db": "<database>", "q": "<influxql>" }\` \u2192 JSON rows
86834
+ - POST \`/api/v3/write_lp?db=<database>&precision=ns\` \u2014 Body: raw line protocol
86835
+ - GET \`/api/v3/configure/database\` \u2014 List databases
86836
+
86837
+ #### InfluxDB 2 Endpoints
86838
+ - POST \`/api/v2/query?org=<org>\` \u2014 Body: Flux script (Content-Type: \`application/vnd.flux\`) \u2192 annotated CSV
86839
+ - POST \`/api/v2/write?org=<org>&bucket=<bucket>&precision=ns\` \u2014 Body: raw line protocol
86840
+ - GET \`/api/v2/buckets?org=<org>\` \u2014 List buckets
86841
+ - GET \`/api/v2/orgs\` \u2014 List organizations
86842
+
86843
+ #### SQL Reference (InfluxDB 3)
86844
+ - \`SELECT field_list FROM measurement WHERE time >= now() - INTERVAL '1 hour' AND tag = 'x' ORDER BY time DESC LIMIT 100\`
86845
+ - Time filtering uses standard SQL \`time\` column comparisons (\`time >= now() - INTERVAL '...' \`)
86846
+ - Aggregates: \`AVG\`, \`SUM\`, \`MIN\`, \`MAX\`, \`COUNT\`; bucket time with \`date_bin('5 minutes', time)\`
86847
+ - List measurements: \`SHOW TABLES\`; list columns: \`SHOW COLUMNS FROM <measurement>\``,
86848
+ ja: `### \u30C4\u30FC\u30EB
86849
+
86850
+ - \`influxdb_request\`: InfluxDB HTTP API \u3092\u547C\u3073\u51FA\u3059\u552F\u4E00\u306E\u624B\u6BB5\u3067\u3059\u3002SQL / InfluxQL / Flux \u30AF\u30A8\u30EA\u306E\u5B9F\u884C\u3001line protocol \u66F8\u304D\u8FBC\u307F\u3001bucket / database \u306E\u78BA\u8A8D\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002\u8A8D\u8A3C\uFF08\`Authorization: Token {token}\`\uFF09\u3068 instance URL \u306F\u81EA\u52D5\u3067\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002InfluxDB 3 \u3067\u306F SQL (\`POST /api/v3/query_sql\`) \u304C JSON \u884C\u3092\u8FD4\u3059\u305F\u3081\u6700\u3082\u6271\u3044\u3084\u3059\u3044\u3067\u3059\u3002InfluxDB 2 \u3067\u306F Flux (\`POST /api/v2/query?org={org}\`) \u3092\u4F7F\u7528\u3057\u3001\u30EC\u30B9\u30DD\u30F3\u30B9\u306F\u6CE8\u91C8\u4ED8\u304D CSV \u3067\u3059\u3002\u66F8\u304D\u8FBC\u307F\u306F \`POST /api/v3/write_lp?db={db}\` (v3) \u307E\u305F\u306F \`POST /api/v2/write?org={org}&bucket={bucket}\` (v2) \u306B line protocol \u3092\u9001\u308A\u307E\u3059\uFF08\`contentType\` \u306F \`text/plain; charset=utf-8\`\uFF09\u3002
86851
+
86852
+ ### Business Logic
86853
+
86854
+ \u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "typescript" \u3067\u3059\u3002\u30CF\u30F3\u30C9\u30E9\u5185\u3067\u306F\u30B3\u30CD\u30AF\u30BF SDK \u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u74B0\u5883\u5909\u6570\u304B\u3089\u8A8D\u8A3C\u60C5\u5831\u3092\u8AAD\u307F\u53D6\u3089\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002
86855
+
86856
+ SDK\u30E1\u30BD\u30C3\u30C9 (\`connection(connectionId)\` \u3067\u4F5C\u6210\u3057\u305F\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8):
86857
+ - \`client.request(path, init?)\` \u2014 InfluxDB \u30D9\u30FC\u30B9 URL \u306B\u5BFE\u3059\u308B\u4F4E\u30EC\u30D9\u30EB\u306E\u8A8D\u8A3C\u4ED8\u304D fetch
86858
+ - \`client.querySql<T>(sql, options?)\` \u2014 InfluxDB 3 \u306E SQL \u30AF\u30A8\u30EA\u3002\u884C\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u914D\u5217\u3092\u8FD4\u5374\u3057\u3001\`db\` \u306F\u65E2\u5B9A\u3067\u63A5\u7D9A\u306E database
86859
+ - \`client.queryInfluxql<T>(influxql, options?)\` \u2014 InfluxDB 3 \u306E InfluxQL \u30AF\u30A8\u30EA\uFF08\`querySql\` \u3068\u540C\u3058\u5F62\u5F0F\uFF09
86860
+ - \`client.queryFlux(flux, options?)\` \u2014 InfluxDB 2 \u306E Flux \u30AF\u30A8\u30EA\u3002\u6CE8\u91C8\u4ED8\u304D CSV \u3092\u6587\u5B57\u5217\u3067\u8FD4\u5374\uFF08\u5FC5\u8981\u306B\u5FDC\u3058\u3066\u30D1\u30FC\u30B9\uFF09
86861
+ - \`client.writeLineProtocol(lineProtocol, options?)\` \u2014 append-only \u66F8\u304D\u8FBC\u307F\u3002\`org\` \u306E\u6709\u7121\u3067 v3 / v2 \u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\u3092\u5207\u308A\u66FF\u3048
86862
+ - \`client.database\` / \`client.org\` \u2014 \u63A5\u7D9A\u5358\u4F4D\u306E\u30C7\u30D5\u30A9\u30EB\u30C8\u5024
86863
+
86864
+ \`\`\`ts
86865
+ import type { Context } from "hono";
86866
+ import { connection } from "@squadbase/vite-server/connectors/influxdb";
86867
+
86868
+ const influx = connection("<connectionId>");
86869
+
86870
+ export default async function handler(c: Context) {
86871
+ const { measurement = "cpu", limit = 60 } = await c.req.json<{
86872
+ measurement?: string;
86873
+ limit?: number;
86874
+ }>();
86875
+
86876
+ const rows = await influx.querySql<{
86877
+ time: string;
86878
+ usage_user: number;
86879
+ host: string;
86880
+ }>(
86881
+ \`SELECT time, usage_user, host FROM \${measurement} ORDER BY time DESC LIMIT \${limit}\`,
86882
+ );
86883
+
86884
+ return c.json({ series: rows });
86885
+ }
86886
+ \`\`\`
86887
+
86888
+ ### InfluxDB HTTP API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
86889
+
86890
+ - \u30D9\u30FC\u30B9 URL: \`url\` \u30D1\u30E9\u30E1\u30FC\u30BF\u3067\u6307\u5B9A\uFF08\u4F8B: \`https://us-east-1-1.aws.cloud2.influxdata.com\`\uFF09
86891
+ - \u8A8D\u8A3C: \`Authorization: Token {token}\`\uFF08\u81EA\u52D5\u8A2D\u5B9A\uFF09
86892
+ - \u30EC\u30B9\u30DD\u30F3\u30B9\u5F62\u5F0F: SQL/InfluxQL \u306F JSON\u3001Flux \u306F\u6CE8\u91C8\u4ED8\u304D CSV
86893
+
86894
+ #### InfluxDB 3 \u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8
86895
+ - POST \`/api/v3/query_sql\` \u2014 Body: \`{ "db": "<database>", "q": "<sql>" }\` \u2192 JSON \u884C
86896
+ - POST \`/api/v3/query_influxql\` \u2014 Body: \`{ "db": "<database>", "q": "<influxql>" }\` \u2192 JSON \u884C
86897
+ - POST \`/api/v3/write_lp?db=<database>&precision=ns\` \u2014 Body: line protocol \u751F\u6587\u5B57\u5217
86898
+ - GET \`/api/v3/configure/database\` \u2014 database \u4E00\u89A7
86899
+
86900
+ #### InfluxDB 2 \u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8
86901
+ - POST \`/api/v2/query?org=<org>\` \u2014 Body: Flux \u30B9\u30AF\u30EA\u30D7\u30C8\uFF08Content-Type: \`application/vnd.flux\`\uFF09\u2192 \u6CE8\u91C8\u4ED8\u304D CSV
86902
+ - POST \`/api/v2/write?org=<org>&bucket=<bucket>&precision=ns\` \u2014 Body: line protocol \u751F\u6587\u5B57\u5217
86903
+ - GET \`/api/v2/buckets?org=<org>\` \u2014 bucket \u4E00\u89A7
86904
+ - GET \`/api/v2/orgs\` \u2014 organization \u4E00\u89A7
86905
+
86906
+ #### SQL \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9 (InfluxDB 3)
86907
+ - \`SELECT field_list FROM measurement WHERE time >= now() - INTERVAL '1 hour' AND tag = 'x' ORDER BY time DESC LIMIT 100\`
86908
+ - \u6642\u523B\u30D5\u30A3\u30EB\u30BF\u306F\u6A19\u6E96 SQL \u306E \`time\` \u5217\u6BD4\u8F03\uFF08\`time >= now() - INTERVAL '...'\`\uFF09
86909
+ - \u96C6\u8A08: \`AVG\`, \`SUM\`, \`MIN\`, \`MAX\`, \`COUNT\`\u3002\u6642\u9593\u30D0\u30B1\u30C3\u30C8: \`date_bin('5 minutes', time)\`
86910
+ - measurement \u4E00\u89A7: \`SHOW TABLES\`\u3001\u5217\u4E00\u89A7: \`SHOW COLUMNS FROM <measurement>\``
86911
+ },
86912
+ tools: tools63
86913
+ });
86914
+
86356
86915
  // ../connectors/src/connectors/registry.ts
86357
86916
  var plugins = {
86358
86917
  snowflake: snowflakeConnector,
@@ -86415,7 +86974,9 @@ var plugins = {
86415
86974
  grafana: grafanaConnector,
86416
86975
  backlog: backlogConnector,
86417
86976
  gamma: gammaConnector,
86418
- sentry: sentryConnector
86977
+ sentry: sentryConnector,
86978
+ salesforce: salesforceConnector,
86979
+ influxdb: influxdbConnector
86419
86980
  };
86420
86981
  var connectors = {
86421
86982
  ...plugins,
@@ -86642,62 +87203,62 @@ import { watch as fsWatch2 } from "fs";
86642
87203
  import path2 from "path";
86643
87204
 
86644
87205
  // src/types/server-logic.ts
86645
- import { z as z77 } from "zod";
86646
- var parameterMetaSchema = z77.object({
86647
- name: z77.string(),
86648
- type: z77.enum(["string", "number", "boolean"]),
86649
- description: z77.string(),
86650
- required: z77.boolean().optional(),
86651
- default: z77.union([z77.string(), z77.number(), z77.boolean()]).optional()
86652
- });
86653
- var serverLogicCacheConfigSchema = z77.object({
86654
- ttl: z77.number(),
86655
- staleWhileRevalidate: z77.boolean().optional()
86656
- });
86657
- var serverLogicSchemaObjectSchema = z77.lazy(
86658
- () => z77.object({
86659
- type: z77.enum(["string", "number", "integer", "boolean", "object", "array", "null"]).optional(),
86660
- format: z77.string().optional(),
86661
- description: z77.string().optional(),
86662
- nullable: z77.boolean().optional(),
86663
- enum: z77.array(z77.union([z77.string(), z77.number(), z77.boolean(), z77.null()])).optional(),
87206
+ import { z as z79 } from "zod";
87207
+ var parameterMetaSchema = z79.object({
87208
+ name: z79.string(),
87209
+ type: z79.enum(["string", "number", "boolean"]),
87210
+ description: z79.string(),
87211
+ required: z79.boolean().optional(),
87212
+ default: z79.union([z79.string(), z79.number(), z79.boolean()]).optional()
87213
+ });
87214
+ var serverLogicCacheConfigSchema = z79.object({
87215
+ ttl: z79.number(),
87216
+ staleWhileRevalidate: z79.boolean().optional()
87217
+ });
87218
+ var serverLogicSchemaObjectSchema = z79.lazy(
87219
+ () => z79.object({
87220
+ type: z79.enum(["string", "number", "integer", "boolean", "object", "array", "null"]).optional(),
87221
+ format: z79.string().optional(),
87222
+ description: z79.string().optional(),
87223
+ nullable: z79.boolean().optional(),
87224
+ enum: z79.array(z79.union([z79.string(), z79.number(), z79.boolean(), z79.null()])).optional(),
86664
87225
  items: serverLogicSchemaObjectSchema.optional(),
86665
- properties: z77.record(z77.string(), serverLogicSchemaObjectSchema).optional(),
86666
- required: z77.array(z77.string()).optional(),
86667
- additionalProperties: z77.union([z77.boolean(), serverLogicSchemaObjectSchema]).optional(),
86668
- minimum: z77.number().optional(),
86669
- maximum: z77.number().optional(),
86670
- minLength: z77.number().optional(),
86671
- maxLength: z77.number().optional(),
86672
- pattern: z77.string().optional()
87226
+ properties: z79.record(z79.string(), serverLogicSchemaObjectSchema).optional(),
87227
+ required: z79.array(z79.string()).optional(),
87228
+ additionalProperties: z79.union([z79.boolean(), serverLogicSchemaObjectSchema]).optional(),
87229
+ minimum: z79.number().optional(),
87230
+ maximum: z79.number().optional(),
87231
+ minLength: z79.number().optional(),
87232
+ maxLength: z79.number().optional(),
87233
+ pattern: z79.string().optional()
86673
87234
  })
86674
87235
  );
86675
- var serverLogicMediaTypeSchema = z77.object({
87236
+ var serverLogicMediaTypeSchema = z79.object({
86676
87237
  schema: serverLogicSchemaObjectSchema.optional(),
86677
- example: z77.unknown().optional()
87238
+ example: z79.unknown().optional()
86678
87239
  });
86679
- var serverLogicResponseSchema = z77.object({
86680
- description: z77.string().optional(),
86681
- content: z77.record(z77.string(), serverLogicMediaTypeSchema).optional()
87240
+ var serverLogicResponseSchema = z79.object({
87241
+ description: z79.string().optional(),
87242
+ content: z79.record(z79.string(), serverLogicMediaTypeSchema).optional()
86682
87243
  });
86683
87244
  var jsonBaseFields = {
86684
- description: z77.string(),
86685
- parameters: z77.array(parameterMetaSchema).optional(),
87245
+ description: z79.string(),
87246
+ parameters: z79.array(parameterMetaSchema).optional(),
86686
87247
  response: serverLogicResponseSchema.optional(),
86687
87248
  cache: serverLogicCacheConfigSchema.optional()
86688
87249
  };
86689
- var jsonSqlServerLogicSchema = z77.object({
87250
+ var jsonSqlServerLogicSchema = z79.object({
86690
87251
  ...jsonBaseFields,
86691
- type: z77.literal("sql").optional(),
86692
- query: z77.string(),
86693
- connectionId: z77.string()
87252
+ type: z79.literal("sql").optional(),
87253
+ query: z79.string(),
87254
+ connectionId: z79.string()
86694
87255
  });
86695
- var jsonTypeScriptServerLogicSchema = z77.object({
87256
+ var jsonTypeScriptServerLogicSchema = z79.object({
86696
87257
  ...jsonBaseFields,
86697
- type: z77.literal("typescript"),
86698
- handlerPath: z77.string()
87258
+ type: z79.literal("typescript"),
87259
+ handlerPath: z79.string()
86699
87260
  });
86700
- var anyJsonServerLogicSchema = z77.union([
87261
+ var anyJsonServerLogicSchema = z79.union([
86701
87262
  jsonTypeScriptServerLogicSchema,
86702
87263
  jsonSqlServerLogicSchema
86703
87264
  ]);