@sellable/install 0.1.146 → 0.1.147

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.
@@ -811,14 +811,18 @@ copy.
811
811
  ## Codex Watch Link Handoff
812
812
 
813
813
  When a campaign tool returns \`watchUrl\`, treat it as a user-opened app link, not
814
- as permission to drive the browser. A valid handoff link must be a direct
815
- \`/campaign-builder/{campaignId}?mode=claude|codex\` URL with the auth token and
816
- workspace routing needed for auto-login. \`create_campaign.watchUrl\`,
814
+ as permission to drive the browser. A valid first handoff link must be the exact
815
+ \`create_campaign.watchUrl\` value: a direct
816
+ \`/campaign-builder/{campaignId}?mode=claude|codex\` URL with \`workspaceId\` and
817
+ \`token\` query parameters for auto-login. \`create_campaign.watchUrl\`,
817
818
  \`create_campaign({ campaignId }).watchUrl\`, and \`get_campaign.watchUrl\` are all
818
- acceptable only when they return that direct campaign-builder shape.
819
+ acceptable only when they return that direct campaign-builder shape. Never
820
+ derive, shorten, reconstruct, or print a bare \`/campaign-builder/{campaignId}\`
821
+ URL.
819
822
 
820
823
  Never call browser-opening tools, shell \`open\`, Computer Use, or in-app browser
821
- automation just because a watch link exists. Print the link in this shape:
824
+ automation just because a watch link exists. Print the first watch link exactly
825
+ once, directly before the brief approval question, in this shape:
822
826
 
823
827
  \`\`\`text
824
828
  Campaign shell is ready. We'll keep building the campaign in this chat.
@@ -835,6 +839,9 @@ the link lands on auth, 404, permission, blank, or a visible error state, recove
835
839
  a fresh watch link once with \`create_campaign({ campaignId })\` or \`get_campaign\`
836
840
  and print that link. Do not claim the browser was opened, inspected, or
837
841
  synchronized.
842
+ Do not print another \`Watch link:\` line during source/provider selection or
843
+ normal approval turns unless the user explicitly asks for the link or you are
844
+ recovering a missing/broken URL.
838
845
 
839
846
  After every \`update_campaign({ campaignId, currentStep })\`, use
840
847
  \`get_campaign_navigation_state\` when available as a compact orientation check:
@@ -1011,13 +1018,15 @@ recommendation; you can replace it with your current offer."
1011
1018
  Before the identity gate, use this customer-facing shape:
1012
1019
 
1013
1020
  \`\`\`text
1014
- I’m ready to build the campaign in {workspace}.
1021
+ You're in {workspace}.
1015
1022
 
1016
- First I’ll research the person/company this campaign is for. I’ll use that
1017
- context to recommend a target, offer, proof, and lead source, then you can
1018
- correct anything stale before I build from it.
1023
+ Excited to help you launch your LinkedIn outbound campaign.
1019
1024
 
1020
- Then I’ll turn that into a campaign brief for you to approve before anything is created.
1025
+ We're at setup: first I'll use your LinkedIn profile to understand the company,
1026
+ then I'll draft the campaign brief, help choose where to find buyers, review
1027
+ messages, and wait for final launch approval.
1028
+
1029
+ What's your LinkedIn profile URL or handle?
1021
1030
  \`\`\`
1022
1031
 
1023
1032
  Do not silently ask Codex intake or approval questions as plain chat when
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/install",
3
- "version": "0.1.146",
3
+ "version": "0.1.147",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {
@@ -306,14 +306,18 @@ copy.
306
306
  ## Codex Watch Link Handoff
307
307
 
308
308
  When a campaign tool returns `watchUrl`, treat it as a user-opened app link, not
309
- as permission to drive the browser. A valid handoff link must be a direct
310
- `/campaign-builder/{campaignId}?mode=claude|codex` URL with the auth token and
311
- workspace routing needed for auto-login. `create_campaign.watchUrl`,
309
+ as permission to drive the browser. A valid first handoff link must be the exact
310
+ `create_campaign.watchUrl` value: a direct
311
+ `/campaign-builder/{campaignId}?mode=claude|codex` URL with `workspaceId` and
312
+ `token` query parameters for auto-login. `create_campaign.watchUrl`,
312
313
  `create_campaign({ campaignId }).watchUrl`, and `get_campaign.watchUrl` are all
313
- acceptable only when they return that direct campaign-builder shape.
314
+ acceptable only when they return that direct campaign-builder shape. Never
315
+ derive, shorten, reconstruct, or print a bare `/campaign-builder/{campaignId}`
316
+ URL.
314
317
 
315
318
  Never call browser-opening tools, shell `open`, Computer Use, or in-app browser
316
- automation just because a watch link exists. Print the link in this shape:
319
+ automation just because a watch link exists. Print the first watch link exactly
320
+ once, directly before the brief approval question, in this shape:
317
321
 
318
322
  ```text
