human-to-code 0.1.21 → 0.1.23
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/Readme.md +62 -4
- package/SECURITY.md +30 -5
- package/dist/agents/direct/discovery.d.ts.map +1 -1
- package/dist/agents/direct/discovery.js +2 -1
- package/dist/agents/direct/discovery.js.map +1 -1
- package/dist/agents/direct/file-memory.d.ts.map +1 -1
- package/dist/agents/direct/file-memory.js +9 -0
- package/dist/agents/direct/file-memory.js.map +1 -1
- package/dist/agents/direct/generation-client.d.ts +12 -0
- package/dist/agents/direct/generation-client.d.ts.map +1 -1
- package/dist/agents/direct/generation-client.js +9 -0
- package/dist/agents/direct/generation-client.js.map +1 -1
- package/dist/agents/direct/index.d.ts +3 -0
- package/dist/agents/direct/index.d.ts.map +1 -1
- package/dist/agents/direct/index.js +3 -0
- package/dist/agents/direct/index.js.map +1 -1
- package/dist/agents/direct/integration-validation.d.ts +47 -0
- package/dist/agents/direct/integration-validation.d.ts.map +1 -0
- package/dist/agents/direct/integration-validation.js +284 -0
- package/dist/agents/direct/integration-validation.js.map +1 -0
- package/dist/agents/direct/presentation.d.ts +9 -1
- package/dist/agents/direct/presentation.d.ts.map +1 -1
- package/dist/agents/direct/presentation.js +26 -2
- package/dist/agents/direct/presentation.js.map +1 -1
- package/dist/agents/direct/project-contracts.d.ts +5 -0
- package/dist/agents/direct/project-contracts.d.ts.map +1 -0
- package/dist/agents/direct/project-contracts.js +167 -0
- package/dist/agents/direct/project-contracts.js.map +1 -0
- package/dist/agents/direct/project-memory.d.ts +42 -0
- package/dist/agents/direct/project-memory.d.ts.map +1 -0
- package/dist/agents/direct/project-memory.js +481 -0
- package/dist/agents/direct/project-memory.js.map +1 -0
- package/dist/agents/direct/staged-validation.d.ts +5 -1
- package/dist/agents/direct/staged-validation.d.ts.map +1 -1
- package/dist/agents/direct/staged-validation.js +8 -3
- package/dist/agents/direct/staged-validation.js.map +1 -1
- package/dist/agents/direct/types.d.ts +17 -0
- package/dist/agents/direct/types.d.ts.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +97 -8
- package/dist/cli.js.map +1 -1
- package/dist/config/config.d.ts +5 -0
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/config.js +21 -0
- package/dist/config/config.js.map +1 -1
- package/dist/prompts/direct-conversion.d.ts +2 -0
- package/dist/prompts/direct-conversion.d.ts.map +1 -1
- package/dist/prompts/direct-conversion.js +30 -20
- package/dist/prompts/direct-conversion.js.map +1 -1
- package/dist/prompts/direct-integration.d.ts +23 -0
- package/dist/prompts/direct-integration.d.ts.map +1 -0
- package/dist/prompts/direct-integration.js +45 -0
- package/dist/prompts/direct-integration.js.map +1 -0
- package/dist/prompts/direct-repair.d.ts +2 -0
- package/dist/prompts/direct-repair.d.ts.map +1 -1
- package/dist/prompts/direct-repair.js +11 -5
- package/dist/prompts/direct-repair.js.map +1 -1
- package/dist/prompts/index.d.ts +1 -0
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +1 -0
- package/dist/prompts/index.js.map +1 -1
- package/docs/ARCHITECTURE.md +10 -5
- package/docs/MODULES.md +10 -4
- package/docs/SCALABILITY.md +15 -0
- package/docs/roadmap/html-css.md +10 -0
- package/package.json +1 -1
|
@@ -0,0 +1,481 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compact, deterministic project memory for direct conversion. It models the
|
|
3
|
+
* repository both as it exists at discovery time and as it will exist after
|
|
4
|
+
* every planned output is applied, then renders a target-specific subset for
|
|
5
|
+
* one model request. Source is never executed, protected paths are omitted,
|
|
6
|
+
* credential-like contracts are excluded, and every render is character
|
|
7
|
+
* bounded.
|
|
8
|
+
*/
|
|
9
|
+
import { readFile, stat } from "node:fs/promises";
|
|
10
|
+
import { basename, dirname, extname, relative, resolve, sep } from "node:path";
|
|
11
|
+
import { isProtectedContextPath, scanSecrets } from "../../context/context.js";
|
|
12
|
+
import { languageForCodeExtension } from "../../core/languages.js";
|
|
13
|
+
import { walkDirectFiles } from "./discovery.js";
|
|
14
|
+
import { PROJECT_CONTRACT_EXTENSIONS, PROJECT_MANIFEST_NAMES, compactFileContract, } from "./project-contracts.js";
|
|
15
|
+
const DEFAULT_RENDER_CHAR_LIMIT = 24_000;
|
|
16
|
+
const DEFAULT_MAX_CONTRACT_FILES = 240;
|
|
17
|
+
const MAX_RENDERED_RELATED_FILES = 16;
|
|
18
|
+
const MAX_RENDERED_PLAN_FILES = 48;
|
|
19
|
+
const MAX_RENDERED_TREE_FILES = 72;
|
|
20
|
+
const MAX_RENDERED_CONTRACTS = 8;
|
|
21
|
+
const MAX_RENDERED_CONTRACT_CHARS = 1_200;
|
|
22
|
+
const MAX_PURPOSE_CHARS = 280;
|
|
23
|
+
const MAX_CONTRACT_ITEMS = 24;
|
|
24
|
+
function toPosix(path) {
|
|
25
|
+
return path.split(sep).join("/").replace(/^\.\//u, "");
|
|
26
|
+
}
|
|
27
|
+
function hasUnsafePathControls(path) {
|
|
28
|
+
return /[\u0000-\u001f\u007f]/u.test(path);
|
|
29
|
+
}
|
|
30
|
+
function targetPath(unit) {
|
|
31
|
+
return unit.kind === "file" ? unit.outputPath : unit.sourcePath;
|
|
32
|
+
}
|
|
33
|
+
function normalizedPolicyPath(path) {
|
|
34
|
+
return toPosix(path).replace(/\/$/u, "");
|
|
35
|
+
}
|
|
36
|
+
function isPathInside(path, parent) {
|
|
37
|
+
return path === parent || path.startsWith(`${parent}/`);
|
|
38
|
+
}
|
|
39
|
+
function isPolicyExcluded(path, ignoredNames, excludedPaths) {
|
|
40
|
+
const parts = path.split("/");
|
|
41
|
+
if (parts.some((part) => ignoredNames.has(part)))
|
|
42
|
+
return true;
|
|
43
|
+
return excludedPaths.some((entry) => isPathInside(path, entry));
|
|
44
|
+
}
|
|
45
|
+
function oneLine(value, limit = MAX_PURPOSE_CHARS) {
|
|
46
|
+
const sanitized = value
|
|
47
|
+
.replace(/[\u0000-\u0008\u000b-\u001f\u007f]/gu, " ")
|
|
48
|
+
.replace(/\s+/gu, " ")
|
|
49
|
+
.trim();
|
|
50
|
+
return sanitized.length <= limit ? sanitized : `${sanitized.slice(0, Math.max(0, limit - 1))}…`;
|
|
51
|
+
}
|
|
52
|
+
function safePurpose(value) {
|
|
53
|
+
if (scanSecrets(value).length > 0)
|
|
54
|
+
return "purpose omitted because it contains credential-like content";
|
|
55
|
+
return oneLine(value);
|
|
56
|
+
}
|
|
57
|
+
function uniqueEvidence(values, limit = MAX_CONTRACT_ITEMS) {
|
|
58
|
+
const result = [];
|
|
59
|
+
const seen = new Set();
|
|
60
|
+
for (const value of values) {
|
|
61
|
+
const cleaned = oneLine(value, 180);
|
|
62
|
+
if (cleaned.length === 0 || seen.has(cleaned))
|
|
63
|
+
continue;
|
|
64
|
+
seen.add(cleaned);
|
|
65
|
+
result.push(cleaned);
|
|
66
|
+
if (result.length >= limit)
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
return result;
|
|
70
|
+
}
|
|
71
|
+
function pathDistance(left, right) {
|
|
72
|
+
const leftParts = dirname(left).split("/").filter((part) => part !== ".");
|
|
73
|
+
const rightParts = dirname(right).split("/").filter((part) => part !== ".");
|
|
74
|
+
let shared = 0;
|
|
75
|
+
while (shared < leftParts.length && shared < rightParts.length && leftParts[shared] === rightParts[shared]) {
|
|
76
|
+
shared += 1;
|
|
77
|
+
}
|
|
78
|
+
return leftParts.length + rightParts.length - 2 * shared;
|
|
79
|
+
}
|
|
80
|
+
function extensionRole(target, related) {
|
|
81
|
+
const targetExt = extname(target).toLowerCase();
|
|
82
|
+
const relatedExt = extname(related).toLowerCase();
|
|
83
|
+
const script = new Set([".js", ".jsx", ".mjs", ".cjs", ".ts", ".tsx", ".mts", ".cts"]);
|
|
84
|
+
const browserScript = new Set([".js", ".jsx", ".mjs"]);
|
|
85
|
+
const webAsset = new Set([".svg", ".png", ".jpg", ".jpeg", ".gif", ".webp", ".avif", ".ico", ".woff", ".woff2", ".ttf", ".otf"]);
|
|
86
|
+
const markup = targetExt === ".html" || targetExt === ".htm";
|
|
87
|
+
if (markup && relatedExt === ".css")
|
|
88
|
+
return "stylesheet companion; reference it with a <link rel=\"stylesheet\"> href";
|
|
89
|
+
if (markup && browserScript.has(relatedExt))
|
|
90
|
+
return "browser-script companion; reference it with a <script src>";
|
|
91
|
+
if (markup && webAsset.has(relatedExt))
|
|
92
|
+
return "web asset candidate; reference its real relative URL when the markup uses it";
|
|
93
|
+
if (targetExt === ".css" && (relatedExt === ".html" || relatedExt === ".htm"))
|
|
94
|
+
return "markup contract; style its real classes and ids";
|
|
95
|
+
if (targetExt === ".css" && webAsset.has(relatedExt))
|
|
96
|
+
return "style asset candidate; use its real relative URL with url() when needed";
|
|
97
|
+
if (script.has(targetExt) && (relatedExt === ".html" || relatedExt === ".htm"))
|
|
98
|
+
return "DOM contract; use its real classes and ids";
|
|
99
|
+
if (script.has(targetExt) && relatedExt === ".css")
|
|
100
|
+
return "style contract; toggle or query its real class/custom-property names; do not import it unless the project pattern does";
|
|
101
|
+
if (script.has(targetExt) && script.has(relatedExt))
|
|
102
|
+
return "module candidate; import only the symbols this target actually uses";
|
|
103
|
+
if ([".c", ".cc", ".cpp"].includes(targetExt) && [".h", ".hpp"].includes(relatedExt))
|
|
104
|
+
return "header candidate; include it when this implementation uses its declarations";
|
|
105
|
+
if ([".h", ".hpp"].includes(targetExt) && [".c", ".cc", ".cpp"].includes(relatedExt))
|
|
106
|
+
return "implementation companion for this header contract";
|
|
107
|
+
if (targetExt === ".java" && relatedExt === ".java")
|
|
108
|
+
return "same-project Java type; use its declared package/type contract when needed";
|
|
109
|
+
if (targetExt === ".py" && relatedExt === ".py")
|
|
110
|
+
return "Python module candidate; import its public contract with the project's package convention";
|
|
111
|
+
if (targetExt === ".rs" && relatedExt === ".rs")
|
|
112
|
+
return "Rust module candidate; use the crate's mod/use layout rather than a filesystem-style import";
|
|
113
|
+
if (targetExt === ".go" && relatedExt === ".go")
|
|
114
|
+
return "Go package companion; same-package files share declarations and must not import each other";
|
|
115
|
+
if (targetExt === ".rb" && relatedExt === ".rb")
|
|
116
|
+
return "Ruby source companion; use require_relative or the project's loader convention when needed";
|
|
117
|
+
if (targetExt === ".cs" && relatedExt === ".cs")
|
|
118
|
+
return "same-project C# type; use its namespace/type contract rather than importing a filename";
|
|
119
|
+
if (targetExt === relatedExt && targetExt.length > 0)
|
|
120
|
+
return "same-language project file; reuse its public contract when needed";
|
|
121
|
+
return undefined;
|
|
122
|
+
}
|
|
123
|
+
function relativeReference(from, to, moduleStyle) {
|
|
124
|
+
const value = relative(dirname(from), to).split(sep).join("/") || basename(to);
|
|
125
|
+
if (!moduleStyle || value.startsWith("."))
|
|
126
|
+
return value;
|
|
127
|
+
return `./${value}`;
|
|
128
|
+
}
|
|
129
|
+
function referenceDescription(target, related, reference) {
|
|
130
|
+
const script = new Set([".js", ".jsx", ".mjs", ".cjs", ".ts", ".tsx", ".mts", ".cts"]);
|
|
131
|
+
if (script.has(extname(target).toLowerCase()) && script.has(extname(related).toLowerCase())) {
|
|
132
|
+
return `relative project path: ${reference}; preserve the project's module-specifier extension convention`;
|
|
133
|
+
}
|
|
134
|
+
const packageLanguages = new Set([".py", ".rs", ".go", ".java", ".rb", ".cs"]);
|
|
135
|
+
if (packageLanguages.has(extname(target).toLowerCase()) && extname(target).toLowerCase() === extname(related).toLowerCase()) {
|
|
136
|
+
return `relative project path: ${reference}; translate it through the project's package/module convention`;
|
|
137
|
+
}
|
|
138
|
+
return `exact relative reference: ${reference}`;
|
|
139
|
+
}
|
|
140
|
+
function renderTree(paths, annotations) {
|
|
141
|
+
return paths.map((path) => `${path}${annotations.get(path) ?? ""}`);
|
|
142
|
+
}
|
|
143
|
+
function selectTreePaths(paths, pathSet, focus, nearby, maximum) {
|
|
144
|
+
const selectedSet = new Set();
|
|
145
|
+
const include = (candidates) => {
|
|
146
|
+
for (const path of candidates) {
|
|
147
|
+
if (pathSet.has(path))
|
|
148
|
+
selectedSet.add(path);
|
|
149
|
+
if (selectedSet.size >= maximum)
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
152
|
+
return false;
|
|
153
|
+
};
|
|
154
|
+
if (!include(focus) && !include(nearby))
|
|
155
|
+
include(paths);
|
|
156
|
+
const selected = [...selectedSet].sort();
|
|
157
|
+
return { selected, omitted: Math.max(0, paths.length - selected.length) };
|
|
158
|
+
}
|
|
159
|
+
function appendSection(output, title, lines, budget) {
|
|
160
|
+
if (lines.length === 0)
|
|
161
|
+
return;
|
|
162
|
+
const available = () => budget - output.join("\n").length;
|
|
163
|
+
const heading = `${title}:`;
|
|
164
|
+
if (heading.length + 1 > available())
|
|
165
|
+
return;
|
|
166
|
+
output.push(heading);
|
|
167
|
+
let added = 0;
|
|
168
|
+
for (const line of lines) {
|
|
169
|
+
const rendered = `- ${line}`;
|
|
170
|
+
if (rendered.length + 1 > available())
|
|
171
|
+
break;
|
|
172
|
+
output.push(rendered);
|
|
173
|
+
added += 1;
|
|
174
|
+
}
|
|
175
|
+
if (added === 0)
|
|
176
|
+
output.pop();
|
|
177
|
+
}
|
|
178
|
+
/** Shared project-level memory updated after every accepted generation. */
|
|
179
|
+
export class ProjectMemory {
|
|
180
|
+
root;
|
|
181
|
+
currentFiles;
|
|
182
|
+
projectedFiles;
|
|
183
|
+
#currentFileSet;
|
|
184
|
+
#projectedFileSet;
|
|
185
|
+
#planned;
|
|
186
|
+
#sortedPlannedPaths;
|
|
187
|
+
#existingContracts;
|
|
188
|
+
#contextExcludedTargets;
|
|
189
|
+
#currentByDirectory = new Map();
|
|
190
|
+
#childDirectories = new Map();
|
|
191
|
+
#plannedByDirectory = new Map();
|
|
192
|
+
#plannedChildDirectories = new Map();
|
|
193
|
+
#generatedContracts = new Map();
|
|
194
|
+
#generatedPaths = new Set();
|
|
195
|
+
#generatedSnippets = new Map();
|
|
196
|
+
#renderCharLimit;
|
|
197
|
+
constructor(input) {
|
|
198
|
+
this.root = input.root;
|
|
199
|
+
this.currentFiles = [...input.currentFiles];
|
|
200
|
+
this.#currentFileSet = new Set(this.currentFiles);
|
|
201
|
+
this.#planned = input.planned;
|
|
202
|
+
this.#sortedPlannedPaths = [...this.#planned.keys()].sort();
|
|
203
|
+
this.#existingContracts = input.existingContracts;
|
|
204
|
+
this.#contextExcludedTargets = input.contextExcludedTargets;
|
|
205
|
+
this.#renderCharLimit = input.renderCharLimit;
|
|
206
|
+
this.projectedFiles = [...new Set([...this.currentFiles, ...this.#planned.keys()])].sort();
|
|
207
|
+
this.#projectedFileSet = new Set(this.projectedFiles);
|
|
208
|
+
for (const path of this.currentFiles) {
|
|
209
|
+
const directory = dirname(path).split(sep).join("/");
|
|
210
|
+
const files = this.#currentByDirectory.get(directory) ?? [];
|
|
211
|
+
files.push(path);
|
|
212
|
+
this.#currentByDirectory.set(directory, files);
|
|
213
|
+
}
|
|
214
|
+
for (const directory of this.#currentByDirectory.keys()) {
|
|
215
|
+
const parent = dirname(directory).split(sep).join("/");
|
|
216
|
+
if (parent === directory)
|
|
217
|
+
continue;
|
|
218
|
+
const children = this.#childDirectories.get(parent) ?? [];
|
|
219
|
+
if (!children.includes(directory))
|
|
220
|
+
children.push(directory);
|
|
221
|
+
this.#childDirectories.set(parent, children);
|
|
222
|
+
}
|
|
223
|
+
for (const path of this.#sortedPlannedPaths) {
|
|
224
|
+
const directory = dirname(path).split(sep).join("/");
|
|
225
|
+
const files = this.#plannedByDirectory.get(directory) ?? [];
|
|
226
|
+
files.push(path);
|
|
227
|
+
this.#plannedByDirectory.set(directory, files);
|
|
228
|
+
}
|
|
229
|
+
for (const directory of this.#plannedByDirectory.keys()) {
|
|
230
|
+
const parent = dirname(directory).split(sep).join("/");
|
|
231
|
+
if (parent === directory)
|
|
232
|
+
continue;
|
|
233
|
+
const children = this.#plannedChildDirectories.get(parent) ?? [];
|
|
234
|
+
if (!children.includes(directory))
|
|
235
|
+
children.push(directory);
|
|
236
|
+
this.#plannedChildDirectories.set(parent, children);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
remember(unit, code) {
|
|
240
|
+
const path = targetPath(unit);
|
|
241
|
+
this.#generatedPaths.add(path);
|
|
242
|
+
const contract = compactFileContract(path, code);
|
|
243
|
+
if (unit.kind === "file") {
|
|
244
|
+
if (contract.length === 0)
|
|
245
|
+
this.#generatedContracts.delete(path);
|
|
246
|
+
else
|
|
247
|
+
this.#generatedContracts.set(path, contract);
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
if (contract.length === 0)
|
|
251
|
+
return;
|
|
252
|
+
const snippets = this.#generatedSnippets.get(path) ?? [];
|
|
253
|
+
snippets.push(contract);
|
|
254
|
+
this.#generatedSnippets.set(path, snippets.slice(-MAX_CONTRACT_ITEMS));
|
|
255
|
+
this.#generatedContracts.set(path, uniqueEvidence(snippets, MAX_CONTRACT_ITEMS).join("\n"));
|
|
256
|
+
}
|
|
257
|
+
#nearbyFiles(path, byDirectory, childDirectories) {
|
|
258
|
+
const directory = dirname(path).split(sep).join("/");
|
|
259
|
+
const parentDirectory = dirname(directory).split(sep).join("/");
|
|
260
|
+
return [
|
|
261
|
+
...(byDirectory.get(directory) ?? []),
|
|
262
|
+
...(parentDirectory === directory ? [] : byDirectory.get(parentDirectory) ?? []),
|
|
263
|
+
...(childDirectories.get(directory) ?? []).flatMap((child) => byDirectory.get(child) ?? []),
|
|
264
|
+
];
|
|
265
|
+
}
|
|
266
|
+
#relatedFiles(path) {
|
|
267
|
+
const targetExt = extname(path).toLowerCase();
|
|
268
|
+
const moduleStyle = [".ts", ".tsx", ".mts", ".cts", ".js", ".jsx", ".mjs", ".cjs"].includes(targetExt);
|
|
269
|
+
const nearbyCurrent = this.#nearbyFiles(path, this.#currentByDirectory, this.#childDirectories);
|
|
270
|
+
const nearbyPlanned = this.#nearbyFiles(path, this.#plannedByDirectory, this.#plannedChildDirectories);
|
|
271
|
+
const candidates = new Set([
|
|
272
|
+
...nearbyPlanned,
|
|
273
|
+
...this.#sortedPlannedPaths.slice(0, 64),
|
|
274
|
+
...this.#existingContracts.keys(),
|
|
275
|
+
...nearbyCurrent,
|
|
276
|
+
]);
|
|
277
|
+
candidates.delete(path);
|
|
278
|
+
const related = [];
|
|
279
|
+
for (const candidate of candidates) {
|
|
280
|
+
const role = extensionRole(path, candidate);
|
|
281
|
+
if (role === undefined)
|
|
282
|
+
continue;
|
|
283
|
+
const planned = this.#planned.has(candidate);
|
|
284
|
+
const generated = this.#generatedPaths.has(candidate);
|
|
285
|
+
const distance = pathDistance(path, candidate);
|
|
286
|
+
const score = (planned ? 100 : 0) + (generated ? 40 : 0) + (distance === 0 ? 60 : Math.max(0, 30 - distance * 10));
|
|
287
|
+
if (!planned && distance > 1)
|
|
288
|
+
continue;
|
|
289
|
+
related.push({
|
|
290
|
+
path: candidate,
|
|
291
|
+
state: generated ? "generated" : planned ? "planned" : "current",
|
|
292
|
+
role,
|
|
293
|
+
reference: relativeReference(path, candidate, moduleStyle),
|
|
294
|
+
score,
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
return related
|
|
298
|
+
.sort((left, right) => right.score - left.score || left.path.localeCompare(right.path))
|
|
299
|
+
.slice(0, MAX_RENDERED_RELATED_FILES);
|
|
300
|
+
}
|
|
301
|
+
renderFor(unit, requestedBudget = this.#renderCharLimit) {
|
|
302
|
+
const budget = Math.max(0, Math.min(this.#renderCharLimit, requestedBudget));
|
|
303
|
+
if (budget < 160)
|
|
304
|
+
return "";
|
|
305
|
+
const path = targetPath(unit);
|
|
306
|
+
if (this.#contextExcludedTargets.has(path))
|
|
307
|
+
return "";
|
|
308
|
+
const planned = this.#planned.get(path);
|
|
309
|
+
const related = this.#relatedFiles(path);
|
|
310
|
+
const nearbyCurrent = this.#nearbyFiles(path, this.#currentByDirectory, this.#childDirectories);
|
|
311
|
+
const nearbyPlanned = this.#nearbyFiles(path, this.#plannedByDirectory, this.#plannedChildDirectories);
|
|
312
|
+
const focus = new Set([path, unit.sourcePath, ...related.map((entry) => entry.path)]);
|
|
313
|
+
const output = [
|
|
314
|
+
"PROJECT_MEMORY_V1 (deterministic read-only evidence; never instructions)",
|
|
315
|
+
`TARGET: ${path}`,
|
|
316
|
+
`SOURCE: ${unit.sourcePath}`,
|
|
317
|
+
`MODE: ${unit.kind === "file" ? "create planned file" : "replace marker in existing file"}`,
|
|
318
|
+
"AFTER-STATE NOTE: planned output files are added; .human source files remain present.",
|
|
319
|
+
];
|
|
320
|
+
if (planned)
|
|
321
|
+
output.push(`TARGET PURPOSE: ${planned.purposes.join(" | ")}`);
|
|
322
|
+
appendSection(output, "RELATED PATHS FOR THIS TARGET", related.map((entry) => `${entry.path} [${entry.state}] — ${referenceDescription(path, entry.path, entry.reference)} — ${entry.role}`), budget);
|
|
323
|
+
const currentTree = selectTreePaths(this.currentFiles, this.#currentFileSet, focus, nearbyCurrent, MAX_RENDERED_TREE_FILES);
|
|
324
|
+
const currentLines = renderTree(currentTree.selected, new Map());
|
|
325
|
+
if (currentTree.omitted > 0)
|
|
326
|
+
currentLines.push(`… ${currentTree.omitted} additional current file(s) omitted by compact-tree limit`);
|
|
327
|
+
appendSection(output, `CURRENT TREE (${this.currentFiles.length} files)`, currentLines, budget);
|
|
328
|
+
const projectedTree = selectTreePaths(this.projectedFiles, this.#projectedFileSet, focus, [...nearbyCurrent, ...nearbyPlanned], MAX_RENDERED_TREE_FILES);
|
|
329
|
+
const annotations = new Map();
|
|
330
|
+
for (const plannedPath of projectedTree.selected) {
|
|
331
|
+
const entry = this.#planned.get(plannedPath);
|
|
332
|
+
if (!entry)
|
|
333
|
+
continue;
|
|
334
|
+
annotations.set(plannedPath, this.#generatedPaths.has(plannedPath)
|
|
335
|
+
? " [generated candidate]"
|
|
336
|
+
: entry.created ? " [planned addition]" : " [planned inline update]");
|
|
337
|
+
}
|
|
338
|
+
const projectedLines = renderTree(projectedTree.selected, annotations);
|
|
339
|
+
if (projectedTree.omitted > 0)
|
|
340
|
+
projectedLines.push(`… ${projectedTree.omitted} additional projected file(s) omitted by compact-tree limit`);
|
|
341
|
+
appendSection(output, `PROJECTED TREE AFTER A SUCCESSFUL RUN (${this.projectedFiles.length} files)`, projectedLines, budget);
|
|
342
|
+
const plannedSelection = new Set();
|
|
343
|
+
for (const plannedPath of focus) {
|
|
344
|
+
if (this.#planned.has(plannedPath))
|
|
345
|
+
plannedSelection.add(plannedPath);
|
|
346
|
+
}
|
|
347
|
+
for (const plannedPath of this.#sortedPlannedPaths) {
|
|
348
|
+
if (plannedSelection.size >= MAX_RENDERED_PLAN_FILES)
|
|
349
|
+
break;
|
|
350
|
+
plannedSelection.add(plannedPath);
|
|
351
|
+
}
|
|
352
|
+
const plannedLines = [...plannedSelection]
|
|
353
|
+
.sort()
|
|
354
|
+
.map((plannedPath) => this.#planned.get(plannedPath))
|
|
355
|
+
.map((entry) => `${entry.path} [${this.#generatedPaths.has(entry.path) ? "generated candidate" : entry.created ? "planned new file" : "planned inline update"}] <= ${entry.sourcePaths.join(", ")} — ${entry.purposes.join(" | ")}`);
|
|
356
|
+
if (plannedSelection.size < this.#planned.size) {
|
|
357
|
+
plannedLines.push(`… ${this.#planned.size - plannedSelection.size} additional planned target(s) omitted by compact-plan limit`);
|
|
358
|
+
}
|
|
359
|
+
appendSection(output, "CONVERSION PLAN", plannedLines, budget);
|
|
360
|
+
const contractPathSet = new Set([...related.map((entry) => entry.path), path]);
|
|
361
|
+
for (const generatedPath of this.#generatedContracts.keys()) {
|
|
362
|
+
if (contractPathSet.size >= MAX_RENDERED_CONTRACTS)
|
|
363
|
+
break;
|
|
364
|
+
contractPathSet.add(generatedPath);
|
|
365
|
+
}
|
|
366
|
+
const contractLines = [...contractPathSet].slice(0, MAX_RENDERED_CONTRACTS).flatMap((contractPath) => {
|
|
367
|
+
const generated = this.#generatedContracts.get(contractPath);
|
|
368
|
+
const existing = this.#existingContracts.get(contractPath);
|
|
369
|
+
const contract = generated ?? existing;
|
|
370
|
+
if (!contract)
|
|
371
|
+
return [];
|
|
372
|
+
const state = generated ? "generated candidate" : "current file";
|
|
373
|
+
const bounded = contract.length <= MAX_RENDERED_CONTRACT_CHARS
|
|
374
|
+
? contract
|
|
375
|
+
: `${contract.slice(0, MAX_RENDERED_CONTRACT_CHARS - 1)}…`;
|
|
376
|
+
return [`${contractPath} [${state}]\n ${bounded.replace(/\n/gu, "\n ")}`];
|
|
377
|
+
});
|
|
378
|
+
appendSection(output, "COMPACT FILE CONTRACTS", contractLines, budget);
|
|
379
|
+
const rendered = output.join("\n");
|
|
380
|
+
return rendered.length <= budget ? rendered : rendered.slice(0, budget);
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
function plannedFiles(units, current, contextExcluded) {
|
|
384
|
+
const planned = new Map();
|
|
385
|
+
for (const unit of units) {
|
|
386
|
+
const path = targetPath(unit);
|
|
387
|
+
if (contextExcluded(unit.sourcePath) || contextExcluded(path))
|
|
388
|
+
continue;
|
|
389
|
+
const existing = planned.get(path);
|
|
390
|
+
const purpose = safePurpose(unit.prompt);
|
|
391
|
+
if (existing) {
|
|
392
|
+
if (!existing.sourcePaths.includes(unit.sourcePath))
|
|
393
|
+
existing.sourcePaths.push(unit.sourcePath);
|
|
394
|
+
if (purpose.length > 0 && !existing.purposes.includes(purpose))
|
|
395
|
+
existing.purposes.push(purpose);
|
|
396
|
+
continue;
|
|
397
|
+
}
|
|
398
|
+
planned.set(path, {
|
|
399
|
+
path,
|
|
400
|
+
sourcePaths: [unit.sourcePath],
|
|
401
|
+
language: unit.language ?? languageForCodeExtension(extname(path)) ?? "unknown",
|
|
402
|
+
purposes: purpose.length > 0 ? [purpose] : ["unspecified conversion"],
|
|
403
|
+
created: unit.kind === "file" && !current.has(path),
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
return planned;
|
|
407
|
+
}
|
|
408
|
+
function contractPriority(path, targetPaths, targetDirectories, targetExtensions) {
|
|
409
|
+
const manifest = PROJECT_MANIFEST_NAMES.has(basename(path)) ? 80 : 0;
|
|
410
|
+
const directory = dirname(path).split(sep).join("/");
|
|
411
|
+
const samePath = targetPaths.has(path) ? 200 : 0;
|
|
412
|
+
const nearby = targetDirectories.has(directory) ? 60 : 0;
|
|
413
|
+
const extension = extname(path).toLowerCase();
|
|
414
|
+
const compatible = [...targetExtensions].some((targetExtension) => extensionRole(`target${targetExtension}`, `related${extension}`) !== undefined) ? 80 : 0;
|
|
415
|
+
return samePath + compatible + manifest + nearby;
|
|
416
|
+
}
|
|
417
|
+
/** Build one immutable current/projected inventory plus compact current contracts. */
|
|
418
|
+
export async function buildProjectMemory(root, units, options = {}) {
|
|
419
|
+
const absoluteRoot = resolve(root);
|
|
420
|
+
const ignoredNames = new Set(options.ignoredNames ?? []);
|
|
421
|
+
const excludedPaths = (options.excludedPaths ?? []).map(normalizedPolicyPath);
|
|
422
|
+
const absoluteFiles = options.scannedPaths === undefined
|
|
423
|
+
? await walkDirectFiles(absoluteRoot)
|
|
424
|
+
: options.scannedPaths.map((path) => resolve(absoluteRoot, ...toPosix(path).split("/")));
|
|
425
|
+
const currentFiles = [...new Set(absoluteFiles.flatMap((absolute) => {
|
|
426
|
+
const rel = toPosix(relative(absoluteRoot, absolute));
|
|
427
|
+
if (rel.length === 0 || rel === ".." || rel.startsWith("../") || hasUnsafePathControls(rel))
|
|
428
|
+
return [];
|
|
429
|
+
if (isProtectedContextPath(rel) || isPolicyExcluded(rel, ignoredNames, excludedPaths))
|
|
430
|
+
return [];
|
|
431
|
+
return [rel];
|
|
432
|
+
}))].sort();
|
|
433
|
+
const currentSet = new Set(currentFiles);
|
|
434
|
+
const contextExcluded = (path) => hasUnsafePathControls(path) || isProtectedContextPath(path) || isPolicyExcluded(path, ignoredNames, excludedPaths);
|
|
435
|
+
const contextExcludedTargets = new Set(units
|
|
436
|
+
.filter((unit) => contextExcluded(unit.sourcePath) || contextExcluded(targetPath(unit)))
|
|
437
|
+
.map(targetPath));
|
|
438
|
+
const planned = plannedFiles(units, currentSet, contextExcluded);
|
|
439
|
+
const targetPaths = new Set(planned.keys());
|
|
440
|
+
const targetDirectories = new Set([...targetPaths].map((path) => dirname(path).split(sep).join("/")));
|
|
441
|
+
const targetExtensions = new Set([...targetPaths].map((path) => extname(path).toLowerCase()));
|
|
442
|
+
const maximumContracts = Math.max(0, options.maxContractFiles ?? DEFAULT_MAX_CONTRACT_FILES);
|
|
443
|
+
const candidates = currentFiles
|
|
444
|
+
.filter((path) => PROJECT_CONTRACT_EXTENSIONS.has(extname(path).toLowerCase()) || PROJECT_MANIFEST_NAMES.has(basename(path)))
|
|
445
|
+
.map((path) => ({ path, priority: contractPriority(path, targetPaths, targetDirectories, targetExtensions) }))
|
|
446
|
+
.sort((left, right) => right.priority - left.priority || left.path.localeCompare(right.path))
|
|
447
|
+
.slice(0, maximumContracts);
|
|
448
|
+
const maxFileBytes = options.maxFileBytes ?? 512_000;
|
|
449
|
+
const existingContracts = new Map();
|
|
450
|
+
for (let offset = 0; offset < candidates.length; offset += 16) {
|
|
451
|
+
const batch = candidates.slice(offset, offset + 16);
|
|
452
|
+
const contracts = await Promise.all(batch.map(async ({ path }) => {
|
|
453
|
+
const absolute = resolve(absoluteRoot, ...path.split("/"));
|
|
454
|
+
try {
|
|
455
|
+
const metadata = await stat(absolute);
|
|
456
|
+
if (!metadata.isFile() || metadata.size > maxFileBytes)
|
|
457
|
+
return undefined;
|
|
458
|
+
const content = await readFile(absolute, "utf8");
|
|
459
|
+
const contract = compactFileContract(path, content);
|
|
460
|
+
return contract.length > 0 ? { path, contract } : undefined;
|
|
461
|
+
}
|
|
462
|
+
catch {
|
|
463
|
+
// A changing or unreadable optional context file is omitted. Discovery
|
|
464
|
+
// and exact application still enforce their own fail-closed checks.
|
|
465
|
+
return undefined;
|
|
466
|
+
}
|
|
467
|
+
}));
|
|
468
|
+
for (const entry of contracts)
|
|
469
|
+
if (entry)
|
|
470
|
+
existingContracts.set(entry.path, entry.contract);
|
|
471
|
+
}
|
|
472
|
+
return new ProjectMemory({
|
|
473
|
+
root: absoluteRoot,
|
|
474
|
+
currentFiles,
|
|
475
|
+
planned,
|
|
476
|
+
existingContracts,
|
|
477
|
+
contextExcludedTargets,
|
|
478
|
+
renderCharLimit: Math.max(1_000, options.renderCharLimit ?? DEFAULT_RENDER_CHAR_LIMIT),
|
|
479
|
+
});
|
|
480
|
+
}
|
|
481
|
+
//# sourceMappingURL=project-memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-memory.js","sourceRoot":"","sources":["../../../src/agents/direct/project-memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ProjectDiagnostic } from "./program-diagnostics.ts";
|
|
2
|
-
import type { ConversionUnit, GeneratedConversionUnit } from "./types.ts";
|
|
2
|
+
import type { ConversionUnit, GeneratedConversionUnit, ProjectMemoryProvider } from "./types.ts";
|
|
3
3
|
export interface StagedRepairRequest {
|
|
4
4
|
unit: ConversionUnit;
|
|
5
5
|
/** Project-relative path of the candidate being repaired. */
|
|
@@ -13,6 +13,8 @@ export interface StagedRepairRequest {
|
|
|
13
13
|
path: string;
|
|
14
14
|
content: string;
|
|
15
15
|
}>;
|
|
16
|
+
/** Target-specific current/projected repository evidence within the same budget. */
|
|
17
|
+
projectMemory?: string;
|
|
16
18
|
}
|
|
17
19
|
export type StagedValidationProgress = {
|
|
18
20
|
kind: "project-validate";
|
|
@@ -34,6 +36,8 @@ export interface StagedValidationOptions {
|
|
|
34
36
|
maxRepairAttemptsPerUnit?: number;
|
|
35
37
|
/** Character budget for one repair request's code-and-diagnostics context. */
|
|
36
38
|
contextCharBudget?: number;
|
|
39
|
+
/** Shared project memory, refreshed when a repair changes a candidate. */
|
|
40
|
+
projectMemory?: ProjectMemoryProvider;
|
|
37
41
|
onProgress?: (event: StagedValidationProgress) => void;
|
|
38
42
|
}
|
|
39
43
|
export interface StagedValidationOutcome {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"staged-validation.d.ts","sourceRoot":"","sources":["../../../src/agents/direct/staged-validation.ts"],"names":[],"mappings":"AAeA,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"staged-validation.d.ts","sourceRoot":"","sources":["../../../src/agents/direct/staged-validation.ts"],"names":[],"mappings":"AAeA,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,cAAc,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEjG,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,cAAc,CAAC;IACrB,6DAA6D;IAC7D,UAAU,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB,kFAAkF;IAClF,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,oEAAoE;IACpE,YAAY,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvD,oFAAoF;IACpF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,wBAAwB,GAChC;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D,MAAM,WAAW,uBAAuB;IACtC,8FAA8F;IAC9F,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3D,+DAA+D;IAC/D,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,0EAA0E;IAC1E,aAAa,CAAC,EAAE,qBAAqB,CAAC;IACtC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,IAAI,CAAC;CACxD;AAED,MAAM,WAAW,uBAAuB;IACtC,+EAA+E;IAC/E,OAAO,EAAE,uBAAuB,EAAE,CAAC;IACnC,wEAAwE;IACxE,SAAS,EAAE,OAAO,CAAC;IACnB,gDAAgD;IAChD,cAAc,EAAE,MAAM,CAAC;CACxB;AA0BD;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,SAAS,uBAAuB,EAAE,EAC7C,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,uBAAuB,CAAC,CAwGlC"}
|
|
@@ -110,7 +110,7 @@ export async function validateCandidateProject(root, generated, options = {}) {
|
|
|
110
110
|
const group = groups.groupOf.get(key);
|
|
111
111
|
const request = buildRepairRequest(unit, item.code, overlay, key, groups.members.get(group) ?? [], [
|
|
112
112
|
...(groupDiagnostics.get(group) ?? diagnostics),
|
|
113
|
-
], contextCharBudget);
|
|
113
|
+
], contextCharBudget, options.projectMemory);
|
|
114
114
|
if (scanSecrets(`${request.currentCode}\n${request.relatedFiles.map((entry) => entry.content).join("\n")}`).length > 0) {
|
|
115
115
|
// Never send credential-like content in repair context; the unit
|
|
116
116
|
// simply stays unrepaired and its group is rejected on the next pass.
|
|
@@ -125,6 +125,7 @@ export async function validateCandidateProject(root, generated, options = {}) {
|
|
|
125
125
|
continue;
|
|
126
126
|
await validateGeneratedUnit(unit, repairedCode);
|
|
127
127
|
item.code = repairedCode;
|
|
128
|
+
options.projectMemory?.remember(unit, repairedCode);
|
|
128
129
|
repaired = true;
|
|
129
130
|
}
|
|
130
131
|
catch (error) {
|
|
@@ -157,9 +158,12 @@ function applyOverlayExclusions(results, overlay, options) {
|
|
|
157
158
|
options.onProgress?.({ kind: "reject", unit, reason });
|
|
158
159
|
}
|
|
159
160
|
}
|
|
160
|
-
function buildRepairRequest(unit, currentCode, overlay, ownKey, groupKeys, diagnostics, contextCharBudget) {
|
|
161
|
+
function buildRepairRequest(unit, currentCode, overlay, ownKey, groupKeys, diagnostics, contextCharBudget, projectMemory) {
|
|
161
162
|
const normalized = diagnostics.slice(0, MAX_DIAGNOSTICS_PER_REQUEST).map(sanitizeDiagnostic);
|
|
162
|
-
|
|
163
|
+
const diagnosticChars = normalized.reduce((total, item) => total + item.message.length + (item.path?.length ?? 0) + 32, 0);
|
|
164
|
+
let budget = Math.max(0, contextCharBudget - currentCode.length - diagnosticChars);
|
|
165
|
+
const renderedProjectMemory = projectMemory?.renderFor(unit, Math.floor(budget / 2));
|
|
166
|
+
budget = Math.max(0, budget - (renderedProjectMemory?.length ?? 0));
|
|
163
167
|
const relatedFiles = [];
|
|
164
168
|
const related = groupKeys
|
|
165
169
|
.filter((key) => key !== ownKey)
|
|
@@ -177,6 +181,7 @@ function buildRepairRequest(unit, currentCode, overlay, ownKey, groupKeys, diagn
|
|
|
177
181
|
currentCode,
|
|
178
182
|
diagnostics: normalized,
|
|
179
183
|
relatedFiles,
|
|
184
|
+
...(renderedProjectMemory ? { projectMemory: renderedProjectMemory } : {}),
|
|
180
185
|
};
|
|
181
186
|
}
|
|
182
187
|
//# sourceMappingURL=staged-validation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"staged-validation.js","sourceRoot":"","sources":["../../../src/agents/direct/staged-validation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAyB,MAAM,wBAAwB,CAAC;AACtF,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAC3F,OAAO,EACL,yBAAyB,EACzB,8BAA8B,EAC9B,iCAAiC,GAElC,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"staged-validation.js","sourceRoot":"","sources":["../../../src/agents/direct/staged-validation.ts"],"names":[],"mappings":"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"}
|