@sellable/install 0.1.202 → 0.1.204
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.
|
@@ -169,6 +169,13 @@ When reporting branch runtime proof, use this shape under
|
|
|
169
169
|
|
|
170
170
|
Do not tell the UI to show Message Draft Builder as running unless this proof
|
|
171
171
|
exists and points at the current non-empty campaign-table execution slice.
|
|
172
|
+
If the host cannot launch a background branch and the parent thread runs this
|
|
173
|
+
same contract inline, report `statusSource: "parent-thread-fallback"` and
|
|
174
|
+
`status: "fallback-active"` while working, then `status: "ready"` when the
|
|
175
|
+
inline recommendation passes. A validated parent-thread fallback is not a
|
|
176
|
+
background worker failure; it must satisfy the same live-context, prompt,
|
|
177
|
+
reference-asset, and validation requirements before the parent shows message
|
|
178
|
+
review.
|
|
172
179
|
|
|
173
180
|
## Basis Changes And Rewrites
|
|
174
181
|
|
package/bin/sellable-install.mjs
CHANGED
|
@@ -743,9 +743,15 @@ Before any provider prompt, search, or signal-discovery call, show
|
|
|
743
743
|
one source-plan gate and ask for approval. Write this like a fifth grader could
|
|
744
744
|
understand it: short sentences, no internal labels, and no GTM shorthand. The
|
|
745
745
|
order is strict: first show the plan in chat, then open the approval question.
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
746
|
+
There must be exactly one structured source-plan approval question for this
|
|
747
|
+
step. Do not open a generic approval first and reuse it after the plan. Do not
|
|
748
|
+
open a second identical source-plan question after the plan. If a source-plan
|
|
749
|
+
question was accidentally opened before the plan, recover by showing the plan
|
|
750
|
+
and continuing from that already-selected source choice when it exactly matches
|
|
751
|
+
the visible recommendation; otherwise ask the user to choose a different source
|
|
752
|
+
in normal chat instead of opening another identical question. This first
|
|
753
|
+
approval only authorizes finding the best places to look for buyers. It does not
|
|
754
|
+
add anyone to the campaign yet. The gate should say:
|
|
749
755
|
|
|
750
756
|
- the buyer groups or places we could check
|
|
751
757
|
- the best place to start
|
|
@@ -818,6 +824,10 @@ review will inspect, cleanup risk, and fallback. N must be the smallest
|
|
|
818
824
|
right-content post set that clears the source target, not the default 3
|
|
819
825
|
promoted sample posts. For Sales Nav or Prospeo, name the specific approved
|
|
820
826
|
import path and source lead count.
|
|
827
|
+
If you render a selected-post table for LinkedIn engagement, show public
|
|
828
|
+
activity beside estimated likely prospects, not a second people-to-check count.
|
|
829
|
+
Calculate row-level likely prospects from the sampled fit rate when available or
|
|
830
|
+
the stated starting estimate.
|
|
821
831
|
Do not call \`import_leads\` or \`confirm_lead_list\` until this second approval is
|
|
822
832
|
granted.
|
|
823
833
|
|
|
@@ -1184,8 +1194,8 @@ updates.
|
|
|
1184
1194
|
call \`mcp__sellable__update_campaign({ campaignId, enableICPFilters: true, currentStep: "create-icp-rubric", watchNarration })\`
|
|
1185
1195
|
so the watched app moves to Filter Rules while rubrics are drafted/saved.
|
|
1186
1196
|
After rubrics save, keep Filter Rules visible for approval; after approval,
|
|
1187
|
-
move to Filter Leads
|
|
1188
|
-
|
|
1197
|
+
move to Filter Leads with \`currentStep: "apply-icp-rubric"\` and wait there
|
|
1198
|
+
while Message Drafting finishes or the template is approved.
|
|
1189
1199
|
If filters are skipped, launch Message Drafting before moving to
|
|
1190
1200
|
Messages/message review; updating \`currentStep\` to \`messages\` is not proof
|
|
1191
1201
|
that the background worker started. Queue the bounded campaign-table
|
|
@@ -1200,8 +1210,7 @@ updates.
|
|
|
1200
1210
|
the brief, \`pick-provider\` or the selected provider step while sourcing,
|
|
1201
1211
|
\`filter-choice\` after source rows are copied into the campaign table, \`create-icp-rubric\` as soon
|
|
1202
1212
|
as filters are chosen and while saved filters await approval,
|
|
1203
|
-
\`apply-icp-rubric\` after filter approval while message approval is pending,
|
|
1204
|
-
and after message approval while bounded enrichment/filter scoring runs, \`validate-sample\` only as a recovery/legacy
|
|
1213
|
+
\`apply-icp-rubric\` after filter approval while message approval is pending and while bounded enrichment/filter scoring runs after approval, \`validate-sample\` only as a recovery/legacy
|
|
1205
1214
|
observation state,
|
|
1206
1215
|
\`auto-execute-messaging\` after at least one row passes and initial campaign-row
|
|
1207
1216
|
messages are being generated or reviewed, \`awaiting-user-greenlight\` only
|
|
@@ -2492,10 +2501,7 @@ function verify(opts) {
|
|
|
2492
2501
|
const pluginMcpContent = existsSync(pluginMcpPath)
|
|
2493
2502
|
? readFileSync(pluginMcpPath, "utf8")
|
|
2494
2503
|
: "";
|
|
2495
|
-
const hasCodexMcpDriver = hasWatchModeDriverMarker(
|
|
2496
|
-
configContent,
|
|
2497
|
-
"codex"
|
|
2498
|
-
);
|
|
2504
|
+
const hasCodexMcpDriver = hasWatchModeDriverMarker(configContent, "codex");
|
|
2499
2505
|
const hasCodexPluginDriver = hasWatchModeDriverMarker(
|
|
2500
2506
|
pluginMcpContent,
|
|
2501
2507
|
"codex"
|
|
@@ -2951,7 +2957,9 @@ async function main() {
|
|
|
2951
2957
|
const token = rawArgs[2];
|
|
2952
2958
|
const authSetFlags = rawArgs.slice(3);
|
|
2953
2959
|
const dryRun = authSetFlags.includes("--dry-run");
|
|
2954
|
-
const unknownAuthSetFlag = authSetFlags.find(
|
|
2960
|
+
const unknownAuthSetFlag = authSetFlags.find(
|
|
2961
|
+
(arg) => arg !== "--dry-run"
|
|
2962
|
+
);
|
|
2955
2963
|
if (unknownAuthSetFlag) {
|
|
2956
2964
|
console.error(`Unknown auth set option: ${unknownAuthSetFlag}`);
|
|
2957
2965
|
process.exit(2);
|
package/package.json
CHANGED
|
@@ -93,8 +93,9 @@ message-template approval before enrichment/filtering or Generate Message cells.
|
|
|
93
93
|
Filter work stays in the parent thread and must inspect visible campaign rows
|
|
94
94
|
with `get_rows_minimal` / `get_rows` before drafting and saving rubrics; use at
|
|
95
95
|
most one direct `enrich_with_prospeo` sample when row evidence is too thin.
|
|
96
|
-
After filter approval,
|
|
97
|
-
|
|
96
|
+
After filter approval, the browser should move to Filter Leads with
|
|
97
|
+
`currentStep: "apply-icp-rubric"` and show template waiting/approval copy until
|
|
98
|
+
the template is approved.
|
|
98
99
|
The default path stays the existing first campaign-table execution slice:
|
|
99
100
|
review the normal `reviewBatchLimit:15`, approve reviewed draft rows, then move
|
|
100
101
|
to Settings/sequence/final greenlight. Only call
|
|
@@ -207,9 +208,15 @@ Before any provider prompt, search, or signal-discovery call, show
|
|
|
207
208
|
one source-plan gate and ask for approval. Write this like a fifth grader could
|
|
208
209
|
understand it: short sentences, no internal labels, and no GTM shorthand. The
|
|
209
210
|
order is strict: first show the plan in chat, then open the approval question.
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
211
|
+
There must be exactly one structured source-plan approval question for this
|
|
212
|
+
step. Do not open a generic approval first and reuse it after the plan. Do not
|
|
213
|
+
open a second identical source-plan question after the plan. If a source-plan
|
|
214
|
+
question was accidentally opened before the plan, recover by showing the plan
|
|
215
|
+
and continuing from that already-selected source choice when it exactly matches
|
|
216
|
+
the visible recommendation; otherwise ask the user to choose a different source
|
|
217
|
+
in normal chat instead of opening another identical question. This first
|
|
218
|
+
approval only authorizes finding the best places to look for buyers. It does not
|
|
219
|
+
add anyone to the campaign yet. The gate should say:
|
|
213
220
|
|
|
214
221
|
- the buyer groups or places we could check
|
|
215
222
|
- the best place to start
|
|
@@ -399,8 +406,11 @@ summary should be a compact `## Source Recommendation` block with:
|
|
|
399
406
|
- first review: after the source list exists, add confirmed source rows to the
|
|
400
407
|
campaign and review the first 15 leads before scaling
|
|
401
408
|
- a selected-post table with post author/topic, why it fits, public activity,
|
|
402
|
-
and
|
|
403
|
-
|
|
409
|
+
and estimated likely prospects. Calculate each row's estimated likely
|
|
410
|
+
prospects from the sampled fit rate when available, otherwise from the stated
|
|
411
|
+
starting estimate; never duplicate public activity or people-to-check counts in
|
|
412
|
+
this column.
|
|
413
|
+
- total public activity, people to check, and likely prospect pool
|
|
404
414
|
- next step: build the source list, add it to the campaign, and review the
|
|
405
415
|
first 15 leads before scaling
|
|
406
416
|
- fallback: switch to active LinkedIn profiles if the first sample is too noisy
|
|
@@ -431,13 +441,12 @@ from the same campaign/table basis. This kickoff is required for both answers:
|
|
|
431
441
|
`Use filters` and `Skip filters`. If the user chooses filters, the parent
|
|
432
442
|
thread moves to Filter Rules, loads the filter reference, saves rubrics, then
|
|
433
443
|
asks for filter approval while Message Drafting runs. After approval, move to
|
|
434
|
-
Filter Leads
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
path.
|
|
444
|
+
Filter Leads with `currentStep: "apply-icp-rubric"` and wait there while Message
|
|
445
|
+
Drafting finishes or the recommendation is reviewed. If the user skips filters, start Message Drafting
|
|
446
|
+
first, then move to Messages/message review after it has started or returned a
|
|
447
|
+
ready recommendation. `update_campaign({ currentStep: "messages" })` is not
|
|
448
|
+
proof of kickoff. Enrichment/filtering and Generate Message cells wait for
|
|
449
|
+
message approval. AI Generated is an explicit opt-out from the template path.
|
|
441
450
|
|
|
442
451
|
The Message Drafting handoff must stay lean. Include only `campaignId`,
|
|
443
452
|
`workflowTableId`, a concise brief summary, concise source summary/source-use
|
|
@@ -933,17 +942,14 @@ updates.
|
|
|
933
942
|
through `mcp__sellable__get_subskill_asset`, and before returning
|
|
934
943
|
`mcp__sellable__get_subskill_prompt({ subskillName: "create-campaign-v2-validation" })`
|
|
935
944
|
as the final internal validation gate.
|
|
936
|
-
In Codex,
|
|
937
|
-
this single Message Drafting background agent
|
|
938
|
-
|
|
939
|
-
agents, delegation, or a message/bg agent in this campaign, ask once for
|
|
940
|
-
permission before loading the long message prompt in the parent. If
|
|
941
|
-
permission is granted but the named custom agent is not
|
|
945
|
+
In Codex, the filter-choice answer is the campaign-scoped go-ahead to use
|
|
946
|
+
this single Message Drafting background agent in step-wise and YOLO modes.
|
|
947
|
+
Do not ask a separate question to start it. If the named custom agent is not
|
|
942
948
|
available, spawn a generic background agent with `model: "gpt-5.5"` and
|
|
943
|
-
`reasoning_effort: "xhigh"` using the same lean campaign/table basis.
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
949
|
+
`reasoning_effort: "xhigh"` using the same lean campaign/table basis. If no
|
|
950
|
+
background-agent tool is callable, start the same full message branch inline
|
|
951
|
+
before filter drafting or skip-filter message review and record it as
|
|
952
|
+
`statusSource: "parent-thread-fallback"`.
|
|
947
953
|
Do not use any alternate, examples-only, or local-artifact message prompt. Message review and
|
|
948
954
|
message QA require Message Drafting output:
|
|
949
955
|
do not draft from a checklist, local markdown artifact, or parent-thread
|
|
@@ -970,8 +976,8 @@ updates.
|
|
|
970
976
|
so the watched app moves to Filter Rules while the parent drafts/saves
|
|
971
977
|
rubrics and Message Drafting runs.
|
|
972
978
|
After rubrics save, keep Filter Rules visible for approval; after approval,
|
|
973
|
-
move to Filter Leads
|
|
974
|
-
|
|
979
|
+
move to Filter Leads with `currentStep: "apply-icp-rubric"` and wait there
|
|
980
|
+
while Message Drafting finishes or the template is approved.
|
|
975
981
|
If filters are skipped, launch Message Drafting before moving to
|
|
976
982
|
Messages/message review; updating `currentStep` to `messages` is not proof
|
|
977
983
|
that the background worker started. Queue the bounded campaign-table
|
|
@@ -986,8 +992,7 @@ updates.
|
|
|
986
992
|
the brief, `pick-provider` or the selected provider step while sourcing,
|
|
987
993
|
`filter-choice` after source rows are copied into the campaign table, `create-icp-rubric` as soon
|
|
988
994
|
as filters are chosen and while saved filters await approval,
|
|
989
|
-
`apply-icp-rubric` after filter approval while message approval is pending,
|
|
990
|
-
and after message approval while bounded enrichment/filter scoring runs, `validate-sample` only as a recovery/legacy
|
|
995
|
+
`apply-icp-rubric` after filter approval while message approval is pending and while bounded enrichment/filter scoring runs after approval, `validate-sample` only as a recovery/legacy
|
|
991
996
|
observation state,
|
|
992
997
|
`auto-execute-messaging` after at least one row passes and initial campaign-row
|
|
993
998
|
messages are being generated or reviewed, `awaiting-user-greenlight` only
|