@sellable/mcp 0.1.336 → 0.1.337

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.
@@ -1,43 +1,63 @@
1
1
  ---
2
2
  name: fill-send-horizon
3
- description: Keep campaigns' send queues full for the next N days — enrich, score, and prepare messages for eligible rows so approved sends are always staged ahead. Schedule-automation friendly ("fill send horizon for these users/campaigns"). Never launches campaigns, never spends paid InMail.
3
+ description: Compatibility alias for refill-sends. Plain fill, refill sends, max out sends, load everyone up, and fill horizon sends now route to refill_campaign_sends plan mode first. Legacy fill_campaign_horizon remains evergreen-only lower-level audit/apply.
4
4
  visibility: internal
5
+ allowed-tools:
6
+ - mcp__sellable__refill_campaign_sends
7
+ - mcp__sellable__resolve_campaign_fill_route
8
+ - mcp__sellable__fill_campaign_horizon
5
9
  ---
6
10
 
7
11
  # Fill Send Horizon
8
12
 
9
13
  <role>
10
- You are a campaign operations agent keeping send queues full. Your job: for each target campaign, make sure the next two working days (or the requested horizon) have prepared, ready-to-send messages staged — without ever launching a campaign or sending anything yourself.
14
+ This is a compatibility alias. For plain operator language, use the new refill
15
+ command first: `refill_campaign_sends({ mode: "plan", intent: "plain" })`.
16
+ The word "horizon" means send window. Do not use `fill_campaign_horizon` as the
17
+ generic regular-campaign fill path.
11
18
  </role>
12
19
 
13
20
  <inputs>
14
- The invoking prompt (often a scheduled automation) names the targets. Accept any of:
21
+ The invoking prompt (often a scheduled automation) names the targets or gives a
22
+ plain fill request. Route before acting:
15
23
 
16
- - Campaign names or IDs ("fill send horizon for Christian Reyes - Post Engagers")
17
- - Sender names ("…for csreyes92 and thomas") — resolve via `list_senders`, then `get_campaigns` and match campaigns attached to those senders
18
- - Nothing specific ("fill send horizon") operate on all non-archived campaign tables in the active workspace that have a sequence attached (`list_tables({ hasSequence: true })`), skipping ARCHIVED ones
24
+ - Plain fill/load requests ("fill campaigns", "load everyone up", "fill send horizon") first call `refill_campaign_sends({ mode: "plan", intent: "plain" })`.
25
+ - If no `--yolo`, report the plan and stop.
26
+ - If `--yolo`, call plan first, then apply only with the returned `planRevision` and selected `actionIds`.
27
+ - If `refill_campaign_sends` is unavailable in an older install, use `resolve_campaign_fill_route` and read-only diagnostics only, then stop before mutation.
19
28
 
20
29
  Optional inputs: `targetPreparedMessages` (default: leave unset for the adaptive default), an explicit "approve" instruction (see safety rules), and a **waterfall priority order** (see below).
21
30
  </inputs>
22
31
 
23
32
  <objective>
24
- For each target campaign:
25
-
26
- 1. `get_campaign` confirm workspace, workflowTableId, and current stats. Skip and report any campaign whose table is ARCHIVED.
27
- 2. `start_campaign_message_preparation({ campaignId })` this queues pending Enrich Prospect cells, lets ICP/rubric and Generate Message cascade, and marks prepared rows ready. Omit `maxRowsToCheck` and `batchSize` for the adaptive default unless the invoking prompt sets them.
28
- 3. Poll `get_campaign_message_preparation_status` until the job completes or stops. Read `progress.enrichedRows`, `preparedMessages`, and `stopReason` — never treat `checkedRows` as enriched rows.
29
- 4. If the stop reason is source exhaustion (no more eligible rows), report it as "source thin needs new leads" and name `refresh-sender-engagement` (for post-engager lanes) or `find-leads` as the refill path. Do not invent leads.
30
- 5. Report per campaign: prepared count, approved count, what is staged for the horizon, and the single next operator action (usually "approve messages in the UI").
33
+ Route result handling:
34
+
35
+ 1. If `refill_campaign_sends` returns regular campaigns, report the ranked plan.
36
+ 2. If it returns evergreen campaigns, report the current-source audit and any legacy evergreen send-window subplan.
37
+ 3. If it returns blockers, report them and stop.
38
+ 4. If `--yolo` is approved, apply only selected immutable actions from the plan.
39
+
40
+ For each active campaign target:
41
+
42
+ 1. Confirm workspace, `workflowTableId`, `campaignStatus:"ACTIVE"`, sender IDs, current stats, and scheduled/ready/approved/prepared counts where available. Skip and report PAUSED/DRAFT/ARCHIVED targets separately.
43
+ 2. Check `get_campaign_message_preparation_status({ campaignId, tableId })` first. If an active prep job exists for the same target, report it and do not start an overlapping job.
44
+ 3. If rows already exist, let `refill_campaign_sends` plan/apply the bounded preparation action. Do not call lower-level preparation manually unless the command is unavailable.
45
+ 4. If source is thin and the user asked to add/fill more leads, source fresh Signal Discovery/post engagement leads only into the same `campaignOfferId`/`campaignId` context. Do not create warm-post-engager side campaigns, on-demand campaigns, or unrelated campaigns.
46
+ 5. Poll `get_campaign_message_preparation_status` until the job completes or stops. Read `progress.enrichedRows`, `preparedMessages`, `approvedMessages`, `activeCellCount`, active prep blockers, and `stopReason`; never treat `checkedRows` as enriched rows.
47
+ 6. After any prep/approval work, re-read campaign/table state. Do not report the horizon as scheduled unless the re-read proves scheduler-owned scheduled cells with non-null `scheduledFor`. If only prepared/approved/ready cells exist, report the exact state as `prepared/approved/ready - awaiting scheduler`, not complete.
48
+ 7. Report appended rows, enriched rows, prepared messages, approved messages, ready-to-schedule rows, scheduler-owned scheduled cells, active preparation jobs, and sender-health blockers such as disconnected Sales Nav, deleted LinkedIn accounts, missing sequence state, or exhausted source rows as separate lines.
31
49
  </objective>
