@sellable/install 0.1.78 → 0.1.80

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.
@@ -601,17 +601,55 @@ 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
- Every approval gate must include artifact access after the readable inline
605
- content. Show an \`Open artifacts:\` line with clickable markdown links using
606
- absolute paths when the host supports them, plus the plain path for CLI users.
607
- Do this for brief approval, lead-source approval/review, message review, and the
608
- final approval packet. The links are for deeper inspection; never use them as a
609
- substitute for showing the content in chat.
604
+ Every approval gate must include live campaign access after the readable inline
605
+ content. Show a \`Watch link:\` line once the campaign shell exists. In normal
606
+ customer runs, do not show local draft filenames or filesystem paths unless the
607
+ user asks for debug artifacts. The link is for deeper inspection; never use it
608
+ as a substitute for showing the content in chat.
610
609
 
611
610
  Never mention MCP namespaces, prompt chunking, plugin cache paths, missing
612
611
  linked skill versions, runbooks, or local skill files in normal customer-facing
613
612
  copy.
614
613
 
614
+ ## Codex Watch Browser Handoff
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:
624
+
625
+ \`\`\`text
626
+ I’ll open the campaign view and keep it in sync as I build.
627
+ \`\`\`
628
+
629
+ If browser control is unavailable, say so briefly and provide the watch link.
630
+ In VPS or other off-desktop Codex runs, this fallback is the expected handoff for
631
+ the local headed watch observer: make the signed link easy to copy/open, then
632
+ continue with explicit chat progress and \`get_campaign_navigation_state\`
633
+ orientation checks.
634
+ Use this fallback shape:
635
+
636
+ \`\`\`text
637
+ I can’t inspect the campaign browser from this Codex session, so I’ll keep the
638
+ chat steps explicit here. Watch link: {watchUrl}
639
+ \`\`\`
640
+
641
+ If opening the watch link lands on an auth, 404, permission, blank, or visible
642
+ error state, report only what is visible, recover a fresh signed watch link once
643
+ with \`create_campaign({ campaignId })\` or \`get_campaign\`, and try that link.
644
+ Do not claim the browser was opened, inspected, or synchronized unless the
645
+ visible browser state was actually observed. Do not claim the browser was opened
646
+ unless it was opened and observed.
647
+
648
+ After every \`update_campaign({ campaignId, currentStep })\`, use
649
+ \`get_campaign_navigation_state\` when available as a compact orientation check:
650
+ match the browser-visible step to the saved campaign state, explain the current
651
+ state in one sentence, and only then continue. Sender selection belongs at Settings after message approval and 10-row validation. Do not attach a sequence, start the campaign, or trigger a live send unless the user explicitly confirms that launch action outside UAT.
652
+
615
653
  ## Names To Use
616
654
 
617
655
  Use these exact public names so Claude Code and Codex do not drift:
@@ -960,10 +998,10 @@ approval should show who we are targeting, why they should care, the offer/CTA,
960
998
  proof, lead source hypothesis, message angle, risks/assumptions, and what
961
999
  happens after approval.
962
1000
 
963
- Every approval should also give the user a way to inspect the source artifact.
964
- After the readable inline content, include an \`Open artifacts:\` line with links
965
- or plain paths to the files behind the decision. The artifact links are a backup
966
- for inspection, not a replacement for showing the content in chat.
1001
+ Every approval should also give the user a way to inspect the live campaign.
1002
+ After the readable inline content, include a \`Watch link:\` line when a
1003
+ campaign shell exists. Local artifacts are optional debug/UAT diagnostics only;
1004
+ do not surface file paths or local draft filenames in normal customer runs.
967
1005
 
968
1006
  This applies especially to message approvals. Never ask someone to approve a
969
1007
  message they cannot see. Show the subject, tokenized template, a filled sample
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/install",
3
- "version": "0.1.78",
3
+ "version": "0.1.80",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {
@@ -66,10 +66,10 @@ allowed-tools:
66
66
 
67
67
  Use this as the customer-facing entrypoint for Sellable campaign creation.
68
68
 
69
- CampaignOffer state is canonical; disk artifacts are a debug trail. The
70
- internal create-campaign-v2 flow still writes the diagnostics, and all 14 disk
71
- artifacts remain as debug outputs, but resume, gating, and handoff read campaign
72
- state first. The
69
+ CampaignOffer state and the watch link are the customer-facing source of truth.
70
+ Disk artifacts are optional debug/UAT diagnostics; normal customer runs should
71
+ not create, link, or surface local draft files unless the user explicitly asks
72
+ for them. Resume, gating, and handoff read campaign state first. The
73
73
  watchable campaign exists after the short brief; lead import is bounded to the
74
74
  first review batch, and enrichment/message generation waits until rubrics and
75
75
  the approved message template are saved on the campaign.
@@ -147,18 +147,56 @@ Use rendered Markdown for user review surfaces, not fenced code blocks. Keep
147
147
  lines short, use indexed section labels and bullets, and translate internal
148
148
  sourcing terms into plain language.
149
149
 
150
- Every approval gate must include artifact access after the readable inline
151
- content. Show a short `Open artifact:` line with the one key clickable markdown
152
- link for that stage. Do not show raw filesystem paths unless links cannot be
153
- created or the user asks. Do this for brief approval, lead-source
154
- approval/review, lead-filter review, and message review.
155
- The link is for deeper inspection; never use it as a substitute for showing the
156
- content in chat.
150
+ Every approval gate must include live campaign access after the readable inline
151
+ content. Show a short `Watch link:` line once the campaign shell exists. In
152
+ normal customer runs, do not show `Open artifact:` lines, raw filesystem paths,
153
+ or local draft filenames. Local artifacts are debug/UAT-only unless the user asks
154
+ for them. The link is for deeper inspection; never use it as a substitute for
155
+ showing the content in chat.
157
156
 
158
157
  Never mention MCP namespaces, prompt chunking, plugin cache paths, missing
159
158
  linked skill versions, runbooks, or local skill files in normal customer-facing
160
159
  copy.
161
160
 
161
+ ## Codex Watch Browser Handoff
162
+
163
+ When a campaign tool returns `watchUrl`, treat it as an active browser handoff,
164
+ not only a URL to print. A valid handoff link must be a signed
165
+ `/auth/continue?token=...&redirect=/campaign-builder/{campaignId}?mode=claude`
166
+ URL. `create_campaign.watchUrl`, `create_campaign({ campaignId }).watchUrl`,
167
+ and `get_campaign.watchUrl` are all acceptable only when they return that signed
168
+ shape.
169
+
170
+ 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:
171
+
172
+ ```text
173
+ I’ll open the campaign view and keep it in sync as I build.
174
+ ```
175
+
176
+ If browser control is unavailable, say so briefly and provide the watch link.
177
+ In VPS or other off-desktop Codex runs, this fallback is the expected handoff for
178
+ the local headed watch observer: make the signed link easy to copy/open, then
179
+ continue with explicit chat progress and `get_campaign_navigation_state`
180
+ orientation checks.
181
+ Use this fallback shape:
182
+
183
+ ```text
184
+ I can’t inspect the campaign browser from this Codex session, so I’ll keep the
185
+ chat steps explicit here. Watch link: {watchUrl}
186
+ ```
187
+
188
+ If opening the watch link lands on an auth, 404, permission, blank, or visible
189
+ error state, report only what is visible, recover a fresh signed watch link once
190
+ with `create_campaign({ campaignId })` or `get_campaign`, and try that link. Do
191
+ not claim the browser was opened, inspected, or synchronized unless the visible
192
+ browser state was actually observed. Do not claim the browser was opened unless
193
+ it was opened and observed.
194
+
195
+ After every `update_campaign({ campaignId, currentStep })`, use
196
+ `get_campaign_navigation_state` when available as a compact orientation check:
197
+ match the browser-visible step to the saved campaign state, explain the current
198
+ state in one sentence, and only then continue. Sender selection belongs at Settings after message approval and 10-row validation. Do not attach a sequence, start the campaign, or trigger a live send unless the user explicitly confirms that launch action outside UAT.
199
+
162
200
  ## Names To Use
163
201
 
164
202
  Use these exact public names so Claude Code and Codex do not drift:
@@ -503,9 +541,16 @@ updates.
503
541
  `message-validation.md` proves the message-review safety-gate workflow ran,
504
542
  `message-review.md` approves the template, rubrics are saved, and the
505
543
  approved message set is synced into the campaign brief.
506
- 6. Keep `selectedLeadListId` as the source list and `workflowTableId` as the
544
+ 6. The main thread owns watch navigation. Call
545
+ `mcp__sellable__update_campaign({ campaignId, currentStep })` before major
546
+ visible work so the user can watch progress in the app: `create-offer` for
547
+ the brief, `pick-provider` or the selected provider step while sourcing,
548
+ `filter-choice` after the 10-row review batch, `messages` or
549
+ `auto-execute-messaging` for message work, `validate-sample` for validation,
550
+ and `awaiting-user-greenlight` for Settings. Do not advance the step backward.
551
+ 7. Keep `selectedLeadListId` as the source list and `workflowTableId` as the
507
552
  campaign table. Do not use disk files as the post-mint source of truth.
508
- 7. Do not ask the user to run another command.
553
+ 8. Do not ask the user to run another command.
509
554
 
510
555
  ## Fallback
511
556