@sellable/mcp 0.1.638 → 0.1.640

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.
@@ -1510,6 +1510,7 @@ export declare function executeRefillSendsCommand(input?: RefillSendsCommandInpu
1510
1510
  executionMode: "yolo";
1511
1511
  requireWorkspace: boolean;
1512
1512
  workspaceId: string;
1513
+ intent: RefillSendsIntent;
1513
1514
  senderIds: string[];
1514
1515
  };
1515
1516
  stopCondition: string;
@@ -1627,6 +1628,7 @@ export declare function executeRefillSendsCommand(input?: RefillSendsCommandInpu
1627
1628
  executionMode: "yolo";
1628
1629
  requireWorkspace: boolean;
1629
1630
  workspaceId: string;
1631
+ intent: RefillSendsIntent;
1630
1632
  senderIds: string[];
1631
1633
  };
1632
1634
  stopCondition: string;
@@ -1775,6 +1777,7 @@ export declare function executeRefillSendsCommand(input?: RefillSendsCommandInpu
1775
1777
  executionMode: "yolo";
1776
1778
  requireWorkspace: boolean;
1777
1779
  workspaceId: string;
1780
+ intent: RefillSendsIntent;
1778
1781
  senderIds: string[];
1779
1782
  };
1780
1783
  stopCondition: string;
@@ -1927,6 +1930,7 @@ export declare function executeRefillSendsCommand(input?: RefillSendsCommandInpu
1927
1930
  executionMode: "yolo";
1928
1931
  requireWorkspace: boolean;
1929
1932
  workspaceId: string;
1933
+ intent: RefillSendsIntent;
1930
1934
  senderIds: string[];
1931
1935
  };
1932
1936
  stopCondition: string;
@@ -2079,6 +2083,7 @@ export declare function executeRefillSendsCommand(input?: RefillSendsCommandInpu
2079
2083
  executionMode: "yolo";
2080
2084
  requireWorkspace: boolean;
2081
2085
  workspaceId: string;
2086
+ intent: RefillSendsIntent;
2082
2087
  senderIds: string[];
2083
2088
  };
2084
2089
  stopCondition: string;
@@ -2229,6 +2234,7 @@ export declare function executeRefillSendsCommand(input?: RefillSendsCommandInpu
2229
2234
  executionMode: "yolo";
2230
2235
  requireWorkspace: boolean;
2231
2236
  workspaceId: string;
2237
+ intent: RefillSendsIntent;
2232
2238
  senderIds: string[];
2233
2239
  };
2234
2240
  stopCondition: string;
@@ -2382,6 +2388,7 @@ export declare function executeRefillSendsCommand(input?: RefillSendsCommandInpu
2382
2388
  executionMode: "yolo";
2383
2389
  requireWorkspace: boolean;
2384
2390
  workspaceId: string;
2391
+ intent: RefillSendsIntent;
2385
2392
  senderIds: string[];
2386
2393
  };
2387
2394
  stopCondition: string;
@@ -2537,6 +2544,7 @@ export declare function executeRefillSendsCommand(input?: RefillSendsCommandInpu
2537
2544
  executionMode: "yolo";
2538
2545
  requireWorkspace: boolean;
2539
2546
  workspaceId: string;
2547
+ intent: RefillSendsIntent;
2540
2548
  senderIds: string[];
2541
2549
  };
2542
2550
  stopCondition: string;
@@ -7,6 +7,18 @@ import { listSenders } from "./senders.js";
7
7
  import { createWorkspaceContext, normalizeExplicitWorkspaceId, } from "./workspace-context.js";
8
8
  const REFILL_SEND_ACTION_TYPES = ["send_invite", "send_inmail_closed"];
9
9
  const REFILL_SEND_ACTION_TYPE_SET = new Set(REFILL_SEND_ACTION_TYPES);
10
+ const REFILL_SEND_INTENT_SET = new Set([
11
+ "plain",
12
+ "active",
13
+ "evergreen",
14
+ "auto",
15
+ ]);
16
+ function targetConfigIntent(targetConfig) {
17
+ const intent = targetConfig?.laneScope.intent;
18
+ return typeof intent === "string" && REFILL_SEND_INTENT_SET.has(intent)
19
+ ? intent
20
+ : undefined;
21
+ }
10
22
  const DEFAULT_SCHEDULER_FORWARD_HOURS = 48;
