@squadbase/vite-server 0.1.5-dev.1 → 0.1.7-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -72670,21 +72670,23 @@ await drive.updateFile("fileId123", {}, "newFolderId", "oldFolderId");
72670
72670
  }
72671
72671
  });
72672
72672
 
72673
- // ../connectors/src/connectors/google-sheets/setup.ts
72674
- var googleSheetsOnboarding = new ConnectorOnboarding({
72675
- dataOverviewInstructions: {
72676
- en: `1. Create a new spreadsheet with google-sheets-oauth_request (POST with body { properties: { title: "..." } }) or use an existing spreadsheet ID.
72677
- 2. Call google-sheets-oauth_request with GET /{spreadsheetId} to fetch spreadsheet metadata (sheet names and properties).`,
72678
- ja: `1. google-sheets-oauth_request \u3092 POST\uFF08Body: { properties: { title: "..." } }\uFF09\u3067\u547C\u3073\u51FA\u3057\u3066\u65B0\u3057\u3044\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u3092\u4F5C\u6210\u3059\u308B\u304B\u3001\u65E2\u5B58\u306E\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8ID\u3092\u5229\u7528\u3057\u307E\u3059\u3002
72679
- 2. google-sheets-oauth_request \u3067 GET /{spreadsheetId} \u3092\u547C\u3073\u51FA\u3057\u3001\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\uFF08\u30B7\u30FC\u30C8\u540D\u3068\u30D7\u30ED\u30D1\u30C6\u30A3\uFF09\u3092\u53D6\u5F97\u3057\u307E\u3059\u3002`
72680
- }
72681
- });
72673
+ // ../connectors/src/connectors/google-sheets/tools/request.ts
72674
+ import { z as z27 } from "zod";
72682
72675
 
72683
72676
  // ../connectors/src/connectors/google-sheets/parameters.ts
72684
- var parameters18 = {};
72677
+ var parameters18 = {
72678
+ spreadsheetId: new ParameterDefinition({
72679
+ slug: "spreadsheet-id",
72680
+ name: "Google Sheets Spreadsheet ID",
72681
+ description: "The spreadsheet ID from the Google Sheets URL (the segment between /d/ and /edit in https://docs.google.com/spreadsheets/d/{spreadsheetId}/edit).",
72682
+ envVarBaseKey: "GOOGLE_SHEETS_SPREADSHEET_ID",
72683
+ type: "text",
72684
+ secret: false,
72685
+ required: true
72686
+ })
72687
+ };
72685
72688
 
72686
72689
  // ../connectors/src/connectors/google-sheets/tools/request.ts
72687
- import { z as z27 } from "zod";
72688
72690
  var SHEETS_BASE_URL = "https://sheets.googleapis.com/v4/spreadsheets";
72689
72691
  var REQUEST_TIMEOUT_MS17 = 6e4;
72690
72692
  var cachedToken13 = null;
@@ -72723,11 +72725,10 @@ var inputSchema27 = z27.object({
72723
72725
  "Brief description of what you intend to accomplish with this tool call"
72724
72726
  ),
72725
72727
  connectionId: z27.string().describe("ID of the Google Sheets connection to use"),
72726
- method: z27.enum(["GET", "POST", "PUT"]).describe("HTTP method"),
72728
+ method: z27.enum(["GET"]).describe("HTTP method. Only GET is supported (read-only analysis)."),
72727
72729
  path: z27.string().describe(
72728
- "API path appended to https://sheets.googleapis.com/v4/spreadsheets (e.g., '', '/{spreadsheetId}', '/{spreadsheetId}/values/Sheet1!A1:D10')."
72730
+ "API path appended to https://sheets.googleapis.com/v4/spreadsheets (e.g., '/{spreadsheetId}', '/{spreadsheetId}/values/Sheet1!A1:D10'). The `{spreadsheetId}` placeholder is automatically replaced with the connection's configured spreadsheet ID."
72729
72731
  ),
72730
- body: z27.record(z27.string(), z27.unknown()).optional().describe("JSON request body for POST/PUT requests"),
72731
72732
  queryParams: z27.record(z27.string(), z27.string()).optional().describe("Query parameters to append to the URL")
72732
72733
  });
