@sellable/install 0.1.79 → 0.1.81

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.
@@ -611,6 +611,45 @@ Never mention MCP namespaces, prompt chunking, plugin cache paths, missing
611
611
  linked skill versions, runbooks, or local skill files in normal customer-facing
612
612
  copy.
613
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
+
614
653
  ## Names To Use
615
654
 
616
655
  Use these exact public names so Claude Code and Codex do not drift:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/install",
3
- "version": "0.1.79",
3
+ "version": "0.1.81",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {
@@ -158,6 +158,45 @@ Never mention MCP namespaces, prompt chunking, plugin cache paths, missing
158
158
  linked skill versions, runbooks, or local skill files in normal customer-facing
159
159
  copy.
160
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
+
161
200
  ## Names To Use
162
201
 
163
202
  Use these exact public names so Claude Code and Codex do not drift: