@sellable/install 0.1.229 → 0.1.231

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.
@@ -37,7 +37,7 @@ function getInstallVersion() {
37
37
  }
38
38
  }
39
39
 
40
- const CODEX_PLUGIN_VERSION = "0.1.46";
40
+ const CODEX_PLUGIN_VERSION = "0.1.48";
41
41
  const CODEX_PLUGIN_COMPAT_VERSIONS = [
42
42
  "0.1.8",
43
43
  "0.1.9",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/install",
3
- "version": "0.1.229",
3
+ "version": "0.1.231",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {
@@ -24,10 +24,19 @@ run without user input, or similar, run in **automation mode**:
24
24
  - Reconcile structure and record any template/config polish as `created`,
25
25
  `reused`, `repaired`, `flagged`, or `blocked`.
26
26
  - Choose the automation depth from the invoking prompt:
27
+ - Sparse `--yolo` create/repair invocations default to customer-visible completion:
28
+ when the user says run/create/repair/setup `$sellable:create-evergreen-campaigns`,
29
+ create evergreen campaigns, or similar without saying heartbeat/structure-only,
30
+ set `depth:"customer_visible"`. Customers usually expect usable campaigns,
31
+ not empty shells.
27
32
  - **Structure-only reconcile** is for heartbeat prompts that only say to
28
- ensure slots exist. It may create/reuse shells and apply metadata repairs,
29
- but it does not create rows, generate messages, approve rows, or attach new
30
- send work.
33
+ ensure slots exist. Only choose `depth:"structure_only"` for
34
+ heartbeat/ensure-slots-only automation where the prompt explicitly says it
35
+ does not need source rows, generated messages, approvals, or sequence. It may
36
+ create/reuse shells and apply metadata repairs, but it does not create rows,
37
+ generate messages, approve rows, or attach new send work.
38
+ Short form: only choose `depth:"structure_only"` for
39
+ heartbeat/ensure-slots-only runs.
31
40
  - **Customer-visible completion** is required when the prompt says full
32
41
  campaign, customer-ready, send-review-ready, went through
33
42
  `$sellable:create-campaign`, fill out, approve one, only needs enrich and
@@ -138,6 +147,16 @@ for that shared-only sender. Example: if Justin already has a Post Engagers
138
147
  campaign and Jell/Hulan should only participate in the two shared campaigns,
139
148
  call `setup_evergreen_campaigns` with `postEngagerSenderIds:["<justin id>"]`
140
149
  and `sharedSenderIds:["<justin id>","<jell or hulan id>"]`.
150
+ If the operator says to keep a protected existing Post Engagers campaign unchanged
151
+ and create/repair only the shared lanes, pass `postEngagerSenderIds:[]` and the
152
+ full shared sender set in `sharedSenderIds`. Do not include the protected active
153
+ Post Engagers lane as a reuse packet in that shared-only execution scope: an
154
+ ACTIVE protected lane can correctly produce a backend `launched_campaign`
155
+ blocker and would make the whole yolo plan non-autoExecutable even though the
156
+ operator asked to leave it untouched. Inventory and waterfall proof may mention
157
+ the protected lane, but selectedActionIds and lane workers must cover only the
158
+ shared lane packets.
159
+ Short form: Do not include the protected active Post Engagers lane as a reuse packet when the operator requested only shared lane execution.
141
160
 
142
161
  When senders are ambiguous, ask which sender ids belong in the Post Engagers
143
162
  sender scope and which belong in the shared lane sender scope before planning.
@@ -155,6 +174,12 @@ plan execution, paid InMail spend, or ambiguous target choice. Stop on wrong
155
174
  workspace, cleanup/archive/delete need, stale plan, disconnected sender,
156
175
  duplicate candidate, unsafe side effect, missing source proof, or missing
157
176
  message proof.
177
+ In exec/automation mode, do not call `request_user_input`. If a plan under
178
+ `--yolo` returns `autoExecutable:false` and the run cannot receive interactive
179
+ bounded delegated approval, stop with
180
+ `blocked: bounded_approval_unavailable_in_exec_mode` before any mutation and
181
+ state whether the operator should rerun with a safe autoExecutable plan, narrower
182
+ sender scopes, explicit bindings, or an interactive session.
158
183
 
159
184
  When safe-yolo is blocked only because the plan needs normal setup work, ask
160
185
  for a **bounded delegated approval** over the rendered current plan instead of
@@ -306,31 +331,56 @@ not a parent-thread summary. The receipt must include:
306
331
  when using a receipt file, and `notAdHoc:true`.
307
332
  - `researchSenderReceipt`: `research-sender` prompt load proof,
308
333
  `complete_sender_research` result, sender LinkedIn identity basis, and the
309
- notes/proof counts used before the net-new `create_campaign` call.
334
+ notes/proof counts used before the net-new `create_campaign` call. It must
335
+ include canonical `promptLoadedToHasMoreFalse:true`,
336
+ `completeSenderResearch`, and either `senderLinkedinUrl`, non-empty
337
+ `senderIds`, or non-empty `senderIdentityBasis`, plus `identityBasis`.
310
338
  - `campaignBriefReceipt`: the CampaignOffer/campaign id, current
311
339
  workflowTableId, brief hash or updated-at marker, delivery format, token
312
- rules, hard avoids, source-use rules, and first-message template state.
340
+ rules, hard avoids, source-use rules, and first-message template state. If
341
+ the tool output uses `approvedFirstMessageTemplate`, copy it to canonical
342
+ `firstMessageTemplate`; if it uses `deliveryFormatIncluded`,
343
+ `tokenRulesIncluded`, `hardAvoidsIncluded`, or `sourceUseRulesIncluded`, copy
344
+ those to canonical `deliveryFormat`, `tokenRules`, `hardAvoids`, and
345
+ `sourceUseRules`.
313
346
  - `sourceDecisionReceipt`: selected source/list id, provider, cursor/inventory
314
347
  state, import/copy caps, explicit `dedupeDncProviderExclusions:true` or an
315
348
  equivalent exclusions object, row ids or row-count evidence (`rowCount`,
316
349
  `readyRowCount`, or `rowEvidence`), and the reason no colder source was used
317
- before the current source was proven exhausted or insufficient.
350
+ before the current source was proven exhausted or insufficient. If the raw
351
+ provider output uses `sourceProvider`, `sourceListId`, `reviewBatchRowIds`, or
352
+ `rationale`, copy them to canonical `provider`, `sourceId`/`sourceListId`,
353
+ `rowIdsHash`/`rowCount`, and `sourceLadderReason`.
318
354
  - `filterDecisionReceipt`: saved/applied filter ids or explicit skip-filter
319
355
  decision with current campaign/table basis.
320
356
  - `messageDraftingReceipt`: the Message Drafting proof described below,
321
- including packaged `generate-messages` prompt/assets and validation.
357
+ including packaged `generate-messages` prompt/assets and validation. Raw
358
+ fields like `generateMessagesPromptLoadedToHasMoreFalse`,
359
+ `requiredAssetsLoadedToHasMoreFalse`,
360
+ `validationPromptLoadedToHasMoreFalse`,
361
+ `get_campaign_message_preparation_status`, and
362
+ `waitForCampaignProcessingProof` are useful, but the receipt must also copy
363
+ them into canonical `promptLoadedToHasMoreFalse`, `requiredAssetsLoaded`,
364
+ `validationLoaded`, `reviewBatchRowHash`, and
365
+ `messageDraftRecommendation`.
322
366
  - `reviewBatchReceipt`: review-batch row ids/hash, generated row count,
323
367
  quality-valid route-proof row id when approved, and proof that no broad
324
368
  approve-all occurred.
325
369
  - `sequenceReceipt`: exact current workflowTableId, recommended non-paid
326
370
  sequence attach/precheck result, and readback showing `hasSequence:true` when
327
- completion is claimed.
371
+ completion is claimed. If the tool output uses
372
+ `attachRecommendedSequenceResult.actionTypes` or
373
+ `nonPaidRecommendedSequence`, copy them to canonical `actionTypes` and
374
+ `nonPaid`.
328
375
  - final paused-send proof: if the current campaign table is `DRAFT` after the
329
376
  sequence is attached, call the product `pause_campaign({ campaignId })`
330
377
  endpoint/tool to put the unlaunched campaign into `PAUSED` review state, then
331
378
  reread the campaign/table. Do not raw-write `campaignStatus`, do not start or
332
379
  launch, and do not schedule/send. Completion requires reread proof of
333
- `currentStep:"send"` and `campaignStatus:"PAUSED"`.
380
+ `currentStep:"send"` and `campaignStatus:"PAUSED"`. If the raw output nests
381
+ this in `finalCampaignRead` or `finalTableRead`, copy it to canonical
382
+ `finalPausedSendProof.currentStep` and
383
+ `finalPausedSendProof.campaignStatus`.
334
384
  - `verifyCall`: the exact `setup_evergreen_campaigns({ mode:"verify",
335
385
  planRevision, selectedActionIds, receipts })` call/result used before the
336
386
  parent reports completion.
@@ -345,7 +395,18 @@ substitute `message` for `generatedMessageText`. Do not substitute
345
395
  `passVerdict` for `verdict`. If the self-check fails, fix the receipt before
346
396
  ending; do not leave the parent to infer canonical fields from top-level
347
397
  aliases or narrative text.
398
+ Self-check shorthand: copy raw tool-output aliases into canonical receipt keys
399
+ before writing JSON; do not leave only raw objects like
400
+ `get_campaign_message_preparation_status`, `attachRecommendedSequenceResult`,
401
+ `finalCampaignRead`, or `finalTableRead`.
348
402
  Self-check shorthand: top-level `planRevision`, `actionId`, `laneKey`, `laneType`, `workspaceId`, and `senderIds` must exist before worker completion.
403
+ Self-check shorthand: `messageDraftingReceipt.promptLoadedToHasMoreFalse`,
404
+ `requiredAssetsLoaded`, `validationLoaded`, `reviewBatchRowHash`, and
405
+ `messageDraftRecommendation` must exist before worker completion.
406
+ Self-check shorthand: `reviewBatchReceipt.rowIdsHash`,
407
+ `reviewBatchReceipt.generatedCount`, `sequenceReceipt.actionTypes`,
408
+ `sequenceReceipt.nonPaid`, `finalPausedSendProof.currentStep`, and
409
+ `finalPausedSendProof.campaignStatus` must exist before worker completion.
349
410
  Self-check shorthand: `sampleMessages[]` must include `rowId`, `generatedMessageText`, `verdict`, and `issues`.
350
411
  Self-check shorthand: Do not substitute `message` for `generatedMessageText`.
351
412
  Self-check shorthand: Do not substitute `passVerdict` for `verdict`.
@@ -430,9 +491,8 @@ verification unless the same object also appears inside
430
491
  "selectedLeadListId": "<source/list id>",
431
492
  "reviewBatchRowHash": "<review row ids hash>",
432
493
  "messageDraftRecommendation": {"basis": "generate-messages"},
433
- "sampleMessages[].verdict": "pass",
434
494
  "sampleMessages": [
435
- {"rowId": "<row id>", "generatedMessageText": "<message>", "verdict": "pass"}
495
+ {"rowId": "<row id>", "generatedMessageText": "<message>", "verdict": "passed", "issues": []}
436
496
  ]
437
497
  },
438
498
  "reviewBatchReceipt": {
@@ -442,8 +502,6 @@ verification unless the same object also appears inside
442
502
  "sequenceReceipt": {
443
503
  "workflowTableId": "<workflow table id>",
444
504
  "hasSequence": true,
445
- "sequenceReceipt.actionTypes": ["send_invite"],
446
- "sequenceReceipt.nonPaid": true,
447
505
  "actionTypes": ["send_invite"],
448
506
  "nonPaid": true
449
507
  },
@@ -571,7 +629,8 @@ The parent then calls
571
629
  `setup_evergreen_campaigns({ mode:"verify", postEngagerSenderIds,
572
630
  sharedSenderIds, planRevision, selectedActionIds, receipts })` using the same
573
631
  sender scopes as the plan call and the original execution planRevision/actionIds,
574
- and reports only verified completion. A verify call without the same sender scopes can recompute an empty or different plan and is invalid proof. A verify call that uses a later reuse planRevision instead of the original execution planRevision is also invalid proof. Only after verify succeeds, rerun
632
+ and reports only verified completion. Do not include `yolo` in the verify call;
633
+ `yolo` is plan-mode only. A verify call without the same sender scopes can recompute an empty or different plan and is invalid proof. A verify call that uses a later reuse planRevision instead of the original execution planRevision is also invalid proof. Only after verify succeeds, rerun
575
634
  `setup_evergreen_campaigns({ mode:"plan", postEngagerSenderIds,
576
635
  sharedSenderIds, yolo:true })` without explicit campaign/table bindings. That
577
636
  idempotency rerun must return `intent:"reuse"` for every completed lane and no