@sellable/mcp 0.1.330 → 0.1.332
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/tools/tables.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
export interface WorkflowTableListItem {
|
|
2
2
|
id: string;
|
|
3
3
|
name: string;
|
|
4
|
+
workspaceId: string | null;
|
|
5
|
+
status: string | null;
|
|
6
|
+
campaignStatus: string | null;
|
|
7
|
+
dashboardBucket: "active" | "archived";
|
|
4
8
|
type: string | null;
|
|
5
9
|
campaignOfferId: string | null;
|
|
6
10
|
campaignBacked: boolean;
|
package/dist/tools/tables.js
CHANGED
|
@@ -6,7 +6,7 @@ import { getApi } from "../api.js";
|
|
|
6
6
|
export const tableToolDefinitions = [
|
|
7
7
|
{
|
|
8
8
|
name: "list_tables",
|
|
9
|
-
description: "List all workflow tables in the active workspace. Returns metadata including whether each table is campaign-backed and whether it has a sequence attached.\n\n" +
|
|
9
|
+
description: "List all workflow tables in the active workspace. Returns metadata including workspaceId, workflow status, campaignStatus, dashboardBucket, whether each table is campaign-backed, and whether it has a sequence attached.\n\n" +
|
|
10
10
|
"Unlike get_campaigns, this lists every WorkflowTable regardless of how it was created, including create_workflow_table, create_on_demand_table, and UI-created tables.",
|
|
11
11
|
inputSchema: {
|
|
12
12
|
type: "object",
|
package/package.json
CHANGED
|
@@ -37,7 +37,7 @@ Default evergreen plan per workspace (override only if the prompt specifies diff
|
|
|
37
37
|
</inputs>
|
|
38
38
|
|
|
39
39
|
<objective>
|
|
40
|
-
1. **Inventory first**: `get_campaigns` + `list_tables` + `get_campaign_waterfall` in the active workspace. Treat `list_tables` and the managed waterfall as authoritative for older managed slots; `get_campaigns` is a recent campaign page and may miss canonical evergreen lanes. Match existing campaigns/tables/waterfall slots to the plan by name (case-insensitive, ignore suffixes like "(Copy)") and stored slot identity. A matching non-archived campaign/table/waterfall slot = REUSE; record it and move on. Never create a second campaign for a slot that already has one in any of those inventories.
|
|
40
|
+
1. **Inventory first**: `get_campaigns` + `list_tables` + `get_campaign_waterfall` in the active workspace. Treat `list_tables` and the managed waterfall as authoritative for older managed slots; `get_campaigns` is a recent campaign page and may miss canonical evergreen lanes. Match existing campaigns/tables/waterfall slots to the plan by name (case-insensitive, ignore suffixes like "(Copy)") and stored slot identity. `list_tables.campaignStatus` and `list_tables.dashboardBucket` are part of the identity check: a matching `ARCHIVED` table/campaign is not a plain `REUSE`. If it is the canonical prod slot and the invocation explicitly allows dashboard visibility repair, repair it to `PAUSED`; otherwise mark it `flagged`/`blocked` and do not create a duplicate. A matching non-archived campaign/table/waterfall slot = REUSE; record it and move on. Never create a second campaign for a slot that already has one in any of those inventories.
|
|
41
41
|
2. **Create only the missing slots** with `create_on_demand_campaign({ name, senderIds, campaignBrief })`:
|
|
42
42
|
- Post Engagers lanes: that sender's ID only. Shared lanes: all the senders' IDs.
|
|
43
43
|
- The brief must include the warm post-engager first-message template style — short, casual, references the post they engaged with, closed question, **no internal vocabulary, no pitch, no meeting ask** in message one:
|
|
@@ -57,8 +57,11 @@ Default evergreen plan per workspace (override only if the prompt specifies diff
|
|
|
57
57
|
- The sequence is auto-selected by sender tier; do not hand-author sequence templates here. Never select a paid-InMail template.
|
|
58
58
|
3. **Verify each slot** after create/reuse/repair:
|
|
59
59
|
- `get_campaign` shows the campaign exists, remains unlaunched, and has the expected workflow table.
|
|
60
|
-
-
|
|
60
|
+
- Builder truth must match dashboard truth. `currentStep:"running"` is valid only when the linked table has `campaignStatus:"ACTIVE"`. For a `PAUSED` or `ARCHIVED` campaign/table, repair or flag stale `currentStep:"running"` back to launch review (`send` / review-ready) before reporting the slot done. Never call `start_campaign` just to make a stale `running` step true.
|
|
61
|
+
- Send/action lanes such as Post Engagers have a sequence attached. Use `list_tables({ hasSequence: true })` as a quick cross-check, but do not treat that filter as the only proof. If the canonical campaign/table is missing from the sequence-filtered table list but a safe `attach_recommended_sequence({ campaignId })` repair/precheck returns `SEQUENCE_EXISTS`, record `sequence attached (verified by SEQUENCE_EXISTS precheck; list_tables.hasSequence mismatch)` and do not retry.
|
|
62
|
+
- Only use `attach_recommended_sequence({ campaignId })` for a send-lane sequence repair/precheck when the target is a canonical prod slot and the invoking prompt allows sequence repair. Call it at most once without `confirmed`; a successful response is `repaired`, and `SEQUENCE_EXISTS` is non-mutating proof that a sequence already exists. Never call `attach_recommended_sequence` or `attach_sequence` with `confirmed:true` in evergreen automation unless the user explicitly asks to replace an existing sequence.
|
|
61
63
|
- Source-only shared lanes may legitimately have `hasSequence:false` when they only supply rows through the managed waterfall. For those, verify the active waterfall linkage, table ID, campaign ID, source type, and priority; report `source-only/no sequence expected` instead of repairing or duplicating.
|
|
64
|
+
- Post Engagers lanes are sender-owned source lanes. The selected/source LinkedIn posts must be authored by that exact sender (for example, Thomas post-engager source posts must visibly be Thomas-authored posts). If selected/source posts include another person or company author, mark the slot `blocked`/`flagged` for source repair; do not scrape/import engagers or report completion until the source is sender-owned. Shared Signal Discovery lanes are the only evergreen lanes allowed to mix authors.
|
|
62
65
|
4. **Interactive polish mode only: confirm the message template with the user — and check it reads chat-native.** Show the exact first-message template each created campaign's brief carries and ask the user to confirm or adjust it before moving on. Because DM copy may send paragraph-by-paragraph (each blank-line block becomes its own message), every paragraph must read like something a human literally typed as a separate chat message:
|
|
63
66
|
- **No letter punctuation.** `Hey {{first_name}}` — never `Hey {{first_name}},` (nobody types a trailing comma and hits send). No `Dear`, no sign-offs, no `Best,`.
|
|
64
67
|
- Each paragraph stands alone as a message — short, lowercase-casual is fine, sentence fragments are fine.
|