@sellable/mcp 0.1.955 → 0.1.957
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/tools/campaigns.d.ts +15 -0
- package/dist/tools/campaigns.js +9 -1
- package/dist/tools/customer-program.d.ts +1 -1
- package/dist/tools/customer-program.js +1 -1
- package/dist/tools/leads.d.ts +48 -10
- package/dist/tools/leads.js +105 -22
- package/dist/tools/registry.d.ts +14 -1
- package/package.json +1 -1
|
@@ -73,6 +73,7 @@ export interface CampaignDetail {
|
|
|
73
73
|
export interface CampaignAutomationSettings {
|
|
74
74
|
autoApproveFollowups: boolean | null;
|
|
75
75
|
enableFollowUps: boolean | null;
|
|
76
|
+
autoApproveReplies: boolean | null;
|
|
76
77
|
}
|
|
77
78
|
export interface CampaignMessagesPreviewInput {
|
|
78
79
|
campaignId: string;
|
|
@@ -171,6 +172,7 @@ export interface UpdateCampaignInput {
|
|
|
171
172
|
messageApproach?: "conversation" | "message_test";
|
|
172
173
|
autoApproveFollowups?: boolean;
|
|
173
174
|
enableFollowUps?: boolean;
|
|
175
|
+
autoApproveReplies?: boolean;
|
|
174
176
|
senderIds?: string[];
|
|
175
177
|
rubric?: unknown[];
|
|
176
178
|
}
|
|
@@ -270,6 +272,7 @@ export declare const campaignToolDefinitions: ({
|
|
|
270
272
|
useMessagingTemplate?: undefined;
|
|
271
273
|
autoApproveFollowups?: undefined;
|
|
272
274
|
enableFollowUps?: undefined;
|
|
275
|
+
autoApproveReplies?: undefined;
|
|
273
276
|
rubric?: undefined;
|
|
274
277
|
flowVersion?: undefined;
|
|
275
278
|
};
|
|
@@ -320,6 +323,7 @@ export declare const campaignToolDefinitions: ({
|
|
|
320
323
|
useMessagingTemplate?: undefined;
|
|
321
324
|
autoApproveFollowups?: undefined;
|
|
322
325
|
enableFollowUps?: undefined;
|
|
326
|
+
autoApproveReplies?: undefined;
|
|
323
327
|
rubric?: undefined;
|
|
324
328
|
flowVersion?: undefined;
|
|
325
329
|
};
|
|
@@ -372,6 +376,7 @@ export declare const campaignToolDefinitions: ({
|
|
|
372
376
|
useMessagingTemplate?: undefined;
|
|
373
377
|
autoApproveFollowups?: undefined;
|
|
374
378
|
enableFollowUps?: undefined;
|
|
379
|
+
autoApproveReplies?: undefined;
|
|
375
380
|
rubric?: undefined;
|
|
376
381
|
flowVersion?: undefined;
|
|
377
382
|
};
|
|
@@ -420,6 +425,7 @@ export declare const campaignToolDefinitions: ({
|
|
|
420
425
|
useMessagingTemplate?: undefined;
|
|
421
426
|
autoApproveFollowups?: undefined;
|
|
422
427
|
enableFollowUps?: undefined;
|
|
428
|
+
autoApproveReplies?: undefined;
|
|
423
429
|
rubric?: undefined;
|
|
424
430
|
flowVersion?: undefined;
|
|
425
431
|
};
|
|
@@ -468,6 +474,7 @@ export declare const campaignToolDefinitions: ({
|
|
|
468
474
|
useMessagingTemplate?: undefined;
|
|
469
475
|
autoApproveFollowups?: undefined;
|
|
470
476
|
enableFollowUps?: undefined;
|
|
477
|
+
autoApproveReplies?: undefined;
|
|
471
478
|
rubric?: undefined;
|
|
472
479
|
flowVersion?: undefined;
|
|
473
480
|
};
|
|
@@ -559,6 +566,7 @@ export declare const campaignToolDefinitions: ({
|
|
|
559
566
|
useMessagingTemplate?: undefined;
|
|
560
567
|
autoApproveFollowups?: undefined;
|
|
561
568
|
enableFollowUps?: undefined;
|
|
569
|
+
autoApproveReplies?: undefined;
|
|
562
570
|
rubric?: undefined;
|
|
563
571
|
flowVersion?: undefined;
|
|
564
572
|
};
|
|
@@ -769,6 +777,7 @@ export declare const campaignToolDefinitions: ({
|
|
|
769
777
|
useMessagingTemplate?: undefined;
|
|
770
778
|
autoApproveFollowups?: undefined;
|
|
771
779
|
enableFollowUps?: undefined;
|
|
780
|
+
autoApproveReplies?: undefined;
|
|
772
781
|
rubric?: undefined;
|
|
773
782
|
flowVersion?: undefined;
|
|
774
783
|
};
|
|
@@ -997,6 +1006,10 @@ export declare const campaignToolDefinitions: ({
|
|
|
997
1006
|
type: string;
|
|
998
1007
|
description: string;
|
|
999
1008
|
};
|
|
1009
|
+
autoApproveReplies: {
|
|
1010
|
+
type: string;
|
|
1011
|
+
description: string;
|
|
1012
|
+
};
|
|
1000
1013
|
senderIds: {
|
|
1001
1014
|
type: string;
|
|
1002
1015
|
items: {
|
|
@@ -1073,6 +1086,7 @@ export declare const campaignToolDefinitions: ({
|
|
|
1073
1086
|
useMessagingTemplate?: undefined;
|
|
1074
1087
|
autoApproveFollowups?: undefined;
|
|
1075
1088
|
enableFollowUps?: undefined;
|
|
1089
|
+
autoApproveReplies?: undefined;
|
|
1076
1090
|
rubric?: undefined;
|
|
1077
1091
|
flowVersion?: undefined;
|
|
1078
1092
|
};
|
|
@@ -1124,6 +1138,7 @@ export declare const campaignToolDefinitions: ({
|
|
|
1124
1138
|
useMessagingTemplate?: undefined;
|
|
1125
1139
|
autoApproveFollowups?: undefined;
|
|
1126
1140
|
enableFollowUps?: undefined;
|
|
1141
|
+
autoApproveReplies?: undefined;
|
|
1127
1142
|
rubric?: undefined;
|
|
1128
1143
|
flowVersion?: undefined;
|
|
1129
1144
|
};
|
package/dist/tools/campaigns.js
CHANGED
|
@@ -587,6 +587,10 @@ export const campaignToolDefinitions = [
|
|
|
587
587
|
type: "boolean",
|
|
588
588
|
description: "Whether the campaign follow-up sweeper may draft follow-ups. Keep true when enabling autoApproveFollowups unless the user explicitly requests drafting suppression.",
|
|
589
589
|
},
|
|
590
|
+
autoApproveReplies: {
|
|
591
|
+
type: "boolean",
|
|
592
|
+
description: "Whether drafted replies to prospects who answered are sent without the customer reviewing them. Set it only when the customer asks for automatic replies, and tell them replies will go out without their review. Default is off: every reply waits for the customer in the inbox.",
|
|
593
|
+
},
|
|
590
594
|
senderIds: {
|
|
591
595
|
type: "array",
|
|
592
596
|
items: { type: "string" },
|
|
@@ -712,6 +716,9 @@ function readCampaignAutomationSettings(source) {
|
|
|
712
716
|
enableFollowUps: typeof source.enableFollowUps === "boolean"
|
|
713
717
|
? source.enableFollowUps
|
|
714
718
|
: null,
|
|
719
|
+
autoApproveReplies: typeof source.autoApproveReplies === "boolean"
|
|
720
|
+
? source.autoApproveReplies
|
|
721
|
+
: null,
|
|
715
722
|
};
|
|
716
723
|
}
|
|
717
724
|
function normalizeCellValue(cell) {
|
|
@@ -1127,7 +1134,8 @@ export async function updateCampaign(campaignId, input) {
|
|
|
1127
1134
|
const { campaignId: _ignore, workspaceId, interactionMode, flowVersion: _flowVersion, senderIds, currentStep, ...updates } = input;
|
|
1128
1135
|
const hasSenderIds = Object.prototype.hasOwnProperty.call(input, "senderIds");
|
|
1129
1136
|
const hasAutomationSettings = Object.prototype.hasOwnProperty.call(input, "autoApproveFollowups") ||
|
|
1130
|
-
Object.prototype.hasOwnProperty.call(input, "enableFollowUps")
|
|
1137
|
+
Object.prototype.hasOwnProperty.call(input, "enableFollowUps") ||
|
|
1138
|
+
Object.prototype.hasOwnProperty.call(input, "autoApproveReplies");
|
|
1131
1139
|
const requestOptions = workspaceId ? { workspaceId } : undefined;
|
|
1132
1140
|
if (!hasSenderIds && currentStep !== undefined) {
|
|
1133
1141
|
updates.currentStep = currentStep;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export declare const customerProgramToolDefinitions: readonly [{
|
|
2
2
|
readonly name: "customer_program";
|
|
3
|
-
readonly description: "Observe the home workspace campaign relationship stage, read prior complete daily or weekly campaign results, and retain campaign context. Scheduled stage_delivery grants native posting only when delivery.deliverNow is true; false means stay silent and reconcile. Save only newly learned campaign context or customer work/report preferences; campaign creation and editing stay in the create-campaign workflow. When the customer says where they are or wants updates at their own morning, call set_preferences with preferences.timezone (IANA, e.g. Europe/London); messages then go out at 08:00 and 09:00 their time on their working days. The customer gets one message a day.";
|
|
3
|
+
readonly description: "Observe the home workspace campaign relationship stage, read prior complete daily or weekly campaign results, and retain campaign context. Scheduled stage_delivery grants native posting only when delivery.deliverNow is true; false means stay silent and reconcile. Save only newly learned campaign context or customer work/report preferences; campaign creation and editing stay in the create-campaign workflow. When the customer says where they are or wants updates at their own morning, call set_preferences with preferences.timezone (IANA, e.g. Europe/London); messages then go out at 08:00 and 09:00 their time on their working days. The customer gets one message a day. Some changes are made only in the Sellable web app at https://app.sellable.dev; when asked for one, give the exact link and say what to click: card, invoices and the plan (owner only): /settings?tab=billing; Slack channels, and restarting, stopping or removing the agent: /sellable-agent/connection; adding or reconnecting LinkedIn, daily limits and sending hours: /linkedin-accounts; reply settings for one campaign: /campaign-builder/{campaignId}/settings. Do everything else yourself with your tools.";
|
|
4
4
|
readonly inputSchema: {
|
|
5
5
|
readonly type: "object";
|
|
6
6
|
readonly properties: {
|
|
@@ -2,7 +2,7 @@ import { getApi, SellableApiError } from "../api.js";
|
|
|
2
2
|
export const customerProgramToolDefinitions = [
|
|
3
3
|
{
|
|
4
4
|
name: "customer_program",
|
|
5
|
-
description: "Observe the home workspace campaign relationship stage, read prior complete daily or weekly campaign results, and retain campaign context. Scheduled stage_delivery grants native posting only when delivery.deliverNow is true; false means stay silent and reconcile. Save only newly learned campaign context or customer work/report preferences; campaign creation and editing stay in the create-campaign workflow. When the customer says where they are or wants updates at their own morning, call set_preferences with preferences.timezone (IANA, e.g. Europe/London); messages then go out at 08:00 and 09:00 their time on their working days. The customer gets one message a day.",
|
|
5
|
+
description: "Observe the home workspace campaign relationship stage, read prior complete daily or weekly campaign results, and retain campaign context. Scheduled stage_delivery grants native posting only when delivery.deliverNow is true; false means stay silent and reconcile. Save only newly learned campaign context or customer work/report preferences; campaign creation and editing stay in the create-campaign workflow. When the customer says where they are or wants updates at their own morning, call set_preferences with preferences.timezone (IANA, e.g. Europe/London); messages then go out at 08:00 and 09:00 their time on their working days. The customer gets one message a day. Some changes are made only in the Sellable web app at https://app.sellable.dev; when asked for one, give the exact link and say what to click: card, invoices and the plan (owner only): /settings?tab=billing; Slack channels, and restarting, stopping or removing the agent: /sellable-agent/connection; adding or reconnecting LinkedIn, daily limits and sending hours: /linkedin-accounts; reply settings for one campaign: /campaign-builder/{campaignId}/settings. Do everything else yourself with your tools.",
|
|
6
6
|
inputSchema: {
|
|
7
7
|
type: "object",
|
|
8
8
|
properties: {
|
package/dist/tools/leads.d.ts
CHANGED
|
@@ -4440,6 +4440,44 @@ export declare function loadCsvDomains(input: LoadCsvDomainsInput): Promise<{
|
|
|
4440
4440
|
guidance?: undefined;
|
|
4441
4441
|
}>;
|
|
4442
4442
|
export declare function loadCsvLinkedinLeads(input: LoadCsvLinkedinLeadsInput): Promise<{
|
|
4443
|
+
ok: boolean;
|
|
4444
|
+
requiresConfirmation: boolean;
|
|
4445
|
+
resolvedFilePath: string;
|
|
4446
|
+
leadListId: string;
|
|
4447
|
+
leadListName: string;
|
|
4448
|
+
createdLeadList: boolean;
|
|
4449
|
+
selectedLeadListIdUpdated: boolean;
|
|
4450
|
+
rowsInserted: number;
|
|
4451
|
+
jobId: string | null;
|
|
4452
|
+
importStatus: string;
|
|
4453
|
+
validCount: number;
|
|
4454
|
+
suggestedToolCalls: {
|
|
4455
|
+
tool: string;
|
|
4456
|
+
args: {
|
|
4457
|
+
campaignOfferId?: string | undefined;
|
|
4458
|
+
targetLeadCount: number;
|
|
4459
|
+
jobId?: string | undefined;
|
|
4460
|
+
leadListId: string;
|
|
4461
|
+
provider: string;
|
|
4462
|
+
};
|
|
4463
|
+
}[];
|
|
4464
|
+
guidance: string;
|
|
4465
|
+
linkedInColumn?: undefined;
|
|
4466
|
+
selectedColumns?: undefined;
|
|
4467
|
+
standardMappings?: undefined;
|
|
4468
|
+
customColumnTargets?: undefined;
|
|
4469
|
+
invalidCount?: undefined;
|
|
4470
|
+
duplicateCount?: undefined;
|
|
4471
|
+
emptyLinkedInRowCount?: undefined;
|
|
4472
|
+
ignoredReservedColumns?: undefined;
|
|
4473
|
+
reservedColumnWarning?: undefined;
|
|
4474
|
+
duplicatePolicy?: undefined;
|
|
4475
|
+
limits?: undefined;
|
|
4476
|
+
warnings?: undefined;
|
|
4477
|
+
readinessWarning?: undefined;
|
|
4478
|
+
preview?: undefined;
|
|
4479
|
+
confirmationToken?: undefined;
|
|
4480
|
+
} | {
|
|
4443
4481
|
ok: boolean;
|
|
4444
4482
|
requiresConfirmation: boolean;
|
|
4445
4483
|
resolvedFilePath: string;
|
|
@@ -4480,10 +4518,6 @@ export declare function loadCsvLinkedinLeads(input: LoadCsvLinkedinLeadsInput):
|
|
|
4480
4518
|
preview: import("./csv-linkedin.js").CsvLinkedinPreview;
|
|
4481
4519
|
suggestedToolCalls: never[];
|
|
4482
4520
|
resolvedFilePath?: undefined;
|
|
4483
|
-
linkedInColumn?: undefined;
|
|
4484
|
-
selectedColumns?: undefined;
|
|
4485
|
-
standardMappings?: undefined;
|
|
4486
|
-
customColumnTargets?: undefined;
|
|
4487
4521
|
leadListId?: undefined;
|
|
4488
4522
|
leadListName?: undefined;
|
|
4489
4523
|
createdLeadList?: undefined;
|
|
@@ -4492,6 +4526,11 @@ export declare function loadCsvLinkedinLeads(input: LoadCsvLinkedinLeadsInput):
|
|
|
4492
4526
|
jobId?: undefined;
|
|
4493
4527
|
importStatus?: undefined;
|
|
4494
4528
|
validCount?: undefined;
|
|
4529
|
+
guidance?: undefined;
|
|
4530
|
+
linkedInColumn?: undefined;
|
|
4531
|
+
selectedColumns?: undefined;
|
|
4532
|
+
standardMappings?: undefined;
|
|
4533
|
+
customColumnTargets?: undefined;
|
|
4495
4534
|
invalidCount?: undefined;
|
|
4496
4535
|
duplicateCount?: undefined;
|
|
4497
4536
|
emptyLinkedInRowCount?: undefined;
|
|
@@ -4501,7 +4540,6 @@ export declare function loadCsvLinkedinLeads(input: LoadCsvLinkedinLeadsInput):
|
|
|
4501
4540
|
limits?: undefined;
|
|
4502
4541
|
warnings?: undefined;
|
|
4503
4542
|
readinessWarning?: undefined;
|
|
4504
|
-
guidance?: undefined;
|
|
4505
4543
|
confirmationToken?: undefined;
|
|
4506
4544
|
} | {
|
|
4507
4545
|
ok: boolean;
|
|
@@ -4521,10 +4559,6 @@ export declare function loadCsvLinkedinLeads(input: LoadCsvLinkedinLeadsInput):
|
|
|
4521
4559
|
};
|
|
4522
4560
|
}[];
|
|
4523
4561
|
resolvedFilePath?: undefined;
|
|
4524
|
-
linkedInColumn?: undefined;
|
|
4525
|
-
selectedColumns?: undefined;
|
|
4526
|
-
standardMappings?: undefined;
|
|
4527
|
-
customColumnTargets?: undefined;
|
|
4528
4562
|
leadListId?: undefined;
|
|
4529
4563
|
leadListName?: undefined;
|
|
4530
4564
|
createdLeadList?: undefined;
|
|
@@ -4533,6 +4567,11 @@ export declare function loadCsvLinkedinLeads(input: LoadCsvLinkedinLeadsInput):
|
|
|
4533
4567
|
jobId?: undefined;
|
|
4534
4568
|
importStatus?: undefined;
|
|
4535
4569
|
validCount?: undefined;
|
|
4570
|
+
guidance?: undefined;
|
|
4571
|
+
linkedInColumn?: undefined;
|
|
4572
|
+
selectedColumns?: undefined;
|
|
4573
|
+
standardMappings?: undefined;
|
|
4574
|
+
customColumnTargets?: undefined;
|
|
4536
4575
|
invalidCount?: undefined;
|
|
4537
4576
|
duplicateCount?: undefined;
|
|
4538
4577
|
emptyLinkedInRowCount?: undefined;
|
|
@@ -4542,7 +4581,6 @@ export declare function loadCsvLinkedinLeads(input: LoadCsvLinkedinLeadsInput):
|
|
|
4542
4581
|
limits?: undefined;
|
|
4543
4582
|
warnings?: undefined;
|
|
4544
4583
|
readinessWarning?: undefined;
|
|
4545
|
-
guidance?: undefined;
|
|
4546
4584
|
}>;
|
|
4547
4585
|
export declare function loadCsvDncEntriesTool(input: LoadCsvDncEntriesInput & {
|
|
4548
4586
|
workspaceId?: string | null;
|
package/dist/tools/leads.js
CHANGED
|
@@ -1534,7 +1534,7 @@ export const leadToolDefinitions = [
|
|
|
1534
1534
|
},
|
|
1535
1535
|
{
|
|
1536
1536
|
name: "search_sales_nav",
|
|
1537
|
-
description:
|
|
1537
|
+
description: "Search LinkedIn Sales Navigator. Requires exact provider prompt preflight. Pass exactly one owner: campaignOfferId for campaign work or findLeadsRunId plus runVersion for a campaignless run.",
|
|
1538
1538
|
inputSchema: {
|
|
1539
1539
|
type: "object",
|
|
1540
1540
|
properties: {
|
|
@@ -1559,9 +1559,18 @@ export const leadToolDefinitions = [
|
|
|
1559
1559
|
type: "string",
|
|
1560
1560
|
description: "Campaign offer ID to associate search",
|
|
1561
1561
|
},
|
|
1562
|
-
findLeadsRunId: {
|
|
1563
|
-
|
|
1564
|
-
|
|
1562
|
+
findLeadsRunId: {
|
|
1563
|
+
type: "string",
|
|
1564
|
+
description: "Campaignless run/list ID",
|
|
1565
|
+
},
|
|
1566
|
+
runVersion: {
|
|
1567
|
+
type: "number",
|
|
1568
|
+
description: "Current durable run version",
|
|
1569
|
+
},
|
|
1570
|
+
targetLeadCount: {
|
|
1571
|
+
type: "number",
|
|
1572
|
+
description: "Approved bounded source cap",
|
|
1573
|
+
},
|
|
1565
1574
|
searchName: {
|
|
1566
1575
|
type: "string",
|
|
1567
1576
|
description: "Optional name for the search",
|
|
@@ -2001,9 +2010,18 @@ export const leadToolDefinitions = [
|
|
|
2001
2010
|
type: "string",
|
|
2002
2011
|
description: "Campaign offer ID to associate search",
|
|
2003
2012
|
},
|
|
2004
|
-
findLeadsRunId: {
|
|
2005
|
-
|
|
2006
|
-
|
|
2013
|
+
findLeadsRunId: {
|
|
2014
|
+
type: "string",
|
|
2015
|
+
description: "Campaignless run/list ID",
|
|
2016
|
+
},
|
|
2017
|
+
runVersion: {
|
|
2018
|
+
type: "number",
|
|
2019
|
+
description: "Current durable run version",
|
|
2020
|
+
},
|
|
2021
|
+
targetLeadCount: {
|
|
2022
|
+
type: "number",
|
|
2023
|
+
description: "Approved bounded source cap",
|
|
2024
|
+
},
|
|
2007
2025
|
workspaceId: {
|
|
2008
2026
|
type: "string",
|
|
2009
2027
|
description: "Explicit request-scoped workspace id. Pass this instead of switching the shared active workspace.",
|
|
@@ -2070,8 +2088,14 @@ export const leadToolDefinitions = [
|
|
|
2070
2088
|
type: "string",
|
|
2071
2089
|
description: "Campaign offer ID to associate search. Optional for directional preview runs.",
|
|
2072
2090
|
},
|
|
2073
|
-
findLeadsRunId: {
|
|
2074
|
-
|
|
2091
|
+
findLeadsRunId: {
|
|
2092
|
+
type: "string",
|
|
2093
|
+
description: "Campaignless run/list ID",
|
|
2094
|
+
},
|
|
2095
|
+
runVersion: {
|
|
2096
|
+
type: "number",
|
|
2097
|
+
description: "Current durable run version",
|
|
2098
|
+
},
|
|
2075
2099
|
currentStep: {
|
|
2076
2100
|
type: ["string", "null"],
|
|
2077
2101
|
description: "Headless workflow step ID",
|
|
@@ -2117,8 +2141,14 @@ export const leadToolDefinitions = [
|
|
|
2117
2141
|
type: "string",
|
|
2118
2142
|
description: "Campaign offer ID",
|
|
2119
2143
|
},
|
|
2120
|
-
findLeadsRunId: {
|
|
2121
|
-
|
|
2144
|
+
findLeadsRunId: {
|
|
2145
|
+
type: "string",
|
|
2146
|
+
description: "Campaignless run/list ID",
|
|
2147
|
+
},
|
|
2148
|
+
runVersion: {
|
|
2149
|
+
type: "number",
|
|
2150
|
+
description: "Current durable run version",
|
|
2151
|
+
},
|
|
2122
2152
|
workspaceId: {
|
|
2123
2153
|
type: "string",
|
|
2124
2154
|
description: "Explicit request-scoped workspace id. Pass this instead of switching the shared active workspace.",
|
|
@@ -2189,8 +2219,14 @@ export const leadToolDefinitions = [
|
|
|
2189
2219
|
},
|
|
2190
2220
|
},
|
|
2191
2221
|
oneOf: [
|
|
2192
|
-
{
|
|
2193
|
-
|
|
2222
|
+
{
|
|
2223
|
+
required: ["campaignOfferId"],
|
|
2224
|
+
not: { required: ["findLeadsRunId"] },
|
|
2225
|
+
},
|
|
2226
|
+
{
|
|
2227
|
+
required: ["findLeadsRunId", "runVersion", "provider"],
|
|
2228
|
+
not: { required: ["campaignOfferId"] },
|
|
2229
|
+
},
|
|
2194
2230
|
],
|
|
2195
2231
|
additionalProperties: false,
|
|
2196
2232
|
},
|
|
@@ -2232,9 +2268,15 @@ export const leadToolDefinitions = [
|
|
|
2232
2268
|
type: "string",
|
|
2233
2269
|
description: "Campaign offer ID",
|
|
2234
2270
|
},
|
|
2235
|
-
findLeadsRunId: {
|
|
2271
|
+
findLeadsRunId: {
|
|
2272
|
+
type: "string",
|
|
2273
|
+
description: "Campaignless run/list ID",
|
|
2274
|
+
},
|
|
2236
2275
|
signalTabId: { type: "string", description: "Signal Discovery tab ID" },
|
|
2237
|
-
runVersion: {
|
|
2276
|
+
runVersion: {
|
|
2277
|
+
type: "number",
|
|
2278
|
+
description: "Current durable run version",
|
|
2279
|
+
},
|
|
2238
2280
|
workspaceId: {
|
|
2239
2281
|
type: "string",
|
|
2240
2282
|
description: "Explicit request-scoped workspace id. Pass this instead of switching the shared active workspace.",
|
|
@@ -3608,7 +3650,42 @@ export async function loadCsvLinkedinLeads(input) {
|
|
|
3608
3650
|
if (readiness.reason === "import_failed") {
|
|
3609
3651
|
throw new Error(readiness.error || "CSV import failed. Please retry the upload.");
|
|
3610
3652
|
}
|
|
3611
|
-
|
|
3653
|
+
// The lead list exists and the import is running. Hand back its ids so
|
|
3654
|
+
// the caller waits on this import; running this tool again would create
|
|
3655
|
+
// a second lead list and import every row twice.
|
|
3656
|
+
const targetLeadCount = importStart.effectiveTargetLeadCount ??
|
|
3657
|
+
importStart.targetLeadCount ??
|
|
3658
|
+
previewBuild.preview.validLinkedInRowCount;
|
|
3659
|
+
return {
|
|
3660
|
+
ok: true,
|
|
3661
|
+
requiresConfirmation: false,
|
|
3662
|
+
resolvedFilePath: previewBuild.preview.resolvedFilePath,
|
|
3663
|
+
leadListId,
|
|
3664
|
+
leadListName,
|
|
3665
|
+
createdLeadList,
|
|
3666
|
+
selectedLeadListIdUpdated: Boolean(input.campaignOfferId),
|
|
3667
|
+
rowsInserted: typeof readiness.rowCount === "number" ? readiness.rowCount : 0,
|
|
3668
|
+
jobId: importStart.jobId ?? null,
|
|
3669
|
+
importStatus: "importing",
|
|
3670
|
+
validCount: previewBuild.preview.validLinkedInRowCount,
|
|
3671
|
+
suggestedToolCalls: [
|
|
3672
|
+
{
|
|
3673
|
+
tool: "wait_for_lead_list_ready",
|
|
3674
|
+
args: {
|
|
3675
|
+
leadListId,
|
|
3676
|
+
provider: "csv-linkedin",
|
|
3677
|
+
...(importStart.jobId ? { jobId: importStart.jobId } : {}),
|
|
3678
|
+
targetLeadCount,
|
|
3679
|
+
...(input.campaignOfferId
|
|
3680
|
+
? { campaignOfferId: input.campaignOfferId }
|
|
3681
|
+
: {}),
|
|
3682
|
+
},
|
|
3683
|
+
},
|
|
3684
|
+
],
|
|
3685
|
+
guidance: "The lead list was created and the CSV import is still running. Call wait_for_lead_list_ready with this leadListId and jobId until it reports ready" +
|
|
3686
|
+
(input.campaignOfferId ? ", then confirm_lead_list" : "") +
|
|
3687
|
+
". Do not run load_csv_linkedin_leads again for this file: that creates a second lead list and imports every row twice.",
|
|
3688
|
+
};
|
|
3612
3689
|
}
|
|
3613
3690
|
return {
|
|
3614
3691
|
ok: true,
|
|
@@ -3807,8 +3884,7 @@ export async function importLeads(input) {
|
|
|
3807
3884
|
throw new Error("Campaignless sourceLeadListId must equal findLeadsRunId");
|
|
3808
3885
|
}
|
|
3809
3886
|
assertProviderPromptLoaded({ provider, findLeadsRunId: runId });
|
|
3810
|
-
const targetLeadCount = Math.min(normalizeTargetLeadCount(input.targetLeadCount, getMaxImportCount(provider)) ??
|
|
3811
|
-
defaultProviderSourceListTarget, getMaxImportCount(provider));
|
|
3887
|
+
const targetLeadCount = Math.min(normalizeTargetLeadCount(input.targetLeadCount, getMaxImportCount(provider)) ?? defaultProviderSourceListTarget, getMaxImportCount(provider));
|
|
3812
3888
|
let response;
|
|
3813
3889
|
if (provider === "sales-nav") {
|
|
3814
3890
|
if (!input.searchId) {
|
|
@@ -3855,7 +3931,10 @@ export async function importLeads(input) {
|
|
|
3855
3931
|
status: response.status ?? (response.success === false ? "failed" : "queued"),
|
|
3856
3932
|
counts: {
|
|
3857
3933
|
requested: targetLeadCount,
|
|
3858
|
-
rows: response.rowCount ??
|
|
3934
|
+
rows: response.rowCount ??
|
|
3935
|
+
response.leadsImported ??
|
|
3936
|
+
response.importedCount ??
|
|
3937
|
+
0,
|
|
3859
3938
|
},
|
|
3860
3939
|
retryable: response.retryable ?? response.success !== false,
|
|
3861
3940
|
replay: response.replay === true,
|
|
@@ -4349,8 +4428,12 @@ export async function confirmLeadList(input) {
|
|
|
4349
4428
|
});
|
|
4350
4429
|
let resolvedLeadListId = sourceLeadListId;
|
|
4351
4430
|
let resolvedProvider;
|
|
4352
|
-
const isSameSourceRefillCopy = currentStep === null &&
|
|
4353
|
-
|
|
4431
|
+
const isSameSourceRefillCopy = currentStep === null &&
|
|
4432
|
+
Array.isArray(sourceRowIds) &&
|
|
4433
|
+
sourceRowIds.length > 0;
|
|
4434
|
+
if (!resolvedLeadListId ||
|
|
4435
|
+
currentStep === undefined ||
|
|
4436
|
+
!isSameSourceRefillCopy) {
|
|
4354
4437
|
const campaign = requestOptions
|
|
4355
4438
|
? await api.get(`/api/v2/campaign-offers/${campaignOfferId}`, requestOptions)
|
|
4356
4439
|
: await api.get(`/api/v2/campaign-offers/${campaignOfferId}`);
|
|
@@ -4966,7 +5049,7 @@ Approval card should say:
|
|
|
4966
5049
|
}
|
|
4967
5050
|
export async function setHeadlineICPCriteria(input) {
|
|
4968
5051
|
const api = getApi();
|
|
4969
|
-
const { campaignOfferId, headlineICPCriteria, currentStep, workspaceId
|
|
5052
|
+
const { campaignOfferId, headlineICPCriteria, currentStep, workspaceId } = input;
|
|
4970
5053
|
const requestOptions = workspaceRequestOptions(workspaceId);
|
|
4971
5054
|
// Persist criteria to the campaign so import_leads can rely on backend state.
|
|
4972
5055
|
await api.patch(`/api/v3/campaigns/${campaignOfferId}/signal-discovery/posts`, {
|
package/dist/tools/registry.d.ts
CHANGED
|
@@ -2351,6 +2351,7 @@ export declare const allTools: ({
|
|
|
2351
2351
|
useMessagingTemplate?: undefined;
|
|
2352
2352
|
autoApproveFollowups?: undefined;
|
|
2353
2353
|
enableFollowUps?: undefined;
|
|
2354
|
+
autoApproveReplies?: undefined;
|
|
2354
2355
|
rubric?: undefined;
|
|
2355
2356
|
flowVersion?: undefined;
|
|
2356
2357
|
};
|
|
@@ -2401,6 +2402,7 @@ export declare const allTools: ({
|
|
|
2401
2402
|
useMessagingTemplate?: undefined;
|
|
2402
2403
|
autoApproveFollowups?: undefined;
|
|
2403
2404
|
enableFollowUps?: undefined;
|
|
2405
|
+
autoApproveReplies?: undefined;
|
|
2404
2406
|
rubric?: undefined;
|
|
2405
2407
|
flowVersion?: undefined;
|
|
2406
2408
|
};
|
|
@@ -2453,6 +2455,7 @@ export declare const allTools: ({
|
|
|
2453
2455
|
useMessagingTemplate?: undefined;
|
|
2454
2456
|
autoApproveFollowups?: undefined;
|
|
2455
2457
|
enableFollowUps?: undefined;
|
|
2458
|
+
autoApproveReplies?: undefined;
|
|
2456
2459
|
rubric?: undefined;
|
|
2457
2460
|
flowVersion?: undefined;
|
|
2458
2461
|
};
|
|
@@ -2501,6 +2504,7 @@ export declare const allTools: ({
|
|
|
2501
2504
|
useMessagingTemplate?: undefined;
|
|
2502
2505
|
autoApproveFollowups?: undefined;
|
|
2503
2506
|
enableFollowUps?: undefined;
|
|
2507
|
+
autoApproveReplies?: undefined;
|
|
2504
2508
|
rubric?: undefined;
|
|
2505
2509
|
flowVersion?: undefined;
|
|
2506
2510
|
};
|
|
@@ -2549,6 +2553,7 @@ export declare const allTools: ({
|
|
|
2549
2553
|
useMessagingTemplate?: undefined;
|
|
2550
2554
|
autoApproveFollowups?: undefined;
|
|
2551
2555
|
enableFollowUps?: undefined;
|
|
2556
|
+
autoApproveReplies?: undefined;
|
|
2552
2557
|
rubric?: undefined;
|
|
2553
2558
|
flowVersion?: undefined;
|
|
2554
2559
|
};
|
|
@@ -2640,6 +2645,7 @@ export declare const allTools: ({
|
|
|
2640
2645
|
useMessagingTemplate?: undefined;
|
|
2641
2646
|
autoApproveFollowups?: undefined;
|
|
2642
2647
|
enableFollowUps?: undefined;
|
|
2648
|
+
autoApproveReplies?: undefined;
|
|
2643
2649
|
rubric?: undefined;
|
|
2644
2650
|
flowVersion?: undefined;
|
|
2645
2651
|
};
|
|
@@ -2850,6 +2856,7 @@ export declare const allTools: ({
|
|
|
2850
2856
|
useMessagingTemplate?: undefined;
|
|
2851
2857
|
autoApproveFollowups?: undefined;
|
|
2852
2858
|
enableFollowUps?: undefined;
|
|
2859
|
+
autoApproveReplies?: undefined;
|
|
2853
2860
|
rubric?: undefined;
|
|
2854
2861
|
flowVersion?: undefined;
|
|
2855
2862
|
};
|
|
@@ -3078,6 +3085,10 @@ export declare const allTools: ({
|
|
|
3078
3085
|
type: string;
|
|
3079
3086
|
description: string;
|
|
3080
3087
|
};
|
|
3088
|
+
autoApproveReplies: {
|
|
3089
|
+
type: string;
|
|
3090
|
+
description: string;
|
|
3091
|
+
};
|
|
3081
3092
|
senderIds: {
|
|
3082
3093
|
type: string;
|
|
3083
3094
|
items: {
|
|
@@ -3154,6 +3165,7 @@ export declare const allTools: ({
|
|
|
3154
3165
|
useMessagingTemplate?: undefined;
|
|
3155
3166
|
autoApproveFollowups?: undefined;
|
|
3156
3167
|
enableFollowUps?: undefined;
|
|
3168
|
+
autoApproveReplies?: undefined;
|
|
3157
3169
|
rubric?: undefined;
|
|
3158
3170
|
flowVersion?: undefined;
|
|
3159
3171
|
};
|
|
@@ -3205,6 +3217,7 @@ export declare const allTools: ({
|
|
|
3205
3217
|
useMessagingTemplate?: undefined;
|
|
3206
3218
|
autoApproveFollowups?: undefined;
|
|
3207
3219
|
enableFollowUps?: undefined;
|
|
3220
|
+
autoApproveReplies?: undefined;
|
|
3208
3221
|
rubric?: undefined;
|
|
3209
3222
|
flowVersion?: undefined;
|
|
3210
3223
|
};
|
|
@@ -8709,7 +8722,7 @@ export declare const allTools: ({
|
|
|
8709
8722
|
};
|
|
8710
8723
|
} | {
|
|
8711
8724
|
readonly name: "customer_program";
|
|
8712
|
-
readonly description: "Observe the home workspace campaign relationship stage, read prior complete daily or weekly campaign results, and retain campaign context. Scheduled stage_delivery grants native posting only when delivery.deliverNow is true; false means stay silent and reconcile. Save only newly learned campaign context or customer work/report preferences; campaign creation and editing stay in the create-campaign workflow. When the customer says where they are or wants updates at their own morning, call set_preferences with preferences.timezone (IANA, e.g. Europe/London); messages then go out at 08:00 and 09:00 their time on their working days. The customer gets one message a day.";
|
|
8725
|
+
readonly description: "Observe the home workspace campaign relationship stage, read prior complete daily or weekly campaign results, and retain campaign context. Scheduled stage_delivery grants native posting only when delivery.deliverNow is true; false means stay silent and reconcile. Save only newly learned campaign context or customer work/report preferences; campaign creation and editing stay in the create-campaign workflow. When the customer says where they are or wants updates at their own morning, call set_preferences with preferences.timezone (IANA, e.g. Europe/London); messages then go out at 08:00 and 09:00 their time on their working days. The customer gets one message a day. Some changes are made only in the Sellable web app at https://app.sellable.dev; when asked for one, give the exact link and say what to click: card, invoices and the plan (owner only): /settings?tab=billing; Slack channels, and restarting, stopping or removing the agent: /sellable-agent/connection; adding or reconnecting LinkedIn, daily limits and sending hours: /linkedin-accounts; reply settings for one campaign: /campaign-builder/{campaignId}/settings. Do everything else yourself with your tools.";
|
|
8713
8726
|
readonly inputSchema: {
|
|
8714
8727
|
readonly type: "object";
|
|
8715
8728
|
readonly properties: {
|