@squadbase/vite-server 0.1.17-dev.24af54e → 0.1.17-dev.423ee34
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 +4873 -1073
- package/dist/connectors/airtable-oauth.js +78 -11
- package/dist/connectors/airtable.js +74 -11
- package/dist/connectors/amplitude.js +38 -11
- package/dist/connectors/anthropic.js +4 -2
- package/dist/connectors/asana.js +67 -13
- package/dist/connectors/attio.js +60 -16
- package/dist/connectors/aws-billing.js +38 -11
- package/dist/connectors/azure-sql.js +64 -13
- package/dist/connectors/backlog-api-key.js +70 -18
- package/dist/connectors/clickup.js +80 -13
- package/dist/connectors/cosmosdb.js +42 -15
- package/dist/connectors/customerio.js +39 -12
- package/dist/connectors/dbt.js +716 -28
- package/dist/connectors/freshdesk.js +112 -11
- package/dist/connectors/freshsales.js +38 -11
- package/dist/connectors/freshservice.js +38 -11
- package/dist/connectors/gamma.js +47 -20
- package/dist/connectors/gemini.js +4 -2
- package/dist/connectors/github.js +42 -15
- package/dist/connectors/gmail-oauth.js +38 -13
- package/dist/connectors/gmail.js +34 -7
- package/dist/connectors/google-ads.js +38 -11
- package/dist/connectors/google-analytics-oauth.js +182 -28
- package/dist/connectors/google-analytics.js +653 -104
- package/dist/connectors/google-audit-log.js +34 -7
- package/dist/connectors/google-calendar-oauth.js +91 -18
- package/dist/connectors/google-calendar.js +91 -14
- package/dist/connectors/google-docs.js +38 -13
- package/dist/connectors/google-drive.js +60 -13
- package/dist/connectors/google-search-console-oauth.js +156 -20
- package/dist/connectors/google-sheets.js +36 -9
- package/dist/connectors/google-slides.js +38 -13
- package/dist/connectors/grafana.js +75 -13
- package/dist/connectors/hubspot-oauth.js +69 -12
- package/dist/connectors/hubspot.js +55 -12
- package/dist/connectors/influxdb.js +38 -11
- package/dist/connectors/intercom-oauth.js +100 -15
- package/dist/connectors/intercom.js +42 -15
- package/dist/connectors/jdbc.js +36 -9
- package/dist/connectors/jira-api-key.js +98 -14
- package/dist/connectors/kintone-api-token.js +96 -21
- package/dist/connectors/kintone.js +84 -14
- package/dist/connectors/linear.js +84 -15
- package/dist/connectors/linkedin-ads.js +71 -17
- package/dist/connectors/mailchimp-oauth.js +36 -9
- package/dist/connectors/mailchimp.js +36 -9
- package/dist/connectors/meta-ads-oauth.js +63 -17
- package/dist/connectors/meta-ads.js +65 -17
- package/dist/connectors/mixpanel.js +38 -11
- package/dist/connectors/monday.js +39 -12
- package/dist/connectors/mongodb.js +38 -11
- package/dist/connectors/notion-oauth.js +88 -14
- package/dist/connectors/notion.js +90 -14
- package/dist/connectors/openai.js +4 -2
- package/dist/connectors/oracle.js +78 -20
- package/dist/connectors/outlook-oauth.js +48 -23
- package/dist/connectors/powerbi-oauth.js +321 -49
- package/dist/connectors/salesforce.js +72 -12
- package/dist/connectors/semrush.js +374 -52
- package/dist/connectors/sentry.js +66 -13
- package/dist/connectors/shopify-oauth.js +71 -13
- package/dist/connectors/shopify.js +38 -11
- package/dist/connectors/sqlserver.js +64 -13
- package/dist/connectors/stripe-api-key.js +96 -18
- package/dist/connectors/stripe-oauth.js +98 -22
- package/dist/connectors/supabase.js +55 -11
- package/dist/connectors/tableau.js +262 -92
- package/dist/connectors/tiktok-ads.js +67 -19
- package/dist/connectors/wix-store.js +38 -11
- package/dist/connectors/zendesk-oauth.js +83 -15
- package/dist/connectors/zendesk.js +42 -15
- package/dist/index.d.ts +1 -0
- package/dist/index.js +4902 -1077
- package/dist/main.js +4891 -1071
- package/dist/vite-plugin.js +4871 -1071
- package/package.json +1 -1
|
@@ -16,6 +16,7 @@ var init_parameter_definition = __esm({
|
|
|
16
16
|
type;
|
|
17
17
|
secret;
|
|
18
18
|
required;
|
|
19
|
+
isDeprecated;
|
|
19
20
|
constructor(config) {
|
|
20
21
|
this.slug = config.slug;
|
|
21
22
|
this.name = config.name;
|
|
@@ -24,6 +25,7 @@ var init_parameter_definition = __esm({
|
|
|
24
25
|
this.type = config.type;
|
|
25
26
|
this.secret = config.secret;
|
|
26
27
|
this.required = config.required;
|
|
28
|
+
this.isDeprecated = config.isDeprecated ?? false;
|
|
27
29
|
}
|
|
28
30
|
/**
|
|
29
31
|
* Get the parameter value from a ConnectorConnectionObject.
|
|
@@ -266,7 +268,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
266
268
|
/**
|
|
267
269
|
* Create tools for connections that belong to this connector.
|
|
268
270
|
* Filters connections by connectorKey internally.
|
|
269
|
-
* Returns tools keyed as
|
|
271
|
+
* Returns tools keyed as `connector_${connectorKey}_${toolName}`.
|
|
270
272
|
*/
|
|
271
273
|
createTools(connections, config, opts) {
|
|
272
274
|
const myConnections = connections.filter(
|
|
@@ -276,7 +278,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
276
278
|
for (const t of Object.values(this.tools)) {
|
|
277
279
|
const tool = t.createTool(myConnections, config);
|
|
278
280
|
const originalToModelOutput = tool.toModelOutput;
|
|
279
|
-
result[
|
|
281
|
+
result[`connector_${this.connectorKey}_${t.name}`] = {
|
|
280
282
|
...tool,
|
|
281
283
|
toModelOutput: async (options) => {
|
|
282
284
|
if (!originalToModelOutput) {
|
|
@@ -332,19 +334,34 @@ async function runSetupFlow(flow, params, ctx, config) {
|
|
|
332
334
|
};
|
|
333
335
|
let state = flow.initialState();
|
|
334
336
|
let answerIdx = 0;
|
|
337
|
+
const pendingParameterUpdates = [];
|
|
335
338
|
for (const step of flow.steps) {
|
|
336
339
|
const ans = ctx.answers[answerIdx];
|
|
337
340
|
if (ans && ans.questionSlug === step.slug) {
|
|
338
341
|
state = step.applyAnswer(state, ans.answer);
|
|
342
|
+
if (step.toParameterUpdates) {
|
|
343
|
+
pendingParameterUpdates.push(...step.toParameterUpdates(state));
|
|
344
|
+
}
|
|
339
345
|
answerIdx += 1;
|
|
340
346
|
continue;
|
|
341
347
|
}
|
|
348
|
+
const resolvedAllowFreeText = step.allowFreeText !== void 0 ? step.allowFreeText : true;
|
|
342
349
|
if (step.type === "text") {
|
|
350
|
+
if (step.fetchOptions) {
|
|
351
|
+
const options2 = await step.fetchOptions(state, runtime);
|
|
352
|
+
if (options2.length === 0) {
|
|
353
|
+
continue;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
343
356
|
return {
|
|
344
357
|
type: "nextQuestion",
|
|
345
358
|
questionSlug: step.slug,
|
|
346
359
|
question: step.question[ctx.language],
|
|
347
|
-
questionType: "text"
|
|
360
|
+
questionType: "text",
|
|
361
|
+
allowFreeText: resolvedAllowFreeText,
|
|
362
|
+
...pendingParameterUpdates.length > 0 && {
|
|
363
|
+
parameterUpdates: pendingParameterUpdates
|
|
364
|
+
}
|
|
348
365
|
};
|
|
349
366
|
}
|
|
350
367
|
const options = step.fetchOptions ? await step.fetchOptions(state, runtime) : [];
|
|
@@ -356,11 +373,21 @@ async function runSetupFlow(flow, params, ctx, config) {
|
|
|
356
373
|
questionSlug: step.slug,
|
|
357
374
|
question: step.question[ctx.language],
|
|
358
375
|
questionType: step.type,
|
|
359
|
-
options
|
|
376
|
+
options,
|
|
377
|
+
allowFreeText: resolvedAllowFreeText,
|
|
378
|
+
...pendingParameterUpdates.length > 0 && {
|
|
379
|
+
parameterUpdates: pendingParameterUpdates
|
|
380
|
+
}
|
|
360
381
|
};
|
|
361
382
|
}
|
|
362
383
|
const dataInvestigationResult = await flow.finalize(state, runtime);
|
|
363
|
-
return {
|
|
384
|
+
return {
|
|
385
|
+
type: "fulfilled",
|
|
386
|
+
dataInvestigationResult,
|
|
387
|
+
...pendingParameterUpdates.length > 0 && {
|
|
388
|
+
parameterUpdates: pendingParameterUpdates
|
|
389
|
+
}
|
|
390
|
+
};
|
|
364
391
|
}
|
|
365
392
|
async function resolveSetupSelection(params) {
|
|
366
393
|
const { selected, allSentinel, fetchAll, limit } = params;
|
|
@@ -381,15 +408,15 @@ var AUTH_TYPES = {
|
|
|
381
408
|
// ../connectors/src/connectors/linear/setup.ts
|
|
382
409
|
var linearOnboarding = new ConnectorOnboarding({
|
|
383
410
|
dataOverviewInstructions: {
|
|
384
|
-
en: `1. Call
|
|
385
|
-
2. Call
|
|
386
|
-
3. Call
|
|
387
|
-
4. Call
|
|
411
|
+
en: `1. Call connector_linear_request with query \`{ teams { nodes { id name } } }\` to list all teams
|
|
412
|
+
2. Call connector_linear_request with query \`{ workflowStates { nodes { id name type } } }\` to list workflow states
|
|
413
|
+
3. Call connector_linear_request with query \`{ issues(first: 5, orderBy: updatedAt) { nodes { id identifier title state { name } assignee { name } priority } } }\` to sample recent issues
|
|
414
|
+
4. Call connector_linear_request with query \`{ projects(first: 5) { nodes { id name state } } }\` to list projects
|
|
388
415
|
5. Explore other resources (cycles, labels, users) as needed`,
|
|
389
|
-
ja: `1.
|
|
390
|
-
2.
|
|
391
|
-
3.
|
|
392
|
-
4.
|
|
416
|
+
ja: `1. connector_linear_request \u3067\u30AF\u30A8\u30EA \`{ teams { nodes { id name } } }\` \u3092\u547C\u3073\u51FA\u3057\u3001\u30C1\u30FC\u30E0\u4E00\u89A7\u3092\u53D6\u5F97
|
|
417
|
+
2. connector_linear_request \u3067\u30AF\u30A8\u30EA \`{ workflowStates { nodes { id name type } } }\` \u3092\u547C\u3073\u51FA\u3057\u3001\u30EF\u30FC\u30AF\u30D5\u30ED\u30FC\u72B6\u614B\u4E00\u89A7\u3092\u53D6\u5F97
|
|
418
|
+
3. connector_linear_request \u3067\u30AF\u30A8\u30EA \`{ issues(first: 5, orderBy: updatedAt) { nodes { id identifier title state { name } assignee { name } priority } } }\` \u3092\u547C\u3073\u51FA\u3057\u3001\u6700\u8FD1\u306EIssue\u3092\u30B5\u30F3\u30D7\u30EA\u30F3\u30B0
|
|
419
|
+
4. connector_linear_request \u3067\u30AF\u30A8\u30EA \`{ projects(first: 5) { nodes { id name state } } }\` \u3092\u547C\u3073\u51FA\u3057\u3001\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u4E00\u89A7\u3092\u53D6\u5F97
|
|
393
420
|
5. \u5FC5\u8981\u306B\u5FDC\u3058\u3066\u4ED6\u306E\u30EA\u30BD\u30FC\u30B9\uFF08cycles\u3001labels\u3001users\uFF09\u3092\u63A2\u7D22`
|
|
394
421
|
}
|
|
395
422
|
});
|
|
@@ -446,6 +473,35 @@ async function getTeamDetail(params, teamId) {
|
|
|
446
473
|
);
|
|
447
474
|
return data.team ?? null;
|
|
448
475
|
}
|
|
476
|
+
async function getIssueBreakdown(params, teamId) {
|
|
477
|
+
try {
|
|
478
|
+
const data = await gqlFetch(
|
|
479
|
+
params,
|
|
480
|
+
`query($id: String!) {
|
|
481
|
+
team(id: $id) {
|
|
482
|
+
issues(first: 250) { nodes { state { name type } } }
|
|
483
|
+
}
|
|
484
|
+
}`,
|
|
485
|
+
{ id: teamId }
|
|
486
|
+
);
|
|
487
|
+
const nodes = data.team?.issues?.nodes ?? [];
|
|
488
|
+
const counts = /* @__PURE__ */ new Map();
|
|
489
|
+
for (const n of nodes) {
|
|
490
|
+
const key = `${n.state?.name ?? "Unknown"}|${n.state?.type ?? "unknown"}`;
|
|
491
|
+
const existing = counts.get(key);
|
|
492
|
+
if (existing) existing.count++;
|
|
493
|
+
else
|
|
494
|
+
counts.set(key, {
|
|
495
|
+
stateName: n.state?.name ?? "Unknown",
|
|
496
|
+
stateType: n.state?.type ?? "unknown",
|
|
497
|
+
count: 1
|
|
498
|
+
});
|
|
499
|
+
}
|
|
500
|
+
return { total: nodes.length, byState: Array.from(counts.values()) };
|
|
501
|
+
} catch {
|
|
502
|
+
return null;
|
|
503
|
+
}
|
|
504
|
+
}
|
|
449
505
|
var linearSetupFlow = {
|
|
450
506
|
initialState: () => ({}),
|
|
451
507
|
steps: [
|
|
@@ -502,6 +558,19 @@ var linearSetupFlow = {
|
|
|
502
558
|
sections.push(` - ${s.name} (${s.type})`);
|
|
503
559
|
}
|
|
504
560
|
sections.push("");
|
|
561
|
+
const breakdown = await getIssueBreakdown(rt.params, teamId);
|
|
562
|
+
if (breakdown && breakdown.byState.length > 0) {
|
|
563
|
+
sections.push(
|
|
564
|
+
`#### Issues (${breakdown.total}${breakdown.total === 250 ? "+" : ""})`,
|
|
565
|
+
""
|
|
566
|
+
);
|
|
567
|
+
sections.push("| State | Type | Count |");
|
|
568
|
+
sections.push("|-------|------|-------|");
|
|
569
|
+
for (const b of breakdown.byState) {
|
|
570
|
+
sections.push(`| ${b.stateName} | ${b.stateType} | ${b.count} |`);
|
|
571
|
+
}
|
|
572
|
+
sections.push("");
|
|
573
|
+
}
|
|
505
574
|
}
|
|
506
575
|
return sections.join("\n");
|
|
507
576
|
}
|
|
@@ -612,7 +681,7 @@ var linearConnector = new ConnectorPlugin({
|
|
|
612
681
|
systemPrompt: {
|
|
613
682
|
en: `### Tools
|
|
614
683
|
|
|
615
|
-
- \`
|
|
684
|
+
- \`connector_linear_request\`: The only way to call the Linear GraphQL API. Use it to query and mutate all Linear resources: issues, projects, teams, cycles, users, labels, workflow states, and comments. Authentication is configured automatically. Linear's API is GraphQL-only \u2014 send a query string and optional variables. Pagination uses Relay-style cursors with \`first\`/\`after\` and \`last\`/\`before\` arguments. Archived resources are hidden by default; pass \`includeArchived: true\` to include them.
|
|
616
685
|
|
|
617
686
|
### Business Logic
|
|
618
687
|
|
|
@@ -673,7 +742,7 @@ export default async function handler(c: Context) {
|
|
|
673
742
|
- \`mutation { commentCreate(input: { issueId: "...", body: "..." }) { success comment { id body } } }\` \u2014 add comment`,
|
|
674
743
|
ja: `### \u30C4\u30FC\u30EB
|
|
675
744
|
|
|
676
|
-
- \`
|
|
745
|
+
- \`connector_linear_request\`: Linear GraphQL API\u3092\u547C\u3073\u51FA\u3059\u552F\u4E00\u306E\u624B\u6BB5\u3067\u3059\u3002Issue\u3001\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3001\u30C1\u30FC\u30E0\u3001\u30B5\u30A4\u30AF\u30EB\u3001\u30E6\u30FC\u30B6\u30FC\u3001\u30E9\u30D9\u30EB\u3001\u30EF\u30FC\u30AF\u30D5\u30ED\u30FC\u72B6\u614B\u3001\u30B3\u30E1\u30F3\u30C8\u306A\u3069\u3059\u3079\u3066\u306ELinear\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\u3002Linear\u306EAPI\u306FGraphQL\u306E\u307F\u3067\u3059\u3002\u30AF\u30A8\u30EA\u6587\u5B57\u5217\u3068\u30AA\u30D7\u30B7\u30E7\u30F3\u306E\u5909\u6570\u3092\u9001\u4FE1\u3057\u307E\u3059\u3002\u30DA\u30FC\u30B8\u30CD\u30FC\u30B7\u30E7\u30F3\u306FRelay\u5F62\u5F0F\u306E\u30AB\u30FC\u30BD\u30EB\u30D9\u30FC\u30B9\u3067\u3001\`first\`/\`after\`\u304A\u3088\u3073\`last\`/\`before\`\u5F15\u6570\u3092\u4F7F\u7528\u3057\u307E\u3059\u3002\u30A2\u30FC\u30AB\u30A4\u30D6\u3055\u308C\u305F\u30EA\u30BD\u30FC\u30B9\u306F\u30C7\u30D5\u30A9\u30EB\u30C8\u3067\u975E\u8868\u793A\u3067\u3059\u3002\`includeArchived: true\`\u3092\u6E21\u3059\u3068\u542B\u3081\u3089\u308C\u307E\u3059\u3002
|
|
677
746
|
|
|
678
747
|
### Business Logic
|
|
679
748
|
|
|
@@ -16,6 +16,7 @@ var init_parameter_definition = __esm({
|
|
|
16
16
|
type;
|
|
17
17
|
secret;
|
|
18
18
|
required;
|
|
19
|
+
isDeprecated;
|
|
19
20
|
constructor(config) {
|
|
20
21
|
this.slug = config.slug;
|
|
21
22
|
this.name = config.name;
|
|
@@ -24,6 +25,7 @@ var init_parameter_definition = __esm({
|
|
|
24
25
|
this.type = config.type;
|
|
25
26
|
this.secret = config.secret;
|
|
26
27
|
this.required = config.required;
|
|
28
|
+
this.isDeprecated = config.isDeprecated ?? false;
|
|
27
29
|
}
|
|
28
30
|
/**
|
|
29
31
|
* Get the parameter value from a ConnectorConnectionObject.
|
|
@@ -169,7 +171,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
169
171
|
/**
|
|
170
172
|
* Create tools for connections that belong to this connector.
|
|
171
173
|
* Filters connections by connectorKey internally.
|
|
172
|
-
* Returns tools keyed as
|
|
174
|
+
* Returns tools keyed as `connector_${connectorKey}_${toolName}`.
|
|
173
175
|
*/
|
|
174
176
|
createTools(connections, config, opts) {
|
|
175
177
|
const myConnections = connections.filter(
|
|
@@ -179,7 +181,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
179
181
|
for (const t of Object.values(this.tools)) {
|
|
180
182
|
const tool = t.createTool(myConnections, config);
|
|
181
183
|
const originalToModelOutput = tool.toModelOutput;
|
|
182
|
-
result[
|
|
184
|
+
result[`connector_${this.connectorKey}_${t.name}`] = {
|
|
183
185
|
...tool,
|
|
184
186
|
toModelOutput: async (options) => {
|
|
185
187
|
if (!originalToModelOutput) {
|
|
@@ -235,19 +237,34 @@ async function runSetupFlow(flow, params, ctx, config) {
|
|
|
235
237
|
};
|
|
236
238
|
let state = flow.initialState();
|
|
237
239
|
let answerIdx = 0;
|
|
240
|
+
const pendingParameterUpdates = [];
|
|
238
241
|
for (const step of flow.steps) {
|
|
239
242
|
const ans = ctx.answers[answerIdx];
|
|
240
243
|
if (ans && ans.questionSlug === step.slug) {
|
|
241
244
|
state = step.applyAnswer(state, ans.answer);
|
|
245
|
+
if (step.toParameterUpdates) {
|
|
246
|
+
pendingParameterUpdates.push(...step.toParameterUpdates(state));
|
|
247
|
+
}
|
|
242
248
|
answerIdx += 1;
|
|
243
249
|
continue;
|
|
244
250
|
}
|
|
251
|
+
const resolvedAllowFreeText = step.allowFreeText !== void 0 ? step.allowFreeText : true;
|
|
245
252
|
if (step.type === "text") {
|
|
253
|
+
if (step.fetchOptions) {
|
|
254
|
+
const options2 = await step.fetchOptions(state, runtime);
|
|
255
|
+
if (options2.length === 0) {
|
|
256
|
+
continue;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
246
259
|
return {
|
|
247
260
|
type: "nextQuestion",
|
|
248
261
|
questionSlug: step.slug,
|
|
249
262
|
question: step.question[ctx.language],
|
|
250
|
-
questionType: "text"
|
|
263
|
+
questionType: "text",
|
|
264
|
+
allowFreeText: resolvedAllowFreeText,
|
|
265
|
+
...pendingParameterUpdates.length > 0 && {
|
|
266
|
+
parameterUpdates: pendingParameterUpdates
|
|
267
|
+
}
|
|
251
268
|
};
|
|
252
269
|
}
|
|
253
270
|
const options = step.fetchOptions ? await step.fetchOptions(state, runtime) : [];
|
|
@@ -259,11 +276,21 @@ async function runSetupFlow(flow, params, ctx, config) {
|
|
|
259
276
|
questionSlug: step.slug,
|
|
260
277
|
question: step.question[ctx.language],
|
|
261
278
|
questionType: step.type,
|
|
262
|
-
options
|
|
279
|
+
options,
|
|
280
|
+
allowFreeText: resolvedAllowFreeText,
|
|
281
|
+
...pendingParameterUpdates.length > 0 && {
|
|
282
|
+
parameterUpdates: pendingParameterUpdates
|
|
283
|
+
}
|
|
263
284
|
};
|
|
264
285
|
}
|
|
265
286
|
const dataInvestigationResult = await flow.finalize(state, runtime);
|
|
266
|
-
return {
|
|
287
|
+
return {
|
|
288
|
+
type: "fulfilled",
|
|
289
|
+
dataInvestigationResult,
|
|
290
|
+
...pendingParameterUpdates.length > 0 && {
|
|
291
|
+
parameterUpdates: pendingParameterUpdates
|
|
292
|
+
}
|
|
293
|
+
};
|
|
267
294
|
}
|
|
268
295
|
async function resolveSetupSelection(params) {
|
|
269
296
|
const { selected, allSentinel, fetchAll, limit } = params;
|
|
@@ -426,11 +453,11 @@ var linkedinAdsOnboarding = new ConnectorOnboarding({
|
|
|
426
453
|
- Write only 1 sentence between tool calls, then immediately call the next tool. Skip unnecessary explanations and proceed efficiently`
|
|
427
454
|
},
|
|
428
455
|
dataOverviewInstructions: {
|
|
429
|
-
en: `1. Call
|
|
430
|
-
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
|
|
431
458
|
3. Explore campaign groups and creatives as needed to understand the data structure`,
|
|
432
|
-
ja: `1.
|
|
433
|
-
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
|
|
434
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`
|
|
435
462
|
}
|
|
436
463
|
});
|
|
@@ -475,6 +502,24 @@ async function listAdAccounts(proxyFetch) {
|
|
|
475
502
|
const data = await res.json();
|
|
476
503
|
return data.elements ?? [];
|
|
477
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
|
+
}
|
|
478
523
|
var linkedinAdsSetupFlow = {
|
|
479
524
|
initialState: () => ({}),
|
|
480
525
|
steps: [
|
|
@@ -522,16 +567,25 @@ var linkedinAdsSetupFlow = {
|
|
|
522
567
|
sections.push("_No ad accounts selected._", "");
|
|
523
568
|
return sections.join("\n");
|
|
524
569
|
}
|
|
525
|
-
sections.push(
|
|
526
|
-
|
|
527
|
-
|
|
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];
|
|
528
581
|
const account = byId.get(id);
|
|
529
582
|
const name = (account?.name ?? "-").replace(/\|/g, "\\|");
|
|
530
583
|
const currency = account?.currency ?? "-";
|
|
531
584
|
const type = account?.type ?? "-";
|
|
532
585
|
const status = account?.status ?? "-";
|
|
586
|
+
const campaigns = campaignCounts[i] == null ? "-" : String(campaignCounts[i]);
|
|
533
587
|
sections.push(
|
|
534
|
-
`| ${id} | ${name} | ${currency} | ${type} | ${status} |`
|
|
588
|
+
`| ${id} | ${name} | ${currency} | ${type} | ${status} | ${campaigns} |`
|
|
535
589
|
);
|
|
536
590
|
}
|
|
537
591
|
sections.push("");
|
|
@@ -699,8 +753,8 @@ var linkedinAdsConnector = new ConnectorPlugin({
|
|
|
699
753
|
systemPrompt: {
|
|
700
754
|
en: `### Tools
|
|
701
755
|
|
|
702
|
-
- \`
|
|
703
|
-
- \`
|
|
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.
|
|
704
758
|
|
|
705
759
|
### LinkedIn Marketing API Reference
|
|
706
760
|
|
|
@@ -792,8 +846,8 @@ const data = await res.json();
|
|
|
792
846
|
\`\`\``,
|
|
793
847
|
ja: `### \u30C4\u30FC\u30EB
|
|
794
848
|
|
|
795
|
-
- \`
|
|
796
|
-
- \`
|
|
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
|
|
797
851
|
|
|
798
852
|
### LinkedIn Marketing API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
799
853
|
|
|
@@ -16,6 +16,7 @@ var init_parameter_definition = __esm({
|
|
|
16
16
|
type;
|
|
17
17
|
secret;
|
|
18
18
|
required;
|
|
19
|
+
isDeprecated;
|
|
19
20
|
constructor(config) {
|
|
20
21
|
this.slug = config.slug;
|
|
21
22
|
this.name = config.name;
|
|
@@ -24,6 +25,7 @@ var init_parameter_definition = __esm({
|
|
|
24
25
|
this.type = config.type;
|
|
25
26
|
this.secret = config.secret;
|
|
26
27
|
this.required = config.required;
|
|
28
|
+
this.isDeprecated = config.isDeprecated ?? false;
|
|
27
29
|
}
|
|
28
30
|
/**
|
|
29
31
|
* Get the parameter value from a ConnectorConnectionObject.
|
|
@@ -175,7 +177,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
175
177
|
/**
|
|
176
178
|
* Create tools for connections that belong to this connector.
|
|
177
179
|
* Filters connections by connectorKey internally.
|
|
178
|
-
* Returns tools keyed as
|
|
180
|
+
* Returns tools keyed as `connector_${connectorKey}_${toolName}`.
|
|
179
181
|
*/
|
|
180
182
|
createTools(connections, config, opts) {
|
|
181
183
|
const myConnections = connections.filter(
|
|
@@ -185,7 +187,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
185
187
|
for (const t of Object.values(this.tools)) {
|
|
186
188
|
const tool = t.createTool(myConnections, config);
|
|
187
189
|
const originalToModelOutput = tool.toModelOutput;
|
|
188
|
-
result[
|
|
190
|
+
result[`connector_${this.connectorKey}_${t.name}`] = {
|
|
189
191
|
...tool,
|
|
190
192
|
toModelOutput: async (options) => {
|
|
191
193
|
if (!originalToModelOutput) {
|
|
@@ -241,19 +243,34 @@ async function runSetupFlow(flow, params, ctx, config) {
|
|
|
241
243
|
};
|
|
242
244
|
let state = flow.initialState();
|
|
243
245
|
let answerIdx = 0;
|
|
246
|
+
const pendingParameterUpdates = [];
|
|
244
247
|
for (const step of flow.steps) {
|
|
245
248
|
const ans = ctx.answers[answerIdx];
|
|
246
249
|
if (ans && ans.questionSlug === step.slug) {
|
|
247
250
|
state = step.applyAnswer(state, ans.answer);
|
|
251
|
+
if (step.toParameterUpdates) {
|
|
252
|
+
pendingParameterUpdates.push(...step.toParameterUpdates(state));
|
|
253
|
+
}
|
|
248
254
|
answerIdx += 1;
|
|
249
255
|
continue;
|
|
250
256
|
}
|
|
257
|
+
const resolvedAllowFreeText = step.allowFreeText !== void 0 ? step.allowFreeText : true;
|
|
251
258
|
if (step.type === "text") {
|
|
259
|
+
if (step.fetchOptions) {
|
|
260
|
+
const options2 = await step.fetchOptions(state, runtime);
|
|
261
|
+
if (options2.length === 0) {
|
|
262
|
+
continue;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
252
265
|
return {
|
|
253
266
|
type: "nextQuestion",
|
|
254
267
|
questionSlug: step.slug,
|
|
255
268
|
question: step.question[ctx.language],
|
|
256
|
-
questionType: "text"
|
|
269
|
+
questionType: "text",
|
|
270
|
+
allowFreeText: resolvedAllowFreeText,
|
|
271
|
+
...pendingParameterUpdates.length > 0 && {
|
|
272
|
+
parameterUpdates: pendingParameterUpdates
|
|
273
|
+
}
|
|
257
274
|
};
|
|
258
275
|
}
|
|
259
276
|
const options = step.fetchOptions ? await step.fetchOptions(state, runtime) : [];
|
|
@@ -265,11 +282,21 @@ async function runSetupFlow(flow, params, ctx, config) {
|
|
|
265
282
|
questionSlug: step.slug,
|
|
266
283
|
question: step.question[ctx.language],
|
|
267
284
|
questionType: step.type,
|
|
268
|
-
options
|
|
285
|
+
options,
|
|
286
|
+
allowFreeText: resolvedAllowFreeText,
|
|
287
|
+
...pendingParameterUpdates.length > 0 && {
|
|
288
|
+
parameterUpdates: pendingParameterUpdates
|
|
289
|
+
}
|
|
269
290
|
};
|
|
270
291
|
}
|
|
271
292
|
const dataInvestigationResult = await flow.finalize(state, runtime);
|
|
272
|
-
return {
|
|
293
|
+
return {
|
|
294
|
+
type: "fulfilled",
|
|
295
|
+
dataInvestigationResult,
|
|
296
|
+
...pendingParameterUpdates.length > 0 && {
|
|
297
|
+
parameterUpdates: pendingParameterUpdates
|
|
298
|
+
}
|
|
299
|
+
};
|
|
273
300
|
}
|
|
274
301
|
async function resolveSetupSelection(params) {
|
|
275
302
|
const { selected, allSentinel, fetchAll, limit } = params;
|
|
@@ -290,11 +317,11 @@ var AUTH_TYPES = {
|
|
|
290
317
|
// ../connectors/src/connectors/mailchimp-oauth/setup.ts
|
|
291
318
|
var mailchimpOauthOnboarding = new ConnectorOnboarding({
|
|
292
319
|
dataOverviewInstructions: {
|
|
293
|
-
en: `1. Call
|
|
320
|
+
en: `1. Call connector_mailchimp-oauth_request with GET /lists to list all audiences
|
|
294
321
|
2. Pick an audience and call GET /lists/{list_id}/members?count=5 to sample members
|
|
295
322
|
3. Call GET /campaigns?count=5 to list recent campaigns
|
|
296
323
|
4. Call GET /reports?count=5 to view campaign reports`,
|
|
297
|
-
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
|
|
298
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
|
|
299
326
|
3. GET /campaigns?count=5 \u3067\u6700\u8FD1\u306E\u30AD\u30E3\u30F3\u30DA\u30FC\u30F3\u4E00\u89A7\u3092\u53D6\u5F97
|
|
300
327
|
4. GET /reports?count=5 \u3067\u30AD\u30E3\u30F3\u30DA\u30FC\u30F3\u30EC\u30DD\u30FC\u30C8\u3092\u8868\u793A`
|
|
@@ -549,7 +576,7 @@ var mailchimpOauthConnector = new ConnectorPlugin({
|
|
|
549
576
|
systemPrompt: {
|
|
550
577
|
en: `### Tools
|
|
551
578
|
|
|
552
|
-
- \`
|
|
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.
|
|
553
580
|
|
|
554
581
|
### Mailchimp Marketing API v3 Reference
|
|
555
582
|
|
|
@@ -607,7 +634,7 @@ const data = await res.json();
|
|
|
607
634
|
\`\`\``,
|
|
608
635
|
ja: `### \u30C4\u30FC\u30EB
|
|
609
636
|
|
|
610
|
-
- \`
|
|
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
|
|
611
638
|
|
|
612
639
|
### Mailchimp Marketing API v3 \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
613
640
|
|
|
@@ -16,6 +16,7 @@ var init_parameter_definition = __esm({
|
|
|
16
16
|
type;
|
|
17
17
|
secret;
|
|
18
18
|
required;
|
|
19
|
+
isDeprecated;
|
|
19
20
|
constructor(config) {
|
|
20
21
|
this.slug = config.slug;
|
|
21
22
|
this.name = config.name;
|
|
@@ -24,6 +25,7 @@ var init_parameter_definition = __esm({
|
|
|
24
25
|
this.type = config.type;
|
|
25
26
|
this.secret = config.secret;
|
|
26
27
|
this.required = config.required;
|
|
28
|
+
this.isDeprecated = config.isDeprecated ?? false;
|
|
27
29
|
}
|
|
28
30
|
/**
|
|
29
31
|
* Get the parameter value from a ConnectorConnectionObject.
|
|
@@ -280,7 +282,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
280
282
|
/**
|
|
281
283
|
* Create tools for connections that belong to this connector.
|
|
282
284
|
* Filters connections by connectorKey internally.
|
|
283
|
-
* Returns tools keyed as
|
|
285
|
+
* Returns tools keyed as `connector_${connectorKey}_${toolName}`.
|
|
284
286
|
*/
|
|
285
287
|
createTools(connections, config, opts) {
|
|
286
288
|
const myConnections = connections.filter(
|
|
@@ -290,7 +292,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
290
292
|
for (const t of Object.values(this.tools)) {
|
|
291
293
|
const tool = t.createTool(myConnections, config);
|
|
292
294
|
const originalToModelOutput = tool.toModelOutput;
|
|
293
|
-
result[
|
|
295
|
+
result[`connector_${this.connectorKey}_${t.name}`] = {
|
|
294
296
|
...tool,
|
|
295
297
|
toModelOutput: async (options) => {
|
|
296
298
|
if (!originalToModelOutput) {
|
|
@@ -346,19 +348,34 @@ async function runSetupFlow(flow, params, ctx, config) {
|
|
|
346
348
|
};
|
|
347
349
|
let state = flow.initialState();
|
|
348
350
|
let answerIdx = 0;
|
|
351
|
+
const pendingParameterUpdates = [];
|
|
349
352
|
for (const step of flow.steps) {
|
|
350
353
|
const ans = ctx.answers[answerIdx];
|
|
351
354
|
if (ans && ans.questionSlug === step.slug) {
|
|
352
355
|
state = step.applyAnswer(state, ans.answer);
|
|
356
|
+
if (step.toParameterUpdates) {
|
|
357
|
+
pendingParameterUpdates.push(...step.toParameterUpdates(state));
|
|
358
|
+
}
|
|
353
359
|
answerIdx += 1;
|
|
354
360
|
continue;
|
|
355
361
|
}
|
|
362
|
+
const resolvedAllowFreeText = step.allowFreeText !== void 0 ? step.allowFreeText : true;
|
|
356
363
|
if (step.type === "text") {
|
|
364
|
+
if (step.fetchOptions) {
|
|
365
|
+
const options2 = await step.fetchOptions(state, runtime);
|
|
366
|
+
if (options2.length === 0) {
|
|
367
|
+
continue;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
357
370
|
return {
|
|
358
371
|
type: "nextQuestion",
|
|
359
372
|
questionSlug: step.slug,
|
|
360
373
|
question: step.question[ctx.language],
|
|
361
|
-
questionType: "text"
|
|
374
|
+
questionType: "text",
|
|
375
|
+
allowFreeText: resolvedAllowFreeText,
|
|
376
|
+
...pendingParameterUpdates.length > 0 && {
|
|
377
|
+
parameterUpdates: pendingParameterUpdates
|
|
378
|
+
}
|
|
362
379
|
};
|
|
363
380
|
}
|
|
364
381
|
const options = step.fetchOptions ? await step.fetchOptions(state, runtime) : [];
|
|
@@ -370,11 +387,21 @@ async function runSetupFlow(flow, params, ctx, config) {
|
|
|
370
387
|
questionSlug: step.slug,
|
|
371
388
|
question: step.question[ctx.language],
|
|
372
389
|
questionType: step.type,
|
|
373
|
-
options
|
|
390
|
+
options,
|
|
391
|
+
allowFreeText: resolvedAllowFreeText,
|
|
392
|
+
...pendingParameterUpdates.length > 0 && {
|
|
393
|
+
parameterUpdates: pendingParameterUpdates
|
|
394
|
+
}
|
|
374
395
|
};
|
|
375
396
|
}
|
|
376
397
|
const dataInvestigationResult = await flow.finalize(state, runtime);
|
|
377
|
-
return {
|
|
398
|
+
return {
|
|
399
|
+
type: "fulfilled",
|
|
400
|
+
dataInvestigationResult,
|
|
401
|
+
...pendingParameterUpdates.length > 0 && {
|
|
402
|
+
parameterUpdates: pendingParameterUpdates
|
|
403
|
+
}
|
|
404
|
+
};
|
|
378
405
|
}
|
|
379
406
|
async function resolveSetupSelection(params) {
|
|
380
407
|
const { selected, allSentinel, fetchAll, limit } = params;
|
|
@@ -395,11 +422,11 @@ var AUTH_TYPES = {
|
|
|
395
422
|
// ../connectors/src/connectors/mailchimp/setup.ts
|
|
396
423
|
var mailchimpOnboarding = new ConnectorOnboarding({
|
|
397
424
|
dataOverviewInstructions: {
|
|
398
|
-
en: `1. Call
|
|
425
|
+
en: `1. Call connector_mailchimp_request with GET /lists to list all audiences
|
|
399
426
|
2. Pick an audience and call GET /lists/{list_id}/members?count=5 to sample members
|
|
400
427
|
3. Call GET /campaigns?count=5 to list recent campaigns
|
|
401
428
|
4. Call GET /reports?count=5 to view campaign reports`,
|
|
402
|
-
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
|
|
403
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
|
|
404
431
|
3. GET /campaigns?count=5 \u3067\u6700\u8FD1\u306E\u30AD\u30E3\u30F3\u30DA\u30FC\u30F3\u4E00\u89A7\u3092\u53D6\u5F97
|
|
405
432
|
4. GET /reports?count=5 \u3067\u30AD\u30E3\u30F3\u30DA\u30FC\u30F3\u30EC\u30DD\u30FC\u30C8\u3092\u8868\u793A`
|
|
@@ -620,7 +647,7 @@ var mailchimpConnector = new ConnectorPlugin({
|
|
|
620
647
|
systemPrompt: {
|
|
621
648
|
en: `### Tools
|
|
622
649
|
|
|
623
|
-
- \`
|
|
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.
|
|
624
651
|
|
|
625
652
|
### Business Logic
|
|
626
653
|
|
|
@@ -717,7 +744,7 @@ export default async function handler(c: Context) {
|
|
|
717
744
|
- Errors return \`type\`, \`title\`, \`status\`, \`detail\`, and \`instance\` fields`,
|
|
718
745
|
ja: `### \u30C4\u30FC\u30EB
|
|
719
746
|
|
|
720
|
-
- \`
|
|
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
|
|
721
748
|
|
|
722
749
|
### Business Logic
|
|
723
750
|
|