@sellable/mcp 0.1.118 → 0.1.120
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.
|
@@ -2,10 +2,13 @@ import { getApi } from "../api.js";
|
|
|
2
2
|
const knownBlueprintColumnTypes = new Set([
|
|
3
3
|
"ai_column",
|
|
4
4
|
"checkbox",
|
|
5
|
+
"check_connection",
|
|
6
|
+
"datetime",
|
|
5
7
|
"formula",
|
|
6
8
|
"generate_message",
|
|
7
9
|
"http_request",
|
|
8
10
|
"inbound_webhook",
|
|
11
|
+
"react_and_comment",
|
|
9
12
|
"score_icp_mcp",
|
|
10
13
|
"send_dm",
|
|
11
14
|
"send_inmail_closed",
|
package/dist/update-check.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as fs from "fs";
|
|
2
2
|
import * as os from "os";
|
|
3
3
|
import * as path from "path";
|
|
4
|
+
import { fileURLToPath } from "url";
|
|
4
5
|
const MCP_PACKAGE = "@sellable/mcp";
|
|
5
6
|
const INSTALL_PACKAGE = "@sellable/install";
|
|
6
7
|
const DEFAULT_TTL_MS = 24 * 60 * 60 * 1000;
|
|
@@ -8,11 +9,22 @@ const DEFAULT_TIMEOUT_MS = 1500;
|
|
|
8
9
|
function cachePath() {
|
|
9
10
|
return path.join(os.homedir(), ".sellable", "update-check.json");
|
|
10
11
|
}
|
|
12
|
+
function readEntrypointDir() {
|
|
13
|
+
if (!process.argv[1])
|
|
14
|
+
return process.cwd();
|
|
15
|
+
const entrypointPath = path.resolve(process.argv[1]);
|
|
16
|
+
try {
|
|
17
|
+
return path.dirname(fs.realpathSync.native(entrypointPath));
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return path.dirname(entrypointPath);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
11
23
|
function readCurrentVersion() {
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
: process.cwd();
|
|
24
|
+
const moduleDir = path.dirname(fileURLToPath(import.meta.url));
|
|
25
|
+
const entrypointDir = readEntrypointDir();
|
|
15
26
|
const candidates = [
|
|
27
|
+
path.resolve(moduleDir, "..", "package.json"),
|
|
16
28
|
path.resolve(entrypointDir, "..", "package.json"),
|
|
17
29
|
path.resolve(process.cwd(), "mcp/sellable/package.json"),
|
|
18
30
|
];
|
package/package.json
CHANGED
|
@@ -1020,6 +1020,21 @@ user-facing lead review. The visible response must include:
|
|
|
1020
1020
|
- `Sample leads` with 3-5 representative `Name — Title, Company` rows
|
|
1021
1021
|
- `Tradeoff`
|
|
1022
1022
|
- `Watch link: {watchUrl}` when the campaign shell exists
|
|
1023
|
+
- `Source math before approval` as the final content block immediately above
|
|
1024
|
+
the lead-source approval question. This is the bottom-line arithmetic that
|
|
1025
|
+
makes the recommendation feel obvious. It must use concrete counts and a
|
|
1026
|
+
simple formula, for example:
|
|
1027
|
+
`Signals: 5 relevant posts -> ~320 reachable engagers; 18 of 40 sampled
|
|
1028
|
+
engagers fit the ICP, so the expected usable range is roughly 120-160 warm
|
|
1029
|
+
prospects after cleanup. If we want more volume than that, use Sales Nav:
|
|
1030
|
+
~1,900 preview rows with 14 of 25 sampled rows looking usable, but the message
|
|
1031
|
+
context is colder.`
|
|
1032
|
+
For Signals, include selected/relevant posts, total or per-post engagers,
|
|
1033
|
+
sampled engagers, sampled ICP fits as `n/N`, estimated usable prospects, and
|
|
1034
|
+
the volume tradeoff. For Sales Nav/Prospeo alternatives, include preview/raw
|
|
1035
|
+
volume, sampled usable rows as `n/N`, estimated usable range, and the warmth
|
|
1036
|
+
or context tradeoff. Do not use percent-only fit rates or unsupported reply
|
|
1037
|
+
rate claims.
|
|
1023
1038
|
|
|
1024
1039
|
The first sentence of the visible decision must make the actual choice clear:
|
|
1025
1040
|
`I recommend {primary source} using {exact filter/source recipe}. The runner-up
|
|
@@ -1050,6 +1065,10 @@ source decision. Prefer `Approve Sales Nav with founder/CEO filters, or use
|
|
|
1050
1065
|
warmer Signals posts instead?` over `Approve this lead source?`. Option labels
|
|
1051
1066
|
must be concrete, such as `Approve Sales Nav filters`, `Use warmer Signals
|
|
1052
1067
|
posts`, `Try Prospeo/account search`, and `Revise source`.
|
|
1068
|
+
Immediately above that approval question, render the `Source math before
|
|
1069
|
+
approval` block. Do not ask the user to approve from the recommendation alone;
|
|
1070
|
+
show the math tying relevant posts, available engagers, sampled fit, expected
|
|
1071
|
+
usable lead count, and the scale alternative together first.
|
|
1053
1072
|
|
|
1054
1073
|
Do not skip or discard Signals based only on raw post count or vibes. If
|
|
1055
1074
|
Signals was considered, show the post-level math in chat first so the user can
|
|
@@ -720,7 +720,8 @@
|
|
|
720
720
|
"Signal keyword lanes",
|
|
721
721
|
"LinkedIn posts sampled",
|
|
722
722
|
"Sample leads",
|
|
723
|
-
"Tradeoff"
|
|
723
|
+
"Tradeoff",
|
|
724
|
+
"Source math before approval"
|
|
724
725
|
],
|
|
725
726
|
"signalsFirstRequiredFields": [
|
|
726
727
|
"post URL",
|
|
@@ -753,6 +754,18 @@
|
|
|
753
754
|
"why runner-up lost",
|
|
754
755
|
"what approval means"
|
|
755
756
|
],
|
|
757
|
+
"approvalMathRequiredFields": [
|
|
758
|
+
"selected or relevant posts count",
|
|
759
|
+
"reachable engagers count",
|
|
760
|
+
"sampled engagers count",
|
|
761
|
+
"sampled ICP fits as n/N only; no percentage",
|
|
762
|
+
"estimated usable prospects range",
|
|
763
|
+
"scale alternative source",
|
|
764
|
+
"scale alternative raw or preview volume",
|
|
765
|
+
"scale alternative sampled usable rows as n/N only; no percentage",
|
|
766
|
+
"warmth or message-context tradeoff",
|
|
767
|
+
"what to choose if the user wants more volume"
|
|
768
|
+
],
|
|
756
769
|
"signalsInlineTableRequiredFields": [
|
|
757
770
|
"keyword lane",
|
|
758
771
|
"timeframe",
|
|
@@ -773,7 +786,7 @@
|
|
|
773
786
|
"doNotCompressToSummaryOnly": false,
|
|
774
787
|
"doNotRenderArtifactLinksOnly": true,
|
|
775
788
|
"sourceRecommendationReadyWatchRule": "When the source recommendation decision card is ready in chat with counts and sample quality, and before asking for source approval, call update_campaign with leadSourceType `new`, leadSourceProvider set to the recommended primary provider, currentStep set to that provider lane (`sales-nav`, `signal-discovery`, or `prospeo`), and find-leads watchNarration. If the recommendation changed from the lane last sampled, switch the watched provider page to the recommended lane first so the user can inspect what they are approving. Use a headline like `Review the source in Codex`, body copy that says the browser is showing the evaluated source/results, and nextAction like `Approve in Codex`. Do not keep future-tense copy like `I'll show a source recommendation` after the decision is visible. Include a safety note that no leads import until the user approves the source.",
|
|
776
|
-
"chatRenderRule": "Show a slim rendered-Markdown decision summary only, never a fenced code block. The first sentence must make the decision explicit: 'I recommend {primary source} using {exact filter/source recipe}. The runner-up is {source} because {reason}.' Use indexed sections and short bullets: recommendation, Primary source and filters, Runner-up sources, why it won, Quick numbers with one provider/source angle per bullet, raw volume, sampled fit count as n/N only (no percentages), estimated good-fit range after cleanup, activity/warmth basis, confidence note, 3-5 representative sample leads, and
|
|
789
|
+
"chatRenderRule": "Show a slim rendered-Markdown decision summary only, never a fenced code block. The first sentence must make the decision explicit: 'I recommend {primary source} using {exact filter/source recipe}. The runner-up is {source} because {reason}.' Use indexed sections and short bullets: recommendation, Primary source and filters, Runner-up sources, why it won, Quick numbers with one provider/source angle per bullet, raw volume, sampled fit count as n/N only (no percentages), estimated good-fit range after cleanup, activity/warmth basis, confidence note, 3-5 representative sample leads, one tradeoff, and a final Source math before approval block immediately above the source approval question. Do not forecast connection acceptance rates, reply rates, meetings, pipeline, revenue, or ROI unless the user supplied verified benchmark data for this exact workspace/sender. If Signals was searched or considered, include two compact inline Markdown tables before the recommendation is treated as final: Signal keyword lanes with keyword lane, timeframe, posts found, and finalist posts reviewed; and LinkedIn posts sampled with post URL/title, author/topic, age, engagers, sampled engagers, good fits as n/N only, estimated usable prospects per post, and use/discard decision. Default to selecting a few promising Signals posts for the first sample instead of trying to prove full Signals scale up front; if the sample is good but volume is low, say how many more posts to add/scrape next. The Source math before approval block must tie the approval choice to concrete arithmetic: relevant/selected posts, available engagers, sampled engagers, sampled ICP fits as n/N only, estimated usable prospects, and the scale alternative math. If the user wants more volume than the warm post-engagement estimate, explicitly say which Sales Nav or Prospeo alternative provides that volume and what message-context warmth is lost. Do not skip or discard Signals based only on raw post count or vibes; show the post-level math first, or explicitly say no engagers could be fetched and lower confidence. Keep discarded paths, full sample rows, and lead-sample.json details in lead-review.md. Do not show plain filesystem paths unless links cannot be created."
|
|
777
790
|
},
|
|
778
791
|
{
|
|
779
792
|
"action": "render_post_lead_parallel_progress",
|
|
@@ -795,6 +808,7 @@
|
|
|
795
808
|
{
|
|
796
809
|
"action": "ask_continue_revise_or_confirm_only_if_needed",
|
|
797
810
|
"approvalQuestionRule": "If asking the user, the question and options must name the concrete decision. Prefer: 'Approve Sales Nav with {filters}, or use warmer Signals instead?' over 'Approve this lead source?' Option labels must name the source choice, such as 'Approve Sales Nav filters', 'Use warmer Signals posts', 'Try Prospeo/account search', and 'Revise source'.",
|
|
811
|
+
"approvalMathRule": "Immediately above the approval question, render the Source math before approval block: given this many relevant posts, this many reachable engagers, and this sampled ICP fit as n/N, we expect this usable lead range; if the user wants more volume, name the Sales Nav or Prospeo alternative, its preview/sample math, and the colder/weaker-context tradeoff. Do not ask the approval question until this math is visible.",
|
|
798
812
|
"autoContinueWhen": {
|
|
799
813
|
"status": "confirmed",
|
|
800
814
|
"confidenceIn": [
|