@sellable/install 0.1.103 → 0.1.105

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.
@@ -61,9 +61,9 @@ Return the following to the parent thread:
61
61
  choice, and rubric/filter basis when present
62
62
  - output timestamp/hash and any retry/error detail
63
63
 
64
- Write `message-validation.md`, `message-prep.md`, or
65
- `message-candidate-drafts.md` only when the parent explicitly asks for debug
66
- artifacts. Normal live campaign runs can return the same content directly.
64
+ Do not write local markdown/json artifacts in normal live campaign runs. Return
65
+ the recommendation directly to the parent thread. Emit debug artifacts only when
66
+ the parent explicitly asks for debug/UAT output.
67
67
 
68
68
  When reporting branch runtime proof, use this shape under
69
69
  `watchNarration.workerDetails.messageDraftBuilder`:
@@ -136,3 +136,47 @@ Return a concise status with:
136
136
  - one rendered omit/fallback sample
137
137
  - quality-gate pass/fail summary
138
138
  - whether final template review is ready or needs revision
139
+
140
+ When the parent will show the recommendation in chat, format the customer-facing
141
+ message review as Markdown with distinct copy blocks:
142
+
143
+ ````markdown
144
+ ## Message Template
145
+
146
+ **Subject**
147
+
148
+ ```text
149
+ {{tokenized_subject}}
150
+ ```
151
+
152
+ **Body**
153
+
154
+ ```text
155
+ {{tokenized_message_body}}
156
+ ```
157
+
158
+ ## Rendered Examples
159
+
160
+ ### Good token fill
161
+
162
+ ```text
163
+ Subject: ...
164
+
165
+ Hey First,
166
+
167
+ ...
168
+ ```
169
+
170
+ ### Good omit / fallback
171
+
172
+ ```text
173
+ Subject: ...
174
+
175
+ Hey First,
176
+
177
+ ...
178
+ ```
179
+ ````
180
+
181
+ Use a table for token rules. Keep explanations outside the fenced `text` blocks
182
+ so the user can quickly see exactly what copy is being approved.
@@ -168,7 +168,7 @@
168
168
  "optionalProducesArtifacts": [],
169
169
  "ownership": "lead quality, false-positive patterns, keep/exclude rules, ability-to-pay checks, and production rubric translation only",
170
170
  "codex": {
171
- "description": "Lead Fit Builder for campaign-backed lead filtering and rubric persistence after source approval.",
171
+ "description": "Lead Fit Builder for campaign-backed lead filtering and rubric persistence after review-batch import and filter approval.",
172
172
  "model": "gpt-5.5",
173
173
  "modelReasoningEffort": "high",
174
174
  "sandboxMode": "read-only",
@@ -179,7 +179,7 @@
179
179
  ]
180
180
  },
181
181
  "claude": {
182
- "description": "Use proactively as Lead Fit Builder after lead source approval to persist campaign rubrics from campaign state.",
182
+ "description": "Use proactively as Lead Fit Builder after review-batch import and filter approval to persist campaign rubrics from campaign state.",
183
183
  "model": "inherit",
184
184
  "background": true,
185
185
  "maxTurns": 8,
@@ -211,11 +211,7 @@
211
211
  "token fill rules",
212
212
  "rendered sample"
213
213
  ],
214
- "optionalProducesArtifacts": [
215
- "message-validation.md",
216
- "message-prep.md",
217
- "message-candidate-drafts.md"
218
- ],
214
+ "optionalProducesArtifacts": [],
219
215
  "ownership": "proof inventory, token strategy, angle drafting, skeptical-prospect review, and selected winner only",
220
216
  "codex": {
221
217
  "description": "Message Draft Builder for campaign-backed template proposals after confirm_lead_list imports a non-empty bounded review batch.",
@@ -40,7 +40,7 @@ function getMcpVersion() {
40
40
  } catch {}
41
41
  return "latest";
42
42
  }
