@sellable/mcp 0.1.335 → 0.1.336

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.
@@ -474,83 +474,6 @@ export declare const allTools: ({
474
474
  required: string[];
475
475
  additionalProperties: boolean;
476
476
  };
477
- } | {
478
- name: string;
479
- description: string;
480
- inputSchema: {
481
- type: string;
482
- properties: {
483
- action: {
484
- type: string;
485
- enum: string[];
486
- description: string;
487
- };
488
- campaignId: {
489
- type: string;
490
- description: string;
491
- };
492
- tableId: {
493
- type: string;
494
- description: string;
495
- };
496
- stateRevision: {
497
- type: string;
498
- description: string;
499
- };
500
- excludedPostIds: {
501
- type: string;
502
- items: {
503
- type: string;
504
- };
505
- maxItems: number;
506
- description: string;
507
- };
508
- excludedPostUrls: {
509
- type: string;
510
- items: {
511
- type: string;
512
- };
513
- maxItems: number;
514
- description: string;
515
- };
516
- excludedAuthorProfileUrls: {
517
- type: string;
518
- items: {
519
- type: string;
520
- };
521
- maxItems: number;
522
- description: string;
523
- };
524
- excludedAuthorNames: {
525
- type: string;
526
- items: {
527
- type: string;
528
- };
529
- maxItems: number;
530
- description: string;
531
- };
532
- targetPreparedMessages: {
533
- type: string;
534
- minimum: number;
535
- maximum: number;
536
- description: string;
537
- };
538
- maxRowsToCheck: {
539
- type: string;
540
- minimum: number;
541
- maximum: number;
542
- description: string;
543
- };
544
- batchSize: {
545
- type: string;
546
- minimum: number;
547
- maximum: number;
548
- description: string;
549
- };
550
- };
551
- required: string[];
552
- additionalProperties: boolean;
553
- };
554
477
  } | {
555
478
  name: string;
556
479
  description: string;
@@ -581,12 +504,6 @@ export declare const allTools: ({
581
504
  maximum: number;
582
505
  description: string;
583
506
  };
584
- maxBatchRows: {
585
- type: string;
586
- minimum: number;
587
- maximum: number;
588
- description: string;
589
- };
590
507
  approvalMode: {
591
508
  type: string;
592
509
  enum: string[];
@@ -623,7 +540,6 @@ export declare const allTools: ({
623
540
  targetPreparedMessages?: undefined;
624
541
  maxRowsToCheck?: undefined;
625
542
  batchSize?: undefined;
626
- maxBatchRows?: undefined;
627
543
  approvalMode?: undefined;
628
544
  autoContinue?: undefined;
629
545
  disableLowPassRateStop?: undefined;
@@ -690,6 +606,8 @@ export declare const allTools: ({
690
606
  templateRevision?: undefined;
691
607
  timeoutMs?: undefined;
692
608
  intervalMs?: undefined;
609
+ rowIds?: undefined;
610
+ enrichCellIds?: undefined;
693
611
  templateMarkdown?: undefined;
694
612
  approvedMessageTemplate?: undefined;
695
613
  };
@@ -745,6 +663,8 @@ export declare const allTools: ({
745
663
  templateRevision?: undefined;
746
664
  timeoutMs?: undefined;
747
665
  intervalMs?: undefined;
666
+ rowIds?: undefined;
667
+ enrichCellIds?: undefined;
748
668
  templateMarkdown?: undefined;
749
669
  approvedMessageTemplate?: undefined;
750
670
  };
@@ -804,6 +724,8 @@ export declare const allTools: ({
804
724
  templateRevision?: undefined;
805
725
  timeoutMs?: undefined;
806
726
  intervalMs?: undefined;
727
+ rowIds?: undefined;
728
+ enrichCellIds?: undefined;
807
729
  templateMarkdown?: undefined;
808
730
  approvedMessageTemplate?: undefined;
809
731
  };
@@ -843,12 +765,52 @@ export declare const allTools: ({
843
765
  limit?: undefined;
844
766
  forceRerun?: undefined;
845
767
  reason?: undefined;
768
+ rowIds?: undefined;
769
+ enrichCellIds?: undefined;
846
770
  templateMarkdown?: undefined;
847
771
  approvedMessageTemplate?: undefined;
848
772
  };
849
773
  additionalProperties: boolean;
850
774
  required?: undefined;
851
775
  };
776
+ } | {
777
+ name: string;
778
+ description: string;
779
+ inputSchema: {
780
+ type: string;
781
+ properties: {
782
+ tableId: {
783
+ type: string;
784
+ };
785
+ rowIds: {
786
+ type: string;
787
+ items: {
788
+ type: string;
789
+ };
790
+ };
791
+ enrichCellIds: {
792
+ type: string;
793
+ items: {
794
+ type: string;
795
+ };
796
+ };
797
+ campaignId?: undefined;
798
+ columnRole?: undefined;
799
+ rowSelector?: undefined;
800
+ limit?: undefined;
801
+ forceRerun?: undefined;
802
+ reason?: undefined;
803
+ minPassedCount?: undefined;
804
+ minGeneratedMessages?: undefined;
805
+ templateRevision?: undefined;
806
+ timeoutMs?: undefined;
807
+ intervalMs?: undefined;
808
+ templateMarkdown?: undefined;
809
+ approvedMessageTemplate?: undefined;
810
+ };
811
+ required: string[];
812
+ additionalProperties: boolean;
813
+ };
852
814
  } | {
853
815
  name: string;
854
816
  description: string;
@@ -899,6 +861,8 @@ export declare const allTools: ({
899
861
  templateRevision?: undefined;
900
862
  timeoutMs?: undefined;
901
863
  intervalMs?: undefined;
864
+ rowIds?: undefined;
865
+ enrichCellIds?: undefined;
902
866
  };
903
867
  required: string[];
904
868
  additionalProperties: boolean;
@@ -2,7 +2,6 @@ import { authToolDefinitions } from "./auth.js";
2
2
  import { blueprintCommitToolDefinitions } from "./blueprint-commit.js";
3
3
  import { bootstrapToolDefinitions } from "./bootstrap.js";
4
4
  import { campaignAbTestToolDefinitions } from "./campaign-ab-test.js";
5
- import { campaignHorizonFillToolDefinitions } from "./campaign-horizon-fill.js";
6
5
  import { campaignMessagePreparationToolDefinitions } from "./campaign-message-preparation.js";
7
6
  import { campaignProcessingToolDefinitions } from "./campaign-processing.js";
8
7
  import { campaignToolDefinitions } from "./campaigns.js";
@@ -43,7 +42,6 @@ import { workspaceToolDefinitions } from "./workspaces.js";
43
42
  export const allTools = [
44
43
  ...campaignToolDefinitions,
45
44
  ...campaignAbTestToolDefinitions,
46
- ...campaignHorizonFillToolDefinitions,
47
45
  ...campaignMessagePreparationToolDefinitions,
48
46
  ...campaignProcessingToolDefinitions,
49
47
  ...authToolDefinitions,
@@ -1,10 +1,6 @@
1
1
  export interface WorkflowTableListItem {
2
2
  id: string;
3
3
  name: string;
4
- workspaceId: string | null;
5
- status: string | null;
6
- campaignStatus: string | null;
7
- dashboardBucket: "active" | "archived";
8
4
  type: string | null;
9
5
  campaignOfferId: string | null;
10
6
  campaignBacked: boolean;
@@ -6,7 +6,7 @@ import { getApi } from "../api.js";
6
6
  export const tableToolDefinitions = [
7
7
  {
8
8
  name: "list_tables",
9
- description: "List all workflow tables in the active workspace. Returns metadata including workspaceId, workflow status, campaignStatus, dashboardBucket, whether each table is campaign-backed, and whether it has a sequence attached.\n\n" +
9
+ description: "List all workflow tables in the active workspace. Returns metadata including whether each table is campaign-backed and whether it has a sequence attached.\n\n" +
10
10
  "Unlike get_campaigns, this lists every WorkflowTable regardless of how it was created, including create_workflow_table, create_on_demand_table, and UI-created tables.",
11
11
  inputSchema: {
12
12
  type: "object",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/mcp",
3
- "version": "0.1.335",
3
+ "version": "0.1.336",
4
4
  "type": "module",
5
5
  "description": "Sellable MCP server for Claude Code and Codex campaign workflows",
6
6
  "main": "dist/index.js",
@@ -44,9 +44,9 @@ allowed-tools:
44
44
  - mcp__sellable__save_rubrics
45
45
  - mcp__sellable__get_campaign_table_schema
46
46
  - mcp__sellable__select_campaign_cells
47
+ - mcp__sellable__record_campaign_review_batch
47
48
  - mcp__sellable__queue_campaign_cells
48
49
  - mcp__sellable__wait_for_campaign_processing
49
- - mcp__sellable__fill_campaign_horizon
50
50
  - mcp__sellable__start_campaign_message_preparation
51
51
  - mcp__sellable__get_campaign_message_preparation_status
52
52
  - mcp__sellable__cancel_campaign_message_preparation
@@ -105,16 +105,15 @@ most one direct `enrich_with_prospeo` sample when row evidence is too thin.
105
105
  After filter approval, the browser should move to Filter Leads with
106
106
  `currentStep: "apply-icp-rubric"` and show template waiting/approval copy until
107
107
  the template is approved.
108
+ If the bounded filter run later returns `0/N` passes, do not immediately find
109
+ new leads. Load `references/sample-validation-loop.md`, run the zero-pass
110
+ rule-relaxability audit, then choose exactly one recovery: revise saved
111
+ rubrics, record a fresh same-source review batch, or change lead source. Change
112
+ source only when safe relaxation and same-source sampling would still fail or
113
+ would pass bad-fit rows.
108
114
  The default path stays the existing first campaign-table execution slice:
109
115
  review the normal `reviewBatchLimit:15`, approve reviewed draft rows, then move
110
116
  to Settings/sequence/final greenlight. Only call
111
- `fill_campaign_horizon` for explicit source-cleanup horizon-fill requests, such
112
- as "fill sends from Signal Discovery but not John Cutler posts." Run
113
- `fill_campaign_horizon({ action:"audit", ... })` first, then apply with the
114
- returned `stateRevision`. It imports/prepares at most 300 eligible non-excluded
115
- source rows in the first pass, caps prep batches at 100, skips existing rows
116
- from excluded post/author sources, and does not launch the campaign. If the
117
- user only asks for generic extra sends with no source cleanup, use
118
117
  `start_campaign_message_preparation` when the user explicitly asks for more
119
118
  prepared messages, a send count, or language like "fill up/load sends for these
120
119
  senders." Treat those requests as capacity-fill preparation: calculate the
@@ -128,9 +127,8 @@ count `checkedRows` as enriched rows; it is only the table cursor. Use
128
127
  messages", set `targetPreparedMessages:X`, omit `maxRowsToCheck`, and keep
129
128
  `approvalMode:"mark_ready"`. The backend calibrates on at least 100 actually
130
129
  enriched rows, estimates the row budget from observed rubric/pass yield, caps
131
- `maxRowsToCheck` at 300, then continues in batches capped at 100 newly checked
132
- rows. It will not pull another row batch while the current checked batch still
133
- has queueable or active cells. If the user says "approve X messages", use
130
+ `maxRowsToCheck` at 2500, then adapts later batches up to 250 rows while
131
+ recalculating yield. If the user says "approve X messages", use
134
132
  `approvalMode:"approve"` but still do not launch. If the user says "schedule X
135
133
  sends" or asks to fill sender sends, use `approvalMode:"approve"` to approve
136
134
  exactly the bounded X-message cohort during preparation, then continue through
@@ -893,11 +891,7 @@ updates.
893
891
 
894
892
  1. Call `mcp__sellable__get_auth_status({})`.
895
893
  2. If auth is not OK with `error.type === "config"` or `error.type === "auth"`,
896
- the user has not signed in yet. Run first-run login through the FTUX
897
- magic-link handoff. If a browser page or tool guidance gives the user a
898
- manual fallback, it must be
899
- `sellable auth set <token> --workspace-id <workspace_id>`. Do not instruct
900
- the user to hand-edit JSON auth config.
894
+ the user has not signed in yet. Run the FTUX magic-link handoff:
901
895
 
902
896
  a. Say to the user verbatim:
903
897
 
@@ -1085,7 +1079,11 @@ updates.
1085
1079
  rubrics and Message Drafting runs.
1086
1080
  After rubrics save, keep Filter Rules visible for approval; after approval,
1087
1081
  move to Filter Leads with `currentStep: "apply-icp-rubric"` and wait there
1088
- while Message Drafting finishes or the template is approved.
1082
+ while Message Drafting finishes or the template is approved. After template
1083
+ approval and bounded scoring, a `0/N` pass result must run the
1084
+ sample-validation zero-pass rule-relaxability audit before any lead-source
1085
+ revision; the three allowed recoveries are rubric revision, fresh
1086
+ same-source sample, or source revision.
1089
1087
  If filters are skipped, launch Message Drafting before moving to
1090
1088
  Messages/message review; updating `currentStep` to `messages` is not proof
1091
1089
  that the background worker started. Queue the bounded campaign-table