@squadbase/vite-server 0.1.17-dev.a9ddcfa → 0.1.17-dev.d4fff69
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/cli/index.js +4299 -821
- package/dist/connectors/airtable-oauth.js +48 -8
- package/dist/connectors/airtable.js +44 -8
- package/dist/connectors/amplitude.js +8 -8
- package/dist/connectors/anthropic.js +2 -2
- package/dist/connectors/asana.js +37 -10
- package/dist/connectors/attio.js +30 -13
- package/dist/connectors/aws-billing.js +8 -8
- package/dist/connectors/azure-sql.js +47 -10
- package/dist/connectors/backlog-api-key.js +40 -15
- package/dist/connectors/clickup.js +50 -10
- package/dist/connectors/cosmosdb.js +12 -12
- package/dist/connectors/customerio.js +8 -8
- package/dist/connectors/dbt.js +686 -25
- package/dist/connectors/freshdesk.js +82 -8
- package/dist/connectors/freshsales.js +8 -8
- package/dist/connectors/freshservice.js +8 -8
- package/dist/connectors/gamma.js +15 -15
- package/dist/connectors/gemini.js +2 -2
- package/dist/connectors/github.js +12 -12
- package/dist/connectors/gmail-oauth.js +10 -10
- package/dist/connectors/gmail.js +4 -4
- package/dist/connectors/google-ads.js +8 -8
- package/dist/connectors/google-analytics-oauth.js +152 -25
- package/dist/connectors/google-analytics.js +490 -96
- package/dist/connectors/google-audit-log.js +4 -4
- package/dist/connectors/google-calendar-oauth.js +61 -15
- package/dist/connectors/google-calendar.js +61 -11
- package/dist/connectors/google-docs.js +10 -10
- package/dist/connectors/google-drive.js +32 -10
- package/dist/connectors/google-search-console-oauth.js +126 -17
- package/dist/connectors/google-sheets.js +6 -6
- package/dist/connectors/google-slides.js +10 -10
- package/dist/connectors/grafana.js +45 -10
- package/dist/connectors/hackernews.d.ts +5 -0
- package/dist/connectors/hackernews.js +890 -0
- package/dist/connectors/hubspot-oauth.js +41 -9
- package/dist/connectors/hubspot.js +25 -9
- package/dist/connectors/influxdb.js +8 -8
- package/dist/connectors/intercom-oauth.js +72 -12
- package/dist/connectors/intercom.js +12 -12
- package/dist/connectors/jdbc.js +37 -10
- package/dist/connectors/jira-api-key.js +68 -11
- package/dist/connectors/kintone-api-token.js +66 -18
- package/dist/connectors/kintone.js +54 -11
- package/dist/connectors/linear.js +54 -12
- package/dist/connectors/linkedin-ads.js +41 -14
- package/dist/connectors/mailchimp-oauth.js +6 -6
- package/dist/connectors/mailchimp.js +6 -6
- package/dist/connectors/meta-ads-oauth.js +33 -14
- package/dist/connectors/meta-ads.js +35 -14
- package/dist/connectors/mixpanel.js +8 -8
- package/dist/connectors/monday.js +9 -9
- package/dist/connectors/mongodb.js +8 -8
- package/dist/connectors/notion-oauth.js +60 -11
- package/dist/connectors/notion.js +60 -11
- package/dist/connectors/openai.js +2 -2
- package/dist/connectors/oracle.js +39 -11
- package/dist/connectors/outlook-oauth.js +21 -21
- package/dist/connectors/powerbi-oauth.js +13 -13
- package/dist/connectors/salesforce.js +42 -9
- package/dist/connectors/semrush.js +6 -6
- package/dist/connectors/sentry.js +36 -10
- package/dist/connectors/shopify-oauth.js +43 -10
- package/dist/connectors/shopify.js +8 -8
- package/dist/connectors/sqlserver.js +47 -10
- package/dist/connectors/stripe-api-key.js +66 -15
- package/dist/connectors/stripe-oauth.js +70 -19
- package/dist/connectors/supabase.js +31 -6
- package/dist/connectors/tableau.js +15 -15
- package/dist/connectors/tiktok-ads.js +37 -16
- package/dist/connectors/wix-store.js +8 -8
- package/dist/connectors/x.d.ts +5 -0
- package/dist/connectors/x.js +927 -0
- package/dist/connectors/zendesk-oauth.js +55 -12
- package/dist/connectors/zendesk.js +12 -12
- package/dist/index.js +4317 -819
- package/dist/main.js +4317 -819
- package/dist/vite-plugin.js +4297 -819
- package/package.json +9 -1
|
@@ -171,7 +171,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
171
171
|
/**
|
|
172
172
|
* Create tools for connections that belong to this connector.
|
|
173
173
|
* Filters connections by connectorKey internally.
|
|
174
|
-
* Returns tools keyed as
|
|
174
|
+
* Returns tools keyed as `connector_${connectorKey}_${toolName}`.
|
|
175
175
|
*/
|
|
176
176
|
createTools(connections, config, opts) {
|
|
177
177
|
const myConnections = connections.filter(
|
|
@@ -181,7 +181,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
181
181
|
for (const t of Object.values(this.tools)) {
|
|
182
182
|
const tool = t.createTool(myConnections, config);
|
|
183
183
|
const originalToModelOutput = tool.toModelOutput;
|
|
184
|
-
result[
|
|
184
|
+
result[`connector_${this.connectorKey}_${t.name}`] = {
|
|
185
185
|
...tool,
|
|
186
186
|
toModelOutput: async (options) => {
|
|
187
187
|
if (!originalToModelOutput) {
|
|
@@ -453,11 +453,11 @@ var linkedinAdsOnboarding = new ConnectorOnboarding({
|
|
|
453
453
|
- Write only 1 sentence between tool calls, then immediately call the next tool. Skip unnecessary explanations and proceed efficiently`
|
|
454
454
|
},
|
|
455
455
|
dataOverviewInstructions: {
|
|
456
|
-
en: `1. Call
|
|
457
|
-
2. Call
|
|
456
|
+
en: `1. Call connector_linkedin-ads_request with GET adAccounts/{adAccountId}/adCampaigns?q=search&search=(status:(values:List(ACTIVE)))&pageSize=10 to explore campaigns
|
|
457
|
+
2. Call connector_linkedin-ads_request with GET adAnalytics?q=analytics&pivot=CAMPAIGN&timeGranularity=MONTHLY&dateRange=(start:(year:2025,month:1,day:1))&accounts=List(urn%3Ali%3AsponsoredAccount%3A{adAccountId})&fields=impressions,clicks,costInLocalCurrency,dateRange,pivotValues to check recent performance
|
|
458
458
|
3. Explore campaign groups and creatives as needed to understand the data structure`,
|
|
459
|
-
ja: `1.
|
|
460
|
-
2.
|
|
459
|
+
ja: `1. connector_linkedin-ads_request \u3067 GET adAccounts/{adAccountId}/adCampaigns?q=search&search=(status:(values:List(ACTIVE)))&pageSize=10 \u3092\u547C\u3073\u51FA\u3057\u3066\u30AD\u30E3\u30F3\u30DA\u30FC\u30F3\u30C7\u30FC\u30BF\u3092\u63A2\u7D22
|
|
460
|
+
2. connector_linkedin-ads_request \u3067 GET adAnalytics?q=analytics&pivot=CAMPAIGN&timeGranularity=MONTHLY&dateRange=(start:(year:2025,month:1,day:1))&accounts=List(urn%3Ali%3AsponsoredAccount%3A{adAccountId})&fields=impressions,clicks,costInLocalCurrency,dateRange,pivotValues \u3092\u547C\u3073\u51FA\u3057\u3066\u76F4\u8FD1\u306E\u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u3092\u78BA\u8A8D
|
|
461
461
|
3. \u5FC5\u8981\u306B\u5FDC\u3058\u3066\u30AD\u30E3\u30F3\u30DA\u30FC\u30F3\u30B0\u30EB\u30FC\u30D7\u3084\u30AF\u30EA\u30A8\u30A4\u30C6\u30A3\u30D6\u3092\u63A2\u7D22\u3057\u3001\u30C7\u30FC\u30BF\u69CB\u9020\u3092\u628A\u63E1`
|
|
462
462
|
}
|
|
463
463
|
});
|
|
@@ -502,6 +502,24 @@ async function listAdAccounts(proxyFetch) {
|
|
|
502
502
|
const data = await res.json();
|
|
503
503
|
return data.elements ?? [];
|
|
504
504
|
}
|
|
505
|
+
async function fetchCampaignCount(proxyFetch, accountId) {
|
|
506
|
+
try {
|
|
507
|
+
const account = encodeURIComponent(
|
|
508
|
+
`urn:li:sponsoredAccount:${accountId}`
|
|
509
|
+
);
|
|
510
|
+
const url = `${BASE_URL3}/adCampaigns?q=search&search.account.values[0]=${account}&count=1`;
|
|
511
|
+
const res = await proxyFetch(url, {
|
|
512
|
+
method: "GET",
|
|
513
|
+
headers: defaultHeaders()
|
|
514
|
+
});
|
|
515
|
+
if (!res.ok) return null;
|
|
516
|
+
const data = await res.json();
|
|
517
|
+
const total = data.paging?.total;
|
|
518
|
+
return typeof total === "number" ? total : null;
|
|
519
|
+
} catch {
|
|
520
|
+
return null;
|
|
521
|
+
}
|
|
522
|
+
}
|
|
505
523
|
var linkedinAdsSetupFlow = {
|
|
506
524
|
initialState: () => ({}),
|
|
507
525
|
steps: [
|
|
@@ -549,16 +567,25 @@ var linkedinAdsSetupFlow = {
|
|
|
549
567
|
sections.push("_No ad accounts selected._", "");
|
|
550
568
|
return sections.join("\n");
|
|
551
569
|
}
|
|
552
|
-
sections.push(
|
|
553
|
-
|
|
554
|
-
|
|
570
|
+
sections.push(
|
|
571
|
+
"| Ad Account ID | Name | Currency | Type | Status | Campaigns |"
|
|
572
|
+
);
|
|
573
|
+
sections.push(
|
|
574
|
+
"|---------------|------|----------|------|--------|-----------|"
|
|
575
|
+
);
|
|
576
|
+
const campaignCounts = await Promise.all(
|
|
577
|
+
targetIds.map((id) => fetchCampaignCount(rt.config.proxyFetch, id))
|
|
578
|
+
);
|
|
579
|
+
for (let i = 0; i < targetIds.length; i++) {
|
|
580
|
+
const id = targetIds[i];
|
|
555
581
|
const account = byId.get(id);
|
|
556
582
|
const name = (account?.name ?? "-").replace(/\|/g, "\\|");
|
|
557
583
|
const currency = account?.currency ?? "-";
|
|
558
584
|
const type = account?.type ?? "-";
|
|
559
585
|
const status = account?.status ?? "-";
|
|
586
|
+
const campaigns = campaignCounts[i] == null ? "-" : String(campaignCounts[i]);
|
|
560
587
|
sections.push(
|
|
561
|
-
`| ${id} | ${name} | ${currency} | ${type} | ${status} |`
|
|
588
|
+
`| ${id} | ${name} | ${currency} | ${type} | ${status} | ${campaigns} |`
|
|
562
589
|
);
|
|
563
590
|
}
|
|
564
591
|
sections.push("");
|
|
@@ -726,8 +753,8 @@ var linkedinAdsConnector = new ConnectorPlugin({
|
|
|
726
753
|
systemPrompt: {
|
|
727
754
|
en: `### Tools
|
|
728
755
|
|
|
729
|
-
- \`
|
|
730
|
-
- \`
|
|
756
|
+
- \`connector_linkedin-ads_request\`: Send authenticated requests to the LinkedIn Marketing API (REST). The {adAccountId} placeholder in paths is automatically replaced. Authentication is handled automatically via OAuth proxy. Required headers (LinkedIn-Version, X-Restli-Protocol-Version) are set automatically.
|
|
757
|
+
- \`connector_linkedin-ads_listAdAccounts\`: List accessible LinkedIn ad accounts. Use this during setup to discover available accounts.
|
|
731
758
|
|
|
732
759
|
### LinkedIn Marketing API Reference
|
|
733
760
|
|
|
@@ -819,8 +846,8 @@ const data = await res.json();
|
|
|
819
846
|
\`\`\``,
|
|
820
847
|
ja: `### \u30C4\u30FC\u30EB
|
|
821
848
|
|
|
822
|
-
- \`
|
|
823
|
-
- \`
|
|
849
|
+
- \`connector_linkedin-ads_request\`: LinkedIn Marketing API\uFF08REST\uFF09\u3078\u8A8D\u8A3C\u6E08\u307F\u30EA\u30AF\u30A8\u30B9\u30C8\u3092\u9001\u4FE1\u3057\u307E\u3059\u3002\u30D1\u30B9\u5185\u306E{adAccountId}\u30D7\u30EC\u30FC\u30B9\u30DB\u30EB\u30C0\u30FC\u306F\u81EA\u52D5\u7684\u306B\u7F6E\u63DB\u3055\u308C\u307E\u3059\u3002\u8A8D\u8A3C\u306FOAuth\u30D7\u30ED\u30AD\u30B7\u7D4C\u7531\u3067\u81EA\u52D5\u7684\u306B\u51E6\u7406\u3055\u308C\u307E\u3059\u3002\u5FC5\u9808\u30D8\u30C3\u30C0\u30FC\uFF08LinkedIn-Version\u3001X-Restli-Protocol-Version\uFF09\u306F\u81EA\u52D5\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002
|
|
850
|
+
- \`connector_linkedin-ads_listAdAccounts\`: \u30A2\u30AF\u30BB\u30B9\u53EF\u80FD\u306ALinkedIn\u5E83\u544A\u30A2\u30AB\u30A6\u30F3\u30C8\u306E\u4E00\u89A7\u3092\u53D6\u5F97\u3057\u307E\u3059\u3002\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306B\u5229\u7528\u53EF\u80FD\u306A\u30A2\u30AB\u30A6\u30F3\u30C8\u3092\u78BA\u8A8D\u3059\u308B\u305F\u3081\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002
|
|
824
851
|
|
|
825
852
|
### LinkedIn Marketing API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
826
853
|
|
|
@@ -177,7 +177,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
177
177
|
/**
|
|
178
178
|
* Create tools for connections that belong to this connector.
|
|
179
179
|
* Filters connections by connectorKey internally.
|
|
180
|
-
* Returns tools keyed as
|
|
180
|
+
* Returns tools keyed as `connector_${connectorKey}_${toolName}`.
|
|
181
181
|
*/
|
|
182
182
|
createTools(connections, config, opts) {
|
|
183
183
|
const myConnections = connections.filter(
|
|
@@ -187,7 +187,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
187
187
|
for (const t of Object.values(this.tools)) {
|
|
188
188
|
const tool = t.createTool(myConnections, config);
|
|
189
189
|
const originalToModelOutput = tool.toModelOutput;
|
|
190
|
-
result[
|
|
190
|
+
result[`connector_${this.connectorKey}_${t.name}`] = {
|
|
191
191
|
...tool,
|
|
192
192
|
toModelOutput: async (options) => {
|
|
193
193
|
if (!originalToModelOutput) {
|
|
@@ -317,11 +317,11 @@ var AUTH_TYPES = {
|
|
|
317
317
|
// ../connectors/src/connectors/mailchimp-oauth/setup.ts
|
|
318
318
|
var mailchimpOauthOnboarding = new ConnectorOnboarding({
|
|
319
319
|
dataOverviewInstructions: {
|
|
320
|
-
en: `1. Call
|
|
320
|
+
en: `1. Call connector_mailchimp-oauth_request with GET /lists to list all audiences
|
|
321
321
|
2. Pick an audience and call GET /lists/{list_id}/members?count=5 to sample members
|
|
322
322
|
3. Call GET /campaigns?count=5 to list recent campaigns
|
|
323
323
|
4. Call GET /reports?count=5 to view campaign reports`,
|
|
324
|
-
ja: `1.
|
|
324
|
+
ja: `1. connector_mailchimp-oauth_request \u3067 GET /lists \u3092\u547C\u3073\u51FA\u3057\u3001\u5168\u30AA\u30FC\u30C7\u30A3\u30A8\u30F3\u30B9\u4E00\u89A7\u3092\u53D6\u5F97
|
|
325
325
|
2. \u30AA\u30FC\u30C7\u30A3\u30A8\u30F3\u30B9\u3092\u9078\u629E\u3057 GET /lists/{list_id}/members?count=5 \u3067\u30E1\u30F3\u30D0\u30FC\u3092\u30B5\u30F3\u30D7\u30EA\u30F3\u30B0
|
|
326
326
|
3. GET /campaigns?count=5 \u3067\u6700\u8FD1\u306E\u30AD\u30E3\u30F3\u30DA\u30FC\u30F3\u4E00\u89A7\u3092\u53D6\u5F97
|
|
327
327
|
4. GET /reports?count=5 \u3067\u30AD\u30E3\u30F3\u30DA\u30FC\u30F3\u30EC\u30DD\u30FC\u30C8\u3092\u8868\u793A`
|
|
@@ -576,7 +576,7 @@ var mailchimpOauthConnector = new ConnectorPlugin({
|
|
|
576
576
|
systemPrompt: {
|
|
577
577
|
en: `### Tools
|
|
578
578
|
|
|
579
|
-
- \`
|
|
579
|
+
- \`connector_mailchimp-oauth_request\`: The only way to call the Mailchimp Marketing API v3. Use it to manage audiences/lists, subscribers/members, campaigns, templates, automations, and reports. Authentication is configured automatically via OAuth.
|
|
580
580
|
|
|
581
581
|
### Mailchimp Marketing API v3 Reference
|
|
582
582
|
|
|
@@ -634,7 +634,7 @@ const data = await res.json();
|
|
|
634
634
|
\`\`\``,
|
|
635
635
|
ja: `### \u30C4\u30FC\u30EB
|
|
636
636
|
|
|
637
|
-
- \`
|
|
637
|
+
- \`connector_mailchimp-oauth_request\`: Mailchimp Marketing API v3\u3092\u547C\u3073\u51FA\u3059\u552F\u4E00\u306E\u624B\u6BB5\u3067\u3059\u3002\u30AA\u30FC\u30C7\u30A3\u30A8\u30F3\u30B9/\u30EA\u30B9\u30C8\u3001\u30B5\u30D6\u30B9\u30AF\u30E9\u30A4\u30D0\u30FC/\u30E1\u30F3\u30D0\u30FC\u3001\u30AD\u30E3\u30F3\u30DA\u30FC\u30F3\u3001\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u3001\u30AA\u30FC\u30C8\u30E1\u30FC\u30B7\u30E7\u30F3\u3001\u30EC\u30DD\u30FC\u30C8\u306E\u7BA1\u7406\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002OAuth\u7D4C\u7531\u3067\u8A8D\u8A3C\u306F\u81EA\u52D5\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002
|
|
638
638
|
|
|
639
639
|
### Mailchimp Marketing API v3 \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
640
640
|
|
|
@@ -282,7 +282,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
282
282
|
/**
|
|
283
283
|
* Create tools for connections that belong to this connector.
|
|
284
284
|
* Filters connections by connectorKey internally.
|
|
285
|
-
* Returns tools keyed as
|
|
285
|
+
* Returns tools keyed as `connector_${connectorKey}_${toolName}`.
|
|
286
286
|
*/
|
|
287
287
|
createTools(connections, config, opts) {
|
|
288
288
|
const myConnections = connections.filter(
|
|
@@ -292,7 +292,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
292
292
|
for (const t of Object.values(this.tools)) {
|
|
293
293
|
const tool = t.createTool(myConnections, config);
|
|
294
294
|
const originalToModelOutput = tool.toModelOutput;
|
|
295
|
-
result[
|
|
295
|
+
result[`connector_${this.connectorKey}_${t.name}`] = {
|
|
296
296
|
...tool,
|
|
297
297
|
toModelOutput: async (options) => {
|
|
298
298
|
if (!originalToModelOutput) {
|
|
@@ -422,11 +422,11 @@ var AUTH_TYPES = {
|
|
|
422
422
|
// ../connectors/src/connectors/mailchimp/setup.ts
|
|
423
423
|
var mailchimpOnboarding = new ConnectorOnboarding({
|
|
424
424
|
dataOverviewInstructions: {
|
|
425
|
-
en: `1. Call
|
|
425
|
+
en: `1. Call connector_mailchimp_request with GET /lists to list all audiences
|
|
426
426
|
2. Pick an audience and call GET /lists/{list_id}/members?count=5 to sample members
|
|
427
427
|
3. Call GET /campaigns?count=5 to list recent campaigns
|
|
428
428
|
4. Call GET /reports?count=5 to view campaign reports`,
|
|
429
|
-
ja: `1.
|
|
429
|
+
ja: `1. connector_mailchimp_request \u3067 GET /lists \u3092\u547C\u3073\u51FA\u3057\u3001\u5168\u30AA\u30FC\u30C7\u30A3\u30A8\u30F3\u30B9\u4E00\u89A7\u3092\u53D6\u5F97
|
|
430
430
|
2. \u30AA\u30FC\u30C7\u30A3\u30A8\u30F3\u30B9\u3092\u9078\u629E\u3057 GET /lists/{list_id}/members?count=5 \u3067\u30E1\u30F3\u30D0\u30FC\u3092\u30B5\u30F3\u30D7\u30EA\u30F3\u30B0
|
|
431
431
|
3. GET /campaigns?count=5 \u3067\u6700\u8FD1\u306E\u30AD\u30E3\u30F3\u30DA\u30FC\u30F3\u4E00\u89A7\u3092\u53D6\u5F97
|
|
432
432
|
4. GET /reports?count=5 \u3067\u30AD\u30E3\u30F3\u30DA\u30FC\u30F3\u30EC\u30DD\u30FC\u30C8\u3092\u8868\u793A`
|
|
@@ -647,7 +647,7 @@ var mailchimpConnector = new ConnectorPlugin({
|
|
|
647
647
|
systemPrompt: {
|
|
648
648
|
en: `### Tools
|
|
649
649
|
|
|
650
|
-
- \`
|
|
650
|
+
- \`connector_mailchimp_request\`: The only way to call the Mailchimp Marketing API v3. Use it to manage audiences/lists, subscribers/members, campaigns, templates, automations, and reports. Authentication (Basic Auth with API key) is configured automatically. The datacenter is extracted from the API key suffix.
|
|
651
651
|
|
|
652
652
|
### Business Logic
|
|
653
653
|
|
|
@@ -744,7 +744,7 @@ export default async function handler(c: Context) {
|
|
|
744
744
|
- Errors return \`type\`, \`title\`, \`status\`, \`detail\`, and \`instance\` fields`,
|
|
745
745
|
ja: `### \u30C4\u30FC\u30EB
|
|
746
746
|
|
|
747
|
-
- \`
|
|
747
|
+
- \`connector_mailchimp_request\`: Mailchimp Marketing API v3\u3092\u547C\u3073\u51FA\u3059\u552F\u4E00\u306E\u624B\u6BB5\u3067\u3059\u3002\u30AA\u30FC\u30C7\u30A3\u30A8\u30F3\u30B9/\u30EA\u30B9\u30C8\u3001\u30B5\u30D6\u30B9\u30AF\u30E9\u30A4\u30D0\u30FC/\u30E1\u30F3\u30D0\u30FC\u3001\u30AD\u30E3\u30F3\u30DA\u30FC\u30F3\u3001\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u3001\u30AA\u30FC\u30C8\u30E1\u30FC\u30B7\u30E7\u30F3\u3001\u30EC\u30DD\u30FC\u30C8\u306E\u7BA1\u7406\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002\u8A8D\u8A3C\uFF08API\u30AD\u30FC\u306B\u3088\u308BBasic Auth\uFF09\u306F\u81EA\u52D5\u7684\u306B\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002\u30C7\u30FC\u30BF\u30BB\u30F3\u30BF\u30FC\u306FAPI\u30AD\u30FC\u306E\u30B5\u30D5\u30A3\u30C3\u30AF\u30B9\u304B\u3089\u81EA\u52D5\u691C\u51FA\u3055\u308C\u307E\u3059\u3002
|
|
748
748
|
|
|
749
749
|
### Business Logic
|
|
750
750
|
|
|
@@ -171,7 +171,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
171
171
|
/**
|
|
172
172
|
* Create tools for connections that belong to this connector.
|
|
173
173
|
* Filters connections by connectorKey internally.
|
|
174
|
-
* Returns tools keyed as
|
|
174
|
+
* Returns tools keyed as `connector_${connectorKey}_${toolName}`.
|
|
175
175
|
*/
|
|
176
176
|
createTools(connections, config, opts) {
|
|
177
177
|
const myConnections = connections.filter(
|
|
@@ -181,7 +181,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
181
181
|
for (const t of Object.values(this.tools)) {
|
|
182
182
|
const tool = t.createTool(myConnections, config);
|
|
183
183
|
const originalToModelOutput = tool.toModelOutput;
|
|
184
|
-
result[
|
|
184
|
+
result[`connector_${this.connectorKey}_${t.name}`] = {
|
|
185
185
|
...tool,
|
|
186
186
|
toModelOutput: async (options) => {
|
|
187
187
|
if (!originalToModelOutput) {
|
|
@@ -448,11 +448,11 @@ var metaAdsOauthOnboarding = new ConnectorOnboarding({
|
|
|
448
448
|
- Write only 1 sentence between tool calls, then immediately call the next tool. Skip unnecessary explanations and proceed efficiently`
|
|
449
449
|
},
|
|
450
450
|
dataOverviewInstructions: {
|
|
451
|
-
en: `1. Call
|
|
452
|
-
2. Call
|
|
451
|
+
en: `1. Call connector_meta-ads-oauth_request with GET act_{adAccountId}/campaigns?fields=id,name,status,objective to explore campaign data
|
|
452
|
+
2. Call connector_meta-ads-oauth_request with GET act_{adAccountId}/insights?fields=impressions,clicks,spend,ctr,cpm&date_preset=last_7d to check recent performance
|
|
453
453
|
3. Explore ad sets and ads as needed to understand the data structure`,
|
|
454
|
-
ja: `1.
|
|
455
|
-
2.
|
|
454
|
+
ja: `1. connector_meta-ads-oauth_request \u3067 GET act_{adAccountId}/campaigns?fields=id,name,status,objective \u3092\u547C\u3073\u51FA\u3057\u3066\u30AD\u30E3\u30F3\u30DA\u30FC\u30F3\u30C7\u30FC\u30BF\u3092\u63A2\u7D22
|
|
455
|
+
2. connector_meta-ads-oauth_request \u3067 GET act_{adAccountId}/insights?fields=impressions,clicks,spend,ctr,cpm&date_preset=last_7d \u3092\u547C\u3073\u51FA\u3057\u3066\u76F4\u8FD1\u306E\u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u3092\u78BA\u8A8D
|
|
456
456
|
3. \u5FC5\u8981\u306B\u5FDC\u3058\u3066\u5E83\u544A\u30BB\u30C3\u30C8\u3084\u5E83\u544A\u30C7\u30FC\u30BF\u3092\u63A2\u7D22\u3057\u3001\u30C7\u30FC\u30BF\u69CB\u9020\u3092\u628A\u63E1`
|
|
457
457
|
}
|
|
458
458
|
});
|
|
@@ -503,6 +503,18 @@ async function listAdAccounts(proxyFetch) {
|
|
|
503
503
|
const data = await res.json();
|
|
504
504
|
return data.data ?? [];
|
|
505
505
|
}
|
|
506
|
+
async function fetchCampaignCount(proxyFetch, accountId) {
|
|
507
|
+
try {
|
|
508
|
+
const url = `${BASE_URL3}/act_${encodeURIComponent(accountId)}/campaigns?summary=total_count&limit=0`;
|
|
509
|
+
const res = await proxyFetch(url, { method: "GET" });
|
|
510
|
+
if (!res.ok) return null;
|
|
511
|
+
const data = await res.json();
|
|
512
|
+
const total = data.summary?.total_count;
|
|
513
|
+
return typeof total === "number" ? total : null;
|
|
514
|
+
} catch {
|
|
515
|
+
return null;
|
|
516
|
+
}
|
|
517
|
+
}
|
|
506
518
|
function bareAdAccountId(account) {
|
|
507
519
|
if (account.account_id) return account.account_id;
|
|
508
520
|
return (account.id ?? "").replace(/^act_/, "");
|
|
@@ -554,14 +566,21 @@ var metaAdsOauthSetupFlow = {
|
|
|
554
566
|
sections.push("_No ad accounts selected._", "");
|
|
555
567
|
return sections.join("\n");
|
|
556
568
|
}
|
|
557
|
-
sections.push("| Ad Account ID | Name | Currency | Status |");
|
|
558
|
-
sections.push("
|
|
559
|
-
|
|
569
|
+
sections.push("| Ad Account ID | Name | Currency | Status | Campaigns |");
|
|
570
|
+
sections.push("|---------------|------|----------|--------|-----------|");
|
|
571
|
+
const campaignCounts = await Promise.all(
|
|
572
|
+
targetIds.map((id) => fetchCampaignCount(rt.config.proxyFetch, id))
|
|
573
|
+
);
|
|
574
|
+
for (let i = 0; i < targetIds.length; i++) {
|
|
575
|
+
const id = targetIds[i];
|
|
560
576
|
const account = byId.get(id);
|
|
561
577
|
const name = (account?.name ?? "-").replace(/\|/g, "\\|");
|
|
562
578
|
const currency = account?.currency ?? "-";
|
|
563
579
|
const status = statusLabel(account?.account_status);
|
|
564
|
-
|
|
580
|
+
const campaigns = campaignCounts[i] == null ? "-" : String(campaignCounts[i]);
|
|
581
|
+
sections.push(
|
|
582
|
+
`| ${id} | ${name} | ${currency} | ${status} | ${campaigns} |`
|
|
583
|
+
);
|
|
565
584
|
}
|
|
566
585
|
sections.push("");
|
|
567
586
|
return sections.join("\n");
|
|
@@ -716,8 +735,8 @@ var metaAdsOauthConnector = new ConnectorPlugin({
|
|
|
716
735
|
systemPrompt: {
|
|
717
736
|
en: `### Tools
|
|
718
737
|
|
|
719
|
-
- \`
|
|
720
|
-
- \`
|
|
738
|
+
- \`connector_meta-ads-oauth_request\`: Send authenticated requests to the Meta Marketing API v21.0. The {adAccountId} placeholder in paths is automatically replaced. Authentication is handled automatically via OAuth proxy.
|
|
739
|
+
- \`connector_meta-ads-oauth_listAdAccounts\`: List accessible Meta ad accounts. Use this during setup to discover available accounts.
|
|
721
740
|
|
|
722
741
|
### Meta Marketing API Reference
|
|
723
742
|
|
|
@@ -773,8 +792,8 @@ const data = await res.json();
|
|
|
773
792
|
\`\`\``,
|
|
774
793
|
ja: `### \u30C4\u30FC\u30EB
|
|
775
794
|
|
|
776
|
-
- \`
|
|
777
|
-
- \`
|
|
795
|
+
- \`connector_meta-ads-oauth_request\`: Meta Marketing API v21.0\u3078\u8A8D\u8A3C\u6E08\u307F\u30EA\u30AF\u30A8\u30B9\u30C8\u3092\u9001\u4FE1\u3057\u307E\u3059\u3002\u30D1\u30B9\u5185\u306E{adAccountId}\u30D7\u30EC\u30FC\u30B9\u30DB\u30EB\u30C0\u30FC\u306F\u81EA\u52D5\u7684\u306B\u7F6E\u63DB\u3055\u308C\u307E\u3059\u3002\u8A8D\u8A3C\u306FOAuth\u30D7\u30ED\u30AD\u30B7\u7D4C\u7531\u3067\u81EA\u52D5\u7684\u306B\u51E6\u7406\u3055\u308C\u307E\u3059\u3002
|
|
796
|
+
- \`connector_meta-ads-oauth_listAdAccounts\`: \u30A2\u30AF\u30BB\u30B9\u53EF\u80FD\u306AMeta\u5E83\u544A\u30A2\u30AB\u30A6\u30F3\u30C8\u306E\u4E00\u89A7\u3092\u53D6\u5F97\u3057\u307E\u3059\u3002\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306B\u5229\u7528\u53EF\u80FD\u306A\u30A2\u30AB\u30A6\u30F3\u30C8\u3092\u78BA\u8A8D\u3059\u308B\u305F\u3081\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002
|
|
778
797
|
|
|
779
798
|
### Meta Marketing API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
780
799
|
|
|
@@ -242,7 +242,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
242
242
|
/**
|
|
243
243
|
* Create tools for connections that belong to this connector.
|
|
244
244
|
* Filters connections by connectorKey internally.
|
|
245
|
-
* Returns tools keyed as
|
|
245
|
+
* Returns tools keyed as `connector_${connectorKey}_${toolName}`.
|
|
246
246
|
*/
|
|
247
247
|
createTools(connections, config, opts) {
|
|
248
248
|
const myConnections = connections.filter(
|
|
@@ -252,7 +252,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
252
252
|
for (const t of Object.values(this.tools)) {
|
|
253
253
|
const tool = t.createTool(myConnections, config);
|
|
254
254
|
const originalToModelOutput = tool.toModelOutput;
|
|
255
|
-
result[
|
|
255
|
+
result[`connector_${this.connectorKey}_${t.name}`] = {
|
|
256
256
|
...tool,
|
|
257
257
|
toModelOutput: async (options) => {
|
|
258
258
|
if (!originalToModelOutput) {
|
|
@@ -480,11 +480,11 @@ var metaAdsOnboarding = new ConnectorOnboarding({
|
|
|
480
480
|
- Write only 1 sentence between tool calls, then immediately call the next tool. Skip unnecessary explanations and proceed efficiently`
|
|
481
481
|
},
|
|
482
482
|
dataOverviewInstructions: {
|
|
483
|
-
en: `1. Call
|
|
484
|
-
2. Call
|
|
483
|
+
en: `1. Call connector_meta-ads_request with GET act_{adAccountId}/campaigns?fields=id,name,status,objective to explore campaign data
|
|
484
|
+
2. Call connector_meta-ads_request with GET act_{adAccountId}/insights?fields=impressions,clicks,spend,ctr,cpm&date_preset=last_7d to check recent performance
|
|
485
485
|
3. Explore ad sets and ads as needed to understand the data structure`,
|
|
486
|
-
ja: `1.
|
|
487
|
-
2.
|
|
486
|
+
ja: `1. connector_meta-ads_request \u3067 GET act_{adAccountId}/campaigns?fields=id,name,status,objective \u3092\u547C\u3073\u51FA\u3057\u3066\u30AD\u30E3\u30F3\u30DA\u30FC\u30F3\u30C7\u30FC\u30BF\u3092\u63A2\u7D22
|
|
487
|
+
2. connector_meta-ads_request \u3067 GET act_{adAccountId}/insights?fields=impressions,clicks,spend,ctr,cpm&date_preset=last_7d \u3092\u547C\u3073\u51FA\u3057\u3066\u76F4\u8FD1\u306E\u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u3092\u78BA\u8A8D
|
|
488
488
|
3. \u5FC5\u8981\u306B\u5FDC\u3058\u3066\u5E83\u544A\u30BB\u30C3\u30C8\u3084\u5E83\u544A\u30C7\u30FC\u30BF\u3092\u63A2\u7D22\u3057\u3001\u30C7\u30FC\u30BF\u69CB\u9020\u3092\u628A\u63E1`
|
|
489
489
|
}
|
|
490
490
|
});
|
|
@@ -532,6 +532,20 @@ async function listAdAccounts(params) {
|
|
|
532
532
|
const data = await res.json();
|
|
533
533
|
return data.data ?? [];
|
|
534
534
|
}
|
|
535
|
+
async function fetchCampaignCount(params, accountId) {
|
|
536
|
+
try {
|
|
537
|
+
const res = await apiFetch(
|
|
538
|
+
params,
|
|
539
|
+
`/act_${encodeURIComponent(accountId)}/campaigns?summary=total_count&limit=0`
|
|
540
|
+
);
|
|
541
|
+
if (!res.ok) return null;
|
|
542
|
+
const data = await res.json();
|
|
543
|
+
const total = data.summary?.total_count;
|
|
544
|
+
return typeof total === "number" ? total : null;
|
|
545
|
+
} catch {
|
|
546
|
+
return null;
|
|
547
|
+
}
|
|
548
|
+
}
|
|
535
549
|
function bareAdAccountId(account) {
|
|
536
550
|
if (account.account_id) return account.account_id;
|
|
537
551
|
return (account.id ?? "").replace(/^act_/, "");
|
|
@@ -583,14 +597,21 @@ var metaAdsSetupFlow = {
|
|
|
583
597
|
sections.push("_No ad accounts selected._", "");
|
|
584
598
|
return sections.join("\n");
|
|
585
599
|
}
|
|
586
|
-
sections.push("| Ad Account ID | Name | Currency | Status |");
|
|
587
|
-
sections.push("
|
|
588
|
-
|
|
600
|
+
sections.push("| Ad Account ID | Name | Currency | Status | Campaigns |");
|
|
601
|
+
sections.push("|---------------|------|----------|--------|-----------|");
|
|
602
|
+
const campaignCounts = await Promise.all(
|
|
603
|
+
targetIds.map((id) => fetchCampaignCount(rt.params, id))
|
|
604
|
+
);
|
|
605
|
+
for (let i = 0; i < targetIds.length; i++) {
|
|
606
|
+
const id = targetIds[i];
|
|
589
607
|
const account = byId.get(id);
|
|
590
608
|
const name = (account?.name ?? "-").replace(/\|/g, "\\|");
|
|
591
609
|
const currency = account?.currency ?? "-";
|
|
592
610
|
const status = statusLabel(account?.account_status);
|
|
593
|
-
|
|
611
|
+
const campaigns = campaignCounts[i] == null ? "-" : String(campaignCounts[i]);
|
|
612
|
+
sections.push(
|
|
613
|
+
`| ${id} | ${name} | ${currency} | ${status} | ${campaigns} |`
|
|
614
|
+
);
|
|
594
615
|
}
|
|
595
616
|
sections.push("");
|
|
596
617
|
return sections.join("\n");
|
|
@@ -698,8 +719,8 @@ var metaAdsConnector = new ConnectorPlugin({
|
|
|
698
719
|
systemPrompt: {
|
|
699
720
|
en: `### Tools
|
|
700
721
|
|
|
701
|
-
- \`
|
|
702
|
-
- \`
|
|
722
|
+
- \`connector_meta-ads_request\`: Send authenticated requests to the Meta Marketing API v21.0. The {adAccountId} placeholder in paths is automatically replaced. Authentication is configured via the access token parameter.
|
|
723
|
+
- \`connector_meta-ads_listAdAccounts\`: List accessible Meta ad accounts. Use this during setup to discover available accounts.
|
|
703
724
|
|
|
704
725
|
### Meta Marketing API Reference
|
|
705
726
|
|
|
@@ -760,8 +781,8 @@ const accounts = await meta.listAdAccounts();
|
|
|
760
781
|
\`\`\``,
|
|
761
782
|
ja: `### \u30C4\u30FC\u30EB
|
|
762
783
|
|
|
763
|
-
- \`
|
|
764
|
-
- \`
|
|
784
|
+
- \`connector_meta-ads_request\`: Meta Marketing API v21.0\u3078\u8A8D\u8A3C\u6E08\u307F\u30EA\u30AF\u30A8\u30B9\u30C8\u3092\u9001\u4FE1\u3057\u307E\u3059\u3002\u30D1\u30B9\u5185\u306E{adAccountId}\u30D7\u30EC\u30FC\u30B9\u30DB\u30EB\u30C0\u30FC\u306F\u81EA\u52D5\u7684\u306B\u7F6E\u63DB\u3055\u308C\u307E\u3059\u3002\u8A8D\u8A3C\u306F\u30A2\u30AF\u30BB\u30B9\u30C8\u30FC\u30AF\u30F3\u30D1\u30E9\u30E1\u30FC\u30BF\u3067\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002
|
|
785
|
+
- \`connector_meta-ads_listAdAccounts\`: \u30A2\u30AF\u30BB\u30B9\u53EF\u80FD\u306AMeta\u5E83\u544A\u30A2\u30AB\u30A6\u30F3\u30C8\u306E\u4E00\u89A7\u3092\u53D6\u5F97\u3057\u307E\u3059\u3002\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306B\u5229\u7528\u53EF\u80FD\u306A\u30A2\u30AB\u30A6\u30F3\u30C8\u3092\u78BA\u8A8D\u3059\u308B\u305F\u3081\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002
|
|
765
786
|
|
|
766
787
|
### Meta Marketing API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
767
788
|
|
|
@@ -334,7 +334,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
334
334
|
/**
|
|
335
335
|
* Create tools for connections that belong to this connector.
|
|
336
336
|
* Filters connections by connectorKey internally.
|
|
337
|
-
* Returns tools keyed as
|
|
337
|
+
* Returns tools keyed as `connector_${connectorKey}_${toolName}`.
|
|
338
338
|
*/
|
|
339
339
|
createTools(connections, config, opts) {
|
|
340
340
|
const myConnections = connections.filter(
|
|
@@ -344,7 +344,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
344
344
|
for (const t of Object.values(this.tools)) {
|
|
345
345
|
const tool = t.createTool(myConnections, config);
|
|
346
346
|
const originalToModelOutput = tool.toModelOutput;
|
|
347
|
-
result[
|
|
347
|
+
result[`connector_${this.connectorKey}_${t.name}`] = {
|
|
348
348
|
...tool,
|
|
349
349
|
toModelOutput: async (options) => {
|
|
350
350
|
if (!originalToModelOutput) {
|
|
@@ -473,15 +473,15 @@ var mixpanelOnboarding = new ConnectorOnboarding({
|
|
|
473
473
|
- US (default): https://mixpanel.com/api/query (Query API), https://data.mixpanel.com/api/2.0/export (Export API)
|
|
474
474
|
- EU: https://eu.mixpanel.com/api/query, https://data-eu.mixpanel.com/api/2.0/export
|
|
475
475
|
- India: https://in.mixpanel.com/api/query, https://data-in.mixpanel.com/api/2.0/export
|
|
476
|
-
2. Call
|
|
477
|
-
3. Call
|
|
476
|
+
2. Call connector_mixpanel_request with GET {exportBase}?from_date=YYYY-MM-DD&to_date=YYYY-MM-DD (use a short recent date range, e.g. 1-2 days) to export raw events and discover available event types and properties
|
|
477
|
+
3. Call connector_mixpanel_request with POST {queryBase}/engage to query user profiles and understand user properties
|
|
478
478
|
NOTE: The Query API endpoints (insights, funnels, retention) require a bookmark_id or funnel_id from existing reports in Mixpanel. Use the Export API to retrieve raw events and aggregate in code if you need ad-hoc analysis.`,
|
|
479
479
|
ja: `1. \u63A5\u7D9A\u306Eregion\u30D1\u30E9\u30E1\u30FC\u30BF\u3092\u78BA\u8A8D\u3057\u3066\u30D9\u30FC\u30B9URL\u3092\u6C7A\u5B9A\uFF1A
|
|
480
480
|
- US\uFF08\u30C7\u30D5\u30A9\u30EB\u30C8\uFF09: https://mixpanel.com/api/query\uFF08Query API\uFF09\u3001https://data.mixpanel.com/api/2.0/export\uFF08Export API\uFF09
|
|
481
481
|
- EU: https://eu.mixpanel.com/api/query\u3001https://data-eu.mixpanel.com/api/2.0/export
|
|
482
482
|
- India: https://in.mixpanel.com/api/query\u3001https://data-in.mixpanel.com/api/2.0/export
|
|
483
|
-
2.
|
|
484
|
-
3.
|
|
483
|
+
2. connector_mixpanel_request \u3067 GET {exportBase}?from_date=YYYY-MM-DD&to_date=YYYY-MM-DD \u3092\u547C\u3073\u51FA\u3057\uFF08\u76F4\u8FD11-2\u65E5\u306E\u77ED\u3044\u671F\u9593\u3092\u4F7F\u7528\uFF09\u3001\u751F\u30A4\u30D9\u30F3\u30C8\u3092\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u3057\u3066\u5229\u7528\u53EF\u80FD\u306A\u30A4\u30D9\u30F3\u30C8\u30BF\u30A4\u30D7\u3068\u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u78BA\u8A8D
|
|
484
|
+
3. connector_mixpanel_request \u3067 POST {queryBase}/engage \u3092\u547C\u3073\u51FA\u3057\u3001\u30E6\u30FC\u30B6\u30FC\u30D7\u30ED\u30D5\u30A1\u30A4\u30EB\u3092\u7167\u4F1A\u3057\u3066\u30E6\u30FC\u30B6\u30FC\u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u628A\u63E1
|
|
485
485
|
\u6CE8\u610F: Query API\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\uFF08insights\u3001funnels\u3001retention\uFF09\u306FMixpanel\u5185\u306E\u65E2\u5B58\u30EC\u30DD\u30FC\u30C8\u306Ebookmark_id\u307E\u305F\u306Ffunnel_id\u304C\u5FC5\u8981\u3067\u3059\u3002\u30A2\u30C9\u30DB\u30C3\u30AF\u5206\u6790\u304C\u5FC5\u8981\u306A\u5834\u5408\u306F\u3001Export API\u3067\u751F\u30A4\u30D9\u30F3\u30C8\u3092\u53D6\u5F97\u3057\u3001\u30B3\u30FC\u30C9\u4E0A\u3067\u96C6\u8A08\u3057\u3066\u304F\u3060\u3055\u3044\u3002`
|
|
486
486
|
}
|
|
487
487
|
});
|
|
@@ -757,7 +757,7 @@ var mixpanelConnector = new ConnectorPlugin({
|
|
|
757
757
|
systemPrompt: {
|
|
758
758
|
en: `### Tools
|
|
759
759
|
|
|
760
|
-
- \`
|
|
760
|
+
- \`connector_mixpanel_request\`: The only way to call the Mixpanel REST API. Use it for exporting raw events, querying insights/funnels/retention reports, and querying user profiles. Authentication (Basic auth with Service Account username + secret) is configured automatically. The project_id query parameter is appended automatically. Provide the full URL including query parameters \u2014 the base URL varies by region and endpoint type.
|
|
761
761
|
|
|
762
762
|
### Business Logic
|
|
763
763
|
|
|
@@ -816,7 +816,7 @@ export default async function handler(c: Context) {
|
|
|
816
816
|
IMPORTANT: The Insights endpoint requires a bookmark_id from an existing report in the Mixpanel UI. For ad-hoc event analysis, use the Export API to retrieve raw events and aggregate them in code. The Export API is the most flexible and universally accessible endpoint.`,
|
|
817
817
|
ja: `### \u30C4\u30FC\u30EB
|
|
818
818
|
|
|
819
|
-
- \`
|
|
819
|
+
- \`connector_mixpanel_request\`: Mixpanel REST API\u3092\u547C\u3073\u51FA\u3059\u552F\u4E00\u306E\u624B\u6BB5\u3067\u3059\u3002\u751F\u30A4\u30D9\u30F3\u30C8\u306E\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u3001\u30A4\u30F3\u30B5\u30A4\u30C8/\u30D5\u30A1\u30CD\u30EB/\u30EA\u30C6\u30F3\u30B7\u30E7\u30F3\u30EC\u30DD\u30FC\u30C8\u306E\u7167\u4F1A\u3001\u30E6\u30FC\u30B6\u30FC\u30D7\u30ED\u30D5\u30A1\u30A4\u30EB\u306E\u7167\u4F1A\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002\u8A8D\u8A3C\uFF08Service Account\u306E\u30E6\u30FC\u30B6\u30FC\u540D+\u30B7\u30FC\u30AF\u30EC\u30C3\u30C8\u306B\u3088\u308BBasic\u8A8D\u8A3C\uFF09\u306F\u81EA\u52D5\u7684\u306B\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002project_id\u30AF\u30A8\u30EA\u30D1\u30E9\u30E1\u30FC\u30BF\u306F\u81EA\u52D5\u7684\u306B\u4ED8\u52A0\u3055\u308C\u307E\u3059\u3002\u30AF\u30A8\u30EA\u30D1\u30E9\u30E1\u30FC\u30BF\u3092\u542B\u3080\u5B8C\u5168\u306AURL\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044 \u2014 \u30D9\u30FC\u30B9URL\u306F\u30EA\u30FC\u30B8\u30E7\u30F3\u3068\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\u30BF\u30A4\u30D7\u306B\u3088\u3063\u3066\u7570\u306A\u308A\u307E\u3059\u3002
|
|
820
820
|
|
|
821
821
|
### Business Logic
|
|
822
822
|
|
|
@@ -364,7 +364,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
364
364
|
/**
|
|
365
365
|
* Create tools for connections that belong to this connector.
|
|
366
366
|
* Filters connections by connectorKey internally.
|
|
367
|
-
* Returns tools keyed as
|
|
367
|
+
* Returns tools keyed as `connector_${connectorKey}_${toolName}`.
|
|
368
368
|
*/
|
|
369
369
|
createTools(connections, config, opts) {
|
|
370
370
|
const myConnections = connections.filter(
|
|
@@ -374,7 +374,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
374
374
|
for (const t of Object.values(this.tools)) {
|
|
375
375
|
const tool = t.createTool(myConnections, config);
|
|
376
376
|
const originalToModelOutput = tool.toModelOutput;
|
|
377
|
-
result[
|
|
377
|
+
result[`connector_${this.connectorKey}_${t.name}`] = {
|
|
378
378
|
...tool,
|
|
379
379
|
toModelOutput: async (options) => {
|
|
380
380
|
if (!originalToModelOutput) {
|
|
@@ -504,13 +504,13 @@ var AUTH_TYPES = {
|
|
|
504
504
|
// ../connectors/src/connectors/monday/setup.ts
|
|
505
505
|
var mondayOnboarding = new ConnectorOnboarding({
|
|
506
506
|
dataOverviewInstructions: {
|
|
507
|
-
en: `1. Call
|
|
508
|
-
2. Call
|
|
509
|
-
3. For a target board, call
|
|
507
|
+
en: `1. Call connector_monday_request with query \`{ me { id name email account { id name } } }\` to verify the token and identify the account
|
|
508
|
+
2. Call connector_monday_request with query \`{ boards(limit: 10) { id name state board_kind workspace { id name } } }\` to list boards
|
|
509
|
+
3. For a target board, call connector_monday_request with query \`{ boards(ids: [BOARD_ID]) { id name columns { id title type settings_str } } }\` to inspect column definitions
|
|
510
510
|
4. Sample items with \`{ boards(ids: [BOARD_ID]) { items_page(limit: 5) { cursor items { id name created_at updated_at column_values { id text value } } } } }\`
|
|
511
511
|
5. Explore other resources (workspaces, users, tags) as needed`,
|
|
512
|
-
ja: `1.
|
|
513
|
-
2.
|
|
512
|
+
ja: `1. connector_monday_request \u3067\u30AF\u30A8\u30EA \`{ me { id name email account { id name } } }\` \u3092\u547C\u3073\u51FA\u3057\u3001\u30C8\u30FC\u30AF\u30F3\u306E\u691C\u8A3C\u3068\u30A2\u30AB\u30A6\u30F3\u30C8\u306E\u78BA\u8A8D
|
|
513
|
+
2. connector_monday_request \u3067\u30AF\u30A8\u30EA \`{ boards(limit: 10) { id name state board_kind workspace { id name } } }\` \u3092\u547C\u3073\u51FA\u3057\u3001\u30DC\u30FC\u30C9\u4E00\u89A7\u3092\u53D6\u5F97
|
|
514
514
|
3. \u5BFE\u8C61\u30DC\u30FC\u30C9\u306B\u5BFE\u3057\u3066 \`{ boards(ids: [BOARD_ID]) { id name columns { id title type settings_str } } }\` \u3092\u547C\u3073\u51FA\u3057\u3001\u30AB\u30E9\u30E0\u5B9A\u7FA9\u3092\u78BA\u8A8D
|
|
515
515
|
4. \`{ boards(ids: [BOARD_ID]) { items_page(limit: 5) { cursor items { id name created_at updated_at column_values { id text value } } } } }\` \u3067\u30A2\u30A4\u30C6\u30E0\u3092\u30B5\u30F3\u30D7\u30EA\u30F3\u30B0
|
|
516
516
|
5. \u5FC5\u8981\u306B\u5FDC\u3058\u3066\u4ED6\u306E\u30EA\u30BD\u30FC\u30B9\uFF08workspaces\u3001users\u3001tags\uFF09\u3092\u63A2\u7D22`
|
|
@@ -773,7 +773,7 @@ var mondayConnector = new ConnectorPlugin({
|
|
|
773
773
|
systemPrompt: {
|
|
774
774
|
en: `### Tools
|
|
775
775
|
|
|
776
|
-
- \`
|
|
776
|
+
- \`connector_monday_request\`: The only way to call the monday.com GraphQL API. Use it to query and mutate all monday.com resources: boards, items, groups, columns, column values, users, workspaces, tags, teams, and updates. Authentication is configured automatically. monday.com's API is GraphQL-only \u2014 send a query string and optional variables. Items on a board are paginated with cursor-based \`items_page(limit, cursor)\`; boards/users/workspaces use page-based \`limit\`/\`page\`. IDs are passed as the GraphQL \`ID\` scalar (string).
|
|
777
777
|
|
|
778
778
|
### Business Logic
|
|
779
779
|
|
|
@@ -863,7 +863,7 @@ const items = res.data?.boards?.[0]?.items_page?.items; // always undefined!
|
|
|
863
863
|
- Some fields (e.g. \`board.tags\`) are only populated for boards that explicitly use them.`,
|
|
864
864
|
ja: `### \u30C4\u30FC\u30EB
|
|
865
865
|
|
|
866
|
-
- \`
|
|
866
|
+
- \`connector_monday_request\`: monday.com GraphQL API\u3092\u547C\u3073\u51FA\u3059\u552F\u4E00\u306E\u624B\u6BB5\u3067\u3059\u3002\u30DC\u30FC\u30C9\u3001\u30A2\u30A4\u30C6\u30E0\u3001\u30B0\u30EB\u30FC\u30D7\u3001\u30AB\u30E9\u30E0\u3001\u30AB\u30E9\u30E0\u5024\u3001\u30E6\u30FC\u30B6\u30FC\u3001\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u3001\u30BF\u30B0\u3001\u30C1\u30FC\u30E0\u3001\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u306A\u3069\u3059\u3079\u3066\u306E\u30EA\u30BD\u30FC\u30B9\u306E\u30AF\u30A8\u30EA\u3068\u30DF\u30E5\u30FC\u30C6\u30FC\u30B7\u30E7\u30F3\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002\u8A8D\u8A3C\u306F\u81EA\u52D5\u7684\u306B\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002monday.com \u306E API \u306F GraphQL \u306E\u307F\u3067\u3001\u30AF\u30A8\u30EA\u6587\u5B57\u5217\u3068\u30AA\u30D7\u30B7\u30E7\u30F3\u306E\u5909\u6570\u3092\u9001\u4FE1\u3057\u307E\u3059\u3002\u30DC\u30FC\u30C9\u4E0A\u306E\u30A2\u30A4\u30C6\u30E0\u306F\u30AB\u30FC\u30BD\u30EB\u30D9\u30FC\u30B9\u306E \`items_page(limit, cursor)\` \u3067\u30DA\u30FC\u30B8\u30CD\u30FC\u30B7\u30E7\u30F3\u3055\u308C\u3001\u30DC\u30FC\u30C9\uFF0F\u30E6\u30FC\u30B6\u30FC\uFF0F\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u306F\u30DA\u30FC\u30B8\u30D9\u30FC\u30B9\u306E \`limit\`/\`page\` \u3092\u4F7F\u7528\u3057\u307E\u3059\u3002ID \u306F GraphQL \u306E \`ID\` \u30B9\u30AB\u30E9\u30FC\uFF08\u6587\u5B57\u5217\uFF09\u3068\u3057\u3066\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
867
867
|
|
|
868
868
|
### Business Logic
|
|
869
869
|
|
|
@@ -269,7 +269,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
269
269
|
/**
|
|
270
270
|
* Create tools for connections that belong to this connector.
|
|
271
271
|
* Filters connections by connectorKey internally.
|
|
272
|
-
* Returns tools keyed as
|
|
272
|
+
* Returns tools keyed as `connector_${connectorKey}_${toolName}`.
|
|
273
273
|
*/
|
|
274
274
|
createTools(connections, config, opts) {
|
|
275
275
|
const myConnections = connections.filter(
|
|
@@ -279,7 +279,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
279
279
|
for (const t of Object.values(this.tools)) {
|
|
280
280
|
const tool = t.createTool(myConnections, config);
|
|
281
281
|
const originalToModelOutput = tool.toModelOutput;
|
|
282
|
-
result[
|
|
282
|
+
result[`connector_${this.connectorKey}_${t.name}`] = {
|
|
283
283
|
...tool,
|
|
284
284
|
toModelOutput: async (options) => {
|
|
285
285
|
if (!originalToModelOutput) {
|
|
@@ -842,9 +842,9 @@ var mongodbConnector = new ConnectorPlugin({
|
|
|
842
842
|
systemPrompt: {
|
|
843
843
|
en: `### Tools
|
|
844
844
|
|
|
845
|
-
- \`
|
|
846
|
-
- \`
|
|
847
|
-
- \`
|
|
845
|
+
- \`connector_mongodb_listCollections\`: Lists all collections in the database. Use this first to explore available data.
|
|
846
|
+
- \`connector_mongodb_find\`: Finds documents in a collection with optional filter, projection, sort, and limit. Use for data sampling and querying specific documents. Pass filter, projection, and sort as JSON strings.
|
|
847
|
+
- \`connector_mongodb_aggregate\`: Runs a MongoDB aggregation pipeline on a collection. Use for complex data analysis, grouping, joining, and transformations. Pass pipeline as a JSON string.
|
|
848
848
|
|
|
849
849
|
### Business Logic
|
|
850
850
|
|
|
@@ -897,9 +897,9 @@ export default async function handler(_c: Context) {
|
|
|
897
897
|
- Always include limit in find queries and $limit in aggregation pipelines`,
|
|
898
898
|
ja: `### \u30C4\u30FC\u30EB
|
|
899
899
|
|
|
900
|
-
- \`
|
|
901
|
-
- \`
|
|
902
|
-
- \`
|
|
900
|
+
- \`connector_mongodb_listCollections\`: \u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u5185\u306E\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u4E00\u89A7\u3092\u53D6\u5F97\u3057\u307E\u3059\u3002\u30C7\u30FC\u30BF\u63A2\u7D22\u306E\u6700\u521D\u306E\u30B9\u30C6\u30C3\u30D7\u3068\u3057\u3066\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
901
|
+
- \`connector_mongodb_find\`: \u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u5185\u306E\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u691C\u7D22\u3057\u307E\u3059\u3002\u30D5\u30A3\u30EB\u30BF\u30FC\u3001\u30D7\u30ED\u30B8\u30A7\u30AF\u30B7\u30E7\u30F3\u3001\u30BD\u30FC\u30C8\u3001\u5236\u9650\u3092\u30AA\u30D7\u30B7\u30E7\u30F3\u3067\u6307\u5B9A\u53EF\u80FD\u3002\u30C7\u30FC\u30BF\u306E\u30B5\u30F3\u30D7\u30EA\u30F3\u30B0\u3084\u7279\u5B9A\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u306E\u30AF\u30A8\u30EA\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002filter\u3001projection\u3001sort\u306FJSON\u6587\u5B57\u5217\u3067\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
902
|
+
- \`connector_mongodb_aggregate\`: \u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u4E0A\u3067MongoDB\u96C6\u7D04\u30D1\u30A4\u30D7\u30E9\u30A4\u30F3\u3092\u5B9F\u884C\u3057\u307E\u3059\u3002\u8907\u96D1\u306A\u30C7\u30FC\u30BF\u5206\u6790\u3001\u30B0\u30EB\u30FC\u30D7\u5316\u3001\u7D50\u5408\u3001\u5909\u63DB\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002pipeline\u306FJSON\u6587\u5B57\u5217\u3067\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
903
903
|
|
|
904
904
|
### Business Logic
|
|
905
905
|
|