32
50
 
33
51
  <waterfall>
34
52
  ## Campaign hierarchy (waterfall order)
35
53
 
36
- The fill order is **stored workspace state**, not something each automation restates. Resolve it in this precedence:
54
+ Evergreen/horizon fill order is **stored workspace state** returned by
55
+ `resolve_campaign_fill_route`, not something each automation restates. Resolve
56
+ it in this precedence:
37
57
 
38
- 1. **Stored hierarchy (default)**: call `get_campaign_waterfall` first. It returns each waterfall (per sender or shared) with slots in stored priority order campaign offer IDs included. Fill in that order.
58
+ 1. **Stored hierarchy (default)**: the resolver reads the stored managed waterfall and returns slots in priority order with campaign offer IDs included. Fill in that order.
39
59
  2. **Per-invocation override**: if the invoking prompt states an explicit order ("fill in this order: Signal Discovery, Post Engagers"), use it for this run only and say in the report that the stored order was overridden. To change the order durably, use `set_campaign_waterfall_order` — but only when the user/automation explicitly asks to change the hierarchy, never as a side effect of a fill run.
40
- 3. **No stored hierarchy** (tool returns empty evergreen reconcile hasn't run): fall back to the conventional order `<Sender> - Post Engagers` (warmest) `Shared Signal Discovery` `Shared Cold Fallback` (coldest), and note that running `create-evergreen-campaigns` will materialize a stored hierarchy.
60
+ 3. **No stored hierarchy**: resolver returns active targets or ask-create. Do not invent a conventional evergreen waterfall. Ask whether to create normal campaigns or evergreen campaigns only after `ask_create`.
41
61
 
42
62
  Fill mechanics, whatever the source of the order:
43
63
 
@@ -54,9 +74,11 @@ thomas waterfall (stored order): Post Engagers 1/4 (source thin) → Shared Sign
54
74
  <safety>
55
75
  - **Never call `start_campaign`, `start_on_demand_campaign`, or `start_direct_campaign`.** Activating a campaign is always an explicit human action outside this skill.
56
76
  - Use `approvalMode: "approve"` ONLY when the invoking prompt explicitly says to auto-approve (e.g. "fill and approve"). Default is `mark_ready` — a human approves in the UI.
77
+ - Auto-approval is not scheduling. It can make rows eligible for the scheduler, but only scheduler-owned `scheduledFor` cells count as scheduled completion.
57
78
  - Never use a sender from one workspace for another workspace's campaign. If `get_campaign` shows a workspace mismatch with the active workspace, stop and report.
58
79
  - Paid InMail: never opt a campaign into paid-InMail templates or spend credits. If a campaign's sequence already includes a paid-InMail step, note it in the report but do not alter it.
59
- - This skill prepares; the product's sweeper sends — only from ACTIVE campaigns, only approved rows, only inside sending hours. Say so in the report so the operator knows nothing went out.
80
+ - Do not write `WorkflowTableCell.scheduledFor` directly. Scheduling must happen through the existing workflow-table scheduler/sweeper path.
81
+ - This skill fills readiness and verifies scheduling; the product's sweeper sends only from ACTIVE campaigns, only approved rows, only inside sending hours. Say so in the report so the operator knows nothing went out.
60
82
  </safety>
61
83
 
62
84
  <output>
@@ -64,9 +86,9 @@ One compact report:
64
86
 
65
87
  ```
66
88
  Fill Send Horizon — {date}
67
- • {Campaign A}: {n} messages prepared ({m} awaiting approval) horizon staged through {date}
89
+ • {Campaign A}: scheduled {s}/{target} for the horizon ({r} ready, {p} prepared, {a} approved) {state}
68
90
  • {Campaign B}: source thin after {k} prepared — refill via refresh-sender-engagement
69
- Next operator action: approve {m} messages in {Campaign A}
70
- Nothing was sent or launched; campaigns remain in their current status.
91
+ Next operator action: {approve messages | wait for scheduler | refresh source | launch separately if you intentionally want sends to go out}
92
+ Nothing was sent or launched; campaigns remain in their current status. Prepared/approved/ready rows were not counted as scheduled unless scheduler-owned scheduledFor cells were re-read.
71
93
  ```
72
94
  </output>
@@ -0,0 +1,57 @@
1
+ ---
2
+ name: refill-sends
3
+ description: Plan and optionally apply bounded campaign send refill work. Plain fill, refill sends, max out sends, load everyone up, and fill send window requests route to refill_campaign_sends plan mode first. Apply requires --yolo, a fresh planRevision, and selected actionIds.
4
+ visibility: internal
5
+ allowed-tools:
6
+ - mcp__sellable__refill_campaign_sends
7
+ - mcp__sellable__resolve_campaign_fill_route
8
+ - mcp__sellable__fill_campaign_horizon
9
+ - mcp__sellable__get_campaign
10
+ - mcp__sellable__get_campaign_message_preparation_status
11
+ ---
12
+
13
+ # Refill Sends
14
+
15
+ Use this skill for plain operator requests such as "fill", "refill sends",
16
+ "max out sends", "load everyone up", or "fill horizon sends".
17
+
18
+ ## Default Flow
19
+
20
+ 1. Call `refill_campaign_sends({ mode: "plan", intent: "plain" })`.
21
+ 2. Report the returned plan and stop when the user did not include `--yolo`.
22
+ 3. If the user included `--yolo`, still call plan first. Inspect blockers.
23
+ 4. Apply only by calling `refill_campaign_sends({ mode: "apply", yolo: true, planRevision, actionIds })` with action IDs copied from the fresh plan.
24
+
25
+ Do not manually chain lower-level tools unless `refill_campaign_sends` is
26
+ unavailable. In that fallback case, run read-only diagnostics only, then stop
27
+ before mutation.
28
+
29
+ ## Public Concepts
30
+
31
+ - Regular campaign: a campaign with a brief, source, sequence, senders, and a
32
+ campaign-backed workflow table.
33
+ - Evergreen campaign: a managed always-on send-window lane.
34
+ - Send window: the dates/capacity the operator wants kept full.
35
+
36
+ Do not expose internal direct campaign types as an operator refill path. If the
37
+ plan reports `unsupported_campaign_type`, report it and stop.
38
+
39
+ ## Safety Rules
40
+
41
+ - Default mode is read-only plan.
42
+ - Apply requires `yolo: true`, a fresh stable `planRevision`, and selected immutable `actionIds`.
43
+ - Production yolo/apply requires explicit approval of workspace, campaign/table IDs, selected action IDs, caps/dates, and expected side effects.
44
+ - Never create side campaigns.
45
+ - Never call `start_campaign`, `start_on_demand_campaign`, or `start_direct_campaign`.
46
+ - Never raw-write scheduled fields or sender assignment fields.
47
+ - Scheduled success requires rereading scheduler-owned cells with non-null `scheduledFor`.
48
+ - Generate Message normally happens through downstream propagation from enrichment/prep, not as a standalone action.
49
+
50
+ ## Evergreen Source Ladder
51
+
52
+ For evergreen campaigns, do not move down the source ladder until the plan proves
53
+ the current source is exhausted or cannot produce enough good prospects within
54
+ configured caps. Required evidence includes source ID, target prospect gap,
55
+ cursor/inventory state, dedupe/DNC/provider exclusions, good-prospect yield,
56
+ and scan/import caps.
57
+
@@ -0,0 +1,9 @@
1
+ {
2
+ "parallelMode": "wide",
3
+ "agentCount": 6,
4
+ "maxToolCallsPerAgent": 2,
5
+ "senderMaxAgents": 2,
6
+ "senderMaxToolCallsPerAgent": 3,
7
+ "progressMode": true,
8
+ "debugMode": true
9
+ }