human-to-code 0.1.19 → 0.1.21

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 (53) hide show
  1. package/Readme.md +39 -8
  2. package/SECURITY.md +9 -8
  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 +70 -12
  11. package/dist/agents/direct/discovery.js.map +1 -1
  12. package/dist/agents/direct/language-inference.d.ts +17 -0
  13. package/dist/agents/direct/language-inference.d.ts.map +1 -0
  14. package/dist/agents/direct/language-inference.js +95 -0
  15. package/dist/agents/direct/language-inference.js.map +1 -0
  16. package/dist/agents/direct/languages.d.ts +1 -0
  17. package/dist/agents/direct/languages.d.ts.map +1 -1
  18. package/dist/agents/direct/languages.js +2 -8
  19. package/dist/agents/direct/languages.js.map +1 -1
  20. package/dist/agents/direct/marker-parser.d.ts +1 -1
  21. package/dist/agents/direct/marker-parser.d.ts.map +1 -1
  22. package/dist/agents/direct/marker-parser.js +125 -27
  23. package/dist/agents/direct/marker-parser.js.map +1 -1
  24. package/dist/agents/direct/presentation.d.ts +1 -1
  25. package/dist/agents/direct/presentation.d.ts.map +1 -1
  26. package/dist/agents/direct/presentation.js +21 -5
  27. package/dist/agents/direct/presentation.js.map +1 -1
  28. package/dist/agents/direct/program-diagnostics.d.ts.map +1 -1
  29. package/dist/agents/direct/program-diagnostics.js +5 -2
  30. package/dist/agents/direct/program-diagnostics.js.map +1 -1
  31. package/dist/agents/direct/types.d.ts +1 -1
  32. package/dist/agents/direct/types.d.ts.map +1 -1
  33. package/dist/cli.d.ts.map +1 -1
  34. package/dist/cli.js +7 -2
  35. package/dist/cli.js.map +1 -1
  36. package/dist/config/config.d.ts.map +1 -1
  37. package/dist/config/config.js +51 -0
  38. package/dist/config/config.js.map +1 -1
  39. package/dist/core/languages.d.ts +5 -0
  40. package/dist/core/languages.d.ts.map +1 -0
  41. package/dist/core/languages.js +30 -0
  42. package/dist/core/languages.js.map +1 -0
  43. package/dist/core/types.d.ts +8 -0
  44. package/dist/core/types.d.ts.map +1 -1
  45. package/dist/index.d.ts +1 -1
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js.map +1 -1
  48. package/dist/pipeline/file-memory.d.ts.map +1 -1
  49. package/dist/pipeline/file-memory.js +2 -0
  50. package/dist/pipeline/file-memory.js.map +1 -1
  51. package/docs/MODULES.md +6 -5
  52. package/docs/roadmap/html-css.md +6 -3
  53. package/package.json +1 -1
package/Readme.md CHANGED
@@ -55,9 +55,9 @@ By default this runs the **direct converter**, not an instruction to rewrite the
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
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. Inline validation compares the candidate with the original file and rejects only syntax errors introduced by that replacement, without blaming it for unchanged baseline errors.
60
- 5. For JavaScript/TypeScript output, additionally stages every accepted unit into an in-memory candidate overlay and type-checks the combined candidate project with the TypeScript Compiler API — imports/exports, methods and properties, argument counts, literal unions, object shapes, readonly rules, and call compatibility across the generated files together. Diagnostics are compared against the unchanged baseline, so pre-existing project errors are never blamed on generated units. A dependency-connected group that introduces new cross-file errors receives at most one bounded repair request per whole-file unit (same provider and model); if it still fails it is skipped **whole** never partially written while units proven independent still apply. Other direct languages keep their per-file validation level.
58
+ 3. Prints a receipt (the output languages actually selected for this worklist, provider, model, and exact source-to-output paths) 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; supported programming languages receive a deterministic structural syntax check. HTML and CSS receive the non-empty and code-fence gates because generic delimiter balancing misreads valid markup and stylesheet text. Inline validation compares the candidate with the original file and rejects only syntax errors introduced by that replacement, without blaming it for unchanged baseline errors.
60
+ 5. For JavaScript/TypeScript output, additionally stages every accepted unit into an in-memory candidate overlay and type-checks the combined candidate project with the TypeScript Compiler API — imports/exports, methods and properties, argument counts, literal unions, object shapes, readonly rules, and call compatibility across the generated files together. Diagnostics are compared against the unchanged baseline, so pre-existing project errors are never blamed on generated units. A dependency-connected group that introduces new cross-file errors receives at most one bounded repair request per whole-file unit (same provider and model); if it still fails, every generated unit in that group is rejected before application while units proven independent may still apply. Other direct languages keep their per-file validation level.
61
61
  6. 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.
62
62
 
63
63
  The direct converter writes code straight to the working tree. Its combined static compiler validation for JS/TS is stronger than syntax parsing, but it is still static analysis: it does **not** execute or import project code, run project builds or tests, prove runtime behavior or external-API grounding, 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).
@@ -108,13 +108,23 @@ The direct `npx human-to-code .` flow discovers work (whole `.human` files and
108
108
  inline `@human` markers), prints a receipt, and — after you confirm — converts
109
109
  them with the deterministic direct engine.
110
110
 
