@sellable/mcp 0.1.343 → 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. 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.343",
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
@@ -83,14 +100,34 @@ workspace, cleanup/archive/delete need, stale plan, disconnected sender,
83
100
  duplicate candidate, unsafe side effect, missing source proof, or missing
84
101
  message proof.
85
102
 
86
- After approval or safe `--yolo`, fan out lane worker tasks only from the current
87
- plan. Each worker receives the complete lane packet: workspace id, sender ids,
88
- lane key/type, existing campaign/table binding or create intent, source hints,
89
- caps, planRevision, actionId, allowed side effects, and postconditions. Workers
90
- must use the create-campaign workflow and create-campaign workflow/subskills for
91
- campaign creation/setup, source/import, filter choice, Message Drafting,
92
- packaged `generate-messages`, sequence attachment, and send-review readiness.
93
- Do not rebuild those steps ad hoc in the parent thread.
103
+ When safe-yolo is blocked only because the plan needs normal setup work, ask
104
+ for a **bounded delegated approval** over the rendered current plan instead of
105
+ asking for each substep. The approval packet must name the workspace id, sender
106
+ ids, lane keys, campaign/table ids or create intents, source/import caps,
107
+ generate-message caps, route-proof approval policy, selectedActionIds,
108
+ planRevision, allowed side-effect classes, and stop conditions. After that one
109
+ approval covers the current planRevision, the parent may act on behalf of the
110
+ operator and execute the selectedActionIds end to end. Do not ask again for
111
+ substep approvals for source import, create-campaign choices, Message Drafting,
112
+ sequence attach/precheck, or exactly one route-proof approval when those actions
113
+ are within the lane packet, approved caps, approved side-effect classes, and
114
+ route-proof approval policy. Stop and re-plan if any fresh reread changes the
115
+ workspace id, sender ids, source/list id, campaign/table id, new campaign/table
116
+ id, planRevision, actionId, selectedActionIds, allowed side effects, caps,
117
+ status, or blocker set outside the approved packet.
118
+ The short rule: one approval covers the current planRevision and selectedActionIds.
119
+ The execution rule: act on behalf of the operator; do not ask again for substep approvals while work stays within the lane packet, approved caps, approved side-effect classes, and route-proof approval policy.
120
+ The drift rule: stop and re-plan when ids, caps, blockers, side-effect classes, or any new campaign/table id leave the approved packet.
121
+
122
+ After bounded delegated approval or safe `--yolo`, fan out lane worker tasks
123
+ only from the current plan. Each worker receives the complete lane packet:
124
+ workspace id, sender ids, lane key/type, existing campaign/table binding or
125
+ create intent, source hints, caps, planRevision, actionId, allowed side effects,
126
+ and postconditions. Workers must use the create-campaign workflow and
127
+ create-campaign workflow/subskills for campaign creation/setup, source/import,
128
+ filter choice, Message Drafting, packaged `generate-messages`, sequence
129
+ attachment, and send-review readiness. Do not rebuild those steps ad hoc in the
130
+ parent thread.
94
131
 
95
132
  Workers return worker receipts. The parent then calls
96
133
  `setup_evergreen_campaigns({ mode:"verify", planRevision, selectedActionIds,