@sellable/mcp 0.1.919 → 0.1.920

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.
@@ -714,7 +714,10 @@ export async function runRefillV3CampaignWork(input) {
714
714
  // action eligibility must fail closed before any semantic-column lookup; the
715
715
  // continuation can then return its refreshed token with this typed refusal.
716
716
  if (chosen.action === ACTION.regenerateStaleMessages &&
717
- packet.evidence.supply.readyForMessageGeneration <= 0) {
717
+ packet.evidence.supply.readyForMessageGeneration <= 0 &&
718
+ !(packet.evidence.diagnosticRowRef?.selectorRef ===
719
+ "copyIntegrityBlockedMessages:actionable:v1" &&
720
+ packet.evidence.diagnosticRowRef.count > 0)) {
718
721
  return refuse(callLog, "stale_evidence", "regenerate_stale_messages requires selected-campaign readyForMessageGeneration > 0; this packet reports none.", null, packet.evidence.leadSourceFamily === "post_engager"
719
722
  ? {
720
723
  kind: "selected_packet_action_mismatch",
@@ -224,6 +224,9 @@ export async function runRefillV3CampaignWorkWithProductionOwners(input, owners
224
224
  async loadDiagnosticSample({ workspaceId, campaignId, tableId, limit, }) {
225
225
  const regenerate = chosen?.action === "regenerate_stale_messages";
226
226
  const repairing = chosen?.action === "rerun_errored_cells";
227
+ const repairingAgentOpeners = regenerate &&
228
+ input.packet.evidence.diagnosticRowRef?.selectorRef ===
229
+ "copyIntegrityBlockedMessages:actionable:v1";
227
230
  const selected = repairing
228
231
  ? await owners.selectRepairableCampaignCells({
229
232
  workspaceId,
@@ -242,7 +245,9 @@ export async function runRefillV3CampaignWorkWithProductionOwners(input, owners
242
245
  // rebuild the diagnostic made the same identity appear twice with
243
246
  // contradictory meanings and rejected otherwise-valid decisions.
244
247
  rowSelector: regenerate
245
- ? { type: "needsGeneratedMessage" }
248
+ ? repairingAgentOpeners
249
+ ? { type: "copyIntegrityBlockedMessages" }
250
+ : { type: "needsGeneratedMessage" }
246
251
  : { type: "needsEnrichment" },
247
252
  diagnostic: { limit },
248
253
  });
@@ -625,14 +630,18 @@ export async function runRefillV3CampaignWorkWithProductionOwners(input, owners
625
630
  // here left Damiano's queueable cells untouched with no_eligible_rows.
626
631
  // Queue the validator-selected cells through the canonical cell owner,
627
632
  // then let the outer continuation wait for idle and re-observe.
633
+ const repairingAgentOpeners = input.packet.evidence.diagnosticRowRef?.selectorRef ===
634
+ "copyIntegrityBlockedMessages:actionable:v1";
628
635
  const queued = await owners.queueCampaignCells({
629
636
  workspaceId: request.scope.workspaceId,
630
637
  campaignId: request.scope.campaignId,
631
638
  tableId: request.scope.tableId,
632
639
  columnRole: "generateMessage",
633
640
  rowSelector: { type: "rowIds", rowIds },
634
- forceRerun: false,
635
- reason: "Refill V3 bounded same-meaning message generation",
641
+ forceRerun: repairingAgentOpeners,
642
+ reason: repairingAgentOpeners
643
+ ? "Refill V3 bounded current Agent opener repair"
644
+ : "Refill V3 bounded same-meaning message generation",
636
645
  });
637
646
  const queuedRecord = record(queued);
638
647
  const queue = record(queuedRecord?.queue);
@@ -1302,6 +1311,12 @@ function deterministicCampaignDecision(packet) {
1302
1311
  else if (needsModelRepair) {
1303
1312
  return null;
1304
1313
  }
1314
+ else if (!settledNoProgressActions.has("regenerate_stale_messages") &&
1315
+ evidence.diagnosticRowRef?.selectorRef ===
1316
+ "copyIntegrityBlockedMessages:actionable:v1" &&
1317
+ evidence.diagnosticRowRef.count > 0) {
1318
+ action = "regenerate_stale_messages";
1319
+ }
1305
1320
  else if (!settledNoProgressActions.has("enrich_bounded_sample") &&
1306
1321
  evidence.diagnosticRowRef?.selectorRef ===
1307
1322
  "needsEnrichment:actionable:v1" &&
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/mcp",
3
- "version": "0.1.919",
3
+ "version": "0.1.920",
4
4
  "type": "module",
5
5
  "description": "Sellable MCP server for Claude Code, Codex, and Hermes campaign workflows",
6
6
  "main": "dist/index.js",