111
- Inline discovery currently supports `.ts`, `.tsx`, `.js`, `.jsx`, `.mjs`,
112
- `.cjs`, `.py`, `.rs`, `.go`, `.java`, `.rb`, `.cs`, `.cpp`, `.cc`, `.c`, `.h`,
113
- and `.hpp`. A marker-shaped `@human` request in another regular file up to
111
+ Inline discovery currently supports `.ts`, `.tsx`, `.mts`, `.cts`, `.js`,
112
+ `.jsx`, `.mjs`, `.cjs`, `.html`, `.htm`, `.css`, `.py`, `.rs`, `.go`, `.java`,
113
+ `.rb`, `.cs`, `.cpp`, `.cc`, `.c`, `.h`, and `.hpp`. A marker-shaped `@human` request in another regular file up to
114
114
  1 MiB is reported as unsupported. Ignored/dot directories and symlinks are
115
115
  intentionally excluded from the direct walk; oversized unsupported files are
116
116
  not opened merely to produce a notice.
117
117
 
118
+ The lexical marker scanner supports real `// @human` and `# @human` line
119
+ comments, single-line or multiline `/* @human ... */` block comments,
120
+ decorated JSDoc/block comments, and single-line or multiline HTML
121
+ `<!-- @human ... -->` comments. In HTML, the same JavaScript and CSS comment
122
+ forms also work inside `<script>` and `<style>`. Marker-shaped examples inside
123
+ quoted attributes, strings, template literals, ordinary documentation
124
+ comments, or another comment remain inert. Replacement removes exactly the
125
+ recognized comment range and preserves surrounding text, newline style, and
126
+ indentation.
127
+
118
128
  ### Fast deterministic engine
119
129
 
120
130
  The host does the orchestration; the model only writes code. For each unit the
@@ -216,7 +226,12 @@ This complete local-Ollama example shows the policy fields:
216
226
  ```json
217
227
  {
218
228
  "schemaVersion": 1,
219
- "languages": ["typescript", "html", "css"],
229
+ "languages": ["typescript", "html", "css", "javascript"],
230
+ "humanFileExtensions": [
231
+ { "path": "index.human", "extension": "html" },
232
+ { "path": "script.human", "extension": "js" },
233
+ { "path": "styles.human", "extension": "css" }
234
+ ],
220
235
  "filesToIgnore": ["node_modules", ".git", "dist"],
221
236
  "allowNonHumanFiles": false,
222
237
  "provider": {
@@ -253,7 +268,23 @@ This complete local-Ollama example shows the policy fields:
253
268
  }
254
269
  ```
255
270
 
256
- `languages` lists every output language enabled for direct conversion (`typescript`, `javascript`, `python`, `rust`, `html`, `css`); its first entry is the default. A `.human` file selects a non-default entry through its inner extension: with the example above, `index.html.human` writes `index.html` and `styles.css.human` writes `styles.css`, while `app.human` falls back to the first entry and writes `app.ts`. An inner extension whose language is not configured is treated as part of the file name. The singular `language` is retained for alpha compatibility and, when set alongside `languages`, must be one of its entries; static workspace analysis is authoritative in mixed-language repositories. `filesToIgnore` accepts exact file/directory names, not glob expressions. With `sandbox.engine: "auto"`, validation probes Docker first and then Podman; `"docker"` and `"podman"` select one explicitly. Neither runtime being available makes validation `INCONCLUSIVE` and runs no project command.
271
+ `languages` lists every output language enabled for direct conversion (`typescript`, `javascript`, `python`, `rust`, `html`, `css`); its first entry is the default. The receipt lists only the languages selected by the discovered units, not every configured possibility.
272
+
273
+ `humanFileExtensions` provides the strongest routing signal. Each entry binds one exact, portable project-relative `.human` path to an output extension; a leading dot is optional, and the extension's language must appear in `languages`. This prevents prompt vocabulary from changing the output: the example always routes `script.human` to `script.js`, even if its instruction repeatedly mentions stylesheets, CSS classes, colors, or themes. Recognized inner extensions are replaced when an explicit mapping is present, so mapping `page.html.human` to `js` produces `page.js`.
274
+
275
+ A `.human` file may instead declare its extension on its first nonblank line. The declaration is removed before the remaining instruction is sent to the model:
276
+
277
+ ```text
278
+ html
279
+ add head section here
280
+ add styles
281
+ close head
282
+ add body
283
+ ```
284
+
285
+ That `index.human` content writes `index.html`. Tokens such as `js`, `.js`, `mjs`, `ts`, `tsx`, `py`, `rs`, `html`, and `css` are accepted when their language is enabled. A config mapping wins over the first-line declaration, but conflicting languages are reported and skipped instead of guessed.
286
+
287
+ Without either explicit route, a configured inner extension is authoritative: `index.html.human` writes `index.html` and `styles.css.human` writes `styles.css`. For a bare name, discovery checks an explicit language named in the request, then an unambiguous filename convention, then request vocabulary, and finally falls back to the first configured language. This decision is made before confirmation without another model call. The singular `language` is retained for alpha compatibility; when supplied with `languages`, it must be a member and is normalized to the first/default entry. `filesToIgnore` accepts exact file/directory names, not glob expressions. With `sandbox.engine: "auto"`, validation probes Docker first and then Podman; `"docker"` and `"podman"` select one explicitly. Neither runtime being available makes validation `INCONCLUSIVE` and runs no project command.
257
288
 
258
289
  ### Budget semantics
