@sonnechasser/ntrp 2.3.2 → 2.4.0
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/index.js +27 -11
- package/dist/mcp/server.js +27 -11
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -18358,7 +18358,24 @@ function listMetricExplainers(kind) {
|
|
|
18358
18358
|
function getCoreDeckExplainers() {
|
|
18359
18359
|
return CORE_DECK_IDS.map((id) => BY_ID.get(id)).filter(Boolean);
|
|
18360
18360
|
}
|
|
18361
|
-
|
|
18361
|
+
function buildVitalSignsPromptBlock() {
|
|
18362
|
+
return VITAL_IDS.map((id) => {
|
|
18363
|
+
const m = getMetricExplainer(id);
|
|
18364
|
+
if (!m) {
|
|
18365
|
+
throw new Error(`buildVitalSignsPromptBlock: missing explainer for ${id}`);
|
|
18366
|
+
}
|
|
18367
|
+
if (!m.dollar_label) {
|
|
18368
|
+
throw new Error(`buildVitalSignsPromptBlock: missing dollar_label for ${id}`);
|
|
18369
|
+
}
|
|
18370
|
+
return [
|
|
18371
|
+
`- ${m.id}: ${m.tagline}`,
|
|
18372
|
+
` Teach: ${m.meaning}`,
|
|
18373
|
+
` Expert read: ${m.expert_read}`,
|
|
18374
|
+
` Dollar label: ${m.dollar_label}`
|
|
18375
|
+
].join("\n");
|
|
18376
|
+
}).join("\n");
|
|
18377
|
+
}
|
|
18378
|
+
var VITALS, SAAS, METRIC_DEFINITIONS, CORE_DECK_IDS, BY_ID, ALIAS_INDEX, VITAL_IDS, SAAS_METRIC_IDS, GATING_LAYER_VISUAL;
|
|
18362
18379
|
var init_metric_definitions = __esm({
|
|
18363
18380
|
"src/data/metric-definitions.ts"() {
|
|
18364
18381
|
"use strict";
|
|
@@ -19165,6 +19182,13 @@ var init_metric_definitions = __esm({
|
|
|
19165
19182
|
idx.set("thread-depth", "thread_depth");
|
|
19166
19183
|
return idx;
|
|
19167
19184
|
})();
|
|
19185
|
+
VITAL_IDS = [
|
|
19186
|
+
"freshness",
|
|
19187
|
+
"flow_rate",
|
|
19188
|
+
"drop_rate",
|
|
19189
|
+
"signal_to_noise",
|
|
19190
|
+
"thread_depth"
|
|
19191
|
+
];
|
|
19168
19192
|
SAAS_METRIC_IDS = SAAS.map((m) => m.id);
|
|
19169
19193
|
GATING_LAYER_VISUAL = {
|
|
19170
19194
|
kind: "layer_stack",
|
|
@@ -43059,6 +43083,7 @@ var init_prompt_parts = __esm({
|
|
|
43059
43083
|
init_profile();
|
|
43060
43084
|
init_store();
|
|
43061
43085
|
init_gtm_counsel();
|
|
43086
|
+
init_metric_definitions();
|
|
43062
43087
|
init_playbook();
|
|
43063
43088
|
init_play_outcomes();
|
|
43064
43089
|
init_registry2();
|
|
@@ -43095,16 +43120,7 @@ Restraint matters: NTRP is a stethoscope, not a surgeon. Observe, connect, and r
|
|
|
43095
43120
|
- Observe, connect, recommend \u2014 never execute CRM changes, send email, or claim an action was taken unless a tool result in this conversation confirms it.
|
|
43096
43121
|
- Weak or empty tool result: vary the arguments or approach once before concluding; if it's still empty, say what you'd need rather than filling the gap with plausible-sounding numbers.
|
|
43097
43122
|
- Never fabricate CRM records, people, companies, or dollar amounts.`;
|
|
43098
|
-
VITAL_SIGNS_BLOCK =
|
|
43099
|
-
Expert read: cut by owner and by stage first \u2014 freshness reds concentrate on people or process, rarely evenly. In a long-cycle enterprise motion 30 quiet days can be normal cadence; in a velocity motion it's a dead deal. A sudden cliff usually means a broken integration or a departed rep, not gradual decay. False positive to check: bulk-imported records nobody has touched yet.
|
|
43100
|
-
- flow_rate: Deal velocity. Low = stuck pipeline, slow progression. Dollar value = amount stuck in pipeline.
|
|
43101
|
-
Expert read: cut by stage-age, not just deal-age \u2014 find the stage where deals go to die (usually one). Compare stuck-deal age to this company's own median cycle, not a generic norm. Stuck + past-due close dates together signal happy-ears forecasting, a credibility problem before it's a revenue problem.
|
|
43102
|
-
- drop_rate: Handoff retention. Low = leads vanishing between marketing and sales. Dollar value = estimated lost revenue at handoff.
|
|
43103
|
-
Expert read: this is almost always a systems failure \u2014 routing rules, unassigned territories, dead rep queues, or a sync gap between marketing and CRM \u2014 not lazy reps. First cut by lead source; the leak usually concentrates in one or two sources. The cheapest pipeline this business can buy is the leads it already paid for.
|
|
43104
|
-
- signal_to_noise: Activity efficiency. Low = effort aimed at dead ends. Dollar value = cost of misdirected effort.
|
|
43105
|
-
Expert read: cut by rep and by account status \u2014 noise usually means reps fishing in the pond they can see (dead accounts they know) because targeting and account lists are stale. Persistent noise is a coverage-model problem, not a coaching problem. Check whether activity is logged against closed or unlinked records \u2014 often a hygiene artifact.
|
|
43106
|
-
- thread_depth: Deal resilience. Low = single-threaded deals, fragile pipeline. Dollar value = amount in single-threaded deals.
|
|
43107
|
-
Expert read: weight by deal size \u2014 one single-threaded mega-deal outweighs ten small ones. Single-threading late in the cycle is far more dangerous than early. In enterprise motions, thread depth is a leading indicator of slipped quarters: champions change jobs, and there's no second door in.`;
|
|
43123
|
+
VITAL_SIGNS_BLOCK = buildVitalSignsPromptBlock();
|
|
43108
43124
|
PLAYBOOK_BLOCK = `- "Multi-Thread Your Deals" (id: multi-thread-deals) \u2014 when thread_depth is low
|
|
43109
43125
|
- "Clean Dead Pipeline" (id: clean-dead-pipeline) \u2014 when freshness is low
|
|
43110
43126
|
- "Fix the Handoff Gap" (id: fix-handoff-gap) \u2014 when drop_rate is high and the source\u2192owner path is unknown
|
package/dist/mcp/server.js
CHANGED
|
@@ -12978,7 +12978,24 @@ function listMetricExplainers(kind) {
|
|
|
12978
12978
|
if (!kind) return METRIC_DEFINITIONS.slice();
|
|
12979
12979
|
return METRIC_DEFINITIONS.filter((m) => m.kind === kind);
|
|
12980
12980
|
}
|
|
12981
|
-
|
|
12981
|
+
function buildVitalSignsPromptBlock() {
|
|
12982
|
+
return VITAL_IDS.map((id) => {
|
|
12983
|
+
const m = getMetricExplainer(id);
|
|
12984
|
+
if (!m) {
|
|
12985
|
+
throw new Error(`buildVitalSignsPromptBlock: missing explainer for ${id}`);
|
|
12986
|
+
}
|
|
12987
|
+
if (!m.dollar_label) {
|
|
12988
|
+
throw new Error(`buildVitalSignsPromptBlock: missing dollar_label for ${id}`);
|
|
12989
|
+
}
|
|
12990
|
+
return [
|
|
12991
|
+
`- ${m.id}: ${m.tagline}`,
|
|
12992
|
+
` Teach: ${m.meaning}`,
|
|
12993
|
+
` Expert read: ${m.expert_read}`,
|
|
12994
|
+
` Dollar label: ${m.dollar_label}`
|
|
12995
|
+
].join("\n");
|
|
12996
|
+
}).join("\n");
|
|
12997
|
+
}
|
|
12998
|
+
var VITALS, SAAS, METRIC_DEFINITIONS, BY_ID, ALIAS_INDEX, VITAL_IDS, SAAS_METRIC_IDS;
|
|
12982
12999
|
var init_metric_definitions = __esm({
|
|
12983
13000
|
"src/data/metric-definitions.ts"() {
|
|
12984
13001
|
"use strict";
|
|
@@ -13772,6 +13789,13 @@ var init_metric_definitions = __esm({
|
|
|
13772
13789
|
idx.set("thread-depth", "thread_depth");
|
|
13773
13790
|
return idx;
|
|
13774
13791
|
})();
|
|
13792
|
+
VITAL_IDS = [
|
|
13793
|
+
"freshness",
|
|
13794
|
+
"flow_rate",
|
|
13795
|
+
"drop_rate",
|
|
13796
|
+
"signal_to_noise",
|
|
13797
|
+
"thread_depth"
|
|
13798
|
+
];
|
|
13775
13799
|
SAAS_METRIC_IDS = SAAS.map((m) => m.id);
|
|
13776
13800
|
}
|
|
13777
13801
|
});
|
|
@@ -15288,6 +15312,7 @@ var init_prompt_parts = __esm({
|
|
|
15288
15312
|
init_profile();
|
|
15289
15313
|
init_store();
|
|
15290
15314
|
init_gtm_counsel();
|
|
15315
|
+
init_metric_definitions();
|
|
15291
15316
|
init_playbook();
|
|
15292
15317
|
init_play_outcomes();
|
|
15293
15318
|
init_registry();
|
|
@@ -15324,16 +15349,7 @@ Restraint matters: NTRP is a stethoscope, not a surgeon. Observe, connect, and r
|
|
|
15324
15349
|
- Observe, connect, recommend \u2014 never execute CRM changes, send email, or claim an action was taken unless a tool result in this conversation confirms it.
|
|
15325
15350
|
- Weak or empty tool result: vary the arguments or approach once before concluding; if it's still empty, say what you'd need rather than filling the gap with plausible-sounding numbers.
|
|
15326
15351
|
- Never fabricate CRM records, people, companies, or dollar amounts.`;
|
|
15327
|
-
VITAL_SIGNS_BLOCK =
|
|
15328
|
-
Expert read: cut by owner and by stage first \u2014 freshness reds concentrate on people or process, rarely evenly. In a long-cycle enterprise motion 30 quiet days can be normal cadence; in a velocity motion it's a dead deal. A sudden cliff usually means a broken integration or a departed rep, not gradual decay. False positive to check: bulk-imported records nobody has touched yet.
|
|
15329
|
-
- flow_rate: Deal velocity. Low = stuck pipeline, slow progression. Dollar value = amount stuck in pipeline.
|
|
15330
|
-
Expert read: cut by stage-age, not just deal-age \u2014 find the stage where deals go to die (usually one). Compare stuck-deal age to this company's own median cycle, not a generic norm. Stuck + past-due close dates together signal happy-ears forecasting, a credibility problem before it's a revenue problem.
|
|
15331
|
-
- drop_rate: Handoff retention. Low = leads vanishing between marketing and sales. Dollar value = estimated lost revenue at handoff.
|
|
15332
|
-
Expert read: this is almost always a systems failure \u2014 routing rules, unassigned territories, dead rep queues, or a sync gap between marketing and CRM \u2014 not lazy reps. First cut by lead source; the leak usually concentrates in one or two sources. The cheapest pipeline this business can buy is the leads it already paid for.
|
|
15333
|
-
- signal_to_noise: Activity efficiency. Low = effort aimed at dead ends. Dollar value = cost of misdirected effort.
|
|
15334
|
-
Expert read: cut by rep and by account status \u2014 noise usually means reps fishing in the pond they can see (dead accounts they know) because targeting and account lists are stale. Persistent noise is a coverage-model problem, not a coaching problem. Check whether activity is logged against closed or unlinked records \u2014 often a hygiene artifact.
|
|
15335
|
-
- thread_depth: Deal resilience. Low = single-threaded deals, fragile pipeline. Dollar value = amount in single-threaded deals.
|
|
15336
|
-
Expert read: weight by deal size \u2014 one single-threaded mega-deal outweighs ten small ones. Single-threading late in the cycle is far more dangerous than early. In enterprise motions, thread depth is a leading indicator of slipped quarters: champions change jobs, and there's no second door in.`;
|
|
15352
|
+
VITAL_SIGNS_BLOCK = buildVitalSignsPromptBlock();
|
|
15337
15353
|
PLAYBOOK_BLOCK = `- "Multi-Thread Your Deals" (id: multi-thread-deals) \u2014 when thread_depth is low
|
|
15338
15354
|
- "Clean Dead Pipeline" (id: clean-dead-pipeline) \u2014 when freshness is low
|
|
15339
15355
|
- "Fix the Handoff Gap" (id: fix-handoff-gap) \u2014 when drop_rate is high and the source\u2192owner path is unknown
|