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