@sellable/install 0.1.88 → 0.1.90
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.
|
@@ -17,14 +17,22 @@ Use the inherited Sellable MCP tools when available:
|
|
|
17
17
|
- `search_signals` to find recent post lanes. Include `campaignOfferId` whenever
|
|
18
18
|
the parent provides one so selected searches/lists stay attached to the
|
|
19
19
|
campaign.
|
|
20
|
-
- `
|
|
20
|
+
- `select_promising_posts` to promote the exact posts you will sample into the
|
|
21
|
+
campaign UI before fetching engagers. In campaign-attached runs, do this
|
|
22
|
+
before the first `fetch_post_engagers` call so the user can see which posts
|
|
23
|
+
are being sampled.
|
|
24
|
+
- `fetch_post_engagers` to sample engagers from promoted/selected posts.
|
|
21
25
|
|
|
22
26
|
Process:
|
|
23
27
|
|
|
24
28
|
1. Read the campaign brief, kickoff doc, or lane prompt supplied by the parent.
|
|
25
29
|
2. Search 3-5 keyword/topic lanes, favoring fresh posts from the last 7-14 days.
|
|
26
|
-
3. Select 3-5 promising posts when available.
|
|
27
|
-
|
|
30
|
+
3. Select 3-5 promising posts when available. If a `campaignOfferId` was
|
|
31
|
+
supplied, call `select_promising_posts({ campaignOfferId, selectionMode:
|
|
32
|
+
"replace", selections, headlineICPCriteria, currentStep:
|
|
33
|
+
"signal-discovery" })` before sampling so the watched Signal Discovery table
|
|
34
|
+
shows the promoted posts.
|
|
35
|
+
4. Fetch or sample engagers for promoted posts and score rough ICP fit from visible headline/display-name cues only. Do not enrich people during viability estimation.
|
|
28
36
|
5. Estimate usable prospects per selected post from sampled pass rate. If the sample is good but volume is low, say how many more similar posts should be added or scraped.
|
|
29
37
|
6. Return false positives and dead ends explicitly.
|
|
30
38
|
|
package/bin/sellable-install.mjs
CHANGED
|
@@ -601,6 +601,12 @@ data, compare sources by source volume, sampled ICP fit, activity/warmth
|
|
|
601
601
|
signals, cleanup risk, and confidence basis. If a user asks for a forecast,
|
|
602
602
|
label it explicitly as not estimated from this run.
|
|
603
603
|
|
|
604
|
+
For campaign-attached Signal Discovery sampling, promote/select the exact posts
|
|
605
|
+
with \`select_promising_posts\` before \`fetch_post_engagers\` so the user can see
|
|
606
|
+
which posts are being sampled in the watched app. The watch guide should say
|
|
607
|
+
that we are pulling sample engagers from these posts to confirm the ICP is
|
|
608
|
+
actually engaging and the source is viable.
|
|
609
|
+
|
|
604
610
|
Every approval gate must include live campaign access after the readable inline
|
|
605
611
|
content. Show a \`Watch link:\` line once the campaign shell exists. In normal
|
|
606
612
|
customer runs, do not show local draft filenames or filesystem paths unless the
|
|
@@ -611,45 +617,42 @@ Never mention MCP namespaces, prompt chunking, plugin cache paths, missing
|
|
|
611
617
|
linked skill versions, runbooks, or local skill files in normal customer-facing
|
|
612
618
|
copy.
|
|
613
619
|
|
|
614
|
-
## Codex Watch
|
|
615
|
-
|
|
616
|
-
When a campaign tool returns \`watchUrl\`, treat it as an active browser handoff,
|
|
617
|
-
not only a URL to print. A valid handoff link must be a signed
|
|
618
|
-
\`/auth/continue?token=...&redirect=/campaign-builder/{campaignId}?mode=claude\`
|
|
619
|
-
URL. \`create_campaign.watchUrl\`, \`create_campaign({ campaignId }).watchUrl\`,
|
|
620
|
-
and \`get_campaign.watchUrl\` are all acceptable only when they return that signed
|
|
621
|
-
shape.
|
|
622
|
-
|
|
623
|
-
In Codex Desktop, when in-app browser control is available, open the returned watch link on the user's behalf. After opening it, inspect the browser-visible campaign state, then explain what the user is seeing before continuing with more campaign tools. Use customer language such as:
|
|
620
|
+
## Codex Watch Link Handoff
|
|
624
621
|
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
622
|
+
When a campaign tool returns \`watchUrl\`, treat it as a user-opened app link, not
|
|
623
|
+
as permission to drive the browser. A valid handoff link must be a direct
|
|
624
|
+
\`/campaign-builder/{campaignId}?mode=claude|codex\` URL with the auth token and
|
|
625
|
+
workspace routing needed for auto-login. \`create_campaign.watchUrl\`,
|
|
626
|
+
\`create_campaign({ campaignId }).watchUrl\`, and \`get_campaign.watchUrl\` are all
|
|
627
|
+
acceptable only when they return that direct campaign-builder shape.
|
|
628
628
|
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
\`get_campaign_navigation_state\` orientation checks.
|
|
633
|
-
Use this fallback shape:
|
|
629
|
+
Never call browser-opening tools, shell \`open\`, Computer Use, or in-app browser
|
|
630
|
+
automation just because a watch link exists. Print the link and tell the user to
|
|
631
|
+
Command-Enter/click it when they want to watch in the app. Use this shape:
|
|
634
632
|
|
|
635
633
|
\`\`\`text
|
|
636
634
|
Watch link: {watchUrl}
|
|
637
635
|
|
|
638
|
-
|
|
639
|
-
here as I build.
|
|
636
|
+
Command-Enter or click that link to watch the campaign in Sellable. I’ll keep
|
|
637
|
+
the brief, lead source, and message-review steps explicit here as I build.
|
|
640
638
|
\`\`\`
|
|
641
639
|
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
with \`create_campaign({ campaignId })\` or \`get_campaign
|
|
645
|
-
Do not claim the browser was opened, inspected, or
|
|
646
|
-
|
|
647
|
-
unless it was opened and observed.
|
|
640
|
+
The watch link should auto-login through the token in the URL. If the user says
|
|
641
|
+
the link lands on auth, 404, permission, blank, or a visible error state, recover
|
|
642
|
+
a fresh watch link once with \`create_campaign({ campaignId })\` or \`get_campaign\`
|
|
643
|
+
and print that link. Do not claim the browser was opened, inspected, or
|
|
644
|
+
synchronized.
|
|
648
645
|
|
|
649
646
|
After every \`update_campaign({ campaignId, currentStep })\`, use
|
|
650
647
|
\`get_campaign_navigation_state\` when available as a compact orientation check:
|
|
651
|
-
match the
|
|
652
|
-
state in one sentence, and only then continue. Sender selection belongs
|
|
648
|
+
match the saved campaign state to the expected watch-link step, explain the
|
|
649
|
+
current state in one sentence, and only then continue. Sender selection belongs
|
|
650
|
+
at Settings after message approval and 10-row validation. After message
|
|
651
|
+
validation, use Settings to help the user connect or select a LinkedIn sender.
|
|
652
|
+
Explain Slack reply review before launch. After sender selection, attach the
|
|
653
|
+
recommended sequence and move the watched UI to Send. Do not start the campaign
|
|
654
|
+
or trigger a live send unless the user explicitly confirms that launch action
|
|
655
|
+
outside UAT.
|
|
653
656
|
|
|
654
657
|
## Names To Use
|
|
655
658
|
|
package/package.json
CHANGED
|
@@ -134,6 +134,12 @@ claim they ran in parallel and do not surface install status to the customer. In
|
|
|
134
134
|
chat, call the downstream copy stage `message generation`;
|
|
135
135
|
`message-validation.md` is only an internal proof artifact.
|
|
136
136
|
|
|
137
|
+
For campaign-attached Signal Discovery sampling, promote/select the exact posts
|
|
138
|
+
with `select_promising_posts` before `fetch_post_engagers` so the user can see
|
|
139
|
+
which posts are being sampled in the watched app. The watch guide should say
|
|
140
|
+
that we are pulling sample engagers from these posts to confirm the ICP is
|
|
141
|
+
actually engaging and the source is viable.
|
|
142
|
+
|
|
137
143
|
After find-leads returns a lead source and the user approves it, use the same
|
|
138
144
|
registry pattern for the two post-lead branches. The create-campaign-v2 subskill
|
|
139
145
|
calls `get_post_find_leads_scout_registry`, then launches the returned
|
|
@@ -159,45 +165,42 @@ linked skill versions, runbooks, npm/package details, repo-local files, VPS or
|
|
|
159
165
|
browser automation limitations, or local skill files in normal customer-facing
|
|
160
166
|
copy.
|
|
161
167
|
|
|
162
|
-
## Codex Watch
|
|
168
|
+
## Codex Watch Link Handoff
|
|
163
169
|
|
|
164
|
-
When a campaign tool returns `watchUrl`, treat it as
|
|
165
|
-
|
|
166
|
-
`/campaign-builder/{campaignId}?mode=claude` URL
|
|
170
|
+
When a campaign tool returns `watchUrl`, treat it as a user-opened app link, not
|
|
171
|
+
as permission to drive the browser. A valid handoff link must be a direct
|
|
172
|
+
`/campaign-builder/{campaignId}?mode=claude|codex` URL with the auth token and
|
|
173
|
+
workspace routing needed for auto-login. `create_campaign.watchUrl`,
|
|
167
174
|
`create_campaign({ campaignId }).watchUrl`, and `get_campaign.watchUrl` are all
|
|
168
|
-
acceptable only when they return that direct campaign-builder shape
|
|
169
|
-
`workspaceId` used only as a safe routing hint when needed.
|
|
170
|
-
|
|
171
|
-
In Codex Desktop, when in-app browser control is available, open the returned watch link on the user's behalf. After opening it, inspect the browser-visible campaign state, then explain what the user is seeing before continuing with more campaign tools. Use customer language such as:
|
|
172
|
-
|
|
173
|
-
```text
|
|
174
|
-
I’ll open the campaign view and keep it in sync as I build.
|
|
175
|
-
```
|
|
175
|
+
acceptable only when they return that direct campaign-builder shape.
|
|
176
176
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
`get_campaign_navigation_state` orientation checks.
|
|
181
|
-
Use this fallback shape:
|
|
177
|
+
Never call browser-opening tools, shell `open`, Computer Use, or in-app browser
|
|
178
|
+
automation just because a watch link exists. Print the link and tell the user to
|
|
179
|
+
Command-Enter/click it when they want to watch in the app. Use this shape:
|
|
182
180
|
|
|
183
181
|
```text
|
|
184
182
|
Watch link: {watchUrl}
|
|
185
183
|
|
|
186
|
-
|
|
187
|
-
here as I build.
|
|
184
|
+
Command-Enter or click that link to watch the campaign in Sellable. I’ll keep
|
|
185
|
+
the brief, lead source, and message-review steps explicit here as I build.
|
|
188
186
|
```
|
|
189
187
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
`create_campaign({ campaignId })` or `get_campaign
|
|
193
|
-
claim the browser was opened, inspected, or
|
|
194
|
-
|
|
195
|
-
it was opened and observed.
|
|
188
|
+
The watch link should auto-login through the token in the URL. If the user says
|
|
189
|
+
the link lands on auth, 404, permission, blank, or a visible error state, recover
|
|
190
|
+
a fresh watch link once with `create_campaign({ campaignId })` or `get_campaign`
|
|
191
|
+
and print that link. Do not claim the browser was opened, inspected, or
|
|
192
|
+
synchronized.
|
|
196
193
|
|
|
197
194
|
After every `update_campaign({ campaignId, currentStep })`, use
|
|
198
195
|
`get_campaign_navigation_state` when available as a compact orientation check:
|
|
199
|
-
match the
|
|
200
|
-
state in one sentence, and only then continue. Sender selection belongs
|
|
196
|
+
match the saved campaign state to the expected watch-link step, explain the
|
|
197
|
+
current state in one sentence, and only then continue. Sender selection belongs
|
|
198
|
+
at Settings after message approval and 10-row validation. After message
|
|
199
|
+
validation, use Settings to help the user connect or select a LinkedIn sender.
|
|
200
|
+
Explain Slack reply review before launch. After sender selection, attach the
|
|
201
|
+
recommended sequence and move the watched UI to Send. Do not start the campaign
|
|
202
|
+
or trigger a live send unless the user explicitly confirms that launch action
|
|
203
|
+
outside UAT.
|
|
201
204
|
|
|
202
205
|
## Names To Use
|
|
203
206
|
|