denpex-mcp 0.2.5 → 0.2.6
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 +34 -2
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -697,6 +697,7 @@ function viewFromCloud(payload, note) {
|
|
|
697
697
|
steps: asArray(fix.steps),
|
|
698
698
|
evidence: asArray(fix.evidence),
|
|
699
699
|
clarifying: asArray(fix.clarifyingQuestions),
|
|
700
|
+
clarifyingChoices: objArray(fix.clarifyingChoices),
|
|
700
701
|
advisories: [
|
|
701
702
|
...advisory.map((a) => `${(a.summary ?? "Advisory").trim()}${a.action ? ` \u2014 ${a.action}` : ""}`),
|
|
702
703
|
...advisoriesFromAdvanced(payload.advanced)
|
|
@@ -740,6 +741,7 @@ function viewFromLocal(r, note) {
|
|
|
740
741
|
steps: r.steps ?? [],
|
|
741
742
|
evidence: r.evidence ?? [],
|
|
742
743
|
clarifying: [],
|
|
744
|
+
clarifyingChoices: [],
|
|
743
745
|
advisories: (r.detectors ?? []).map((d) => `${d.severity.toUpperCase()} \u2014 ${d.summary}`),
|
|
744
746
|
// The offline engine has no advisory array, no falsification contracts, no
|
|
745
747
|
// community/research grounding and no ranked-hypotheses ledger. Emit the fields as
|
|
@@ -844,7 +846,24 @@ function renderDiagnosis(v) {
|
|
|
844
846
|
}
|
|
845
847
|
if (v.priorIncident) lines.push("", `**You hit this before:** ${v.priorIncident}`);
|
|
846
848
|
if (v.costHeadline) lines.push("", `**Cost:** ${v.costHeadline}`);
|
|
847
|
-
if (v.
|
|
849
|
+
if (v.clarifyingChoices.length) {
|
|
850
|
+
lines.push("", "**To narrow it down, answer any of these:**");
|
|
851
|
+
for (const q of v.clarifyingChoices) {
|
|
852
|
+
if (!q?.question) continue;
|
|
853
|
+
lines.push("", `_${q.question}_`);
|
|
854
|
+
for (const o of q.options ?? []) {
|
|
855
|
+
if (!o?.label) continue;
|
|
856
|
+
const rec = o.recommended && q.kind === "action" ? " **(Recommended)**" : "";
|
|
857
|
+
const detail = o.detail ? ` \u2014 ${o.detail}` : "";
|
|
858
|
+
lines.push(`- \`${o.id ?? o.label}\` ${o.label}${rec}${detail}`);
|
|
859
|
+
}
|
|
860
|
+
if (q.kind === "fact") {
|
|
861
|
+
lines.push(` _Answer only from what was actually observed. If it is not known, say so rather than guessing \u2014 a wrong answer here sends the diagnosis the wrong way._`);
|
|
862
|
+
}
|
|
863
|
+
if (q.command) lines.push(` _Recommended check:_ \`${q.command}\``);
|
|
864
|
+
}
|
|
865
|
+
lines.push("", "_Reply with `ask_followup`, quoting the option id or your own answer._");
|
|
866
|
+
} else if (v.clarifying.length) {
|
|
848
867
|
lines.push("", "**To narrow it down, tell me:**");
|
|
849
868
|
v.clarifying.forEach((q) => lines.push(`- ${q}`));
|
|
850
869
|
lines.push("", "_Use `ask_followup` to continue this conversation._");
|
|
@@ -903,6 +922,19 @@ var diagnosisOutputShape = {
|
|
|
903
922
|
steps: z.array(z.string()).describe("The full prescriptive fix ladder, in order."),
|
|
904
923
|
evidence: z.array(z.string()).describe("Literal lines quoted from the submitted log that support this verdict. An EMPTY array on a high-confidence verdict means the engine could not quote its own log \u2014 weigh it accordingly."),
|
|
905
924
|
clarifying: z.array(z.string()).describe("Discriminating questions. Answer them with `ask_followup` to narrow the verdict."),
|
|
925
|
+
clarifyingChoices: z.array(z.object({
|
|
926
|
+
id: z.string().optional(),
|
|
927
|
+
kind: z.enum(["fact", "action"]).optional().describe("`fact` = what was observed; `action` = what you could run. Only `action` questions carry a recommended option \u2014 a recommendation on a question of fact would bias the evidence the next verdict is built on."),
|
|
928
|
+
question: z.string().optional(),
|
|
929
|
+
options: z.array(z.object({
|
|
930
|
+
id: z.string().optional(),
|
|
931
|
+
label: z.string().optional(),
|
|
932
|
+
detail: z.string().optional(),
|
|
933
|
+
recommended: z.boolean().optional()
|
|
934
|
+
})).optional(),
|
|
935
|
+
allowOther: z.boolean().optional(),
|
|
936
|
+
command: z.string().optional().describe("The exact command behind the recommended option.")
|
|
937
|
+
})).optional().describe("Structured form of `clarifying`: pick an option id and send it to `ask_followup`. Answer FACT questions only from what was actually observed \u2014 say you do not know rather than guessing."),
|
|
906
938
|
advisories: z.array(z.string()).describe("Human-readable one-liners, severity-sorted."),
|
|
907
939
|
advisory: z.array(advisorySchema).describe("Structured cross-cutting advisories, severity-sorted (critical first)."),
|
|
908
940
|
contradictions: z.array(z.string()).describe("What the engine ruled OUT and why \u2014 the falsification trail."),
|
|
@@ -1726,7 +1758,7 @@ function registerPrompts(server) {
|
|
|
1726
1758
|
|
|
1727
1759
|
// src/version.ts
|
|
1728
1760
|
var SERVER_NAME = "denpex";
|
|
1729
|
-
var SERVER_VERSION = "0.2.
|
|
1761
|
+
var SERVER_VERSION = "0.2.6";
|
|
1730
1762
|
|
|
1731
1763
|
// src/server.ts
|
|
1732
1764
|
function createServer() {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "denpex-mcp",
|
|
3
|
-
"version": "0.2.
|
|
4
|
-
"description": "Denpex MCP server
|
|
3
|
+
"version": "0.2.6",
|
|
4
|
+
"description": "Denpex MCP server \u00e2\u20ac\u201d diagnose GPU/ML training failures (CUDA OOM, NCCL timeouts, Xid faults, NaN loss) from Claude Desktop, Cursor, or Claude Code, with optional explicit zero-egress mode.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "Denpex",
|