ndrstnd 0.1.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/LICENSE +201 -0
- package/README.md +56 -0
- package/dist/server/agent.d.ts +51 -0
- package/dist/server/agent.js +77 -0
- package/dist/server/agent.js.map +1 -0
- package/dist/server/analysis-core.d.ts +93 -0
- package/dist/server/analysis-core.js +442 -0
- package/dist/server/analysis-core.js.map +1 -0
- package/dist/server/analyze.d.ts +55 -0
- package/dist/server/analyze.js +72 -0
- package/dist/server/analyze.js.map +1 -0
- package/dist/server/artifact.d.ts +8 -0
- package/dist/server/artifact.js +43 -0
- package/dist/server/artifact.js.map +1 -0
- package/dist/server/claude.d.ts +29 -0
- package/dist/server/claude.js +243 -0
- package/dist/server/claude.js.map +1 -0
- package/dist/server/cli-support.d.ts +7 -0
- package/dist/server/cli-support.js +13 -0
- package/dist/server/cli-support.js.map +1 -0
- package/dist/server/cli.d.ts +2 -0
- package/dist/server/cli.js +276 -0
- package/dist/server/cli.js.map +1 -0
- package/dist/server/codex.d.ts +34 -0
- package/dist/server/codex.js +256 -0
- package/dist/server/codex.js.map +1 -0
- package/dist/server/conversation.d.ts +9 -0
- package/dist/server/conversation.js +57 -0
- package/dist/server/conversation.js.map +1 -0
- package/dist/server/evidence-ordering.d.ts +13 -0
- package/dist/server/evidence-ordering.js +143 -0
- package/dist/server/evidence-ordering.js.map +1 -0
- package/dist/server/git-model.d.ts +15 -0
- package/dist/server/git-model.js +156 -0
- package/dist/server/git-model.js.map +1 -0
- package/dist/server/git.d.ts +29 -0
- package/dist/server/git.js +124 -0
- package/dist/server/git.js.map +1 -0
- package/dist/server/http.d.ts +14 -0
- package/dist/server/http.js +139 -0
- package/dist/server/http.js.map +1 -0
- package/dist/server/preview-fixture.d.ts +1 -0
- package/dist/server/preview-fixture.js +23 -0
- package/dist/server/preview-fixture.js.map +1 -0
- package/dist/server/review-presentation.d.ts +3 -0
- package/dist/server/review-presentation.js +14 -0
- package/dist/server/review-presentation.js.map +1 -0
- package/dist/server/skill.d.ts +14 -0
- package/dist/server/skill.js +94 -0
- package/dist/server/skill.js.map +1 -0
- package/dist/server/store.d.ts +36 -0
- package/dist/server/store.js +134 -0
- package/dist/server/store.js.map +1 -0
- package/dist/server/version.d.ts +2 -0
- package/dist/server/version.js +13 -0
- package/dist/server/version.js.map +1 -0
- package/dist/shared/analysis-schema.d.ts +325 -0
- package/dist/shared/analysis-schema.js +50 -0
- package/dist/shared/analysis-schema.js.map +1 -0
- package/dist/shared/domain.d.ts +33 -0
- package/dist/shared/domain.js +2 -0
- package/dist/shared/domain.js.map +1 -0
- package/dist/web/evidence-model.d.ts +36 -0
- package/dist/web/evidence-model.js +134 -0
- package/dist/web/evidence-model.js.map +1 -0
- package/dist/web/frozen-review-data.d.ts +3 -0
- package/dist/web/frozen-review-data.js +202 -0
- package/dist/web/frozen-review-data.js.map +1 -0
- package/dist/web/language.d.ts +4 -0
- package/dist/web/language.js +14 -0
- package/dist/web/language.js.map +1 -0
- package/dist/web/page.d.ts +10 -0
- package/dist/web/page.js +1038 -0
- package/dist/web/page.js.map +1 -0
- package/dist/web/review-data.d.ts +20 -0
- package/dist/web/review-data.js +2 -0
- package/dist/web/review-data.js.map +1 -0
- package/dist/web/test-plan-model.d.ts +27 -0
- package/dist/web/test-plan-model.js +89 -0
- package/dist/web/test-plan-model.js.map +1 -0
- package/package.json +47 -0
- package/src/skill-assets/ndrstnd/SKILL.md +22 -0
- package/src/skill-assets/ndrstnd/agents/openai.yaml +4 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/server/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { AgentClient, AgentTextThread, AuthStatus } from "./agent.js";
|
|
2
|
+
export type { TurnActivity } from "./agent.js";
|
|
3
|
+
/** Turns a thread notification into reviewer-facing phrasing; undefined means the previous label still applies. */
|
|
4
|
+
export declare function describeThreadNotification(method: string, params: Record<string, unknown>): string | undefined;
|
|
5
|
+
export declare function getCodexAuthStatus(): Promise<AuthStatus>;
|
|
6
|
+
export declare class CodexAppServerClient implements AgentClient {
|
|
7
|
+
private readonly inactivityTimeoutMs;
|
|
8
|
+
private readonly requestTimeoutMs;
|
|
9
|
+
private process;
|
|
10
|
+
private buffer;
|
|
11
|
+
private stderrTail;
|
|
12
|
+
private initialized;
|
|
13
|
+
private failure;
|
|
14
|
+
private nextId;
|
|
15
|
+
private readonly pending;
|
|
16
|
+
private readonly notificationListeners;
|
|
17
|
+
private readonly failureListeners;
|
|
18
|
+
constructor(inactivityTimeoutMs?: number, requestTimeoutMs?: number);
|
|
19
|
+
request(method: string, params: Record<string, unknown>): Promise<unknown>;
|
|
20
|
+
close(): void;
|
|
21
|
+
/** Starts a reusable thread so follow-up turns (validation repairs) keep the inspection context instead of resending the full prompt. */
|
|
22
|
+
startTextThread(cwd: string): Promise<AgentTextThread>;
|
|
23
|
+
private runThreadTurn;
|
|
24
|
+
private start;
|
|
25
|
+
/** Kept as an instance method so tests can substitute a scripted child process. */
|
|
26
|
+
private spawnCodex;
|
|
27
|
+
private sendRequest;
|
|
28
|
+
private sendNotification;
|
|
29
|
+
private write;
|
|
30
|
+
private handleOutput;
|
|
31
|
+
private fail;
|
|
32
|
+
private stderrHint;
|
|
33
|
+
private rejectPending;
|
|
34
|
+
}
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { packageVersion } from "./version.js";
|
|
3
|
+
/** Turns a thread notification into reviewer-facing phrasing; undefined means the previous label still applies. */
|
|
4
|
+
export function describeThreadNotification(method, params) {
|
|
5
|
+
if (method === "item/agentMessage/delta")
|
|
6
|
+
return "drafting the narrative";
|
|
7
|
+
const item = asObject(params["item"]);
|
|
8
|
+
const itemType = item["type"];
|
|
9
|
+
if (itemType === "commandExecution") {
|
|
10
|
+
const command = typeof item["command"] === "string" ? item["command"].replace(/\s+/g, " ").trim() : "";
|
|
11
|
+
if (command === "")
|
|
12
|
+
return "inspecting the repository";
|
|
13
|
+
const compact = command.length > 90 ? `${command.slice(0, 87)}…` : command;
|
|
14
|
+
return method === "item/completed" ? `finished \`${compact}\`` : `running \`${compact}\``;
|
|
15
|
+
}
|
|
16
|
+
if (itemType === "reasoning")
|
|
17
|
+
return "reasoning about the branch";
|
|
18
|
+
if (itemType === "agentMessage")
|
|
19
|
+
return "drafting the narrative";
|
|
20
|
+
if (itemType === "webSearch")
|
|
21
|
+
return "searching the web";
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
export async function getCodexAuthStatus() {
|
|
25
|
+
const client = new CodexAppServerClient();
|
|
26
|
+
try {
|
|
27
|
+
const response = await client.request("account/read", { refreshToken: false });
|
|
28
|
+
const account = asObject(response)["account"];
|
|
29
|
+
if (account === null || account === undefined)
|
|
30
|
+
return { state: "signed-out" };
|
|
31
|
+
const accountType = typeof asObject(account)["type"] === "string" ? String(asObject(account)["type"]) : "unknown";
|
|
32
|
+
return { state: "signed-in", accountType };
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
return { state: "unreachable", reason: error instanceof Error ? error.message : String(error) };
|
|
36
|
+
}
|
|
37
|
+
finally {
|
|
38
|
+
client.close();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export class CodexAppServerClient {
|
|
42
|
+
inactivityTimeoutMs;
|
|
43
|
+
requestTimeoutMs;
|
|
44
|
+
process;
|
|
45
|
+
buffer = "";
|
|
46
|
+
stderrTail = "";
|
|
47
|
+
initialized = false;
|
|
48
|
+
failure;
|
|
49
|
+
nextId = 1;
|
|
50
|
+
pending = new Map();
|
|
51
|
+
notificationListeners = new Set();
|
|
52
|
+
failureListeners = new Set();
|
|
53
|
+
constructor(inactivityTimeoutMs = 300_000, requestTimeoutMs = 60_000) {
|
|
54
|
+
this.inactivityTimeoutMs = inactivityTimeoutMs;
|
|
55
|
+
this.requestTimeoutMs = requestTimeoutMs;
|
|
56
|
+
}
|
|
57
|
+
async request(method, params) {
|
|
58
|
+
await this.start();
|
|
59
|
+
if (!this.initialized) {
|
|
60
|
+
await this.sendRequest("initialize", {
|
|
61
|
+
clientInfo: { name: "ndrstnd", title: "ndrstnd", version: await packageVersion() },
|
|
62
|
+
});
|
|
63
|
+
this.sendNotification("initialized", {});
|
|
64
|
+
this.initialized = true;
|
|
65
|
+
}
|
|
66
|
+
return this.sendRequest(method, params);
|
|
67
|
+
}
|
|
68
|
+
close() {
|
|
69
|
+
this.rejectPending(new Error("Codex app-server closed."));
|
|
70
|
+
this.process?.kill();
|
|
71
|
+
this.process = undefined;
|
|
72
|
+
this.initialized = false;
|
|
73
|
+
}
|
|
74
|
+
/** Starts a reusable thread so follow-up turns (validation repairs) keep the inspection context instead of resending the full prompt. */
|
|
75
|
+
async startTextThread(cwd) {
|
|
76
|
+
const threadResponse = asObject(await this.request("thread/start", { cwd, sandbox: "read-only", approvalPolicy: "never" }));
|
|
77
|
+
const threadId = String(asObject(threadResponse["thread"])["id"] ?? "");
|
|
78
|
+
if (threadId === "")
|
|
79
|
+
throw new Error("Codex app-server did not return an analysis thread ID.");
|
|
80
|
+
return {
|
|
81
|
+
send: (prompt, onActivity) => this.runThreadTurn(threadId, cwd, prompt, onActivity),
|
|
82
|
+
close: async () => {
|
|
83
|
+
await this.request("thread/archive", { threadId }).catch(() => undefined);
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
async runThreadTurn(threadId, cwd, prompt, onActivity) {
|
|
88
|
+
let text = "";
|
|
89
|
+
let cancelTurn;
|
|
90
|
+
const completed = new Promise((resolve, reject) => {
|
|
91
|
+
// Inspecting a large branch takes many quiet-but-active tool turns, so time
|
|
92
|
+
// out on inactivity across any thread notification rather than total duration.
|
|
93
|
+
let timeout;
|
|
94
|
+
let notifications = 0;
|
|
95
|
+
let label = "starting the analysis turn";
|
|
96
|
+
const cleanup = () => {
|
|
97
|
+
clearTimeout(timeout);
|
|
98
|
+
this.notificationListeners.delete(listener);
|
|
99
|
+
this.failureListeners.delete(failureListener);
|
|
100
|
+
};
|
|
101
|
+
const failWith = (error) => {
|
|
102
|
+
cleanup();
|
|
103
|
+
reject(error);
|
|
104
|
+
};
|
|
105
|
+
const armTimeout = () => {
|
|
106
|
+
clearTimeout(timeout);
|
|
107
|
+
timeout = setTimeout(() => failWith(new Error(`Codex analysis stalled: no app-server activity for ${Math.round(this.inactivityTimeoutMs / 1_000)}s after ${notifications} thread notifications and ${text.length} draft characters.${this.stderrHint()}`)), this.inactivityTimeoutMs);
|
|
108
|
+
};
|
|
109
|
+
const failureListener = (error) => failWith(error);
|
|
110
|
+
const listener = (method, params) => {
|
|
111
|
+
if (params["threadId"] !== threadId)
|
|
112
|
+
return;
|
|
113
|
+
notifications += 1;
|
|
114
|
+
armTimeout();
|
|
115
|
+
if (method === "item/agentMessage/delta") {
|
|
116
|
+
const delta = typeof params["delta"] === "string" ? params["delta"] : "";
|
|
117
|
+
text += delta;
|
|
118
|
+
}
|
|
119
|
+
if (method === "turn/failed") {
|
|
120
|
+
const reason = asObject(params["error"])["message"];
|
|
121
|
+
failWith(new Error(`Codex analysis turn failed: ${typeof reason === "string" && reason !== "" ? reason : "the app-server reported no reason"}.${this.stderrHint()}`));
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
if (method === "turn/completed") {
|
|
125
|
+
cleanup();
|
|
126
|
+
resolve();
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
label = describeThreadNotification(method, params) ?? label;
|
|
130
|
+
onActivity?.({ label, notifications, draftCharacters: text.length });
|
|
131
|
+
};
|
|
132
|
+
armTimeout();
|
|
133
|
+
this.notificationListeners.add(listener);
|
|
134
|
+
this.failureListeners.add(failureListener);
|
|
135
|
+
cancelTurn = failWith;
|
|
136
|
+
});
|
|
137
|
+
// A turn/start failure throws before `completed` is awaited; without a pre-attached handler its rejection would crash the process.
|
|
138
|
+
completed.catch(() => undefined);
|
|
139
|
+
try {
|
|
140
|
+
await this.request("turn/start", { threadId, cwd, approvalPolicy: "never", input: [{ type: "text", text: prompt }] });
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
cancelTurn?.(error instanceof Error ? error : new Error(String(error)));
|
|
144
|
+
throw error;
|
|
145
|
+
}
|
|
146
|
+
await completed;
|
|
147
|
+
return text;
|
|
148
|
+
}
|
|
149
|
+
async start() {
|
|
150
|
+
if (this.process !== undefined)
|
|
151
|
+
return;
|
|
152
|
+
this.failure = undefined;
|
|
153
|
+
const process = this.spawnCodex();
|
|
154
|
+
this.process = process;
|
|
155
|
+
process.stdout.on("data", (chunk) => this.handleOutput(chunk.toString("utf8")));
|
|
156
|
+
process.stderr.on("data", (chunk) => {
|
|
157
|
+
this.stderrTail = `${this.stderrTail}${chunk.toString("utf8")}`.slice(-4_000);
|
|
158
|
+
});
|
|
159
|
+
// Without this listener a write to a dead app-server raises an unhandled stream error and kills the whole CLI.
|
|
160
|
+
process.stdin.on("error", (error) => this.fail(new Error(`Codex app-server stopped accepting input: ${error.message}${this.stderrHint()}`)));
|
|
161
|
+
process.once("error", (error) => this.fail(new Error(`Codex app-server could not run: ${error.message}${this.stderrHint()}`)));
|
|
162
|
+
process.once("exit", (code) => this.fail(new Error(`Codex app-server exited with status ${code ?? "unknown"}.${this.stderrHint()}`)));
|
|
163
|
+
}
|
|
164
|
+
/** Kept as an instance method so tests can substitute a scripted child process. */
|
|
165
|
+
spawnCodex() {
|
|
166
|
+
return spawn("codex", ["app-server"], { stdio: "pipe" });
|
|
167
|
+
}
|
|
168
|
+
sendRequest(method, params) {
|
|
169
|
+
const id = this.nextId++;
|
|
170
|
+
return new Promise((resolve, reject) => {
|
|
171
|
+
// A request issued after the app-server already failed (for example, it never spawned) would otherwise write into a dead pipe and wait out the full timeout.
|
|
172
|
+
if (this.failure !== undefined) {
|
|
173
|
+
reject(this.failure);
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
// Turn progress is tracked by the notification inactivity timer; this bounds the request/response handshakes themselves, which are otherwise unbounded.
|
|
177
|
+
const timeout = setTimeout(() => {
|
|
178
|
+
this.pending.delete(id);
|
|
179
|
+
reject(new Error(`Codex app-server did not answer ${method} within ${Math.round(this.requestTimeoutMs / 1_000)}s.${this.stderrHint()}`));
|
|
180
|
+
}, this.requestTimeoutMs);
|
|
181
|
+
timeout.unref();
|
|
182
|
+
this.pending.set(id, {
|
|
183
|
+
resolve: (value) => {
|
|
184
|
+
clearTimeout(timeout);
|
|
185
|
+
resolve(value);
|
|
186
|
+
},
|
|
187
|
+
reject: (reason) => {
|
|
188
|
+
clearTimeout(timeout);
|
|
189
|
+
reject(reason);
|
|
190
|
+
},
|
|
191
|
+
});
|
|
192
|
+
this.write({ id, method, params });
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
sendNotification(method, params) {
|
|
196
|
+
this.write({ method, params });
|
|
197
|
+
}
|
|
198
|
+
write(message) {
|
|
199
|
+
if (this.process === undefined)
|
|
200
|
+
throw new Error("Codex app-server is not running.");
|
|
201
|
+
this.process.stdin.write(`${JSON.stringify(message)}\n`);
|
|
202
|
+
}
|
|
203
|
+
handleOutput(chunk) {
|
|
204
|
+
this.buffer += chunk;
|
|
205
|
+
for (;;) {
|
|
206
|
+
const newline = this.buffer.indexOf("\n");
|
|
207
|
+
if (newline === -1)
|
|
208
|
+
return;
|
|
209
|
+
const line = this.buffer.slice(0, newline);
|
|
210
|
+
this.buffer = this.buffer.slice(newline + 1);
|
|
211
|
+
if (line === "")
|
|
212
|
+
continue;
|
|
213
|
+
let message;
|
|
214
|
+
try {
|
|
215
|
+
message = JSON.parse(line);
|
|
216
|
+
}
|
|
217
|
+
catch {
|
|
218
|
+
continue;
|
|
219
|
+
}
|
|
220
|
+
if (message.id === undefined) {
|
|
221
|
+
if (message.method !== undefined && message.params !== undefined) {
|
|
222
|
+
for (const listener of this.notificationListeners)
|
|
223
|
+
listener(message.method, message.params);
|
|
224
|
+
}
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
const pending = this.pending.get(message.id);
|
|
228
|
+
if (pending === undefined)
|
|
229
|
+
continue;
|
|
230
|
+
this.pending.delete(message.id);
|
|
231
|
+
if (message.error !== undefined)
|
|
232
|
+
pending.reject(new Error(message.error.message ?? "Codex app-server returned an error."));
|
|
233
|
+
else
|
|
234
|
+
pending.resolve(message.result);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
fail(error) {
|
|
238
|
+
this.failure = error;
|
|
239
|
+
this.rejectPending(error);
|
|
240
|
+
for (const listener of [...this.failureListeners])
|
|
241
|
+
listener(error);
|
|
242
|
+
}
|
|
243
|
+
stderrHint() {
|
|
244
|
+
const tail = this.stderrTail.trim().slice(-600);
|
|
245
|
+
return tail === "" ? "" : ` Codex app-server reported: ${tail}`;
|
|
246
|
+
}
|
|
247
|
+
rejectPending(error) {
|
|
248
|
+
for (const pending of this.pending.values())
|
|
249
|
+
pending.reject(error);
|
|
250
|
+
this.pending.clear();
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
function asObject(value) {
|
|
254
|
+
return value !== null && typeof value === "object" ? value : {};
|
|
255
|
+
}
|
|
256
|
+
//# sourceMappingURL=codex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/server/codex.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface ConversationContext {
|
|
2
|
+
source: "portable-json" | "markdown";
|
|
3
|
+
messages: Array<{
|
|
4
|
+
role: "user" | "assistant";
|
|
5
|
+
timestamp?: string;
|
|
6
|
+
text: string;
|
|
7
|
+
}>;
|
|
8
|
+
}
|
|
9
|
+
export declare function importConversation(path: string): Promise<ConversationContext>;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
const MESSAGE_TEXT_LIMIT = 100_000;
|
|
4
|
+
const portableConversationSchema = z.object({
|
|
5
|
+
format: z.literal("ndrstnd-conversation-v1"),
|
|
6
|
+
repository: z.object({ pathHint: z.string().optional(), branchHint: z.string().optional() }).optional(),
|
|
7
|
+
messages: z.array(z.object({
|
|
8
|
+
role: z.enum(["user", "assistant"]),
|
|
9
|
+
timestamp: z.string().datetime({ offset: true }).optional(),
|
|
10
|
+
text: z.string().min(1),
|
|
11
|
+
})).min(1),
|
|
12
|
+
});
|
|
13
|
+
export async function importConversation(path) {
|
|
14
|
+
const source = await readFile(path, "utf8");
|
|
15
|
+
if (source.trimStart().startsWith("{")) {
|
|
16
|
+
const value = parseJsonSource(path, source);
|
|
17
|
+
if (value !== undefined) {
|
|
18
|
+
const parsed = portableConversationSchema.safeParse(value);
|
|
19
|
+
if (!parsed.success) {
|
|
20
|
+
throw new Error(`Conversation file ${path} is not an ndrstnd-conversation-v1 document: ${parsed.error.issues.slice(0, 5).map((issue) => `${issue.path.join(".") || "document"}: ${issue.message}`).join("; ")}`);
|
|
21
|
+
}
|
|
22
|
+
// Overlong messages are truncated like the markdown path instead of failing the whole import.
|
|
23
|
+
return { source: "portable-json", messages: parsed.data.messages.map((message) => ({ ...message, text: message.text.slice(0, MESSAGE_TEXT_LIMIT) })) };
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const messages = parseMarkdownTranscript(source);
|
|
27
|
+
if (messages.length === 0)
|
|
28
|
+
throw new Error("Conversation Markdown contains no text.");
|
|
29
|
+
return { source: "markdown", messages };
|
|
30
|
+
}
|
|
31
|
+
/** A .json file that does not parse deserves a clear error; other files starting with `{` fall back to the markdown reader. */
|
|
32
|
+
function parseJsonSource(path, source) {
|
|
33
|
+
try {
|
|
34
|
+
return JSON.parse(source);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
if (path.toLowerCase().endsWith(".json"))
|
|
38
|
+
throw new Error(`Conversation file ${path} is not valid JSON: ${error instanceof Error ? error.message : String(error)}`);
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function parseMarkdownTranscript(source) {
|
|
43
|
+
const sections = source.split(/^#{1,3}\s+(User|Assistant)\s*$/im);
|
|
44
|
+
if (sections.length === 1) {
|
|
45
|
+
const text = source.trim();
|
|
46
|
+
return text === "" ? [] : [{ role: "user", text }];
|
|
47
|
+
}
|
|
48
|
+
const messages = [];
|
|
49
|
+
for (let index = 1; index < sections.length; index += 2) {
|
|
50
|
+
const role = sections[index].toLowerCase() === "assistant" ? "assistant" : "user";
|
|
51
|
+
const text = (sections[index + 1] ?? "").trim();
|
|
52
|
+
if (text !== "")
|
|
53
|
+
messages.push({ role, text: text.slice(0, MESSAGE_TEXT_LIMIT) });
|
|
54
|
+
}
|
|
55
|
+
return messages;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=conversation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation.js","sourceRoot":"","sources":["../../src/server/conversation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ChangedFile, DiffHunk } from "../shared/domain.js";
|
|
2
|
+
export interface EvidenceOrderConstraint {
|
|
3
|
+
beforeEvidenceId: string;
|
|
4
|
+
afterEvidenceId: string;
|
|
5
|
+
reason: "symbol" | "layer" | "test";
|
|
6
|
+
symbol?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface EvidenceOrder {
|
|
9
|
+
constraints: EvidenceOrderConstraint[];
|
|
10
|
+
orderedEvidenceIds: string[];
|
|
11
|
+
}
|
|
12
|
+
export declare function deriveEvidenceOrder(hunks: readonly DiffHunk[], files: readonly ChangedFile[]): EvidenceOrder;
|
|
13
|
+
export declare function topologicalEvidenceOrder(hunks: readonly DiffHunk[], constraints: readonly EvidenceOrderConstraint[], filesById: ReadonlyMap<string, ChangedFile>): string[];
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
const keywords = new Set([
|
|
2
|
+
"as", "async", "await", "break", "case", "catch", "class", "const", "continue", "default", "delete", "do", "else", "enum", "export", "extends", "false", "finally", "for", "from", "function", "if", "implements", "import", "in", "instanceof", "interface", "let", "new", "null", "of", "private", "protected", "public", "return", "static", "super", "switch", "this", "throw", "true", "try", "type", "undefined", "var", "void", "while",
|
|
3
|
+
]);
|
|
4
|
+
export function deriveEvidenceOrder(hunks, files) {
|
|
5
|
+
const filesById = new Map(files.map((file) => [file.id, file]));
|
|
6
|
+
const meaningful = hunks.filter((hunk) => filesById.get(hunk.fileId)?.signal === "meaningful");
|
|
7
|
+
const constraints = dedupeConstraints(symbolConstraints(meaningful));
|
|
8
|
+
return {
|
|
9
|
+
constraints,
|
|
10
|
+
orderedEvidenceIds: layeredEvidenceOrder(meaningful, constraints, filesById),
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Layer and test precedence used to be materialized as one constraint object per cross-layer hunk
|
|
15
|
+
* pair, O(n^2) on large branches; emitting layers in ascending order enforces the same precedence
|
|
16
|
+
* with only the symbol constraints materialized.
|
|
17
|
+
*/
|
|
18
|
+
function layeredEvidenceOrder(hunks, constraints, filesById) {
|
|
19
|
+
const rank = new Map(hunks.map((hunk, index) => [hunk.id, evidenceRank(hunk, filesById, index)]));
|
|
20
|
+
const layerOf = (id) => rank.get(id)?.layer;
|
|
21
|
+
// A symbol defined in a later layer than its use contradicts layer precedence; keep the plain rank order, exactly like a constraint cycle.
|
|
22
|
+
const conflicting = constraints.some((constraint) => {
|
|
23
|
+
const beforeLayer = layerOf(constraint.beforeEvidenceId);
|
|
24
|
+
const afterLayer = layerOf(constraint.afterEvidenceId);
|
|
25
|
+
return beforeLayer !== undefined && afterLayer !== undefined && beforeLayer > afterLayer;
|
|
26
|
+
});
|
|
27
|
+
if (conflicting)
|
|
28
|
+
return hunks.map((hunk) => hunk.id).sort((a, b) => compareRank(rank.get(a), rank.get(b)));
|
|
29
|
+
const byLayer = new Map();
|
|
30
|
+
for (const hunk of hunks) {
|
|
31
|
+
const layer = layerOf(hunk.id) ?? 2;
|
|
32
|
+
const list = byLayer.get(layer) ?? [];
|
|
33
|
+
list.push(hunk);
|
|
34
|
+
byLayer.set(layer, list);
|
|
35
|
+
}
|
|
36
|
+
return [...byLayer.entries()]
|
|
37
|
+
.sort(([a], [b]) => a - b)
|
|
38
|
+
.flatMap(([layer, layerHunks]) => topologicalEvidenceOrder(layerHunks, constraints.filter((constraint) => layerOf(constraint.beforeEvidenceId) === layer && layerOf(constraint.afterEvidenceId) === layer), filesById));
|
|
39
|
+
}
|
|
40
|
+
export function topologicalEvidenceOrder(hunks, constraints, filesById) {
|
|
41
|
+
const ids = hunks.map((hunk) => hunk.id);
|
|
42
|
+
const known = new Set(ids);
|
|
43
|
+
const outgoing = new Map();
|
|
44
|
+
const indegree = new Map(ids.map((id) => [id, 0]));
|
|
45
|
+
for (const constraint of constraints) {
|
|
46
|
+
if (!known.has(constraint.beforeEvidenceId) || !known.has(constraint.afterEvidenceId) || constraint.beforeEvidenceId === constraint.afterEvidenceId)
|
|
47
|
+
continue;
|
|
48
|
+
const edges = outgoing.get(constraint.beforeEvidenceId) ?? new Set();
|
|
49
|
+
if (!edges.has(constraint.afterEvidenceId)) {
|
|
50
|
+
edges.add(constraint.afterEvidenceId);
|
|
51
|
+
outgoing.set(constraint.beforeEvidenceId, edges);
|
|
52
|
+
indegree.set(constraint.afterEvidenceId, (indegree.get(constraint.afterEvidenceId) ?? 0) + 1);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const rank = new Map(hunks.map((hunk, index) => [hunk.id, evidenceRank(hunk, filesById, index)]));
|
|
56
|
+
const ready = ids.filter((id) => indegree.get(id) === 0).sort((a, b) => compareRank(rank.get(a), rank.get(b)));
|
|
57
|
+
const ordered = [];
|
|
58
|
+
while (ready.length > 0) {
|
|
59
|
+
const id = ready.shift();
|
|
60
|
+
ordered.push(id);
|
|
61
|
+
for (const after of outgoing.get(id) ?? []) {
|
|
62
|
+
indegree.set(after, (indegree.get(after) ?? 0) - 1);
|
|
63
|
+
if (indegree.get(after) === 0) {
|
|
64
|
+
ready.push(after);
|
|
65
|
+
ready.sort((a, b) => compareRank(rank.get(a), rank.get(b)));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return ordered.length === ids.length ? ordered : ids.sort((a, b) => compareRank(rank.get(a), rank.get(b)));
|
|
70
|
+
}
|
|
71
|
+
function symbolConstraints(hunks) {
|
|
72
|
+
const bySymbol = new Map();
|
|
73
|
+
const usesByHunk = new Map();
|
|
74
|
+
for (const hunk of hunks) {
|
|
75
|
+
const additions = hunk.lines.filter((line) => line.kind === "addition").map((line) => line.content);
|
|
76
|
+
for (const symbol of additions.flatMap(definedSymbols)) {
|
|
77
|
+
const definers = bySymbol.get(symbol) ?? new Set();
|
|
78
|
+
definers.add(hunk.id);
|
|
79
|
+
bySymbol.set(symbol, definers);
|
|
80
|
+
}
|
|
81
|
+
usesByHunk.set(hunk.id, new Set(additions.flatMap(usedSymbols)));
|
|
82
|
+
}
|
|
83
|
+
const constraints = [];
|
|
84
|
+
for (const [hunkId, uses] of usesByHunk) {
|
|
85
|
+
for (const symbol of uses) {
|
|
86
|
+
for (const definerId of bySymbol.get(symbol) ?? []) {
|
|
87
|
+
if (definerId !== hunkId)
|
|
88
|
+
constraints.push({ beforeEvidenceId: definerId, afterEvidenceId: hunkId, reason: "symbol", symbol });
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return constraints;
|
|
93
|
+
}
|
|
94
|
+
function definedSymbols(line) {
|
|
95
|
+
const symbols = [];
|
|
96
|
+
const patterns = [
|
|
97
|
+
/\bexport\s+(?:default\s+)?(?:async\s+)?function\s+([A-Za-z_$][\w$]*)/g,
|
|
98
|
+
/\bexport\s+(?:default\s+)?(?:abstract\s+)?(?:class|interface|enum|type)\s+([A-Za-z_$][\w$]*)/g,
|
|
99
|
+
/\bexport\s+(?:const|let|var)\s+([A-Za-z_$][\w$]*)/g,
|
|
100
|
+
];
|
|
101
|
+
for (const pattern of patterns) {
|
|
102
|
+
for (const match of line.matchAll(pattern))
|
|
103
|
+
symbols.push(match[1]);
|
|
104
|
+
}
|
|
105
|
+
return symbols;
|
|
106
|
+
}
|
|
107
|
+
function usedSymbols(line) {
|
|
108
|
+
return [...line.matchAll(/\b[A-Za-z_$][\w$]*\b/g)]
|
|
109
|
+
.map((match) => match[0])
|
|
110
|
+
.filter((word) => !keywords.has(word) && !/^[A-Z_]+$/.test(word));
|
|
111
|
+
}
|
|
112
|
+
function layerFor(path) {
|
|
113
|
+
if (isTestPath(path))
|
|
114
|
+
return 3;
|
|
115
|
+
if (/(^|\/)(shared|types|models|domain|schema)(\/|\.)/.test(path))
|
|
116
|
+
return 0;
|
|
117
|
+
if (/(^|\/)(server|api|services|core|lib)(\/|\.)/.test(path))
|
|
118
|
+
return 1;
|
|
119
|
+
return 2;
|
|
120
|
+
}
|
|
121
|
+
function isTestPath(path) {
|
|
122
|
+
return /(^|\/)(?:test|tests|__tests__)\//.test(path) || /\.(?:test|spec)\.[cm]?[jt]sx?$/.test(path);
|
|
123
|
+
}
|
|
124
|
+
function evidenceRank(hunk, filesById, index) {
|
|
125
|
+
const path = filesById.get(hunk.fileId)?.path ?? hunk.fileId;
|
|
126
|
+
return { layer: layerFor(path), path, newStart: hunk.newStart, index };
|
|
127
|
+
}
|
|
128
|
+
function compareRank(left, right) {
|
|
129
|
+
if (left === undefined || right === undefined)
|
|
130
|
+
return left === right ? 0 : left === undefined ? 1 : -1;
|
|
131
|
+
return left.layer - right.layer || left.path.localeCompare(right.path) || left.newStart - right.newStart || left.index - right.index;
|
|
132
|
+
}
|
|
133
|
+
function dedupeConstraints(constraints) {
|
|
134
|
+
const seen = new Set();
|
|
135
|
+
return constraints.filter((constraint) => {
|
|
136
|
+
const key = `${constraint.beforeEvidenceId}\0${constraint.afterEvidenceId}\0${constraint.reason}\0${constraint.symbol ?? ""}`;
|
|
137
|
+
if (seen.has(key))
|
|
138
|
+
return false;
|
|
139
|
+
seen.add(key);
|
|
140
|
+
return true;
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=evidence-ordering.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidence-ordering.js","sourceRoot":"","sources":["../../src/server/evidence-ordering.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ChangedFile, DiffHunk, FileSignal } from "../shared/domain.js";
|
|
2
|
+
export interface ParsedPatch {
|
|
3
|
+
hunks: DiffHunk[];
|
|
4
|
+
binaryFileIds: Set<string>;
|
|
5
|
+
}
|
|
6
|
+
export declare function parseNameStatus(output: string): ChangedFile[];
|
|
7
|
+
export declare function parsePatch(patch: string, files: readonly ChangedFile[]): ParsedPatch;
|
|
8
|
+
export declare function untrackedFiles(paths: readonly string[], knownFiles: readonly ChangedFile[]): ChangedFile[];
|
|
9
|
+
export declare function finalizeFiles(files: readonly ChangedFile[], hunks: readonly DiffHunk[], binaryFileIds: ReadonlySet<string>): ChangedFile[];
|
|
10
|
+
export declare function classifyFile(path: string, binary: boolean): {
|
|
11
|
+
signal: FileSignal;
|
|
12
|
+
reason?: string;
|
|
13
|
+
};
|
|
14
|
+
export declare function statusFor(code: string): ChangedFile["status"];
|
|
15
|
+
export declare function stableId(value: string): string;
|