@sellable/install 0.1.97 → 0.1.99

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.
@@ -11,11 +11,14 @@ campaign state. The main thread owns approval and campaign writes.
11
11
  Use the live campaign inputs supplied by the parent thread:
12
12
 
13
13
  - `campaignId`
14
+ - campaign revision or `campaignUpdatedAt`
14
15
  - `campaignBrief` / campaign brief content model
15
16
  - selected source decision and provider state
16
17
  - `selectedLeadListId` or selected source list context
17
18
  - `workflowTableId`
18
- - imported review-batch rows from that selected list
19
+ - imported review-batch rows from that selected list, including row IDs and a
20
+ review-batch row hash when available
21
+ - filter basis at branch start: `pending`, `use-filters`, or `skip-filters`
19
22
  - any already-saved fit/rubric result summaries supplied by the parent
20
23
 
21
24
  Do not require or hunt for `brief.md`, `lead-review.md`, or `lead-sample.json`.
@@ -23,6 +26,13 @@ Those files are optional debug context only when the parent explicitly provides
23
26
  them. Never inspect the product database directly, never run `psql`, and never
24
27
  read stale local markdown files to reconstruct campaign state.
25
28
 
29
+ All live reads must come from scoped MCP/product tools by campaign and
30
+ workspace, such as `get_campaign`, `get_campaign_context`, and
31
+ `get_rows_minimal({ tableId: workflowTableId })`, or from equivalent parent
32
+ thread payloads. Reject the task as `blocked` if the campaign id, workspace,
33
+ `selectedLeadListId`, `workflowTableId`, or review-batch row ids do not match
34
+ the branch input.
35
+
26
36
  ## Required First Steps
27
37
 
28
38
  1. Load the full long-form generate-messages prompt:
@@ -45,11 +55,31 @@ Return the following to the parent thread:
45
55
  - one rendered good-fill sample for a plausible passing review-batch row
46
56
  - one omit/fallback sample when the row signal is not safe
47
57
  - pass/fail notes against the generate-messages quality gates
58
+ - compact runtime status: `ready`, `blocked`, `retry-needed`, or `stale`
59
+ - basis token containing campaign revision/updatedAt, brief hash,
60
+ `selectedLeadListId`, `workflowTableId`, review-batch row ids/hash, filter
61
+ choice, and rubric/filter basis when present
62
+ - output timestamp/hash and any retry/error detail
48
63
 
49
64
  Write `message-validation.md`, `message-prep.md`, or
50
65
  `message-candidate-drafts.md` only when the parent explicitly asks for debug
51
66
  artifacts. Normal live campaign runs can return the same content directly.
52
67
 
68
+ When reporting branch runtime proof, use this shape under
69
+ `watchNarration.workerDetails.messageDraftBuilder`:
70
+
71
+ - `statusSource`: `branch` or `parent-thread-fallback`
72
+ - `status`: `branch-running`, `fallback-active`, `spawn-failed`,
73
+ `fallback-superseded`, `branch-superseded`, `ready`, `blocked`,
74
+ `retry-needed`, or `stale`
75
+ - `runId` or `fallbackId`
76
+ - `startedAt` and `updatedAt`
77
+ - `basisToken` and `basis`
78
+ - optional `compactOutputRef`, `compactOutput`, and `error`
79
+
80
+ Do not tell the UI to show Message Draft Builder as running unless this proof
81
+ exists and points at the current non-empty bounded review batch.
82
+
53
83
  ## Hard Rules
54
84
 
55
85
  - Do not call product Generate Message cells. This worker drafts the template
@@ -225,10 +225,10 @@
225
225
  ],
226
226
  "ownership": "proof inventory, token strategy, angle drafting, skeptical-prospect review, and selected winner only",
227
227
  "codex": {
228
- "description": "Message Draft Builder for campaign-backed template proposals and sample messages after source approval.",
228
+ "description": "Message Draft Builder for campaign-backed template proposals after confirm_lead_list imports a non-empty bounded review batch.",
229
229
  "model": "gpt-5.5",
230
230
  "modelReasoningEffort": "high",
231
- "sandboxMode": "workspace-write",
231
+ "sandboxMode": "read-only",
232
232
  "nicknameCandidates": [
233
233
  "Message Draft Builder",
234
234
  "Draft Builder",
@@ -236,19 +236,17 @@
236
236
  ]
237
237
  },