11
23
  const MCP_PAID_INMAIL_CREDITS_MAX_STALENESS_SECONDS = 4 * 60 * 60;
12
24
  const YOLO_MAX_ACTIONS_PER_INVOCATION = 64;
@@ -252,7 +264,9 @@ function buildRefillSendsCommand(input) {
252
264
  const horizonSendDays = targetDate || untilDate
253
265
  ? null
254
266
  : normalizeHorizonSendDays(input.horizonSendDays);
255
- const intent = yolo ? "auto" : (input.intent ?? "plain");
267
+ const intent = targetConfigIntent(input.targetConfig) ??
268
+ input.intent ??
269
+ (yolo ? "auto" : "plain");
256
270
  const approvalMode = input.approvalMode ?? (yolo ? "approve" : "mark_ready");
257
271
  const actionTypes = input.actionTypes;
258
272
  const senderScope = hasSenderSelectors
@@ -442,7 +456,9 @@ function targetPlanInputFor(input = {}) {
442
456
  : normalizeHorizonSendDays(input.horizonSendDays);
443
457
  const approvalMode = input.approvalMode ?? (input.yolo === true ? "approve" : "mark_ready");
444
458
  return {
445
- intent: input.yolo === true ? "auto" : (input.intent ?? "plain"),
459
+ intent: targetConfigIntent(input.targetConfig) ??
460
+ input.intent ??
461
+ (input.yolo === true ? "auto" : "plain"),
446
462
  ...(input.campaignId ? { campaignId: input.campaignId } : {}),
447
463
  ...(input.tableId ? { tableId: input.tableId } : {}),
448
464
  ...(senderIds.length > 0 ? { senderIds } : {}),
@@ -1600,7 +1616,7 @@ export async function executeRefillSendsCommand(input = {}) {
1600
1616
  }
1601
1617
  const result = await refillSendsV2Command({
1602
1618
  workspaceId,
1603
- intent: "auto",
1619
+ intent: targetConfigIntent(exactTargetConfig) ?? scopedInput.intent ?? "auto",
1604
1620
  senderIds: exactTargetConfig?.senderScope.senderIds ??
1605
1621
  normalizeStrings(scopedInput.senderIds),
1606
1622
  actionTypes: exactTargetConfig
@@ -1658,6 +1674,9 @@ export async function executeRefillSendsCommand(input = {}) {
1658
1674
  executionMode: "yolo",
1659
1675
  requireWorkspace: true,
1660
1676
  workspaceId,
1677
+ intent: targetConfigIntent(continuationTargetConfig) ??
1678
+ scopedInput.intent ??
1679
+ "auto",
1661
1680
  senderIds: normalizeStrings(scopedInput.senderIds),
1662
1681
  ...(scopedInput.actionTypes
1663
1682
  ? { actionTypes: scopedInput.actionTypes }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/mcp",
3
- "version": "0.1.638",
3
+ "version": "0.1.640",
4
4
  "type": "module",
5
5
  "description": "Sellable MCP server for Claude Code, Codex, and Hermes campaign workflows",
6
6
  "main": "dist/index.js",
@@ -112,6 +112,13 @@ workspace terminal with no continuation instead of opening another identical
112
112
  fence. Do not ask the user to type `continue` and do not start a second run while
113
113
  a fence is active.
114
114
 
115
+ Route intent must stay identical from the rendered packet through execution.
116
+ Workspace-wide `--yolo` defaults to `intent:"auto"`, so use `intent:"auto"`
117
+ for its opening `get_refill_target_plan`, packet rereads, and `refill_sends`
118
+ call. Never render a `plain` planner packet and then execute an `auto` yolo
119
+ coordinator. If the operator explicitly supplies another supported intent,
120
+ preserve that exact intent on every planner, coordinator, and continuation call.
121
+
115
122
  `targetConfig` and the server-issued `runHandle` are separate values and must
116
123
  survive each continuation unchanged except for a server-issued takeover fence.
117
124
  Only a literal `messageTemplateRevision` with `source:"user_approved"`, the
@@ -238,7 +245,7 @@ Examples:
238
245
 
239
246
  ```text
240
247
  refill_sends({ yolo:true, executionMode:"yolo", requireWorkspace:true, workspaceId:"cmlq1v8ms0000jx04ang4hi7e" })
241
- get_refill_target_plan({ intent:"plain", approvalMode:"approve", workspaceId:"cmlq1v8ms0000jx04ang4hi7e" })
248
+ get_refill_target_plan({ intent:"auto", approvalMode:"approve", workspaceId:"cmlq1v8ms0000jx04ang4hi7e" })
242
249
  list_senders({ workspaceId:"cmlq1v8ms0000jx04ang4hi7e" })
243
250
  ```
244
251
 
@@ -359,11 +359,15 @@ allocation-attempt count`, not total ready supply, while `readyCellsFound`
359
359
  post-refresh packet. If paid InMail is below threshold after the fresh credit read, report
360
360
  the exact campaign/table/column threshold action or same-campaign
361
361
  connection fallback; `--yolo` does not lower paid-InMail thresholds or create campaigns.
362
- 2. Call `resolve_campaign_fill_route`. Use `intent:"plain"` for generic
363
- fill/load language, `intent:"active"` only when the user explicitly narrowed
364
- to active regular campaigns or when the plain route has stale managed
365
- waterfall evidence, and `intent:"evergreen"` only when the user explicitly
366
- asked for evergreen or horizon work. The resolver must refetch current
362
+ 2. Call `resolve_campaign_fill_route`. For generic workspace-wide `--yolo`,
363
+ use `intent:"auto"` from the opening `get_refill_target_plan` through the
364
+ rendered packet, `refill_sends`, and every continuation. Never render a
365
+ `plain` packet and then execute an `auto` coordinator. Use `intent:"plain"`
366
+ for generic non-yolo fill/load language, `intent:"active"` only when the user
367
+ explicitly narrowed to active regular campaigns or when the plain route has
368
+ stale managed waterfall evidence, and `intent:"evergreen"` only when the
369
+ user explicitly asked for evergreen or horizon work. If the operator
370
+ explicitly supplies a supported intent, preserve it on every call. The resolver must refetch current
367
371
  dashboard-active campaigns as well as managed waterfall state. If the plain
368
372
  route returns managed waterfall targets but skipped targets include
369
373
  archived/completed waterfall slots, or if the returned targets do not cover a
@@ -758,7 +762,8 @@ Short form: exactly two choices: `Accept` and `Decline`.
758
762
  `--yolo` mode is explicit auto-accept. If Christian includes `--yolo` in the
759
763
  same refill request, do not ask the `Accept` / `Decline` question. Instead:
760
764
 
761
- 1. render the same final approval packet;
765
+ 1. use the wrapper-resolved route intent for the opening planner and render the
766
+ same final approval packet from that exact intent;
762
767
  2. reread `get_campaign_refill_state` and, when the packet includes paid-InMail
763
768
  credit refreshes, verify the current `get_refill_target_plan` action
764
769
  candidates still name the same sender ids, campaign ids, table ids, and
@@ -129,6 +129,7 @@
129
129
  ],
130
130
  "executionRules": [
131
131
  "Execute only target.globalActionQueue[0].",
132
+ "Keep route intent identical across the opening planner, rendered packet, refill_sends execution, and continuations. Workspace-wide --yolo defaults to auto; never render plain and execute auto.",
132
133
  "Execute one action, then perform a full authoritative reread before selecting any next action.",
133
134
  "When a bounded --yolo call returns status in_progress, immediately invoke its exact continuation.arguments. active_exact_run requires targetConfig plus runId/fence; next_exact_target requires the unchanged workspace envelope plus the next preflighted targetConfig and no stale fence. Never ask the user to continue or start a second run while a fence is active.",
134
135
  "A campaign/table/actionKey change is allowed only when the fresh planner selects that campaign inside the original sender lane chain and the side-effect class stays inside the approved refill envelope."