@sellable/install 0.1.243 → 0.1.245
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.
package/package.json
CHANGED
|
@@ -58,6 +58,22 @@ Default evergreen plan per workspace (override only if the prompt specifies diff
|
|
|
58
58
|
1. **`<Sender Name> - Post Engagers`** — one per sender (warm lane, highest priority)
|
|
59
59
|
2. **`<Workspace/Team> - Shared Signal Discovery`** — one shared warm-signal campaign lane across senders
|
|
60
60
|
3. **`<Workspace/Team> - Shared Cold Fallback`** — one shared cold/fallback campaign lane across senders
|
|
61
|
+
|
|
62
|
+
Sender scope resolution is safety-critical. Do not pass
|
|
63
|
+
`allConnectedSenders:true` unless the invoking prompt explicitly says "all
|
|
64
|
+
connected senders", "every connected sender", "all seats", or names an
|
|
65
|
+
equivalent all-sender scope. If the user says "all 4 campaigns", "the four
|
|
66
|
+
evergreen campaigns", or names specific senders, resolve those exact senders
|
|
67
|
+
and pass explicit `postEngagerSenderIds` plus `sharedSenderIds`; do not broaden
|
|
68
|
+
the plan to every connected sender. In non-interactive or `--yolo` mode, when
|
|
69
|
+
more than two connected senders exist and the prompt does not explicitly
|
|
70
|
+
authorize all connected senders, stop before mutation with
|
|
71
|
+
`blocked: ambiguous_post_engager_sender_scope` and report the sender ids/names
|
|
72
|
+
needed for approval. Never let "workspace default" silently create Post
|
|
73
|
+
Engagers lanes for extra senders.
|
|
74
|
+
Short form: Do not pass `allConnectedSenders:true` unless the prompt explicitly says all/every connected sender.
|
|
75
|
+
Short form: "all 4 campaigns" means explicit sender scope plus two shared lanes, not all connected senders.
|
|
76
|
+
Short form: In `--yolo`, ambiguous multi-sender scope blocks before mutation.
|
|
61
77
|
</inputs>
|
|
62
78
|
|
|
63
79
|
<command_backed_workflow>
|
|
@@ -281,11 +297,24 @@ zsh treats it as read-only; use `exit_code` or `rc` instead. Receipt polling
|
|
|
281
297
|
must use `find <receipt-dir> -maxdepth 1 -name 'evg_*.json' -print` or an
|
|
282
298
|
explicit nullglob-safe equivalent. Do not use naked `*.json` globs under zsh,
|
|
283
299
|
and keep zero-receipt polls quiet with no `no matches found` diagnostics.
|
|
300
|
+
Do not embed `<<'WORKER_PROMPT'` heredocs inside a single quoted or double
|
|
301
|
+
quoted `/bin/bash -lc '...'` command string; nested quoting is brittle and can
|
|
302
|
+
truncate the first worker before mutation. For multi-worker launchers, write one
|
|
303
|
+
plain prompt file per lane under the current run directory, then start each
|
|
304
|
+
worker with `codex -a never -s danger-full-access exec -C "$REPO" -o
|
|
305
|
+
"$worker_final_file" - < "$worker_prompt_file"`. Keep launcher shell variables
|
|
306
|
+
double-quoted and keep the prompt heredoc only in a standalone script/prompt-file
|
|
307
|
+
write step, not inside an already quoted shell argument. If the first launcher
|
|
308
|
+
attempt exits with a shell parse error or before starting the first worker,
|
|
309
|
+
stop with `blocked: worker_launcher_quoting_failed` and do not retry by
|
|
310
|
+
loosening sender scope or mutating in the parent.
|
|
284
311
|
Short form: run the wrapper with `/bin/bash -lc`.
|
|
285
312
|
Short form: Do not rely on zsh-specific behavior.
|
|
286
313
|
Short form: Do not use `status` as a shell variable; use `exit_code` or `rc`.
|
|
287
314
|
Short form: Receipt polling uses `find <receipt-dir> -maxdepth 1 -name 'evg_*.json' -print`.
|
|
288
315
|
Short form: Do not use naked `*.json` globs under zsh; no `no matches found` diagnostics.
|
|
316
|
+
Short form: Do not embed `<<'WORKER_PROMPT'` heredocs inside a quoted `/bin/bash -lc` command string.
|
|
317
|
+
Short form: Multi-worker launchers write prompt files and run `codex ... - < "$worker_prompt_file"`.
|
|
289
318
|
After creating receipt directories, dispatch workers immediately; do not perform extended parent reasoning, extra inventory, or prompt rewriting loops.
|
|
290
319
|
Use a compact worker prompt: include lane packet JSON, original selectedActionIds,
|
|
291
320
|
original planRevision, parent postEngagerSenderIds, parent sharedSenderIds,
|
|
@@ -299,8 +328,11 @@ current lane packet for receipt paths.
|
|
|
299
328
|
Do not hardcode machine-specific paths, workspace ids, campaign ids, sender ids, or UAT/phase artifact paths in this MCP prompt or any worker prompt.
|
|
300
329
|
After the receipt-directory `mkdir`, the next shell/tool call must launch the first lane worker.
|
|
301
330
|
Do not run `find`, `ls`, extra inventory, or another preflight between directory setup and the first worker launch.
|
|
302
|
-
For the local Codex CLI fallback, use this literal durable CLI worker launch
|
|
303
|
-
and fill only the lane-specific placeholders
|
|
331
|
+
For the local Codex CLI fallback, use this literal durable CLI worker launch
|
|
332
|
+
template and fill only the lane-specific placeholders. For one-off direct worker
|
|
333
|
+
launches you may pipe a heredoc directly to `codex`; for multi-worker shell
|
|
334
|
+
launchers, write the same prompt body to `<worker-prompt-file>` and launch the
|
|
335
|
+
worker with stdin redirected from that file:
|
|
304
336
|
|
|
305
337
|
```
|
|
306
338
|
codex -a never -s danger-full-access exec -C <repo> -o <worker-final-file> - <<'WORKER_PROMPT'
|
|
@@ -324,6 +356,9 @@ Use mcp__sellable only. Do not use admin tools, direct DB, Prisma, SQL, web sear
|
|
|
324
356
|
Do not launch, start, schedule, send, or use paid InMail.
|
|
325
357
|
Complete only this lane, write the required durable receipt JSON, and stop.
|
|
326
358
|
WORKER_PROMPT
|
|
359
|
+
|
|
360
|
+
# Multi-worker launcher equivalent:
|
|
361
|
+
codex -a never -s danger-full-access exec -C <repo> -o <worker-final-file> - < <worker-prompt-file>
|
|
327
362
|
```
|
|
328
363
|
|
|
329
364
|
If any placeholder cannot be filled from the current lane packet, do not inspect
|
|
@@ -455,8 +490,19 @@ not a parent-thread summary. The receipt must include:
|
|
|
455
490
|
evidence field such as `rowCount`, `rowIdsHash`, or `rowEvidence`; do not
|
|
456
491
|
leave those only in `searchSignalsProof`, `importProof`, `coldFallbackProof`,
|
|
457
492
|
or narrative text for the parent/verifier to infer.
|
|
458
|
-
- `filterDecisionReceipt`: saved/applied filter
|
|
459
|
-
|
|
493
|
+
- `filterDecisionReceipt`: saved/applied ICP filter proof for the current
|
|
494
|
+
campaign/table basis. Customer-visible evergreen lanes must enable ICP
|
|
495
|
+
filtering with `enableICPFilters:true`, call `save_rubrics`, and save at
|
|
496
|
+
least three rubric/filter criteria before Message Drafting. Do not skip
|
|
497
|
+
filtering for evergreen setup. Missing or skipped filter proof is
|
|
498
|
+
`blocked: missing_filter_setup`.
|
|
499
|
+
Before the worker exits, the durable JSON must contain
|
|
500
|
+
`filterDecisionReceipt.status:"applied"`,
|
|
501
|
+
`filterDecisionReceipt.enableICPFilters:true`, the current
|
|
502
|
+
`workflowTableId`, and concrete saved-filter proof such as
|
|
503
|
+
`filterDecisionReceipt.filterIds`, `filterDecisionReceipt.rubricIds`,
|
|
504
|
+
`filterDecisionReceipt.savedRubricCount`, or
|
|
505
|
+
`filterDecisionReceipt.headlineICPCriteria`.
|
|
460
506
|
- `messageDraftingReceipt`: the Message Drafting proof described below,
|
|
461
507
|
including packaged `generate-messages` prompt/assets and validation. Raw
|
|
462
508
|
fields like `generateMessagesPromptLoadedToHasMoreFalse`,
|
|
@@ -592,7 +638,12 @@ verification unless the same object also appears inside
|
|
|
592
638
|
"sourceLadderReason": "<why the current source is valid before colder sources>"
|
|
593
639
|
},
|
|
594
640
|
"filterDecisionReceipt": {
|
|
595
|
-
"status": "
|
|
641
|
+
"status": "applied",
|
|
642
|
+
"enableICPFilters": true,
|
|
643
|
+
"filterIds": ["<saved filter/rubric id>"],
|
|
644
|
+
"rubricIds": ["<saved rubric id>"],
|
|
645
|
+
"headlineICPCriteria": ["<saved ICP criterion>", "<saved ICP criterion>", "<saved ICP criterion>"],
|
|
646
|
+
"savedRubricCount": 3,
|
|
596
647
|
"workflowTableId": "<workflow table id>"
|
|
597
648
|
},
|
|
598
649
|
"messageDraftingReceipt": {
|
|
@@ -884,10 +935,34 @@ Parent-thread handwritten copy or setting `currentStep` is not proof.
|
|
|
884
935
|
Short form: Shared Cold Fallback uses no "I've put together".
|
|
885
936
|
Short form: Shared Cold Fallback uses no opt-out shrug such as "If this isn't relevant, ignore me".
|
|
886
937
|
Short form: Shared Cold Fallback uses no product-stack dump.
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
938
|
+
- Customer-visible evergreen lanes must enable ICP filtering before Message
|
|
939
|
+
Drafting. This applies to Post Engagers, Shared Signal Discovery, and
|
|
940
|
+
Shared Cold Fallback. Do not skip filtering for evergreen setup, even when
|
|
941
|
+
the source is warm. Use the normal `$sellable:create-campaign` filter
|
|
942
|
+
workflow: set or save 3-5 headline ICP criteria, call `save_rubrics`, and
|
|
943
|
+
persist `enableICPFilters:true` on the campaign before generating
|
|
944
|
+
messages. Good evergreen filters should be light but real: role/budget
|
|
945
|
+
relevance, company/market fit, and obvious non-buyer exclusion. For
|
|
946
|
+
Post Engagers, keep filters permissive enough that warm source rows are not
|
|
947
|
+
over-pruned, but still save the filter rules. For shared lanes, filter for
|
|
948
|
+
buyers/operators relevant to the workspace offer and exclude students,
|
|
949
|
+
job seekers, vendors, and off-topic commenters. The receipt must show
|
|
950
|
+
`filterDecisionReceipt.status:"applied"`,
|
|
951
|
+
`filterDecisionReceipt.enableICPFilters:true`, current `workflowTableId`,
|
|
952
|
+
and saved filter/rubric proof with at least three saved rubric/filter
|
|
953
|
+
criteria (`filterIds`, `rubricIds`, `headlineICPCriteria`, or
|
|
954
|
+
`savedRubricCount`). Missing or skipped filter proof is
|
|
955
|
+
`blocked: missing_filter_setup`.
|
|
956
|
+
Short form: Customer-visible evergreen lanes must enable ICP filtering.
|
|
957
|
+
Short form: `enableICPFilters:true`.
|
|
958
|
+
Short form: Do not skip filtering for evergreen setup.
|
|
959
|
+
Short form: at least three saved rubric/filter criteria.
|
|
960
|
+
Short form: missing or skipped filter proof is `blocked: missing_filter_setup`.
|
|
961
|
+
Short form: run Message Drafting only after saved filters are applied.
|
|
962
|
+
- Every customer-visible lane must run Message Drafting from the current
|
|
963
|
+
campaign/table basis after source rows exist. The worker must load the full
|
|
964
|
+
packaged `generate-messages` prompt, every required asset, and
|
|
965
|
+
`create-campaign-v2-validation`; if the internal branch handoff is not
|
|
891
966
|
callable in the packaged runtime, the worker must call
|
|
892
967
|
`start_campaign_message_preparation` and poll
|
|
893
968
|
`get_campaign_message_preparation_status` from the lane worker. The
|
|
@@ -917,10 +992,13 @@ Parent-thread handwritten copy or setting `currentStep` is not proof.
|
|
|
917
992
|
- A source/list decision has been resolved and campaign rows are loaded. If
|
|
918
993
|
there is no approved source or no rows can be copied, report `blocked` with
|
|
919
994
|
the missing source detail; do not call the campaign complete.
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
995
|
+
- The filter step is resolved with saved/applied filters. Customer-visible
|
|
996
|
+
evergreen lanes must have `enableICPFilters:true`, at least three saved
|
|
997
|
+
ICP filter/rubric criteria, and a receipt with
|
|
998
|
+
`filterDecisionReceipt.status:"applied"`. Do not skip filters for
|
|
999
|
+
evergreen setup. Do not leave customer-visible campaigns at
|
|
1000
|
+
`filter-choice`, `filter-rules`, or `apply-icp-rubric` and report success.
|
|
1001
|
+
Do not proceed to Message Drafting until saved filters are applied.
|
|
924
1002
|
- Message Drafting has run from the current campaign/table basis, using the
|
|
925
1003
|
create-campaign message prompt/assets and validation gate. Updating
|
|
926
1004
|
`currentStep:"messages"` is not proof. Parent-thread handwritten copy is
|