238
238
  "claude": {
239
- "description": "Use proactively as Message Draft Builder after lead source approval to propose an approved-template candidate and sample message from campaign state.",
239
+ "description": "Use proactively as Message Draft Builder after confirm_lead_list imports a non-empty bounded review batch; load the full generate-messages prompt and draft only from scoped campaign/tool state.",
240
240
  "model": "inherit",
241
241
  "background": true,
242
242
  "maxTurns": 10,
243
243
  "color": "magenta",
244
244
  "tools": [
245
245
  "Read",
246
- "Write",
247
- "Edit",
248
- "Grep",
249
- "Glob",
250
246
  "mcp__sellable__get_subskill_prompt",
251
- "mcp__sellable__get_subskill_asset"
247
+ "mcp__sellable__get_campaign",
248
+ "mcp__sellable__get_campaign_context",
249
+ "mcp__sellable__get_rows_minimal"
252
250
  ]
253
251
  }
254
252
  }
@@ -8,9 +8,10 @@ Required first step:
8
8
  draft `campaignOfferId`, call `get_provider_prompt({ provider:
9
9
  "signal-discovery", campaignOfferId, confirmed: true })` and include that same
10
10
  `campaignOfferId` plus `currentStep: "signal-discovery"` in `search_signals`
11
- so the user can watch source work in the campaign UI. Treat that as a
12
- campaign-attached persisted search; do not run a post-mint search without the
13
- campaign ID. If no campaign ID is supplied, run campaignless preview mode.
11
+ so the owning search route can show the source lane with current find-leads
12
+ narration and user options. Treat that as a campaign-attached persisted
13
+ search; do not run a post-mint search without the campaign ID. If no campaign
14
+ ID is supplied, run campaignless preview mode.
14
15
 
15
16
  Use the inherited Sellable MCP tools when available:
16
17
 
@@ -44,6 +45,8 @@ sales Claude`; do not treat broad anchor-only lanes like `Claude Code`, `MCP`,
44
45
  campaignOfferId, selectionMode: "replace", selections, headlineICPCriteria,
45
46
  currentStep: "signal-discovery" })` before sampling so the watched Signal
46
47
  Discovery table shows the promoted posts and the exact posts being tested.
48
+ Do not move the campaign to `confirm-lead-list`; `import_leads` owns that
49
+ visible transition after source approval.
47
50
  6. Fetch or sample engagers for promoted posts and score rough ICP fit from
48
51
  visible headline/display-name cues only. Do not enrich people during
49
52
  viability estimation.
@@ -8,10 +8,12 @@ Required first step:
8
8
  draft `campaignOfferId`, call `get_provider_prompt({ provider: "prospeo",
9
9
  campaignOfferId, confirmed: true })` and include that same `campaignOfferId`
10
10
  plus `currentStep: "prospeo"` in `search_prospeo` so the user can watch source
11
- work in the campaign UI. If no campaign ID is supplied, run campaignless
12
- preview mode. Treat post-mint
11
+ work in the campaign UI with source-lane narration owned by the search route.
12
+ If no campaign ID is supplied, run campaignless preview mode. Treat post-mint
13
13
  searches with `campaignOfferId` as campaign-attached persisted search tabs;
14
14
  do not run a live campaign search without the campaign ID.
15
+ Do not move the campaign to `confirm-lead-list`; `import_leads` owns that
16
+ visible transition after source approval.
15
17
 
16
18
  Use the inherited Sellable MCP tools when available:
17
19
 
@@ -8,10 +8,12 @@ Required first step:
8
8
  draft `campaignOfferId`, call `get_provider_prompt({ provider: "sales-nav",
9
9
  campaignOfferId, confirmed: true })` and include that same `campaignOfferId` in
10
10
  `search_sales_nav` with `currentStep: "sales-nav"` so the user can watch
11
- source work in the campaign UI. If no campaign ID is supplied, run
12
- campaignless preview mode. Treat post-mint
11
+ source work in the campaign UI with source-lane narration owned by the search
12
+ route. If no campaign ID is supplied, run campaignless preview mode. Treat post-mint
13
13
  searches with `campaignOfferId` as campaign-attached persisted search tabs;
14
14
  do not run a live campaign search without the campaign ID.
15
+ Do not move the campaign to `confirm-lead-list`; `import_leads` owns that
16
+ visible transition after source approval.
15
17
 
16
18
  Use the inherited Sellable MCP tools when available:
17
19
 
