@squadbase/vite-server 0.1.17-dev.a9ddcfa → 0.1.17-dev.e4768d1
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 +8941 -3700
- package/dist/connectors/airtable-oauth.js +87 -23
- package/dist/connectors/airtable.js +130 -23
- package/dist/connectors/amplitude.js +47 -23
- package/dist/connectors/anthropic.js +41 -17
- package/dist/connectors/asana.js +76 -25
- package/dist/connectors/attio.js +69 -28
- package/dist/connectors/aws-billing.js +47 -23
- package/dist/connectors/azure-sql.js +322 -25
- package/dist/connectors/backlog-api-key.js +79 -30
- package/dist/connectors/clickup.js +89 -25
- package/dist/connectors/cosmosdb.js +51 -27
- package/dist/connectors/customerio.js +47 -23
- package/dist/connectors/dbt.js +725 -40
- package/dist/connectors/freshdesk.js +121 -23
- package/dist/connectors/freshsales.js +47 -23
- package/dist/connectors/freshservice.js +47 -23
- package/dist/connectors/gamma.js +54 -30
- package/dist/connectors/gemini.js +41 -17
- package/dist/connectors/github.js +51 -27
- package/dist/connectors/gmail-oauth.js +42 -23
- package/dist/connectors/gmail.js +43 -19
- package/dist/connectors/google-ads.js +47 -23
- package/dist/connectors/google-analytics-oauth.js +191 -40
- package/dist/connectors/google-analytics.js +529 -111
- package/dist/connectors/google-audit-log.js +43 -19
- package/dist/connectors/google-calendar-oauth.js +100 -30
- package/dist/connectors/google-calendar.js +100 -26
- package/dist/connectors/google-docs.js +42 -23
- package/dist/connectors/google-drive.js +64 -23
- package/dist/connectors/google-search-console-oauth.js +165 -32
- package/dist/connectors/google-sheets.js +142 -199
- package/dist/connectors/google-slides.js +42 -23
- package/dist/connectors/grafana.js +84 -25
- package/dist/connectors/hackernews.d.ts +5 -0
- package/dist/connectors/hackernews.js +909 -0
- package/dist/connectors/hubspot-oauth.js +73 -22
- package/dist/connectors/hubspot.js +64 -24
- package/dist/connectors/influxdb.js +47 -23
- package/dist/connectors/intercom-oauth.js +104 -25
- package/dist/connectors/intercom.js +51 -27
- package/dist/connectors/jdbc.js +76 -25
- package/dist/connectors/jira-api-key.js +107 -26
- package/dist/connectors/kintone-api-token.js +105 -33
- package/dist/connectors/kintone.js +182 -26
- package/dist/connectors/linear.js +93 -27
- package/dist/connectors/linkedin-ads.js +80 -29
- package/dist/connectors/mailchimp-oauth.js +45 -21
- package/dist/connectors/mailchimp.js +45 -21
- package/dist/connectors/meta-ads-oauth.js +72 -29
- package/dist/connectors/meta-ads.js +74 -29
- package/dist/connectors/mixpanel.js +47 -23
- package/dist/connectors/monday.js +48 -24
- package/dist/connectors/mongodb.js +47 -23
- package/dist/connectors/notion-oauth.js +92 -24
- package/dist/connectors/notion.js +144 -26
- package/dist/connectors/openai.js +41 -17
- package/dist/connectors/oracle.js +316 -26
- package/dist/connectors/outlook-oauth.js +53 -34
- package/dist/connectors/powerbi-oauth.js +45 -26
- package/dist/connectors/salesforce.js +150 -24
- package/dist/connectors/semrush.js +45 -21
- package/dist/connectors/sentry.js +75 -25
- package/dist/connectors/shopify-oauth.js +75 -23
- package/dist/connectors/shopify.js +47 -23
- package/dist/connectors/sqlserver.js +322 -25
- package/dist/connectors/stripe-api-key.js +105 -30
- package/dist/connectors/stripe-oauth.js +102 -32
- package/dist/connectors/supabase.js +315 -21
- package/dist/connectors/tableau.js +54 -30
- package/dist/connectors/tiktok-ads.js +76 -31
- package/dist/connectors/wix-store.js +47 -23
- package/dist/connectors/x.d.ts +5 -0
- package/dist/connectors/x.js +951 -0
- package/dist/connectors/zendesk-oauth.js +87 -25
- package/dist/connectors/zendesk.js +51 -27
- package/dist/index.js +9005 -3709
- package/dist/main.js +9005 -3709
- package/dist/vite-plugin.js +8939 -3698
- package/package.json +12 -4
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
2
|
-
var __esm = (fn, res) => function __init() {
|
|
3
|
-
|
|
2
|
+
var __esm = (fn, res, err) => function __init() {
|
|
3
|
+
if (err) throw err[0];
|
|
4
|
+
try {
|
|
5
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
6
|
+
} catch (e) {
|
|
7
|
+
throw err = [e], e;
|
|
8
|
+
}
|
|
4
9
|
};
|
|
5
10
|
|
|
6
11
|
// ../connectors/src/parameter-definition.ts
|
|
@@ -132,6 +137,15 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
132
137
|
* `runSetupFlow` from `setup-flow.ts`.
|
|
133
138
|
*/
|
|
134
139
|
setup;
|
|
140
|
+
/**
|
|
141
|
+
* 統一 introspection。SQL DB の `information_schema` / `SHOW` / `DESCRIBE` や SaaS の
|
|
142
|
+
* メタデータ API といった取得経路の差を吸収し、tables / columns / PK / FK を共通型
|
|
143
|
+
* {@link IntrospectedSchema} へ正規化して返す。取得経路は {@link IntrospectContext} で
|
|
144
|
+
* 抽象化され、SQL DB は `ctx.query`、SaaS は `ctx.proxyFetch` + `ctx.params` を使う。
|
|
145
|
+
* `ctx.profile === true` のときは L2 プロファイル(行数・NULL 率等)も best-effort で埋める。
|
|
146
|
+
* coding-agent の `DataContextIndex` がデータ地図を構築する際に使う。
|
|
147
|
+
*/
|
|
148
|
+
introspect;
|
|
135
149
|
/**
|
|
136
150
|
* Opt-out of the default "verify before save" behavior on connection
|
|
137
151
|
* creation. The backend invokes `checkConnection` synchronously while
|
|
@@ -146,6 +160,14 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
146
160
|
* the default verify-on-create behavior without opt-in.
|
|
147
161
|
*/
|
|
148
162
|
skipConnectionCheckOnCreate;
|
|
163
|
+
/**
|
|
164
|
+
* 決定論的な「立ち上げ survey」レシピ(ルールベース prewarm 基盤)。実装した connector は、LLM を使わずに
|
|
165
|
+
* read-only で自分を survey する probe 列(テーブル/列メタデータ → 小サンプル)を宣言する。coding-agent の
|
|
166
|
+
* recon driver がこれを読み、connector ツールの `execute` を直接呼んで結果を seed にする。未実装の connector は
|
|
167
|
+
* driver 側で safely skip される(その connection は listConnections のみ seed)。標準 `information_schema` を
|
|
168
|
+
* 持つ SQL connector は `makeStandardSqlSurveyProbes` を使える。**probe は必ず read-only**。
|
|
169
|
+
*/
|
|
170
|
+
surveyProbes;
|
|
149
171
|
constructor(config) {
|
|
150
172
|
this.slug = config.slug;
|
|
151
173
|
this.authType = config.authType;
|
|
@@ -163,7 +185,9 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
163
185
|
this.query = config.query;
|
|
164
186
|
this.checkConnection = config.checkConnection;
|
|
165
187
|
this.setup = config.setup;
|
|
188
|
+
this.introspect = config.introspect;
|
|
166
189
|
this.skipConnectionCheckOnCreate = config.skipConnectionCheckOnCreate;
|
|
190
|
+
this.surveyProbes = config.surveyProbes;
|
|
167
191
|
}
|
|
168
192
|
get connectorKey() {
|
|
169
193
|
return _ConnectorPlugin.deriveKey(this.slug, this.authType);
|
|
@@ -171,7 +195,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
171
195
|
/**
|
|
172
196
|
* Create tools for connections that belong to this connector.
|
|
173
197
|
* Filters connections by connectorKey internally.
|
|
174
|
-
* Returns tools keyed as
|
|
198
|
+
* Returns tools keyed as `connector_${connectorKey}_${toolName}`.
|
|
175
199
|
*/
|
|
176
200
|
createTools(connections, config, opts) {
|
|
177
201
|
const myConnections = connections.filter(
|
|
@@ -181,7 +205,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
181
205
|
for (const t of Object.values(this.tools)) {
|
|
182
206
|
const tool = t.createTool(myConnections, config);
|
|
183
207
|
const originalToModelOutput = tool.toModelOutput;
|
|
184
|
-
result[
|
|
208
|
+
result[`connector_${this.connectorKey}_${t.name}`] = {
|
|
185
209
|
...tool,
|
|
186
210
|
toModelOutput: async (options) => {
|
|
187
211
|
if (!originalToModelOutput) {
|
|
@@ -201,25 +225,25 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
201
225
|
if (authType) return `${slug}-${authType}`;
|
|
202
226
|
const LEGACY_NULL_AUTH_TYPE_MAP = {
|
|
203
227
|
// user-password
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
228
|
+
postgresql: "user-password",
|
|
229
|
+
mysql: "user-password",
|
|
230
|
+
clickhouse: "user-password",
|
|
231
|
+
kintone: "user-password",
|
|
208
232
|
"squadbase-db": "user-password",
|
|
209
233
|
// service-account
|
|
210
|
-
|
|
211
|
-
|
|
234
|
+
snowflake: "service-account",
|
|
235
|
+
bigquery: "service-account",
|
|
212
236
|
"google-analytics": "service-account",
|
|
213
237
|
"google-calendar": "service-account",
|
|
214
238
|
"aws-athena": "service-account",
|
|
215
|
-
|
|
239
|
+
redshift: "service-account",
|
|
216
240
|
// api-key
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
241
|
+
databricks: "api-key",
|
|
242
|
+
dbt: "api-key",
|
|
243
|
+
airtable: "api-key",
|
|
244
|
+
openai: "api-key",
|
|
245
|
+
gemini: "api-key",
|
|
246
|
+
anthropic: "api-key",
|
|
223
247
|
"wix-store": "api-key"
|
|
224
248
|
};
|
|
225
249
|
const fallbackAuthType = LEGACY_NULL_AUTH_TYPE_MAP[slug];
|
|
@@ -453,11 +477,11 @@ var linkedinAdsOnboarding = new ConnectorOnboarding({
|
|
|
453
477
|
- Write only 1 sentence between tool calls, then immediately call the next tool. Skip unnecessary explanations and proceed efficiently`
|
|
454
478
|
},
|
|
455
479
|
dataOverviewInstructions: {
|
|
456
|
-
en: `1. Call
|
|
457
|
-
2. Call
|
|
480
|
+
en: `1. Call connector_linkedin-ads_request with GET adAccounts/{adAccountId}/adCampaigns?q=search&search=(status:(values:List(ACTIVE)))&pageSize=10 to explore campaigns
|
|
481
|
+
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
482
|
3. Explore campaign groups and creatives as needed to understand the data structure`,
|
|
459
|
-
ja: `1.
|
|
460
|
-
2.
|
|
483
|
+
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
|
|
484
|
+
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
485
|
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
486
|
}
|
|
463
487
|
});
|
|
@@ -502,6 +526,24 @@ async function listAdAccounts(proxyFetch) {
|
|
|
502
526
|
const data = await res.json();
|
|
503
527
|
return data.elements ?? [];
|
|
504
528
|
}
|
|
529
|
+
async function fetchCampaignCount(proxyFetch, accountId) {
|
|
530
|
+
try {
|
|
531
|
+
const account = encodeURIComponent(
|
|
532
|
+
`urn:li:sponsoredAccount:${accountId}`
|
|
533
|
+
);
|
|
534
|
+
const url = `${BASE_URL3}/adCampaigns?q=search&search.account.values[0]=${account}&count=1`;
|
|
535
|
+
const res = await proxyFetch(url, {
|
|
536
|
+
method: "GET",
|
|
537
|
+
headers: defaultHeaders()
|
|
538
|
+
});
|
|
539
|
+
if (!res.ok) return null;
|
|
540
|
+
const data = await res.json();
|
|
541
|
+
const total = data.paging?.total;
|
|
542
|
+
return typeof total === "number" ? total : null;
|
|
543
|
+
} catch {
|
|
544
|
+
return null;
|
|
545
|
+
}
|
|
546
|
+
}
|
|
505
547
|
var linkedinAdsSetupFlow = {
|
|
506
548
|
initialState: () => ({}),
|
|
507
549
|
steps: [
|
|
@@ -549,16 +591,25 @@ var linkedinAdsSetupFlow = {
|
|
|
549
591
|
sections.push("_No ad accounts selected._", "");
|
|
550
592
|
return sections.join("\n");
|
|
551
593
|
}
|
|
552
|
-
sections.push(
|
|
553
|
-
|
|
554
|
-
|
|
594
|
+
sections.push(
|
|
595
|
+
"| Ad Account ID | Name | Currency | Type | Status | Campaigns |"
|
|
596
|
+
);
|
|
597
|
+
sections.push(
|
|
598
|
+
"|---------------|------|----------|------|--------|-----------|"
|
|
599
|
+
);
|
|
600
|
+
const campaignCounts = await Promise.all(
|
|
601
|
+
targetIds.map((id) => fetchCampaignCount(rt.config.proxyFetch, id))
|
|
602
|
+
);
|
|
603
|
+
for (let i = 0; i < targetIds.length; i++) {
|
|
604
|
+
const id = targetIds[i];
|
|
555
605
|
const account = byId.get(id);
|
|
556
606
|
const name = (account?.name ?? "-").replace(/\|/g, "\\|");
|
|
557
607
|
const currency = account?.currency ?? "-";
|
|
558
608
|
const type = account?.type ?? "-";
|
|
559
609
|
const status = account?.status ?? "-";
|
|
610
|
+
const campaigns = campaignCounts[i] == null ? "-" : String(campaignCounts[i]);
|
|
560
611
|
sections.push(
|
|
561
|
-
`| ${id} | ${name} | ${currency} | ${type} | ${status} |`
|
|
612
|
+
`| ${id} | ${name} | ${currency} | ${type} | ${status} | ${campaigns} |`
|
|
562
613
|
);
|
|
563
614
|
}
|
|
564
615
|
sections.push("");
|
|
@@ -726,8 +777,8 @@ var linkedinAdsConnector = new ConnectorPlugin({
|
|
|
726
777
|
systemPrompt: {
|
|
727
778
|
en: `### Tools
|
|
728
779
|
|
|
729
|
-
- \`
|
|
730
|
-
- \`
|
|
780
|
+
- \`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.
|
|
781
|
+
- \`connector_linkedin-ads_listAdAccounts\`: List accessible LinkedIn ad accounts. Use this during setup to discover available accounts.
|
|
731
782
|
|
|
732
783
|
### LinkedIn Marketing API Reference
|
|
733
784
|
|
|
@@ -819,8 +870,8 @@ const data = await res.json();
|
|
|
819
870
|
\`\`\``,
|
|
820
871
|
ja: `### \u30C4\u30FC\u30EB
|
|
821
872
|
|
|
822
|
-
- \`
|
|
823
|
-
- \`
|
|
873
|
+
- \`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
|
|
874
|
+
- \`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
875
|
|
|
825
876
|
### LinkedIn Marketing API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
826
877
|
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
2
|
-
var __esm = (fn, res) => function __init() {
|
|
3
|
-
|
|
2
|
+
var __esm = (fn, res, err) => function __init() {
|
|
3
|
+
if (err) throw err[0];
|
|
4
|
+
try {
|
|
5
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
6
|
+
} catch (e) {
|
|
7
|
+
throw err = [e], e;
|
|
8
|
+
}
|
|
4
9
|
};
|
|
5
10
|
|
|
6
11
|
// ../connectors/src/parameter-definition.ts
|
|
@@ -138,6 +143,15 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
138
143
|
* `runSetupFlow` from `setup-flow.ts`.
|
|
139
144
|
*/
|
|
140
145
|
setup;
|
|
146
|
+
/**
|
|
147
|
+
* 統一 introspection。SQL DB の `information_schema` / `SHOW` / `DESCRIBE` や SaaS の
|
|
148
|
+
* メタデータ API といった取得経路の差を吸収し、tables / columns / PK / FK を共通型
|
|
149
|
+
* {@link IntrospectedSchema} へ正規化して返す。取得経路は {@link IntrospectContext} で
|
|
150
|
+
* 抽象化され、SQL DB は `ctx.query`、SaaS は `ctx.proxyFetch` + `ctx.params` を使う。
|
|
151
|
+
* `ctx.profile === true` のときは L2 プロファイル(行数・NULL 率等)も best-effort で埋める。
|
|
152
|
+
* coding-agent の `DataContextIndex` がデータ地図を構築する際に使う。
|
|
153
|
+
*/
|
|
154
|
+
introspect;
|
|
141
155
|
/**
|
|
142
156
|
* Opt-out of the default "verify before save" behavior on connection
|
|
143
157
|
* creation. The backend invokes `checkConnection` synchronously while
|
|
@@ -152,6 +166,14 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
152
166
|
* the default verify-on-create behavior without opt-in.
|
|
153
167
|
*/
|
|
154
168
|
skipConnectionCheckOnCreate;
|
|
169
|
+
/**
|
|
170
|
+
* 決定論的な「立ち上げ survey」レシピ(ルールベース prewarm 基盤)。実装した connector は、LLM を使わずに
|
|
171
|
+
* read-only で自分を survey する probe 列(テーブル/列メタデータ → 小サンプル)を宣言する。coding-agent の
|
|
172
|
+
* recon driver がこれを読み、connector ツールの `execute` を直接呼んで結果を seed にする。未実装の connector は
|
|
173
|
+
* driver 側で safely skip される(その connection は listConnections のみ seed)。標準 `information_schema` を
|
|
174
|
+
* 持つ SQL connector は `makeStandardSqlSurveyProbes` を使える。**probe は必ず read-only**。
|
|
175
|
+
*/
|
|
176
|
+
surveyProbes;
|
|
155
177
|
constructor(config) {
|
|
156
178
|
this.slug = config.slug;
|
|
157
179
|
this.authType = config.authType;
|
|
@@ -169,7 +191,9 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
169
191
|
this.query = config.query;
|
|
170
192
|
this.checkConnection = config.checkConnection;
|
|
171
193
|
this.setup = config.setup;
|
|
194
|
+
this.introspect = config.introspect;
|
|
172
195
|
this.skipConnectionCheckOnCreate = config.skipConnectionCheckOnCreate;
|
|
196
|
+
this.surveyProbes = config.surveyProbes;
|
|
173
197
|
}
|
|
174
198
|
get connectorKey() {
|
|
175
199
|
return _ConnectorPlugin.deriveKey(this.slug, this.authType);
|
|
@@ -177,7 +201,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
177
201
|
/**
|
|
178
202
|
* Create tools for connections that belong to this connector.
|
|
179
203
|
* Filters connections by connectorKey internally.
|
|
180
|
-
* Returns tools keyed as
|
|
204
|
+
* Returns tools keyed as `connector_${connectorKey}_${toolName}`.
|
|
181
205
|
*/
|
|
182
206
|
createTools(connections, config, opts) {
|
|
183
207
|
const myConnections = connections.filter(
|
|
@@ -187,7 +211,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
187
211
|
for (const t of Object.values(this.tools)) {
|
|
188
212
|
const tool = t.createTool(myConnections, config);
|
|
189
213
|
const originalToModelOutput = tool.toModelOutput;
|
|
190
|
-
result[
|
|
214
|
+
result[`connector_${this.connectorKey}_${t.name}`] = {
|
|
191
215
|
...tool,
|
|
192
216
|
toModelOutput: async (options) => {
|
|
193
217
|
if (!originalToModelOutput) {
|
|
@@ -207,25 +231,25 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
207
231
|
if (authType) return `${slug}-${authType}`;
|
|
208
232
|
const LEGACY_NULL_AUTH_TYPE_MAP = {
|
|
209
233
|
// user-password
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
234
|
+
postgresql: "user-password",
|
|
235
|
+
mysql: "user-password",
|
|
236
|
+
clickhouse: "user-password",
|
|
237
|
+
kintone: "user-password",
|
|
214
238
|
"squadbase-db": "user-password",
|
|
215
239
|
// service-account
|
|
216
|
-
|
|
217
|
-
|
|
240
|
+
snowflake: "service-account",
|
|
241
|
+
bigquery: "service-account",
|
|
218
242
|
"google-analytics": "service-account",
|
|
219
243
|
"google-calendar": "service-account",
|
|
220
244
|
"aws-athena": "service-account",
|
|
221
|
-
|
|
245
|
+
redshift: "service-account",
|
|
222
246
|
// api-key
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
247
|
+
databricks: "api-key",
|
|
248
|
+
dbt: "api-key",
|
|
249
|
+
airtable: "api-key",
|
|
250
|
+
openai: "api-key",
|
|
251
|
+
gemini: "api-key",
|
|
252
|
+
anthropic: "api-key",
|
|
229
253
|
"wix-store": "api-key"
|
|
230
254
|
};
|
|
231
255
|
const fallbackAuthType = LEGACY_NULL_AUTH_TYPE_MAP[slug];
|
|
@@ -317,11 +341,11 @@ var AUTH_TYPES = {
|
|
|
317
341
|
// ../connectors/src/connectors/mailchimp-oauth/setup.ts
|
|
318
342
|
var mailchimpOauthOnboarding = new ConnectorOnboarding({
|
|
319
343
|
dataOverviewInstructions: {
|
|
320
|
-
en: `1. Call
|
|
344
|
+
en: `1. Call connector_mailchimp-oauth_request with GET /lists to list all audiences
|
|
321
345
|
2. Pick an audience and call GET /lists/{list_id}/members?count=5 to sample members
|
|
322
346
|
3. Call GET /campaigns?count=5 to list recent campaigns
|
|
323
347
|
4. Call GET /reports?count=5 to view campaign reports`,
|
|
324
|
-
ja: `1.
|
|
348
|
+
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
349
|
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
350
|
3. GET /campaigns?count=5 \u3067\u6700\u8FD1\u306E\u30AD\u30E3\u30F3\u30DA\u30FC\u30F3\u4E00\u89A7\u3092\u53D6\u5F97
|
|
327
351
|
4. GET /reports?count=5 \u3067\u30AD\u30E3\u30F3\u30DA\u30FC\u30F3\u30EC\u30DD\u30FC\u30C8\u3092\u8868\u793A`
|
|
@@ -576,7 +600,7 @@ var mailchimpOauthConnector = new ConnectorPlugin({
|
|
|
576
600
|
systemPrompt: {
|
|
577
601
|
en: `### Tools
|
|
578
602
|
|
|
579
|
-
- \`
|
|
603
|
+
- \`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
604
|
|
|
581
605
|
### Mailchimp Marketing API v3 Reference
|
|
582
606
|
|
|
@@ -634,7 +658,7 @@ const data = await res.json();
|
|
|
634
658
|
\`\`\``,
|
|
635
659
|
ja: `### \u30C4\u30FC\u30EB
|
|
636
660
|
|
|
637
|
-
- \`
|
|
661
|
+
- \`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
662
|
|
|
639
663
|
### Mailchimp Marketing API v3 \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
640
664
|
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
2
|
-
var __esm = (fn, res) => function __init() {
|
|
3
|
-
|
|
2
|
+
var __esm = (fn, res, err) => function __init() {
|
|
3
|
+
if (err) throw err[0];
|
|
4
|
+
try {
|
|
5
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
6
|
+
} catch (e) {
|
|
7
|
+
throw err = [e], e;
|
|
8
|
+
}
|
|
4
9
|
};
|
|
5
10
|
|
|
6
11
|
// ../connectors/src/parameter-definition.ts
|
|
@@ -243,6 +248,15 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
243
248
|
* `runSetupFlow` from `setup-flow.ts`.
|
|
244
249
|
*/
|
|
245
250
|
setup;
|
|
251
|
+
/**
|
|
252
|
+
* 統一 introspection。SQL DB の `information_schema` / `SHOW` / `DESCRIBE` や SaaS の
|
|
253
|
+
* メタデータ API といった取得経路の差を吸収し、tables / columns / PK / FK を共通型
|
|
254
|
+
* {@link IntrospectedSchema} へ正規化して返す。取得経路は {@link IntrospectContext} で
|
|
255
|
+
* 抽象化され、SQL DB は `ctx.query`、SaaS は `ctx.proxyFetch` + `ctx.params` を使う。
|
|
256
|
+
* `ctx.profile === true` のときは L2 プロファイル(行数・NULL 率等)も best-effort で埋める。
|
|
257
|
+
* coding-agent の `DataContextIndex` がデータ地図を構築する際に使う。
|
|
258
|
+
*/
|
|
259
|
+
introspect;
|
|
246
260
|
/**
|
|
247
261
|
* Opt-out of the default "verify before save" behavior on connection
|
|
248
262
|
* creation. The backend invokes `checkConnection` synchronously while
|
|
@@ -257,6 +271,14 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
257
271
|
* the default verify-on-create behavior without opt-in.
|
|
258
272
|
*/
|
|
259
273
|
skipConnectionCheckOnCreate;
|
|
274
|
+
/**
|
|
275
|
+
* 決定論的な「立ち上げ survey」レシピ(ルールベース prewarm 基盤)。実装した connector は、LLM を使わずに
|
|
276
|
+
* read-only で自分を survey する probe 列(テーブル/列メタデータ → 小サンプル)を宣言する。coding-agent の
|
|
277
|
+
* recon driver がこれを読み、connector ツールの `execute` を直接呼んで結果を seed にする。未実装の connector は
|
|
278
|
+
* driver 側で safely skip される(その connection は listConnections のみ seed)。標準 `information_schema` を
|
|
279
|
+
* 持つ SQL connector は `makeStandardSqlSurveyProbes` を使える。**probe は必ず read-only**。
|
|
280
|
+
*/
|
|
281
|
+
surveyProbes;
|
|
260
282
|
constructor(config) {
|
|
261
283
|
this.slug = config.slug;
|
|
262
284
|
this.authType = config.authType;
|
|
@@ -274,7 +296,9 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
274
296
|
this.query = config.query;
|
|
275
297
|
this.checkConnection = config.checkConnection;
|
|
276
298
|
this.setup = config.setup;
|
|
299
|
+
this.introspect = config.introspect;
|
|
277
300
|
this.skipConnectionCheckOnCreate = config.skipConnectionCheckOnCreate;
|
|
301
|
+
this.surveyProbes = config.surveyProbes;
|
|
278
302
|
}
|
|
279
303
|
get connectorKey() {
|
|
280
304
|
return _ConnectorPlugin.deriveKey(this.slug, this.authType);
|
|
@@ -282,7 +306,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
282
306
|
/**
|
|
283
307
|
* Create tools for connections that belong to this connector.
|
|
284
308
|
* Filters connections by connectorKey internally.
|
|
285
|
-
* Returns tools keyed as
|
|
309
|
+
* Returns tools keyed as `connector_${connectorKey}_${toolName}`.
|
|
286
310
|
*/
|
|
287
311
|
createTools(connections, config, opts) {
|
|
288
312
|
const myConnections = connections.filter(
|
|
@@ -292,7 +316,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
292
316
|
for (const t of Object.values(this.tools)) {
|
|
293
317
|
const tool = t.createTool(myConnections, config);
|
|
294
318
|
const originalToModelOutput = tool.toModelOutput;
|
|
295
|
-
result[
|
|
319
|
+
result[`connector_${this.connectorKey}_${t.name}`] = {
|
|
296
320
|
...tool,
|
|
297
321
|
toModelOutput: async (options) => {
|
|
298
322
|
if (!originalToModelOutput) {
|
|
@@ -312,25 +336,25 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
312
336
|
if (authType) return `${slug}-${authType}`;
|
|
313
337
|
const LEGACY_NULL_AUTH_TYPE_MAP = {
|
|
314
338
|
// user-password
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
339
|
+
postgresql: "user-password",
|
|
340
|
+
mysql: "user-password",
|
|
341
|
+
clickhouse: "user-password",
|
|
342
|
+
kintone: "user-password",
|
|
319
343
|
"squadbase-db": "user-password",
|
|
320
344
|
// service-account
|
|
321
|
-
|
|
322
|
-
|
|
345
|
+
snowflake: "service-account",
|
|
346
|
+
bigquery: "service-account",
|
|
323
347
|
"google-analytics": "service-account",
|
|
324
348
|
"google-calendar": "service-account",
|
|
325
349
|
"aws-athena": "service-account",
|
|
326
|
-
|
|
350
|
+
redshift: "service-account",
|
|
327
351
|
// api-key
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
352
|
+
databricks: "api-key",
|
|
353
|
+
dbt: "api-key",
|
|
354
|
+
airtable: "api-key",
|
|
355
|
+
openai: "api-key",
|
|
356
|
+
gemini: "api-key",
|
|
357
|
+
anthropic: "api-key",
|
|
334
358
|
"wix-store": "api-key"
|
|
335
359
|
};
|
|
336
360
|
const fallbackAuthType = LEGACY_NULL_AUTH_TYPE_MAP[slug];
|
|
@@ -422,11 +446,11 @@ var AUTH_TYPES = {
|
|
|
422
446
|
// ../connectors/src/connectors/mailchimp/setup.ts
|
|
423
447
|
var mailchimpOnboarding = new ConnectorOnboarding({
|
|
424
448
|
dataOverviewInstructions: {
|
|
425
|
-
en: `1. Call
|
|
449
|
+
en: `1. Call connector_mailchimp_request with GET /lists to list all audiences
|
|
426
450
|
2. Pick an audience and call GET /lists/{list_id}/members?count=5 to sample members
|
|
427
451
|
3. Call GET /campaigns?count=5 to list recent campaigns
|
|
428
452
|
4. Call GET /reports?count=5 to view campaign reports`,
|
|
429
|
-
ja: `1.
|
|
453
|
+
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
454
|
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
455
|
3. GET /campaigns?count=5 \u3067\u6700\u8FD1\u306E\u30AD\u30E3\u30F3\u30DA\u30FC\u30F3\u4E00\u89A7\u3092\u53D6\u5F97
|
|
432
456
|
4. GET /reports?count=5 \u3067\u30AD\u30E3\u30F3\u30DA\u30FC\u30F3\u30EC\u30DD\u30FC\u30C8\u3092\u8868\u793A`
|
|
@@ -647,7 +671,7 @@ var mailchimpConnector = new ConnectorPlugin({
|
|
|
647
671
|
systemPrompt: {
|
|
648
672
|
en: `### Tools
|
|
649
673
|
|
|
650
|
-
- \`
|
|
674
|
+
- \`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
675
|
|
|
652
676
|
### Business Logic
|
|
653
677
|
|
|
@@ -744,7 +768,7 @@ export default async function handler(c: Context) {
|
|
|
744
768
|
- Errors return \`type\`, \`title\`, \`status\`, \`detail\`, and \`instance\` fields`,
|
|
745
769
|
ja: `### \u30C4\u30FC\u30EB
|
|
746
770
|
|
|
747
|
-
- \`
|
|
771
|
+
- \`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
772
|
|
|
749
773
|
### Business Logic
|
|
750
774
|
|