@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
|
@@ -345,7 +345,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
345
345
|
/**
|
|
346
346
|
* Create tools for connections that belong to this connector.
|
|
347
347
|
* Filters connections by connectorKey internally.
|
|
348
|
-
* Returns tools keyed as
|
|
348
|
+
* Returns tools keyed as `connector_${connectorKey}_${toolName}`.
|
|
349
349
|
*/
|
|
350
350
|
createTools(connections, config, opts) {
|
|
351
351
|
const myConnections = connections.filter(
|
|
@@ -355,7 +355,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
355
355
|
for (const t of Object.values(this.tools)) {
|
|
356
356
|
const tool = t.createTool(myConnections, config);
|
|
357
357
|
const originalToModelOutput = tool.toModelOutput;
|
|
358
|
-
result[
|
|
358
|
+
result[`connector_${this.connectorKey}_${t.name}`] = {
|
|
359
359
|
...tool,
|
|
360
360
|
toModelOutput: async (options) => {
|
|
361
361
|
if (!originalToModelOutput) {
|
|
@@ -495,13 +495,13 @@ function normalizeRequestPath(path2, basePathSegment) {
|
|
|
495
495
|
// ../connectors/src/connectors/freshdesk/setup.ts
|
|
496
496
|
var freshdeskOnboarding = new ConnectorOnboarding({
|
|
497
497
|
dataOverviewInstructions: {
|
|
498
|
-
en: `1. Call
|
|
499
|
-
2. Call
|
|
498
|
+
en: `1. Call connector_freshdesk_request with GET /agents/me to confirm credentials.
|
|
499
|
+
2. Call connector_freshdesk_request with GET /tickets?per_page=10&order_by=created_at&order_type=desc to sample recent tickets. Each ticket carries \`status\`, \`priority\`, \`source\`, \`requester_id\`, \`responder_id\`, and \`created_at\`.
|
|
500
500
|
3. Call GET /contacts?per_page=10 to sample contacts (end users) and GET /companies?per_page=10 for companies.
|
|
501
501
|
4. To enumerate agents and groups, call GET /agents and GET /groups.
|
|
502
502
|
5. Pagination is page-based with \`page\` (1-indexed) and \`per_page\` (max 100). The \`Link\` response header carries the next-page URL when more results exist.`,
|
|
503
|
-
ja: `1.
|
|
504
|
-
2.
|
|
503
|
+
ja: `1. connector_freshdesk_request \u3067 GET /agents/me \u3092\u547C\u3073\u51FA\u3057\u3001\u8A8D\u8A3C\u60C5\u5831\u3092\u78BA\u8A8D\u3057\u307E\u3059\u3002
|
|
504
|
+
2. connector_freshdesk_request \u3067 GET /tickets?per_page=10&order_by=created_at&order_type=desc \u3092\u547C\u3073\u51FA\u3057\u3066\u6700\u8FD1\u306E\u30C1\u30B1\u30C3\u30C8\u3092\u30B5\u30F3\u30D7\u30EA\u30F3\u30B0\u3057\u307E\u3059\u3002\u5404\u30C1\u30B1\u30C3\u30C8\u306B\u306F \`status\`, \`priority\`, \`source\`, \`requester_id\`, \`responder_id\`, \`created_at\` \u306A\u3069\u304C\u542B\u307E\u308C\u307E\u3059\u3002
|
|
505
505
|
3. GET /contacts?per_page=10 \u3067\u9023\u7D61\u5148\uFF08\u30A8\u30F3\u30C9\u30E6\u30FC\u30B6\u30FC\uFF09\u3001GET /companies?per_page=10 \u3067\u4F1A\u793E\u60C5\u5831\u3092\u30B5\u30F3\u30D7\u30EA\u30F3\u30B0\u3057\u307E\u3059\u3002
|
|
506
506
|
4. \u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u3084\u30B0\u30EB\u30FC\u30D7\u306F GET /agents\u3001GET /groups \u3067\u53D6\u5F97\u3057\u307E\u3059\u3002
|
|
507
507
|
5. \u30DA\u30FC\u30B8\u30CD\u30FC\u30B7\u30E7\u30F3\u306F1\u59CB\u307E\u308A\u306E \`page\` \u3068 \`per_page\`\uFF08\u6700\u5927100\uFF09\u3002\u6B21\u30DA\u30FC\u30B8\u304C\u5B58\u5728\u3059\u308B\u5834\u5408\u306F \`Link\` \u30EC\u30B9\u30DD\u30F3\u30B9\u30D8\u30C3\u30C0\u306B\u6B21URL\u304C\u542B\u307E\u308C\u307E\u3059\u3002`
|
|
@@ -628,6 +628,80 @@ var freshdeskSetupFlow = {
|
|
|
628
628
|
);
|
|
629
629
|
}
|
|
630
630
|
sections.push("");
|
|
631
|
+
if (targetEntities.includes("tickets")) {
|
|
632
|
+
try {
|
|
633
|
+
const ticketRes = await apiFetch(
|
|
634
|
+
rt.params,
|
|
635
|
+
"/tickets?per_page=30&order_by=created_at&order_type=desc"
|
|
636
|
+
);
|
|
637
|
+
if (ticketRes.ok) {
|
|
638
|
+
const tickets = await ticketRes.json();
|
|
639
|
+
if (Array.isArray(tickets) && tickets.length > 0) {
|
|
640
|
+
const STATUS_MAP = {
|
|
641
|
+
2: "Open",
|
|
642
|
+
3: "Pending",
|
|
643
|
+
4: "Resolved",
|
|
644
|
+
5: "Closed"
|
|
645
|
+
};
|
|
646
|
+
const PRIORITY_MAP = {
|
|
647
|
+
1: "Low",
|
|
648
|
+
2: "Medium",
|
|
649
|
+
3: "High",
|
|
650
|
+
4: "Urgent"
|
|
651
|
+
};
|
|
652
|
+
const statusCounts = {};
|
|
653
|
+
for (const t of tickets) {
|
|
654
|
+
const s = t.status != null && STATUS_MAP[t.status] || String(t.status ?? "unknown");
|
|
655
|
+
statusCounts[s] = (statusCounts[s] ?? 0) + 1;
|
|
656
|
+
}
|
|
657
|
+
sections.push(
|
|
658
|
+
"### Ticket status breakdown (from recent tickets)",
|
|
659
|
+
""
|
|
660
|
+
);
|
|
661
|
+
sections.push("| Status | Count |");
|
|
662
|
+
sections.push("|--------|-------|");
|
|
663
|
+
for (const [status, cnt] of Object.entries(statusCounts).sort(
|
|
664
|
+
(a, b) => b[1] - a[1]
|
|
665
|
+
)) {
|
|
666
|
+
sections.push(`| ${status} | ${cnt} |`);
|
|
667
|
+
}
|
|
668
|
+
sections.push("");
|
|
669
|
+
const priorityCounts = {};
|
|
670
|
+
for (const t of tickets) {
|
|
671
|
+
const p = t.priority != null && PRIORITY_MAP[t.priority] || String(t.priority ?? "unknown");
|
|
672
|
+
priorityCounts[p] = (priorityCounts[p] ?? 0) + 1;
|
|
673
|
+
}
|
|
674
|
+
sections.push(
|
|
675
|
+
"### Ticket priority breakdown (from recent tickets)",
|
|
676
|
+
""
|
|
677
|
+
);
|
|
678
|
+
sections.push("| Priority | Count |");
|
|
679
|
+
sections.push("|----------|-------|");
|
|
680
|
+
for (const [priority, cnt] of Object.entries(priorityCounts).sort(
|
|
681
|
+
(a, b) => b[1] - a[1]
|
|
682
|
+
)) {
|
|
683
|
+
sections.push(`| ${priority} | ${cnt} |`);
|
|
684
|
+
}
|
|
685
|
+
sections.push("");
|
|
686
|
+
sections.push("### Recent tickets (sample)", "");
|
|
687
|
+
sections.push("| ID | Subject | Status | Priority | Created |");
|
|
688
|
+
sections.push("|----|---------|--------|----------|---------|");
|
|
689
|
+
for (const t of tickets.slice(0, 5)) {
|
|
690
|
+
const id = t.id != null ? String(t.id) : "-";
|
|
691
|
+
const subject = (t.subject ?? "-").replace(/\|/g, "\\|").slice(0, 60);
|
|
692
|
+
const status = t.status != null && STATUS_MAP[t.status] || String(t.status ?? "-");
|
|
693
|
+
const priority = t.priority != null && PRIORITY_MAP[t.priority] || String(t.priority ?? "-");
|
|
694
|
+
const created = t.created_at ? t.created_at.slice(0, 10) : "-";
|
|
695
|
+
sections.push(
|
|
696
|
+
`| ${id} | ${subject} | ${status} | ${priority} | ${created} |`
|
|
697
|
+
);
|
|
698
|
+
}
|
|
699
|
+
sections.push("");
|
|
700
|
+
}
|
|
701
|
+
}
|
|
702
|
+
} catch {
|
|
703
|
+
}
|
|
704
|
+
}
|
|
631
705
|
return sections.join("\n");
|
|
632
706
|
}
|
|
633
707
|
};
|
|
@@ -769,7 +843,7 @@ var freshdeskConnector = new ConnectorPlugin({
|
|
|
769
843
|
systemPrompt: {
|
|
770
844
|
en: `### Tools
|
|
771
845
|
|
|
772
|
-
- \`
|
|
846
|
+
- \`connector_freshdesk_request\`: The only way to call the Freshdesk REST API v2. Use it to list tickets, contacts, companies, agents, groups, and more. Authentication (HTTP Basic Auth using the API key as username) and the base URL (https://<domain>.freshdesk.com/api/v2) are configured automatically.
|
|
773
847
|
|
|
774
848
|
### Business Logic
|
|
775
849
|
|
|
@@ -846,7 +920,7 @@ export default async function handler(c: Context) {
|
|
|
846
920
|
- \`source\`: 1=Email, 2=Portal, 3=Phone, 7=Chat, 9=Feedback widget, 10=Outbound email`,
|
|
847
921
|
ja: `### \u30C4\u30FC\u30EB
|
|
848
922
|
|
|
849
|
-
- \`
|
|
923
|
+
- \`connector_freshdesk_request\`: Freshdesk REST API v2 \u3092\u547C\u3073\u51FA\u3059\u552F\u4E00\u306E\u624B\u6BB5\u3067\u3059\u3002\u30C1\u30B1\u30C3\u30C8\u3001\u9023\u7D61\u5148\u3001\u4F1A\u793E\u3001\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u3001\u30B0\u30EB\u30FC\u30D7\u306A\u3069\u306E\u53D6\u5F97\u30FB\u66F4\u65B0\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002\u8A8D\u8A3C\uFF08API \u30AD\u30FC\u3092\u30E6\u30FC\u30B6\u30FC\u540D\u3068\u3057\u305F HTTP Basic Auth\uFF09\u3068\u30D9\u30FC\u30B9URL\uFF08https://<\u30C9\u30E1\u30A4\u30F3>.freshdesk.com/api/v2\uFF09\u306F\u81EA\u52D5\u3067\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002
|
|
850
924
|
|
|
851
925
|
### Business Logic
|
|
852
926
|
|
|
@@ -360,7 +360,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
360
360
|
/**
|
|
361
361
|
* Create tools for connections that belong to this connector.
|
|
362
362
|
* Filters connections by connectorKey internally.
|
|
363
|
-
* Returns tools keyed as
|
|
363
|
+
* Returns tools keyed as `connector_${connectorKey}_${toolName}`.
|
|
364
364
|
*/
|
|
365
365
|
createTools(connections, config, opts) {
|
|
366
366
|
const myConnections = connections.filter(
|
|
@@ -370,7 +370,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
370
370
|
for (const t of Object.values(this.tools)) {
|
|
371
371
|
const tool = t.createTool(myConnections, config);
|
|
372
372
|
const originalToModelOutput = tool.toModelOutput;
|
|
373
|
-
result[
|
|
373
|
+
result[`connector_${this.connectorKey}_${t.name}`] = {
|
|
374
374
|
...tool,
|
|
375
375
|
toModelOutput: async (options) => {
|
|
376
376
|
if (!originalToModelOutput) {
|
|
@@ -510,13 +510,13 @@ function normalizeRequestPath(path2, basePathSegment) {
|
|
|
510
510
|
// ../connectors/src/connectors/freshsales/setup.ts
|
|
511
511
|
var freshsalesOnboarding = new ConnectorOnboarding({
|
|
512
512
|
dataOverviewInstructions: {
|
|
513
|
-
en: `1. Call
|
|
514
|
-
2. Call
|
|
513
|
+
en: `1. Call connector_freshsales_request with GET /selector/owners to confirm credentials and discover sales team members.
|
|
514
|
+
2. Call connector_freshsales_request with GET /contacts/filters to list available contact views (filters), then GET /contacts/view/{view_id} to fetch contacts in a view (paginated with \`page\` and \`per_page\`, default 25, max 100).
|
|
515
515
|
3. Repeat the same pattern for accounts (GET /sales_accounts/filters \u2192 /sales_accounts/view/{view_id}) and deals (GET /deals/filters \u2192 /deals/view/{view_id}).
|
|
516
516
|
4. To inspect deal pipeline metadata, call GET /selector/deal_pipelines and GET /selector/deal_stages.
|
|
517
517
|
5. Use GET /lookup to find specific records by attribute (e.g., look up a contact by email).`,
|
|
518
|
-
ja: `1.
|
|
519
|
-
2.
|
|
518
|
+
ja: `1. connector_freshsales_request \u3067 GET /selector/owners \u3092\u547C\u3073\u51FA\u3057\u3001\u8A8D\u8A3C\u60C5\u5831\u306E\u78BA\u8A8D\u3068\u55B6\u696D\u30E1\u30F3\u30D0\u30FC\u306E\u4E00\u89A7\u3092\u53D6\u5F97\u3057\u307E\u3059\u3002
|
|
519
|
+
2. connector_freshsales_request \u3067 GET /contacts/filters \u3092\u547C\u3073\u51FA\u3057\u3066\u30D3\u30E5\u30FC\uFF08filters\uFF09\u4E00\u89A7\u3092\u53D6\u5F97\u3057\u3001GET /contacts/view/{view_id} \u3067\u5404\u30D3\u30E5\u30FC\u306E\u9023\u7D61\u5148\u3092\u53D6\u5F97\u3057\u307E\u3059\uFF08\`page\` \u3068 \`per_page\` \u3067\u30DA\u30FC\u30B8\u30F3\u30B0\u3001\u30C7\u30D5\u30A9\u30EB\u30C825\u3001\u6700\u5927100\uFF09\u3002
|
|
520
520
|
3. \u540C\u3058\u30D1\u30BF\u30FC\u30F3\u3092\u53D6\u5F15\u5148\uFF08GET /sales_accounts/filters \u2192 /sales_accounts/view/{view_id}\uFF09\u3001\u5546\u8AC7\uFF08GET /deals/filters \u2192 /deals/view/{view_id}\uFF09\u306B\u3082\u9069\u7528\u3057\u307E\u3059\u3002
|
|
521
521
|
4. \u5546\u8AC7\u30D1\u30A4\u30D7\u30E9\u30A4\u30F3\u306E\u30E1\u30BF\u60C5\u5831\u306F GET /selector/deal_pipelines \u304A\u3088\u3073 GET /selector/deal_stages \u3067\u53D6\u5F97\u3057\u307E\u3059\u3002
|
|
522
522
|
5. \u7279\u5B9A\u30EC\u30B3\u30FC\u30C9\u3092\u5C5E\u6027\u3067\u691C\u7D22\u3059\u308B\u306B\u306F GET /lookup \u3092\u4F7F\u7528\u3057\u307E\u3059\uFF08\u4F8B: \u30E1\u30FC\u30EB\u3067\u9023\u7D61\u5148\u3092\u691C\u7D22\uFF09\u3002`
|
|
@@ -777,7 +777,7 @@ var freshsalesConnector = new ConnectorPlugin({
|
|
|
777
777
|
systemPrompt: {
|
|
778
778
|
en: `### Tools
|
|
779
779
|
|
|
780
|
-
- \`
|
|
780
|
+
- \`connector_freshsales_request\`: The only way to call the Freshsales / Freshworks CRM REST API. Use it to list and update contacts, accounts, deals, leads, sales activities, and selector metadata. Authentication (\`Authorization: Token token=<API_KEY>\` header \u2014 note: NOT HTTP Basic Auth) and the base URL (https://<bundle>.myfreshworks.com/crm/sales/api) are configured automatically.
|
|
781
781
|
|
|
782
782
|
### Business Logic
|
|
783
783
|
|
|
@@ -860,7 +860,7 @@ export default async function handler(c: Context) {
|
|
|
860
860
|
- GET \`/selector/territories\` / \`/selector/business_types\` / \`/selector/industry_types\` / \`/selector/contact_statuses\` / \`/selector/sales_activity_types\``,
|
|
861
861
|
ja: `### \u30C4\u30FC\u30EB
|
|
862
862
|
|
|
863
|
-
- \`
|
|
863
|
+
- \`connector_freshsales_request\`: Freshsales / Freshworks CRM REST API \u3092\u547C\u3073\u51FA\u3059\u552F\u4E00\u306E\u624B\u6BB5\u3067\u3059\u3002\u9023\u7D61\u5148\u3001\u53D6\u5F15\u5148\u3001\u5546\u8AC7\u3001\u30EA\u30FC\u30C9\u3001\u55B6\u696D\u6D3B\u52D5\u3001\u5404\u7A2E\u30BB\u30EC\u30AF\u30BF\u30FC\u30E1\u30BF\u60C5\u5831\u306E\u53D6\u5F97\u30FB\u66F4\u65B0\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002\u8A8D\u8A3C\uFF08\`Authorization: Token token=<API_KEY>\` \u30D8\u30C3\u30C0\u30FC \u2014 Freshdesk/Freshservice \u3068\u7570\u306A\u308A HTTP Basic Auth \u3067\u306F\u3042\u308A\u307E\u305B\u3093\uFF09\u3068\u30D9\u30FC\u30B9URL\uFF08https://<bundle>.myfreshworks.com/crm/sales/api\uFF09\u306F\u81EA\u52D5\u3067\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002
|
|
864
864
|
|
|
865
865
|
### Business Logic
|
|
866
866
|
|
|
@@ -315,7 +315,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
315
315
|
/**
|
|
316
316
|
* Create tools for connections that belong to this connector.
|
|
317
317
|
* Filters connections by connectorKey internally.
|
|
318
|
-
* Returns tools keyed as
|
|
318
|
+
* Returns tools keyed as `connector_${connectorKey}_${toolName}`.
|
|
319
319
|
*/
|
|
320
320
|
createTools(connections, config, opts) {
|
|
321
321
|
const myConnections = connections.filter(
|
|
@@ -325,7 +325,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
325
325
|
for (const t of Object.values(this.tools)) {
|
|
326
326
|
const tool = t.createTool(myConnections, config);
|
|
327
327
|
const originalToModelOutput = tool.toModelOutput;
|
|
328
|
-
result[
|
|
328
|
+
result[`connector_${this.connectorKey}_${t.name}`] = {
|
|
329
329
|
...tool,
|
|
330
330
|
toModelOutput: async (options) => {
|
|
331
331
|
if (!originalToModelOutput) {
|
|
@@ -465,13 +465,13 @@ function normalizeRequestPath(path2, basePathSegment) {
|
|
|
465
465
|
// ../connectors/src/connectors/freshservice/setup.ts
|
|
466
466
|
var freshserviceOnboarding = new ConnectorOnboarding({
|
|
467
467
|
dataOverviewInstructions: {
|
|
468
|
-
en: `1. Call
|
|
469
|
-
2. Call
|
|
468
|
+
en: `1. Call connector_freshservice_request with GET /agents to confirm credentials and view available agents.
|
|
469
|
+
2. Call connector_freshservice_request with GET /tickets?per_page=10 to sample recent tickets. Each ticket has \`status\`, \`priority\`, \`source\`, \`responder_id\`, \`requester_id\`, and \`created_at\`.
|
|
470
470
|
3. To enumerate organisational structure, call GET /departments and GET /locations.
|
|
471
471
|
4. For asset inventory, call GET /assets?per_page=10 \u2014 note that ITAM endpoints require the asset module to be enabled.
|
|
472
472
|
5. Pagination is page-based with \`page\` (1-indexed) and \`per_page\` (max 100). The \`Link\` response header carries the next-page URL when more results exist.`,
|
|
473
|
-
ja: `1.
|
|
474
|
-
2.
|
|
473
|
+
ja: `1. connector_freshservice_request \u3067 GET /agents \u3092\u547C\u3073\u51FA\u3057\u3001\u8A8D\u8A3C\u60C5\u5831\u306E\u78BA\u8A8D\u3068\u5229\u7528\u53EF\u80FD\u306A\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u4E00\u89A7\u3092\u53D6\u5F97\u3057\u307E\u3059\u3002
|
|
474
|
+
2. connector_freshservice_request \u3067 GET /tickets?per_page=10 \u3092\u547C\u3073\u51FA\u3057\u3066\u6700\u8FD1\u306E\u30C1\u30B1\u30C3\u30C8\u3092\u30B5\u30F3\u30D7\u30EA\u30F3\u30B0\u3057\u307E\u3059\u3002\u5404\u30C1\u30B1\u30C3\u30C8\u306B\u306F \`status\`, \`priority\`, \`source\`, \`responder_id\`, \`requester_id\`, \`created_at\` \u306A\u3069\u304C\u542B\u307E\u308C\u307E\u3059\u3002
|
|
475
475
|
3. \u7D44\u7E54\u69CB\u9020\u3092\u628A\u63E1\u3059\u308B\u306B\u306F GET /departments \u304A\u3088\u3073 GET /locations \u3092\u547C\u3073\u51FA\u3057\u307E\u3059\u3002
|
|
476
476
|
4. \u8CC7\u7523\u30A4\u30F3\u30D9\u30F3\u30C8\u30EA\u306F GET /assets?per_page=10 \u3067\u53D6\u5F97\u3067\u304D\u307E\u3059\uFF08ITAM \u30E2\u30B8\u30E5\u30FC\u30EB\u304C\u6709\u52B9\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\uFF09\u3002
|
|
477
477
|
5. \u30DA\u30FC\u30B8\u30CD\u30FC\u30B7\u30E7\u30F3\u306F1\u59CB\u307E\u308A\u306E \`page\` \u3068 \`per_page\`\uFF08\u6700\u5927100\uFF09\u3002\u6B21\u30DA\u30FC\u30B8\u304C\u5B58\u5728\u3059\u308B\u5834\u5408\u306F \`Link\` \u30EC\u30B9\u30DD\u30F3\u30B9\u30D8\u30C3\u30C0\u306B\u6B21URL\u304C\u542B\u307E\u308C\u307E\u3059\u3002`
|
|
@@ -758,7 +758,7 @@ var freshserviceConnector = new ConnectorPlugin({
|
|
|
758
758
|
systemPrompt: {
|
|
759
759
|
en: `### Tools
|
|
760
760
|
|
|
761
|
-
- \`
|
|
761
|
+
- \`connector_freshservice_request\`: The only way to call the Freshservice REST API v2. Use it to list tickets, agents, requesters, departments, locations, assets, problems, changes, releases, and more. Authentication (HTTP Basic Auth using the API key as username) and the base URL (https://<domain>.freshservice.com/api/v2) are configured automatically.
|
|
762
762
|
|
|
763
763
|
### Business Logic
|
|
764
764
|
|
|
@@ -834,7 +834,7 @@ export default async function handler(c: Context) {
|
|
|
834
834
|
- \`source\`: 1=Email, 2=Portal, 3=Phone, 4=Chat, 5=Feedback widget, 7=Yammer, 8=AwsCloudwatch, 9=Pagerduty, 10=Walkup, 11=Slack`,
|
|
835
835
|
ja: `### \u30C4\u30FC\u30EB
|
|
836
836
|
|
|
837
|
-
- \`
|
|
837
|
+
- \`connector_freshservice_request\`: Freshservice REST API v2 \u3092\u547C\u3073\u51FA\u3059\u552F\u4E00\u306E\u624B\u6BB5\u3067\u3059\u3002\u30C1\u30B1\u30C3\u30C8\u3001\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u3001\u8981\u6C42\u8005\u3001\u90E8\u7F72\u3001\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u3001\u8CC7\u7523\u3001\u554F\u984C\u7BA1\u7406\u3001\u5909\u66F4\u7BA1\u7406\u3001\u30EA\u30EA\u30FC\u30B9\u306A\u3069\u306E\u53D6\u5F97\u30FB\u66F4\u65B0\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002\u8A8D\u8A3C\uFF08API \u30AD\u30FC\u3092\u30E6\u30FC\u30B6\u30FC\u540D\u3068\u3057\u305F HTTP Basic Auth\uFF09\u3068\u30D9\u30FC\u30B9URL\uFF08https://<\u30C9\u30E1\u30A4\u30F3>.freshservice.com/api/v2\uFF09\u306F\u81EA\u52D5\u3067\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002
|
|
838
838
|
|
|
839
839
|
### Business Logic
|
|
840
840
|
|
package/dist/connectors/gamma.js
CHANGED
|
@@ -271,7 +271,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
271
271
|
/**
|
|
272
272
|
* Create tools for connections that belong to this connector.
|
|
273
273
|
* Filters connections by connectorKey internally.
|
|
274
|
-
* Returns tools keyed as
|
|
274
|
+
* Returns tools keyed as `connector_${connectorKey}_${toolName}`.
|
|
275
275
|
*/
|
|
276
276
|
createTools(connections, config, opts) {
|
|
277
277
|
const myConnections = connections.filter(
|
|
@@ -281,7 +281,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
281
281
|
for (const t of Object.values(this.tools)) {
|
|
282
282
|
const tool = t.createTool(myConnections, config);
|
|
283
283
|
const originalToModelOutput = tool.toModelOutput;
|
|
284
|
-
result[
|
|
284
|
+
result[`connector_${this.connectorKey}_${t.name}`] = {
|
|
285
285
|
...tool,
|
|
286
286
|
toModelOutput: async (options) => {
|
|
287
287
|
if (!originalToModelOutput) {
|
|
@@ -411,12 +411,12 @@ var AUTH_TYPES = {
|
|
|
411
411
|
// ../connectors/src/connectors/gamma/setup.ts
|
|
412
412
|
var gammaOnboarding = new ConnectorOnboarding({
|
|
413
413
|
dataOverviewInstructions: {
|
|
414
|
-
en: `1. Call
|
|
415
|
-
2. Call
|
|
416
|
-
3. Try generating a simple presentation with
|
|
417
|
-
ja: `1.
|
|
418
|
-
2.
|
|
419
|
-
3.
|
|
414
|
+
en: `1. Call connector_gamma_request with GET /themes to list available themes in the workspace
|
|
415
|
+
2. Call connector_gamma_request with GET /folders to list workspace folders
|
|
416
|
+
3. Try generating a simple presentation with connector_gamma_generate: inputText "Sample presentation about AI", textMode "generate", numCards 3`,
|
|
417
|
+
ja: `1. connector_gamma_request \u3067 GET /themes \u3092\u547C\u3073\u51FA\u3057\u3001\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u3067\u5229\u7528\u53EF\u80FD\u306A\u30C6\u30FC\u30DE\u4E00\u89A7\u3092\u53D6\u5F97
|
|
418
|
+
2. connector_gamma_request \u3067 GET /folders \u3092\u547C\u3073\u51FA\u3057\u3001\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u306E\u30D5\u30A9\u30EB\u30C0\u4E00\u89A7\u3092\u53D6\u5F97
|
|
419
|
+
3. connector_gamma_generate \u3067\u30B7\u30F3\u30D7\u30EB\u306A\u30D7\u30EC\u30BC\u30F3\u30C6\u30FC\u30B7\u30E7\u30F3\u3092\u8A66\u4F5C: inputText "AI\u306B\u3064\u3044\u3066\u306E\u30B5\u30F3\u30D7\u30EB\u30D7\u30EC\u30BC\u30F3\u30C6\u30FC\u30B7\u30E7\u30F3", textMode "generate", numCards 3`
|
|
420
420
|
}
|
|
421
421
|
});
|
|
422
422
|
|
|
@@ -564,7 +564,7 @@ var requestTool = new ConnectorTool({
|
|
|
564
564
|
description: `Send authenticated requests to the Gamma REST API.
|
|
565
565
|
Authentication is handled automatically using the API Key (X-API-KEY header).
|
|
566
566
|
Use this tool for listing themes, listing folders, checking generation status, and other read operations.
|
|
567
|
-
For creating presentations/documents, prefer the
|
|
567
|
+
For creating presentations/documents, prefer the connector_gamma_generate tool instead.`,
|
|
568
568
|
inputSchema,
|
|
569
569
|
outputSchema,
|
|
570
570
|
async execute({ connectionId, method, path: path2, body }, connections) {
|
|
@@ -629,7 +629,7 @@ var inputSchema2 = z2.object({
|
|
|
629
629
|
format: z2.enum(["presentation", "document", "webpage", "social"]).optional().describe("Type of artifact to create. Defaults to 'presentation'."),
|
|
630
630
|
numCards: z2.number().int().min(1).max(75).optional().describe("Number of cards/slides. Defaults to 10."),
|
|
631
631
|
themeId: z2.string().optional().describe(
|
|
632
|
-
"Theme ID for look and feel. Use
|
|
632
|
+
"Theme ID for look and feel. Use connector_gamma_request GET /themes to list available themes."
|
|
633
633
|
),
|
|
634
634
|
tone: z2.string().optional().describe(
|
|
635
635
|
"Tone/voice of the output (e.g., 'professional', 'casual', 'academic'). Max 500 chars."
|
|
@@ -677,7 +677,7 @@ var generateTool = new ConnectorTool({
|
|
|
677
677
|
name: "generate",
|
|
678
678
|
description: `Generate a presentation, document, webpage, or social post using Gamma AI.
|
|
679
679
|
This tool creates the generation, then automatically polls until completion and returns the result URL.
|
|
680
|
-
Use
|
|
680
|
+
Use connector_gamma_request GET /themes first if you want to pick a specific theme.
|
|
681
681
|
Gamma does NOT support image uploads. To visualize data, embed raw numbers directly into inputText as structured text (markdown tables, bullet lists with figures) \u2014 Gamma AI will render charts and visuals from the data.`,
|
|
682
682
|
inputSchema: inputSchema2,
|
|
683
683
|
outputSchema: outputSchema2,
|
|
@@ -801,8 +801,8 @@ var gammaConnector = new ConnectorPlugin({
|
|
|
801
801
|
systemPrompt: {
|
|
802
802
|
en: `### Tools
|
|
803
803
|
|
|
804
|
-
- \`
|
|
805
|
-
- \`
|
|
804
|
+
- \`connector_gamma_request\`: Send authenticated requests to the Gamma REST API. Use for listing themes, folders, and checking generation status. Authentication (X-API-KEY) is configured automatically.
|
|
805
|
+
- \`connector_gamma_generate\`: Generate a presentation, document, webpage, or social post using Gamma AI. This tool handles the full workflow: creates the generation, polls for completion, and returns the result URL. Prefer this over manually calling POST /generations + polling.
|
|
806
806
|
|
|
807
807
|
### Business Logic
|
|
808
808
|
|
|
@@ -875,8 +875,8 @@ export default async function handler(c: Context) {
|
|
|
875
875
|
Gamma does NOT support uploading images. If you want to visualize data (charts, graphs, tables), embed the raw numbers and data directly into \`inputText\` as structured text (e.g., markdown tables, bullet lists with figures). Gamma AI will render appropriate visual elements from the data. Do NOT generate chart images locally and try to include them \u2014 instead, pass the data values inline so Gamma can create its own visualizations.`,
|
|
876
876
|
ja: `### \u30C4\u30FC\u30EB
|
|
877
877
|
|
|
878
|
-
- \`
|
|
879
|
-
- \`
|
|
878
|
+
- \`connector_gamma_request\`: Gamma REST API\u306B\u8A8D\u8A3C\u6E08\u307F\u30EA\u30AF\u30A8\u30B9\u30C8\u3092\u9001\u4FE1\u3057\u307E\u3059\u3002\u30C6\u30FC\u30DE\u4E00\u89A7\u3001\u30D5\u30A9\u30EB\u30C0\u4E00\u89A7\u3001\u751F\u6210\u30B9\u30C6\u30FC\u30BF\u30B9\u306E\u78BA\u8A8D\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002\u8A8D\u8A3C\uFF08X-API-KEY\uFF09\u306F\u81EA\u52D5\u7684\u306B\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002
|
|
879
|
+
- \`connector_gamma_generate\`: Gamma AI\u3092\u4F7F\u3063\u3066\u30D7\u30EC\u30BC\u30F3\u30C6\u30FC\u30B7\u30E7\u30F3\u3001\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3001\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u3001\u30BD\u30FC\u30B7\u30E3\u30EB\u6295\u7A3F\u3092\u751F\u6210\u3057\u307E\u3059\u3002\u751F\u6210\u306E\u4F5C\u6210\u304B\u3089\u30DD\u30FC\u30EA\u30F3\u30B0\u3001\u7D50\u679CURL\u306E\u8FD4\u5374\u307E\u3067\u4E00\u62EC\u3067\u51E6\u7406\u3057\u307E\u3059\u3002\u624B\u52D5\u3067POST /generations + \u30DD\u30FC\u30EA\u30F3\u30B0\u3059\u308B\u3088\u308A\u3082\u3053\u3061\u3089\u3092\u63A8\u5968\u3057\u307E\u3059\u3002
|
|
880
880
|
|
|
881
881
|
### Business Logic
|
|
882
882
|
|
|
@@ -144,7 +144,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
144
144
|
/**
|
|
145
145
|
* Create tools for connections that belong to this connector.
|
|
146
146
|
* Filters connections by connectorKey internally.
|
|
147
|
-
* Returns tools keyed as
|
|
147
|
+
* Returns tools keyed as `connector_${connectorKey}_${toolName}`.
|
|
148
148
|
*/
|
|
149
149
|
createTools(connections, config, opts) {
|
|
150
150
|
const myConnections = connections.filter(
|
|
@@ -154,7 +154,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
154
154
|
for (const t of Object.values(this.tools)) {
|
|
155
155
|
const tool = t.createTool(myConnections, config);
|
|
156
156
|
const originalToModelOutput = tool.toModelOutput;
|
|
157
|
-
result[
|
|
157
|
+
result[`connector_${this.connectorKey}_${t.name}`] = {
|
|
158
158
|
...tool,
|
|
159
159
|
toModelOutput: async (options) => {
|
|
160
160
|
if (!originalToModelOutput) {
|
|
@@ -404,7 +404,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
404
404
|
/**
|
|
405
405
|
* Create tools for connections that belong to this connector.
|
|
406
406
|
* Filters connections by connectorKey internally.
|
|
407
|
-
* Returns tools keyed as
|
|
407
|
+
* Returns tools keyed as `connector_${connectorKey}_${toolName}`.
|
|
408
408
|
*/
|
|
409
409
|
createTools(connections, config, opts) {
|
|
410
410
|
const myConnections = connections.filter(
|
|
@@ -414,7 +414,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
414
414
|
for (const t of Object.values(this.tools)) {
|
|
415
415
|
const tool = t.createTool(myConnections, config);
|
|
416
416
|
const originalToModelOutput = tool.toModelOutput;
|
|
417
|
-
result[
|
|
417
|
+
result[`connector_${this.connectorKey}_${t.name}`] = {
|
|
418
418
|
...tool,
|
|
419
419
|
toModelOutput: async (options) => {
|
|
420
420
|
if (!originalToModelOutput) {
|
|
@@ -544,16 +544,16 @@ var AUTH_TYPES = {
|
|
|
544
544
|
// ../connectors/src/connectors/github/setup.ts
|
|
545
545
|
var githubOnboarding = new ConnectorOnboarding({
|
|
546
546
|
dataOverviewInstructions: {
|
|
547
|
-
en: `1. Call
|
|
548
|
-
2. Call
|
|
547
|
+
en: `1. Call connector_github_request with GET /user to confirm credentials and discover the authenticated account (login, name, plan).
|
|
548
|
+
2. Call connector_github_request with GET /user/repos?per_page=10&sort=updated to sample repositories the token can see. For organisation-owned repos, use GET /orgs/{org}/repos.
|
|
549
549
|
3. Pick a representative repo and inspect its activity:
|
|
550
550
|
- GET /repos/{owner}/{repo}/issues?state=open&per_page=10 \u2014 recent open issues (the GitHub API treats pull requests as issues; filter with the \`pull_request\` field if you want only issues).
|
|
551
551
|
- GET /repos/{owner}/{repo}/pulls?state=open&per_page=10 \u2014 open pull requests.
|
|
552
552
|
- GET /repos/{owner}/{repo}/commits?per_page=10 \u2014 recent commits on the default branch.
|
|
553
553
|
4. For broad discovery, use the search endpoints (GET /search/repositories?q=..., /search/issues?q=..., /search/code?q=...). These are heavily rate-limited (30 req/min for authenticated users), so use them sparingly.
|
|
554
554
|
5. Pagination is page-based: \`?page=1&per_page=100\` (max 100). The \`Link\` response header carries \`rel="next"\` / \`rel="last"\` URLs when more results exist.`,
|
|
555
|
-
ja: `1.
|
|
556
|
-
2.
|
|
555
|
+
ja: `1. connector_github_request \u3067 GET /user \u3092\u547C\u3073\u51FA\u3057\u3001\u8A8D\u8A3C\u60C5\u5831\u306E\u78BA\u8A8D\u3068\u8A8D\u8A3C\u6E08\u307F\u30A2\u30AB\u30A6\u30F3\u30C8\u306E\u60C5\u5831\uFF08login, name, plan\uFF09\u3092\u53D6\u5F97\u3057\u307E\u3059\u3002
|
|
556
|
+
2. connector_github_request \u3067 GET /user/repos?per_page=10&sort=updated \u3092\u547C\u3073\u51FA\u3057\u3066\u30A2\u30AF\u30BB\u30B9\u53EF\u80FD\u306A\u30EA\u30DD\u30B8\u30C8\u30EA\u3092\u30B5\u30F3\u30D7\u30EA\u30F3\u30B0\u3057\u307E\u3059\u3002Organization \u6240\u6709\u306E\u30EA\u30DD\u30B8\u30C8\u30EA\u306F GET /orgs/{org}/repos \u3092\u4F7F\u7528\u3057\u307E\u3059\u3002
|
|
557
557
|
3. \u4EE3\u8868\u7684\u306A\u30EA\u30DD\u30B8\u30C8\u30EA\u3092\u9078\u3073\u3001\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3\u3092\u78BA\u8A8D\u3057\u307E\u3059:
|
|
558
558
|
- GET /repos/{owner}/{repo}/issues?state=open&per_page=10 \u2014 \u76F4\u8FD1\u306E\u30AA\u30FC\u30D7\u30F3\u30A4\u30B7\u30E5\u30FC\uFF08GitHub API \u306F\u30D7\u30EB\u30EA\u30AF\u30A8\u30B9\u30C8\u3082\u30A4\u30B7\u30E5\u30FC\u6271\u3044\u3057\u307E\u3059\u3002\u30A4\u30B7\u30E5\u30FC\u306E\u307F\u304C\u5FC5\u8981\u306A\u5834\u5408\u306F \`pull_request\` \u30D5\u30A3\u30FC\u30EB\u30C9\u3067\u9664\u5916\uFF09\u3002
|
|
559
559
|
- GET /repos/{owner}/{repo}/pulls?state=open&per_page=10 \u2014 \u30AA\u30FC\u30D7\u30F3\u306A\u30D7\u30EB\u30EA\u30AF\u30A8\u30B9\u30C8\u4E00\u89A7\u3002
|
|
@@ -881,14 +881,14 @@ var githubConnector = new ConnectorPlugin({
|
|
|
881
881
|
systemPrompt: {
|
|
882
882
|
en: `### Tools
|
|
883
883
|
|
|
884
|
-
- \`
|
|
884
|
+
- \`connector_github_request\`: The only way to call the GitHub REST API. Use it to read repositories, issues, pull requests, commits, comments, releases, GitHub Actions runs, organisation metadata, and the search endpoints. Authentication (\`Authorization: Bearer <PAT>\`) and required headers (\`Accept: application/vnd.github+json\`, \`X-GitHub-Api-Version: 2022-11-28\`, \`User-Agent\`) are configured automatically. Both Classic (\`ghp_\u2026\`) and fine-grained (\`github_pat_\u2026\`) tokens work.
|
|
885
885
|
|
|
886
886
|
### Cloning Repositories for Deep Code Exploration
|
|
887
887
|
|
|
888
|
-
\`
|
|
888
|
+
\`connector_github_request\` plus \`/repos/{owner}/{repo}/contents/{path}\` is fine for reading a few files. When the task requires deep exploration \u2014 reading many files, searching across the codebase with ripgrep / grep, or inspecting many commits \u2014 prefer \`git clone\` via the bash tool. Follow these rules **strictly**:
|
|
889
889
|
|
|
890
890
|
1. **Always clone OUTSIDE the dashboard project.** The current working directory is the user's Vite-based dashboard project, which is itself a git repository. Cloning into it (or any subdirectory of it) would pollute the dashboard's git index, risk accidental commits, and create nested-repo confusion. Always clone into a path outside the project \u2014 use \`$(mktemp -d)\`, \`/tmp/<unique-name>\`, or \`~/.cache/<unique-name>\`.
|
|
891
|
-
2. **NEVER commit, push, or otherwise write to the cloned repo.** This is a strictly read-only flow. Do not run \`git commit\`, \`git push\`, \`git tag\`, \`git rebase\`, or any other write operation inside the cloned working tree. The connector is for reading source; if the task requires writing back to GitHub (creating an issue, posting a comment, etc.), use \`
|
|
891
|
+
2. **NEVER commit, push, or otherwise write to the cloned repo.** This is a strictly read-only flow. Do not run \`git commit\`, \`git push\`, \`git tag\`, \`git rebase\`, or any other write operation inside the cloned working tree. The connector is for reading source; if the task requires writing back to GitHub (creating an issue, posting a comment, etc.), use \`connector_github_request\` \u2014 never \`git push\`.
|
|
892
892
|
3. **Authenticate via HTTPS using the PAT inline.** Run \`git clone https://<TOKEN>@github.com/<owner>/<repo>.git <target-dir>\`. Avoid logging the URL with the token interpolated; redact when echoing commands.
|
|
893
893
|
4. **Prefer shallow clones.** Use \`--depth=1 --single-branch\` unless full history is specifically required.
|
|
894
894
|
5. **Clean up when done.** Remove the cloned directory (\`rm -rf <target-dir>\`) once exploration is complete.
|
|
@@ -988,14 +988,14 @@ export default async function handler(c: Context) {
|
|
|
988
988
|
- GET \`/rate_limit\` \u2014 Inspect remaining quota across REST / GraphQL / search`,
|
|
989
989
|
ja: `### \u30C4\u30FC\u30EB
|
|
990
990
|
|
|
991
|
-
- \`
|
|
991
|
+
- \`connector_github_request\`: GitHub REST API \u3092\u547C\u3073\u51FA\u3059\u552F\u4E00\u306E\u624B\u6BB5\u3067\u3059\u3002\u30EA\u30DD\u30B8\u30C8\u30EA\u3001Issue\u3001Pull Request\u3001\u30B3\u30DF\u30C3\u30C8\u3001\u30B3\u30E1\u30F3\u30C8\u3001Release\u3001GitHub Actions \u306E\u30E9\u30F3\u3001\u7D44\u7E54\u30E1\u30BF\u60C5\u5831\u3001\u30B5\u30FC\u30C1\u7CFB\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\u306E\u53D6\u5F97\u30FB\u66F4\u65B0\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002\u8A8D\u8A3C\uFF08\`Authorization: Bearer <PAT>\`\uFF09\u3068\u5FC5\u9808\u30D8\u30C3\u30C0\uFF08\`Accept: application/vnd.github+json\`\u3001\`X-GitHub-Api-Version: 2022-11-28\`\u3001\`User-Agent\`\uFF09\u306F\u81EA\u52D5\u3067\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002Classic\uFF08\`ghp_\u2026\`\uFF09/ fine-grained\uFF08\`github_pat_\u2026\`\uFF09\u3069\u3061\u3089\u306E PAT \u3082\u5229\u7528\u53EF\u80FD\u3067\u3059\u3002
|
|
992
992
|
|
|
993
993
|
### \u6DF1\u3044\u30B3\u30FC\u30C9\u63A2\u7D22\u306E\u305F\u3081\u306E\u30EA\u30DD\u30B8\u30C8\u30EA\u30AF\u30ED\u30FC\u30F3
|
|
994
994
|
|
|
995
|
-
\u6570\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u3080\u7A0B\u5EA6\u306A\u3089 \`
|
|
995
|
+
\u6570\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u3080\u7A0B\u5EA6\u306A\u3089 \`connector_github_request\` \u3068 \`/repos/{owner}/{repo}/contents/{path}\` \u3067\u5341\u5206\u3067\u3059\u3002\u591A\u6570\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u3080\u3001ripgrep / grep \u3067\u6A2A\u65AD\u691C\u7D22\u3059\u308B\u3001\u8907\u6570\u30B3\u30DF\u30C3\u30C8\u3092\u8ABF\u3079\u308B\u306A\u3069 **\u6DF1\u3044\u63A2\u7D22\u304C\u5FC5\u8981\u306A\u5834\u5408\u306F** bash \u30C4\u30FC\u30EB\u7D4C\u7531\u3067 \`git clone\` \u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002\u4EE5\u4E0B\u306E\u30EB\u30FC\u30EB\u3092 **\u53B3\u5B88** \u3059\u308B\u3053\u3068\uFF1A
|
|
996
996
|
|
|
997
997
|
1. **\u5FC5\u305A\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u5916\u306B\u30AF\u30ED\u30FC\u30F3\u3059\u308B\u3053\u3068\u3002** \u73FE\u5728\u306E\u4F5C\u696D\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306F\u30E6\u30FC\u30B6\u30FC\u306E Vite \u30D9\u30FC\u30B9\u306E\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF08\u305D\u308C\u81EA\u4F53\u304C git \u30EA\u30DD\u30B8\u30C8\u30EA\uFF09\u3067\u3059\u3002\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5185\uFF08\u3042\u308B\u3044\u306F\u305D\u306E\u30B5\u30D6\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\uFF09\u306B\u30AF\u30ED\u30FC\u30F3\u3059\u308B\u3068\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u306E git \u306E\u72B6\u614B\u3092\u6C5A\u67D3\u3057\u3001\u8AA4\u30B3\u30DF\u30C3\u30C8\u3084\u30CD\u30B9\u30C8\u3057\u305F\u30EA\u30DD\u30B8\u30C8\u30EA\u306E\u6DF7\u4E71\u306E\u539F\u56E0\u306B\u306A\u308A\u307E\u3059\u3002\u5FC5\u305A\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5916\u306E\u30D1\u30B9\uFF08\`$(mktemp -d)\`, \`/tmp/<unique-name>\`, \`~/.cache/<unique-name>\` \u306A\u3069\uFF09\u306B\u30AF\u30ED\u30FC\u30F3\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
998
|
-
2. **\u7D76\u5BFE\u306B commit / push / \u66F8\u304D\u8FBC\u307F\u64CD\u4F5C\u3092\u3057\u306A\u3044\u3053\u3068\u3002** \u3053\u308C\u306F\u53B3\u5BC6\u306B read-only \u306E\u30D5\u30ED\u30FC\u3067\u3059\u3002\u30AF\u30ED\u30FC\u30F3\u3057\u305F\u4F5C\u696D\u30C4\u30EA\u30FC\u5185\u3067 \`git commit\` / \`git push\` / \`git tag\` / \`git rebase\` \u306A\u3069\u306E\u66F8\u304D\u8FBC\u307F\u64CD\u4F5C\u3092\u884C\u308F\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002GitHub \u3078\u306E\u66F8\u304D\u8FBC\u307F\u304C\u5FC5\u8981\u306A\u5834\u5408\uFF08Issue \u4F5C\u6210\u3001\u30B3\u30E1\u30F3\u30C8\u6295\u7A3F\u7B49\uFF09\u306F \`
|
|
998
|
+
2. **\u7D76\u5BFE\u306B commit / push / \u66F8\u304D\u8FBC\u307F\u64CD\u4F5C\u3092\u3057\u306A\u3044\u3053\u3068\u3002** \u3053\u308C\u306F\u53B3\u5BC6\u306B read-only \u306E\u30D5\u30ED\u30FC\u3067\u3059\u3002\u30AF\u30ED\u30FC\u30F3\u3057\u305F\u4F5C\u696D\u30C4\u30EA\u30FC\u5185\u3067 \`git commit\` / \`git push\` / \`git tag\` / \`git rebase\` \u306A\u3069\u306E\u66F8\u304D\u8FBC\u307F\u64CD\u4F5C\u3092\u884C\u308F\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002GitHub \u3078\u306E\u66F8\u304D\u8FBC\u307F\u304C\u5FC5\u8981\u306A\u5834\u5408\uFF08Issue \u4F5C\u6210\u3001\u30B3\u30E1\u30F3\u30C8\u6295\u7A3F\u7B49\uFF09\u306F \`connector_github_request\` \u3092\u4F7F\u7528\u3057\u3001\`git push\` \u3067\u884C\u308F\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002
|
|
999
999
|
3. **HTTPS \u8A8D\u8A3C\u3067 PAT \u3092\u30A4\u30F3\u30E9\u30A4\u30F3\u3067\u6E21\u3059\u3053\u3068\u3002** \`git clone https://<TOKEN>@github.com/<owner>/<repo>.git <target-dir>\` \u306E\u3088\u3046\u306B\u57CB\u3081\u8FBC\u307F\u307E\u3059\u3002\u30C8\u30FC\u30AF\u30F3\u5165\u308A\u306E URL \u3092\u305D\u306E\u307E\u307E\u30ED\u30B0\u306B\u51FA\u529B\u3057\u306A\u3044\u3088\u3046\u3001\u30B3\u30DE\u30F3\u30C9\u3092\u30A8\u30B3\u30FC\u3059\u308B\u969B\u306F\u30DE\u30B9\u30AF\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
1000
1000
|
4. **shallow clone \u3092\u512A\u5148\u3059\u308B\u3053\u3068\u3002** \u5C65\u6B74\u304C\u7279\u306B\u5FC5\u8981\u3067\u306A\u3044\u9650\u308A \`--depth=1 --single-branch\` \u3092\u4F7F\u7528\u3057\u307E\u3059\u3002
|
|
1001
1001
|
5. **\u4F5C\u696D\u5F8C\u306F\u524A\u9664\u3059\u308B\u3053\u3068\u3002** \u63A2\u7D22\u304C\u7D42\u308F\u3063\u305F\u3089\u30AF\u30ED\u30FC\u30F3\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u524A\u9664\uFF08\`rm -rf <target-dir>\`\uFF09\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
@@ -212,7 +212,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
212
212
|
/**
|
|
213
213
|
* Create tools for connections that belong to this connector.
|
|
214
214
|
* Filters connections by connectorKey internally.
|
|
215
|
-
* Returns tools keyed as
|
|
215
|
+
* Returns tools keyed as `connector_${connectorKey}_${toolName}`.
|
|
216
216
|
*/
|
|
217
217
|
createTools(connections, config, opts) {
|
|
218
218
|
const myConnections = connections.filter(
|
|
@@ -222,7 +222,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
222
222
|
for (const t of Object.values(this.tools)) {
|
|
223
223
|
const tool = t.createTool(myConnections, config);
|
|
224
224
|
const originalToModelOutput = tool.toModelOutput;
|
|
225
|
-
result[
|
|
225
|
+
result[`connector_${this.connectorKey}_${t.name}`] = {
|
|
226
226
|
...tool,
|
|
227
227
|
toModelOutput: async (options) => {
|
|
228
228
|
if (!originalToModelOutput) {
|
|
@@ -510,12 +510,12 @@ var gmailOnboarding = new ConnectorOnboarding({
|
|
|
510
510
|
- Write only 1 sentence between tool calls, then immediately call the next tool. Skip unnecessary explanations and proceed efficiently`
|
|
511
511
|
},
|
|
512
512
|
dataOverviewInstructions: {
|
|
513
|
-
en: `1. Call
|
|
514
|
-
2. Call
|
|
515
|
-
3. Call
|
|
516
|
-
ja: `1.
|
|
517
|
-
2.
|
|
518
|
-
3. \u5404\u30E1\u30C3\u30BB\u30FC\u30B8\u306B\u3064\u3044\u3066
|
|
513
|
+
en: `1. Call connector_gmail-oauth_request with GET /me/labels to list all labels
|
|
514
|
+
2. Call connector_gmail-oauth_request with GET /me/messages?maxResults=5 to get recent message IDs
|
|
515
|
+
3. Call connector_gmail-oauth_request with GET /me/messages/{id}?format=metadata for each message to see subjects and senders`,
|
|
516
|
+
ja: `1. connector_gmail-oauth_request \u3067 GET /me/labels \u3092\u547C\u3073\u51FA\u3057\u3001\u5168\u30E9\u30D9\u30EB\u4E00\u89A7\u3092\u53D6\u5F97
|
|
517
|
+
2. connector_gmail-oauth_request \u3067 GET /me/messages?maxResults=5 \u3092\u547C\u3073\u51FA\u3057\u3001\u6700\u65B0\u30E1\u30C3\u30BB\u30FC\u30B8ID\u3092\u53D6\u5F97
|
|
518
|
+
3. \u5404\u30E1\u30C3\u30BB\u30FC\u30B8\u306B\u3064\u3044\u3066 connector_gmail-oauth_request \u3067 GET /me/messages/{id}?format=metadata \u3092\u547C\u3073\u51FA\u3057\u3001\u4EF6\u540D\u3068\u9001\u4FE1\u8005\u3092\u78BA\u8A8D`
|
|
519
519
|
}
|
|
520
520
|
});
|
|
521
521
|
|
|
@@ -627,7 +627,7 @@ var gmailOauthConnector = new ConnectorPlugin({
|
|
|
627
627
|
systemPrompt: {
|
|
628
628
|
en: `### Tools
|
|
629
629
|
|
|
630
|
-
- \`
|
|
630
|
+
- \`connector_gmail-oauth_request\`: The only way to call the Gmail API (read-only). Use it to list messages, get message details, list labels, list threads, and get user profile. Authentication is configured automatically via OAuth.
|
|
631
631
|
|
|
632
632
|
### Gmail API Reference
|
|
633
633
|
|
|
@@ -710,7 +710,7 @@ thread.messages.forEach(m => console.log(m.snippet));
|
|
|
710
710
|
\`\`\``,
|
|
711
711
|
ja: `### \u30C4\u30FC\u30EB
|
|
712
712
|
|
|
713
|
-
- \`
|
|
713
|
+
- \`connector_gmail-oauth_request\`: Gmail API\u3092\u547C\u3073\u51FA\u3059\u552F\u4E00\u306E\u624B\u6BB5\u3067\u3059\uFF08\u8AAD\u307F\u53D6\u308A\u5C02\u7528\uFF09\u3002\u30E1\u30C3\u30BB\u30FC\u30B8\u4E00\u89A7\u306E\u53D6\u5F97\u3001\u30E1\u30C3\u30BB\u30FC\u30B8\u8A73\u7D30\u306E\u53D6\u5F97\u3001\u30E9\u30D9\u30EB\u4E00\u89A7\u3001\u30B9\u30EC\u30C3\u30C9\u4E00\u89A7\u3001\u30E6\u30FC\u30B6\u30FC\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB\u306E\u53D6\u5F97\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002OAuth\u7D4C\u7531\u3067\u8A8D\u8A3C\u306F\u81EA\u52D5\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002
|
|
714
714
|
|
|
715
715
|
### Gmail API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
716
716
|
|
package/dist/connectors/gmail.js
CHANGED
|
@@ -226,7 +226,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
226
226
|
/**
|
|
227
227
|
* Create tools for connections that belong to this connector.
|
|
228
228
|
* Filters connections by connectorKey internally.
|
|
229
|
-
* Returns tools keyed as
|
|
229
|
+
* Returns tools keyed as `connector_${connectorKey}_${toolName}`.
|
|
230
230
|
*/
|
|
231
231
|
createTools(connections, config, opts) {
|
|
232
232
|
const myConnections = connections.filter(
|
|
@@ -236,7 +236,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
236
236
|
for (const t of Object.values(this.tools)) {
|
|
237
237
|
const tool = t.createTool(myConnections, config);
|
|
238
238
|
const originalToModelOutput = tool.toModelOutput;
|
|
239
|
-
result[
|
|
239
|
+
result[`connector_${this.connectorKey}_${t.name}`] = {
|
|
240
240
|
...tool,
|
|
241
241
|
toModelOutput: async (options) => {
|
|
242
242
|
if (!originalToModelOutput) {
|
|
@@ -721,7 +721,7 @@ var gmailConnector = new ConnectorPlugin({
|
|
|
721
721
|
systemPrompt: {
|
|
722
722
|
en: `### Tools
|
|
723
723
|
|
|
724
|
-
- \`
|
|
724
|
+
- \`connector_gmail-service-account_request_with_delegation\`: Call the Gmail API on behalf of the specified Workspace user via Domain-wide Delegation. Pass \`subject\` as the target user's email; the token will be issued as that user. Always pass \`scopes\`.
|
|
725
725
|
|
|
726
726
|
### OAuth Scopes (pass as \`scopes\` argument)
|
|
727
727
|
|
|
@@ -814,7 +814,7 @@ for (const msg of messages.messages ?? []) {
|
|
|
814
814
|
\`\`\``,
|
|
815
815
|
ja: `### \u30C4\u30FC\u30EB
|
|
816
816
|
|
|
817
|
-
- \`
|
|
817
|
+
- \`connector_gmail-service-account_request_with_delegation\`: \u6307\u5B9A\u3055\u308C\u305F Workspace \u30E6\u30FC\u30B6\u30FC\u306B\u4EE3\u308F\u3063\u3066 Domain-wide Delegation \u7D4C\u7531\u3067 Gmail API \u3092\u547C\u3073\u51FA\u3057\u307E\u3059\u3002\u4EE3\u7406\u5BFE\u8C61\u306E\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3092 \`subject\` \u3068\u3057\u3066\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u30C8\u30FC\u30AF\u30F3\u306F\u305D\u306E\u30E6\u30FC\u30B6\u30FC\u3068\u3057\u3066\u767A\u884C\u3055\u308C\u307E\u3059\u3002\`scopes\` \u3082\u6BCE\u56DE\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
818
818
|
|
|
819
819
|
### OAuth \u30B9\u30B3\u30FC\u30D7 (\`scopes\` \u5F15\u6570\u3067\u6E21\u3059)
|
|
820
820
|
|
|
@@ -274,7 +274,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
274
274
|
/**
|
|
275
275
|
* Create tools for connections that belong to this connector.
|
|
276
276
|
* Filters connections by connectorKey internally.
|
|
277
|
-
* Returns tools keyed as
|
|
277
|
+
* Returns tools keyed as `connector_${connectorKey}_${toolName}`.
|
|
278
278
|
*/
|
|
279
279
|
createTools(connections, config, opts) {
|
|
280
280
|
const myConnections = connections.filter(
|
|
@@ -284,7 +284,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
284
284
|
for (const t of Object.values(this.tools)) {
|
|
285
285
|
const tool = t.createTool(myConnections, config);
|
|
286
286
|
const originalToModelOutput = tool.toModelOutput;
|
|
287
|
-
result[
|
|
287
|
+
result[`connector_${this.connectorKey}_${t.name}`] = {
|
|
288
288
|
...tool,
|
|
289
289
|
toModelOutput: async (options) => {
|
|
290
290
|
if (!originalToModelOutput) {
|
|
@@ -662,9 +662,9 @@ var googleAdsOnboarding = new ConnectorOnboarding({
|
|
|
662
662
|
- Write only 1 sentence between tool calls, then immediately call the next tool. Skip unnecessary explanations and proceed efficiently`
|
|
663
663
|
},
|
|
664
664
|
dataOverviewInstructions: {
|
|
665
|
-
en: `1. Call
|
|
665
|
+
en: `1. Call connector_google-ads-oauth_request with POST customers/{customerId}/googleAds:searchStream to explore available campaign data using GAQL: SELECT campaign.id, campaign.name, campaign.status FROM campaign LIMIT 10
|
|
666
666
|
2. Explore ad group and keyword data as needed to understand the data structure`,
|
|
667
|
-
ja: `1.
|
|
667
|
+
ja: `1. connector_google-ads-oauth_request \u3067 POST customers/{customerId}/googleAds:searchStream \u3092\u547C\u3073\u51FA\u3057\u3001GAQL\u3067\u30AD\u30E3\u30F3\u30DA\u30FC\u30F3\u30C7\u30FC\u30BF\u3092\u63A2\u7D22: SELECT campaign.id, campaign.name, campaign.status FROM campaign LIMIT 10
|
|
668
668
|
2. \u5FC5\u8981\u306B\u5FDC\u3058\u3066\u5E83\u544A\u30B0\u30EB\u30FC\u30D7\u3084\u30AD\u30FC\u30EF\u30FC\u30C9\u30C7\u30FC\u30BF\u3092\u63A2\u7D22\u3057\u3001\u30C7\u30FC\u30BF\u69CB\u9020\u3092\u628A\u63E1`
|
|
669
669
|
}
|
|
670
670
|
});
|
|
@@ -936,8 +936,8 @@ var googleAdsConnector = new ConnectorPlugin({
|
|
|
936
936
|
systemPrompt: {
|
|
937
937
|
en: `### Tools (setup-time only)
|
|
938
938
|
|
|
939
|
-
- \`
|
|
940
|
-
- \`
|
|
939
|
+
- \`connector_google-ads-oauth_request\`: Send authenticated requests to the Google Ads API during setup / data overview. Use it for GAQL queries via searchStream. The {customerId} placeholder in paths is automatically replaced (hyphens removed). Authentication and developer token are configured automatically.
|
|
940
|
+
- \`connector_google-ads-oauth_listCustomers\`: List accessible Google Ads customer accounts. Use this during setup to discover available accounts.
|
|
941
941
|
|
|
942
942
|
> **Important**: These tools are only available at setup time. Inside server-logic handlers, use the SDK (\`connection(id).search\`, etc.) \u2014 the SDK's fetch is already wired through the OAuth proxy. **Do NOT** hand-roll HTTP calls to \`_sqcore/connections/*/request\` from a handler.
|
|
943
943
|
|
|
@@ -998,8 +998,8 @@ const customerIds = await ads.listAccessibleCustomers();
|
|
|
998
998
|
\`\`\``,
|
|
999
999
|
ja: `### \u30C4\u30FC\u30EB\uFF08\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306E\u307F\uFF09
|
|
1000
1000
|
|
|
1001
|
-
- \`
|
|
1002
|
-
- \`
|
|
1001
|
+
- \`connector_google-ads-oauth_request\`: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3084\u30C7\u30FC\u30BF\u6982\u8981\u628A\u63E1\u6642\u306B Google Ads API \u3078\u8A8D\u8A3C\u6E08\u307F\u30EA\u30AF\u30A8\u30B9\u30C8\u3092\u9001\u4FE1\u3057\u307E\u3059\u3002searchStream \u3092\u4F7F\u3063\u305F GAQL \u30AF\u30A8\u30EA\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002\u30D1\u30B9\u5185\u306E {customerId} \u30D7\u30EC\u30FC\u30B9\u30DB\u30EB\u30C0\u30FC\u306F\u81EA\u52D5\u7684\u306B\u7F6E\u63DB\u3055\u308C\u307E\u3059\uFF08\u30CF\u30A4\u30D5\u30F3\u306F\u9664\u53BB\uFF09\u3002\u8A8D\u8A3C\u3068\u30C7\u30D9\u30ED\u30C3\u30D1\u30FC\u30C8\u30FC\u30AF\u30F3\u306F\u81EA\u52D5\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002
|
|
1002
|
+
- \`connector_google-ads-oauth_listCustomers\`: \u30A2\u30AF\u30BB\u30B9\u53EF\u80FD\u306A Google Ads \u9867\u5BA2\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
|
|
1003
1003
|
|
|
1004
1004
|
> **\u91CD\u8981**: \u3053\u308C\u3089\u306E\u30C4\u30FC\u30EB\u306F\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306E\u307F\u5229\u7528\u53EF\u80FD\u3067\u3059\u3002\u30B5\u30FC\u30D0\u30FC\u30ED\u30B8\u30C3\u30AF\u306E\u30CF\u30F3\u30C9\u30E9\u5185\u3067\u306F\u5FC5\u305A SDK\uFF08\`connection(id).search\` \u306A\u3069\uFF09\u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002SDK \u306E fetch \u306F OAuth \u30D7\u30ED\u30AD\u30B7\u7D4C\u7531\u3067\u65E2\u306B\u914D\u7DDA\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u30CF\u30F3\u30C9\u30E9\u304B\u3089 \`_sqcore/connections/*/request\` \u3092\u624B\u66F8\u304D\u3067\u547C\u3073\u51FA\u3055\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002
|
|
1005
1005
|
|