@sellable/mcp 0.1.344 → 0.1.345

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.
@@ -4,6 +4,8 @@ type SetupEvergreenCampaignsInput = {
4
4
  yolo?: boolean;
5
5
  allConnectedSenders?: boolean;
6
6
  selectedSenderIds?: string[];
7
+ postEngagerSenderIds?: string[];
8
+ sharedSenderIds?: string[];
7
9
  bindings?: Array<{
8
10
  laneKey: string;
9
11
  campaignId: string;
@@ -45,6 +47,22 @@ export declare const setupEvergreenCampaignsToolDefinitions: {
45
47
  maxItems: number;
46
48
  description: string;
47
49
  };
50
+ postEngagerSenderIds: {
51
+ type: string;
52
+ items: {
53
+ type: string;
54
+ };
55
+ maxItems: number;
56
+ description: string;
57
+ };
58
+ sharedSenderIds: {
59
+ type: string;
60
+ items: {
61
+ type: string;
62
+ };
63
+ maxItems: number;
64
+ description: string;
65
+ };
48
66
  bindings: {
49
67
  type: string;
50
68
  maxItems: number;
@@ -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 for one Post Engagers lane per selected sender plus shared Signal Discovery and Shared Cold Fallback lanes. 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. 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. 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: {
@@ -32,7 +32,19 @@ export const setupEvergreenCampaignsToolDefinitions = [
32
32
  type: "array",
33
33
  items: { type: "string" },
34
34
  maxItems: 25,
35
- description: "Exact OutboundSenderIdentity ids for sender-owned Post Engagers lanes and shared-lane sender set.",
35
+ description: "Legacy shorthand: exact OutboundSenderIdentity ids for both sender-owned Post Engagers lanes and shared-lane sender set. Prefer scoped fields when those differ.",
36
+ },
37
+ postEngagerSenderIds: {
38
+ type: "array",
39
+ items: { type: "string" },
40
+ maxItems: 25,
41
+ description: "Exact OutboundSenderIdentity ids that should receive sender-owned Post Engagers lanes.",
42
+ },
43
+ sharedSenderIds: {
44
+ type: "array",
45
+ items: { type: "string" },
46
+ maxItems: 25,
47
+ description: "Exact OutboundSenderIdentity ids attached to shared Signal Discovery and Shared Cold Fallback lanes.",
36
48
  },
37
49
  bindings: {
38
50
  type: "array",
@@ -78,6 +90,8 @@ export function setupEvergreenCampaigns(input) {
78
90
  depth: input.depth,
79
91
  allConnectedSenders: input.allConnectedSenders,
80
92
  selectedSenderIds: input.selectedSenderIds,
93
+ postEngagerSenderIds: input.postEngagerSenderIds,
94
+ sharedSenderIds: input.sharedSenderIds,
81
95
  bindings: input.bindings,
82
96
  planRevision: input.planRevision,
83
97
  selectedActionIds: input.selectedActionIds,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/mcp",
3
- "version": "0.1.344",
3
+ "version": "0.1.345",
4
4
  "type": "module",
5
5
  "description": "Sellable MCP server for Claude Code and Codex campaign workflows",
6
6
  "main": "dist/index.js",
@@ -60,17 +60,34 @@ plan returns lane packets.
60
60
 
61
61
  Plan shape:
62
62
 
63
- - one Post Engagers lane per selected sender;
64
- - one shared Signal Discovery lane;
65
- - one shared Cold Fallback lane;
63
+ - one Post Engagers lane per sender in the **Post Engagers sender scope**;
64
+ - one shared Signal Discovery lane for the **shared lane sender scope**;
65
+ - one shared Cold Fallback lane for the **shared lane sender scope**;
66
66
  - explicit existing campaign/table bindings when the user points at a canonical
67
67
  lane. Pass those exact ids to the plan and reuse/verify them instead of
68
68
  creating duplicates.
69
69
  - If a user supplies canonical ids, reuse/verify them instead of creating duplicates.
70
70
 
71
- When senders are ambiguous, ask which sender ids need Post Engagers lanes before
72
- planning. If the operator says all connected senders, pass `allConnectedSenders`
73
- and let the command return exact selected sender ids or blockers.
71
+ Use `selectedSenderIds` only as a legacy shorthand when the same senders should
72
+ get sender-owned Post Engagers lanes and attach to shared lanes. When the scopes
73
+ differ, pass both explicit arrays:
74
+
75
+ - `postEngagerSenderIds`: only senders that should have sender-owned Post
76
+ Engagers campaigns.
77
+ - `sharedSenderIds`: senders attached to the shared Signal Discovery and Shared
78
+ Cold Fallback campaigns.
79
+
80
+ If the operator says a sender is shared-only, do not create a Post Engagers lane
81
+ for that shared-only sender. Example: if Justin already has a Post Engagers
82
+ campaign and Jell/Hulan should only participate in the two shared campaigns,
83
+ call `setup_evergreen_campaigns` with `postEngagerSenderIds:["<justin id>"]`
84
+ and `sharedSenderIds:["<justin id>","<jell or hulan id>"]`.
85
+
86
+ When senders are ambiguous, ask which sender ids belong in the Post Engagers
87
+ sender scope and which belong in the shared lane sender scope before planning.
88
+ If the operator says all connected senders for both scopes, pass
89
+ `allConnectedSenders` and let the command return exact selected sender ids or
90
+ blockers.
74
91
 
75
92
  `--yolo` is supported, but it is a safety-scoped execution mode, not a cleanup
76
93
  or launch permission. With `--yolo`, pass `yolo:true` to