@sellable/mcp 0.1.193 → 0.1.194
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/README.md +2 -2
- package/dist/auth.js +1 -1
- package/dist/server.js +1 -4
- package/dist/tools/prompts.d.ts +0 -36
- package/dist/tools/prompts.js +0 -14
- package/dist/tools/registry.d.ts +0 -23
- package/package.json +1 -1
- package/skills/create-campaign-v2/core/auto-execute.README.md +2 -2
- package/skills/create-campaign-v2/core/auto-execute.yaml +1 -1
- package/skills/create-campaign-v2/references/thomas-variant-selection.md +1 -1
- package/skills/create-campaign-v2-tail/SKILL.md +1 -1
- package/skills/generate-messages/SKILL.md +5 -5
- package/skills/research/SKILL.md +1 -1
- /package/skills/{campaign-messages → _archive/campaign-messages}/SKILL.md +0 -0
- /package/skills/{campaign-messages → _archive/campaign-messages}/flow.v1.json +0 -0
- /package/skills/{craft-message → _archive/craft-message}/SKILL.md +0 -0
package/README.md
CHANGED
|
@@ -388,7 +388,7 @@ Sellable writing workflows.
|
|
|
388
388
|
- `get_rows_minimal` - Get minimal lead list (fast)
|
|
389
389
|
- `get_rows` - Get full lead data
|
|
390
390
|
- `update_cell` - Save message/approve
|
|
391
|
-
- `
|
|
391
|
+
- `get_subskill_prompt({ subskillName: "generate-messages" })` - Get the full message-generation prompt with references and quality gates
|
|
392
392
|
- `start_campaign` / `pause_campaign` - Control sending
|
|
393
393
|
|
|
394
394
|
### Lead Tools (Free)
|
|
@@ -435,7 +435,7 @@ Sellable writing workflows.
|
|
|
435
435
|
|
|
436
436
|
### "Sellable not configured" Error
|
|
437
437
|
|
|
438
|
-
Create `~/.sellable/config.json` with your token. Get one at https://app.sellable.dev/settings
|
|
438
|
+
Create `~/.sellable/config.json` with your token. Get one at https://app.sellable.dev/settings?tab=integrations.
|
|
439
439
|
|
|
440
440
|
### Token Not Working
|
|
441
441
|
|
package/dist/auth.js
CHANGED
|
@@ -72,7 +72,7 @@ export function getConfig() {
|
|
|
72
72
|
"}\n\n" +
|
|
73
73
|
"Config path resolution order:\n" +
|
|
74
74
|
`${renderConfigPathOrder(configPathCandidates)}\n\n` +
|
|
75
|
-
"Get your token at: https://app.sellable.dev/settings
|
|
75
|
+
"Get your token at: https://app.sellable.dev/settings?tab=integrations\n" +
|
|
76
76
|
"Then run list_workspaces + set_active_workspace to select a workspace.");
|
|
77
77
|
}
|
|
78
78
|
try {
|
package/dist/server.js
CHANGED
|
@@ -22,7 +22,7 @@ import { fetchCompany, fetchCompanyPosts, fetchLinkedInPosts, fetchLinkedInProfi
|
|
|
22
22
|
import { getCampaignNavigationState } from "./tools/navigation.js";
|
|
23
23
|
import { addOnDemandLeads, createOnDemandCampaign, createOnDemandTable, initOnDemandSequence, pauseOnDemandCampaign, startOnDemandCampaign, } from "./tools/one-off.js";
|
|
24
24
|
import { upsertRubric } from "./tools/processing.js";
|
|
25
|
-
import { completeSenderResearch,
|
|
25
|
+
import { completeSenderResearch, getPostFindLeadsScoutRegistry, getSourceScoutRegistry, getSubskillAsset, getSubskillPrompt, listSubskillPrompts, searchSubskillPrompts, } from "./tools/prompts.js";
|
|
26
26
|
import { waitForCampaignTableReady, waitForLeadListReady, } from "./tools/readiness.js";
|
|
27
27
|
import { allTools } from "./tools/registry.js";
|
|
28
28
|
import { getRows, getTableRows, getTableRowsMinimal } from "./tools/rows.js";
|
|
@@ -392,9 +392,6 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
392
392
|
case "queue_cells":
|
|
393
393
|
result = await queueCells(args?.tableId, args?.cellIds);
|
|
394
394
|
break;
|
|
395
|
-
case "get_message_prompt":
|
|
396
|
-
result = await getMessagePrompt();
|
|
397
|
-
break;
|
|
398
395
|
case "get_subskill_prompt":
|
|
399
396
|
result = getSubskillPrompt(args?.subskillName, args?.offset, args?.limit);
|
|
400
397
|
break;
|
package/dist/tools/prompts.d.ts
CHANGED
|
@@ -1,15 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Response from the edit-message prompt endpoint.
|
|
3
|
-
* The prompt contains all 11 quality gates inline.
|
|
4
|
-
*/
|
|
5
|
-
export interface PromptResponse {
|
|
6
|
-
prompt: string;
|
|
7
|
-
metadata: {
|
|
8
|
-
framework: string;
|
|
9
|
-
author: string;
|
|
10
|
-
description: string;
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
1
|
export interface SubskillPromptResponse {
|
|
14
2
|
name: string;
|
|
15
3
|
description: string;
|
|
@@ -148,29 +136,6 @@ export interface PostFindLeadsScoutRegistryResponse {
|
|
|
148
136
|
export declare const DEFAULT_SUBSKILL_PROMPT_CHUNK_CHARS = 48000;
|
|
149
137
|
export declare const MAX_SUBSKILL_PROMPT_CHUNK_CHARS = 48000;
|
|
150
138
|
export declare const promptToolDefinitions: ({
|
|
151
|
-
name: string;
|
|
152
|
-
description: string;
|
|
153
|
-
inputSchema: {
|
|
154
|
-
type: string;
|
|
155
|
-
properties: {
|
|
156
|
-
limit?: undefined;
|
|
157
|
-
includePublic?: undefined;
|
|
158
|
-
includeInternal?: undefined;
|
|
159
|
-
subskillName?: undefined;
|
|
160
|
-
offset?: undefined;
|
|
161
|
-
assetPath?: undefined;
|
|
162
|
-
query?: undefined;
|
|
163
|
-
depth?: undefined;
|
|
164
|
-
proofItemsFound?: undefined;
|
|
165
|
-
caseStudyItemsFound?: undefined;
|
|
166
|
-
credibilitySignalsFound?: undefined;
|
|
167
|
-
notes?: undefined;
|
|
168
|
-
};
|
|
169
|
-
required: never[];
|
|
170
|
-
additionalProperties?: undefined;
|
|
171
|
-
};
|
|
172
|
-
_meta?: undefined;
|
|
173
|
-
} | {
|
|
174
139
|
name: string;
|
|
175
140
|
description: string;
|
|
176
141
|
inputSchema: {
|
|
@@ -373,7 +338,6 @@ export declare const promptToolDefinitions: ({
|
|
|
373
338
|
})[];
|
|
374
339
|
export declare function getSourceScoutRegistry(): SourceScoutRegistryResponse;
|
|
375
340
|
export declare function getPostFindLeadsScoutRegistry(): PostFindLeadsScoutRegistryResponse;
|
|
376
|
-
export declare function getMessagePrompt(): Promise<PromptResponse>;
|
|
377
341
|
export declare function listSubskillPrompts(limit?: number, includePublic?: boolean, includeInternal?: boolean): ListSubskillPromptsResponse;
|
|
378
342
|
export declare function getSubskillPrompt(subskillName: string, offset?: number, limit?: number): SubskillPromptResponse;
|
|
379
343
|
export declare function getSubskillAsset(subskillName: string, assetPath: string, offset?: number, limit?: number): SubskillAssetResponse;
|
package/dist/tools/prompts.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import * as fs from "fs";
|
|
2
2
|
import * as path from "path";
|
|
3
|
-
import { getApi } from "../api.js";
|
|
4
3
|
import { getSkillByName, listSkills, resolveSkillsDir, stripFrontmatter, } from "../skills.js";
|
|
5
4
|
import { markCreateCampaignPromptLoaded, markResearchPromptLoaded, markSenderResearchCompleted, } from "./flow-preflight.js";
|
|
6
5
|
// Chunk size sits below Claude Code's max-token cap on tool results
|
|
@@ -15,15 +14,6 @@ import { markCreateCampaignPromptLoaded, markResearchPromptLoaded, markSenderRes
|
|
|
15
14
|
export const DEFAULT_SUBSKILL_PROMPT_CHUNK_CHARS = 48_000;
|
|
16
15
|
export const MAX_SUBSKILL_PROMPT_CHUNK_CHARS = 48_000;
|
|
17
16
|
export const promptToolDefinitions = [
|
|
18
|
-
{
|
|
19
|
-
name: "get_message_prompt",
|
|
20
|
-
description: "Get the REPLY framework prompt for crafting LinkedIn messages. Returns the full prompt with 11 quality gates inline. Load this when actively crafting to ensure quality standards.",
|
|
21
|
-
inputSchema: {
|
|
22
|
-
type: "object",
|
|
23
|
-
properties: {},
|
|
24
|
-
required: [],
|
|
25
|
-
},
|
|
26
|
-
},
|
|
27
17
|
{
|
|
28
18
|
name: "list_subskill_prompts",
|
|
29
19
|
description: "List available Sellable subskill prompts with visibility controls. Use this when the host does not expose prompts/list.",
|
|
@@ -346,10 +336,6 @@ export function getPostFindLeadsScoutRegistry() {
|
|
|
346
336
|
},
|
|
347
337
|
};
|
|
348
338
|
}
|
|
349
|
-
export async function getMessagePrompt() {
|
|
350
|
-
const api = getApi();
|
|
351
|
-
return api.get("/api/v3/prompts/edit-message");
|
|
352
|
-
}
|
|
353
339
|
function filterSubskills(includePublic = false, includeInternal = true) {
|
|
354
340
|
return listSkills().filter((skill) => {
|
|
355
341
|
if (skill.visibility === "public")
|
package/dist/tools/registry.d.ts
CHANGED
|
@@ -214,29 +214,6 @@ export declare const allTools: ({
|
|
|
214
214
|
required: string[];
|
|
215
215
|
additionalProperties: boolean;
|
|
216
216
|
};
|
|
217
|
-
} | {
|
|
218
|
-
name: string;
|
|
219
|
-
description: string;
|
|
220
|
-
inputSchema: {
|
|
221
|
-
type: string;
|
|
222
|
-
properties: {
|
|
223
|
-
limit?: undefined;
|
|
224
|
-
includePublic?: undefined;
|
|
225
|
-
includeInternal?: undefined;
|
|
226
|
-
subskillName?: undefined;
|
|
227
|
-
offset?: undefined;
|
|
228
|
-
assetPath?: undefined;
|
|
229
|
-
query?: undefined;
|
|
230
|
-
depth?: undefined;
|
|
231
|
-
proofItemsFound?: undefined;
|
|
232
|
-
caseStudyItemsFound?: undefined;
|
|
233
|
-
credibilitySignalsFound?: undefined;
|
|
234
|
-
notes?: undefined;
|
|
235
|
-
};
|
|
236
|
-
required: never[];
|
|
237
|
-
additionalProperties?: undefined;
|
|
238
|
-
};
|
|
239
|
-
_meta?: undefined;
|
|
240
217
|
} | {
|
|
241
218
|
name: string;
|
|
242
219
|
description: string;
|
package/package.json
CHANGED
|
@@ -80,7 +80,7 @@ into the campaign).
|
|
|
80
80
|
synthesizer re-runs the Phase 84 finalizer pass on its rewrite.
|
|
81
81
|
This is the last guardrail against critic-introduced token drift.
|
|
82
82
|
Default stays `true`.
|
|
83
|
-
- **`critique.opus.enabled`** — Flag gating Opus
|
|
83
|
+
- **`critique.opus.enabled`** — Flag gating Opus refinement
|
|
84
84
|
usage. Opus is reserved for the highest-value subset only. Stays
|
|
85
85
|
off by default; flip on only when the targeting critic flags a
|
|
86
86
|
high-priority row and budget allows.
|
|
@@ -158,7 +158,7 @@ logs and adjust:
|
|
|
158
158
|
critique protocol: bounded sample, parallel critics, synthesis,
|
|
159
159
|
budget caps, and token-contract enforcement.
|
|
160
160
|
- `references/thomas-variant-selection.md` — Plan 85-03 rules for
|
|
161
|
-
which rows earn an Opus
|
|
161
|
+
which rows earn an Opus refinement rewrite.
|
|
162
162
|
- `references/thomas-revision-filters.md` — the positive-target and
|
|
163
163
|
automatic-revision filters that gate any critique rewrite.
|
|
164
164
|
|
|
@@ -87,7 +87,7 @@ messaging:
|
|
|
87
87
|
# guardrail against critic-introduced token drift.
|
|
88
88
|
enforceFinalizerPass: true
|
|
89
89
|
opus:
|
|
90
|
-
# Opus
|
|
90
|
+
# Opus refinement is reserved for the highest-value subset
|
|
91
91
|
# only. Count is a hard cap per critique pass. Selection lives
|
|
92
92
|
# in references/thomas-variant-selection.md.
|
|
93
93
|
enabled: false
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Thomas Variant Selection
|
|
2
2
|
|
|
3
3
|
This reference governs which rows in a Plan 85-03 critique sample earn
|
|
4
|
-
an Opus
|
|
4
|
+
an Opus refinement rewrite. Load this file only when
|
|
5
5
|
`messaging.critique.enabled === true` AND
|
|
6
6
|
`messaging.critique.opus.enabled === true` in
|
|
7
7
|
`core/auto-execute.yaml`. When Opus is off, the protocol never
|
|
@@ -416,7 +416,7 @@ strings, which is why Step 16 requires Step 15 to be complete.
|
|
|
416
416
|
the flag but never flips it; critique stays off until the flag is
|
|
417
417
|
deliberately enabled.
|
|
418
418
|
3. If `messaging.critique.opus.enabled` is also true, route the
|
|
419
|
-
highest-value subset through the Opus
|
|
419
|
+
highest-value subset through the Opus refinement path per
|
|
420
420
|
`references/thomas-variant-selection.md`. Opus is capped by
|
|
421
421
|
`messaging.critique.opus.maxMessagesPerPass` and
|
|
422
422
|
`messaging.critique.opus.budgetUsdCap`; tripping either cap keeps
|
|
@@ -17,7 +17,6 @@ You craft messages in one of two modes:
|
|
|
17
17
|
- `mcp__sellable__update_campaign_brief` (live campaign mode only)
|
|
18
18
|
- `mcp__sellable__get_rows` (live campaign mode only)
|
|
19
19
|
- `mcp__sellable__update_cell` (live campaign mode only)
|
|
20
|
-
- `mcp__sellable__get_message_prompt`
|
|
21
20
|
- `WebSearch` (live campaign mode only)
|
|
22
21
|
- `mcp__sellable__fetch_linkedin_profile` (live campaign mode only)
|
|
23
22
|
- `mcp__sellable__fetch_linkedin_posts` (live campaign mode only)
|
|
@@ -2425,8 +2424,8 @@ borrow the closest message shape from
|
|
|
2425
2424
|
### Single Row
|
|
2426
2425
|
|
|
2427
2426
|
1. Load campaign examples, calibration notes, and bounded copy from the brief first.
|
|
2428
|
-
2.
|
|
2429
|
-
|
|
2427
|
+
2. Use the quality gates and fallback REPLY framework embedded in this
|
|
2428
|
+
`generate-messages` prompt. Do not call a separate message-prompt tool.
|
|
2430
2429
|
3. Fetch lead details via `get_rows`.
|
|
2431
2430
|
4. Draft a message, show it with a full 12-gate check.
|
|
2432
2431
|
5. If the message cell is empty, auto-save the draft with `update_cell` and say "Draft saved (not approved)."
|
|
@@ -2444,7 +2443,8 @@ Code and Codex; host subagents are optional acceleration only when the user
|
|
|
2444
2443
|
explicitly asked for agent fan-out.**
|
|
2445
2444
|
|
|
2446
2445
|
1. Load campaign examples, calibration notes, and bounded copy from the brief first.
|
|
2447
|
-
2.
|
|
2446
|
+
2. Use the quality gates and fallback REPLY framework embedded in this
|
|
2447
|
+
`generate-messages` prompt.
|
|
2448
2448
|
3. If the user explicitly asked for agent fan-out and the host exposes subagents,
|
|
2449
2449
|
spawn parallel workers with explicit model/config. Otherwise batch independent
|
|
2450
2450
|
MCP/tool reads where available or run rows sequentially with honest progress
|
|
@@ -2533,7 +2533,7 @@ research → condense → 10 angle agents in parallel → finalizer combines bes
|
|
|
2533
2533
|
{event-led, signal-led, job-post-led, and proof-led specialist fallback rules from gold-standard-message-patterns.md}
|
|
2534
2534
|
|
|
2535
2535
|
## Fallback REPLY Framework
|
|
2536
|
-
{
|
|
2536
|
+
{quality gates and fallback REPLY rules embedded in this generate-messages prompt}
|
|
2537
2537
|
|
|
2538
2538
|
## Instructions
|
|
2539
2539
|
1. Research the prospect (WebSearch, LinkedIn tools if needed)
|
package/skills/research/SKILL.md
CHANGED
|
@@ -6,7 +6,7 @@ visibility: internal
|
|
|
6
6
|
|
|
7
7
|
# Research Protocol (Fast + Parallel)
|
|
8
8
|
|
|
9
|
-
This is the shared research flow for **all**
|
|
9
|
+
This is the shared research flow for **all** active MCP workflows (generate-messages, enrich-prospects, create-campaign).
|
|
10
10
|
The orchestrator remains the main model (e.g., Opus). Use host-aware parallel execution:
|
|
11
11
|
|
|
12
12
|
- Claude host: `Task` subagents on Sonnet-4.5
|
|
File without changes
|
|
File without changes
|
|
File without changes
|