@sellable/mcp 0.1.505 → 0.1.507
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/index-dev.js +0 -0
- package/dist/index.js +0 -0
- package/dist/tools/campaign-message-preparation.d.ts +27 -26
- package/dist/tools/campaign-message-preparation.js +12 -27
- package/dist/tools/leads.d.ts +0 -47
- package/dist/tools/leads.js +10 -24
- package/dist/tools/prompts.js +1 -1
- package/dist/tools/refill-sends.d.ts +78 -28
- package/dist/tools/refill-sends.js +171 -566
- package/dist/tools/refill-target-plan.js +8 -61
- package/dist/tools/registry.d.ts +84 -48
- package/package.json +1 -1
- package/skills/refill-sends/SKILL.md +11 -22
- package/skills/refill-sends-workflow/SKILL.md +6 -11
|
@@ -10,13 +10,6 @@ const SAFE_PACKET_ACTION_TYPES = new Set([
|
|
|
10
10
|
"approve_messages",
|
|
11
11
|
"start_paused_campaign",
|
|
12
12
|
"wait_for_scheduler",
|
|
13
|
-
"wait_for_active_work",
|
|
14
|
-
"wait_for_source_import",
|
|
15
|
-
"copy_selected_source_rows",
|
|
16
|
-
"continue_signal_discovery_source",
|
|
17
|
-
"continue_sales_nav_source",
|
|
18
|
-
"continue_prospeo_source",
|
|
19
|
-
"manual_source_replenishment",
|
|
20
13
|
"refresh_paid_inmail_credits",
|
|
21
14
|
"lower_paid_inmail_threshold",
|
|
22
15
|
"switch_to_connection_lane",
|
|
@@ -26,14 +19,6 @@ const MANUAL_ONLY_PACKET_ACTION_TYPES = new Set([
|
|
|
26
19
|
"lower_paid_inmail_threshold",
|
|
27
20
|
"switch_to_connection_lane",
|
|
28
21
|
"create_connection_campaign",
|
|
29
|
-
"continue_sales_nav_source",
|
|
30
|
-
"continue_prospeo_source",
|
|
31
|
-
"manual_source_replenishment",
|
|
32
|
-
]);
|
|
33
|
-
const TERMINAL_NO_ACTION_BLOCKER_CODES = new Set([
|
|
34
|
-
"paid_inmail_below_threshold",
|
|
35
|
-
"paid_inmail_credit_missing",
|
|
36
|
-
"paid_inmail_credit_stale",
|
|
37
22
|
]);
|
|
38
23
|
const SOURCE_PLAN_STATES = new Set([
|
|
39
24
|
"not_needed",
|
|
@@ -42,8 +27,6 @@ const SOURCE_PLAN_STATES = new Set([
|
|
|
42
27
|
"needs_signal_import",
|
|
43
28
|
"waiting_for_import",
|
|
44
29
|
"needs_confirm",
|
|
45
|
-
"needs_same_source_copy",
|
|
46
|
-
"needs_provider_continuation",
|
|
47
30
|
"source_shortfall",
|
|
48
31
|
"provider_exhausted",
|
|
49
32
|
"provider_missing",
|
|
@@ -173,16 +156,6 @@ function sanitizeActionCandidate(candidate) {
|
|
|
173
156
|
tableId: stringValue(candidate.tableId),
|
|
174
157
|
tableName: stringValue(candidate.tableName) ?? null,
|
|
175
158
|
columnId: stringValue(candidate.columnId) ?? null,
|
|
176
|
-
sourceLeadListId: stringValue(candidate.sourceLeadListId) ?? null,
|
|
177
|
-
leadSourceProvider: stringValue(candidate.leadSourceProvider) ?? null,
|
|
178
|
-
sourceFingerprint: stringValue(candidate.sourceFingerprint) ?? null,
|
|
179
|
-
sourceInventoryStatus: stringValue(candidate.sourceInventoryStatus) ?? null,
|
|
180
|
-
sourceRowIds: stringArray(candidate.sourceRowIds),
|
|
181
|
-
sourceRowLimit: typeof candidate.sourceRowLimit === "number"
|
|
182
|
-
? candidate.sourceRowLimit
|
|
183
|
-
: undefined,
|
|
184
|
-
activeJobId: stringValue(candidate.activeJobId) ?? null,
|
|
185
|
-
activeImportStatus: stringValue(candidate.activeImportStatus) ?? null,
|
|
186
159
|
targetRows: typeof candidate.targetRows === "number" ? candidate.targetRows : undefined,
|
|
187
160
|
columnRole: stringValue(candidate.columnRole),
|
|
188
161
|
rowSelector: sanitizeRowSelector(candidate.rowSelector),
|
|
@@ -217,25 +190,9 @@ function sanitizeToolInput(value) {
|
|
|
217
190
|
return {};
|
|
218
191
|
return {
|
|
219
192
|
senderId: stringValue(value.senderId),
|
|
220
|
-
actionType: allowedActionType(value.actionType),
|
|
221
193
|
campaignId: stringValue(value.campaignId),
|
|
222
194
|
tableId: stringValue(value.tableId),
|
|
223
195
|
columnId: stringValue(value.columnId) ?? null,
|
|
224
|
-
sourceLeadListId: stringValue(value.sourceLeadListId) ?? null,
|
|
225
|
-
leadSourceProvider: stringValue(value.leadSourceProvider) ?? null,
|
|
226
|
-
sourceFingerprint: stringValue(value.sourceFingerprint) ?? null,
|
|
227
|
-
activeJobId: stringValue(value.activeJobId) ?? null,
|
|
228
|
-
activeImportStatus: stringValue(value.activeImportStatus) ?? null,
|
|
229
|
-
sourceInventoryStatus: stringValue(value.sourceInventoryStatus) ?? null,
|
|
230
|
-
sourceRowIds: stringArray(value.sourceRowIds),
|
|
231
|
-
sourceRowLimit: typeof value.sourceRowLimit === "number"
|
|
232
|
-
? value.sourceRowLimit
|
|
233
|
-
: undefined,
|
|
234
|
-
campaignOfferId: stringValue(value.campaignOfferId),
|
|
235
|
-
provider: stringValue(value.provider),
|
|
236
|
-
allowDifferentSourceLeadList: typeof value.allowDifferentSourceLeadList === "boolean"
|
|
237
|
-
? value.allowDifferentSourceLeadList
|
|
238
|
-
: undefined,
|
|
239
196
|
targetPreparedMessages: typeof value.targetPreparedMessages === "number"
|
|
240
197
|
? value.targetPreparedMessages
|
|
241
198
|
: undefined,
|
|
@@ -262,10 +219,6 @@ function sanitizePacketIds(value) {
|
|
|
262
219
|
campaignId: stringValue(value.campaignId),
|
|
263
220
|
tableId: stringValue(value.tableId),
|
|
264
221
|
columnId: stringValue(value.columnId) ?? null,
|
|
265
|
-
sourceLeadListId: stringValue(value.sourceLeadListId) ?? null,
|
|
266
|
-
leadSourceProvider: stringValue(value.leadSourceProvider) ?? null,
|
|
267
|
-
sourceFingerprint: stringValue(value.sourceFingerprint) ?? null,
|
|
268
|
-
activeJobId: stringValue(value.activeJobId) ?? null,
|
|
269
222
|
};
|
|
270
223
|
}
|
|
271
224
|
function sanitizeStructuredAction(action, selectedBySender, mode, rank) {
|
|
@@ -288,7 +241,6 @@ function sanitizeStructuredAction(action, selectedBySender, mode, rank) {
|
|
|
288
241
|
return {
|
|
289
242
|
rank,
|
|
290
243
|
type: action.type,
|
|
291
|
-
actionType: allowedActionType(action.actionType),
|
|
292
244
|
toolName: stringValue(action.toolName) ?? null,
|
|
293
245
|
sideEffectClass: stringValue(action.sideEffectClass),
|
|
294
246
|
ids,
|
|
@@ -386,9 +338,6 @@ function sanitizeSourcePlan(value) {
|
|
|
386
338
|
reason: stringValue(value.reason),
|
|
387
339
|
campaignId: stringValue(value.campaignId),
|
|
388
340
|
tableId: stringValue(value.tableId),
|
|
389
|
-
sourceLeadListId: stringValue(value.sourceLeadListId) ?? null,
|
|
390
|
-
leadSourceProvider: stringValue(value.leadSourceProvider) ?? null,
|
|
391
|
-
sourceFingerprint: stringValue(value.sourceFingerprint) ?? null,
|
|
392
341
|
remainingRowsNeeded: typeof value.remainingRowsNeeded === "number"
|
|
393
342
|
? value.remainingRowsNeeded
|
|
394
343
|
: undefined,
|
|
@@ -637,16 +586,14 @@ function sanitizeRefillTargetPlanResult(result) {
|
|
|
637
586
|
const eligibleSenderLedger = sanitizeEligibleSenderLedger(target.eligibleSenderLedger, selectedBySender);
|
|
638
587
|
const senderRefillPlans = sanitizeStructuredSenderPlans(target.senderRefillPlans, selectedBySender);
|
|
639
588
|
const globalActionQueue = buildSanitizedGlobalActionQueue(senderRefillPlans);
|
|
640
|
-
const
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
: hasTerminalNoActionBlocker
|
|
649
|
-
? "blocked"
|
|
589
|
+
const status = blockers.some((blocker) => ["sender_disconnected", "sender_sales_nav_disconnected"].includes(String(blocker.code)))
|
|
590
|
+
? "blocked"
|
|
591
|
+
: remainingProjectedGap === 0
|
|
592
|
+
? "complete"
|
|
593
|
+
: grossTarget <= 0
|
|
594
|
+
? "blocked"
|
|
595
|
+
: remainingReadyOrProjectedGap === 0
|
|
596
|
+
? "awaiting_scheduler_after_ready_buffer"
|
|
650
597
|
: "needs_refill";
|
|
651
598
|
return {
|
|
652
599
|
...result,
|
package/dist/tools/registry.d.ts
CHANGED
|
@@ -584,6 +584,89 @@ export declare const allTools: ({
|
|
|
584
584
|
required: string[];
|
|
585
585
|
additionalProperties: boolean;
|
|
586
586
|
};
|
|
587
|
+
} | {
|
|
588
|
+
name: string;
|
|
589
|
+
description: string;
|
|
590
|
+
inputSchema: {
|
|
591
|
+
type: string;
|
|
592
|
+
properties: {
|
|
593
|
+
campaignId: {
|
|
594
|
+
type: string;
|
|
595
|
+
description: string;
|
|
596
|
+
};
|
|
597
|
+
tableId: {
|
|
598
|
+
type: string;
|
|
599
|
+
};
|
|
600
|
+
targetPreparedMessages: {
|
|
601
|
+
type: string;
|
|
602
|
+
minimum: number;
|
|
603
|
+
maximum: number;
|
|
604
|
+
};
|
|
605
|
+
maxRowsToCheck: {
|
|
606
|
+
type: string;
|
|
607
|
+
minimum: number;
|
|
608
|
+
maximum: number;
|
|
609
|
+
description: string;
|
|
610
|
+
};
|
|
611
|
+
batchSize: {
|
|
612
|
+
type: string;
|
|
613
|
+
minimum: number;
|
|
614
|
+
maximum: number;
|
|
615
|
+
description: string;
|
|
616
|
+
};
|
|
617
|
+
maxBatchRows: {
|
|
618
|
+
type: string;
|
|
619
|
+
minimum: number;
|
|
620
|
+
maximum: number;
|
|
621
|
+
description: string;
|
|
622
|
+
};
|
|
623
|
+
approvalMode: {
|
|
624
|
+
type: string;
|
|
625
|
+
enum: string[];
|
|
626
|
+
description: string;
|
|
627
|
+
};
|
|
628
|
+
autoContinue: {
|
|
629
|
+
type: string;
|
|
630
|
+
};
|
|
631
|
+
disableLowPassRateStop: {
|
|
632
|
+
type: string;
|
|
633
|
+
description: string;
|
|
634
|
+
};
|
|
635
|
+
rowSelector: {
|
|
636
|
+
type: string;
|
|
637
|
+
description: string;
|
|
638
|
+
properties: {
|
|
639
|
+
type: {
|
|
640
|
+
type: string;
|
|
641
|
+
enum: string[];
|
|
642
|
+
};
|
|
643
|
+
basisHash: {
|
|
644
|
+
type: string;
|
|
645
|
+
};
|
|
646
|
+
rowIds: {
|
|
647
|
+
type: string;
|
|
648
|
+
items: {
|
|
649
|
+
type: string;
|
|
650
|
+
};
|
|
651
|
+
};
|
|
652
|
+
limit: {
|
|
653
|
+
type: string;
|
|
654
|
+
minimum: number;
|
|
655
|
+
maximum: number;
|
|
656
|
+
};
|
|
657
|
+
};
|
|
658
|
+
required: string[];
|
|
659
|
+
additionalProperties: boolean;
|
|
660
|
+
};
|
|
661
|
+
workspaceId: {
|
|
662
|
+
type: string;
|
|
663
|
+
description: string;
|
|
664
|
+
};
|
|
665
|
+
jobId?: undefined;
|
|
666
|
+
};
|
|
667
|
+
required: string[];
|
|
668
|
+
additionalProperties: boolean;
|
|
669
|
+
};
|
|
587
670
|
} | {
|
|
588
671
|
name: string;
|
|
589
672
|
description: string;
|
|
@@ -609,11 +692,9 @@ export declare const allTools: ({
|
|
|
609
692
|
batchSize?: undefined;
|
|
610
693
|
maxBatchRows?: undefined;
|
|
611
694
|
approvalMode?: undefined;
|
|
612
|
-
rowSelector?: undefined;
|
|
613
695
|
autoContinue?: undefined;
|
|
614
|
-
senderId?: undefined;
|
|
615
|
-
actionType?: undefined;
|
|
616
696
|
disableLowPassRateStop?: undefined;
|
|
697
|
+
rowSelector?: undefined;
|
|
617
698
|
};
|
|
618
699
|
additionalProperties: boolean;
|
|
619
700
|
required?: undefined;
|
|
@@ -3050,8 +3131,6 @@ export declare const allTools: ({
|
|
|
3050
3131
|
keepInSync?: undefined;
|
|
3051
3132
|
jobId?: undefined;
|
|
3052
3133
|
reviewBatchLimit?: undefined;
|
|
3053
|
-
sourceRowIds?: undefined;
|
|
3054
|
-
sourceRowLimit?: undefined;
|
|
3055
3134
|
allowPartialSourceList?: undefined;
|
|
3056
3135
|
includeRawImportResult?: undefined;
|
|
3057
3136
|
selections?: undefined;
|
|
@@ -3246,8 +3325,6 @@ export declare const allTools: ({
|
|
|
3246
3325
|
keepInSync?: undefined;
|
|
3247
3326
|
jobId?: undefined;
|
|
3248
3327
|
reviewBatchLimit?: undefined;
|
|
3249
|
-
sourceRowIds?: undefined;
|
|
3250
|
-
sourceRowLimit?: undefined;
|
|
3251
3328
|
allowPartialSourceList?: undefined;
|
|
3252
3329
|
includeRawImportResult?: undefined;
|
|
3253
3330
|
selections?: undefined;
|
|
@@ -3341,8 +3418,6 @@ export declare const allTools: ({
|
|
|
3341
3418
|
keepInSync?: undefined;
|
|
3342
3419
|
jobId?: undefined;
|
|
3343
3420
|
reviewBatchLimit?: undefined;
|
|
3344
|
-
sourceRowIds?: undefined;
|
|
3345
|
-
sourceRowLimit?: undefined;
|
|
3346
3421
|
allowPartialSourceList?: undefined;
|
|
3347
3422
|
includeRawImportResult?: undefined;
|
|
3348
3423
|
selections?: undefined;
|
|
@@ -3508,8 +3583,6 @@ export declare const allTools: ({
|
|
|
3508
3583
|
keepInSync?: undefined;
|
|
3509
3584
|
jobId?: undefined;
|
|
3510
3585
|
reviewBatchLimit?: undefined;
|
|
3511
|
-
sourceRowIds?: undefined;
|
|
3512
|
-
sourceRowLimit?: undefined;
|
|
3513
3586
|
allowPartialSourceList?: undefined;
|
|
3514
3587
|
includeRawImportResult?: undefined;
|
|
3515
3588
|
selections?: undefined;
|
|
@@ -3617,8 +3690,6 @@ export declare const allTools: ({
|
|
|
3617
3690
|
keepInSync?: undefined;
|
|
3618
3691
|
jobId?: undefined;
|
|
3619
3692
|
reviewBatchLimit?: undefined;
|
|
3620
|
-
sourceRowIds?: undefined;
|
|
3621
|
-
sourceRowLimit?: undefined;
|
|
3622
3693
|
allowPartialSourceList?: undefined;
|
|
3623
3694
|
includeRawImportResult?: undefined;
|
|
3624
3695
|
selections?: undefined;
|
|
@@ -3735,8 +3806,6 @@ export declare const allTools: ({
|
|
|
3735
3806
|
keepInSync?: undefined;
|
|
3736
3807
|
jobId?: undefined;
|
|
3737
3808
|
reviewBatchLimit?: undefined;
|
|
3738
|
-
sourceRowIds?: undefined;
|
|
3739
|
-
sourceRowLimit?: undefined;
|
|
3740
3809
|
allowPartialSourceList?: undefined;
|
|
3741
3810
|
includeRawImportResult?: undefined;
|
|
3742
3811
|
selections?: undefined;
|
|
@@ -3842,8 +3911,6 @@ export declare const allTools: ({
|
|
|
3842
3911
|
keepInSync?: undefined;
|
|
3843
3912
|
jobId?: undefined;
|
|
3844
3913
|
reviewBatchLimit?: undefined;
|
|
3845
|
-
sourceRowIds?: undefined;
|
|
3846
|
-
sourceRowLimit?: undefined;
|
|
3847
3914
|
allowPartialSourceList?: undefined;
|
|
3848
3915
|
includeRawImportResult?: undefined;
|
|
3849
3916
|
selections?: undefined;
|
|
@@ -3954,8 +4021,6 @@ export declare const allTools: ({
|
|
|
3954
4021
|
keepInSync?: undefined;
|
|
3955
4022
|
jobId?: undefined;
|
|
3956
4023
|
reviewBatchLimit?: undefined;
|
|
3957
|
-
sourceRowIds?: undefined;
|
|
3958
|
-
sourceRowLimit?: undefined;
|
|
3959
4024
|
allowPartialSourceList?: undefined;
|
|
3960
4025
|
includeRawImportResult?: undefined;
|
|
3961
4026
|
selections?: undefined;
|
|
@@ -4054,8 +4119,6 @@ export declare const allTools: ({
|
|
|
4054
4119
|
keepInSync?: undefined;
|
|
4055
4120
|
jobId?: undefined;
|
|
4056
4121
|
reviewBatchLimit?: undefined;
|
|
4057
|
-
sourceRowIds?: undefined;
|
|
4058
|
-
sourceRowLimit?: undefined;
|
|
4059
4122
|
allowPartialSourceList?: undefined;
|
|
4060
4123
|
includeRawImportResult?: undefined;
|
|
4061
4124
|
selections?: undefined;
|
|
@@ -4946,8 +5009,6 @@ export declare const allTools: ({
|
|
|
4946
5009
|
keepInSync?: undefined;
|
|
4947
5010
|
jobId?: undefined;
|
|
4948
5011
|
reviewBatchLimit?: undefined;
|
|
4949
|
-
sourceRowIds?: undefined;
|
|
4950
|
-
sourceRowLimit?: undefined;
|
|
4951
5012
|
allowPartialSourceList?: undefined;
|
|
4952
5013
|
includeRawImportResult?: undefined;
|
|
4953
5014
|
selections?: undefined;
|
|
@@ -5055,8 +5116,6 @@ export declare const allTools: ({
|
|
|
5055
5116
|
keepInSync?: undefined;
|
|
5056
5117
|
jobId?: undefined;
|
|
5057
5118
|
reviewBatchLimit?: undefined;
|
|
5058
|
-
sourceRowIds?: undefined;
|
|
5059
|
-
sourceRowLimit?: undefined;
|
|
5060
5119
|
allowPartialSourceList?: undefined;
|
|
5061
5120
|
includeRawImportResult?: undefined;
|
|
5062
5121
|
selections?: undefined;
|
|
@@ -6102,8 +6161,6 @@ export declare const allTools: ({
|
|
|
6102
6161
|
keepInSync?: undefined;
|
|
6103
6162
|
jobId?: undefined;
|
|
6104
6163
|
reviewBatchLimit?: undefined;
|
|
6105
|
-
sourceRowIds?: undefined;
|
|
6106
|
-
sourceRowLimit?: undefined;
|
|
6107
6164
|
allowPartialSourceList?: undefined;
|
|
6108
6165
|
includeRawImportResult?: undefined;
|
|
6109
6166
|
selections?: undefined;
|
|
@@ -6258,8 +6315,6 @@ export declare const allTools: ({
|
|
|
6258
6315
|
keepInSync?: undefined;
|
|
6259
6316
|
jobId?: undefined;
|
|
6260
6317
|
reviewBatchLimit?: undefined;
|
|
6261
|
-
sourceRowIds?: undefined;
|
|
6262
|
-
sourceRowLimit?: undefined;
|
|
6263
6318
|
allowPartialSourceList?: undefined;
|
|
6264
6319
|
includeRawImportResult?: undefined;
|
|
6265
6320
|
selections?: undefined;
|
|
@@ -6401,8 +6456,6 @@ export declare const allTools: ({
|
|
|
6401
6456
|
keepInSync?: undefined;
|
|
6402
6457
|
jobId?: undefined;
|
|
6403
6458
|
reviewBatchLimit?: undefined;
|
|
6404
|
-
sourceRowIds?: undefined;
|
|
6405
|
-
sourceRowLimit?: undefined;
|
|
6406
6459
|
allowPartialSourceList?: undefined;
|
|
6407
6460
|
includeRawImportResult?: undefined;
|
|
6408
6461
|
selections?: undefined;
|
|
@@ -6499,8 +6552,6 @@ export declare const allTools: ({
|
|
|
6499
6552
|
keepInSync?: undefined;
|
|
6500
6553
|
jobId?: undefined;
|
|
6501
6554
|
reviewBatchLimit?: undefined;
|
|
6502
|
-
sourceRowIds?: undefined;
|
|
6503
|
-
sourceRowLimit?: undefined;
|
|
6504
6555
|
allowPartialSourceList?: undefined;
|
|
6505
6556
|
includeRawImportResult?: undefined;
|
|
6506
6557
|
selections?: undefined;
|
|
@@ -6547,17 +6598,6 @@ export declare const allTools: ({
|
|
|
6547
6598
|
type: string;
|
|
6548
6599
|
description: string;
|
|
6549
6600
|
};
|
|
6550
|
-
sourceRowIds: {
|
|
6551
|
-
type: string;
|
|
6552
|
-
items: {
|
|
6553
|
-
type: string;
|
|
6554
|
-
};
|
|
6555
|
-
description: string;
|
|
6556
|
-
};
|
|
6557
|
-
sourceRowLimit: {
|
|
6558
|
-
type: string;
|
|
6559
|
-
description: string;
|
|
6560
|
-
};
|
|
6561
6601
|
allowPartialSourceList: {
|
|
6562
6602
|
type: string;
|
|
6563
6603
|
description: string;
|
|
@@ -6767,8 +6807,6 @@ export declare const allTools: ({
|
|
|
6767
6807
|
keepInSync?: undefined;
|
|
6768
6808
|
jobId?: undefined;
|
|
6769
6809
|
reviewBatchLimit?: undefined;
|
|
6770
|
-
sourceRowIds?: undefined;
|
|
6771
|
-
sourceRowLimit?: undefined;
|
|
6772
6810
|
allowPartialSourceList?: undefined;
|
|
6773
6811
|
includeRawImportResult?: undefined;
|
|
6774
6812
|
};
|
|
@@ -6866,8 +6904,6 @@ export declare const allTools: ({
|
|
|
6866
6904
|
keepInSync?: undefined;
|
|
6867
6905
|
jobId?: undefined;
|
|
6868
6906
|
reviewBatchLimit?: undefined;
|
|
6869
|
-
sourceRowIds?: undefined;
|
|
6870
|
-
sourceRowLimit?: undefined;
|
|
6871
6907
|
allowPartialSourceList?: undefined;
|
|
6872
6908
|
includeRawImportResult?: undefined;
|
|
6873
6909
|
selections?: undefined;
|
package/package.json
CHANGED
|
@@ -92,16 +92,10 @@ When the host can call typed MCP tools, start with:
|
|
|
92
92
|
refill_sends({ yolo?: boolean, executionMode?: "manual" | "scheduled" | "yolo", requireWorkspace?: boolean, workspaceId?: string, senders?: string[], senderIds?: string[], senderNames?: string[], horizonSendDays?: number, untilDate?: "YYYY-MM-DD", targetDate?: "YYYY-MM-DD" })
|
|
93
93
|
```
|
|
94
94
|
|
|
95
|
-
That command helper normalizes arguments and returns the execution
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
existing-row message preparation, same-source row copy, and read-only wait
|
|
100
|
-
rereads. It does not run unbounded approval, lower
|
|
101
|
-
paid-InMail thresholds, switch source families, create campaigns, launch, send,
|
|
102
|
-
or write scheduler rows. Continue with the workflow below for route selection,
|
|
103
|
-
state rereads, approval gating, source import, preparation, and bounded
|
|
104
|
-
approval.
|
|
95
|
+
That command helper only normalizes arguments and returns the execution
|
|
96
|
+
contract. It does not mutate. Continue with the workflow below for route
|
|
97
|
+
selection, state rereads, approval gating, source import, preparation, and
|
|
98
|
+
bounded approval.
|
|
105
99
|
|
|
106
100
|
## Workspace Contract
|
|
107
101
|
|
|
@@ -205,20 +199,12 @@ Structured planner packet:
|
|
|
205
199
|
- `manualAlternates` are not yolo actions. Threshold lowering and campaign
|
|
206
200
|
creation are manual continuations only.
|
|
207
201
|
|
|
208
|
-
Refill action ladder: approve generated rows only when an explicit bounded
|
|
209
|
-
approval gate exists, process all existing same-campaign unenriched/unprepared
|
|
210
|
-
rows in bounded batches before any source work, then copy bounded net-new rows
|
|
211
|
-
from the selected source (`selectedLeadListId`, provider, and source
|
|
212
|
-
fingerprint preserved), then use provider-aligned source-more. A new source or
|
|
213
|
-
provider switch changes the reply-rate baseline and is a manual alternate, not a
|
|
214
|
-
`--yolo` side effect.
|
|
215
|
-
|
|
216
202
|
Run-local paid-credit guard: in `--yolo`, the `refill_sends` MCP command
|
|
217
203
|
automatically maintains a `refreshedPaidInmailSenderIds` set for the current
|
|
218
204
|
command call. If its first target plan has stale/missing paid-InMail credit
|
|
219
205
|
facts, it refreshes each selected sender at most once, reruns
|
|
220
206
|
`get_refill_target_plan`, and returns the post-refresh `targetPlan` before
|
|
221
|
-
choosing the next prep/
|
|
207
|
+
choosing the next prep/approval/start action. If fresh facts are still below
|
|
222
208
|
threshold, below-threshold paid-InMail facts fall back to an existing connection
|
|
223
209
|
lane, the same Sales Nav cascade campaign's connection branch, or a manual
|
|
224
210
|
continuation.
|
|
@@ -252,7 +238,10 @@ next action in `--yolo`. Do not present paid-credit refresh as the next operator
|
|
|
252
238
|
action after `refill_sends` returns `autoPaidInmailRefresh` and the
|
|
253
239
|
post-refresh `targetPlan`. Trust `refill_sends.autoPaidInmailRefresh`: it should
|
|
254
240
|
show the exact sender ids refreshed once, sender-credit-cache write receipts,
|
|
255
|
-
and a returned post-refresh `targetPlan`.
|
|
241
|
+
and a returned post-refresh `targetPlan`. Also inspect
|
|
242
|
+
`refill_sends.yoloExecution`: if it applied a supported yolo action, continue
|
|
243
|
+
from the final returned `targetPlan`; otherwise continue from the post-refresh
|
|
244
|
+
packet or `targetPlanBeforeYoloAction`.
|
|
256
245
|
If paid InMail is below threshold after the fresh credit read, report the exact
|
|
257
246
|
campaign/table/column threshold action or same-campaign connection fallback;
|
|
258
247
|
`--yolo` does not lower paid-InMail thresholds or create campaigns.
|
|
@@ -307,7 +296,7 @@ they change `stateRevision`, not `targetShapeRevision`, and do not require a
|
|
|
307
296
|
second approval.
|
|
308
297
|
|
|
309
298
|
In `--yolo`, continue as far as the rendered packet safely allows. After each
|
|
310
|
-
apply/prep/
|
|
299
|
+
apply/prep/start result, reread state, settle processing when needed, and move to
|
|
311
300
|
the next selected sender or start-eligible same-packet campaign instead of
|
|
312
301
|
stopping after the first partial result. If no in-packet safe action remains,
|
|
313
302
|
return concrete continuation options with campaign names, exact ids, which option
|
|
@@ -321,7 +310,7 @@ selected sender: selected send days, gross capacity, actual sent cells, future
|
|
|
321
310
|
scheduler-owned scheduled cells with non-null `scheduledFor`, projected count,
|
|
322
311
|
ready-to-schedule buffer, remaining projected gap, paid-InMail feasibility,
|
|
323
312
|
`targetShapeRevision`, `stateRevision`, and the next MCP primitive that can
|
|
324
|
-
reduce the gap. After every apply/prep/
|
|
313
|
+
reduce the gap. After every apply/prep/start result, wait for processing, reread
|
|
325
314
|
the target plan/refill state, recompute the ledger, then keep applying safe
|
|
326
315
|
bounded actions until projected coverage fills the target window or a concrete
|
|
327
316
|
non-scheduler blocker is proven.
|
|
@@ -120,19 +120,12 @@ in-progress wait state, not a reason to mark the goal complete or blocked.
|
|
|
120
120
|
- `nextActions[0]` is the current sender's smallest safe primitive.
|
|
121
121
|
- `manualAlternates` are not yolo actions. Threshold lowering and campaign
|
|
122
122
|
creation are manual continuations only.
|
|
123
|
-
Refill action ladder: approve generated rows only when an explicit bounded
|
|
124
|
-
approval gate exists, process all existing same-campaign
|
|
125
|
-
unenriched/unprepared rows in bounded batches before any source work, then
|
|
126
|
-
copy bounded net-new rows from the selected source (`selectedLeadListId`,
|
|
127
|
-
provider, and source fingerprint preserved), then use provider-aligned
|
|
128
|
-
source-more. A new source or provider switch changes the reply-rate baseline
|
|
129
|
-
and is a manual alternate, not a `--yolo` side effect.
|
|
130
123
|
Run-local paid-credit guard: in `--yolo`, the `refill_sends` MCP command
|
|
131
124
|
automatically maintains a `refreshedPaidInmailSenderIds` set for the current
|
|
132
125
|
command call. If its first target plan has stale/missing paid-InMail credit
|
|
133
126
|
facts, it refreshes each selected sender at most once, reruns
|
|
134
127
|
`get_refill_target_plan`, and returns the post-refresh `targetPlan` before
|
|
135
|
-
choosing the next prep/
|
|
128
|
+
choosing the next prep/approval/start action. If fresh facts are still below
|
|
136
129
|
threshold, below-threshold paid-InMail facts fall back to an existing
|
|
137
130
|
connection lane, the same Sales Nav cascade campaign's connection branch, or
|
|
138
131
|
a manual continuation.
|
|
@@ -168,8 +161,10 @@ in-progress wait state, not a reason to mark the goal complete or blocked.
|
|
|
168
161
|
operator action after `refill_sends` returns `autoPaidInmailRefresh` and the
|
|
169
162
|
post-refresh `targetPlan`. Trust `refill_sends.autoPaidInmailRefresh`: it
|
|
170
163
|
should show the exact sender ids refreshed once, sender-credit-cache write
|
|
171
|
-
receipts, and a returned post-refresh `targetPlan`.
|
|
172
|
-
|
|
164
|
+
receipts, and a returned post-refresh `targetPlan`. Also inspect
|
|
165
|
+
`refill_sends.yoloExecution`: if it applied a supported yolo action,
|
|
166
|
+
continue from the final returned `targetPlan`; otherwise continue from the
|
|
167
|
+
post-refresh packet or `targetPlanBeforeYoloAction`. If paid InMail is below threshold after the fresh credit read, report
|
|
173
168
|
the exact campaign/table/column threshold action or same-campaign
|
|
174
169
|
connection fallback; `--yolo` does not lower paid-InMail thresholds or create campaigns.
|
|
175
170
|
2. Call `resolve_campaign_fill_route`. Use `intent:"plain"` for generic
|
|
@@ -571,7 +566,7 @@ same refill request, do not ask the `Accept` / `Decline` question. Instead:
|
|
|
571
566
|
caps/dates, approval mode, blockers, and side-effect class still match the
|
|
572
567
|
packet;
|
|
573
568
|
4. execute only the exact packet;
|
|
574
|
-
5. after each terminal credit-refresh/apply/prep/
|
|
569
|
+
5. after each terminal credit-refresh/apply/prep/start result, rerun
|
|
575
570
|
`get_refill_target_plan`, reread state, settle processing when needed,
|
|
576
571
|
recompute the target-window saturation ledger, and continue with the next smallest
|
|
577
572
|
safe action inside the same bounded packet until every selected sender is
|