human-to-code 0.1.20 → 0.1.22

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.
Files changed (78) hide show
  1. package/Readme.md +73 -6
  2. package/SECURITY.md +16 -2
  3. package/dist/agents/direct/candidate-overlay.d.ts.map +1 -1
  4. package/dist/agents/direct/candidate-overlay.js +1 -1
  5. package/dist/agents/direct/candidate-overlay.js.map +1 -1
  6. package/dist/agents/direct/candidate-validation.js +1 -1
  7. package/dist/agents/direct/candidate-validation.js.map +1 -1
  8. package/dist/agents/direct/discovery.d.ts +3 -2
  9. package/dist/agents/direct/discovery.d.ts.map +1 -1
  10. package/dist/agents/direct/discovery.js +71 -18
  11. package/dist/agents/direct/discovery.js.map +1 -1
  12. package/dist/agents/direct/file-memory.d.ts.map +1 -1
  13. package/dist/agents/direct/file-memory.js +9 -0
  14. package/dist/agents/direct/file-memory.js.map +1 -1
  15. package/dist/agents/direct/generation-client.d.ts +1 -0
  16. package/dist/agents/direct/generation-client.d.ts.map +1 -1
  17. package/dist/agents/direct/generation-client.js +2 -0
  18. package/dist/agents/direct/generation-client.js.map +1 -1
  19. package/dist/agents/direct/index.d.ts +2 -0
  20. package/dist/agents/direct/index.d.ts.map +1 -1
  21. package/dist/agents/direct/index.js +2 -0
  22. package/dist/agents/direct/index.js.map +1 -1
  23. package/dist/agents/direct/languages.d.ts +1 -0
  24. package/dist/agents/direct/languages.d.ts.map +1 -1
  25. package/dist/agents/direct/languages.js +2 -8
  26. package/dist/agents/direct/languages.js.map +1 -1
  27. package/dist/agents/direct/marker-parser.d.ts +1 -1
  28. package/dist/agents/direct/marker-parser.d.ts.map +1 -1
  29. package/dist/agents/direct/marker-parser.js +125 -27
  30. package/dist/agents/direct/marker-parser.js.map +1 -1
  31. package/dist/agents/direct/presentation.d.ts.map +1 -1
  32. package/dist/agents/direct/presentation.js +1 -0
  33. package/dist/agents/direct/presentation.js.map +1 -1
  34. package/dist/agents/direct/project-contracts.d.ts +5 -0
  35. package/dist/agents/direct/project-contracts.d.ts.map +1 -0
  36. package/dist/agents/direct/project-contracts.js +167 -0
  37. package/dist/agents/direct/project-contracts.js.map +1 -0
  38. package/dist/agents/direct/project-memory.d.ts +42 -0
  39. package/dist/agents/direct/project-memory.d.ts.map +1 -0
  40. package/dist/agents/direct/project-memory.js +481 -0
  41. package/dist/agents/direct/project-memory.js.map +1 -0
  42. package/dist/agents/direct/staged-validation.d.ts +5 -1
  43. package/dist/agents/direct/staged-validation.d.ts.map +1 -1
  44. package/dist/agents/direct/staged-validation.js +8 -3
  45. package/dist/agents/direct/staged-validation.js.map +1 -1
  46. package/dist/agents/direct/types.d.ts +18 -1
  47. package/dist/agents/direct/types.d.ts.map +1 -1
  48. package/dist/cli.d.ts.map +1 -1
  49. package/dist/cli.js +23 -6
  50. package/dist/cli.js.map +1 -1
  51. package/dist/config/config.d.ts.map +1 -1
  52. package/dist/config/config.js +42 -0
  53. package/dist/config/config.js.map +1 -1
  54. package/dist/core/languages.d.ts +5 -0
  55. package/dist/core/languages.d.ts.map +1 -0
  56. package/dist/core/languages.js +30 -0
  57. package/dist/core/languages.js.map +1 -0
  58. package/dist/core/types.d.ts +8 -0
  59. package/dist/core/types.d.ts.map +1 -1
  60. package/dist/index.d.ts +1 -1
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js.map +1 -1
  63. package/dist/pipeline/file-memory.d.ts.map +1 -1
  64. package/dist/pipeline/file-memory.js +2 -0
  65. package/dist/pipeline/file-memory.js.map +1 -1
  66. package/dist/prompts/direct-conversion.d.ts +2 -0
  67. package/dist/prompts/direct-conversion.d.ts.map +1 -1
  68. package/dist/prompts/direct-conversion.js +30 -20
  69. package/dist/prompts/direct-conversion.js.map +1 -1
  70. package/dist/prompts/direct-repair.d.ts +2 -0
  71. package/dist/prompts/direct-repair.d.ts.map +1 -1
  72. package/dist/prompts/direct-repair.js +11 -5
  73. package/dist/prompts/direct-repair.js.map +1 -1
  74. package/docs/ARCHITECTURE.md +10 -5
  75. package/docs/MODULES.md +11 -7
  76. package/docs/SCALABILITY.md +8 -0
  77. package/docs/roadmap/html-css.md +11 -3
  78. 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;AAE1E,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;CACxD;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,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,CAuGlC"}
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
- let budget = Math.max(0, contextCharBudget - currentCode.length);
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":"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"}
1
+ {"version":3,"file":"staged-validation.js","sourceRoot":"","sources":["../../../src/agents/direct/staged-validation.ts"],"names":[],"mappings":"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"}