@@ -509,7 +509,6 @@ const CREATE_CAMPAIGN_ALLOWED_TOOLS = [
509
509
  "mcp__sellable__get_provider_prompt",
510
510
  "mcp__sellable__get_source_scout_registry",
511
511
  "mcp__sellable__get_post_find_leads_scout_registry",
512
- "mcp__sellable__get_message_prompt",
513
512
  "mcp__sellable__get_active_workspace",
514
513
  "mcp__sellable__list_senders",
515
514
  "mcp__sellable__get_sender",
@@ -936,10 +935,11 @@ updates.
936
935
  watch link and see useful setup state immediately. Import only the first
937
936
  bounded review batch after the source is attached to the campaign; do not
938
937
  queue workflow cells, attach a sequence, or start until filter choice is
939
- resolved, Messages has shown Use Template / AI Generated, template/token
940
- rules are approved when Use Template is chosen, rubrics are saved and the
941
- bounded review-batch \`enrichCellId\` cells have been queued when filters are
942
- enabled, and the approved message set is synced into the campaign brief.
938
+ resolved, rubrics are saved when filters are enabled, template/token rules
939
+ are approved on the default Use Template path, and the approved message set
940
+ is synced into the campaign brief. After rubrics save, pause and say the fit
941
+ rules are saved; approve the message template next; after approval, queue the
942
+ bounded review-batch \`enrichCellId\` cells to kick off enrichment/filtering.
943
943
  Product Generate Message cells must not run from the background template
944
944
  path before that template/token approval. AI Generated uses the
945
945
  product's AI-generated path and cancels or ignores the background template
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/install",
3
- "version": "0.1.97",
3
+ "version": "0.1.99",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {
@@ -13,7 +13,6 @@ allowed-tools:
13
13
  - mcp__sellable__get_provider_prompt
14
14
  - mcp__sellable__get_source_scout_registry
15
15
  - mcp__sellable__get_post_find_leads_scout_registry
16
- - mcp__sellable__get_message_prompt
17
16
  - mcp__sellable__get_active_workspace
18
17
  - mcp__sellable__list_senders
19
18
  - mcp__sellable__get_sender
@@ -71,10 +70,11 @@ Disk artifacts are optional debug/UAT diagnostics; normal customer runs should
71
70
  not create, link, or surface local draft files unless the user explicitly asks
72
71
  for them. Resume, gating, and handoff read campaign state first. The
73
72
  watchable campaign exists after the short brief; lead import is bounded to the
74
- first review batch. After that, the user chooses whether to use filters or skip,
75
- then Messages first shows Use Template and AI Generated. The Message Draft
76
- Builder may work in the background, but template review waits for the filter
77
- path and an explicit Use Template choice.
73
+ first review batch. After that, the user chooses whether to use filters or skip.
74
+ When filters are chosen, save rubrics, then pause before queueing enrichment or
75
+ filtering: tell the user the fit rules are saved, the message template needs
76
+ approval next, and enrichment/filtering will start after that approval. Use
77
+ Template is the default message path; AI Generated is only an explicit opt-out.
78
78
 
79
79
  ## Opening Turn Contract
80
80
 
@@ -148,12 +148,13 @@ calls `get_post_find_leads_scout_registry`, then launches the returned
148
148
  filter-leads scout and message-generation scout together when real subagents are
149
149
  available and the current session exposes the returned names. Message
150
150
  generation is the provisional Message Draft Builder: it may start after the
151
- review batch exists, including while the user is on filter choice, but template
152
- review cannot start until the user answers filter choice and chooses Use
153
- Template in Messages. AI Generated is an explicit opt-out that cancels or
154
- ignores the background template draft. If the post-lead agents are absent, the
155
- main thread still orchestrates the same branches from the compact context with
156
- MCP tools/assets.
151
+ review batch exists, including while the user is on filter choice, but workflow
152
+ cell execution must wait. After rubrics are saved, do not queue enrichment,
153
+ filtering, or Generate Message cells until the user approves the message
154
+ template. AI Generated is an explicit opt-out that cancels or ignores the
155
+ background template draft. If the post-lead agents are absent, the main thread
156
+ still orchestrates the same branches from the compact context with MCP
157
+ tools/assets.
157
158
 
158
159
  Use rendered Markdown for user review surfaces, not fenced code blocks. Keep
159
160
  lines short, use indexed section labels and bullets, and translate internal
@@ -574,10 +575,11 @@ updates.
574
575
  watch link and see useful setup state immediately. Import only the first
575
576
  bounded review batch after the source is attached to the campaign; do not
576
577
  queue workflow cells, attach a sequence, or start until the filter choice is
577
- resolved, Messages has shown Use Template / AI Generated, template/token
578
- rules are approved when Use Template is chosen, rubrics are saved and the
579
- bounded review-batch `enrichCellId` cells have been queued when filters are
580
- enabled, and the approved message set is synced into the campaign brief.
578
+ resolved, rubrics are saved when filters are enabled, template/token rules
579
+ are approved on the default Use Template path, and the approved message set
580
+ is synced into the campaign brief. After rubrics save, pause and say the fit
581
+ rules are saved; approve the message template next; after approval, queue the
582
+ bounded review-batch `enrichCellId` cells to kick off enrichment/filtering.
581
583
  Product Generate Message cells must not run from the background template
582
584
  path before that template/token approval.
583
585
  Do not ask the user to approve the brief before shell creation unless they