human-to-code 0.1.14 → 0.1.16
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 +17 -4
- package/SECURITY.md +16 -1
- package/dist/agents/direct/application.d.ts +3 -0
- package/dist/agents/direct/application.d.ts.map +1 -1
- package/dist/agents/direct/application.js +23 -2
- package/dist/agents/direct/application.js.map +1 -1
- package/dist/agents/direct/candidate-validation.d.ts +8 -0
- package/dist/agents/direct/candidate-validation.d.ts.map +1 -0
- package/dist/agents/direct/candidate-validation.js +125 -0
- package/dist/agents/direct/candidate-validation.js.map +1 -0
- package/dist/agents/direct/declarations.d.ts +3 -0
- package/dist/agents/direct/declarations.d.ts.map +1 -0
- package/dist/agents/direct/declarations.js +36 -0
- package/dist/agents/direct/declarations.js.map +1 -0
- package/dist/agents/direct/discovery.d.ts +4 -2
- package/dist/agents/direct/discovery.d.ts.map +1 -1
- package/dist/agents/direct/discovery.js +48 -5
- 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 +8 -12
- package/dist/agents/direct/file-memory.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/marker-parser.d.ts.map +1 -1
- package/dist/agents/direct/marker-parser.js +18 -3
- package/dist/agents/direct/marker-parser.js.map +1 -1
- package/dist/agents/direct/presentation.d.ts +3 -0
- package/dist/agents/direct/presentation.d.ts.map +1 -1
- package/dist/agents/direct/presentation.js +16 -2
- package/dist/agents/direct/presentation.js.map +1 -1
- package/dist/agents/direct/replacement.d.ts +10 -0
- package/dist/agents/direct/replacement.d.ts.map +1 -0
- package/dist/agents/direct/replacement.js +19 -0
- package/dist/agents/direct/replacement.js.map +1 -0
- package/dist/agents/direct/types.d.ts +13 -0
- package/dist/agents/direct/types.d.ts.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +19 -7
- package/dist/cli.js.map +1 -1
- package/dist/pipeline/file-memory.d.ts.map +1 -1
- package/dist/pipeline/file-memory.js +42 -1
- package/dist/pipeline/file-memory.js.map +1 -1
- package/docs/ARCHITECTURE.md +16 -10
- package/docs/MODULES.md +10 -6
- package/docs/SCALABILITY.md +4 -3
- package/docs/roadmap/README.md +2 -1
- package/docs/roadmap/ruby.md +3 -4
- package/package.json +5 -3
package/Readme.md
CHANGED
|
@@ -54,10 +54,12 @@ npx human-to-code .
|
|
|
54
54
|
By default this runs the **direct converter**, not an instruction to rewrite the whole directory. It:
|
|
55
55
|
|
|
56
56
|
1. Loads config and scans the project for `.human` files and inline `@human` markers, without importing application modules or executing project configuration.
|
|
57
|
-
2.
|
|
58
|
-
3.
|
|
57
|
+
2. Reports marker-shaped requests in unsupported file types and refuses a `.human` request whose sibling output already exists. Intentionally ignored directories and symlinks remain outside discovery.
|
|
58
|
+
3. Prints a receipt (language, provider, model, and the exact worklist) and asks for confirmation. Nothing is written until you confirm — or pass `-y`/`--yes`. If no request is found it returns `NEEDS_INPUT`.
|
|
59
|
+
4. On confirmation, converts each item with one model completion per unit, extracts one unambiguous code block, and validates the complete candidate before writing. JavaScript and TypeScript use the TypeScript parser; other supported languages receive a deterministic structural syntax check.
|
|
60
|
+
5. Applies each accepted item defensively: new sibling files use exclusive creation, inline markers must still match the bytes found during discovery, and multi-line replacements inherit the marker's indentation. A failing or stale item is skipped with a reason rather than aborting the rest.
|
|
59
61
|
|
|
60
|
-
The direct converter writes code straight to the working tree.
|
|
62
|
+
The direct converter writes code straight to the working tree. Its syntax gate catches malformed output; it does **not** prove API correctness, run project builds or tests, execute code in a sandbox, create a `.strict.human.json` change contract, produce a `VERIFIED` run, or perform the guided pipeline's repository-wide secret scan — only the indexed declarations it attaches to an inline prompt as context are secret-scanned (a finding is `SECURITY_BLOCKED`). For the reviewed contract → grounding → sandbox-validation lifecycle — where the `.strict.human.json` contract and the `VERIFIED`/`apply`/`rollback` machinery live — use `human-to-code guided` (see [The reviewed change contract](#the-reviewed-change-contract) and the [CLI](#cli) table).
|
|
61
63
|
|
|
62
64
|
No configured provider is needed to scan and preview. A default run selects loopback-local Ollama with `qwen2.5-coder:7b`, so a fresh `npx human-to-code .` never transmits code remotely by default. The model must already be installed; the tool never pulls it implicitly. To use another local model, OpenAI, or Ollama Cloud, create and edit a config (the command never overwrites one):
|
|
63
65
|
|
|
@@ -105,6 +107,13 @@ The direct `npx human-to-code .` flow discovers work (whole `.human` files and
|
|
|
105
107
|
inline `@human` markers), prints a receipt, and — after you confirm — converts
|
|
106
108
|
them with the deterministic direct engine.
|
|
107
109
|
|
|
110
|
+
Inline discovery currently supports `.ts`, `.tsx`, `.js`, `.jsx`, `.mjs`,
|
|
111
|
+
`.cjs`, `.py`, `.rs`, `.go`, `.java`, `.rb`, `.cs`, `.cpp`, `.cc`, `.c`, `.h`,
|
|
112
|
+
and `.hpp`. A marker-shaped `@human` request in another regular file up to
|
|
113
|
+
1 MiB is reported as unsupported. Ignored/dot directories and symlinks are
|
|
114
|
+
intentionally excluded from the direct walk; oversized unsupported files are
|
|
115
|
+
not opened merely to produce a notice.
|
|
116
|
+
|
|
108
117
|
### Fast deterministic engine
|
|
109
118
|
|
|
110
119
|
The host does the orchestration; the model only writes code. For each unit the
|
|
@@ -119,7 +128,11 @@ tool-calling, models that can only do plain text generation work fine.
|
|
|
119
128
|
the other markers still convert. One failure never aborts the run.
|
|
120
129
|
- **FileMemory** — declarations already in the file are shown to the model as
|
|
121
130
|
read-only context (with few-shot examples) so it reuses rather than
|
|
122
|
-
re-declares them.
|
|
131
|
+
re-declares them. Its static scanner understands JavaScript regex literals,
|
|
132
|
+
and the redeclaration guard covers type-led C, C++, C#, and Java forms.
|
|
133
|
+
- **Candidate and write guards** — ambiguous fenced responses and malformed
|
|
134
|
+
candidates are retried; existing sibling files, stale inline markers, and
|
|
135
|
+
unsafe indentation changes are refused before mutation.
|
|
123
136
|
- **Clear, stable output** — a single truncated status line per marker
|
|
124
137
|
(`✓ app.ts (inline @human, line 12)` / `⊘ skipped … : <reason>`), plus an
|
|
125
138
|
in-place elapsed spinner while a completion is in flight.
|
package/SECURITY.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
`human-to-code` reads attacker-controlled repositories, sends selected evidence to an LLM provider, and may execute project validation commands. The project therefore treats repository content, model output, documentation, provider endpoints, and build/test tooling as untrusted.
|
|
4
4
|
|
|
5
|
-
Version `0.1.
|
|
5
|
+
Version `0.1.15` is a preview. The shipped ecosystem and provider/model combinations are not certified, so guided generated runs do not reach `VERIFIED` through the CLI and guided automatic application/rollback remain unreachable for normal generated runs. The default direct converter is a separate convenience path that writes accepted units to the working tree after confirmation; it never claims `VERIFIED`. Do not weaken either boundary to make a preview run appear successful.
|
|
6
6
|
|
|
7
7
|
## Trust boundaries
|
|
8
8
|
|
|
@@ -24,6 +24,21 @@ The analyzer reads bounded regular files and statically recognizes React, NestJS
|
|
|
24
24
|
|
|
25
25
|
Unreadable roots, non-directories, symlinked roots, scan truncation, conflicting project managers, multiple plausible targets, or unsupported dynamic metadata must return a non-success status. An empty or partial scan must never look like a supported project.
|
|
26
26
|
|
|
27
|
+
### Direct conversion has guarded writes, not sandbox verification
|
|
28
|
+
|
|
29
|
+
The direct converter treats model text as untrusted before writing: it accepts
|
|
30
|
+
at most one unambiguous fenced code block, validates the complete candidate's
|
|
31
|
+
syntax/structure, refuses existing sibling targets using both discovery checks
|
|
32
|
+
and exclusive creation, verifies exact inline marker bytes again at apply time,
|
|
33
|
+
and preserves marker indentation. Invalid or stale units are retried within the
|
|
34
|
+
bounded generation policy and then skipped without mutation.
|
|
35
|
+
|
|
36
|
+
These controls prevent the specific malformed-output, overwrite, stale-range,
|
|
37
|
+
and indentation failures they check. They do not prove external APIs, types,
|
|
38
|
+
project-wide behavior, security properties, or test success, and they do not
|
|
39
|
+
execute the candidate in a sandbox. Use the guided contract and validation path
|
|
40
|
+
when those stronger boundaries are required.
|
|
41
|
+
|
|
27
42
|
### The reviewed contract owns authority
|
|
28
43
|
|
|
29
44
|
The model cannot choose its own target, allowed files, operations, acceptance criteria, validation commands, or elevated risks. A `ChangeContractV1` is bound to the `.human` source hash and static project fingerprint. Material unresolved questions block generation.
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { dirname } from "node:path";
|
|
2
2
|
import type { ConversionUnit } from "./types.ts";
|
|
3
|
+
export declare class DirectApplicationError extends Error {
|
|
4
|
+
constructor(message: string);
|
|
5
|
+
}
|
|
3
6
|
/** Apply one already-generated unit and return the project-relative path changed. */
|
|
4
7
|
export declare function applyUnit(root: string, unit: ConversionUnit, code: string): Promise<string>;
|
|
5
8
|
export declare function pathExists(target: string): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../../../src/agents/direct/application.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAgB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../../../src/agents/direct/application.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAgB,MAAM,WAAW,CAAC;AAElD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAED,qFAAqF;AACrF,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA8BjG;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOjE;AAED,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { readFile, stat, writeFile } from "node:fs/promises";
|
|
2
2
|
import { dirname, resolve, sep } from "node:path";
|
|
3
|
+
import { replaceInlineMarker } from "./replacement.js";
|
|
4
|
+
export class DirectApplicationError extends Error {
|
|
5
|
+
constructor(message) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = "DirectApplicationError";
|
|
8
|
+
}
|
|
9
|
+
}
|
|
3
10
|
/** Apply one already-generated unit and return the project-relative path changed. */
|
|
4
11
|
export async function applyUnit(root, unit, code) {
|
|
5
12
|
const absoluteRoot = resolve(root);
|
|
@@ -8,12 +15,26 @@ export async function applyUnit(root, unit, code) {
|
|
|
8
15
|
if (!target.startsWith(absoluteRoot + sep)) {
|
|
9
16
|
throw new Error(`Refusing to write outside the project root: ${unit.outputPath}`);
|
|
10
17
|
}
|
|
11
|
-
|
|
18
|
+
try {
|
|
19
|
+
await writeFile(target, code.endsWith("\n") ? code : `${code}\n`, { flag: "wx" });
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
if (error.code === "EEXIST") {
|
|
23
|
+
throw new DirectApplicationError(`Refusing to overwrite existing generated target: ${unit.outputPath}`);
|
|
24
|
+
}
|
|
25
|
+
throw error;
|
|
26
|
+
}
|
|
12
27
|
return unit.outputPath;
|
|
13
28
|
}
|
|
14
29
|
const original = await readFile(unit.absoluteSource, "utf8");
|
|
15
30
|
const { start, end } = unit.range;
|
|
16
|
-
|
|
31
|
+
let replaced;
|
|
32
|
+
try {
|
|
33
|
+
replaced = replaceInlineMarker(original, { start, end }, unit.expectedMarker, code);
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
throw new DirectApplicationError(`${unit.sourcePath}: ${error instanceof Error ? error.message : String(error)}`);
|
|
37
|
+
}
|
|
17
38
|
await writeFile(unit.absoluteSource, replaced);
|
|
18
39
|
return unit.sourcePath;
|
|
19
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"application.js","sourceRoot":"","sources":["../../../src/agents/direct/application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"application.js","sourceRoot":"","sources":["../../../src/agents/direct/application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAGvD,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC/C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED,qFAAqF;AACrF,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY,EAAE,IAAoB,EAAE,IAAY;IAC9E,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,UAAW,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,GAAG,GAAG,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,+CAA+C,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACpF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,MAAM,IAAI,sBAAsB,CAAC,oDAAoD,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YAC1G,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,UAAW,CAAC;IAC1B,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAC7D,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,KAAM,CAAC;IACnC,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACtF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,sBAAsB,CAC9B,GAAG,IAAI,CAAC,UAAU,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAChF,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC,UAAU,CAAC;AACzB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAc;IAC7C,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ConversionUnit } from "./types.ts";
|
|
2
|
+
export declare class DirectCandidateValidationError extends Error {
|
|
3
|
+
constructor(message: string);
|
|
4
|
+
}
|
|
5
|
+
export declare function candidateTextForUnit(unit: ConversionUnit, code: string): Promise<string>;
|
|
6
|
+
/** Validate the complete candidate file before any direct-agent write occurs. */
|
|
7
|
+
export declare function validateGeneratedUnit(unit: ConversionUnit, code: string): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=candidate-validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"candidate-validation.d.ts","sourceRoot":"","sources":["../../../src/agents/direct/candidate-validation.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,8BAA+B,SAAQ,KAAK;gBAC3C,OAAO,EAAE,MAAM;CAI5B;AA4FD,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAI9F;AAED,iFAAiF;AACjF,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAS7F"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/** Pre-write direct-candidate syntax checks; this is not semantic or sandbox verification. */
|
|
2
|
+
import { readFile } from "node:fs/promises";
|
|
3
|
+
import { extname } from "node:path";
|
|
4
|
+
import ts from "typescript";
|
|
5
|
+
import { replaceInlineMarker } from "./replacement.js";
|
|
6
|
+
export class DirectCandidateValidationError extends Error {
|
|
7
|
+
constructor(message) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.name = "DirectCandidateValidationError";
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
const TYPESCRIPT_EXTENSIONS = new Set([".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs"]);
|
|
13
|
+
function validateBalancedSyntax(text, sourcePath) {
|
|
14
|
+
const stack = [];
|
|
15
|
+
let quote;
|
|
16
|
+
let triple;
|
|
17
|
+
let blockComment = false;
|
|
18
|
+
let escaped = false;
|
|
19
|
+
const extension = extname(sourcePath).toLowerCase();
|
|
20
|
+
const hashComments = extension === ".py" || extension === ".rb";
|
|
21
|
+
for (let index = 0; index < text.length; index += 1) {
|
|
22
|
+
const char = text[index];
|
|
23
|
+
const next = text[index + 1];
|
|
24
|
+
if (blockComment) {
|
|
25
|
+
if (char === "*" && next === "/") {
|
|
26
|
+
blockComment = false;
|
|
27
|
+
index += 1;
|
|
28
|
+
}
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
if (triple) {
|
|
32
|
+
if (text.startsWith(triple, index)) {
|
|
33
|
+
index += 2;
|
|
34
|
+
triple = undefined;
|
|
35
|
+
}
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
if (quote) {
|
|
39
|
+
if (escaped)
|
|
40
|
+
escaped = false;
|
|
41
|
+
else if (char === "\\")
|
|
42
|
+
escaped = true;
|
|
43
|
+
else if (char === quote)
|
|
44
|
+
quote = undefined;
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
if (char === "/" && next === "*") {
|
|
48
|
+
blockComment = true;
|
|
49
|
+
index += 1;
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (char === "/" && next === "/") {
|
|
53
|
+
index = text.indexOf("\n", index + 2);
|
|
54
|
+
if (index === -1)
|
|
55
|
+
break;
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
if (hashComments && char === "#") {
|
|
59
|
+
index = text.indexOf("\n", index + 1);
|
|
60
|
+
if (index === -1)
|
|
61
|
+
break;
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
if (extension === ".py" && (text.startsWith("'''", index) || text.startsWith('"""', index))) {
|
|
65
|
+
triple = text.startsWith("'''", index) ? "'''" : '"""';
|
|
66
|
+
index += 2;
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
if (char === "'" || char === '"' || char === "`") {
|
|
70
|
+
quote = char;
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
if (char === "(" || char === "[" || char === "{")
|
|
74
|
+
stack.push(char);
|
|
75
|
+
else if (char === ")" || char === "]" || char === "}") {
|
|
76
|
+
const expected = char === ")" ? "(" : char === "]" ? "[" : "{";
|
|
77
|
+
if (stack.pop() !== expected) {
|
|
78
|
+
throw new DirectCandidateValidationError(`${sourcePath}: generated candidate has mismatched delimiters.`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (quote || triple || blockComment || stack.length > 0) {
|
|
83
|
+
throw new DirectCandidateValidationError(`${sourcePath}: generated candidate has an unterminated string, comment, or delimiter.`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function validateTypeScriptSyntax(text, sourcePath) {
|
|
87
|
+
const extension = extname(sourcePath).toLowerCase();
|
|
88
|
+
const jsx = extension === ".tsx" || extension === ".jsx";
|
|
89
|
+
const result = ts.transpileModule(text, {
|
|
90
|
+
fileName: sourcePath,
|
|
91
|
+
reportDiagnostics: true,
|
|
92
|
+
compilerOptions: {
|
|
93
|
+
target: ts.ScriptTarget.ES2023,
|
|
94
|
+
module: ts.ModuleKind.ESNext,
|
|
95
|
+
...(jsx ? { jsx: ts.JsxEmit.Preserve } : {}),
|
|
96
|
+
allowJs: true,
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
const error = result.diagnostics?.find((diagnostic) => diagnostic.category === ts.DiagnosticCategory.Error);
|
|
100
|
+
if (error) {
|
|
101
|
+
const message = ts.flattenDiagnosticMessageText(error.messageText, " ");
|
|
102
|
+
throw new DirectCandidateValidationError(`${sourcePath}: generated candidate failed syntax validation: ${message}`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
export async function candidateTextForUnit(unit, code) {
|
|
106
|
+
if (unit.kind === "file")
|
|
107
|
+
return code.endsWith("\n") ? code : `${code}\n`;
|
|
108
|
+
const source = await readFile(unit.absoluteSource, "utf8");
|
|
109
|
+
return replaceInlineMarker(source, unit.range, unit.expectedMarker, code);
|
|
110
|
+
}
|
|
111
|
+
/** Validate the complete candidate file before any direct-agent write occurs. */
|
|
112
|
+
export async function validateGeneratedUnit(unit, code) {
|
|
113
|
+
if (code.trim().length === 0)
|
|
114
|
+
throw new DirectCandidateValidationError(`${unit.sourcePath}: model returned no code.`);
|
|
115
|
+
if (/```/u.test(code)) {
|
|
116
|
+
throw new DirectCandidateValidationError(`${unit.sourcePath}: model formatting remained in generated source.`);
|
|
117
|
+
}
|
|
118
|
+
const sourcePath = unit.kind === "file" ? unit.outputPath : unit.sourcePath;
|
|
119
|
+
const candidate = await candidateTextForUnit(unit, code);
|
|
120
|
+
if (TYPESCRIPT_EXTENSIONS.has(extname(sourcePath).toLowerCase()))
|
|
121
|
+
validateTypeScriptSyntax(candidate, sourcePath);
|
|
122
|
+
else
|
|
123
|
+
validateBalancedSyntax(candidate, sourcePath);
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=candidate-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"candidate-validation.js","sourceRoot":"","sources":["../../../src/agents/direct/candidate-validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"declarations.d.ts","sourceRoot":"","sources":["../../../src/agents/direct/declarations.ts"],"names":[],"mappings":"AAMA,2FAA2F;AAC3F,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CA2BjF"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/** Language-aware declaration names used by the direct FileMemory conflict guard. */
|
|
2
|
+
import { extname } from "node:path";
|
|
3
|
+
const TYPED_C_EXTENSIONS = new Set([".c", ".cc", ".cpp", ".h", ".hpp", ".cs", ".java"]);
|
|
4
|
+
const CONTROL_WORDS = new Set(["if", "for", "foreach", "while", "switch", "catch", "return", "throw", "new"]);
|
|
5
|
+
/** Extract declared names for FileMemory conflict detection across supported languages. */
|
|
6
|
+
export function declaredIdentifiers(sourcePath, code) {
|
|
7
|
+
const identifiers = new Set();
|
|
8
|
+
const keywordDeclaration = /^[ \t]*(?:(?:export|default|declare|public|private|protected|async|pub)\s+)*(?:const|let|var|function|class|interface|enum|struct|trait|fn|def|static|type)\s+([A-Za-z_$][A-Za-z0-9_$]*)/gmu;
|
|
9
|
+
for (const match of code.matchAll(keywordDeclaration)) {
|
|
10
|
+
if (match[1])
|
|
11
|
+
identifiers.add(match[1]);
|
|
12
|
+
}
|
|
13
|
+
if (!TYPED_C_EXTENSIONS.has(extname(sourcePath).toLowerCase()))
|
|
14
|
+
return identifiers;
|
|
15
|
+
for (const rawLine of code.split(/\r?\n/u)) {
|
|
16
|
+
const line = rawLine
|
|
17
|
+
.trim()
|
|
18
|
+
.replace(/^(?:\[[^\]]+\]\s*)+/u, "")
|
|
19
|
+
.replace(/^(?:(?:public|private|protected|internal|static|final|abstract|virtual|override|sealed|extern|async|inline|constexpr|consteval|constinit|volatile|mutable|friend|typedef|partial|unsafe|readonly)\s+)*/u, "");
|
|
20
|
+
const namedType = /^(?:class|interface|enum|record|struct|union|namespace)\s+([A-Za-z_$][A-Za-z0-9_$]*)/u.exec(line);
|
|
21
|
+
if (namedType?.[1]) {
|
|
22
|
+
identifiers.add(namedType[1]);
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
const functionName = /^[A-Za-z_][A-Za-z0-9_:<>,.?*\[\]&\s]+\s+([A-Za-z_$][A-Za-z0-9_$]*)\s*\(/u.exec(line)?.[1];
|
|
26
|
+
if (functionName && !CONTROL_WORDS.has(functionName)) {
|
|
27
|
+
identifiers.add(functionName);
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
const variableName = /^[A-Za-z_][A-Za-z0-9_:<>,.?*\[\]&\s]+\s+([A-Za-z_$][A-Za-z0-9_$]*)\s*(?:=|;|\{)/u.exec(line)?.[1];
|
|
31
|
+
if (variableName && !CONTROL_WORDS.has(variableName))
|
|
32
|
+
identifiers.add(variableName);
|
|
33
|
+
}
|
|
34
|
+
return identifiers;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=declarations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"declarations.js","sourceRoot":"","sources":["../../../src/agents/direct/declarations.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AACxF,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAE9G,2FAA2F;AAC3F,MAAM,UAAU,mBAAmB,CAAC,UAAkB,EAAE,IAAY;IAClE,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,MAAM,kBAAkB,GAAG,6LAA6L,CAAC;IACzN,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACtD,IAAI,KAAK,CAAC,CAAC,CAAC;YAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QAAE,OAAO,WAAW,CAAC;IACnF,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,OAAO;aACjB,IAAI,EAAE;aACN,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC;aACnC,OAAO,CAAC,yMAAyM,EAAE,EAAE,CAAC,CAAC;QAC1N,MAAM,SAAS,GAAG,uFAAuF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrH,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnB,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,SAAS;QACX,CAAC;QACD,MAAM,YAAY,GAAG,0EAA0E,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAChH,IAAI,YAAY,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YACrD,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC9B,SAAS;QACX,CAAC;QACD,MAAM,YAAY,GAAG,kFAAkF,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACxH,IAAI,YAAY,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC;YAAE,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import type { ConversionUnit } from "./types.ts";
|
|
2
|
-
/** Discover
|
|
1
|
+
import type { ConversionUnit, DirectDiscoveryResult } from "./types.ts";
|
|
2
|
+
/** Discover units plus actionable notices for marker text that cannot run safely. */
|
|
3
|
+
export declare function discoverDirectUnits(root: string, language: string): Promise<DirectDiscoveryResult>;
|
|
4
|
+
/** Compatibility helper returning only runnable units. */
|
|
3
5
|
export declare function discoverUnits(root: string, language: string): Promise<ConversionUnit[]>;
|
|
4
6
|
//# sourceMappingURL=discovery.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../src/agents/direct/discovery.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../src/agents/direct/discovery.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAmCxE,qFAAqF;AACrF,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAwFxG;AAED,0DAA0D;AAC1D,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAE7F"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { readdir, readFile } from "node:fs/promises";
|
|
1
|
+
import { readdir, readFile, stat } from "node:fs/promises";
|
|
2
2
|
import { basename, extname, join, relative, resolve, sep } from "node:path";
|
|
3
3
|
import { languageProfile } from "./languages.js";
|
|
4
4
|
import { extractInlineMarkers } from "./marker-parser.js";
|
|
@@ -39,12 +39,13 @@ async function walk(root, ignores) {
|
|
|
39
39
|
await visit(root, 0);
|
|
40
40
|
return results.sort();
|
|
41
41
|
}
|
|
42
|
-
/** Discover
|
|
43
|
-
export async function
|
|
42
|
+
/** Discover units plus actionable notices for marker text that cannot run safely. */
|
|
43
|
+
export async function discoverDirectUnits(root, language) {
|
|
44
44
|
const absoluteRoot = resolve(root);
|
|
45
45
|
const profile = languageProfile(language);
|
|
46
46
|
const files = await walk(absoluteRoot, DEFAULT_IGNORES);
|
|
47
47
|
const units = [];
|
|
48
|
+
const notices = [];
|
|
48
49
|
for (const absolute of files) {
|
|
49
50
|
const rel = relative(absoluteRoot, absolute).split(sep).join("/");
|
|
50
51
|
const name = basename(absolute);
|
|
@@ -62,6 +63,19 @@ export async function discoverUnits(root, language) {
|
|
|
62
63
|
if (prompt.length === 0)
|
|
63
64
|
continue;
|
|
64
65
|
const outputPath = `${rel.slice(0, -".human".length)}.${profile.ext}`;
|
|
66
|
+
try {
|
|
67
|
+
await stat(join(absoluteRoot, ...outputPath.split("/")));
|
|
68
|
+
notices.push({
|
|
69
|
+
code: "TARGET_EXISTS",
|
|
70
|
+
sourcePath: rel,
|
|
71
|
+
message: `${rel} was skipped because ${outputPath} already exists; existing files are never overwritten.`,
|
|
72
|
+
});
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
if (error.code !== "ENOENT")
|
|
77
|
+
throw error;
|
|
78
|
+
}
|
|
65
79
|
units.push({
|
|
66
80
|
kind: "file",
|
|
67
81
|
sourcePath: rel,
|
|
@@ -72,8 +86,32 @@ export async function discoverUnits(root, language) {
|
|
|
72
86
|
});
|
|
73
87
|
continue;
|
|
74
88
|
}
|
|
75
|
-
if (!SCANNED_EXTENSIONS.has(extname(absolute).toLowerCase()))
|
|
89
|
+
if (!SCANNED_EXTENSIONS.has(extname(absolute).toLowerCase())) {
|
|
90
|
+
let info;
|
|
91
|
+
try {
|
|
92
|
+
info = await stat(absolute);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
if (info.size > 1024 * 1024)
|
|
98
|
+
continue;
|
|
99
|
+
let unsupportedContent;
|
|
100
|
+
try {
|
|
101
|
+
unsupportedContent = await readFile(absolute, "utf8");
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
if (unsupportedContent.includes("@human")) {
|
|
107
|
+
notices.push({
|
|
108
|
+
code: "UNSUPPORTED_MARKER_FILE",
|
|
109
|
+
sourcePath: rel,
|
|
110
|
+
message: `${rel} contains @human text but ${extname(absolute) || "extensionless files"} is not supported for inline conversion.`,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
76
113
|
continue;
|
|
114
|
+
}
|
|
77
115
|
let content;
|
|
78
116
|
try {
|
|
79
117
|
content = await readFile(absolute, "utf8");
|
|
@@ -91,11 +129,16 @@ export async function discoverUnits(root, language) {
|
|
|
91
129
|
absoluteSource: absolute,
|
|
92
130
|
prompt: marker.prompt,
|
|
93
131
|
range: { start: marker.start, end: marker.end },
|
|
132
|
+
expectedMarker: content.slice(marker.start, marker.end),
|
|
94
133
|
line,
|
|
95
134
|
describe: `${rel} (inline @human, line ${line}) -> ${rel}`,
|
|
96
135
|
});
|
|
97
136
|
}
|
|
98
137
|
}
|
|
99
|
-
return units;
|
|
138
|
+
return { units, notices };
|
|
139
|
+
}
|
|
140
|
+
/** Compatibility helper returning only runnable units. */
|
|
141
|
+
export async function discoverUnits(root, language) {
|
|
142
|
+
return (await discoverDirectUnits(root, language)).units;
|
|
100
143
|
}
|
|
101
144
|
//# sourceMappingURL=discovery.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../src/agents/direct/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../src/agents/direct/discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-memory.d.ts","sourceRoot":"","sources":["../../../src/agents/direct/file-memory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"file-memory.d.ts","sourceRoot":"","sources":["../../../src/agents/direct/file-memory.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAEpB,qBAAa,uBAAwB,SAAQ,KAAK;gBACpC,OAAO,EAAE,MAAM;CAI5B;AAeD,yEAAyE;AACzE,qBAAa,UAAU;;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAMhB,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAMlD,IAAI,OAAO,IAAI,SAAS,eAAe,EAAE,CAWxC;IAED,mBAAmB,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAqB9E,MAAM,IAAI,MAAM;IAchB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAkC3C;AAED,wDAAwD;AACxD,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,SAAS,cAAc,EAAE,EAChC,SAAS,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,qBAAqB,KAAK,OAAO,CAAC,MAAM,CAAC,EACpF,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAqDpC"}
|
|
@@ -1,20 +1,14 @@
|
|
|
1
1
|
import { readFile } from "node:fs/promises";
|
|
2
2
|
import { ContextSecurityError, scanSecrets } from "../../context/context.js";
|
|
3
3
|
import { extractStaticFileMemory } from "../../pipeline/file-memory.js";
|
|
4
|
+
import { declaredIdentifiers } from "./declarations.js";
|
|
5
|
+
import { formatInlineReplacement } from "./replacement.js";
|
|
4
6
|
export class FileMemoryConflictError extends Error {
|
|
5
7
|
constructor(message) {
|
|
6
8
|
super(message);
|
|
7
9
|
this.name = "FileMemoryConflictError";
|
|
8
10
|
}
|
|
9
11
|
}
|
|
10
|
-
function declaredIdentifiers(code) {
|
|
11
|
-
const identifiers = new Set();
|
|
12
|
-
const declaration = /^[ \t]*(?:(?:export|default|declare|public|private|protected|async|pub)\s+)*(?:const|let|var|function|class|interface|enum|struct|trait|fn|def|static|type)\s+([A-Za-z_$][A-Za-z0-9_$]*)/gmu;
|
|
13
|
-
let match;
|
|
14
|
-
while ((match = declaration.exec(code)) !== null)
|
|
15
|
-
identifiers.add(match[1]);
|
|
16
|
-
return identifiers;
|
|
17
|
-
}
|
|
18
12
|
function stripMemorySeparator(value) {
|
|
19
13
|
let offset = 0;
|
|
20
14
|
for (;;) {
|
|
@@ -70,8 +64,9 @@ export class FileMemory {
|
|
|
70
64
|
}
|
|
71
65
|
const startLine = 1 + (this.#virtualText.slice(0, start).match(/\n/g)?.length ?? 0);
|
|
72
66
|
const endLine = startLine + (replacement.match(/\n/g)?.length ?? 0);
|
|
73
|
-
|
|
74
|
-
this.#
|
|
67
|
+
const formatted = formatInlineReplacement(this.#virtualText, { start, end }, replacement);
|
|
68
|
+
this.#virtualText = `${this.#virtualText.slice(0, start)}${formatted}${this.#virtualText.slice(end)}`;
|
|
69
|
+
this.#characterDelta += formatted.length - (range.end - range.start);
|
|
75
70
|
this.#generatedEntries.push({ startLine, endLine, code: replacement, fragment: false });
|
|
76
71
|
this.#staticEntries = extractStaticFileMemory(this.sourcePath, this.#virtualText);
|
|
77
72
|
}
|
|
@@ -108,8 +103,8 @@ export class FileMemory {
|
|
|
108
103
|
if (removedPrefix && normalized.length === 0) {
|
|
109
104
|
throw new FileMemoryConflictError(`The provider only repeated existing FileMemory for ${this.sourcePath}; the current marker was not implemented.`);
|
|
110
105
|
}
|
|
111
|
-
const remembered = new Set(this.#generatedEntries.flatMap((entry) => [...declaredIdentifiers(entry.code)]));
|
|
112
|
-
const conflicts = [...declaredIdentifiers(normalized)].filter((identifier) => remembered.has(identifier));
|
|
106
|
+
const remembered = new Set(this.#generatedEntries.flatMap((entry) => [...declaredIdentifiers(this.sourcePath, entry.code)]));
|
|
107
|
+
const conflicts = [...declaredIdentifiers(this.sourcePath, normalized)].filter((identifier) => remembered.has(identifier));
|
|
113
108
|
if (conflicts.length > 0) {
|
|
114
109
|
throw new FileMemoryConflictError(`The provider redeclared FileMemory identifier${conflicts.length === 1 ? "" : "s"} ${conflicts.join(", ")} in ${this.sourcePath}.`);
|
|
115
110
|
}
|
|
@@ -149,6 +144,7 @@ export async function generateConversionUnits(units, generator, options = {}) {
|
|
|
149
144
|
...(renderedMemory ? { fileMemory: renderedMemory } : {}),
|
|
150
145
|
});
|
|
151
146
|
code = memory && renderedMemory ? memory.normalizeReplacement(rawCode) : rawCode;
|
|
147
|
+
await options.validate?.(unit, code);
|
|
152
148
|
failure = undefined;
|
|
153
149
|
break;
|
|
154
150
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-memory.js","sourceRoot":"","sources":["../../../src/agents/direct/file-memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"file-memory.js","sourceRoot":"","sources":["../../../src/agents/direct/file-memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,4 +7,7 @@ export * from "./discovery.ts";
|
|
|
7
7
|
export * from "./presentation.ts";
|
|
8
8
|
export * from "./generation-client.ts";
|
|
9
9
|
export * from "./application.ts";
|
|
10
|
+
export * from "./replacement.ts";
|
|
11
|
+
export * from "./declarations.ts";
|
|
12
|
+
export * from "./candidate-validation.ts";
|
|
10
13
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agents/direct/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agents/direct/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC"}
|
|
@@ -7,4 +7,7 @@ export * from "./discovery.js";
|
|
|
7
7
|
export * from "./presentation.js";
|
|
8
8
|
export * from "./generation-client.js";
|
|
9
9
|
export * from "./application.js";
|
|
10
|
+
export * from "./replacement.js";
|
|
11
|
+
export * from "./declarations.js";
|
|
12
|
+
export * from "./candidate-validation.js";
|
|
10
13
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agents/direct/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agents/direct/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC"}
|