@sellable/mcp 0.1.365 → 0.1.367

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, pause_campaign review-state transition when the current table is still DRAFT, and review readiness through existing create-campaign workflow/subskills, then return receipts here for verification. Customer-visible verify receipts must set status:'succeeded' or status:'completed' and must include createCampaignStepReceipt with setupPlanCall, campaignBriefReceipt, sourceDecisionReceipt, filterDecisionReceipt, messageDraftingReceipt, reviewBatchReceipt, sequenceReceipt, and verifyCall nested inside createCampaignStepReceipt; top-level-only copies of those objects are not enough. messageDraftingReceipt must use statusSource:'branch' or statusSource:'packaged-generate-messages-worker' and include proof that generate-messages was loaded, start_campaign_message_preparation/get_campaign_message_preparation_status ran when the packaged worker path is used, 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 raw-write campaign status, 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 explicitly load and use the installed `$sellable:create-campaign` wrapper as the nested workflow entrypoint, then load `create-campaign-v2` and `create-campaign-v2/core/flow.v2.json`; they must execute creation, source import, create-campaign workflow steps, generate-messages, sequence attachment, pause_campaign review-state transition when the current table is still DRAFT, and review readiness through that existing create-campaign workflow/subskills, then return receipts here for verification. Customer-visible verify receipts must set status:'succeeded' or status:'completed' and must include createCampaignStepReceipt with setupPlanCall, createCampaignWorkflowReceipt, campaignBriefReceipt, sourceDecisionReceipt, filterDecisionReceipt, messageDraftingReceipt, reviewBatchReceipt, sequenceReceipt, and verifyCall nested inside createCampaignStepReceipt; top-level-only copies of those objects are not enough. createCampaignWorkflowReceipt must include skillCommand:'$sellable:create-campaign', skillName:'create-campaign', wrapperSkillLoaded:true, workflowPromptName:'create-campaign-v2', workflowPromptLoadedToHasMoreFalse:true, workflowAssetPath:'create-campaign-v2/core/flow.v2.json', workflowAssetLoaded:true, workerRuntime, and notAdHoc:true. messageDraftingReceipt must use statusSource:'branch' or statusSource:'packaged-generate-messages-worker' and include proof that generate-messages was loaded, start_campaign_message_preparation/get_campaign_message_preparation_status ran when the packaged worker path is used, 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 raw-write campaign status, does not archive/delete cleanup targets, and does not spend paid credits.",
10
10
  inputSchema: {
11
11
  type: "object",
12
12
  properties: {
@@ -75,7 +75,7 @@ export const setupEvergreenCampaignsToolDefinitions = [
75
75
  type: "array",
76
76
  maxItems: 20,
77
77
  items: { type: "object" },
78
- description: "Required for verify. Structured lane worker receipts from create-campaign/source/message/sequence execution. Customer-visible lanes must use status:'succeeded' or status:'completed' and include createCampaignStepReceipt with setupPlanCall, campaignBriefReceipt, sourceDecisionReceipt, filterDecisionReceipt, messageDraftingReceipt, reviewBatchReceipt, sequenceReceipt, and verifyCall nested inside createCampaignStepReceipt. Top-level-only proof copies are not enough.",
78
+ description: "Required for verify. Structured lane worker receipts from create-campaign/source/message/sequence execution. Customer-visible lanes must use status:'succeeded' or status:'completed' and include createCampaignStepReceipt with setupPlanCall, createCampaignWorkflowReceipt, campaignBriefReceipt, sourceDecisionReceipt, filterDecisionReceipt, messageDraftingReceipt, reviewBatchReceipt, sequenceReceipt, and verifyCall nested inside createCampaignStepReceipt. createCampaignWorkflowReceipt proves the lane worker loaded `$sellable:create-campaign`, `create-campaign-v2`, and `create-campaign-v2/core/flow.v2.json`; top-level-only proof copies are not enough.",
79
79
  },
80
80
  },
81
81
  required: [],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/mcp",
3
- "version": "0.1.365",
3
+ "version": "0.1.367",
4
4
  "type": "module",
5
5
  "description": "Sellable MCP server for Claude Code and Codex campaign workflows",
6
6
  "main": "dist/index.js",
@@ -138,11 +138,15 @@ After bounded delegated approval or safe `--yolo`, fan out lane worker tasks
138
138
  only from the current plan. Each worker receives the complete lane packet:
139
139
  workspace id, sender ids, lane key/type, existing campaign/table binding or
140
140
  create intent, source hints, caps, planRevision, actionId, allowed side effects,
141
- and postconditions. Workers must use the create-campaign workflow and
142
- create-campaign workflow/subskills for campaign creation/setup, source/import,
143
- filter choice, Message Drafting, packaged `generate-messages`, sequence
144
- attachment, and send-review readiness. Do not rebuild those steps ad hoc in the
145
- parent thread. The parent thread is only the planner, dispatcher, verifier, and
141
+ and postconditions. Workers must explicitly load and use the installed visible
142
+ `$sellable:create-campaign` wrapper as the nested workflow entrypoint, then load
143
+ `create-campaign-v2` and `create-campaign-v2/core/flow.v2.json` through the
144
+ packaged MCP prompt/asset loaders before campaign creation or repair. The
145
+ worker then uses that create-campaign workflow/subskills for campaign
146
+ creation/setup, source/import, filter choice, Message Drafting, packaged
147
+ `generate-messages`, sequence attachment, and send-review readiness. Do not
148
+ rebuild those steps ad hoc in the parent thread or from a copied receipt
149
+ checklist. The parent thread is only the planner, dispatcher, verifier, and
146
150
  receipt collector: it must not call `create_campaign`, `import_leads`,
147
151
  `start_campaign_message_preparation`, `update_cell`, or sequence-attach tools
148
152
  for a lane that was assigned to a worker. When the host supports branch
@@ -176,6 +180,14 @@ not a parent-thread summary. The receipt must include:
176
180
  campaign/table binding or create intent used before work started. For a
177
181
  create lane, this receipt must explicitly include `createIntent:true`; for a
178
182
  reuse lane, do not report `createIntent:true`.
183
+ - `createCampaignWorkflowReceipt`: proof the worker loaded the actual installed
184
+ `$sellable:create-campaign` wrapper instead of doing ad hoc MCP calls. It must
185
+ include `skillCommand:"$sellable:create-campaign"`,
186
+ `skillName:"create-campaign"`, `wrapperSkillLoaded:true`,
187
+ `workflowPromptName:"create-campaign-v2"`,
188
+ `workflowPromptLoadedToHasMoreFalse:true`,
189
+ `workflowAssetPath:"create-campaign-v2/core/flow.v2.json"`,
190
+ `workflowAssetLoaded:true`, the real `workerRuntime`, and `notAdHoc:true`.
179
191
  - `researchSenderReceipt`: `research-sender` prompt load proof,
180
192
  `complete_sender_research` result, sender LinkedIn identity basis, and the
181
193
  notes/proof counts used before the net-new `create_campaign` call.
@@ -219,10 +231,11 @@ the lane is complete. Do not use `status:"passed"` or
219
231
  in a separate `warnings` array, but the completion status stays canonical.
220
232
 
221
233
  All step proof objects must live under `createCampaignStepReceipt`. Do not put
222
- `campaignBriefReceipt`, `sourceDecisionReceipt`, `filterDecisionReceipt`,
223
- `messageDraftingReceipt`, `reviewBatchReceipt`, or `sequenceReceipt` only as
224
- top-level siblings; top-level copies are useful for humans but are not enough
225
- for command verification unless the same object also appears inside
234
+ `createCampaignWorkflowReceipt`, `campaignBriefReceipt`,
235
+ `sourceDecisionReceipt`, `filterDecisionReceipt`, `messageDraftingReceipt`,
236
+ `reviewBatchReceipt`, or `sequenceReceipt` only as top-level siblings;
237
+ top-level copies are useful for humans but are not enough for command
238
+ verification unless the same object also appears inside
226
239
  `createCampaignStepReceipt`.
227
240
 
228
241
  ```json
@@ -236,6 +249,17 @@ for command verification unless the same object also appears inside
236
249
  "campaignId": "<campaign id>",
237
250
  "tableId": "<workflow table id>",
238
251
  "createCampaignStepReceipt": {
252
+ "createCampaignWorkflowReceipt": {
253
+ "skillCommand": "$sellable:create-campaign",
254
+ "skillName": "create-campaign",
255
+ "wrapperSkillLoaded": true,
256
+ "workflowPromptName": "create-campaign-v2",
257
+ "workflowPromptLoadedToHasMoreFalse": true,
258
+ "workflowAssetPath": "create-campaign-v2/core/flow.v2.json",
259
+ "workflowAssetLoaded": true,
260
+ "workerRuntime": "separate-codex-thread",
261
+ "notAdHoc": true
262
+ },
239
263
  "campaignBriefReceipt": {
240
264
  "campaignId": "<campaign id>",
241
265
  "workflowTableId": "<workflow table id>",