@sellable/mcp 0.1.145 → 0.1.146
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.
- package/agents/post-find-leads-message-scout.md +8 -14
- package/dist/tools/leads.js +6 -5
- package/package.json +1 -1
- package/skills/create-campaign-v2/SKILL.md +6 -0
- package/skills/create-campaign-v2/SOUL.md +4 -0
- package/skills/create-campaign-v2/core/flow.v2.json +25 -3
- package/skills/create-campaign-v2/references/message-review-safety-gate.md +22 -44
- package/skills/create-campaign-v2/references/step-13-import-leads.md +5 -3
|
@@ -137,8 +137,12 @@ Return a concise status with:
|
|
|
137
137
|
- quality-gate pass/fail summary
|
|
138
138
|
- whether final template review is ready or needs revision
|
|
139
139
|
|
|
140
|
-
When the parent will show the recommendation in chat,
|
|
141
|
-
message review
|
|
140
|
+
When the parent will show the recommendation in chat, keep the customer-facing
|
|
141
|
+
message review lightweight. Format only the approval target and one strong
|
|
142
|
+
good-fill example as Markdown with distinct copy blocks. Keep token rules,
|
|
143
|
+
omit/fallback examples, and bad-fill avoidance notes in your internal
|
|
144
|
+
recommendation so the parent can persist them to the campaign brief after
|
|
145
|
+
approval; do not print them in the default chat approval packet.
|
|
142
146
|
|
|
143
147
|
````markdown
|
|
144
148
|
## Message Template
|
|
@@ -155,19 +159,9 @@ message review as Markdown with distinct copy blocks:
|
|
|
155
159
|
{{tokenized_message_body}}
|
|
156
160
|
```
|
|
157
161
|
|
|
158
|
-
## Rendered
|
|
162
|
+
## Rendered Example
|
|
159
163
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
```text
|
|
163
|
-
Subject: ...
|
|
164
|
-
|
|
165
|
-
Hey First,
|
|
166
|
-
|
|
167
|
-
...
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
### Good omit / fallback
|
|
164
|
+
Good token fill:
|
|
171
165
|
|
|
172
166
|
```text
|
|
173
167
|
Subject: ...
|
package/dist/tools/leads.js
CHANGED
|
@@ -499,17 +499,18 @@ function buildSourceImportWatchNarration({ provider, selectedPostCount, estimate
|
|
|
499
499
|
: ""}`
|
|
500
500
|
: `the approved ${providerLabel} source`;
|
|
501
501
|
const targetDetail = typeof targetLeadCount === "number"
|
|
502
|
-
? ` Targeting ${targetLeadCount.toLocaleString("en-US")} source
|
|
502
|
+
? ` Targeting ${targetLeadCount.toLocaleString("en-US")} source leads before the bounded review batch is cloned.`
|
|
503
503
|
: "";
|
|
504
504
|
return {
|
|
505
|
-
stage: "
|
|
505
|
+
stage: "find-leads",
|
|
506
506
|
headline: provider === "signal-discovery"
|
|
507
|
-
? "Scraping source
|
|
508
|
-
: "Importing source
|
|
507
|
+
? "Scraping source leads from posts"
|
|
508
|
+
: "Importing source leads",
|
|
509
509
|
visibleState: `The browser is showing ${providerLabel} import progress for ${sourceDetail}.${targetDetail}`,
|
|
510
510
|
agentIntent: "Codex is materializing the approved source into a lead list before cloning only the bounded review batch into the campaign.",
|
|
511
|
-
nextAction: "Wait for source
|
|
511
|
+
nextAction: "Wait for source leads, then import the 15-row review batch",
|
|
512
512
|
safety: "Import is limited to the review batch.",
|
|
513
|
+
progressLabel: "Source scouting",
|
|
513
514
|
};
|
|
514
515
|
}
|
|
515
516
|
function buildSourceImportRecoveryWatchNarration(args) {
|
package/package.json
CHANGED
|
@@ -158,6 +158,12 @@ approval label must describe the action with the count, such as "Approve
|
|
|
158
158
|
scraping 3 Signal Discovery posts?" For Sales Nav or Prospeo, the label should
|
|
159
159
|
name the specific search/import lane. Do not call `import_leads` or
|
|
160
160
|
`confirm_lead_list` until this second source-action approval is granted.
|
|
161
|
+
After the user approves this concrete source-action gate, do not show the
|
|
162
|
+
Source Recommendation again and do not ask another source approval question.
|
|
163
|
+
Acknowledge once, then call `import_leads` immediately with the approved source
|
|
164
|
+
math. For Signal Discovery, pass `provider: "signal-discovery"`,
|
|
165
|
+
`targetEngagerCount`, `maxPostsToScrape`, and `confirmed: true`; the tool owns
|
|
166
|
+
moving the watch UI to source-list progress after a lead-list/job id exists.
|
|
161
167
|
|
|
162
168
|
For Signal Discovery, use this compact source-action approval shape after
|
|
163
169
|
selected posts exist:
|
|
@@ -243,6 +243,10 @@ table, total visible pool, estimated good-fit pool, first-pass review
|
|
|
243
243
|
batch, and fallback. The approval question should be "Approve scraping N Signal
|
|
244
244
|
Discovery posts?"
|
|
245
245
|
|
|
246
|
+
That scrape approval is single-use. Once the user approves it, do not replay
|
|
247
|
+
the source card or ask for the same approval again. Acknowledge the approval in
|
|
248
|
+
one sentence and call `import_leads` for the approved source immediately.
|
|
249
|
+
|
|
246
250
|
## Parallelism + Naming
|
|
247
251
|
|
|
248
252
|
Source selection is sequential by default. Start with the first recommended
|
|
@@ -485,6 +485,16 @@
|
|
|
485
485
|
"signal-discovery": "Approve scraping {selectedPostCount} Signal Discovery posts?",
|
|
486
486
|
"sales-nav": "Import the approved Sales Nav review batch",
|
|
487
487
|
"prospeo": "Import the approved Prospeo review batch"
|
|
488
|
+
},
|
|
489
|
+
"postApprovalContract": {
|
|
490
|
+
"singleUseApproval": true,
|
|
491
|
+
"doNotRepeatAfterApproval": [
|
|
492
|
+
"Source Recommendation",
|
|
493
|
+
"show_source_decision_card",
|
|
494
|
+
"ask_source_review_choice"
|
|
495
|
+
],
|
|
496
|
+
"requiredNextActionAfterApproval": "acknowledge in one sentence, then call import_leads immediately",
|
|
497
|
+
"signalDiscoveryNextTool": "import_leads({ campaignOfferId, provider: \"signal-discovery\", targetEngagerCount, maxPostsToScrape, confirmed: true })"
|
|
488
498
|
}
|
|
489
499
|
}
|
|
490
500
|
],
|
|
@@ -925,12 +935,24 @@
|
|
|
925
935
|
"messageDraftRecommendation"
|
|
926
936
|
],
|
|
927
937
|
"requiredVisibleLabels": [
|
|
928
|
-
"
|
|
929
|
-
"
|
|
938
|
+
"## Message Template",
|
|
939
|
+
"## Rendered Example",
|
|
940
|
+
"Good token fill:",
|
|
930
941
|
"My take:",
|
|
931
|
-
"Concern:",
|
|
932
942
|
"Question: approve-message or revise-messaging?",
|
|
933
943
|
"Recommendation:"
|
|
944
|
+
],
|
|
945
|
+
"doNotShowByDefault": [
|
|
946
|
+
"Token Notes",
|
|
947
|
+
"Good omit / fallback",
|
|
948
|
+
"Bad fill to avoid",
|
|
949
|
+
"Token Adherence Table"
|
|
950
|
+
],
|
|
951
|
+
"internalPersistenceOnly": [
|
|
952
|
+
"Token Fill Rules",
|
|
953
|
+
"Token Fill Examples",
|
|
954
|
+
"fallback guidance",
|
|
955
|
+
"bad-fill avoidance notes"
|
|
934
956
|
]
|
|
935
957
|
},
|
|
936
958
|
{
|
|
@@ -31,8 +31,11 @@ instead of pulling the long prompt into the main thread.
|
|
|
31
31
|
local markdown/json artifacts in normal customer runs; emit debug artifacts
|
|
32
32
|
only when the parent explicitly asks for debug/UAT output.
|
|
33
33
|
5. Render the customer-facing message review in chat before asking for approval.
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
Keep chat lightweight: show the tokenized template and one strong rendered
|
|
35
|
+
good-fill example only. Do not print the token notes table, omit/fallback
|
|
36
|
+
example, or bad-fill analysis in chat unless the user explicitly asks.
|
|
37
|
+
After approval, the parent persists template, token rules, fallback guidance,
|
|
38
|
+
and bad-fill avoidance notes into campaign state with `update_campaign_brief`.
|
|
36
39
|
6. Ask exactly `approve-message` or `revise-messaging`. Do not import, queue,
|
|
37
40
|
attach sequence, or start before `approve-message`.
|
|
38
41
|
|
|
@@ -89,10 +92,17 @@ but the [topic] thread felt close enough to send`. Otherwise omit the
|
|
|
89
92
|
- If the message is plausible but not ready to send, set
|
|
90
93
|
`Recommendation: revise-messaging`.
|
|
91
94
|
|
|
95
|
+
## Internal Message Recommendation
|
|
96
|
+
|
|
97
|
+
The message scout or parent safety gate should still produce complete internal
|
|
98
|
+
review data: token-fill rules, one rendered omit/fallback example, and bad-fill
|
|
99
|
+
avoidance notes. This data is for campaign-brief persistence and safety checks,
|
|
100
|
+
not for the default chat approval packet.
|
|
101
|
+
|
|
92
102
|
## Customer-Facing Message Review
|
|
93
103
|
|
|
94
104
|
Render this in chat before asking. Use Markdown structure so the approval target
|
|
95
|
-
is visually scannable:
|
|
105
|
+
is visually scannable and low-overhead:
|
|
96
106
|
|
|
97
107
|
````markdown
|
|
98
108
|
Status: message-review
|
|
@@ -111,33 +121,11 @@ Status: message-review
|
|
|
111
121
|
{{tokenized_message_body}}
|
|
112
122
|
```
|
|
113
123
|
|
|
114
|
-
## Rendered
|
|
115
|
-
|
|
116
|
-
### Good token fill
|
|
117
|
-
|
|
118
|
-
Use when the row has a clean, supported fill.
|
|
119
|
-
|
|
120
|
-
```text
|
|
121
|
-
Subject: ...
|
|
122
|
-
|
|
123
|
-
Hey First,
|
|
124
|
-
|
|
125
|
-
...
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
### Good omit / fallback
|
|
129
|
-
|
|
130
|
-
Use when a row signal or company context is missing, weak, or awkward.
|
|
131
|
-
|
|
132
|
-
```text
|
|
133
|
-
Subject: ...
|
|
134
|
-
|
|
135
|
-
Hey First,
|
|
124
|
+
## Rendered Example
|
|
136
125
|
|
|
137
|
-
|
|
138
|
-
```
|
|
126
|
+
### Example
|
|
139
127
|
|
|
140
|
-
|
|
128
|
+
Good token fill:
|
|
141
129
|
|
|
142
130
|
```text
|
|
143
131
|
Subject: ...
|
|
@@ -147,14 +135,6 @@ Hey First,
|
|
|
147
135
|
...
|
|
148
136
|
```
|
|
149
137
|
|
|
150
|
-
**Why this is wrong:** one sentence naming the exact token-fill failure.
|
|
151
|
-
|
|
152
|
-
## Token Notes
|
|
153
|
-
|
|
154
|
-
| Token | Use when | Fallback |
|
|
155
|
-
| ---------------- | ------------------------ | -------- |
|
|
156
|
-
| `{{first_name}}` | Clean first name exists. | `there` |
|
|
157
|
-
|
|
158
138
|
## Recommendation
|
|
159
139
|
|
|
160
140
|
**My take:** ...
|
|
@@ -168,15 +148,13 @@ Hey First,
|
|
|
168
148
|
|
|
169
149
|
Formatting requirements:
|
|
170
150
|
|
|
171
|
-
- Put the tokenized template and
|
|
151
|
+
- Put the tokenized template and rendered example in fenced `text` blocks
|
|
172
152
|
so chat gives them a distinct background.
|
|
173
|
-
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
none found`.
|
|
179
|
-
- Use a token notes table, not paragraph-only token notes.
|
|
153
|
+
- The chat example must contain a complete rendered subject + body, not a
|
|
154
|
+
bullet list of token names or a single bridge-line fragment.
|
|
155
|
+
- Do not show `Good omit / fallback`, `Bad fill to avoid`, or `Token Notes` in
|
|
156
|
+
the default chat approval packet. Keep those in the internal recommendation
|
|
157
|
+
and persist them to the campaign brief after approval.
|
|
180
158
|
- Keep reasoning outside the code blocks so the blocks are easy to inspect and
|
|
181
159
|
approve.
|
|
182
160
|
|
|
@@ -57,7 +57,7 @@ Supported branches:
|
|
|
57
57
|
list from the approved source-capacity plan; it is not the same target as the
|
|
58
58
|
default 25-row campaign review batch.
|
|
59
59
|
- **Supplied LinkedIn profile CSV** — confirm `load_csv_linkedin_leads` only
|
|
60
|
-
after
|
|
60
|
+
after the user approves that supplied-list source. Batch/materialize the
|
|
61
61
|
uploaded CSV into a Sellable lead-list table. Persist the returned
|
|
62
62
|
`leadListId`, then import the bounded review batch into the campaign table
|
|
63
63
|
with
|
|
@@ -219,8 +219,10 @@ cannot scale further without a new source lane.
|
|
|
219
219
|
- Zero-imported + zero-skipped ⇒ hard-fail escalate.
|
|
220
220
|
- Zero-imported + high-skipped ⇒ lane-exhausted operator notice (NOT a
|
|
221
221
|
silent proceed).
|
|
222
|
-
- `import_leads` is
|
|
223
|
-
|
|
222
|
+
- `import_leads` is allowed immediately after the concrete source-action
|
|
223
|
+
approval. It materializes the source list and then `confirm_lead_list` imports
|
|
224
|
+
only the bounded review batch. Enrichment, fit scoring, and message cells wait
|
|
225
|
+
for saved rubrics plus the approved message set.
|
|
224
226
|
- Step 13 MUST reuse an approved source already attached with `campaignOfferId`
|
|
225
227
|
before `import_leads`; it does not replay provider searches.
|
|
226
228
|
- `import_leads` is NOT called again in Step 14 (validate-sample). Full
|