@sellable/install 0.1.265 → 0.1.269
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/bin/sellable-install.mjs
CHANGED
|
@@ -2580,7 +2580,7 @@ function generateCodexAgentToml(agent) {
|
|
|
2580
2580
|
return `name = ${quoteToml(agent.name)}
|
|
2581
2581
|
description = ${quoteToml(codex.description)}
|
|
2582
2582
|
model = ${quoteToml(codex.model || "gpt-5.5")}
|
|
2583
|
-
model_reasoning_effort = ${quoteToml(codex.modelReasoningEffort || "
|
|
2583
|
+
model_reasoning_effort = ${quoteToml(codex.modelReasoningEffort || "xhigh")}
|
|
2584
2584
|
sandbox_mode = ${quoteToml(codex.sandboxMode || "read-only")}
|
|
2585
2585
|
nickname_candidates = ${tomlArray(codex.nicknameCandidates || [agent.displayName])}
|
|
2586
2586
|
developer_instructions = ${tomlMultilineString(agent.prompt)}
|
package/package.json
CHANGED
|
@@ -14,6 +14,29 @@ producing duplicates. This skill never launches campaigns; customer-visible
|
|
|
14
14
|
completion stops at paused send review.
|
|
15
15
|
</role>
|
|
16
16
|
|
|
17
|
+
## Invocation Mode Gate
|
|
18
|
+
|
|
19
|
+
Before any setup plan, classify the invocation mode.
|
|
20
|
+
|
|
21
|
+
- **Interactive approval mode is the default.** A bare user invocation such as
|
|
22
|
+
`$sellable:create-evergreen-campaigns`, "create evergreen campaigns", or
|
|
23
|
+
"set up evergreen" is interactive unless the prompt explicitly says `--yolo`,
|
|
24
|
+
scheduled, cron, automation, fresh-thread, run without approval, no user input,
|
|
25
|
+
or the host injects an equivalent trusted automation marker.
|
|
26
|
+
- In interactive approval mode, first call
|
|
27
|
+
`setup_evergreen_campaigns({ mode:"plan", depth:"customer_visible", ... })`
|
|
28
|
+
**without** `yolo:true`, render the returned `approvalSummary`, and wait for
|
|
29
|
+
explicit operator approval before dispatching any lane worker or creating
|
|
30
|
+
product state.
|
|
31
|
+
- In automation or explicit `--yolo` mode, pass `yolo:true` in plan mode only
|
|
32
|
+
and proceed without intermediate approval only when the plan returns
|
|
33
|
+
`autoExecutable:true`.
|
|
34
|
+
|
|
35
|
+
Short form: no explicit automation/`--yolo` marker means plan-and-ask, not run.
|
|
36
|
+
Short form: never infer `yolo:true` from a bare command invocation.
|
|
37
|
+
Short form: command hosts that want Custer-style unattended execution must
|
|
38
|
+
inject explicit automation context before invoking this skill.
|
|
39
|
+
|
|
17
40
|
## Operational Fast Path
|
|
18
41
|
|
|
19
42
|
In automation or `--yolo` customer-visible setup, use this path before the
|
|
@@ -51,6 +74,21 @@ directory setup or product mutation.
|
|
|
51
74
|
<inputs>
|
|
52
75
|
The invoking prompt names the senders ("create evergreen campaigns for csreyes92 and thomas"). Resolve each via `list_senders`.
|
|
53
76
|
|
|
77
|
+
If the invoking prompt is a normal user chat without an explicit automation or
|
|
78
|
+
`--yolo` marker, run **interactive approval mode**:
|
|
79
|
+
|
|
80
|
+
- Call `setup_evergreen_campaigns({ mode:"plan", depth:"customer_visible", ... })`
|
|
81
|
+
without `yolo:true`.
|
|
82
|
+
- Render `approvalSummary.approvalQuestion` and the approval buckets
|
|
83
|
+
(`campaignsToCreate`, `campaignsToUpdate`, `campaignsToVerifyOnly`,
|
|
84
|
+
`campaignsLeftUntouched`, sender scopes, selected action ids, allowed and
|
|
85
|
+
forbidden side effects, blockers, and stop conditions).
|
|
86
|
+
- Wait for an explicit approval that names or clearly accepts the rendered plan
|
|
87
|
+
before dispatching lane workers or mutating product state.
|
|
88
|
+
- After approval, execute only the current `planRevision` and
|
|
89
|
+
`selectedActionIds`; re-plan if the planRevision, action ids, sender scopes,
|
|
90
|
+
blockers, side-effect classes, or lane bindings drift.
|
|
91
|
+
|
|
54
92
|
If the invoking prompt says scheduled, automation, cron, heartbeat, fresh-thread,
|
|
55
93
|
run without user input, or similar, run in **automation mode**:
|
|
56
94
|
|
|
@@ -294,6 +332,8 @@ route-proof approval policy. Stop and re-plan if any fresh reread changes the
|
|
|
294
332
|
workspace id, sender ids, source/list id, campaign/table id, new campaign/table
|
|
295
333
|
id, planRevision, actionId, selectedActionIds, allowed side effects, caps,
|
|
296
334
|
status, or blocker set outside the approved packet.
|
|
335
|
+
Do not ask a vague yes/no question; show the exact bounded approval packet and
|
|
336
|
+
require explicit approval for that packet before mutation.
|
|
297
337
|
The short rule: one approval covers the current planRevision and selectedActionIds.
|
|
298
338
|
The approval clarity rule: the operator approves named campaign create/update/verify/untouched buckets and attached senders, not a generic evergreen run.
|
|
299
339
|
The execution rule: act on behalf of the operator; do not ask again for substep approvals while work stays within the lane packet, approved caps, approved side-effect classes, and route-proof approval policy.
|
|
@@ -461,10 +501,22 @@ Do not paste the entire wrapper skill into worker prompts. If the parent cannot
|
|
|
461
501
|
launch at least one visible/durable worker immediately after directory setup,
|
|
462
502
|
stop with `blocked: worker_dispatch_stalled` before any mutation.
|
|
463
503
|
After launching workers, poll only the expected current-run receipt paths from
|
|
464
|
-
`workerDispatch.receiptArtifactHint`.
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
504
|
+
`workerDispatch.receiptArtifactHint`. Polling is progress-aware, not a blind
|
|
505
|
+
wall-clock cutoff: while a visible/durable worker is still active and recent
|
|
506
|
+
readbacks show forward progress, keep polling the expected path and do not
|
|
507
|
+
report `worker_receipt_timeout`. If a worker is active but the receipt is still
|
|
508
|
+
missing after the product postconditions appear complete, send exactly one
|
|
509
|
+
receipt-write recovery prompt that says the worker must write either a success
|
|
510
|
+
receipt or a blocked receipt at the exact path before ending. If no worker
|
|
511
|
+
receipt file appears after a bounded **no-progress** window, for example 10
|
|
512
|
+
minutes without new tool calls, final-file updates, receipt mtime changes, or
|
|
513
|
+
thread progress, stop with `blocked: worker_receipt_timeout`, include the worker
|
|
514
|
+
ids/final-file paths/stderr if available, and do not create or repair campaign
|
|
515
|
+
shells in the parent.
|
|
516
|
+
If a worker produced partial product state but no receipt, recover through the
|
|
517
|
+
same visible/durable worker or a compact repair worker against the existing
|
|
518
|
+
campaign/table ids; never create a duplicate lane campaign to recover a missing
|
|
519
|
+
receipt.
|
|
468
520
|
Use only the repo-local `workerDispatch.receiptArtifactHint` returned by the
|
|
469
521
|
current lane packet for receipt paths.
|
|
470
522
|
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.
|
|
@@ -490,6 +542,10 @@ Lane key: <laneKey>
|
|
|
490
542
|
Allowed side effects: <allowedSideEffects JSON>
|
|
491
543
|
Write the durable receipt to this exact path: <receiptArtifactPath>
|
|
492
544
|
|
|
545
|
+
If your runtime exposes a goal tool, create or maintain this exact goal:
|
|
546
|
+
complete action <actionId> only when <receiptArtifactPath> exists as valid JSON
|
|
547
|
+
for this lane or when a blocked receipt has been written at that same path.
|
|
548
|
+
|
|
493
549
|
Worker lane packet JSON:
|
|
494
550
|
<lane packet JSON>
|
|
495
551
|
|
|
@@ -498,7 +554,14 @@ Use mcp__sellable only. Do not use admin tools, direct DB, Prisma, SQL, web sear
|
|
|
498
554
|
Do not launch, start, schedule, send, or use paid InMail.
|
|
499
555
|
For filter proof, durable receipt status must be `filterDecisionReceipt.status:"applied"` only; never `completed`, `confirmed`, `done`, or aliases.
|
|
500
556
|
For generated messages, `update_cell` is allowed only for the semantic Approved checkbox. Never use `update_cell` for generated message text/body/sample copy. Bad copy requires `revise_message_template_and_rerun` or brief/template revision plus Generate Message rerun. Any generated-message cell override is `blocked: generated_message_cell_override`.
|
|
501
|
-
Complete only this lane
|
|
557
|
+
Complete only this lane. Do not end with narration only. Before your final
|
|
558
|
+
response, run a local file-existence and JSON self-check for
|
|
559
|
+
<receiptArtifactPath>. If the lane succeeded, write the canonical success
|
|
560
|
+
receipt there; if any postcondition, quality gate, verifier schema, or file
|
|
561
|
+
write blocks, write a canonical blocked receipt there with `status:"blocked"`,
|
|
562
|
+
`blocker`, `campaignId`, `tableId`, `actionId`, `laneKey`, `planRevision`, and
|
|
563
|
+
the latest product readback. The terminal condition is filesystem proof that
|
|
564
|
+
<receiptArtifactPath> exists.
|
|
502
565
|
WORKER_PROMPT
|
|
503
566
|
|
|
504
567
|
# Multi-worker launcher equivalent:
|
|
@@ -1028,6 +1091,13 @@ every canonical verifier object under `createCampaignStepReceipt`, including
|
|
|
1028
1091
|
`campaignBriefReceipt`, `sourceDecisionReceipt`, `filterDecisionReceipt`,
|
|
1029
1092
|
`messageDraftingReceipt`, `reviewBatchReceipt`, `sequenceReceipt`,
|
|
1030
1093
|
`finalPausedSendProof`, and `verifyCall`.
|
|
1094
|
+
Write the compact verifier payload to a temporary JSON file and load that object
|
|
1095
|
+
directly into the MCP verify call. Do not manually paste, retype, truncate, or
|
|
1096
|
+
merge full receipt JSON into the tool call. If a verify attempt fails because
|
|
1097
|
+
the payload was malformed, overlong, manually edited, missing a receipt, or used
|
|
1098
|
+
a later reuse planRevision/actionId set, rebuild the compact payload from the
|
|
1099
|
+
durable receipt files and retry once with the original execution
|
|
1100
|
+
`planRevision`/`selectedActionIds` before reporting a verifier blocker.
|
|
1031
1101
|
When compacting, normalize `finalPausedSendProof.currentStep` and
|
|
1032
1102
|
`finalPausedSendProof.campaignStatus` from nested pause/navigation readbacks if
|
|
1033
1103
|
the worker receipt stored those values under `pauseCampaignResult`,
|
|
@@ -1042,6 +1112,7 @@ Short form: Do not use complex inline `jq` for receipt compaction; use Node.
|
|
|
1042
1112
|
Short form: Compact receipts must preserve `researchSenderReceipt`.
|
|
1043
1113
|
Short form: Compact receipts must preserve direct `finalPausedSendProof.currentStep` and `campaignStatus`.
|
|
1044
1114
|
Short form: Never change planRevision/actionId/laneKey while compacting receipts.
|
|
1115
|
+
Short form: Do not hand-build giant receipt tool-call payloads; load compact JSON from disk.
|
|
1045
1116
|
|
|
1046
1117
|
Parent repair dispatch uses the same compact discipline. If the parent sample
|
|
1047
1118
|
quality gate fails after a worker receipt, do not launch a repair worker by
|
|
@@ -1121,10 +1192,12 @@ Message, and verify current-revision sample messages before final completion.
|
|
|
1121
1192
|
`list_tables` and the managed waterfall as authoritative for orientation
|
|
1122
1193
|
before the command-backed plan; `get_campaigns` is a recent campaign page and
|
|
1123
1194
|
may miss canonical evergreen lanes. Match existing campaigns/tables/waterfall
|
|
1195
|
+
Short form: Treat `list_tables` and the managed waterfall as authoritative.
|
|
1124
1196
|
slots to the plan by name (case-insensitive, ignore suffixes like "(Copy)")
|
|
1125
1197
|
and stored slot identity. `list_tables.campaignStatus` and
|
|
1126
1198
|
`list_tables.dashboardBucket` are part of the identity check: a matching
|
|
1127
1199
|
`ARCHIVED` table/campaign is not a plain `REUSE`. If it is the canonical prod
|
|
1200
|
+
Short form: a matching `ARCHIVED` table/campaign is not a plain `REUSE`.
|
|
1128
1201
|
slot and the invocation explicitly allows dashboard visibility repair, repair
|
|
1129
1202
|
it to `PAUSED`; otherwise treat it as archived inventory only. After
|
|
1130
1203
|
`setup_evergreen_campaigns({ mode:"plan" })` returns, that plan is
|