72733
72734
  var outputSchema27 = z27.discriminatedUnion("success", [
@@ -72743,12 +72744,12 @@ var outputSchema27 = z27.discriminatedUnion("success", [
72743
72744
  ]);
72744
72745
  var requestTool9 = new ConnectorTool({
72745
72746
  name: "request",
72746
- description: `Send authenticated requests to the Google Sheets API v4.
72747
- Supports GET (read), POST (create/append), and PUT (update) methods.
72747
+ description: `Send authenticated GET requests to the Google Sheets API v4 for read-only analysis.
72748
+ The \`{spreadsheetId}\` placeholder in the path is automatically replaced with the connection's configured spreadsheet ID.
72748
72749
  Authentication is handled automatically via OAuth proxy.`,
72749
72750
  inputSchema: inputSchema27,
72750
72751
  outputSchema: outputSchema27,
72751
- async execute({ connectionId, method, path: path4, body, queryParams }, connections, config) {
72752
+ async execute({ connectionId, method, path: path4, queryParams }, connections, config) {
72752
72753
  const connection = connections.find((c6) => c6.id === connectionId);
72753
72754
  if (!connection) {
72754
72755
  return {
@@ -72756,11 +72757,16 @@ Authentication is handled automatically via OAuth proxy.`,
72756
72757
  error: `Connection ${connectionId} not found`
72757
72758
  };
72758
72759
  }
72760
+ const spreadsheetIdParam = connection.parameters.find(
72761
+ (p6) => p6.parameterSlug === parameters18.spreadsheetId.slug
72762
+ );
72763
+ const spreadsheetId = spreadsheetIdParam?.value ?? void 0;
72764
+ const resolvedPath = spreadsheetId ? path4.replace(/\{spreadsheetId\}/g, spreadsheetId) : path4;
72759
72765
  console.log(
72760
- `[connector-request] google-sheets/${connection.name}: ${method} ${path4}`
72766
+ `[connector-request] google-sheets/${connection.name}: ${method} ${resolvedPath}`
72761
72767
  );
72762
72768
  try {
72763
- let url = `${SHEETS_BASE_URL}${path4 === "" || path4.startsWith("/") ? "" : "/"}${path4}`;
72769
+ let url = `${SHEETS_BASE_URL}${resolvedPath === "" || resolvedPath.startsWith("/") ? "" : "/"}${resolvedPath}`;
72764
72770
  if (queryParams) {
72765
72771
  const searchParams = new URLSearchParams(queryParams);
72766
72772
  url += `?${searchParams.toString()}`;
@@ -72778,8 +72784,7 @@ Authentication is handled automatically via OAuth proxy.`,
72778
72784
  },
72779
72785
  body: JSON.stringify({
72780
72786
  url,
72781
- method,
72782
- ...body != null ? { body: JSON.stringify(body) } : {}
72787
+ method
72783
72788
  }),
72784
72789
  signal: controller.signal
72785
72790
  });
@@ -72799,13 +72804,66 @@ Authentication is handled automatically via OAuth proxy.`,
72799
72804
  }
72800
72805
  });
72801
72806
 
72807
+ // ../connectors/src/connectors/google-sheets/setup.ts
72808
+ var requestToolName = `google-sheets-oauth_${requestTool9.name}`;
72809
+ var googleSheetsOnboarding = new ConnectorOnboarding({
72810
+ connectionSetupInstructions: {
72811
+ ja: `\u4EE5\u4E0B\u306E\u624B\u9806\u3067Google Sheets (OAuth) \u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002\u5206\u6790\u5BFE\u8C61\u306E\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306F\u30E6\u30FC\u30B6\u30FC\u304B\u3089\u53D7\u3051\u53D6\u3063\u305FURL\u3067\u6307\u5B9A\u3057\u307E\u3059\uFF08\u65B0\u3057\u3044\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306F\u4F5C\u6210\u3057\u307E\u305B\u3093\uFF09\u3002
72812
+
72813
+ 1. \`askUserQuestion\` \u3067\u5206\u6790\u5BFE\u8C61\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306EURL\u3092\u30D2\u30A2\u30EA\u30F3\u30B0\u3059\u308B:
72814
+ - \`type\`: \`"freeText"\`
72815
+ - \`question\`: \u300C\u5206\u6790\u3057\u305F\u3044Google Sheets\u306EURL\u3092\u8CBC\u308A\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044\u300D
72816
+ - \`placeholder\`: \`"https://docs.google.com/spreadsheets/d/.../edit"\`
72817
+ 2. \u53D7\u3051\u53D6\u3063\u305FURL\u304B\u3089\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8ID\u3092\u62BD\u51FA\u3059\u308B\u3002URL\u306E \`/d/\` \u3068 \`/edit\`\uFF08\u307E\u305F\u306F\u672B\u5C3E\uFF09\u306E\u9593\u306B\u3042\u308B\u6587\u5B57\u5217\u304C\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8ID\u3067\u3059\uFF08\u4F8B: \`https://docs.google.com/spreadsheets/d/1AbCxyz.../edit\` \u2192 \`1AbCxyz...\`\uFF09\u3002URL\u3067\u306F\u306A\u304FID\u3060\u3051\u304C\u6E21\u3055\u308C\u305F\u5834\u5408\u306F\u305D\u306E\u307E\u307E\u5229\u7528\u3057\u307E\u3059\u3002
72818
+ 3. \u62BD\u51FA\u3057\u305FID\u3092 \`updateConnectionParameters\` \u3067\u4FDD\u5B58\u3059\u308B:
72819
+ - \`parameterSlug\`: \`"spreadsheet-id"\`
72820
+ - \`options\`: \`[{ value: <\u62BD\u51FA\u3057\u305FID>, label: <\u540C\u3058\u5024> }]\`\uFF081\u4EF6\u306E\u307F\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u306F\u81EA\u52D5\u9078\u629E\u3055\u308C\u308B\uFF09
72821
+ 4. \`${requestToolName}\` \u3067\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306B\u30A2\u30AF\u30BB\u30B9\u3067\u304D\u308B\u3053\u3068\u3092\u78BA\u8A8D\u3059\u308B:
72822
+ - \`method\`: \`"GET"\`
72823
+ - \`path\`: \`"/{spreadsheetId}"\`
72824
+ 5. \u30A8\u30E9\u30FC\u304C\u8FD4\u3055\u308C\u305F\u5834\u5408\u3001\u4EE5\u4E0B\u3092\u78BA\u8A8D\u3059\u308B\u3088\u3046\u30E6\u30FC\u30B6\u30FC\u306B\u4F1D\u3048\u308B:
72825
+ - OAuth\u3067\u63A5\u7D9A\u3057\u305FGoogle\u30A2\u30AB\u30A6\u30F3\u30C8\u304C\u305D\u306E\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306B\u95B2\u89A7\u6A29\u9650\u3092\u6301\u3063\u3066\u3044\u308B\u304B
72826
+ - \u5165\u529B\u3055\u308C\u305FURL\u304C\u6B63\u3057\u3044\u304B
72827
+
72828
+ #### \u5236\u7D04
72829
+ - **\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u4E2D\u306B\u30BB\u30EB\u5024\u3092\u5927\u91CF\u306B\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
72830
+ - \u30C4\u30FC\u30EB\u9593\u306F1\u6587\u3060\u3051\u66F8\u3044\u3066\u5373\u6B21\u306E\u30C4\u30FC\u30EB\u547C\u3073\u51FA\u3057\u3002\u4E0D\u8981\u306A\u8AAC\u660E\u306F\u7701\u7565\u3057\u3001\u52B9\u7387\u7684\u306B\u9032\u3081\u308B`,
72831
+ en: `Follow these steps to set up the Google Sheets (OAuth) connection. The spreadsheet to analyze is specified by the URL provided by the user (no new spreadsheet is created).
72832
+
72833
+ 1. Call \`askUserQuestion\` to ask for the spreadsheet URL to analyze:
72834
+ - \`type\`: \`"freeText"\`
72835
+ - \`question\`: "Please paste the URL of the Google Sheet you want to analyze"
72836
+ - \`placeholder\`: \`"https://docs.google.com/spreadsheets/d/.../edit"\`
72837
+ 2. Extract the spreadsheet ID from the URL. It is the segment between \`/d/\` and \`/edit\` (or the end of the URL), e.g. \`https://docs.google.com/spreadsheets/d/1AbCxyz.../edit\` \u2192 \`1AbCxyz...\`. If the user pasted just the ID, use it as-is.
72838
+ 3. Save the extracted ID via \`updateConnectionParameters\`:
72839
+ - \`parameterSlug\`: \`"spreadsheet-id"\`
72840
+ - \`options\`: \`[{ value: <extracted ID>, label: <same value> }]\` (a single option is auto-selected)
72841
+ 4. Verify access by calling \`${requestToolName}\`:
72842
+ - \`method\`: \`"GET"\`
72843
+ - \`path\`: \`"/{spreadsheetId}"\`
72844
+ 5. If an error is returned, ask the user to verify:
72845
+ - The OAuthed Google account has read access to the spreadsheet
72846
+ - The URL they entered is correct
72847
+
72848
+ #### Constraints
72849
+ - **Do NOT read large amounts of cell data during setup**. Only the metadata request specified above is allowed
72850
+ - Write only 1 sentence between tool calls, then immediately call the next tool. Skip unnecessary explanations and proceed efficiently`
72851
+ },
72852
+ dataOverviewInstructions: {
72853
+ en: `1. Call ${requestToolName} with GET /{spreadsheetId} to fetch spreadsheet metadata (sheet names, grid properties)
72854
+ 2. For each sheet of interest, call ${requestToolName} with GET /{spreadsheetId}/values/{SheetName}!A1:Z5 to sample the first rows and understand the column layout`,
72855
+ ja: `1. ${requestToolName} \u3067 GET /{spreadsheetId} \u3092\u547C\u3073\u51FA\u3057\u3001\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\uFF08\u30B7\u30FC\u30C8\u540D\u3001\u30B0\u30EA\u30C3\u30C9\u30D7\u30ED\u30D1\u30C6\u30A3\uFF09\u3092\u53D6\u5F97
72856
+ 2. \u4E3B\u8981\u306A\u30B7\u30FC\u30C8\u306B\u3064\u3044\u3066 ${requestToolName} \u3067 GET /{spreadsheetId}/values/{\u30B7\u30FC\u30C8\u540D}!A1:Z5 \u3092\u547C\u3073\u51FA\u3057\u3001\u5148\u982D\u6570\u884C\u3092\u30B5\u30F3\u30D7\u30EA\u30F3\u30B0\u3057\u3066\u30AB\u30E9\u30E0\u69CB\u9020\u3092\u628A\u63E1`
72857
+ }
72858
+ });
72859
+
72802
72860
  // ../connectors/src/connectors/google-sheets/index.ts
72803
72861
  var tools18 = { request: requestTool9 };
72804
72862
  var googleSheetsConnector = new ConnectorPlugin({
72805
72863
  slug: "google-sheets",
72806
72864
  authType: AUTH_TYPES.OAUTH,
72807
72865
  name: "Google Sheets",
72808
- description: "Connect to Google Sheets for spreadsheet data access and creation using OAuth.",
72866
+ description: "Connect to an existing Google Sheets spreadsheet for read-only data analysis using OAuth.",
72809
72867
  iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/1UPQuggyiZmbb26CuaSr2h/032770e8739b183fa00b7625f024e536/google-sheets.svg",
72810
72868
  parameters: parameters18,
72811
72869
  releaseFlag: { dev1: true, dev2: false, prod: false },
@@ -72814,30 +72872,25 @@ var googleSheetsConnector = new ConnectorPlugin({
72814
72872
  allowlist: [
72815
72873
  {
72816
72874
  host: "sheets.googleapis.com",
72817
- methods: ["GET", "POST", "PUT"]
72875
+ methods: ["GET"]
72818
72876
  }
72819
72877
  ]
72820
72878
  },
72821
72879
  systemPrompt: {
72822
72880
  en: `### Tools (setup-time only)
72823
72881
 
72824
- - \`google-sheets-oauth_request\`: Call the Google Sheets API during setup / data overview. Supports read and write operations. Use it to get/update spreadsheet metadata, cell values, create new spreadsheets, and more. Authentication is configured automatically via OAuth.
72882
+ - \`google-sheets-oauth_request\`: Call the Google Sheets API during setup / data overview. Read-only (GET only). Use it to fetch spreadsheet metadata and sample cell values. The \`{spreadsheetId}\` placeholder in the path is automatically replaced with the spreadsheet configured at setup time. Authentication is configured automatically via OAuth.
72825
72883
 
72826
72884
  > **Important**: The \`google-sheets-oauth_request\` tool is only available at setup time. Inside server-logic handlers, use the SDK (\`connection(id).getValues\`, etc.) \u2014 the SDK's fetch is already wired through the OAuth proxy. **Do NOT** hand-roll HTTP calls to \`_sqcore/connections/*/request\` from a handler.
72827
72885
 
72828
- ### Google Sheets API Reference
72886
+ > **Connection scope**: Each connection is bound to a single spreadsheet selected at setup time via URL. This connector does NOT create new spreadsheets and does NOT write to spreadsheets. The OAuth scope is \`spreadsheets.readonly\`.
72887
+
72888
+ ### Google Sheets API Reference (read-only)
72829
72889
 
72830
- #### Read Endpoints
72831
72890
  - GET \`/{spreadsheetId}\` \u2014 Get spreadsheet metadata (title, sheets, properties)
72832
72891
  - GET \`/{spreadsheetId}/values/{range}\` \u2014 Get cell values for a range
72833
72892
  - GET \`/{spreadsheetId}/values:batchGet?ranges={range1}&ranges={range2}\` \u2014 Get values for multiple ranges
72834
72893
 
72835
- #### Write Endpoints
72836
- - POST \`\` (empty path, with body) \u2014 Create a new spreadsheet. Body: \`{ "properties": { "title": "My Sheet" }, "sheets": [{ "properties": { "title": "Sheet1" } }] }\`
72837
- - PUT \`/{spreadsheetId}/values/{range}?valueInputOption=USER_ENTERED\` \u2014 Update cell values for a range. Body: \`{ "range": "Sheet1!A1:B2", "majorDimension": "ROWS", "values": [["a","b"],["c","d"]] }\`
72838
- - POST \`/{spreadsheetId}/values/{range}:append?valueInputOption=USER_ENTERED&insertDataOption=INSERT_ROWS\` \u2014 Append rows after the last row. Body: \`{ "range": "Sheet1!A1", "majorDimension": "ROWS", "values": [["a","b"]] }\`
72839
- - POST \`/{spreadsheetId}:batchUpdate\` \u2014 Apply multiple updates (formatting, add sheets, merge cells, etc.). Body: \`{ "requests": [...] }\`
72840
-
72841
72894
  ### Range Notation (A1 notation)
72842
72895
  - \`Sheet1!A1:D10\` \u2014 Specific range on Sheet1
72843
72896
  - \`Sheet1!A:A\` \u2014 Entire column A on Sheet1
@@ -72850,21 +72903,17 @@ var googleSheetsConnector = new ConnectorPlugin({
72850
72903
  - Use \`valueRenderOption=FORMATTED_VALUE\` query param to get display values
72851
72904
  - Use \`valueRenderOption=UNFORMATTED_VALUE\` for raw numeric values
72852
72905
  - Use \`majorDimension=COLUMNS\` to get data organized by columns instead of rows
72853
- - For write operations, always use \`valueInputOption=USER_ENTERED\` so values are parsed as if typed by a user (dates, numbers, formulas are auto-detected)
72854
- - Sharing (permissions) cannot be done via this connector; only the OAuth user has access to the created spreadsheets
72855
72906
 
72856
72907
  ### Business Logic
72857
72908
 
72858
- The business logic type for this connector is "typescript". Write handler code using the connector SDK shown below. Do NOT access credentials directly from environment variables and do NOT read \`INTERNAL_SQUADBASE_*\` env vars \u2014 the SDK takes care of OAuth.
72909
+ The business logic type for this connector is "typescript". Write handler code using the connector SDK shown below. Do NOT access credentials directly from environment variables and do NOT read \`INTERNAL_SQUADBASE_*\` env vars \u2014 the SDK takes care of OAuth. The spreadsheet ID is bound to the connection at setup time; do NOT ask handler callers to pass it.
72859
72910
 
72860
72911
  SDK surface (client created via \`connection(connectionId)\`):
72861
- - \`client.request(path, init?)\` \u2014 low-level authenticated fetch (\`path\` is appended to \`https://sheets.googleapis.com/v4/spreadsheets\`).
72862
- - \`client.getSpreadsheet(spreadsheetId)\` \u2014 fetch spreadsheet metadata.
72863
- - \`client.getValues(spreadsheetId, range)\` \u2014 read a range (A1 notation).
72864
- - \`client.batchGetValues(spreadsheetId, ranges)\` \u2014 read multiple ranges.
72865
- - \`client.updateValues(spreadsheetId, range, values)\` \u2014 write values to a range.
72866
- - \`client.appendValues(spreadsheetId, range, values)\` \u2014 append rows after the last row.
72867
- - \`client.createSpreadsheet(title, sheetNames?)\` \u2014 create a new spreadsheet.
72912
+ - \`client.spreadsheetId\` \u2014 the spreadsheet ID configured for this connection.
72913
+ - \`client.request(path, init?)\` \u2014 low-level authenticated fetch (\`path\` is appended to \`https://sheets.googleapis.com/v4/spreadsheets\`; \`{spreadsheetId}\` is auto-replaced).
72914
+ - \`client.getSpreadsheet()\` \u2014 fetch spreadsheet metadata for the configured spreadsheet.
72915
+ - \`client.getValues(range)\` \u2014 read a range (A1 notation) from the configured spreadsheet.
72916
+ - \`client.batchGetValues(ranges)\` \u2014 read multiple ranges from the configured spreadsheet.
72868
72917
 
72869
72918
  If a handler test fails with \`Connection proxy is not configured\`, retry \u2014 the sandbox is still initializing. Do NOT abandon the SDK and construct OAuth proxy URLs manually.
72870
72919
 
@@ -72875,43 +72924,31 @@ import { connection } from "@squadbase/vite-server/connectors/google-sheets";
72875
72924
 
72876
72925
  const sheets = connection("<connectionId>");
72877
72926
 
72878
- // Create a new spreadsheet
72879
- const newSheet = await sheets.createSpreadsheet("Sales Report", ["Q1", "Q2", "Q3", "Q4"]);
72880
- const spreadsheetId = newSheet.spreadsheetId;
72881
-
72882
- // Get spreadsheet metadata
72883
- const metadata = await sheets.getSpreadsheet(spreadsheetId);
72927
+ // Get metadata for the configured spreadsheet
72928
+ const metadata = await sheets.getSpreadsheet();
72884
72929
  console.log(metadata.properties.title, metadata.sheets.map(s => s.properties.title));
72885
72930
 
72886
72931
  // Get cell values
72887
- const values = await sheets.getValues(spreadsheetId, "Sheet1!A1:D10");
72932
+ const values = await sheets.getValues("Sheet1!A1:D10");
72888
72933
  console.log(values.values); // 2D array
72889
72934
 
72890
- // Update cell values
72891
- await sheets.updateValues(spreadsheetId, "Sheet1!A1:B2", [["Name", "Score"], ["Alice", "100"]]);
72892
-
72893
- // Append rows
72894
- await sheets.appendValues(spreadsheetId, "Sheet1!A1", [["Bob", "95"], ["Charlie", "88"]]);
72935
+ // Batch-get multiple ranges
72936
+ const batch = await sheets.batchGetValues(["Sheet1!A:A", "Sheet2!B2:C100"]);
72895
72937
  \`\`\``,
72896
72938
  ja: `### \u30C4\u30FC\u30EB\uFF08\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306E\u307F\uFF09
72897
72939
 
72898
- - \`google-sheets-oauth_request\`: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3084\u30C7\u30FC\u30BF\u6982\u8981\u628A\u63E1\u6642\u306B Google Sheets API \u3092\u547C\u3073\u51FA\u3059\u30C4\u30FC\u30EB\u3067\u3059\u3002\u8AAD\u307F\u53D6\u308A\u3068\u66F8\u304D\u8FBC\u307F\u306E\u4E21\u65B9\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u307E\u3059\u3002\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u30FB\u30BB\u30EB\u5024\u306E\u53D6\u5F97/\u66F4\u65B0\u3001\u65B0\u3057\u3044\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306E\u4F5C\u6210\u306A\u3069\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002OAuth \u7D4C\u7531\u3067\u8A8D\u8A3C\u306F\u81EA\u52D5\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002
72940
+ - \`google-sheets-oauth_request\`: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3084\u30C7\u30FC\u30BF\u6982\u8981\u628A\u63E1\u6642\u306B Google Sheets API \u3092\u547C\u3073\u51FA\u3059\u30C4\u30FC\u30EB\u3067\u3059\u3002\u8AAD\u307F\u53D6\u308A\u5C02\u7528\uFF08GET \u306E\u307F\uFF09\u3067\u3059\u3002\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u53D6\u5F97\u3084\u30BB\u30EB\u5024\u306E\u30B5\u30F3\u30D7\u30EA\u30F3\u30B0\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002\u30D1\u30B9\u5185\u306E \`{spreadsheetId}\` \u30D7\u30EC\u30FC\u30B9\u30DB\u30EB\u30C0\u306F\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306B\u6307\u5B9A\u3055\u308C\u305F\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8ID\u306B\u81EA\u52D5\u7684\u306B\u7F6E\u63DB\u3055\u308C\u307E\u3059\u3002OAuth \u7D4C\u7531\u3067\u8A8D\u8A3C\u306F\u81EA\u52D5\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002
72899
72941
 
72900
72942
  > **\u91CD\u8981**: \`google-sheets-oauth_request\` \u306F\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306E\u307F\u5229\u7528\u53EF\u80FD\u3067\u3059\u3002\u30B5\u30FC\u30D0\u30FC\u30ED\u30B8\u30C3\u30AF\u306E\u30CF\u30F3\u30C9\u30E9\u5185\u3067\u306F\u5FC5\u305A SDK\uFF08\`connection(id).getValues\` \u306A\u3069\uFF09\u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002SDK \u306E fetch \u306F OAuth \u30D7\u30ED\u30AD\u30B7\u7D4C\u7531\u3067\u65E2\u306B\u914D\u7DDA\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u30CF\u30F3\u30C9\u30E9\u304B\u3089 \`_sqcore/connections/*/request\` \u3092\u624B\u66F8\u304D\u3067\u547C\u3073\u51FA\u3055\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002
72901
72943
 
72902
- ### Google Sheets API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
72944
+ > **\u63A5\u7D9A\u30B9\u30B3\u30FC\u30D7**: \u5404\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306F\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306BURL\u3067\u6307\u5B9A\u3055\u308C\u305F1\u3064\u306E\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306B\u7D10\u3065\u304D\u307E\u3059\u3002\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306F\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306E\u4F5C\u6210\u3084\u66F8\u304D\u8FBC\u307F\u306F\u884C\u3044\u307E\u305B\u3093\u3002OAuth \u30B9\u30B3\u30FC\u30D7\u306F \`spreadsheets.readonly\` \u3067\u3059\u3002
72945
+
72946
+ ### Google Sheets API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9\uFF08\u8AAD\u307F\u53D6\u308A\u5C02\u7528\uFF09
72903
72947
 
72904
- #### \u8AAD\u307F\u53D6\u308A\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8
72905
72948
  - GET \`/{spreadsheetId}\` \u2014 \u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u3092\u53D6\u5F97\uFF08\u30BF\u30A4\u30C8\u30EB\u3001\u30B7\u30FC\u30C8\u3001\u30D7\u30ED\u30D1\u30C6\u30A3\uFF09
72906
72949
  - GET \`/{spreadsheetId}/values/{range}\` \u2014 \u7BC4\u56F2\u306E\u30BB\u30EB\u5024\u3092\u53D6\u5F97
72907
72950
  - GET \`/{spreadsheetId}/values:batchGet?ranges={range1}&ranges={range2}\` \u2014 \u8907\u6570\u7BC4\u56F2\u306E\u5024\u3092\u53D6\u5F97
72908
72951
 
72909
- #### \u66F8\u304D\u8FBC\u307F\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8
72910
- - POST \`\`\uFF08\u7A7A\u30D1\u30B9\u3001\u30DC\u30C7\u30A3\u4ED8\u304D\uFF09\u2014 \u65B0\u3057\u3044\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u3092\u4F5C\u6210\u3002Body: \`{ "properties": { "title": "\u30DE\u30A4\u30B7\u30FC\u30C8" }, "sheets": [{ "properties": { "title": "Sheet1" } }] }\`
72911
- - PUT \`/{spreadsheetId}/values/{range}?valueInputOption=USER_ENTERED\` \u2014 \u7BC4\u56F2\u306E\u30BB\u30EB\u5024\u3092\u66F4\u65B0\u3002Body: \`{ "range": "Sheet1!A1:B2", "majorDimension": "ROWS", "values": [["a","b"],["c","d"]] }\`
72912
- - POST \`/{spreadsheetId}/values/{range}:append?valueInputOption=USER_ENTERED&insertDataOption=INSERT_ROWS\` \u2014 \u6700\u7D42\u884C\u306E\u5F8C\u306B\u884C\u3092\u8FFD\u52A0\u3002Body: \`{ "range": "Sheet1!A1", "majorDimension": "ROWS", "values": [["a","b"]] }\`
72913
- - POST \`/{spreadsheetId}:batchUpdate\` \u2014 \u8907\u6570\u306E\u66F4\u65B0\u3092\u9069\u7528\uFF08\u66F8\u5F0F\u8A2D\u5B9A\u3001\u30B7\u30FC\u30C8\u8FFD\u52A0\u3001\u30BB\u30EB\u7D50\u5408\u306A\u3069\uFF09\u3002Body: \`{ "requests": [...] }\`
72914
-
72915
72952
  ### \u7BC4\u56F2\u306E\u8868\u8A18\u6CD5\uFF08A1\u8868\u8A18\u6CD5\uFF09
72916
72953
  - \`Sheet1!A1:D10\` \u2014 Sheet1\u4E0A\u306E\u7279\u5B9A\u7BC4\u56F2
72917
72954
  - \`Sheet1!A:A\` \u2014 Sheet1\u306EA\u5217\u5168\u4F53
@@ -72924,21 +72961,17 @@ await sheets.appendValues(spreadsheetId, "Sheet1!A1", [["Bob", "95"], ["Charlie"
72924
72961
  - \u8868\u793A\u5024\u3092\u53D6\u5F97\u3059\u308B\u306B\u306F \`valueRenderOption=FORMATTED_VALUE\` \u30AF\u30A8\u30EA\u30D1\u30E9\u30E1\u30FC\u30BF\u3092\u4F7F\u7528\u3057\u307E\u3059
72925
72962
  - \u751F\u306E\u6570\u5024\u3092\u53D6\u5F97\u3059\u308B\u306B\u306F \`valueRenderOption=UNFORMATTED_VALUE\` \u3092\u4F7F\u7528\u3057\u307E\u3059
72926
72963
  - \u5217\u3054\u3068\u306B\u30C7\u30FC\u30BF\u3092\u53D6\u5F97\u3059\u308B\u306B\u306F \`majorDimension=COLUMNS\` \u3092\u4F7F\u7528\u3057\u307E\u3059
72927
- - \u66F8\u304D\u8FBC\u307F\u64CD\u4F5C\u3067\u306F\u5E38\u306B \`valueInputOption=USER_ENTERED\` \u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u5024\u304C\u30E6\u30FC\u30B6\u30FC\u5165\u529B\u306E\u3088\u3046\u306B\u89E3\u6790\u3055\u308C\u307E\u3059\uFF08\u65E5\u4ED8\u3001\u6570\u5024\u3001\u6570\u5F0F\u304C\u81EA\u52D5\u691C\u51FA\uFF09
72928
- - \u5171\u6709\uFF08permissions\uFF09\u306F\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u7D4C\u7531\u3067\u306F\u884C\u3048\u307E\u305B\u3093\u3002\u4F5C\u6210\u3057\u305F\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u3078\u306F\u63A5\u7D9A\u3057\u305FOAuth\u30E6\u30FC\u30B6\u30FC\u306E\u307F\u304C\u30A2\u30AF\u30BB\u30B9\u53EF\u80FD\u3067\u3059
72929
72964
 
72930
72965
  ### Business Logic
72931
72966
 
72932
- \u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "typescript" \u3067\u3059\u3002\u4EE5\u4E0B\u306B\u793A\u3059\u30B3\u30CD\u30AF\u30BF SDK \u3092\u4F7F\u7528\u3057\u3066\u30CF\u30F3\u30C9\u30E9\u30B3\u30FC\u30C9\u3092\u8A18\u8FF0\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u74B0\u5883\u5909\u6570\u304B\u3089\u76F4\u63A5\u8A8D\u8A3C\u60C5\u5831\u306B\u30A2\u30AF\u30BB\u30B9\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002\`INTERNAL_SQUADBASE_*\` \u306E\u74B0\u5883\u5909\u6570\u3092\u4F7F\u3063\u3066\u624B\u52D5\u3067 OAuth \u30D7\u30ED\u30AD\u30B7\u3092\u53E9\u304F\u3053\u3068\u3082\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044 \u2014 SDK \u304C OAuth \u3092\u51E6\u7406\u3057\u307E\u3059\u3002
72967
+ \u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "typescript" \u3067\u3059\u3002\u4EE5\u4E0B\u306B\u793A\u3059\u30B3\u30CD\u30AF\u30BF SDK \u3092\u4F7F\u7528\u3057\u3066\u30CF\u30F3\u30C9\u30E9\u30B3\u30FC\u30C9\u3092\u8A18\u8FF0\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u74B0\u5883\u5909\u6570\u304B\u3089\u76F4\u63A5\u8A8D\u8A3C\u60C5\u5831\u306B\u30A2\u30AF\u30BB\u30B9\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002\`INTERNAL_SQUADBASE_*\` \u306E\u74B0\u5883\u5909\u6570\u3092\u4F7F\u3063\u3066\u624B\u52D5\u3067 OAuth \u30D7\u30ED\u30AD\u30B7\u3092\u53E9\u304F\u3053\u3068\u3082\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044 \u2014 SDK \u304C OAuth \u3092\u51E6\u7406\u3057\u307E\u3059\u3002\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8ID\u306F\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306B\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306B\u7D10\u3065\u3051\u3089\u308C\u3066\u3044\u308B\u306E\u3067\u3001\u30CF\u30F3\u30C9\u30E9\u306E\u547C\u3073\u51FA\u3057\u5143\u306B\u6E21\u3055\u305B\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002
72933
72968
 
72934
72969
  SDK\uFF08\`connection(connectionId)\` \u3067\u4F5C\u6210\u3057\u305F\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8\uFF09:
72935
- - \`client.request(path, init?)\` \u2014 \u4F4E\u30EC\u30D9\u30EB\u306E\u8A8D\u8A3C\u4ED8\u304D fetch\uFF08\`path\` \u306F \`https://sheets.googleapis.com/v4/spreadsheets\` \u306B\u8FFD\u52A0\u3055\u308C\u307E\u3059\uFF09\u3002
72936
- - \`client.getSpreadsheet(spreadsheetId)\` \u2014 \u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u3092\u53D6\u5F97\u3002
72937
- - \`client.getValues(spreadsheetId, range)\` \u2014 \u7BC4\u56F2\u306E\u5024\u3092\u53D6\u5F97\uFF08A1 \u8868\u8A18\uFF09\u3002
72938
- - \`client.batchGetValues(spreadsheetId, ranges)\` \u2014 \u8907\u6570\u7BC4\u56F2\u306E\u5024\u3092\u53D6\u5F97\u3002
72939
- - \`client.updateValues(spreadsheetId, range, values)\` \u2014 \u7BC4\u56F2\u306B\u5024\u3092\u66F8\u304D\u8FBC\u307F\u3002
72940
- - \`client.appendValues(spreadsheetId, range, values)\` \u2014 \u6700\u7D42\u884C\u306E\u5F8C\u306B\u884C\u3092\u8FFD\u52A0\u3002
72941
- - \`client.createSpreadsheet(title, sheetNames?)\` \u2014 \u65B0\u3057\u3044\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u3092\u4F5C\u6210\u3002
72970
+ - \`client.spreadsheetId\` \u2014 \u3053\u306E\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306B\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u308B\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8ID\u3002
72971
+ - \`client.request(path, init?)\` \u2014 \u4F4E\u30EC\u30D9\u30EB\u306E\u8A8D\u8A3C\u4ED8\u304D fetch\uFF08\`path\` \u306F \`https://sheets.googleapis.com/v4/spreadsheets\` \u306B\u8FFD\u52A0\u3055\u308C\u3001\`{spreadsheetId}\` \u306F\u81EA\u52D5\u7F6E\u63DB\u3055\u308C\u307E\u3059\uFF09\u3002
72972
+ - \`client.getSpreadsheet()\` \u2014 \u8A2D\u5B9A\u6E08\u307F\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u3092\u53D6\u5F97\u3002
72973
+ - \`client.getValues(range)\` \u2014 \u8A2D\u5B9A\u6E08\u307F\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306E\u7BC4\u56F2\u306E\u5024\u3092\u53D6\u5F97\uFF08A1 \u8868\u8A18\uFF09\u3002
72974
+ - \`client.batchGetValues(ranges)\` \u2014 \u8A2D\u5B9A\u6E08\u307F\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306E\u8907\u6570\u7BC4\u56F2\u306E\u5024\u3092\u53D6\u5F97\u3002
72942
72975
 
72943
72976
  \u30CF\u30F3\u30C9\u30E9\u306E\u30C6\u30B9\u30C8\u304C \`Connection proxy is not configured\` \u3067\u5931\u6557\u3059\u308B\u5834\u5408\u306F\u518D\u8A66\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u901A\u5E38\u306F\u30B5\u30F3\u30C9\u30DC\u30C3\u30AF\u30B9\u306E\u521D\u671F\u5316\u4E2D\u306B\u8D77\u304D\u307E\u3059\u3002SDK \u3092\u8AE6\u3081\u3066 OAuth \u30D7\u30ED\u30AD\u30B7\u306E URL \u3092\u81EA\u5206\u3067\u7D44\u307F\u7ACB\u3066\u308B\u3053\u3068\u306F **\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044**\u3002
72944
72977
 
@@ -72949,23 +72982,16 @@ import { connection } from "@squadbase/vite-server/connectors/google-sheets";
72949
72982
 
72950
72983
  const sheets = connection("<connectionId>");
72951
72984
 
72952
- // \u65B0\u3057\u3044\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u3092\u4F5C\u6210
72953
- const newSheet = await sheets.createSpreadsheet("\u58F2\u4E0A\u30EC\u30DD\u30FC\u30C8", ["Q1", "Q2", "Q3", "Q4"]);
72954
- const spreadsheetId = newSheet.spreadsheetId;
72955
-
72956
- // \u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u3092\u53D6\u5F97
72957
- const metadata = await sheets.getSpreadsheet(spreadsheetId);
72985
+ // \u8A2D\u5B9A\u6E08\u307F\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u3092\u53D6\u5F97
72986
+ const metadata = await sheets.getSpreadsheet();
72958
72987
  console.log(metadata.properties.title, metadata.sheets.map(s => s.properties.title));
72959
72988
 
72960
72989
  // \u30BB\u30EB\u5024\u3092\u53D6\u5F97
72961
- const values = await sheets.getValues(spreadsheetId, "Sheet1!A1:D10");
72990
+ const values = await sheets.getValues("Sheet1!A1:D10");
72962
72991
  console.log(values.values); // 2D array
72963
72992
 
72964
- // \u30BB\u30EB\u5024\u3092\u66F4\u65B0
72965
- await sheets.updateValues(spreadsheetId, "Sheet1!A1:B2", [["\u540D\u524D", "\u30B9\u30B3\u30A2"], ["Alice", "100"]]);
72966
-
72967
- // \u884C\u3092\u8FFD\u52A0
72968
- await sheets.appendValues(spreadsheetId, "Sheet1!A1", [["Bob", "95"], ["Charlie", "88"]]);
72993
+ // \u8907\u6570\u7BC4\u56F2\u3092\u30D0\u30C3\u30C1\u53D6\u5F97
72994
+ const batch = await sheets.batchGetValues(["Sheet1!A:A", "Sheet2!B2:C100"]);
72969
72995
  \`\`\``
72970
72996
  },
72971
72997
  tools: tools18
@@ -73398,12 +73424,12 @@ Authentication is handled automatically via OAuth proxy.`,
73398
73424
  });
73399
73425
 
73400
73426
  // ../connectors/src/connectors/hubspot-oauth/setup.ts
73401
- var requestToolName = `hubspot-oauth_${requestTool11.name}`;
73427
+ var requestToolName2 = `hubspot-oauth_${requestTool11.name}`;
73402
73428
  var hubspotOnboarding = new ConnectorOnboarding({
73403
73429
  connectionSetupInstructions: {
73404
73430
  ja: `\u4EE5\u4E0B\u306E\u624B\u9806\u3067HubSpot\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002
73405
73431
 
73406
- 1. \`${requestToolName}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u30A2\u30AB\u30A6\u30F3\u30C8\u60C5\u5831\u3092\u53D6\u5F97\u3059\u308B:
73432
+ 1. \`${requestToolName2}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u30A2\u30AB\u30A6\u30F3\u30C8\u60C5\u5831\u3092\u53D6\u5F97\u3059\u308B:
73407
73433
  - \`method\`: \`"GET"\`
73408
73434
  - \`path\`: \`"/account-info/v3/details"\`
73409
73435
  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
@@ -73413,7 +73439,7 @@ var hubspotOnboarding = new ConnectorOnboarding({
73413
73439
  - \u30C4\u30FC\u30EB\u9593\u306F1\u6587\u3060\u3051\u66F8\u3044\u3066\u5373\u6B21\u306E\u30C4\u30FC\u30EB\u547C\u3073\u51FA\u3057\u3002\u4E0D\u8981\u306A\u8AAC\u660E\u306F\u7701\u7565\u3057\u3001\u52B9\u7387\u7684\u306B\u9032\u3081\u308B`,
73414
73440
  en: `Follow these steps to set up the HubSpot connection.
73415
73441
 
73416
- 1. Call \`${requestToolName}\` to fetch account info:
73442
+ 1. Call \`${requestToolName2}\` to fetch account info:
73417
73443
  - \`method\`: \`"GET"\`
73418
73444
  - \`path\`: \`"/account-info/v3/details"\`
73419
73445
  2. If an error is returned, ask the user to check the OAuth connection settings
@@ -73687,12 +73713,12 @@ Authentication is handled automatically via OAuth proxy.`,
73687
73713
  });
73688
73714
 
73689
73715
  // ../connectors/src/connectors/stripe-oauth/setup.ts
73690
- var requestToolName2 = `stripe-oauth_${requestTool12.name}`;
73716
+ var requestToolName3 = `stripe-oauth_${requestTool12.name}`;
73691
73717
  var stripeOnboarding = new ConnectorOnboarding({
73692
73718
  connectionSetupInstructions: {
73693
73719
  ja: `\u4EE5\u4E0B\u306E\u624B\u9806\u3067Stripe\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002
73694
73720
 
73695
- 1. \`${requestToolName2}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u30A2\u30AB\u30A6\u30F3\u30C8\u60C5\u5831\u3092\u53D6\u5F97\u3059\u308B:
73721
+ 1. \`${requestToolName3}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u30A2\u30AB\u30A6\u30F3\u30C8\u60C5\u5831\u3092\u53D6\u5F97\u3059\u308B:
73696
73722
  - \`method\`: \`"GET"\`
73697
73723
  - \`path\`: \`"/v1/accounts"\`
73698
73724
  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
@@ -73702,7 +73728,7 @@ var stripeOnboarding = new ConnectorOnboarding({
73702
73728
  - \u30C4\u30FC\u30EB\u9593\u306F1\u6587\u3060\u3051\u66F8\u3044\u3066\u5373\u6B21\u306E\u30C4\u30FC\u30EB\u547C\u3073\u51FA\u3057\u3002\u4E0D\u8981\u306A\u8AAC\u660E\u306F\u7701\u7565\u3057\u3001\u52B9\u7387\u7684\u306B\u9032\u3081\u308B`,
73703
73729
  en: `Follow these steps to set up the Stripe connection.
73704
73730
 
73705
- 1. Call \`${requestToolName2}\` to fetch account info:
73731
+ 1. Call \`${requestToolName3}\` to fetch account info:
73706
73732
  - \`method\`: \`"GET"\`
73707
73733
  - \`path\`: \`"/v1/accounts"\`
73708
73734
  2. If an error is returned, ask the user to check the OAuth connection settings
@@ -73977,12 +74003,12 @@ Use this tool for all Stripe API interactions: querying charges, customers, invo
73977
74003
  });
73978
74004
 
73979
74005
  // ../connectors/src/connectors/stripe-api-key/setup.ts
73980
- var requestToolName3 = `stripe-api-key_${requestTool13.name}`;
74006
+ var requestToolName4 = `stripe-api-key_${requestTool13.name}`;
73981
74007
  var stripeApiKeyOnboarding = new ConnectorOnboarding({
73982
74008
  connectionSetupInstructions: {
73983
74009
  ja: `\u4EE5\u4E0B\u306E\u624B\u9806\u3067Stripe\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002
73984
74010
 
73985
- 1. \`${requestToolName3}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u30A2\u30AB\u30A6\u30F3\u30C8\u6B8B\u9AD8\u3092\u53D6\u5F97\u3059\u308B:
74011
+ 1. \`${requestToolName4}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u30A2\u30AB\u30A6\u30F3\u30C8\u6B8B\u9AD8\u3092\u53D6\u5F97\u3059\u308B:
73986
74012
  - \`method\`: \`"GET"\`
73987
74013
  - \`path\`: \`"/v1/balance"\`
73988
74014
  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
@@ -73992,7 +74018,7 @@ var stripeApiKeyOnboarding = new ConnectorOnboarding({
73992
74018
  - \u30C4\u30FC\u30EB\u9593\u306F1\u6587\u3060\u3051\u66F8\u3044\u3066\u5373\u6B21\u306E\u30C4\u30FC\u30EB\u547C\u3073\u51FA\u3057\u3002\u4E0D\u8981\u306A\u8AAC\u660E\u306F\u7701\u7565\u3057\u3001\u52B9\u7387\u7684\u306B\u9032\u3081\u308B`,
73993
74019
  en: `Follow these steps to set up the Stripe connection.
73994
74020
 
73995
- 1. Call \`${requestToolName3}\` to fetch account balance:
74021
+ 1. Call \`${requestToolName4}\` to fetch account balance:
73996
74022
  - \`method\`: \`"GET"\`
73997
74023
  - \`path\`: \`"/v1/balance"\`
73998
74024
  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)
@@ -74002,11 +74028,11 @@ var stripeApiKeyOnboarding = new ConnectorOnboarding({
74002
74028
  - Write only 1 sentence between tool calls, then immediately call the next tool. Skip unnecessary explanations and proceed efficiently`
74003
74029
  },
74004
74030
  dataOverviewInstructions: {
74005
- en: `1. Call ${requestToolName3} with GET /v1/customers?limit=5 to explore customers structure
74006
- 2. Call ${requestToolName3} with GET /v1/charges?limit=5 to explore charges structure
74031
+ en: `1. Call ${requestToolName4} with GET /v1/customers?limit=5 to explore customers structure
74032
+ 2. Call ${requestToolName4} with GET /v1/charges?limit=5 to explore charges structure
74007
74033
  3. Explore other endpoints (invoices, subscriptions, products) as needed`,
74008
- ja: `1. ${requestToolName3} \u3067 GET /v1/customers?limit=5 \u3092\u547C\u3073\u51FA\u3057\u3001\u9867\u5BA2\u306E\u69CB\u9020\u3092\u78BA\u8A8D
74009
- 2. ${requestToolName3} \u3067 GET /v1/charges?limit=5 \u3092\u547C\u3073\u51FA\u3057\u3001\u8AB2\u91D1\u306E\u69CB\u9020\u3092\u78BA\u8A8D
74034
+ ja: `1. ${requestToolName4} \u3067 GET /v1/customers?limit=5 \u3092\u547C\u3073\u51FA\u3057\u3001\u9867\u5BA2\u306E\u69CB\u9020\u3092\u78BA\u8A8D
74035
+ 2. ${requestToolName4} \u3067 GET /v1/charges?limit=5 \u3092\u547C\u3073\u51FA\u3057\u3001\u8AB2\u91D1\u306E\u69CB\u9020\u3092\u78BA\u8A8D
74010
74036
  3. \u5FC5\u8981\u306B\u5FDC\u3058\u3066\u4ED6\u306E\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\uFF08\u8ACB\u6C42\u66F8\u3001\u30B5\u30D6\u30B9\u30AF\u30EA\u30D7\u30B7\u30E7\u30F3\u3001\u5546\u54C1\uFF09\u3092\u63A2\u7D22`
74011
74037
  }
74012
74038
  });
@@ -74291,7 +74317,7 @@ Authentication is handled automatically via OAuth proxy.
74291
74317
  });
74292
74318
 
74293
74319
  // ../connectors/src/connectors/airtable-oauth/setup.ts
74294
- var requestToolName4 = `airtable-oauth_${requestTool14.name}`;
74320
+ var requestToolName5 = `airtable-oauth_${requestTool14.name}`;
74295
74321
  var airtableOauthOnboarding = new ConnectorOnboarding({
74296
74322
  connectionSetupInstructions: {
74297
74323
  ja: `\u4EE5\u4E0B\u306E\u624B\u9806\u3067Airtable OAuth\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002
@@ -74301,7 +74327,7 @@ var airtableOauthOnboarding = new ConnectorOnboarding({
74301
74327
  3. \`updateConnectionParameters\` \u3092\u547C\u3073\u51FA\u3059:
74302
74328
  - \`parameterSlug\`: \`"base-id"\`
74303
74329
  - \`value\`: \u62BD\u51FA\u3057\u305F\u30D9\u30FC\u30B9ID
74304
- 4. \`${requestToolName4}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u30D9\u30FC\u30B9\u306E\u30C6\u30FC\u30D6\u30EB\u4E00\u89A7\u3092\u53D6\u5F97\u3059\u308B:
74330
+ 4. \`${requestToolName5}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u30D9\u30FC\u30B9\u306E\u30C6\u30FC\u30D6\u30EB\u4E00\u89A7\u3092\u53D6\u5F97\u3059\u308B:
74305
74331
  - \`method\`: \`"GET"\`
74306
74332
  - \`path\`: \`"/meta/bases/{baseId}/tables"\`
74307
74333
  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
@@ -74316,7 +74342,7 @@ var airtableOauthOnboarding = new ConnectorOnboarding({
74316
74342
  3. Call \`updateConnectionParameters\`:
74317
74343
  - \`parameterSlug\`: \`"base-id"\`
74318
74344
  - \`value\`: The extracted base ID
74319
- 4. Call \`${requestToolName4}\` to fetch the base's table list:
74345
+ 4. Call \`${requestToolName5}\` to fetch the base's table list:
74320
74346
  - \`method\`: \`"GET"\`
74321
74347
  - \`path\`: \`"/meta/bases/{baseId}/tables"\`
74322
74348
  5. If an error is returned, ask the user to check the base sharing settings
@@ -76894,6 +76920,7 @@ Use this tool for all Shopify API interactions: listing products, orders, custom
76894
76920
  method: "POST",
76895
76921
  headers: { "Content-Type": "application/json" },
76896
76922
  body: JSON.stringify({
76923
+ grant_type: "client_credentials",
76897
76924
  client_id: clientId,
76898
76925
  client_secret: clientSecret
76899
76926
  })
@@ -77217,12 +77244,12 @@ Authentication is handled automatically via OAuth proxy.`,
77217
77244
  });
77218
77245
 
77219
77246
  // ../connectors/src/connectors/shopify-oauth/setup.ts
77220
- var requestToolName5 = `shopify-oauth_${requestTool22.name}`;
77247
+ var requestToolName6 = `shopify-oauth_${requestTool22.name}`;
77221
77248
  var shopifyOauthOnboarding = new ConnectorOnboarding({
77222
77249
  connectionSetupInstructions: {
77223
77250
  ja: `\u4EE5\u4E0B\u306E\u624B\u9806\u3067Shopify\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002
77224
77251
 
77225
- 1. \`${requestToolName5}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u30B7\u30E7\u30C3\u30D7\u60C5\u5831\u3092\u53D6\u5F97\u3059\u308B:
77252
+ 1. \`${requestToolName6}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u30B7\u30E7\u30C3\u30D7\u60C5\u5831\u3092\u53D6\u5F97\u3059\u308B:
77226
77253
  - \`method\`: \`"GET"\`
77227
77254
  - \`path\`: \`"/admin/api/2024-10/shop.json"\`
77228
77255
  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
@@ -77232,7 +77259,7 @@ var shopifyOauthOnboarding = new ConnectorOnboarding({
77232
77259
  - \u30C4\u30FC\u30EB\u9593\u306F1\u6587\u3060\u3051\u66F8\u3044\u3066\u5373\u6B21\u306E\u30C4\u30FC\u30EB\u547C\u3073\u51FA\u3057\u3002\u4E0D\u8981\u306A\u8AAC\u660E\u306F\u7701\u7565\u3057\u3001\u52B9\u7387\u7684\u306B\u9032\u3081\u308B`,
77233
77260
  en: `Follow these steps to set up the Shopify connection.
77234
77261
 
77235
- 1. Call \`${requestToolName5}\` to fetch shop info:
77262
+ 1. Call \`${requestToolName6}\` to fetch shop info:
77236
77263
  - \`method\`: \`"GET"\`
77237
77264
  - \`path\`: \`"/admin/api/2024-10/shop.json"\`
77238
77265
  2. If an error is returned, ask the user to check the OAuth connection settings
@@ -79489,12 +79516,12 @@ Pagination uses cursor-based start_cursor and page_size (max 100).`,
79489
79516
  });
79490
79517
 
79491
79518
  // ../connectors/src/connectors/notion-oauth/setup.ts
79492
- var requestToolName6 = `notion-oauth_${requestTool28.name}`;
79519
+ var requestToolName7 = `notion-oauth_${requestTool28.name}`;
79493
79520
  var notionOauthOnboarding = new ConnectorOnboarding({
79494
79521
  connectionSetupInstructions: {
79495
79522
  ja: `\u4EE5\u4E0B\u306E\u624B\u9806\u3067Notion\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002
79496
79523
 
79497
- 1. \`${requestToolName6}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u30DC\u30C3\u30C8\u30E6\u30FC\u30B6\u30FC\u60C5\u5831\u3092\u53D6\u5F97\u3059\u308B:
79524
+ 1. \`${requestToolName7}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u30DC\u30C3\u30C8\u30E6\u30FC\u30B6\u30FC\u60C5\u5831\u3092\u53D6\u5F97\u3059\u308B:
79498
79525
  - \`method\`: \`"GET"\`
79499
79526
  - \`path\`: \`"/users/me"\`
79500
79527
  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
@@ -79504,7 +79531,7 @@ var notionOauthOnboarding = new ConnectorOnboarding({
79504
79531
  - \u30C4\u30FC\u30EB\u9593\u306F1\u6587\u3060\u3051\u66F8\u3044\u3066\u5373\u6B21\u306E\u30C4\u30FC\u30EB\u547C\u3073\u51FA\u3057\u3002\u4E0D\u8981\u306A\u8AAC\u660E\u306F\u7701\u7565\u3057\u3001\u52B9\u7387\u7684\u306B\u9032\u3081\u308B`,
79505
79532
  en: `Follow these steps to set up the Notion connection.
79506
79533
 
79507
- 1. Call \`${requestToolName6}\` to fetch bot user info:
79534
+ 1. Call \`${requestToolName7}\` to fetch bot user info:
79508
79535
  - \`method\`: \`"GET"\`
79509
79536
  - \`path\`: \`"/users/me"\`
79510
79537
  2. If an error is returned, ask the user to check the OAuth connection settings
@@ -82071,7 +82098,7 @@ All paths are relative to https://gmail.googleapis.com/gmail/v1/users. Use '/me'
82071
82098
  });
82072
82099
 
82073
82100
  // ../connectors/src/connectors/gmail/setup.ts
82074
- var requestToolName7 = `gmail-service-account_${requestTool35.name}`;
82101
+ var requestToolName8 = `gmail-service-account_${requestTool35.name}`;
82075
82102
  var gmailOnboarding = new ConnectorOnboarding({
82076
82103
  connectionSetupInstructions: {
82077
82104
  ja: `\u4EE5\u4E0B\u306E\u624B\u9806\u3067Gmail\uFF08\u30B5\u30FC\u30D3\u30B9\u30A2\u30AB\u30A6\u30F3\u30C8\uFF09\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002\u63A5\u7D9A\u4F5C\u6210\u6642\u306B\u306F\u30B5\u30FC\u30D3\u30B9\u30A2\u30AB\u30A6\u30F3\u30C8JSON\u306E\u307F\u304C\u8A2D\u5B9A\u6E08\u307F\u3067\u3001\u59D4\u4EFB\u5BFE\u8C61\u306E\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u306F\u3053\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u4E2D\u306B\u53D6\u5F97\u3057\u307E\u3059\u3002
@@ -82083,14 +82110,14 @@ var gmailOnboarding = new ConnectorOnboarding({
82083
82110
  2. \u53D7\u3051\u53D6\u3063\u305F\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3092 \`updateConnectionParameters\` \u3067\u4FDD\u5B58\u3059\u308B:
82084
82111
  - \`parameterSlug\`: \`"delegated-user-email"\`
82085
82112
  - \`options\`: \`[{ value: <\u5165\u529B\u3055\u308C\u305F\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9>, label: <\u540C\u3058\u5024> }]\`\uFF081\u4EF6\u306E\u307F\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u306F\u81EA\u52D5\u9078\u629E\u3055\u308C\u308B\uFF09
82086
- 3. \`${requestToolName7}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u30E6\u30FC\u30B6\u30FC\u306E\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB\u3092\u53D6\u5F97\u3059\u308B:
82113
+ 3. \`${requestToolName8}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u30E6\u30FC\u30B6\u30FC\u306E\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB\u3092\u53D6\u5F97\u3059\u308B:
82087
82114
  - \`method\`: \`"GET"\`
82088
82115
  - \`path\`: \`"/me/profile"\`
82089
82116
  4. \u30A8\u30E9\u30FC\u304C\u8FD4\u3055\u308C\u305F\u5834\u5408\u3001\u4EE5\u4E0B\u3092\u78BA\u8A8D\u3059\u308B\u3088\u3046\u30E6\u30FC\u30B6\u30FC\u306B\u4F1D\u3048\u308B:
82090
82117
  - \u30B5\u30FC\u30D3\u30B9\u30A2\u30AB\u30A6\u30F3\u30C8\u306E\u30C9\u30E1\u30A4\u30F3\u5168\u4F53\u306E\u59D4\u4EFB\u304C\u6709\u52B9\u304B
82091
82118
  - Google Workspace\u7BA1\u7406\u30B3\u30F3\u30BD\u30FC\u30EB\u3067Gmail API\u30B9\u30B3\u30FC\u30D7\u304C\u8A31\u53EF\u3055\u308C\u3066\u3044\u308B\u304B
82092
82119
  - \u5165\u529B\u3055\u308C\u305F\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u304C\u6B63\u3057\u3044\u304B
82093
- 5. \`${requestToolName7}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u30E9\u30D9\u30EB\u4E00\u89A7\u3092\u53D6\u5F97\u3059\u308B:
82120
+ 5. \`${requestToolName8}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u30E9\u30D9\u30EB\u4E00\u89A7\u3092\u53D6\u5F97\u3059\u308B:
82094
82121
  - \`method\`: \`"GET"\`
82095
82122
  - \`path\`: \`"/me/labels"\`
82096
82123
 
@@ -82106,14 +82133,14 @@ var gmailOnboarding = new ConnectorOnboarding({
82106
82133
  2. Save the email via \`updateConnectionParameters\`:
82107
82134
  - \`parameterSlug\`: \`"delegated-user-email"\`
82108
82135
  - \`options\`: \`[{ value: <entered email>, label: <same value> }]\` (a single option is auto-selected)
82109
- 3. Call \`${requestToolName7}\` to get the user's profile:
82136
+ 3. Call \`${requestToolName8}\` to get the user's profile:
82110
82137
  - \`method\`: \`"GET"\`
82111
82138
  - \`path\`: \`"/me/profile"\`
82112
82139
  4. If an error is returned, ask the user to verify:
82113
82140
  - Domain-wide delegation is enabled for the service account
82114
82141
  - Gmail API scope is authorized in Google Workspace admin console
82115
82142
  - The entered email address is correct
82116
- 5. Call \`${requestToolName7}\` to get the label list:
82143
+ 5. Call \`${requestToolName8}\` to get the label list:
82117
82144
  - \`method\`: \`"GET"\`
82118
82145
  - \`path\`: \`"/me/labels"\`
82119
82146
 
@@ -82465,16 +82492,16 @@ All paths are relative to https://gmail.googleapis.com/gmail/v1/users. Use '/me'
82465
82492
  });
82466
82493
 
82467
82494
  // ../connectors/src/connectors/gmail-oauth/setup.ts
82468
- var requestToolName8 = `gmail-oauth_${requestTool36.name}`;
82495
+ var requestToolName9 = `gmail-oauth_${requestTool36.name}`;
82469
82496
  var gmailOnboarding2 = new ConnectorOnboarding({
82470
82497
  connectionSetupInstructions: {
82471
82498
  ja: `\u4EE5\u4E0B\u306E\u624B\u9806\u3067Gmail\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002
82472
82499
 
82473
- 1. \`${requestToolName8}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u30E6\u30FC\u30B6\u30FC\u306E\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB\u3092\u53D6\u5F97\u3059\u308B:
82500
+ 1. \`${requestToolName9}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u30E6\u30FC\u30B6\u30FC\u306E\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB\u3092\u53D6\u5F97\u3059\u308B:
82474
82501
  - \`method\`: \`"GET"\`
82475
82502
  - \`path\`: \`"/me/profile"\`
82476
82503
  2. \u30A8\u30E9\u30FC\u304C\u8FD4\u3055\u308C\u305F\u5834\u5408\u3001OAuth\u306E\u8A8D\u8A3C\u304C\u6B63\u3057\u304F\u5B8C\u4E86\u3057\u3066\u3044\u308B\u304B\u78BA\u8A8D\u3059\u308B\u3088\u3046\u30E6\u30FC\u30B6\u30FC\u306B\u4F1D\u3048\u308B
82477
- 3. \`${requestToolName8}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u30E9\u30D9\u30EB\u4E00\u89A7\u3092\u53D6\u5F97\u3059\u308B:
82504
+ 3. \`${requestToolName9}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u30E9\u30D9\u30EB\u4E00\u89A7\u3092\u53D6\u5F97\u3059\u308B:
82478
82505
  - \`method\`: \`"GET"\`
82479
82506
  - \`path\`: \`"/me/labels"\`
82480
82507
 
@@ -82483,11 +82510,11 @@ var gmailOnboarding2 = new ConnectorOnboarding({
82483
82510
  - \u30C4\u30FC\u30EB\u9593\u306F1\u6587\u3060\u3051\u66F8\u3044\u3066\u5373\u6B21\u306E\u30C4\u30FC\u30EB\u547C\u3073\u51FA\u3057\u3002\u4E0D\u8981\u306A\u8AAC\u660E\u306F\u7701\u7565\u3057\u3001\u52B9\u7387\u7684\u306B\u9032\u3081\u308B`,
82484
82511
  en: `Follow these steps to set up the Gmail connection.
82485
82512
 
82486
- 1. Call \`${requestToolName8}\` to get the user's profile:
82513
+ 1. Call \`${requestToolName9}\` to get the user's profile:
82487
82514
  - \`method\`: \`"GET"\`
82488
82515
  - \`path\`: \`"/me/profile"\`
82489
82516
  2. If an error is returned, ask the user to verify that OAuth authentication completed correctly
82490
- 3. Call \`${requestToolName8}\` to get the label list:
82517
+ 3. Call \`${requestToolName9}\` to get the label list:
82491
82518
  - \`method\`: \`"GET"\`
82492
82519
  - \`path\`: \`"/me/labels"\`
82493
82520
 
@@ -83690,12 +83717,12 @@ Zendesk uses cursor-based pagination with page[size] and page[after] parameters.
83690
83717
  });
83691
83718
 
83692
83719
  // ../connectors/src/connectors/zendesk-oauth/setup.ts
83693
- var requestToolName9 = `zendesk-oauth_${requestTool39.name}`;
83720
+ var requestToolName10 = `zendesk-oauth_${requestTool39.name}`;
83694
83721
  var zendeskOauthOnboarding = new ConnectorOnboarding({
83695
83722
  connectionSetupInstructions: {
83696
83723
  en: `Follow these steps to set up the Zendesk connection.
83697
83724
 
83698
- 1. Call \`${requestToolName9}\` to fetch account info:
83725
+ 1. Call \`${requestToolName10}\` to fetch account info:
83699
83726
  - \`method\`: \`"GET"\`
83700
83727
  - \`path\`: \`"/api/v2/account/settings.json"\`
83701
83728
  2. If an error is returned, ask the user to check the OAuth connection settings
@@ -83705,7 +83732,7 @@ var zendeskOauthOnboarding = new ConnectorOnboarding({
83705
83732
  - Write only 1 sentence between tool calls, then immediately call the next tool. Skip unnecessary explanations and proceed efficiently`,
83706
83733
  ja: `\u4EE5\u4E0B\u306E\u624B\u9806\u3067Zendesk\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002
83707
83734
 
83708
- 1. \`${requestToolName9}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u30A2\u30AB\u30A6\u30F3\u30C8\u60C5\u5831\u3092\u53D6\u5F97\u3059\u308B:
83735
+ 1. \`${requestToolName10}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u30A2\u30AB\u30A6\u30F3\u30C8\u60C5\u5831\u3092\u53D6\u5F97\u3059\u308B:
83709
83736
  - \`method\`: \`"GET"\`
83710
83737
  - \`path\`: \`"/api/v2/account/settings.json"\`
83711
83738
  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
@@ -84330,12 +84357,12 @@ Search endpoints (contacts/search, conversations/search) use POST with a query o
84330
84357
  });
84331
84358
 
84332
84359
  // ../connectors/src/connectors/intercom-oauth/setup.ts
84333
- var requestToolName10 = `intercom-oauth_${requestTool41.name}`;
84360
+ var requestToolName11 = `intercom-oauth_${requestTool41.name}`;
84334
84361
  var intercomOauthOnboarding = new ConnectorOnboarding({
84335
84362
  connectionSetupInstructions: {
84336
84363
  en: `Follow these steps to set up the Intercom connection.
84337
84364
 
84338
- 1. Call \`${requestToolName10}\` to verify the connection:
84365
+ 1. Call \`${requestToolName11}\` to verify the connection:
84339
84366
  - \`method\`: \`"GET"\`
84340
84367
  - \`path\`: \`"/me"\`
84341
84368
  2. If an error is returned, ask the user to check the OAuth connection settings
@@ -84345,7 +84372,7 @@ var intercomOauthOnboarding = new ConnectorOnboarding({
84345
84372
  - Write only 1 sentence between tool calls, then immediately call the next tool. Skip unnecessary explanations and proceed efficiently`,
84346
84373
  ja: `\u4EE5\u4E0B\u306E\u624B\u9806\u3067Intercom\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002
84347
84374
 
84348
- 1. \`${requestToolName10}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u63A5\u7D9A\u3092\u78BA\u8A8D\u3059\u308B:
84375
+ 1. \`${requestToolName11}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u63A5\u7D9A\u3092\u78BA\u8A8D\u3059\u308B:
84349
84376
  - \`method\`: \`"GET"\`
84350
84377
  - \`path\`: \`"/me"\`
84351
84378
  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
@@ -85829,7 +85856,7 @@ var parameters61 = {
85829
85856
  organizationSlug: new ParameterDefinition({
85830
85857
  slug: "organization-slug",
85831
85858
  name: "Sentry Organization Slug",
85832
- description: "The slug of your Sentry organization (e.g., 'my-org'). Found in your Sentry URL: https://sentry.io/organizations/{slug}/",
85859
+ description: "The slug of your Sentry organization (e.g., 'my-org'). Found in your Sentry URL: https://{slug}.sentry.io/",
85833
85860
  envVarBaseKey: "SENTRY_ORGANIZATION_SLUG",
85834
85861
  type: "text",
85835
85862
  secret: false,
@@ -86535,11 +86562,11 @@ var influxdbOnboarding = new ConnectorOnboarding({
86535
86562
 
86536
86563
  #### Confirm the Database (or Bucket) Name
86537
86564
  - InfluxDB 3: use the database name
86538
- - InfluxDB 2: use the bucket name (buckets act as databases in the v1/v3 compatibility endpoints)
86565
+ - InfluxDB 2 (includes InfluxDB Cloud on \`*.cloud2.influxdata.com\`): use the bucket name (buckets act as databases in the v1/v3 compatibility endpoints)
86539
86566
 
86540
- #### Organization (InfluxDB 2 only)
86541
- - If you are on InfluxDB 2, set the Organization parameter to the org that owns the bucket
86542
- - For InfluxDB 3 Cloud you can leave Organization blank`,
86567
+ #### Organization
86568
+ - InfluxDB 2: set the Organization parameter to the org that owns the bucket (required for Flux queries and writes)
86569
+ - InfluxDB 3 Cloud Serverless: you can leave Organization blank when only using SQL`,
86543
86570
  ja: `#### API \u30C8\u30FC\u30AF\u30F3\u306E\u767A\u884C
86544
86571
  1. InfluxDB Cloud / OSS \u306B\u30B5\u30A4\u30F3\u30A4\u30F3
86545
86572
  2. Load Data \u2192 API Tokens \u2192 Generate API Token
@@ -86548,19 +86575,37 @@ var influxdbOnboarding = new ConnectorOnboarding({
86548
86575
 
86549
86576
  #### Database (\u307E\u305F\u306F Bucket) \u540D\u306E\u78BA\u8A8D
86550
86577
  - InfluxDB 3: database \u540D\u3092\u4F7F\u7528
86551
- - 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
86578
+ - InfluxDB 2\uFF08\`*.cloud2.influxdata.com\` \u306E InfluxDB Cloud \u3092\u542B\u3080\uFF09: 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
86552
86579
 
86553
- #### Organization\uFF08InfluxDB 2 \u306E\u307F\uFF09
86554
- - InfluxDB 2 \u306E\u5834\u5408\u3001bucket \u3092\u4FDD\u6709\u3059\u308B\u7D44\u7E54\u540D\u3092 Organization \u30D1\u30E9\u30E1\u30FC\u30BF\u306B\u8A2D\u5B9A
86555
- - InfluxDB 3 Cloud \u306E\u5834\u5408\u306F\u7A7A\u306E\u307E\u307E\u3067\u554F\u984C\u306A\u3044`
86580
+ #### Organization
86581
+ - InfluxDB 2: bucket \u3092\u4FDD\u6709\u3059\u308B\u7D44\u7E54\u540D\u3092 Organization \u30D1\u30E9\u30E1\u30FC\u30BF\u306B\u8A2D\u5B9A\uFF08Flux \u30AF\u30A8\u30EA\u3068\u66F8\u304D\u8FBC\u307F\u306B\u306F\u5FC5\u9808\uFF09
86582
+ - InfluxDB 3 Cloud Serverless: SQL \u306E\u307F\u3092\u4F7F\u3046\u5834\u5408\u306F\u7A7A\u306E\u307E\u307E\u3067\u554F\u984C\u306A\u3044`
86556
86583
  },
86557
86584
  dataOverviewInstructions: {
86558
- en: `1. For InfluxDB 3: call influxdb_request with POST /api/v3/query_sql, body { "db": "<database>", "q": "SHOW TABLES" } to list measurements
86559
- 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" }
86560
- 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`,
86561
- 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
86562
- 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
86563
- 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`
86585
+ en: `The instance may be either InfluxDB 3 (supports SQL) or InfluxDB 2 (Flux only; includes InfluxDB Cloud on '*.cloud2.influxdata.com'). Detect the variant first, then pick the matching endpoints.
86586
+
86587
+ 1. Probe for InfluxDB 3: call influxdb_request with POST /api/v3/query_sql, body { "db": "<database>", "q": "SELECT 1" }
86588
+ - 200 with JSON rows \u2192 InfluxDB 3. Continue with SQL.
86589
+ - 405 Method Not Allowed, or an HTML body like "<html>...405 Not Allowed..." \u2192 InfluxDB 2. Fall back to Flux (step 3).
86590
+ 2. InfluxDB 3 data overview:
86591
+ a. POST /api/v3/query_sql, body { "db": "<database>", "q": "SHOW TABLES" } to list measurements
86592
+ b. POST /api/v3/query_sql, body { "db": "<database>", "q": "SELECT * FROM <measurement> ORDER BY time DESC LIMIT 5" } to inspect a sample
86593
+ 3. InfluxDB 2 data overview (Organization parameter required):
86594
+ a. POST /api/v2/query?org=<org>, contentType 'application/vnd.flux', body 'buckets()' to list buckets
86595
+ b. POST /api/v2/query?org=<org>, contentType 'application/vnd.flux', body 'from(bucket:"<bucket>") |> range(start: -1h) |> limit(n:5)' to inspect data
86596
+ - If the Organization parameter was not provided but v3 probing failed, ask the user to set it using updateConnectionParameters before continuing.`,
86597
+ ja: `\u63A5\u7D9A\u5148\u306F InfluxDB 3\uFF08SQL \u5BFE\u5FDC\uFF09\u3068 InfluxDB 2\uFF08Flux \u306E\u307F\u3002\`*.cloud2.influxdata.com\` \u306E InfluxDB Cloud \u3092\u542B\u3080\uFF09\u306E\u3069\u3061\u3089\u306E\u53EF\u80FD\u6027\u3082\u3042\u308A\u307E\u3059\u3002\u307E\u305A\u30D0\u30EA\u30A2\u30F3\u30C8\u3092\u5224\u5225\u3057\u3001\u305D\u308C\u306B\u5408\u3046\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002
86598
+
86599
+ 1. InfluxDB 3 \u306E\u5224\u5225: influxdb_request \u3067 POST /api/v3/query_sql\u3001body { "db": "<database>", "q": "SELECT 1" } \u3092\u5B9F\u884C
86600
+ - 200 + JSON \u884C\u304C\u8FD4\u308B \u2192 InfluxDB 3\u3002\u305D\u306E\u307E\u307E SQL \u3067\u7D9A\u884C\u3002
86601
+ - 405 Method Not Allowed\u3001\u307E\u305F\u306F "<html>...405 Not Allowed..." \u306E\u3088\u3046\u306A HTML \u672C\u6587\u304C\u8FD4\u308B \u2192 InfluxDB 2\u3002Flux \u306B\u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF\uFF08\u624B\u9806 3\uFF09\u3002
86602
+ 2. InfluxDB 3 \u306E\u5834\u5408\u306E\u30C7\u30FC\u30BF\u6982\u8981:
86603
+ a. POST /api/v3/query_sql\u3001body { "db": "<database>", "q": "SHOW TABLES" } \u3067 measurement \u4E00\u89A7\u3092\u53D6\u5F97
86604
+ b. POST /api/v3/query_sql\u3001body { "db": "<database>", "q": "SELECT * FROM <measurement> ORDER BY time DESC LIMIT 5" } \u3067\u4EE3\u8868\u7684\u306A measurement \u3092\u78BA\u8A8D
86605
+ 3. InfluxDB 2 \u306E\u5834\u5408\u306E\u30C7\u30FC\u30BF\u6982\u8981\uFF08Organization \u30D1\u30E9\u30E1\u30FC\u30BF\u5FC5\u9808\uFF09:
86606
+ a. POST /api/v2/query?org=<org>\u3001contentType 'application/vnd.flux'\u3001body 'buckets()' \u3067 bucket \u4E00\u89A7\u3092\u53D6\u5F97
86607
+ b. POST /api/v2/query?org=<org>\u3001contentType 'application/vnd.flux'\u3001body 'from(bucket:"<bucket>") |> range(start: -1h) |> limit(n:5)' \u3067\u30C7\u30FC\u30BF\u3092\u78BA\u8A8D
86608
+ - Organization \u30D1\u30E9\u30E1\u30FC\u30BF\u304C\u672A\u8A2D\u5B9A\u3067 v3 \u5224\u5225\u3082\u5931\u6557\u3057\u305F\u5834\u5408\u306F\u3001updateConnectionParameters \u3067\u30E6\u30FC\u30B6\u30FC\u306B\u8A2D\u5B9A\u3092\u4FC3\u3057\u3066\u304B\u3089\u7D9A\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002`
86564
86609
  }
86565
86610
  });
86566
86611
 
@@ -86569,7 +86614,7 @@ var parameters63 = {
86569
86614
  url: new ParameterDefinition({
86570
86615
  slug: "url",
86571
86616
  name: "InfluxDB URL",
86572
- 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.",
86617
+ description: "The base URL of your InfluxDB instance. Do not include a trailing slash. Works with both InfluxDB 2 (e.g., InfluxDB Cloud on '*.cloud2.influxdata.com', OSS 2.x) and InfluxDB 3 (Cloud Serverless, Enterprise, OSS 3.x).",
86573
86618
  envVarBaseKey: "INFLUXDB_URL",
86574
86619
  type: "text",
86575
86620
  secret: false,
@@ -86596,7 +86641,7 @@ var parameters63 = {
86596
86641
  org: new ParameterDefinition({
86597
86642
  slug: "org",
86598
86643
  name: "Organization",
86599
- description: "The InfluxDB organization name. Required for InfluxDB 2.x Flux queries and writes; optional for InfluxDB 3.",
86644
+ description: "The InfluxDB organization name. Required for InfluxDB 2 Flux queries and writes (including InfluxDB Cloud on '*.cloud2.influxdata.com'). Optional for InfluxDB 3 when only using SQL.",
86600
86645
  envVarBaseKey: "INFLUXDB_ORG",
86601
86646
  type: "text",
86602
86647
  secret: false,
@@ -86688,10 +86733,17 @@ For read-only data exploration prefer SQL (InfluxDB 3) or InfluxQL queries \u201
86688
86733
  }
86689
86734
  if (!response.ok) {
86690
86735
  let errorMessage = `HTTP ${response.status} ${response.statusText}`;
86736
+ const bodyText = typeof data === "string" ? data : void 0;
86737
+ const isHtml = resContentType.includes("text/html") || bodyText !== void 0 && bodyText.trimStart().startsWith("<");
86691
86738
  if (data && typeof data === "object" && !Array.isArray(data) && typeof data.message === "string") {
86692
86739
  errorMessage = data.message;
86693
- } else if (typeof data === "string" && data) {
86694
- errorMessage = data;
86740
+ } else if (bodyText) {
86741
+ errorMessage = isHtml ? bodyText.replace(/\s+/g, " ").slice(0, 200) : bodyText;
86742
+ }
86743
+ const hitsV3Path = path4.includes("/api/v3/");
86744
+ const looksLikeMissingV3 = hitsV3Path && (response.status === 405 || response.status === 404 || isHtml);
86745
+ if (looksLikeMissingV3) {
86746
+ errorMessage += " \u2014 This InfluxDB instance does not support the v3 API at this path. It is likely InfluxDB 2 (e.g. InfluxDB Cloud on '*.cloud2.influxdata.com'). Retry via Flux on '/api/v2/query?org={org}' with contentType 'application/vnd.flux'.";
86695
86747
  }
86696
86748
  return { success: false, error: errorMessage };
86697
86749
  }
@@ -86713,14 +86765,22 @@ var influxdbConnector = new ConnectorPlugin({
86713
86765
  authType: AUTH_TYPES.API_KEY,
86714
86766
  name: "InfluxDB",
86715
86767
  description: "Connect to InfluxDB (Cloud or OSS) to query time-series data with SQL, InfluxQL, or Flux and to write line protocol.",
86716
- iconUrl: "https://upload.wikimedia.org/wikipedia/commons/b/b2/Influxdb_logo.svg",
86768
+ iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/J1JauVRNmahSVTVrpPfQK/18350d8d3f2dc3be25e8e36ee52914a0/influxdb.png",
86717
86769
  parameters: parameters63,
86718
86770
  releaseFlag: { dev1: true, dev2: false, prod: false },
86719
86771
  onboarding: influxdbOnboarding,
86720
86772
  systemPrompt: {
86721
- en: `### Tools
86773
+ en: `### Variant Detection
86774
+
86775
+ The configured instance may be **InfluxDB 3** (supports SQL via \`/api/v3/query_sql\`) or **InfluxDB 2** (Flux only; includes InfluxDB Cloud on \`*.cloud2.influxdata.com\`). Always probe first, then use the matching endpoints:
86722
86776
 
86723
- - \`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\`.
86777
+ 1. Call \`influxdb_request\` POST \`/api/v3/query_sql\` with body \`{ "db": "<database>", "q": "SELECT 1" }\`
86778
+ 2. 200 + JSON rows \u2192 InfluxDB 3. Use SQL endpoints.
86779
+ 3. 405 Method Not Allowed or HTML body (e.g. \`<html>...405 Not Allowed...</html>\`) \u2192 InfluxDB 2. Use Flux via \`/api/v2/query?org={org}\`. Require the \`org\` parameter; if missing, ask the user via \`updateConnectionParameters\`.
86780
+
86781
+ ### Tools
86782
+
86783
+ - \`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. On InfluxDB 3 prefer SQL (\`POST /api/v3/query_sql\`) \u2014 it returns JSON rows that are directly usable. On 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\`.
86724
86784
 
86725
86785
  ### Business Logic
86726
86786
 
@@ -86781,7 +86841,15 @@ export default async function handler(c: Context) {
86781
86841
  - Time filtering uses standard SQL \`time\` column comparisons (\`time >= now() - INTERVAL '...' \`)
86782
86842
  - Aggregates: \`AVG\`, \`SUM\`, \`MIN\`, \`MAX\`, \`COUNT\`; bucket time with \`date_bin('5 minutes', time)\`
86783
86843
  - List measurements: \`SHOW TABLES\`; list columns: \`SHOW COLUMNS FROM <measurement>\``,
86784
- ja: `### \u30C4\u30FC\u30EB
86844
+ ja: `### \u30D0\u30EA\u30A2\u30F3\u30C8\u5224\u5225
86845
+
86846
+ \u63A5\u7D9A\u5148\u306F **InfluxDB 3**\uFF08\`/api/v3/query_sql\` \u306E SQL \u5BFE\u5FDC\uFF09\u3068 **InfluxDB 2**\uFF08Flux \u306E\u307F\u3002\`*.cloud2.influxdata.com\` \u306E InfluxDB Cloud \u3092\u542B\u3080\uFF09\u306E\u3069\u3061\u3089\u306E\u53EF\u80FD\u6027\u3082\u3042\u308A\u307E\u3059\u3002\u5FC5\u305A\u6700\u521D\u306B\u30D7\u30ED\u30FC\u30D6\u3057\u3066\u304B\u3089\u3001\u5BFE\u5FDC\u3059\u308B\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044:
86847
+
86848
+ 1. \`influxdb_request\` \u3067 POST \`/api/v3/query_sql\`\u3001body \`{ "db": "<database>", "q": "SELECT 1" }\` \u3092\u547C\u3073\u51FA\u3059
86849
+ 2. 200 + JSON \u884C \u2192 InfluxDB 3\u3002SQL \u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\u3092\u4F7F\u7528\u3002
86850
+ 3. 405 Method Not Allowed\u3001\u307E\u305F\u306F HTML \u672C\u6587\uFF08\u4F8B: \`<html>...405 Not Allowed...</html>\`\uFF09\u2192 InfluxDB 2\u3002\`/api/v2/query?org={org}\` \u304B\u3089 Flux \u3092\u4F7F\u7528\u3002\`org\` \u30D1\u30E9\u30E1\u30FC\u30BF\u5FC5\u9808\u3002\u672A\u8A2D\u5B9A\u306A\u3089 \`updateConnectionParameters\` \u3067\u30E6\u30FC\u30B6\u30FC\u306B\u8A2D\u5B9A\u3092\u4F9D\u983C\u3059\u308B\u3002
86851
+
86852
+ ### \u30C4\u30FC\u30EB
86785
86853
 
86786
86854
  - \`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
86787
86855
 
@@ -86845,7 +86913,47 @@ export default async function handler(c: Context) {
86845
86913
  - \u96C6\u8A08: \`AVG\`, \`SUM\`, \`MIN\`, \`MAX\`, \`COUNT\`\u3002\u6642\u9593\u30D0\u30B1\u30C3\u30C8: \`date_bin('5 minutes', time)\`
86846
86914
  - measurement \u4E00\u89A7: \`SHOW TABLES\`\u3001\u5217\u4E00\u89A7: \`SHOW COLUMNS FROM <measurement>\``
86847
86915
  },
86848
- tools: tools63
86916
+ tools: tools63,
86917
+ async checkConnection(params) {
86918
+ const url = (params.url ?? "").replace(/\/$/, "");
86919
+ const token = params.token;
86920
+ if (!url) {
86921
+ return { success: false, error: "InfluxDB URL is not configured" };
86922
+ }
86923
+ if (!token) {
86924
+ return { success: false, error: "API Token is not configured" };
86925
+ }
86926
+ try {
86927
+ const res = await fetch(`${url}/api/v2/orgs`, {
86928
+ method: "GET",
86929
+ headers: {
86930
+ Authorization: `Token ${token}`,
86931
+ Accept: "application/json"
86932
+ }
86933
+ });
86934
+ if (res.status === 401 || res.status === 403) {
86935
+ return {
86936
+ success: false,
86937
+ error: `Authentication failed (HTTP ${res.status}). Check the API token and its permissions.`
86938
+ };
86939
+ }
86940
+ if (!res.ok) {
86941
+ const body = await res.text().catch(() => res.statusText);
86942
+ const snippet = body.replace(/\s+/g, " ").slice(0, 200);
86943
+ return {
86944
+ success: false,
86945
+ error: `Connection check failed: HTTP ${res.status} ${res.statusText} \u2014 ${snippet}`
86946
+ };
86947
+ }
86948
+ return { success: true };
86949
+ } catch (error2) {
86950
+ const message = error2 instanceof Error ? error2.message : String(error2);
86951
+ return {
86952
+ success: false,
86953
+ error: `Failed to reach InfluxDB at ${url}: ${message}`
86954
+ };
86955
+ }
86956
+ }
86849
86957
  });
86850
86958
 
86851
86959
  // ../connectors/src/connectors/registry.ts