ndrstnd 0.1.1 → 0.2.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.
@@ -0,0 +1,155 @@
1
+ import { createHash, randomUUID } from "node:crypto";
2
+ import { mkdir, writeFile } from "node:fs/promises";
3
+ import { homedir } from "node:os";
4
+ import { join } from "node:path";
5
+ import { DIAGNOSTIC_ARTIFACT_VERSION, DiagnosticArtifactSchema, } from "../shared/diagnostic-schema.js";
6
+ export function textMetadata(value) {
7
+ return { length: value.length, sha256: sha256(value) };
8
+ }
9
+ export function responseMetadata(response, extracted) {
10
+ return {
11
+ ...textMetadata(response),
12
+ extractedLength: extracted.length,
13
+ extractedSha256: sha256(extracted),
14
+ fenced: response.includes("```"),
15
+ candidateStartsWithObject: extracted.trimStart().startsWith("{"),
16
+ };
17
+ }
18
+ export function activitySnapshot(activity) {
19
+ return activity === undefined ? undefined : { ...activity };
20
+ }
21
+ /** Writes a shareable failure trace without persisting prompts, diffs, environment variables, or agent output by default. */
22
+ export async function writeDiagnosticArtifact(options) {
23
+ const repoPath = options.input?.repoPath;
24
+ const includeAgentOutput = options.includeAgentOutput === true;
25
+ const rawAgentResponses = includeAgentOutput
26
+ ? options.failure.attempts.flatMap((attempt, index) => attempt.rawResponse === undefined ? [] : [{ turn: index + 1, response: attempt.rawResponse }])
27
+ : [];
28
+ const artifact = DiagnosticArtifactSchema.parse({
29
+ kind: "ndrstnd-analysis-diagnostic",
30
+ version: DIAGNOSTIC_ARTIFACT_VERSION,
31
+ createdAt: (options.now ?? new Date()).toISOString(),
32
+ tool: {
33
+ version: options.toolVersion,
34
+ node: process.versions.node,
35
+ platform: process.platform,
36
+ arch: process.arch,
37
+ },
38
+ command: {
39
+ name: "review",
40
+ args: redactCommandArgs(options.commandArgs, repoPath),
41
+ },
42
+ agent: options.agent === undefined ? undefined : {
43
+ id: options.agent.id,
44
+ name: options.agent.name,
45
+ command: options.agent.command,
46
+ },
47
+ scope: repoPath === undefined || options.input === undefined ? undefined : diagnosticScope(options.input),
48
+ failure: {
49
+ phase: options.failure.phase,
50
+ message: redactText(options.failure.message, repoPath),
51
+ },
52
+ attempts: options.failure.attempts.map((attempt) => diagnosticAttempt(attempt, repoPath)),
53
+ sensitiveDataIncluded: rawAgentResponses.length > 0,
54
+ rawAgentResponses: rawAgentResponses.length === 0 ? undefined : rawAgentResponses,
55
+ nextSteps: diagnosticNextSteps(),
56
+ });
57
+ await mkdir(options.directory, { recursive: true, mode: 0o700 });
58
+ const filename = `ndrstnd-diagnostic-${fileTimestamp(artifact.createdAt)}-${randomUUID().slice(0, 8)}.json`;
59
+ const path = join(options.directory, filename);
60
+ await writeFile(path, `${JSON.stringify(artifact, null, 2)}\n`, { encoding: "utf8", mode: 0o600, flag: "wx" });
61
+ return path;
62
+ }
63
+ export function formatDiagnosticInstructions(artifactPath, writeError) {
64
+ const lines = ["To report this problem:"];
65
+ if (artifactPath !== undefined) {
66
+ lines.push(`1. Keep the diagnostic artifact unchanged: ${artifactPath}`);
67
+ }
68
+ else {
69
+ lines.push("1. Save the complete terminal output because no diagnostic artifact could be written.");
70
+ }
71
+ lines.push(artifactPath === undefined
72
+ ? "2. Share that terminal output and the exact ndrstnd command; for a review, include the selected agent and base."
73
+ : "2. Share that artifact and the exact ndrstnd review command, including the selected agent and base.");
74
+ lines.push("3. If the failure needs agent-output details, rerun with --diagnostic-include-agent-output and share that file only through a private channel.");
75
+ lines.push("4. Do not include credentials, tokens, or repository contents unless they are requested through a secure channel.");
76
+ if (writeError !== undefined)
77
+ lines.push(`Diagnostic artifact write failed: ${writeError}`);
78
+ return lines.join("\n");
79
+ }
80
+ function diagnosticAttempt(attempt, repoPath) {
81
+ return {
82
+ kind: attempt.kind,
83
+ durationMs: Math.max(0, Math.round(attempt.durationMs)),
84
+ prompt: attempt.prompt,
85
+ response: attempt.response,
86
+ activity: attempt.activity,
87
+ validation: attempt.validation === undefined ? undefined : {
88
+ phase: attempt.validation.phase,
89
+ message: redactText(attempt.validation.message, repoPath),
90
+ },
91
+ error: attempt.error === undefined ? undefined : redactText(attempt.error, repoPath),
92
+ };
93
+ }
94
+ function diagnosticScope(input) {
95
+ const hunkCounts = new Map();
96
+ for (const hunk of input.hunks)
97
+ hunkCounts.set(hunk.fileId, (hunkCounts.get(hunk.fileId) ?? 0) + 1);
98
+ const meaningfulFileCount = input.files.filter((file) => file.signal === "meaningful").length;
99
+ return {
100
+ repoPath: "<repo>",
101
+ targetRef: redactText(input.targetRef, input.repoPath),
102
+ baseRef: redactText(input.baseRef, input.repoPath),
103
+ mergeBase: redactText(input.mergeBase, input.repoPath),
104
+ includesWorkingTree: input.includesWorkingTree === true,
105
+ inputHash: sha256(JSON.stringify(input)),
106
+ fileCount: input.files.length,
107
+ meaningfulFileCount,
108
+ hunkCount: input.hunks.length,
109
+ files: input.files.map((file) => ({
110
+ path: redactText(file.path, input.repoPath),
111
+ status: file.status,
112
+ binary: file.binary,
113
+ signal: file.signal,
114
+ signalReason: file.signalReason === undefined ? undefined : redactText(file.signalReason, input.repoPath),
115
+ hunkCount: hunkCounts.get(file.id) ?? 0,
116
+ })),
117
+ };
118
+ }
119
+ function redactCommandArgs(args, repoPath) {
120
+ const redacted = [];
121
+ for (let index = 0; index < args.length; index += 1) {
122
+ const argument = args[index];
123
+ if (argument === "--repo" || argument === "--conversation") {
124
+ redacted.push(argument, argument === "--repo" ? "<repo>" : "<conversation>");
125
+ index += 1;
126
+ continue;
127
+ }
128
+ redacted.push(redactText(argument, repoPath));
129
+ }
130
+ return redacted;
131
+ }
132
+ function redactText(value, repoPath) {
133
+ let redacted = value;
134
+ if (repoPath !== undefined && repoPath !== "")
135
+ redacted = redacted.split(repoPath).join("<repo>");
136
+ const home = homedir();
137
+ if (home !== "")
138
+ redacted = redacted.split(home).join("<home>");
139
+ return redacted.slice(0, 8_000);
140
+ }
141
+ function diagnosticNextSteps() {
142
+ return [
143
+ "Keep this JSON artifact unchanged when sharing it with the ndrstnd maintainer.",
144
+ "Include the exact review command, selected agent, and intended base/target scope.",
145
+ "Use --diagnostic-include-agent-output only for a private escalation when the maintainer asks for the raw response.",
146
+ "Remove credentials or tokens before sharing; the default artifact intentionally excludes prompts, diffs, environment variables, and raw responses.",
147
+ ];
148
+ }
149
+ function fileTimestamp(value) {
150
+ return value.replace(/[:.]/g, "-").replace(/Z$/, "");
151
+ }
152
+ function sha256(value) {
153
+ return createHash("sha256").update(value).digest("hex");
154
+ }
155
+ //# sourceMappingURL=diagnostic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostic.js","sourceRoot":"","sources":["../../src/server/diagnostic.ts"],"names":[],"mappings":"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"}
@@ -5,9 +5,9 @@ export const ChapterSchema = z.object({
5
5
  id: z.string().min(1).max(80),
6
6
  title: z.string().min(1).max(120),
7
7
  kind: z.enum(["feature", "decision", "behavior", "non_functional", "risk", "test", "other"]),
8
- synopsis: z.string().min(1).max(420),
9
- before: z.string().max(300).optional(),
10
- after: z.string().max(300).optional(),
8
+ synopsis: z.string().min(1).max(1_200),
9
+ before: z.string().max(900).optional(),
10
+ after: z.string().max(900).optional(),
11
11
  confidence: z.enum(["high", "medium", "low"]),
12
12
  attention: AttentionSchema,
13
13
  riskCategories: z.array(RiskCategorySchema),
@@ -16,10 +16,10 @@ export const ChapterSchema = z.object({
16
16
  export const AnalysisStepSchema = z.object({
17
17
  id: z.string().min(1).max(80),
18
18
  title: z.string().min(1).max(120),
19
- goal: z.string().min(1).max(320),
20
- youNowHave: z.string().min(1).max(320),
19
+ goal: z.string().min(1).max(900),
20
+ youNowHave: z.string().min(1).max(900),
21
21
  deferred: z.array(z.object({
22
- concern: z.string().min(1).max(220),
22
+ concern: z.string().min(1).max(700),
23
23
  resolvedByStepId: z.string().min(1).max(80).optional(),
24
24
  })),
25
25
  dependsOn: z.array(z.string().min(1).max(80)),
@@ -35,10 +35,10 @@ export const TestExecutionSchema = z.object({
35
35
  source: z.enum(["conversation", "repository"]),
36
36
  });
37
37
  export const AnalysisDocumentSchema = z.object({
38
- summary: z.string().min(1).max(560),
38
+ summary: z.string().min(1).max(1_600),
39
39
  chapters: z.array(ChapterSchema),
40
40
  steps: z.array(AnalysisStepSchema),
41
- omittedGroups: z.array(z.object({ title: z.string().min(1).max(120), reason: z.string().min(1).max(220), evidenceIds: z.array(z.string().min(1)).min(1) })),
41
+ omittedGroups: z.array(z.object({ title: z.string().min(1).max(240), reason: z.string().min(1).max(700), evidenceIds: z.array(z.string().min(1)).min(1) })),
42
42
  unclassifiedEvidenceIds: z.array(z.string().min(1)),
43
43
  /** Reviewer-critical new-file line ranges per evidence ID; they drive the focused excerpts at the Evidence zoom. */
44
44
  focus: z.record(z.string().min(1), z.array(FocusRangeSchema).min(1).max(5)).optional(),
@@ -1 +1 @@
1
- {"version":3,"file":"analysis-schema.js","sourceRoot":"","sources":["../../src/shared/analysis-schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analysis-schema.js","sourceRoot":"","sources":["../../src/shared/analysis-schema.ts"],"names":[],"mappings":"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"}