@sellable/mcp 0.1.480 → 0.1.482

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.
@@ -13,6 +13,10 @@ type StartPrepareMessagesInput = PrepareMessagesBaseInput & {
13
13
  approvalMode?: ApprovalMode;
14
14
  autoContinue?: boolean;
15
15
  disableLowPassRateStop?: boolean;
16
+ requestHash?: string;
17
+ requestSource?: string;
18
+ senderId?: string;
19
+ actionType?: string;
16
20
  };
17
21
  type StatusPrepareMessagesInput = PrepareMessagesBaseInput;
18
22
  type CancelPrepareMessagesInput = PrepareMessagesBaseInput;
@@ -60,6 +64,15 @@ export declare const campaignMessagePreparationToolDefinitions: ({
60
64
  autoContinue: {
61
65
  type: string;
62
66
  };
67
+ senderId: {
68
+ type: string;
69
+ description: string;
70
+ };
71
+ actionType: {
72
+ type: string;
73
+ enum: string[];
74
+ description: string;
75
+ };
63
76
  disableLowPassRateStop: {
64
77
  type: string;
65
78
  description: string;
@@ -91,6 +104,8 @@ export declare const campaignMessagePreparationToolDefinitions: ({
91
104
  maxBatchRows?: undefined;
92
105
  approvalMode?: undefined;
93
106
  autoContinue?: undefined;
107
+ senderId?: undefined;
108
+ actionType?: undefined;
94
109
  disableLowPassRateStop?: undefined;
95
110
  };
96
111
  additionalProperties: boolean;
@@ -40,6 +40,21 @@ export const campaignMessagePreparationToolDefinitions = [
40
40
  description: "Defaults to mark_ready. Use approve only when the user explicitly asks to flip Approved cells. Approval is not scheduling; it only makes the bounded cohort eligible for downstream scheduler ownership.",
41
41
  },
42
42
  autoContinue: { type: "boolean" },
43
+ senderId: {
44
+ type: "string",
45
+ description: "Optional refill-scope sender id. Used with actionType by refill_sends so preparation skips rows already attempted by other send actions.",
46
+ },
47
+ actionType: {
48
+ type: "string",
49
+ enum: [
50
+ "send_invite",
51
+ "send_dm",
52
+ "send_inmail_open",
53
+ "send_inmail_closed",
54
+ "react_and_comment",
55
+ ],
56
+ description: "Optional refill-scope send action. InMail scopes treat open and paid InMail as one contact-reuse family.",
57
+ },
43
58
  disableLowPassRateStop: {
44
59
  type: "boolean",
45
60
  description: "Operator override for explicit fill/exhaust requests. When true, keep processing eligible rows even if the enriched sample pass rate is low. Still bounded by targetPreparedMessages and maxRowsToCheck.",
@@ -88,6 +103,10 @@ export function startPrepareCampaignMessages(input) {
88
103
  approvalMode: input.approvalMode,
89
104
  autoContinue: input.autoContinue,
90
105
  disableLowPassRateStop: input.disableLowPassRateStop,
106
+ requestHash: input.requestHash,
107
+ requestSource: input.requestSource,
108
+ senderId: input.senderId,
109
+ actionType: input.actionType,
91
110
  });
92
111
  }
93
112
  export function getPrepareCampaignMessagesStatus(input) {
@@ -404,6 +404,42 @@ function actionSourceLeadListId(action) {
404
404
  stringValue(ids.sourceLeadListId) ??
405
405
  stringValue(action.sourceLeadListId));
406
406
  }
407
+ function actionSenderId(action) {
408
+ const ids = actionIds(action);
409
+ const toolInput = actionToolInput(action);
410
+ return (stringValue(toolInput.senderId) ??
411
+ stringValue(ids.senderId) ??
412
+ stringValue(action.senderId));
413
+ }
414
+ function actionActionType(action) {
415
+ const ids = actionIds(action);
416
+ const toolInput = actionToolInput(action);
417
+ return (stringValue(toolInput.actionType) ??
418
+ stringValue(toolInput.selectedLane) ??
419
+ stringValue(ids.actionType) ??
420
+ stringValue(action.actionType) ??
421
+ stringValue(action.selectedLane));
422
+ }
423
+ function actionSourceFingerprint(action) {
424
+ const ids = actionIds(action);
425
+ const toolInput = actionToolInput(action);
426
+ return (stringValue(toolInput.sourceFingerprint) ??
427
+ stringValue(ids.sourceFingerprint) ??
428
+ stringValue(action.sourceFingerprint));
429
+ }
430
+ function refillPrepareRequestHash(params) {
431
+ return [
432
+ "refill_sends",
433
+ "prepare_messages",
434
+ params.campaignId,
435
+ params.tableId ?? "no-table",
436
+ actionSenderId(params.action) ?? "all-senders",
437
+ actionSourceLeadListId(params.action) ?? "no-source-list",
438
+ actionSourceFingerprint(params.action) ?? "no-source-fingerprint",
439
+ actionActionType(params.action) ?? "no-action-type",
440
+ params.approvalMode,
441
+ ].join(":");
442
+ }
407
443
  function boundedApprovalLimit(action) {
408
444
  const toolInput = actionToolInput(action);
409
445
  const rowSelector = recordValue(toolInput.rowSelector);
@@ -484,8 +520,19 @@ async function executeOneYoloPrimitive(action) {
484
520
  campaignId,
485
521
  tableId,
486
522
  targetPreparedMessages,
523
+ maxRowsToCheck: numberValue(toolInput.maxRowsToCheck) ?? 300,
487
524
  approvalMode,
488
525
  autoContinue: true,
526
+ disableLowPassRateStop: true,
527
+ senderId: actionSenderId(action) ?? undefined,
528
+ actionType: actionActionType(action) ?? undefined,
529
+ requestHash: refillPrepareRequestHash({
530
+ action,
531
+ campaignId,
532
+ tableId,
533
+ approvalMode,
534
+ }),
535
+ requestSource: "refill_sends",
489
536
  });
490
537
  return { status: "executed_and_reread", result };
491
538
  }
@@ -580,59 +580,6 @@ export declare const allTools: ({
580
580
  required: string[];
581
581
  additionalProperties: boolean;
582
582
  };
583
- } | {
584
- name: string;
585
- description: string;
586
- inputSchema: {
587
- type: string;
588
- properties: {
589
- campaignId: {
590
- type: string;
591
- description: string;
592
- };
593
- tableId: {
594
- type: string;
595
- };
596
- targetPreparedMessages: {
597
- type: string;
598
- minimum: number;
599
- maximum: number;
600
- };
601
- maxRowsToCheck: {
602
- type: string;
603
- minimum: number;
604
- maximum: number;
605
- description: string;
606
- };
607
- batchSize: {
608
- type: string;
609
- minimum: number;
610
- maximum: number;
611
- description: string;
612
- };
613
- maxBatchRows: {
614
- type: string;
615
- minimum: number;
616
- maximum: number;
617
- description: string;
618
- };
619
- approvalMode: {
620
- type: string;
621
- enum: string[];
622
- description: string;
623
- };
624
- autoContinue: {
625
- type: string;
626
- };
627
- disableLowPassRateStop: {
628
- type: string;
629
- description: string;
630
- };
631
- jobId?: undefined;
632
- };
633
- required: string[];
634
- additionalProperties: boolean;
635
- };
636
583
  } | {
637
584
  name: string;
638
585
  description: string;
@@ -655,6 +602,8 @@ export declare const allTools: ({
655
602
  maxBatchRows?: undefined;
656
603
  approvalMode?: undefined;
657
604
  autoContinue?: undefined;
605
+ senderId?: undefined;
606
+ actionType?: undefined;
658
607
  disableLowPassRateStop?: undefined;
659
608
  };
660
609
  additionalProperties: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/mcp",
3
- "version": "0.1.480",
3
+ "version": "0.1.482",
4
4
  "type": "module",
5
5
  "description": "Sellable MCP server for Claude Code and Codex campaign workflows",
6
6
  "main": "dist/index.js",