259
290
 
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.17` 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.
5
+ Version `0.1.20` 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
 
@@ -40,20 +40,21 @@ unchanged, and the TypeScript Compiler API type-checks the combined candidate
40
40
  project against the unchanged baseline. Newly introduced cross-file
41
41
  diagnostics (wrong imports/exports, missing members, argument counts, literal
42
42
  unions, object shapes, readonly violations, incompatible calls) reject the
43
- whole dependency-connected group; if safe isolation cannot be proven, the
44
- entire staged batch fails without partial application. A failing whole-file
45
- unit may receive one bounded repair request using the same provider and model;
43
+ whole dependency-connected group during validation; if safe isolation cannot
44
+ be proven, the entire staged batch is rejected before application. A failing
45
+ whole-file unit may receive one bounded repair request using the same provider and model;
46
46
  repair context contains only generated candidate content and normalized
47
- compiler diagnostics, both treated as untrusted data, and is secret-scanned
48
- before it may leave the host. No project code is imported or executed and no
49
- project scripts run during this validation.
47
+ compiler diagnostics, both treated as untrusted data. Generated candidate
48
+ content is secret-scanned before it may leave the host. No project code is
49
+ imported or executed and no project scripts run during this validation.
50
50
 
51
51
  These controls prevent the specific malformed-output, overwrite, stale-range,
52
52
  indentation, and cross-file-contract failures they check. Static compilation
53
53
  is stronger than syntax parsing, but it does not prove runtime behavior,
54
54
  external-API grounding, project-wide security properties, or test success,
55
55
  and it never executes the candidate in a sandbox or claims `VERIFIED`. Other
56
- direct languages keep their per-file structural validation level. Use the
56
+ direct programming languages keep their per-file structural validation level;
57
+ HTML and CSS use only the non-empty and code-fence gates. Use the
57
58
  guided contract and validation path when those stronger boundaries are
58
59
  required.
59
60
 
@@ -1 +1 @@
1
- {"version":3,"file":"candidate-overlay.d.ts","sourceRoot":"","sources":["../../../src/agents/direct/candidate-overlay.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE1E,6EAA6E;AAC7E,eAAO,MAAM,6BAA6B,aAA0D,CAAC;AAErG,MAAM,WAAW,oBAAoB;IACnC,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,YAAY,EAAE,MAAM,CAAC;IACrB,gFAAgF;IAChF,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,OAAO,EAAE,OAAO,CAAC;IACjB,+DAA+D;IAC/D,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IACzC,2EAA2E;IAC3E,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,cAAc,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3D;AAED,gFAAgF;AAChF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGnD;AAMD,2EAA2E;AAC3E,wBAAgB,mCAAmC,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAI1F;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,SAAS,uBAAuB,EAAE,GAC5C,OAAO,CAAC,gBAAgB,CAAC,CAwF3B"}
1
+ {"version":3,"file":"candidate-overlay.d.ts","sourceRoot":"","sources":["../../../src/agents/direct/candidate-overlay.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE1E,6EAA6E;AAC7E,eAAO,MAAM,6BAA6B,aAA0E,CAAC;AAErH,MAAM,WAAW,oBAAoB;IACnC,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,YAAY,EAAE,MAAM,CAAC;IACrB,gFAAgF;IAChF,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,OAAO,EAAE,OAAO,CAAC;IACjB,+DAA+D;IAC/D,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IACzC,2EAA2E;IAC3E,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,cAAc,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3D;AAED,gFAAgF;AAChF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGnD;AAMD,2EAA2E;AAC3E,wBAAgB,mCAAmC,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAI1F;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,SAAS,uBAAuB,EAAE,GAC5C,OAAO,CAAC,gBAAgB,CAAC,CAwF3B"}
@@ -9,7 +9,7 @@ import { extname, resolve, sep } from "node:path";
9
9
  import ts from "typescript";
10
10
  import { replaceInlineMarker } from "./replacement.js";
11
11
  /** Extensions that participate in combined TypeScript program validation. */
12
- export const PROJECT_VALIDATION_EXTENSIONS = new Set([".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs"]);
12
+ export const PROJECT_VALIDATION_EXTENSIONS = new Set([".ts", ".tsx", ".mts", ".cts", ".js", ".jsx", ".mjs", ".cjs"]);
13
13
  /** Canonical map key for absolute paths, honoring platform case sensitivity. */
14
14
  export function overlayPathKey(path) {
15
15
  const normalized = resolve(path).split(sep).join("/");
@@ -1 +1 @@
1
- {"version":3,"file":"candidate-overlay.js","sourceRoot":"","sources":["../../../src/agents/direct/candidate-overlay.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"candidate-overlay.js","sourceRoot":"","sources":["../../../src/agents/direct/candidate-overlay.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ export class DirectCandidateValidationError extends Error {
9
9
  this.name = "DirectCandidateValidationError";
10
10
  }
11
11
  }
12
- const TYPESCRIPT_EXTENSIONS = new Set([".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs"]);
12
+ const TYPESCRIPT_EXTENSIONS = new Set([".ts", ".tsx", ".mts", ".cts", ".js", ".jsx", ".mjs", ".cjs"]);
13
13
  // Delimiter balancing misreads prose-bearing markup: apostrophes in HTML text
14
14
  // and unquoted `url(https://…)` in CSS are legal but read as unterminated
15
15
  // strings/comments. These outputs keep only the fence and non-empty gates.
@@ -1 +1 @@
1
- {"version":3,"file":"candidate-validation.js","sourceRoot":"","sources":["../../../src/agents/direct/candidate-validation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"candidate-validation.js","sourceRoot":"","sources":["../../../src/agents/direct/candidate-validation.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
+ import type { HumanFileExtensionConfig } from "../../core/types.ts";
1
2
  import type { ConversionUnit, DirectDiscoveryResult } from "./types.ts";
2
3
  /** Bounded direct-path file walk, shared with combined project validation. */
3
4
  export declare function walkDirectFiles(root: string): Promise<string[]>;
4
5
  /** Discover units plus actionable notices for marker text that cannot run safely. */
5
- export declare function discoverDirectUnits(root: string, language: string | readonly string[]): Promise<DirectDiscoveryResult>;
6
+ export declare function discoverDirectUnits(root: string, language: string | readonly string[], humanFileExtensions?: readonly HumanFileExtensionConfig[]): Promise<DirectDiscoveryResult>;
6
7
  /** Compatibility helper returning only runnable units. */
7
- export declare function discoverUnits(root: string, language: string | readonly string[]): Promise<ConversionUnit[]>;
8
+ export declare function discoverUnits(root: string, language: string | readonly string[], humanFileExtensions?: readonly HumanFileExtensionConfig[]): Promise<ConversionUnit[]>;
8
9
  //# 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,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAmCxE,8EAA8E;AAC9E,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAErE;AAED,qFAAqF;AACrF,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GACnC,OAAO,CAAC,qBAAqB,CAAC,CAoGhC;AAED,0DAA0D;AAC1D,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GACnC,OAAO,CAAC,cAAc,EAAE,CAAC,CAE3B"}
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../src/agents/direct/discovery.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAoCxE,8EAA8E;AAC9E,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAErE;AAED,qFAAqF;AACrF,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,EACpC,mBAAmB,GAAE,SAAS,wBAAwB,EAAO,GAC5D,OAAO,CAAC,qBAAqB,CAAC,CAgKhC;AAED,0DAA0D;AAC1D,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,EACpC,mBAAmB,GAAE,SAAS,wBAAwB,EAAO,GAC5D,OAAO,CAAC,cAAc,EAAE,CAAC,CAE3B"}
@@ -1,9 +1,11 @@
1
1
  import { readdir, readFile, stat } from "node:fs/promises";
2
2
  import { basename, extname, join, relative, resolve, sep } from "node:path";
3
+ import { inferUnitLanguage } from "./language-inference.js";
3
4
  import { languageForExtension, languageProfile } from "./languages.js";
4
5
  import { extractInlineMarkers } from "./marker-parser.js";
5
6
  const SCANNED_EXTENSIONS = new Set([
6
- ".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs",
7
+ ".ts", ".tsx", ".mts", ".cts", ".js", ".jsx", ".mjs", ".cjs",
8
+ ".html", ".htm", ".css",
7
9
  ".py", ".rs", ".go", ".java", ".rb", ".cs", ".cpp", ".cc", ".c", ".h", ".hpp",
8
10
  ]);
9
11
  const DEFAULT_IGNORES = new Set([
@@ -44,13 +46,24 @@ export async function walkDirectFiles(root) {
44
46
  return walk(resolve(root), DEFAULT_IGNORES);
45
47
  }
46
48
  /** Discover units plus actionable notices for marker text that cannot run safely. */
47
- export async function discoverDirectUnits(root, language) {
49
+ export async function discoverDirectUnits(root, language, humanFileExtensions = []) {
48
50
  const absoluteRoot = resolve(root);
49
51
  const languages = (typeof language === "string" ? [language] : [...language])
50
52
  .map((entry) => entry.trim().toLowerCase());
51
53
  const primary = languages[0] ?? "typescript";
52
54
  const configured = new Set(languages);
53
- const primaryProfile = languageProfile(primary);
55
+ const configuredExtensionByPath = new Map();
56
+ for (const mapping of humanFileExtensions) {
57
+ if (configuredExtensionByPath.has(mapping.path)) {
58
+ throw new Error(`Duplicate configured .human path: ${mapping.path}`);
59
+ }
60
+ const extension = mapping.extension.replace(/^\./u, "").toLowerCase();
61
+ const mappedLanguage = languageForExtension(extension);
62
+ if (mappedLanguage === undefined || !configured.has(mappedLanguage)) {
63
+ throw new Error(`Configured extension .${extension} for ${mapping.path} does not select an enabled language.`);
64
+ }
65
+ configuredExtensionByPath.set(mapping.path, extension);
66
+ }
54
67
  const files = await walk(absoluteRoot, DEFAULT_IGNORES);
55
68
  const units = [];
56
69
  const notices = [];
@@ -67,16 +80,61 @@ export async function discoverDirectUnits(root, language) {
67
80
  catch {
68
81
  continue;
69
82
  }
70
- const prompt = content.trim();
83
+ const rawPrompt = content.trim();
84
+ if (rawPrompt.length === 0)
85
+ continue;
86
+ const lines = rawPrompt.split(/\r?\n/u);
87
+ const declaredExtension = lines[0]?.trim().replace(/^\./u, "").toLowerCase() ?? "";
88
+ const declaredLanguage = languageForExtension(declaredExtension);
89
+ const configuredExtension = configuredExtensionByPath.get(rel);
90
+ const configuredLanguage = configuredExtension === undefined
91
+ ? undefined
92
+ : languageForExtension(configuredExtension);
93
+ if (configuredLanguage !== undefined
94
+ && declaredLanguage !== undefined
95
+ && configuredLanguage !== declaredLanguage) {
96
+ notices.push({
97
+ code: "EXTENSION_CONFLICT",
98
+ sourcePath: rel,
99
+ message: `${rel} was skipped because config selects .${configuredExtension} but its first line declares .${declaredExtension}.`,
100
+ });
101
+ continue;
102
+ }
103
+ if (configuredLanguage === undefined
104
+ && declaredLanguage !== undefined
105
+ && !configured.has(declaredLanguage)) {
106
+ notices.push({
107
+ code: "UNCONFIGURED_EXTENSION",
108
+ sourcePath: rel,
109
+ message: `${rel} was skipped because its first line declares .${declaredExtension}, whose language is not enabled in config.languages.`,
110
+ });
111
+ continue;
112
+ }
113
+ const prompt = declaredLanguage === undefined
114
+ ? rawPrompt
115
+ : lines.slice(1).join("\n").trim();
71
116
  if (prompt.length === 0)
72
117
  continue;
73
- // Inner-extension routing: `index.html.human` -> `index.html` when the
74
- // extension's language is configured; otherwise the primary language.
118
+ // Explicit config and first-line declarations outrank filename and text
119
+ // inference. A recognized inner extension remains authoritative when
120
+ // neither higher-priority route is present.
75
121
  const stem = rel.slice(0, -".human".length);
76
- const innerLanguage = languageForExtension(extname(stem));
122
+ const innerExtension = extname(stem);
123
+ const innerLanguage = languageForExtension(innerExtension);
77
124
  const routed = innerLanguage !== undefined && configured.has(innerLanguage);
78
- const unitLanguage = routed ? innerLanguage : primary;
79
- const outputPath = routed ? stem : `${stem}.${primaryProfile.ext}`;
125
+ const unitLanguage = configuredLanguage
126
+ ?? declaredLanguage
127
+ ?? (routed ? innerLanguage : inferUnitLanguage(basename(stem), prompt, languages));
128
+ const explicitExtension = configuredExtension
129
+ ?? (declaredLanguage === undefined ? undefined : declaredExtension);
130
+ const outputBase = explicitExtension !== undefined && innerLanguage !== undefined
131
+ ? stem.slice(0, -innerExtension.length)
132
+ : stem;
133
+ const outputPath = explicitExtension !== undefined
134
+ ? `${outputBase}.${explicitExtension}`
135
+ : routed
136
+ ? stem
137
+ : `${stem}.${languageProfile(unitLanguage).ext}`;
80
138
  try {
81
139
  await stat(join(absoluteRoot, ...outputPath.split("/")));
82
140
  notices.push({
@@ -136,7 +194,7 @@ export async function discoverDirectUnits(root, language) {
136
194
  }
137
195
  if (!content.includes("@human"))
138
196
  continue;
139
- for (const marker of extractInlineMarkers(content)) {
197
+ for (const marker of extractInlineMarkers(content, rel)) {
140
198
  const line = content.slice(0, marker.start).split("\n").length;
141
199
  units.push({
142
200
  kind: "inline",
@@ -154,7 +212,7 @@ export async function discoverDirectUnits(root, language) {
154
212
  return { units, notices };
155
213
  }
156
214
  /** Compatibility helper returning only runnable units. */
157
- export async function discoverUnits(root, language) {
158
- return (await discoverDirectUnits(root, language)).units;
215
+ export async function discoverUnits(root, language, humanFileExtensions = []) {
216
+ return (await discoverDirectUnits(root, language, humanFileExtensions)).units;
159
217
  }
160
218
  //# sourceMappingURL=discovery.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../src/agents/direct/discovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../src/agents/direct/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAI1D,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IACjC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC5D,OAAO,EAAE,MAAM,EAAE,MAAM;IACvB,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM;CAC9E,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM;IAC3E,UAAU,EAAE,gBAAgB;CAC7B,CAAC,CAAC;AAEH,KAAK,UAAU,IAAI,CAAC,IAAY,EAAE,OAA4B;IAC5D,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,KAAK,EAAE,GAAW,EAAE,KAAa,EAAiB,EAAE;QAChE,IAAI,KAAK,GAAG,EAAE;YAAE,OAAO;QACvB,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,IAAI,KAAK,CAAC,WAAW,EAAE;gBAAE,SAAS;YACnG,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,SAAS;YACtC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,KAAK,CAAC,cAAc,EAAE;gBAAE,SAAS;YACrC,IAAI,KAAK,CAAC,WAAW,EAAE;gBAAE,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;iBACjD,IAAI,KAAK,CAAC,MAAM,EAAE;gBAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC,CAAC;IACF,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACrB,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;AACxB,CAAC;AAED,8EAA8E;AAC9E,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY;IAChD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,eAAe,CAAC,CAAC;AAC9C,CAAC;AAED,qFAAqF;AACrF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAY,EACZ,QAAoC,EACpC,sBAA2D,EAAE;IAE7D,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,SAAS,GAAG,CAAC,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;SAC1E,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC;IAC7C,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IACtC,MAAM,yBAAyB,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5D,KAAK,MAAM,OAAO,IAAI,mBAAmB,EAAE,CAAC;QAC1C,IAAI,yBAAyB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,qCAAqC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QACtE,MAAM,cAAc,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,cAAc,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;YACpE,MAAM,IAAI,KAAK,CAAC,yBAAyB,SAAS,QAAQ,OAAO,CAAC,IAAI,uCAAuC,CAAC,CAAC;QACjH,CAAC;QACD,yBAAyB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IACxD,MAAM,KAAK,GAAqB,EAAE,CAAC;IACnC,MAAM,OAAO,GAAqC,EAAE,CAAC;IAErD,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChC,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;YAAE,SAAS;QAC7C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,IAAI,OAAe,CAAC;YACpB,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC7C,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YACrC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACxC,MAAM,iBAAiB,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;YACnF,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;YACjE,MAAM,mBAAmB,GAAG,yBAAyB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/D,MAAM,kBAAkB,GAAG,mBAAmB,KAAK,SAAS;gBAC1D,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,oBAAoB,CAAC,mBAAmB,CAAE,CAAC;YAC/C,IACE,kBAAkB,KAAK,SAAS;mBAC7B,gBAAgB,KAAK,SAAS;mBAC9B,kBAAkB,KAAK,gBAAgB,EAC1C,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,oBAAoB;oBAC1B,UAAU,EAAE,GAAG;oBACf,OAAO,EAAE,GAAG,GAAG,wCAAwC,mBAAmB,iCAAiC,iBAAiB,GAAG;iBAChI,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YACD,IACE,kBAAkB,KAAK,SAAS;mBAC7B,gBAAgB,KAAK,SAAS;mBAC9B,CAAC,UAAU,CAAC,GAAG,CAAC,gBAAgB,CAAC,EACpC,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,wBAAwB;oBAC9B,UAAU,EAAE,GAAG;oBACf,OAAO,EAAE,GAAG,GAAG,iDAAiD,iBAAiB,sDAAsD;iBACxI,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YACD,MAAM,MAAM,GAAG,gBAAgB,KAAK,SAAS;gBAC3C,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACrC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAElC,wEAAwE;YACxE,qEAAqE;YACrE,4CAA4C;YAC5C,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC5C,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM,aAAa,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAC;YAC3D,MAAM,MAAM,GAAG,aAAa,KAAK,SAAS,IAAI,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC5E,MAAM,YAAY,GAAG,kBAAkB;mBAClC,gBAAgB;mBAChB,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;YACrF,MAAM,iBAAiB,GAAG,mBAAmB;mBACxC,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;YACtE,MAAM,UAAU,GAAG,iBAAiB,KAAK,SAAS,IAAI,aAAa,KAAK,SAAS;gBAC/E,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC;gBACvC,CAAC,CAAC,IAAI,CAAC;YACT,MAAM,UAAU,GAAG,iBAAiB,KAAK,SAAS;gBAChD,CAAC,CAAC,GAAG,UAAU,IAAI,iBAAiB,EAAE;gBACtC,CAAC,CAAC,MAAM;oBACN,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,GAAG,IAAI,IAAI,eAAe,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC;YACrD,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACzD,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,eAAe;oBACrB,UAAU,EAAE,GAAG;oBACf,OAAO,EAAE,GAAG,GAAG,wBAAwB,UAAU,wDAAwD;iBAC1G,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;oBAAE,MAAM,KAAK,CAAC;YACtE,CAAC;YACD,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,MAAM;gBACZ,UAAU,EAAE,GAAG;gBACf,cAAc,EAAE,QAAQ;gBACxB,MAAM;gBACN,UAAU;gBACV,QAAQ,EAAE,YAAY;gBACtB,QAAQ,EAAE,GAAG,GAAG,SAAS,UAAU,EAAE;aACtC,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YAC7D,IAAI,IAAI,CAAC;YACT,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9B,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI;gBAAE,SAAS;YACtC,IAAI,kBAA0B,CAAC;YAC/B,IAAI,CAAC;gBACH,kBAAkB,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACxD,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,IAAI,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC1C,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,yBAAyB;oBAC/B,UAAU,EAAE,GAAG;oBACf,OAAO,EAAE,GAAG,GAAG,6BAA6B,OAAO,CAAC,QAAQ,CAAC,IAAI,qBAAqB,0CAA0C;iBACjI,CAAC,CAAC;YACL,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,SAAS;QAC1C,KAAK,MAAM,MAAM,IAAI,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;YAC/D,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,GAAG;gBACf,cAAc,EAAE,QAAQ;gBACxB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,QAAQ,EAAE,oBAAoB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,OAAO;gBAC5D,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE;gBAC/C,cAAc,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;gBACvD,IAAI;gBACJ,QAAQ,EAAE,GAAG,GAAG,0BAA0B,IAAI,UAAU,GAAG,EAAE;aAC9D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC5B,CAAC;AAED,0DAA0D;AAC1D,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAY,EACZ,QAAoC,EACpC,sBAA2D,EAAE;IAE7D,OAAO,CAAC,MAAM,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC;AAChF,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Deterministic output-language inference for `.human` files.
3
+ *
4
+ * When an operator configures more than one target language, a bare
5
+ * `styles.human` must not silently inherit the primary language — that is what
6
+ * turns a website request into four TypeScript files. Inference is signal
7
+ * based and never a model call, so the receipt shown before confirmation is
8
+ * reproducible: an explicit language named in the request wins, then filename
9
+ * convention, then request vocabulary. No signal keeps the primary language.
10
+ */
11
+ /**
12
+ * Choose the output language for one `.human` request. `configured` is the
13
+ * operator's list with the primary first; ties resolve toward the earlier
14
+ * entry, so the primary language always wins an inconclusive comparison.
15
+ */
16
+ export declare function inferUnitLanguage(fileStem: string, request: string, configured: readonly string[]): string;
17
+ //# sourceMappingURL=language-inference.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-inference.d.ts","sourceRoot":"","sources":["../../../src/agents/direct/language-inference.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA0DH;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,SAAS,MAAM,EAAE,GAC5B,MAAM,CA6BR"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Deterministic output-language inference for `.human` files.
3
+ *
4
+ * When an operator configures more than one target language, a bare
5
+ * `styles.human` must not silently inherit the primary language — that is what
6
+ * turns a website request into four TypeScript files. Inference is signal
7
+ * based and never a model call, so the receipt shown before confirmation is
8
+ * reproducible: an explicit language named in the request wins, then filename
9
+ * convention, then request vocabulary. No signal keeps the primary language.
10
+ */
11
+ /** An unambiguous language name in the request text, e.g. "in html". */
12
+ const EXPLICIT_MENTIONS = [
13
+ ["typescript", /\btypescript\b|\bts\b/u],
14
+ ["javascript", /\bjavascript\b|\bvanilla\s+js\b|\bes6\b|\bjs\b/u],
15
+ ["html", /\bhtml5?\b|\bmarkup\b/u],
16
+ ["css", /\bcss3?\b|\bstylesheet\b/u],
17
+ ["python", /\bpython\b/u],
18
+ ["rust", /\brust\b/u],
19
+ ];
20
+ /**
21
+ * When a request names more than one language, prefer the one described as
22
+ * the output. This makes instructions such as "convert JavaScript to
23
+ * TypeScript" deterministic without allowing a weaker vocabulary score to
24
+ * override an otherwise unambiguous explicit language name.
25
+ */
26
+ const OUTPUT_MENTIONS = {
27
+ typescript: /\b(?:as|in|into|to|using|with)\s+(?:plain\s+)?typescript\b|\btypescript\s+(?:code|file|module|output)\b/u,
28
+ javascript: /\b(?:as|in|into|to|using|with)\s+(?:plain\s+|vanilla\s+)?(?:javascript|js)\b|\b(?:javascript|js)\s+(?:code|file|module|output)\b/u,
29
+ html: /\b(?:as|in|into|to|using|with)\s+(?:plain\s+)?html5?\b|\bhtml5?\s+(?:code|document|file|markup|output|page)\b/u,
30
+ css: /\b(?:as|in|into|to|using|with)\s+(?:plain\s+)?css3?\b|\bcss3?\s+(?:code|file|output|stylesheet)\b/u,
31
+ python: /\b(?:as|in|into|to|using|with)\s+(?:plain\s+)?python\b|\bpython\s+(?:code|file|module|output|script)\b/u,
32
+ rust: /\b(?:as|in|into|to|using|with)\s+(?:plain\s+)?rust\b|\brust\s+(?:code|file|module|output)\b/u,
33
+ };
34
+ /**
35
+ * Filename stems that conventionally belong to one language. `index` is
36
+ * deliberately absent: `index.html` and `index.ts` are equally idiomatic, so
37
+ * that name is decided by the request text instead.
38
+ */
39
+ const STEM_CONVENTIONS = {
40
+ html: /^(?:home|homepage|page|landing|about|contact|layout|header|footer|nav|navbar|sidebar|template|markup)$/u,
41
+ css: /^(?:style|styles|styling|stylesheet|stylesheets|theme|themes|reset|typography|palette)$/u,
42
+ javascript: /^(?:script|scripts|app|client|bundle|main)$/u,
43
+ typescript: /^(?:script|scripts|app|client|bundle|main)$/u,
44
+ python: /^(?:main|app|script|scripts)$/u,
45
+ rust: /^(?:main|lib)$/u,
46
+ };
47
+ /** Request vocabulary that leans toward one language without naming it. */
48
+ const VOCABULARY = {
49
+ html: /\b(?:page|webpage|web\s+page|homepage|landing|section|hero|navbar|nav\s+bar|heading|headings|form|button|buttons|input|document|structure|semantic|div|body|head|meta\s+tags?|anchor|links?|lists?|tables?|accessib\w*|aria|seo|boilerplate|skeleton|layout)\b/gu,
50
+ css: /\b(?:styles?|styling|colou?rs?|fonts?|typography|spacing|padding|margins?|background|gradients?|shadows?|borders?|radius|responsive|media\s+quer\w+|breakpoints?|flexbox|flex|grid|animations?|transitions?|hover|dark\s+(?:mode|theme)|light\s+(?:mode|theme)|palette|themes?|centered|align\w*)\b/gu,
51
+ javascript: /\b(?:functions?|classes|class|handlers?|event\s+listeners?|listeners?|clicks?|fetch|api|async|await|promises?|variables?|const|let|return|algorithm|calculate|calculation|logic|sort|arrays?|objects?|modules?|export|import|states?|validate|validation|parse|loop|loops)\b/gu,
52
+ typescript: /\b(?:functions?|classes|class|interfaces?|types?|generics?|handlers?|event\s+listeners?|listeners?|clicks?|fetch|api|async|await|promises?|variables?|const|let|return|algorithm|calculate|calculation|logic|sort|arrays?|objects?|modules?|export|import|states?|validate|validation|parse|loop|loops)\b/gu,
53
+ python: /\b(?:functions?|classes|class|def|dict|dicts|lists?|tuples?|scripts?|api|async|await|algorithm|calculate|calculation|logic|sort|parse|loop|loops)\b/gu,
54
+ rust: /\b(?:functions?|structs?|traits?|enums?|impl|modules?|crates?|ownership|borrow\w*|algorithm|calculate|calculation|logic|sort|parse|loop|loops)\b/gu,
55
+ };
56
+ function countMatches(pattern, text) {
57
+ // Each language's vocabulary pattern is global; reset lastIndex so repeated
58
+ // inference calls cannot inherit a previous match position.
59
+ pattern.lastIndex = 0;
60
+ return [...text.matchAll(pattern)].length;
61
+ }
62
+ /**
63
+ * Choose the output language for one `.human` request. `configured` is the
64
+ * operator's list with the primary first; ties resolve toward the earlier
65
+ * entry, so the primary language always wins an inconclusive comparison.
66
+ */
67
+ export function inferUnitLanguage(fileStem, request, configured) {
68
+ const primary = configured[0] ?? "typescript";
69
+ if (configured.length < 2)
70
+ return primary;
71
+ const stem = fileStem.trim().toLowerCase();
72
+ const text = request.toLowerCase();
73
+ const explicitlyNamed = configured.filter((language) => EXPLICIT_MENTIONS.find(([name]) => name === language)?.[1].test(text) === true);
74
+ if (explicitlyNamed.length === 1)
75
+ return explicitlyNamed[0];
76
+ if (explicitlyNamed.length > 1) {
77
+ const outputLanguage = explicitlyNamed.find((language) => OUTPUT_MENTIONS[language]?.test(text));
78
+ return outputLanguage ?? explicitlyNamed[0];
79
+ }
80
+ const conventional = configured.filter((language) => STEM_CONVENTIONS[language]?.test(stem) === true);
81
+ if (conventional.length === 1)
82
+ return conventional[0];
83
+ let best = primary;
84
+ let bestScore = 0;
85
+ for (const language of configured) {
86
+ const vocabulary = VOCABULARY[language];
87
+ const score = vocabulary ? countMatches(vocabulary, text) : 0;
88
+ if (score > bestScore) {
89
+ best = language;
90
+ bestScore = score;
91
+ }
92
+ }
93
+ return bestScore > 0 ? best : primary;
94
+ }
95
+ //# sourceMappingURL=language-inference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-inference.js","sourceRoot":"","sources":["../../../src/agents/direct/language-inference.ts"],"names":[],"mappings":"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"}
@@ -2,5 +2,6 @@ import type { LanguageProfile } from "./types.ts";
2
2
  /** Operator-declared config language -> output extension and prompt label. */
3
3
  export declare const LANGUAGE_PROFILES: Record<string, LanguageProfile>;
4
4
  export declare function languageProfile(language: string): LanguageProfile;
5
+ /** File extension (with or without a leading dot) -> owning config language. */
5
6
  export declare function languageForExtension(extension: string): string | undefined;
6
7
  //# sourceMappingURL=languages.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"languages.d.ts","sourceRoot":"","sources":["../../../src/agents/direct/languages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,8EAA8E;AAC9E,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAa7D,CAAC;AAEF,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAEjE;AAWD,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE1E"}
1
+ {"version":3,"file":"languages.d.ts","sourceRoot":"","sources":["../../../src/agents/direct/languages.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,8EAA8E;AAC9E,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAa7D,CAAC;AAEF,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAEjE;AAED,gFAAgF;AAChF,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE1E"}
@@ -1,3 +1,4 @@
1
+ import { languageForCodeExtension } from "../../core/languages.js";
1
2
  /** Operator-declared config language -> output extension and prompt label. */
2
3
  export const LANGUAGE_PROFILES = {
3
4
  typescript: { ext: "ts", label: "TypeScript" },
@@ -17,14 +18,7 @@ export function languageProfile(language) {
17
18
  return LANGUAGE_PROFILES[language.trim().toLowerCase()] ?? { ext: "txt", label: language };
18
19
  }
19
20
  /** File extension (with or without a leading dot) -> owning config language. */
20
- const EXTENSION_LANGUAGES = {
21
- ts: "typescript", tsx: "typescript", mts: "typescript", cts: "typescript",
22
- js: "javascript", jsx: "javascript", mjs: "javascript", cjs: "javascript",
23
- py: "python", rs: "rust", go: "go", java: "java", rb: "ruby", cs: "csharp",
24
- cpp: "cpp", cc: "cpp", hpp: "cpp", c: "c", h: "c",
25
- html: "html", htm: "html", css: "css",
26
- };
27
21
  export function languageForExtension(extension) {
28
- return EXTENSION_LANGUAGES[extension.replace(/^\./u, "").toLowerCase()];
22
+ return languageForCodeExtension(extension);
29
23
  }
30
24
  //# sourceMappingURL=languages.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"languages.js","sourceRoot":"","sources":["../../../src/agents/direct/languages.ts"],"names":[],"mappings":"AAEA,8EAA8E;AAC9E,MAAM,CAAC,MAAM,iBAAiB,GAAoC;IAChE,UAAU,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE;IAC9C,UAAU,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE;IAC9C,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;IACtC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;IAClC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;IAC9B,IAAI,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;IACpC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;IAClC,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;IAClC,GAAG,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;IACjC,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;IAC3B,IAAI,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;IACpC,GAAG,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;CAClC,CAAC;AAEF,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,OAAO,iBAAiB,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC7F,CAAC;AAED,gFAAgF;AAChF,MAAM,mBAAmB,GAA2B;IAClD,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY;IACzE,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY;IACzE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ;IAC1E,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG;IACjD,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK;CACtC,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IACpD,OAAO,mBAAmB,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAC1E,CAAC"}
1
+ {"version":3,"file":"languages.js","sourceRoot":"","sources":["../../../src/agents/direct/languages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAGnE,8EAA8E;AAC9E,MAAM,CAAC,MAAM,iBAAiB,GAAoC;IAChE,UAAU,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE;IAC9C,UAAU,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE;IAC9C,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;IACtC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;IAClC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;IAC9B,IAAI,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;IACpC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;IAClC,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;IAClC,GAAG,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;IACjC,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;IAC3B,IAAI,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;IACpC,GAAG,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;CAClC,CAAC;AAEF,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,OAAO,iBAAiB,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC7F,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IACpD,OAAO,wBAAwB,CAAC,SAAS,CAAC,CAAC;AAC7C,CAAC"}
@@ -4,5 +4,5 @@ export interface InlineMarker {
4
4
  end: number;
5
5
  }
6
6
  /** Find every lexical `@human` comment marker with its exact character range. */
7
- export declare function extractInlineMarkers(text: string): InlineMarker[];
7
+ export declare function extractInlineMarkers(text: string, sourcePath?: string): InlineMarker[];
8
8
  //# sourceMappingURL=marker-parser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"marker-parser.d.ts","sourceRoot":"","sources":["../../../src/agents/direct/marker-parser.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AA0CD,iFAAiF;AACjF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CA6CjE"}
1
+ {"version":3,"file":"marker-parser.d.ts","sourceRoot":"","sources":["../../../src/agents/direct/marker-parser.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAkLD,iFAAiF;AACjF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,SAAK,GAAG,YAAY,EAAE,CAiClF"}