@sellable/mcp 0.1.793 → 0.1.794
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/dist/agent-tool-names.d.ts +2 -2
- package/dist/agent-tool-names.js +14 -0
- package/dist/scheduler-envelope.d.ts +190 -0
- package/dist/scheduler-envelope.js +412 -0
- package/dist/server.js +28 -2
- package/dist/tools/campaign-message-preparation.d.ts +25 -0
- package/dist/tools/campaign-message-preparation.js +37 -0
- package/dist/tools/campaign-processing.d.ts +74 -1
- package/dist/tools/campaign-processing.js +57 -1
- package/dist/tools/prompts.d.ts +15 -3
- package/dist/tools/prompts.js +25 -0
- package/dist/tools/refill-executors.d.ts +43 -70
- package/dist/tools/refill-executors.js +201 -273
- package/dist/tools/refill-sends.d.ts +3 -3
- package/dist/tools/refill-sends.js +1 -1
- package/dist/tools/refill-target-plan.js +1 -1
- package/dist/tools/refill-v3-advance-contract.d.ts +618 -0
- package/dist/tools/refill-v3-advance-contract.js +920 -0
- package/dist/tools/refill-v3-advance.d.ts +397 -0
- package/dist/tools/refill-v3-advance.js +75 -0
- package/dist/tools/refill-v3-attention-packet-contract.d.ts +608 -0
- package/dist/tools/refill-v3-attention-packet-contract.js +911 -0
- package/dist/tools/refill-v3-campaign-work.d.ts +324 -0
- package/dist/tools/refill-v3-campaign-work.js +1015 -0
- package/dist/tools/refill-v3-continue-contract.d.ts +433 -0
- package/dist/tools/refill-v3-continue-contract.js +112 -0
- package/dist/tools/refill-v3-continue.d.ts +501 -0
- package/dist/tools/refill-v3-continue.js +654 -0
- package/dist/tools/refill-v3-edit-selected-campaign-contract.d.ts +208 -0
- package/dist/tools/refill-v3-edit-selected-campaign-contract.js +351 -0
- package/dist/tools/refill-v3-edit-selected-campaign.d.ts +232 -0
- package/dist/tools/refill-v3-edit-selected-campaign.js +147 -0
- package/dist/tools/refill-v3-fill-ready-contract.d.ts +198 -0
- package/dist/tools/refill-v3-fill-ready-contract.js +324 -0
- package/dist/tools/refill-v3-fill-ready.d.ts +199 -0
- package/dist/tools/refill-v3-fill-ready.js +136 -0
- package/dist/tools/refill-v3-source-family-dispatch.d.ts +249 -0
- package/dist/tools/refill-v3-source-family-dispatch.js +514 -0
- package/dist/tools/refill-v3-waterfall-contract.d.ts +156 -0
- package/dist/tools/refill-v3-waterfall-contract.js +181 -0
- package/dist/tools/refill-v3-waterfall.d.ts +136 -0
- package/dist/tools/refill-v3-waterfall.js +161 -0
- package/dist/tools/refill-v3-world-state-contract.d.ts +666 -0
- package/dist/tools/refill-v3-world-state-contract.js +790 -0
- package/dist/tools/refill-v3-world-state.d.ts +592 -0
- package/dist/tools/refill-v3-world-state.js +137 -0
- package/dist/tools/registry.d.ts +1710 -3
- package/dist/tools/registry.js +19 -0
- package/package.json +1 -1
- package/skills/refill-sends/SKILL.md +89 -4
- package/skills/refill-sends-waterfall-order/SKILL.md +174 -0
- package/skills/refill-sends-work-campaign/SKILL.md +253 -0
- package/skills/refill-sends-workflow/SKILL.md +112 -5
- package/skills/refill-sends-workflow/core/flow.v3.json +209 -0
|
@@ -0,0 +1,618 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Refill V3 `advance` PACKAGE seam (Phase 146.5 Plan 10, RV3FLOW-001).
|
|
3
|
+
*
|
|
4
|
+
* This module owns the PUBLIC vocabulary of the one-step coordinator:
|
|
5
|
+
*
|
|
6
|
+
* 1. the closed `{workspaceId,scope}` declarative input schema;
|
|
7
|
+
* 2. the closed five-variant result union plus its top-level output schema; and
|
|
8
|
+
* 3. the SOLE unknown-value result decoder every installed client runs.
|
|
9
|
+
*
|
|
10
|
+
* It declares NO packet shape and NO second AI action list: the
|
|
11
|
+
* `campaign_attention_required` packet, its decoder, its schema, and the closed
|
|
12
|
+
* action vocabulary are owned by Plan 02 T3 in
|
|
13
|
+
* `refill-v3-attention-packet-contract.ts` and only RE-EXPORTED through this
|
|
14
|
+
* seam (assumption `A10-PACKET-CONTRACT-IMPORTED`). The five-conjunct exhaustion
|
|
15
|
+
* predicate is likewise imported, never restated.
|
|
16
|
+
*
|
|
17
|
+
* Constraints inherited from the sibling contracts: zero imports outside this
|
|
18
|
+
* package, no app `src/**`, hand-rolled guards, as-const JSON-Schema literals,
|
|
19
|
+
* strict-in/tolerant-out decoding, and a compatible-RANGE schema-version gate.
|
|
20
|
+
*/
|
|
21
|
+
import { REFILL_V3_CAMPAIGN_ATTENTION_ACTIONS, REFILL_V3_CAMPAIGN_ATTENTION_RESULTS, REFILL_V3_EXHAUSTION_PREDICATE, decodeRefillV3CampaignAttentionPacket, encodeRefillV3CampaignAttentionPacket, type RefillV3CampaignAttentionAction, type RefillV3CampaignAttentionPacket, type RefillV3SchemaVersionSupport, type RefillV3SupplyCounts } from "./refill-v3-attention-packet-contract.js";
|
|
22
|
+
import { type RefillWorldStateLane } from "./refill-v3-world-state-contract.js";
|
|
23
|
+
/**
|
|
24
|
+
* The imported seams, re-exported so a consumer needs exactly ONE import to
|
|
25
|
+
* produce a packet, validate an AI action, or evaluate exhaustion. These are
|
|
26
|
+
* VALUE re-exports of a single declaration, never a second declaration.
|
|
27
|
+
*/
|
|
28
|
+
export { REFILL_V3_CAMPAIGN_ATTENTION_ACTIONS, REFILL_V3_CAMPAIGN_ATTENTION_RESULTS, REFILL_V3_EXHAUSTION_PREDICATE, decodeRefillV3CampaignAttentionPacket, encodeRefillV3CampaignAttentionPacket, };
|
|
29
|
+
export type { RefillV3CampaignAttentionAction, RefillV3CampaignAttentionPacket, RefillV3SupplyCounts, };
|
|
30
|
+
export declare const REFILL_V3_ADVANCE_SCHEMA_NAMESPACE: "refill_v3_advance";
|
|
31
|
+
export declare const REFILL_V3_ADVANCE_SCHEMA_MAJOR = 1;
|
|
32
|
+
export declare const REFILL_V3_ADVANCE_SCHEMA_VERSION: "refill_v3_advance.v1.0";
|
|
33
|
+
export declare function resolveRefillV3AdvanceSchemaVersion(value: unknown): RefillV3SchemaVersionSupport;
|
|
34
|
+
/**
|
|
35
|
+
* The ONE public key set.
|
|
36
|
+
*
|
|
37
|
+
* `yolo` is the OPERATOR'S AUTONOMY GRANT, and it is the only optional key. It
|
|
38
|
+
* is deliberately NOT a mode: it carries no campaign selection, no execution
|
|
39
|
+
* variant, and no enum. Evergreen-ness stays DERIVED from the workspace's own
|
|
40
|
+
* campaigns, so a caller still cannot ask for a particular campaign to start —
|
|
41
|
+
* it can only grant, or withhold, the autonomy to start one at all.
|
|
42
|
+
*
|
|
43
|
+
* The linkage is V1's, restored rather than invented: `flow.v1.json`'s
|
|
44
|
+
* `yoloMode` block carries `approvalSource: "explicit_yolo_flag"` and lists
|
|
45
|
+
* `start_paused_campaign` among its `autoExecutableActions`, and `refill_sends`
|
|
46
|
+
* states it as "In --yolo or after one Accept ... a fresh exact
|
|
47
|
+
* start_paused_campaign packet authorizes starting only that selected PAUSED
|
|
48
|
+
* fallback". The V3 cutover dropped that grant; this restores it.
|
|
49
|
+
*/
|
|
50
|
+
export declare const REFILL_V3_ADVANCE_INPUT_KEYS: readonly ["workspaceId", "scope", "yolo"];
|
|
51
|
+
export type RefillV3AdvanceInputKey = (typeof REFILL_V3_ADVANCE_INPUT_KEYS)[number];
|
|
52
|
+
/** The keys a caller MUST supply. `yolo` is optional and defaults to false. */
|
|
53
|
+
export declare const REFILL_V3_ADVANCE_REQUIRED_INPUT_KEYS: readonly ["workspaceId", "scope"];
|
|
54
|
+
/**
|
|
55
|
+
* Keys that recreate the durable state machine this phase deletes. They are
|
|
56
|
+
* enumerated so a REFUSAL can name the exact offending field instead of a
|
|
57
|
+
* generic "unknown key", and so a source scan can prove no caller sends them.
|
|
58
|
+
*/
|
|
59
|
+
export declare const REFILL_V3_ADVANCE_FORBIDDEN_INPUT_KEYS: readonly ["continuation", "taskReceipts", "authorityReceiptFacts", "receiptFacts", "retryCount", "attempt", "attempts", "cursor", "rows", "row", "actions", "action", "progress", "runId", "ledger", "waterfall", "evaluatedAt"];
|
|
60
|
+
export declare const REFILL_V3_ADVANCE_INPUT_SCHEMA: Readonly<{
|
|
61
|
+
readonly type: "object";
|
|
62
|
+
readonly additionalProperties: false;
|
|
63
|
+
readonly required: readonly ["workspaceId", "scope"];
|
|
64
|
+
readonly properties: {
|
|
65
|
+
readonly workspaceId: {
|
|
66
|
+
readonly type: "string";
|
|
67
|
+
readonly minLength: 1;
|
|
68
|
+
readonly description: "Explicit request-scoped workspace id. Pass this instead of switching the shared active workspace.";
|
|
69
|
+
};
|
|
70
|
+
readonly scope: {
|
|
71
|
+
readonly description: "Either a 1-3 day sender-local horizon or an exact sender/date set. There is no lane input, no row input, and no mode input.";
|
|
72
|
+
readonly oneOf: readonly [{
|
|
73
|
+
readonly type: "object";
|
|
74
|
+
readonly additionalProperties: false;
|
|
75
|
+
readonly required: readonly ["kind", "days"];
|
|
76
|
+
readonly properties: {
|
|
77
|
+
readonly kind: {
|
|
78
|
+
readonly type: "string";
|
|
79
|
+
readonly const: "sender_local_horizon";
|
|
80
|
+
};
|
|
81
|
+
readonly days: {
|
|
82
|
+
readonly type: "integer";
|
|
83
|
+
readonly minimum: 1;
|
|
84
|
+
readonly maximum: 3;
|
|
85
|
+
};
|
|
86
|
+
readonly senderIds: {
|
|
87
|
+
readonly type: "array";
|
|
88
|
+
readonly items: {
|
|
89
|
+
readonly type: "string";
|
|
90
|
+
readonly minLength: 1;
|
|
91
|
+
};
|
|
92
|
+
readonly minItems: 1;
|
|
93
|
+
};
|
|
94
|
+
};
|
|
95
|
+
}, {
|
|
96
|
+
readonly type: "object";
|
|
97
|
+
readonly additionalProperties: false;
|
|
98
|
+
readonly required: readonly ["kind", "senderDates"];
|
|
99
|
+
readonly properties: {
|
|
100
|
+
readonly kind: {
|
|
101
|
+
readonly type: "string";
|
|
102
|
+
readonly const: "exact_sender_dates";
|
|
103
|
+
};
|
|
104
|
+
readonly senderDates: {
|
|
105
|
+
readonly type: "array";
|
|
106
|
+
readonly minItems: 1;
|
|
107
|
+
readonly items: {
|
|
108
|
+
readonly type: "object";
|
|
109
|
+
readonly additionalProperties: false;
|
|
110
|
+
readonly required: readonly ["senderId", "dates"];
|
|
111
|
+
readonly properties: {
|
|
112
|
+
readonly senderId: {
|
|
113
|
+
readonly type: "string";
|
|
114
|
+
readonly minLength: 1;
|
|
115
|
+
};
|
|
116
|
+
readonly dates: {
|
|
117
|
+
readonly type: "array";
|
|
118
|
+
readonly minItems: 1;
|
|
119
|
+
readonly items: {
|
|
120
|
+
readonly type: "string";
|
|
121
|
+
readonly pattern: "^\\d{4}-\\d{2}-\\d{2}$";
|
|
122
|
+
};
|
|
123
|
+
};
|
|
124
|
+
};
|
|
125
|
+
};
|
|
126
|
+
};
|
|
127
|
+
};
|
|
128
|
+
}];
|
|
129
|
+
};
|
|
130
|
+
readonly yolo: {
|
|
131
|
+
readonly type: "boolean";
|
|
132
|
+
readonly description: "The operator's AUTONOMY GRANT, true only when the operator actually asked for --yolo. It is not a mode and selects nothing: WHICH campaign may start is derived from the workspace's own campaigns. It authorizes exactly one thing this call could not otherwise do — starting one already-eligible PAUSED derived-evergreen campaign once every active campaign for a row is exhausted. Omit it, or pass false, for a conservative run that reports that exhaustion instead of acting on it.";
|
|
133
|
+
};
|
|
134
|
+
};
|
|
135
|
+
}>;
|
|
136
|
+
export declare const REFILL_V3_ADVANCE_RESULT_KINDS: readonly ["advanced", "campaign_attention_required", "awaiting_external_change", "complete", "blocked"];
|
|
137
|
+
export type RefillV3AdvanceResultKind = (typeof REFILL_V3_ADVANCE_RESULT_KINDS)[number];
|
|
138
|
+
/**
|
|
139
|
+
* The closed set of transitions the coordinator may execute. Each names the ONE
|
|
140
|
+
* existing authority that owns it; the coordinator never invents an authority
|
|
141
|
+
* and never carries executable prose.
|
|
142
|
+
*/
|
|
143
|
+
export declare const REFILL_V3_ADVANCE_ACTION_KINDS: readonly ["refresh_paid_credit_fact", "recheck_sender_connection", "fill_ready", "start_evergreen_campaign"];
|
|
144
|
+
export type RefillV3AdvanceActionKind = (typeof REFILL_V3_ADVANCE_ACTION_KINDS)[number];
|
|
145
|
+
/** The exact existing owner each action key dispatches to. */
|
|
146
|
+
export declare const REFILL_V3_ADVANCE_ACTION_AUTHORITIES: Readonly<{
|
|
147
|
+
readonly refresh_paid_credit_fact: "getOrRefreshPaidInmailCreditFact";
|
|
148
|
+
readonly recheck_sender_connection: "recheckRefillV3SenderConnection";
|
|
149
|
+
readonly fill_ready: "fillRefillV3Ready";
|
|
150
|
+
readonly start_evergreen_campaign: "startRefillV3EvergreenCampaign";
|
|
151
|
+
}>;
|
|
152
|
+
export type RefillV3AdvanceAuthority = (typeof REFILL_V3_ADVANCE_ACTION_AUTHORITIES)[RefillV3AdvanceActionKind];
|
|
153
|
+
/**
|
|
154
|
+
* The TOTAL action precedence. Two locked requirements otherwise appear to
|
|
155
|
+
* conflict: a required exact sender/lane refresh (111o hand-back) must preempt
|
|
156
|
+
* an otherwise-eligible ready action on the same paid row, and health must be
|
|
157
|
+
* resolved before the AI campaign seam is reachable at all.
|
|
158
|
+
*/
|
|
159
|
+
export declare const REFILL_V3_ADVANCE_ACTION_PRECEDENCE: readonly ["refresh_paid_credit_fact", "recheck_sender_connection", "fill_ready", "campaign_attention"];
|
|
160
|
+
/** Closed terminal codes. `complete` carries exactly one of these. */
|
|
161
|
+
export declare const REFILL_V3_ADVANCE_TERMINAL_CODES: readonly ["active_campaigns_exhausted", "no_eligible_campaigns", "campaign_supply_unclaimed_defect", "daily_targets_met", "scope_unresolved"];
|
|
162
|
+
export type RefillV3AdvanceTerminalCode = (typeof REFILL_V3_ADVANCE_TERMINAL_CODES)[number];
|
|
163
|
+
/**
|
|
164
|
+
* Codes emitted ONLY by the coordinator. They EXTEND the fill-ready vocabulary,
|
|
165
|
+
* which already extends the world-state vocabulary, so retryability stays a
|
|
166
|
+
* property of the code rather than of a call site.
|
|
167
|
+
*/
|
|
168
|
+
export declare const REFILL_V3_ADVANCE_ONLY_REASON_CODES: readonly ["account_identity_missing", "no_progress_refused", "retryable_paid_attempts_exhausted", "unknown_transport_vocabulary", "forged_authority_receipt_facts", "authority_failure_uncertain", "sender_scope_unresolved", "campaign_supply_unclaimed", "lane_campaigns_exhausted", "missing_balance", "blocked", "workspace_membership_revoked"];
|
|
169
|
+
export type RefillV3AdvanceOnlyReasonCode = (typeof REFILL_V3_ADVANCE_ONLY_REASON_CODES)[number];
|
|
170
|
+
export declare const REFILL_V3_ADVANCE_REASON_CODES: readonly ["global_cooldown", "connection_cooldown", "paid_inmail_cooldown", "endpoint_temporarily_unavailable", "date_in_past", "no_sending_hours", "sender_disconnected", "sender_limit_reached", "daily_target_met", "no_eligible_campaign", "no_ready_supply", "sales_nav_disconnected", "insufficient_paid_credits", "paid_inmail_connection_health_recheck_required", "paid_inmail_credit_refresh_failed", "invalid_paid_configuration", "campaign_table_missing", "campaign_sequence_invalid", "source_family_unresolved", "campaign_work_in_flight", "zero_requested_count", "idempotency_scope_mismatch", "uncertain_outcome", "placed_under_other_sender", "placed_off_target_date", "paid_inmail_credit_receipt_invalid", "awaiting_external_change", "approval_authority_invalid", "approval_authority_in_flight", "approval_dispatch_incomplete", "ready_cells_unavailable", "sender_affinity_conflict", "scheduler_target_omitted", "scheduler_failed", "receipt_readback_mismatch", "account_identity_missing", "no_progress_refused", "retryable_paid_attempts_exhausted", "unknown_transport_vocabulary", "forged_authority_receipt_facts", "authority_failure_uncertain", "sender_scope_unresolved", "campaign_supply_unclaimed", "lane_campaigns_exhausted", "missing_balance", "blocked", "workspace_membership_revoked"];
|
|
171
|
+
export type RefillV3AdvanceReasonCode = (typeof REFILL_V3_ADVANCE_REASON_CODES)[number];
|
|
172
|
+
export declare const REFILL_V3_ADVANCE_RECEIPT_STATUSES: readonly ["executed", "attached", "failed", "indeterminate"];
|
|
173
|
+
export type RefillV3AdvanceReceiptStatus = (typeof REFILL_V3_ADVANCE_RECEIPT_STATUSES)[number];
|
|
174
|
+
/**
|
|
175
|
+
* Identity, payload, and bookkeeping classes NO result variant may carry at its
|
|
176
|
+
* OWN level. A raw row/cell/provider payload would move the table into the
|
|
177
|
+
* caller; a retry counter or cursor would recreate the deleted state machine.
|
|
178
|
+
*
|
|
179
|
+
* `tableId` is deliberately ABSENT from this list: the Plan 02 packet contract
|
|
180
|
+
* owns `packet.scope.tableId` as a required field, so banning it here would make
|
|
181
|
+
* the two contracts mutually unsatisfiable. Every other identity class stays
|
|
182
|
+
* banned, and the packet's own forbidden-key list governs the packet.
|
|
183
|
+
*/
|
|
184
|
+
export declare const REFILL_V3_ADVANCE_FORBIDDEN_RESULT_KEYS: readonly ["rows", "cells", "rowIds", "cellIds", "rowPayload", "cellPayload", "providerResponse", "providerPayload", "rank", "ranking", "graph", "waterfall", "retryCount", "attempts", "cursor", "continuation", "prompt", "instructions", "durationMs", "evaluatedAt"];
|
|
185
|
+
export type RefillV3AdvanceScopeEcho = {
|
|
186
|
+
workspaceId: string;
|
|
187
|
+
scopeKind: "sender_local_horizon" | "exact_sender_dates";
|
|
188
|
+
/** Stable identity of the requested scope. Never a clock or a nonce. */
|
|
189
|
+
scopeFingerprint: string;
|
|
190
|
+
};
|
|
191
|
+
/**
|
|
192
|
+
* The bounded observation summary every variant carries. It is a FINGERPRINT
|
|
193
|
+
* plus aggregate counts, never rows: a caller that needs rows calls
|
|
194
|
+
* `refill_v3_world_state`.
|
|
195
|
+
*/
|
|
196
|
+
export type RefillV3AdvanceObservation = {
|
|
197
|
+
observationFingerprint: string;
|
|
198
|
+
senderCount: number;
|
|
199
|
+
rowCount: number;
|
|
200
|
+
dates: string[];
|
|
201
|
+
availableSlots: number;
|
|
202
|
+
supply: RefillV3SupplyCounts;
|
|
203
|
+
};
|
|
204
|
+
export type RefillV3AdvanceActionIdentity = {
|
|
205
|
+
kind: RefillV3AdvanceActionKind;
|
|
206
|
+
/** Derived ONLY from product-state facts. No clock, nonce, or duration. */
|
|
207
|
+
actionKey: string;
|
|
208
|
+
authority: RefillV3AdvanceAuthority;
|
|
209
|
+
senderId: string;
|
|
210
|
+
date: string;
|
|
211
|
+
lane: RefillWorldStateLane;
|
|
212
|
+
campaignId: string | null;
|
|
213
|
+
evidenceFingerprint: string;
|
|
214
|
+
};
|
|
215
|
+
export type RefillV3AdvanceReceiptRef = {
|
|
216
|
+
actionKey: string;
|
|
217
|
+
status: RefillV3AdvanceReceiptStatus;
|
|
218
|
+
effectFingerprint: string;
|
|
219
|
+
productStateDelta: boolean;
|
|
220
|
+
reasonCode: RefillV3AdvanceReasonCode | null;
|
|
221
|
+
};
|
|
222
|
+
export type RefillV3AdvanceRowScope = {
|
|
223
|
+
senderId: string;
|
|
224
|
+
date: string;
|
|
225
|
+
lane: RefillWorldStateLane;
|
|
226
|
+
campaignId: string | null;
|
|
227
|
+
};
|
|
228
|
+
export type RefillV3AdvanceDeferral = RefillV3AdvanceRowScope & {
|
|
229
|
+
code: RefillV3AdvanceReasonCode;
|
|
230
|
+
message: string;
|
|
231
|
+
resumeAt: string | null;
|
|
232
|
+
/** The last matching authority receipt, by action key. */
|
|
233
|
+
receiptRef: string | null;
|
|
234
|
+
};
|
|
235
|
+
export type RefillV3AdvanceBlocker = RefillV3AdvanceRowScope & {
|
|
236
|
+
code: RefillV3AdvanceReasonCode;
|
|
237
|
+
message: string;
|
|
238
|
+
permanent: boolean;
|
|
239
|
+
/** The offending closed-vocabulary field for a fail-closed refusal. */
|
|
240
|
+
field: string | null;
|
|
241
|
+
};
|
|
242
|
+
export type RefillV3AdvanceResult = {
|
|
243
|
+
kind: "advanced";
|
|
244
|
+
scope: RefillV3AdvanceScopeEcho;
|
|
245
|
+
action: RefillV3AdvanceActionIdentity;
|
|
246
|
+
receipt: RefillV3AdvanceReceiptRef;
|
|
247
|
+
/** The MANDATORY exact-scope reread. Never the coordinator's own claim. */
|
|
248
|
+
replacementObservation: RefillV3AdvanceObservation;
|
|
249
|
+
} | {
|
|
250
|
+
kind: "campaign_attention_required";
|
|
251
|
+
scope: RefillV3AdvanceScopeEcho;
|
|
252
|
+
packet: RefillV3CampaignAttentionPacket;
|
|
253
|
+
observation: RefillV3AdvanceObservation;
|
|
254
|
+
} | {
|
|
255
|
+
kind: "awaiting_external_change";
|
|
256
|
+
scope: RefillV3AdvanceScopeEcho;
|
|
257
|
+
deferral: RefillV3AdvanceDeferral;
|
|
258
|
+
observation: RefillV3AdvanceObservation;
|
|
259
|
+
} | {
|
|
260
|
+
kind: "complete";
|
|
261
|
+
scope: RefillV3AdvanceScopeEcho;
|
|
262
|
+
terminal: RefillV3AdvanceTerminalCode;
|
|
263
|
+
observation: RefillV3AdvanceObservation;
|
|
264
|
+
} | {
|
|
265
|
+
kind: "blocked";
|
|
266
|
+
scope: RefillV3AdvanceScopeEcho;
|
|
267
|
+
blocker: RefillV3AdvanceBlocker;
|
|
268
|
+
observation: RefillV3AdvanceObservation;
|
|
269
|
+
};
|
|
270
|
+
/** Required keys per variant. The decoder rejects any other key set. */
|
|
271
|
+
export declare const REFILL_V3_ADVANCE_RESULT_KEYS: Readonly<{
|
|
272
|
+
readonly advanced: readonly ["kind", "scope", "action", "receipt", "replacementObservation"];
|
|
273
|
+
readonly campaign_attention_required: readonly ["kind", "scope", "packet", "observation"];
|
|
274
|
+
readonly awaiting_external_change: readonly ["kind", "scope", "deferral", "observation"];
|
|
275
|
+
readonly complete: readonly ["kind", "scope", "terminal", "observation"];
|
|
276
|
+
readonly blocked: readonly ["kind", "scope", "blocker", "observation"];
|
|
277
|
+
}>;
|
|
278
|
+
/**
|
|
279
|
+
* A TOP-LEVEL OBJECT, never a union of arrays: an MCP client validates
|
|
280
|
+
* `structuredContent` against this declaration, and a tool whose answer the
|
|
281
|
+
* client rejects has its entire response discarded.
|
|
282
|
+
*/
|
|
283
|
+
export declare const REFILL_V3_ADVANCE_OUTPUT_SCHEMA: Readonly<{
|
|
284
|
+
readonly type: "object";
|
|
285
|
+
readonly required: readonly ["kind", "scope"];
|
|
286
|
+
readonly properties: {
|
|
287
|
+
readonly schemaVersion: {
|
|
288
|
+
readonly type: "string";
|
|
289
|
+
};
|
|
290
|
+
readonly kind: {
|
|
291
|
+
readonly type: "string";
|
|
292
|
+
readonly enum: readonly ["advanced", "campaign_attention_required", "awaiting_external_change", "complete", "blocked"];
|
|
293
|
+
};
|
|
294
|
+
readonly scope: {
|
|
295
|
+
readonly type: "object";
|
|
296
|
+
readonly additionalProperties: false;
|
|
297
|
+
readonly required: readonly ["workspaceId", "scopeKind", "scopeFingerprint"];
|
|
298
|
+
readonly properties: {
|
|
299
|
+
readonly workspaceId: {
|
|
300
|
+
readonly type: "string";
|
|
301
|
+
readonly minLength: 1;
|
|
302
|
+
};
|
|
303
|
+
readonly scopeKind: {
|
|
304
|
+
readonly type: "string";
|
|
305
|
+
readonly enum: readonly ["sender_local_horizon", "exact_sender_dates"];
|
|
306
|
+
};
|
|
307
|
+
readonly scopeFingerprint: {
|
|
308
|
+
readonly type: "string";
|
|
309
|
+
readonly minLength: 1;
|
|
310
|
+
};
|
|
311
|
+
};
|
|
312
|
+
};
|
|
313
|
+
readonly action: {
|
|
314
|
+
readonly type: "object";
|
|
315
|
+
readonly additionalProperties: false;
|
|
316
|
+
readonly required: readonly ["kind", "actionKey", "authority", "senderId", "date", "lane", "campaignId", "evidenceFingerprint"];
|
|
317
|
+
readonly properties: {
|
|
318
|
+
readonly evidenceFingerprint: {
|
|
319
|
+
readonly type: "string";
|
|
320
|
+
readonly minLength: 1;
|
|
321
|
+
};
|
|
322
|
+
readonly senderId: {
|
|
323
|
+
readonly type: "string";
|
|
324
|
+
readonly minLength: 1;
|
|
325
|
+
};
|
|
326
|
+
readonly date: {
|
|
327
|
+
readonly type: "string";
|
|
328
|
+
readonly pattern: "^\\d{4}-\\d{2}-\\d{2}$";
|
|
329
|
+
};
|
|
330
|
+
readonly lane: {
|
|
331
|
+
readonly type: "string";
|
|
332
|
+
readonly enum: readonly ["connection_invite", "paid_inmail"];
|
|
333
|
+
};
|
|
334
|
+
readonly campaignId: {
|
|
335
|
+
readonly type: readonly ["string", "null"];
|
|
336
|
+
};
|
|
337
|
+
readonly kind: {
|
|
338
|
+
readonly type: "string";
|
|
339
|
+
readonly enum: readonly ["refresh_paid_credit_fact", "recheck_sender_connection", "fill_ready", "start_evergreen_campaign"];
|
|
340
|
+
};
|
|
341
|
+
readonly actionKey: {
|
|
342
|
+
readonly type: "string";
|
|
343
|
+
readonly minLength: 1;
|
|
344
|
+
};
|
|
345
|
+
readonly authority: {
|
|
346
|
+
readonly type: "string";
|
|
347
|
+
readonly enum: ("getOrRefreshPaidInmailCreditFact" | "recheckRefillV3SenderConnection" | "fillRefillV3Ready" | "startRefillV3EvergreenCampaign")[];
|
|
348
|
+
};
|
|
349
|
+
};
|
|
350
|
+
};
|
|
351
|
+
readonly receipt: {
|
|
352
|
+
readonly type: "object";
|
|
353
|
+
readonly additionalProperties: false;
|
|
354
|
+
readonly required: readonly ["actionKey", "status", "effectFingerprint", "productStateDelta", "reasonCode"];
|
|
355
|
+
readonly properties: {
|
|
356
|
+
readonly actionKey: {
|
|
357
|
+
readonly type: "string";
|
|
358
|
+
readonly minLength: 1;
|
|
359
|
+
};
|
|
360
|
+
readonly status: {
|
|
361
|
+
readonly type: "string";
|
|
362
|
+
readonly enum: readonly ["executed", "attached", "failed", "indeterminate"];
|
|
363
|
+
};
|
|
364
|
+
readonly effectFingerprint: {
|
|
365
|
+
readonly type: "string";
|
|
366
|
+
readonly minLength: 1;
|
|
367
|
+
};
|
|
368
|
+
readonly productStateDelta: {
|
|
369
|
+
readonly type: "boolean";
|
|
370
|
+
};
|
|
371
|
+
readonly reasonCode: {
|
|
372
|
+
readonly type: readonly ["string", "null"];
|
|
373
|
+
readonly enum: readonly ["global_cooldown", "connection_cooldown", "paid_inmail_cooldown", "endpoint_temporarily_unavailable", "date_in_past", "no_sending_hours", "sender_disconnected", "sender_limit_reached", "daily_target_met", "no_eligible_campaign", "no_ready_supply", "sales_nav_disconnected", "insufficient_paid_credits", "paid_inmail_connection_health_recheck_required", "paid_inmail_credit_refresh_failed", "invalid_paid_configuration", "campaign_table_missing", "campaign_sequence_invalid", "source_family_unresolved", "campaign_work_in_flight", "zero_requested_count", "idempotency_scope_mismatch", "uncertain_outcome", "placed_under_other_sender", "placed_off_target_date", "paid_inmail_credit_receipt_invalid", "awaiting_external_change", "approval_authority_invalid", "approval_authority_in_flight", "approval_dispatch_incomplete", "ready_cells_unavailable", "sender_affinity_conflict", "scheduler_target_omitted", "scheduler_failed", "receipt_readback_mismatch", "account_identity_missing", "no_progress_refused", "retryable_paid_attempts_exhausted", "unknown_transport_vocabulary", "forged_authority_receipt_facts", "authority_failure_uncertain", "sender_scope_unresolved", "campaign_supply_unclaimed", "lane_campaigns_exhausted", "missing_balance", "blocked", "workspace_membership_revoked", null];
|
|
374
|
+
};
|
|
375
|
+
};
|
|
376
|
+
};
|
|
377
|
+
readonly packet: {
|
|
378
|
+
readonly properties: {
|
|
379
|
+
readonly schemaVersion: {
|
|
380
|
+
readonly type: "string";
|
|
381
|
+
};
|
|
382
|
+
};
|
|
383
|
+
readonly type: "object";
|
|
384
|
+
readonly additionalProperties: false;
|
|
385
|
+
readonly required: readonly ["scope", "evidence"];
|
|
386
|
+
};
|
|
387
|
+
readonly deferral: {
|
|
388
|
+
readonly type: "object";
|
|
389
|
+
readonly additionalProperties: false;
|
|
390
|
+
readonly required: readonly ["senderId", "date", "lane", "campaignId", "code", "message", "resumeAt", "receiptRef"];
|
|
391
|
+
readonly properties: {
|
|
392
|
+
readonly code: {
|
|
393
|
+
readonly type: "string";
|
|
394
|
+
readonly enum: readonly ["global_cooldown", "connection_cooldown", "paid_inmail_cooldown", "endpoint_temporarily_unavailable", "date_in_past", "no_sending_hours", "sender_disconnected", "sender_limit_reached", "daily_target_met", "no_eligible_campaign", "no_ready_supply", "sales_nav_disconnected", "insufficient_paid_credits", "paid_inmail_connection_health_recheck_required", "paid_inmail_credit_refresh_failed", "invalid_paid_configuration", "campaign_table_missing", "campaign_sequence_invalid", "source_family_unresolved", "campaign_work_in_flight", "zero_requested_count", "idempotency_scope_mismatch", "uncertain_outcome", "placed_under_other_sender", "placed_off_target_date", "paid_inmail_credit_receipt_invalid", "awaiting_external_change", "approval_authority_invalid", "approval_authority_in_flight", "approval_dispatch_incomplete", "ready_cells_unavailable", "sender_affinity_conflict", "scheduler_target_omitted", "scheduler_failed", "receipt_readback_mismatch", "account_identity_missing", "no_progress_refused", "retryable_paid_attempts_exhausted", "unknown_transport_vocabulary", "forged_authority_receipt_facts", "authority_failure_uncertain", "sender_scope_unresolved", "campaign_supply_unclaimed", "lane_campaigns_exhausted", "missing_balance", "blocked", "workspace_membership_revoked"];
|
|
395
|
+
};
|
|
396
|
+
readonly message: {
|
|
397
|
+
readonly type: "string";
|
|
398
|
+
};
|
|
399
|
+
readonly resumeAt: {
|
|
400
|
+
readonly type: readonly ["string", "null"];
|
|
401
|
+
};
|
|
402
|
+
readonly receiptRef: {
|
|
403
|
+
readonly type: readonly ["string", "null"];
|
|
404
|
+
};
|
|
405
|
+
readonly senderId: {
|
|
406
|
+
readonly type: "string";
|
|
407
|
+
readonly minLength: 1;
|
|
408
|
+
};
|
|
409
|
+
readonly date: {
|
|
410
|
+
readonly type: "string";
|
|
411
|
+
readonly pattern: "^\\d{4}-\\d{2}-\\d{2}$";
|
|
412
|
+
};
|
|
413
|
+
readonly lane: {
|
|
414
|
+
readonly type: "string";
|
|
415
|
+
readonly enum: readonly ["connection_invite", "paid_inmail"];
|
|
416
|
+
};
|
|
417
|
+
readonly campaignId: {
|
|
418
|
+
readonly type: readonly ["string", "null"];
|
|
419
|
+
};
|
|
420
|
+
};
|
|
421
|
+
};
|
|
422
|
+
readonly blocker: {
|
|
423
|
+
readonly type: "object";
|
|
424
|
+
readonly additionalProperties: false;
|
|
425
|
+
readonly required: readonly ["senderId", "date", "lane", "campaignId", "code", "message", "permanent", "field"];
|
|
426
|
+
readonly properties: {
|
|
427
|
+
readonly code: {
|
|
428
|
+
readonly type: "string";
|
|
429
|
+
readonly enum: readonly ["global_cooldown", "connection_cooldown", "paid_inmail_cooldown", "endpoint_temporarily_unavailable", "date_in_past", "no_sending_hours", "sender_disconnected", "sender_limit_reached", "daily_target_met", "no_eligible_campaign", "no_ready_supply", "sales_nav_disconnected", "insufficient_paid_credits", "paid_inmail_connection_health_recheck_required", "paid_inmail_credit_refresh_failed", "invalid_paid_configuration", "campaign_table_missing", "campaign_sequence_invalid", "source_family_unresolved", "campaign_work_in_flight", "zero_requested_count", "idempotency_scope_mismatch", "uncertain_outcome", "placed_under_other_sender", "placed_off_target_date", "paid_inmail_credit_receipt_invalid", "awaiting_external_change", "approval_authority_invalid", "approval_authority_in_flight", "approval_dispatch_incomplete", "ready_cells_unavailable", "sender_affinity_conflict", "scheduler_target_omitted", "scheduler_failed", "receipt_readback_mismatch", "account_identity_missing", "no_progress_refused", "retryable_paid_attempts_exhausted", "unknown_transport_vocabulary", "forged_authority_receipt_facts", "authority_failure_uncertain", "sender_scope_unresolved", "campaign_supply_unclaimed", "lane_campaigns_exhausted", "missing_balance", "blocked", "workspace_membership_revoked"];
|
|
430
|
+
};
|
|
431
|
+
readonly message: {
|
|
432
|
+
readonly type: "string";
|
|
433
|
+
};
|
|
434
|
+
readonly permanent: {
|
|
435
|
+
readonly type: "boolean";
|
|
436
|
+
};
|
|
437
|
+
readonly field: {
|
|
438
|
+
readonly type: readonly ["string", "null"];
|
|
439
|
+
};
|
|
440
|
+
readonly senderId: {
|
|
441
|
+
readonly type: "string";
|
|
442
|
+
readonly minLength: 1;
|
|
443
|
+
};
|
|
444
|
+
readonly date: {
|
|
445
|
+
readonly type: "string";
|
|
446
|
+
readonly pattern: "^\\d{4}-\\d{2}-\\d{2}$";
|
|
447
|
+
};
|
|
448
|
+
readonly lane: {
|
|
449
|
+
readonly type: "string";
|
|
450
|
+
readonly enum: readonly ["connection_invite", "paid_inmail"];
|
|
451
|
+
};
|
|
452
|
+
readonly campaignId: {
|
|
453
|
+
readonly type: readonly ["string", "null"];
|
|
454
|
+
};
|
|
455
|
+
};
|
|
456
|
+
};
|
|
457
|
+
readonly terminal: {
|
|
458
|
+
readonly type: "string";
|
|
459
|
+
readonly enum: readonly ["active_campaigns_exhausted", "no_eligible_campaigns", "campaign_supply_unclaimed_defect", "daily_targets_met", "scope_unresolved"];
|
|
460
|
+
};
|
|
461
|
+
readonly observation: {
|
|
462
|
+
readonly type: "object";
|
|
463
|
+
readonly additionalProperties: false;
|
|
464
|
+
readonly required: readonly ["observationFingerprint", "senderCount", "rowCount", "dates", "availableSlots", "supply"];
|
|
465
|
+
readonly properties: {
|
|
466
|
+
readonly observationFingerprint: {
|
|
467
|
+
readonly type: "string";
|
|
468
|
+
readonly minLength: 1;
|
|
469
|
+
};
|
|
470
|
+
readonly senderCount: {
|
|
471
|
+
readonly type: "integer";
|
|
472
|
+
readonly minimum: 0;
|
|
473
|
+
};
|
|
474
|
+
readonly rowCount: {
|
|
475
|
+
readonly type: "integer";
|
|
476
|
+
readonly minimum: 0;
|
|
477
|
+
};
|
|
478
|
+
readonly dates: {
|
|
479
|
+
readonly type: "array";
|
|
480
|
+
readonly items: {
|
|
481
|
+
readonly type: "string";
|
|
482
|
+
readonly pattern: "^\\d{4}-\\d{2}-\\d{2}$";
|
|
483
|
+
};
|
|
484
|
+
};
|
|
485
|
+
readonly availableSlots: {
|
|
486
|
+
readonly type: "integer";
|
|
487
|
+
readonly minimum: 0;
|
|
488
|
+
};
|
|
489
|
+
readonly supply: {
|
|
490
|
+
readonly type: "object";
|
|
491
|
+
readonly additionalProperties: false;
|
|
492
|
+
readonly required: readonly ["readyToSchedule", "readyForApproval", "readyForMessageGeneration", "needsEnrichment"];
|
|
493
|
+
readonly properties: {
|
|
494
|
+
[k: string]: {
|
|
495
|
+
type: string;
|
|
496
|
+
minimum: number;
|
|
497
|
+
};
|
|
498
|
+
};
|
|
499
|
+
};
|
|
500
|
+
};
|
|
501
|
+
};
|
|
502
|
+
readonly replacementObservation: {
|
|
503
|
+
readonly type: "object";
|
|
504
|
+
readonly additionalProperties: false;
|
|
505
|
+
readonly required: readonly ["observationFingerprint", "senderCount", "rowCount", "dates", "availableSlots", "supply"];
|
|
506
|
+
readonly properties: {
|
|
507
|
+
readonly observationFingerprint: {
|
|
508
|
+
readonly type: "string";
|
|
509
|
+
readonly minLength: 1;
|
|
510
|
+
};
|
|
511
|
+
readonly senderCount: {
|
|
512
|
+
readonly type: "integer";
|
|
513
|
+
readonly minimum: 0;
|
|
514
|
+
};
|
|
515
|
+
readonly rowCount: {
|
|
516
|
+
readonly type: "integer";
|
|
517
|
+
readonly minimum: 0;
|
|
518
|
+
};
|
|
519
|
+
readonly dates: {
|
|
520
|
+
readonly type: "array";
|
|
521
|
+
readonly items: {
|
|
522
|
+
readonly type: "string";
|
|
523
|
+
readonly pattern: "^\\d{4}-\\d{2}-\\d{2}$";
|
|
524
|
+
};
|
|
525
|
+
};
|
|
526
|
+
readonly availableSlots: {
|
|
527
|
+
readonly type: "integer";
|
|
528
|
+
readonly minimum: 0;
|
|
529
|
+
};
|
|
530
|
+
readonly supply: {
|
|
531
|
+
readonly type: "object";
|
|
532
|
+
readonly additionalProperties: false;
|
|
533
|
+
readonly required: readonly ["readyToSchedule", "readyForApproval", "readyForMessageGeneration", "needsEnrichment"];
|
|
534
|
+
readonly properties: {
|
|
535
|
+
[k: string]: {
|
|
536
|
+
type: string;
|
|
537
|
+
minimum: number;
|
|
538
|
+
};
|
|
539
|
+
};
|
|
540
|
+
};
|
|
541
|
+
};
|
|
542
|
+
};
|
|
543
|
+
};
|
|
544
|
+
}>;
|
|
545
|
+
/**
|
|
546
|
+
* Sole unknown-value decoder for the public advance result.
|
|
547
|
+
*
|
|
548
|
+
* STRICT and FAIL-CLOSED per variant: the union discriminator selects ONE exact
|
|
549
|
+
* key set, so a result that carries an `advanced` payload under a `complete`
|
|
550
|
+
* kind, an unknown action, a leaked row identity, or a missing replacement
|
|
551
|
+
* observation is rejected outright rather than narrowed into a confident
|
|
552
|
+
* partial success.
|
|
553
|
+
*/
|
|
554
|
+
export declare function decodeRefillV3AdvanceResult(value: unknown): RefillV3AdvanceResult | null;
|
|
555
|
+
/** Wire form of a decoded result. `schemaVersion` is TRANSPORT, not business. */
|
|
556
|
+
export declare function encodeRefillV3AdvanceResult(result: RefillV3AdvanceResult): Record<string, unknown>;
|
|
557
|
+
/**
|
|
558
|
+
* The ONE canonical V3 flow asset. The authoritative consumer is the INSTALLED
|
|
559
|
+
* skill cache, not a file in this repository, so the gate is a compatible RANGE
|
|
560
|
+
* rather than an exact string: an exact pin would halt every installed caller the
|
|
561
|
+
* moment a compatible minor shipped.
|
|
562
|
+
*/
|
|
563
|
+
export declare const REFILL_V3_FLOW_ASSET: Readonly<{
|
|
564
|
+
readonly subskillName: "refill-sends-workflow";
|
|
565
|
+
readonly assetPath: "core/flow.v3.json";
|
|
566
|
+
readonly minimumVersion: "v3.0";
|
|
567
|
+
readonly compatibleMajor: "v3";
|
|
568
|
+
readonly versionPolicy: "compatible_range";
|
|
569
|
+
}>;
|
|
570
|
+
export declare const REFILL_V3_FLOW_VERSION_VERDICTS: readonly ["compatible", "incompatible_major", "below_minimum_minor", "malformed"];
|
|
571
|
+
export type RefillV3FlowVersionVerdict = (typeof REFILL_V3_FLOW_VERSION_VERDICTS)[number];
|
|
572
|
+
/**
|
|
573
|
+
* The typed flow-asset version gate (error law 3): an incompatible major is a
|
|
574
|
+
* NAMED value, never a bare `false` and never a throw.
|
|
575
|
+
*
|
|
576
|
+
* It carries its own two-integer parser instead of importing
|
|
577
|
+
* `isCompatibleRefillFlowVersion`, because that symbol lives beside the V1 API
|
|
578
|
+
* client and a contract module must stay free of the transport layer. The two are
|
|
579
|
+
* bound by an executable agreement assertion in
|
|
580
|
+
* `tests/mcp/refill-v3/146-flow-v3-contract.ts` rather than by one of them
|
|
581
|
+
* silently forking.
|
|
582
|
+
*/
|
|
583
|
+
export declare function resolveRefillV3FlowAssetVersion(value: unknown, bounds?: {
|
|
584
|
+
minimumVersion?: string;
|
|
585
|
+
compatibleMajor?: string;
|
|
586
|
+
}): {
|
|
587
|
+
verdict: RefillV3FlowVersionVerdict;
|
|
588
|
+
major?: number;
|
|
589
|
+
minor?: number;
|
|
590
|
+
};
|
|
591
|
+
/**
|
|
592
|
+
* Tokens no thin caller may contain. Each is a DECISION the deterministic plane
|
|
593
|
+
* owns: choosing a row, a campaign, a lane, an action, a terminal, or a retry.
|
|
594
|
+
*/
|
|
595
|
+
export declare const REFILL_V3_FLOW_FORBIDDEN_CALLER_TOKENS: readonly ["availableSlots", "readyToSchedule", "readyForApproval", "needsEnrichment", "leadSourceFamily", "post_engager", "signal_discovery", "active_campaigns_exhausted", "paid_inmail_connection_health_recheck_required", "recheck_sender_connection", "refresh_paid_credit_fact", "refill_v3_fill_ready", "retryCount", "cursor", "continuation"];
|
|
596
|
+
/**
|
|
597
|
+
* The RETIRED public V3 names and the exact replacement an old caller must use.
|
|
598
|
+
*
|
|
599
|
+
* This covers the REAL skew, not just the new package: an already-installed skill
|
|
600
|
+
* or a cached flow asset can still invoke a removed tool name against the new
|
|
601
|
+
* server. A bare "Unknown tool" is an opaque dead end, so the refusal names the
|
|
602
|
+
* one surviving observation surface instead.
|
|
603
|
+
*/
|
|
604
|
+
export declare const REFILL_V3_RETIRED_TOOL_REPLACEMENTS: Readonly<{
|
|
605
|
+
readonly refill_v3_workspace_inventory: "refill_v3_world_state";
|
|
606
|
+
readonly refill_v3_sender_date_eligibility: "refill_v3_world_state";
|
|
607
|
+
readonly refill_v3_supply_assessment: "refill_v3_world_state";
|
|
608
|
+
}>;
|
|
609
|
+
export type RefillV3RetiredToolName = keyof typeof REFILL_V3_RETIRED_TOOL_REPLACEMENTS;
|
|
610
|
+
/**
|
|
611
|
+
* The typed unknown-tool refusal message for a retired V3 name. It returns a
|
|
612
|
+
* VALUE, never a throw of its own, so the caller gets an actionable replacement
|
|
613
|
+
* with zero partial dispatch.
|
|
614
|
+
*/
|
|
615
|
+
export declare function refillV3RetiredToolRefusal(name: string): string | null;
|
|
616
|
+
/** The two lanes and the closed family list, re-exported for one-import use. */
|
|
617
|
+
export declare const REFILL_V3_ADVANCE_LANES: readonly ["connection_invite", "paid_inmail"];
|
|
618
|
+
export declare const REFILL_V3_ADVANCE_LEAD_SOURCE_FAMILIES: readonly ["post_engager", "signal_discovery", "cold"];
|