43
- const CODEX_PLUGIN_VERSION = "0.1.31";
43
+ const CODEX_PLUGIN_VERSION = "0.1.32";
44
44
  const CODEX_PLUGIN_COMPAT_VERSIONS = [
45
45
  "0.1.8",
46
46
  "0.1.9",
@@ -630,8 +630,8 @@ clear business decisions, tradeoffs, and approval gates. Use product language:
630
630
  - "a couple setup choices", not \`request_user_input\`
631
631
  - "campaign brief", not prompt artifact
632
632
  - "lead source", not provider internals unless comparing source options
633
- - "I can create a draft shell for you to watch, but no leads import and nothing
634
- sends until you approve", not mutation jargon
633
+ - "I can create a draft shell for you to watch with approval gates before
634
+ sourcing", not mutation jargon
635
635
 
636
636
  When explaining lead-source decisions, show the concrete counts behind the
637
637
  logic: lanes searched, timeframe, raw result counts, finalist posts or preview
@@ -960,7 +960,7 @@ updates.
960
960
  supplemental approval checklist, not a replacement for the long prompt. Use
961
961
  campaign state, campaign brief content, selected source state, and imported
962
962
  review-batch rows as the source of truth; do not read stale local markdown,
963
- inspect the database directly, or synthesize \`message-validation.md\` from
963
+ inspect the database directly, or synthesize local validation artifacts from
964
964
  general knowledge.
965
965
  5. Create the campaign shell early with the v1 brief so the user can open the
966
966
  watch link and see useful setup state immediately. Import only the first
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/install",
3
- "version": "0.1.103",
3
+ "version": "0.1.105",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {
@@ -86,7 +86,7 @@ or tool discovery. Start in product language:
86
86
  ```text
87
87
  I’ll help you launch this as a Sellable campaign. First I’ll resolve the
88
88
  client/company this campaign is for, then I’ll turn that into a campaign brief
89
- before any leads are imported or anything can send.
89
+ before we move into lead sourcing.
90
90
  ```
91
91
 
92
92
  If a linked/local skill file is stale or missing, silently use the installed
@@ -102,8 +102,14 @@ clear business decisions, tradeoffs, and approval gates. Use product language:
102
102
  - "a couple setup choices", not `request_user_input`
103
103
  - "campaign brief", not prompt artifact
104
104
  - "lead source", not provider internals unless comparing source options
105
- - "I can create a draft shell for you to watch, but no leads import and nothing
106
- sends until you approve", not mutation jargon
105
+ - "I can create a draft shell for you to watch with approval gates before
106
+ sourcing", not mutation jargon
107
+
108
+ Approval and safety copy should be tasteful. State what the current approval
109
+ covers once, in one short sentence, then move on. Do not append repeated
110
+ "nothing starts / no leads import / no sending" disclaimers to routine progress
111
+ updates. Use positive gate language like "Next gate: selected-post scrape" or
112
+ "Approval covers scouting/search only" instead of long negative lists.
107
113
 
108
114
  When explaining lead-source decisions, show the concrete counts behind the
109
115
  logic: lanes searched, timeframe, raw result counts, finalist posts or preview
@@ -127,7 +133,7 @@ authorizes scouting/search only. The gate should say:
127
133
  - why that lane fits the buyer, offer, and likely public activity
128
134
  - what will be tested next
129
135
  - the fallback lane if relevant posts or ICP engagement look thin
130
- - that approval authorizes scouting/search only, not lead import or sending
136
+ - what approval covers in one concise line
131
137
 
132
138
  Do not surface blanket source heuristics as product copy. Make the
133
139
  recommendation specific to the campaign. If Signal Discovery is recommended,
@@ -142,6 +148,20 @@ Signal Discovery, name how many selected posts will be scraped, the target
142
148
  engager/source-candidate volume, and the bounded review-batch size. For Sales
143
149
  Nav or Prospeo, name the specific approved import lane. Do not call
144
150
  `import_leads` or `confirm_lead_list` until this second approval is granted.
151
+ For Signal Discovery, the customer-facing approval card must use the exact
152
+ action shape "Approve scraping N Signal Discovery posts?" and the chat summary
153
+ should be a compact `## Source Recommendation` block with:
154
+
155
+ - goal: about 300 good-fit prospects after cleanup, enrichment, and filters
156
+ - working assumption: about 15% of raw post engagers become good-fit prospects
157
+ - engagers needed: about 2,000 raw engagers
158
+ - a selected-post table with post author/topic, why it fits, and visible
159
+ engagement
160
+ - total visible pool and estimated good-fit pool
161
+ - first pass: build the source list, then import only 15 leads into the review
162
+ batch
163
+ - fallback: switch to Sales Nav recent activity if the review batch is
164
+ vendor-heavy, agency-heavy, or off-ICP
145
165
 
146
166
  When the user has not supplied a source and multiple source angles are viable,
147
167
  scout those angles as independent branches when the host can actually do it:
@@ -159,8 +179,8 @@ The create-campaign-v2 subskill calls `get_source_scout_registry` before
159
179
  dispatch so the current registry, not this copy, is the runtime source of truth.
160
180
  If the host runs them sequentially or the named agents are unavailable, do not
161
181
  claim they ran in parallel and do not surface install status to the customer. In
162
- chat, call the downstream copy stage `message generation`;
163
- `message-validation.md` is only an internal proof artifact.
182
+ chat, call the downstream copy stage `message generation`; message validation is
183
+ only an internal approval proof.
164
184
 
165
185
  For campaign-attached Signal Discovery sampling, promote/select the exact posts
166
186
  with `select_promising_posts` before `fetch_post_engagers` so the user can see
@@ -168,19 +188,17 @@ which posts are being sampled in the watched app. The watch guide should say
168
188
  that we are pulling sample engagers from these posts to confirm the ICP is
169
189
  actually engaging and the source is viable.
170
190
 
171
- After find-leads returns a lead source and the user approves it, use the same
172
- registry pattern for the two post-lead branches. The create-campaign-v2 subskill
173
- calls `get_post_find_leads_scout_registry`, then launches the returned
174
- filter-leads scout and message-generation scout together when real subagents are
175
- available and the current session exposes the returned names. Message
176
- generation is the provisional Message Draft Builder: it may start after the
177
- review batch exists, including while the user is on filter choice, but workflow
178
- cell execution must wait. After rubrics are saved, do not queue enrichment,
179
- filtering, or Generate Message cells until the user approves the message
180
- template. AI Generated is an explicit opt-out that cancels or ignores the
181
- background template draft. If the post-lead agents are absent, the main thread
182
- still orchestrates the same branches from the compact context with MCP
183
- tools/assets.
191
+ After the bounded review batch exists, use the same registry pattern for
192
+ post-lead work. The create-campaign-v2 subskill calls
193
+ `get_post_find_leads_scout_registry`, then launches the returned
194
+ message-generation scout immediately when real subagents are available and the
195
+ current session exposes the returned name. If the user chooses filters, launch
196
+ the filter-leads scout then and join it with the already-running or completed
197
+ message draft before message review. Workflow cell execution still waits for
198
+ filter and template approval. AI Generated is an explicit opt-out that cancels
199
+ or ignores the background template draft. If the post-lead agents are absent,
200
+ the main thread still orchestrates the same branches from the compact context
201
+ with MCP tools/assets.
184
202
 
185
203
  Use rendered Markdown for user review surfaces, not fenced code blocks. Keep
186
204
  lines short, use indexed section labels and bullets, and translate internal
@@ -412,7 +430,7 @@ First I’ll resolve the client/company this campaign is for. I’ll use that
412
430
  context to choose the target, offer, proof, and lead source.
413
431
 
414
432
  Then I’ll turn that into a campaign brief for you to approve before any leads
415
- are imported or anything can send.
433
+ are sourced.
416
434
  ```
417
435
 
418
436
  Do not silently ask Codex intake or approval questions as plain chat when
@@ -597,7 +615,7 @@ updates.
597
615
  supplemental approval checklist, not a replacement for the long prompt. Use
598
616
  campaign state, campaign brief content, selected source state, and imported
599
617
  review-batch rows as the source of truth; do not read stale local markdown,
600
- inspect the database directly, or synthesize `message-validation.md` from
618
+ inspect the database directly, or synthesize local validation artifacts from
601
619
  general knowledge.
602
620
  5. Create the campaign shell early with the v1 brief so the user can open the
603
621
  watch link and see useful setup state immediately. Import only the first
@@ -609,9 +627,11 @@ updates.
609
627
  call `mcp__sellable__update_campaign({ campaignId, enableICPFilters: true, currentStep: "create-icp-rubric", watchNarration })`
610
628
  so the watched app moves to Filter Rules while rubrics are drafted/saved.
611
629
  After rubrics save, move the watched app to `apply-icp-rubric` / Filter
612
- Leads and say the fit rules are saved; approve the message template next;
613
- after approval, queue the bounded review-batch
614
- `enrichCellId` cells to kick off enrichment/filtering.
630
+ Leads and say the fit rules are saved; approve the message template next
631
+ while the browser stays on Filter Leads. After approval, save the template
632
+ to the campaign brief, then queue the bounded review-batch `enrichCellId`
633
+ cells to kick off enrichment/filtering. Move to Messages only after at
634
+ least one review row passes and Generate Message cells are running or ready.
615
635
  Product Generate Message cells must not run from the background template
616
636
  path before that template/token approval.
617
637
  Do not ask the user to approve the brief before shell creation unless they
@@ -621,14 +641,14 @@ updates.
621
641
  visible work so the user can watch progress in the app: `create-offer` for
622
642
  the brief, `pick-provider` or the selected provider step while sourcing,
623
643
  `filter-choice` after the 15-row review batch, `create-icp-rubric` as soon
624
- as filters are approved, `apply-icp-rubric` after rubrics save, `messages`
625
- for the Use Template / AI Generated mode
626
- choice, `auto-execute-messaging` for approved
627
- message work or the product's AI-generated path, `awaiting-user-greenlight`
628
- for the final handoff, `settings` for sender selection, `sequence` after
629
- sender attach, and `send` once the recommended sequence is attached.
630
- `validate-sample` is recovery/legacy only if reached. Do not advance the
631
- step backward.
644
+ as filters are approved, `apply-icp-rubric` after rubrics save and while
645
+ waiting for message-template approval, `validate-sample` while the approved
646
+ template unlocks bounded enrichment/filter scoring on Filter Leads,
647
+ `auto-execute-messaging` after at least one row passes and review-batch
648
+ messages are being generated or reviewed, `awaiting-user-greenlight` only
649
+ after generated review-batch messages are approved, `settings` for sender
650
+ selection, `sequence` after sender attach, and `send` once the recommended
651
+ sequence is attached. Do not advance the step backward.
632
652
  7. Keep `selectedLeadListId` as the source list and `workflowTableId` as the
633
653
  campaign table. Do not use disk files as the post-mint source of truth.
634
654
  8. Do not ask the user to run another command.