319
323
  Campaign shell is ready. We'll keep building the campaign in this chat.
@@ -335,6 +339,9 @@ Never print a placeholder watch link such as "Open campaign" or "link will
335
339
  update once the shell is created." If the shell is not created yet, call
336
340
  `create_campaign` first. If `create_campaign` does not return `watchUrl`, stop
337
341
  and surface the missing watch-link error before lead sourcing.
342
+ Do not print another `Watch link:` line during source/provider selection or
343
+ normal approval turns unless the user explicitly asks for the link or you are
344
+ recovering a missing/broken URL.
338
345
 
339
346
  After every `update_campaign({ campaignId, currentStep })`, use
340
347
  `get_campaign_navigation_state` when available as a compact orientation check:
@@ -556,14 +563,15 @@ the run. Treat YOLO as `interactionMode: "autonomous"` plus an intake policy:
556
563
  Before the identity gate, use this customer-facing shape:
557
564
 
558
565
  ```text
559
- I’m ready to build the campaign in {workspace}.
566
+ You're in {workspace}.
560
567
 
561
- First I’ll research the person/company this campaign is for. I’ll use that
562
- context to recommend a target, offer, proof, and lead source, then you can
563
- correct anything stale before I build from it.
568
+ Excited to help you launch your LinkedIn outbound campaign.
564
569
 
565
- Then I’ll turn that into a campaign brief for you to approve before any leads
566
- are sourced.
570
+ We're at setup: first I'll use your LinkedIn profile to understand the company,
571
+ then I'll draft the campaign brief, help choose where to find buyers, review
572
+ messages, and wait for final launch approval.
573
+
574
+ What's your LinkedIn profile URL or handle?
567
575
  ```
568
576
 
569
577
  Do not silently ask Codex intake or approval questions as plain chat when
@@ -688,26 +696,27 @@ updates.
688
696
  been written. Your IMMEDIATE next visible message branches on
689
697
  `isReturningUser` from the tool result:
690
698
 
691
- - If `isReturningUser === true`, prepend ONE line acknowledging the
692
- reused workspace, then the locked Step 3 narration verbatim
693
- (substituting `activeWorkspaceName` exactly):
699
+ - If `isReturningUser === true`, use `activeWorkspaceName` when present,
700
+ otherwise `activeWorkspaceId`, as `{workspaceLabel}`:
694
701
 
695
702
  ```text
696
- You're in {activeWorkspaceName} workspace, ready to roll.
697
- ```
703
+ You're in {workspaceLabel}.
698
704
 
699
- What is your LinkedIn profile URL or handle?
705
+ Excited to help you launch your LinkedIn outbound campaign. We're at setup: first I'll use your LinkedIn profile to understand the company, then I'll draft the campaign brief, help choose where to find buyers, review messages, and wait for final launch approval.
700
706
 
701
- ````
707
+ What's your LinkedIn profile URL or handle?
708
+ ```
702
709
 
703
- - If `isReturningUser === false`, prepend ONE line confirming the new
704
- workspace, then the locked Step 3 narration verbatim:
710
+ - If `isReturningUser === false`, use `activeWorkspaceName` when present,
711
+ otherwise `activeWorkspaceId`, as `{workspaceLabel}`:
705
712
 
706
- ```text
707
- You're set up your {activeWorkspaceName} workspace is ready.
713
+ ```text
714
+ You're set up in {workspaceLabel}.
715
+
716
+ Excited to help you launch your LinkedIn outbound campaign. We're at setup: first I'll use your LinkedIn profile to understand the company, then I'll draft the campaign brief, help choose where to find buyers, review messages, and wait for final launch approval.
708
717
 
709
- What is your LinkedIn profile URL or handle?
710
- ````
718
+ What's your LinkedIn profile URL or handle?
719
+ ```
711
720
 
712
721
  No other lines. No "all set", no "signed in", no other acknowledgement.
713
722