@sellable/mcp 0.1.351 → 0.1.352

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.
@@ -6,7 +6,7 @@ async function postSetupEvergreenCampaigns(body) {
6
6
  export const setupEvergreenCampaignsToolDefinitions = [
7
7
  {
8
8
  name: "setup_evergreen_campaigns",
9
- description: "Evergreen campaign setup plan/verify command. Use plan mode first to inspect exact workspace/sender/campaign/table/source state and receive immutable lane packets. `selectedSenderIds` is a legacy shorthand for both scopes; prefer `postEngagerSenderIds` for the Post Engagers sender scope and `sharedSenderIds` for the shared lane sender scope when they differ. The command plans one Post Engagers lane per post-engager sender plus shared Signal Discovery and Shared Cold Fallback lanes for the shared sender set. yolo is only a parent-skill auto-execution hint for safe lane packets; this backend command remains read-only in plan mode and verifies receipts in verify mode. When safe-yolo needs normal setup work, the parent skill may ask for bounded delegated approval: one approval over the current planRevision, selected action ids, caps, allowed side-effect classes, and stop conditions lets lane workers execute without per-substep approval while staying inside that packet. Lane workers must execute creation, source import, create-campaign workflow steps, generate-messages, sequence attachment, and review readiness through existing create-campaign workflow/subskills, then return receipts here for verification. Customer-visible verify receipts must include createCampaignStepReceipt with setupPlanCall, campaignBriefReceipt, sourceDecisionReceipt, filterDecisionReceipt, messageDraftingReceipt, reviewBatchReceipt, sequenceReceipt, and verifyCall. This command does not launch campaigns, does not schedule sends, does not assign scheduler-owned send fields, does not archive/delete cleanup targets, and does not spend paid credits.",
9
+ description: "Evergreen campaign setup plan/verify command. Use plan mode first to inspect exact workspace/sender/campaign/table/source state and receive immutable lane packets. `selectedSenderIds` is a legacy shorthand for both scopes; prefer `postEngagerSenderIds` for the Post Engagers sender scope and `sharedSenderIds` for the shared lane sender scope when they differ. The command plans one Post Engagers lane per post-engager sender plus shared Signal Discovery and Shared Cold Fallback lanes for the shared sender set. yolo is only a parent-skill auto-execution hint for safe lane packets; this backend command remains read-only in plan mode and verifies receipts in verify mode. When safe-yolo needs normal setup work, the parent skill may ask for bounded delegated approval: one approval over the current planRevision, selected action ids, caps, allowed side-effect classes, and stop conditions lets lane workers execute without per-substep approval while staying inside that packet. Lane workers must execute creation, source import, create-campaign workflow steps, generate-messages, sequence attachment, and review readiness through existing create-campaign workflow/subskills, then return receipts here for verification. Customer-visible verify receipts must include createCampaignStepReceipt with setupPlanCall, campaignBriefReceipt, sourceDecisionReceipt, filterDecisionReceipt, messageDraftingReceipt, reviewBatchReceipt, sequenceReceipt, and verifyCall. messageDraftingReceipt must include validationResult:'passed', a passed qualityReview, and at least 3 concrete sampleMessages with row ids, generated message text, pass verdicts, and no issues; Shared Cold Fallback samples with a standalone name followed by 'Hey there' are rejected. This command does not launch campaigns, does not schedule sends, does not assign scheduler-owned send fields, does not archive/delete cleanup targets, and does not spend paid credits.",
10
10
  inputSchema: {
11
11
  type: "object",
12
12
  properties: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/mcp",
3
- "version": "0.1.351",
3
+ "version": "0.1.352",
4
4
  "type": "module",
5
5
  "description": "Sellable MCP server for Claude Code and Codex campaign workflows",
6
6
  "main": "dist/index.js",
@@ -172,6 +172,12 @@ review-batch row ids/hash, and either `statusSource:"branch"` or
172
172
  full packaged prompt with `get_subskill_prompt({ subskillName:"generate-messages"`
173
173
  until `hasMore:false`, loaded the required message assets, and loaded
174
174
  `create-campaign-v2-validation` before returning a `messageDraftRecommendation`.
175
+ The receipt must also include `validationResult:"passed"`, a passed
176
+ quality-review object, and at least 3 concrete reviewed sample messages with
177
+ row ids, generated message text, pass verdicts, and no issues. Shared Cold
178
+ Fallback samples must not open with a standalone name line followed by
179
+ "Hey there" or another generic greeting; that pattern means the lane did not
180
+ finish the create-campaign message workflow to customer quality.
175
181
  The generated-message cells are not prompt proof: `currentRevisionGeneratedMessages`,
176
182
  Generate Message column counts, `messagesCount`, or rendered row previews prove
177
183
  only that table cells exist from the current brief/template, not that the
@@ -191,9 +197,14 @@ Parent-thread handwritten copy or setting `currentStep` is not proof.
191
197
 
192
198
  <objective>
193
199
  1. **Inventory first**: `get_campaigns` + `list_tables` + `get_campaign_waterfall` in the active workspace. Treat `list_tables` and the managed waterfall as authoritative for older managed slots; `get_campaigns` is a recent campaign page and may miss canonical evergreen lanes. Match existing campaigns/tables/waterfall slots to the plan by name (case-insensitive, ignore suffixes like "(Copy)") and stored slot identity. `list_tables.campaignStatus` and `list_tables.dashboardBucket` are part of the identity check: a matching `ARCHIVED` table/campaign is not a plain `REUSE`. If it is the canonical prod slot and the invocation explicitly allows dashboard visibility repair, repair it to `PAUSED`; otherwise mark it `flagged`/`blocked` and do not create a duplicate. A matching non-archived campaign/table/waterfall slot = REUSE; record it and move on. Never create a second campaign for a slot that already has one in any of those inventories.
194
- 2. **Create only the missing slots** with `create_on_demand_campaign({ name, senderIds, campaignBrief })`:
200
+ 2. **Create only the missing slots** through the full `$sellable:create-campaign`
201
+ workflow path for each lane, using the lane packet as the setup basis:
195
202
  - Post Engagers lanes: that sender's ID only. Shared lanes: all the senders' IDs.
196
- - The brief must include the warm post-engager first-message template style — short, casual, references the post they engaged with, closed question, **no internal vocabulary, no pitch, no meeting ask** in message one:
203
+ - The brief and message direction are lane-specific. Never reuse the Post
204
+ Engagers opening for Shared Cold Fallback.
205
+ - **Post Engagers** first-message style: short, casual, references the
206
+ sender-authored post they engaged with, closed question, **no internal
207
+ vocabulary, no pitch, no meeting ask** in message one:
197
208
 
198
209
  ```
199
210
  {{first_name}}
@@ -203,6 +214,25 @@ Parent-thread handwritten copy or setting `currentStep` is not proof.
203
214
  Saw you pop up on my post about {{post_topic_line}}
204
215
  ```
205
216
 
217
+ - **Shared Signal Discovery** first-message style: short, casual, references
218
+ the real observed signal/theme or public conversation. It may mention the
219
+ engagement source only when the source evidence supports it. Do not say
220
+ "my post" unless the selected source post was actually authored by the
221
+ sending sender.
222
+ - **Shared Cold Fallback** first-message style: cold, direct, and cohesive.
223
+ It must not pretend there was engagement, must not say "saw you pop up",
224
+ and must not use a standalone name line followed by "Hey there" or other
225
+ generic greeting. It should open with a light role/company/problem
226
+ observation and ask one clear problem question. This is a single-message
227
+ cold path unless the approved create-campaign message workflow proves a
228
+ better delivery format.
229
+ - Every customer-visible lane must run Message Drafting from the current
230
+ campaign/table basis after source rows exist. The worker must load the full
231
+ packaged `generate-messages` prompt, every required asset, and
232
+ `create-campaign-v2-validation`; the returned receipt must include at
233
+ least 3 concrete reviewed sample messages, a passed validation result, and
234
+ a passed quality review. Row/message counts alone are not enough.
235
+
206
236
  - **The brief must declare the delivery format** so Generate Message writes copy suited to how it actually sends:
207
237
  - DM lanes: add a `Delivery format:` line — either `multiline (each paragraph sends as its own DM message)` or `single message`. When multiline, the template's blank-line paragraphs ARE the message boundaries — write each one as a standalone typed message.
208
238
  - **InMail lanes can never be multiline**: an InMail is one message and the recipient must reply before anything else can be sent. InMail-bound templates must read as one cohesive message — declare `Delivery format: single message (InMail — no follow-up until reply)` and never structure the copy to depend on multi-message pacing.
@@ -235,7 +265,11 @@ Parent-thread handwritten copy or setting `currentStep` is not proof.
235
265
  `workerDetails.messageDraftBuilder` with `statusSource:"branch"` or an
236
266
  inline `statusSource:"parent-thread-fallback"` receipt. The generated-message
237
267
  cells are not prompt proof; `currentRevisionGeneratedMessages` and row
238
- previews are only downstream cell evidence.
268
+ previews are only downstream cell evidence. The proof must include
269
+ `validationResult:"passed"`, a passed quality review, and at least 3
270
+ reviewed sample messages. For Shared Cold Fallback, reject samples that
271
+ open with a standalone name followed by "Hey there" or a similarly generic
272
+ greeting.
239
273
  - The first review batch exists and at least 3 review rows have generated
240
274
  messages from the approved brief. If fewer than 3 usable rows exist, report
241
275
  the actual count and why.