human-to-code 0.1.21 → 0.1.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/Readme.md +62 -4
  2. package/SECURITY.md +30 -5
  3. package/dist/agents/direct/discovery.d.ts.map +1 -1
  4. package/dist/agents/direct/discovery.js +2 -1
  5. package/dist/agents/direct/discovery.js.map +1 -1
  6. package/dist/agents/direct/file-memory.d.ts.map +1 -1
  7. package/dist/agents/direct/file-memory.js +9 -0
  8. package/dist/agents/direct/file-memory.js.map +1 -1
  9. package/dist/agents/direct/generation-client.d.ts +12 -0
  10. package/dist/agents/direct/generation-client.d.ts.map +1 -1
  11. package/dist/agents/direct/generation-client.js +9 -0
  12. package/dist/agents/direct/generation-client.js.map +1 -1
  13. package/dist/agents/direct/index.d.ts +3 -0
  14. package/dist/agents/direct/index.d.ts.map +1 -1
  15. package/dist/agents/direct/index.js +3 -0
  16. package/dist/agents/direct/index.js.map +1 -1
  17. package/dist/agents/direct/integration-validation.d.ts +47 -0
  18. package/dist/agents/direct/integration-validation.d.ts.map +1 -0
  19. package/dist/agents/direct/integration-validation.js +284 -0
  20. package/dist/agents/direct/integration-validation.js.map +1 -0
  21. package/dist/agents/direct/presentation.d.ts +9 -1
  22. package/dist/agents/direct/presentation.d.ts.map +1 -1
  23. package/dist/agents/direct/presentation.js +26 -2
  24. package/dist/agents/direct/presentation.js.map +1 -1
  25. package/dist/agents/direct/project-contracts.d.ts +5 -0
  26. package/dist/agents/direct/project-contracts.d.ts.map +1 -0
  27. package/dist/agents/direct/project-contracts.js +167 -0
  28. package/dist/agents/direct/project-contracts.js.map +1 -0
  29. package/dist/agents/direct/project-memory.d.ts +42 -0
  30. package/dist/agents/direct/project-memory.d.ts.map +1 -0
  31. package/dist/agents/direct/project-memory.js +481 -0
  32. package/dist/agents/direct/project-memory.js.map +1 -0
  33. package/dist/agents/direct/staged-validation.d.ts +5 -1
  34. package/dist/agents/direct/staged-validation.d.ts.map +1 -1
  35. package/dist/agents/direct/staged-validation.js +8 -3
  36. package/dist/agents/direct/staged-validation.js.map +1 -1
  37. package/dist/agents/direct/types.d.ts +17 -0
  38. package/dist/agents/direct/types.d.ts.map +1 -1
  39. package/dist/cli.d.ts.map +1 -1
  40. package/dist/cli.js +97 -8
  41. package/dist/cli.js.map +1 -1
  42. package/dist/config/config.d.ts +5 -0
  43. package/dist/config/config.d.ts.map +1 -1
  44. package/dist/config/config.js +21 -0
  45. package/dist/config/config.js.map +1 -1
  46. package/dist/prompts/direct-conversion.d.ts +2 -0
  47. package/dist/prompts/direct-conversion.d.ts.map +1 -1
  48. package/dist/prompts/direct-conversion.js +30 -20
  49. package/dist/prompts/direct-conversion.js.map +1 -1
  50. package/dist/prompts/direct-integration.d.ts +23 -0
  51. package/dist/prompts/direct-integration.d.ts.map +1 -0
  52. package/dist/prompts/direct-integration.js +45 -0
  53. package/dist/prompts/direct-integration.js.map +1 -0
  54. package/dist/prompts/direct-repair.d.ts +2 -0
  55. package/dist/prompts/direct-repair.d.ts.map +1 -1
  56. package/dist/prompts/direct-repair.js +11 -5
  57. package/dist/prompts/direct-repair.js.map +1 -1
  58. package/dist/prompts/index.d.ts +1 -0
  59. package/dist/prompts/index.d.ts.map +1 -1
  60. package/dist/prompts/index.js +1 -0
  61. package/dist/prompts/index.js.map +1 -1
  62. package/docs/ARCHITECTURE.md +10 -5
  63. package/docs/MODULES.md +10 -4
  64. package/docs/SCALABILITY.md +15 -0
  65. package/docs/roadmap/html-css.md +10 -0
  66. package/package.json +1 -1
@@ -0,0 +1,284 @@
1
+ /**
2
+ * Opt-in post-generation checks for relationships that a compiler cannot
3
+ * validate. The first contract covers static-web entry documents: generated
4
+ * HTML must reference conventional generated CSS/browser-JavaScript companions
5
+ * in the same directory. Consistent groups issue no request; a detected gap
6
+ * permits one bounded whole-file reconciliation and otherwise fails closed.
7
+ */
8
+ import { posix } from "node:path";
9
+ import { ContextSecurityError, scanSecrets } from "../../context/context.js";
10
+ import { validateGeneratedUnit } from "./candidate-validation.js";
11
+ const DEFAULT_CONTEXT_CHAR_BUDGET = 48_000;
12
+ const HTML_EXTENSIONS = new Set([".html", ".htm"]);
13
+ const BROWSER_SCRIPT_EXTENSIONS = new Set([".js", ".mjs"]);
14
+ const RAW_OR_INERT_HTML_ELEMENTS = new Set([
15
+ "iframe", "noembed", "noframes", "script", "style", "template", "textarea", "title", "xmp",
16
+ ]);
17
+ const CONVENTIONAL_BROWSER_SCRIPT = /^(?:app|client|frontend|index|main|page|script|ui)(?:[.-].*)?\.(?:js|mjs)$/iu;
18
+ const BROWSER_PURPOSE = /\b(?:browser|button|calculator|click|document|dom|event|form|html|page|screen|ui|window)\b/iu;
19
+ function targetPath(unit) {
20
+ return unit.kind === "file" ? unit.outputPath : unit.sourcePath;
21
+ }
22
+ function extension(path) {
23
+ return posix.extname(path).toLowerCase();
24
+ }
25
+ function isWholeHtml(unit) {
26
+ return unit.kind === "file" && HTML_EXTENSIONS.has(extension(targetPath(unit)));
27
+ }
28
+ function isStylesheetCompanion(unit) {
29
+ if (unit.kind !== "file" || extension(targetPath(unit)) !== ".css")
30
+ return false;
31
+ return !/(?:^|[.-])(?:module|spec|test)(?:[.-]|\.css$)/iu.test(posix.basename(targetPath(unit)));
32
+ }
33
+ function isBrowserScriptCompanion(unit) {
34
+ if (unit.kind !== "file" || !BROWSER_SCRIPT_EXTENSIONS.has(extension(targetPath(unit))))
35
+ return false;
36
+ const name = posix.basename(targetPath(unit));
37
+ if (/(?:^|[.-])(?:config|server|spec|test)(?:[.-]|\.(?:js|mjs)$)/iu.test(name))
38
+ return false;
39
+ return CONVENTIONAL_BROWSER_SCRIPT.test(name) || BROWSER_PURPOSE.test(unit.prompt);
40
+ }
41
+ function webIntegrationGroups(units) {
42
+ const files = units.filter((unit) => unit.kind === "file");
43
+ return files.filter(isWholeHtml).flatMap((html) => {
44
+ const directory = posix.dirname(targetPath(html));
45
+ const related = files.filter((unit) => unit !== html
46
+ && posix.dirname(targetPath(unit)) === directory
47
+ && (isStylesheetCompanion(unit) || isBrowserScriptCompanion(unit)));
48
+ return related.length > 0 ? [{ html, related }] : [];
49
+ });
50
+ }
51
+ /** Maximum integration requests disclosed before an opt-in run. */
52
+ export function potentialIntegrationRequests(units) {
53
+ return webIntegrationGroups(units).length;
54
+ }
55
+ function requiredReference(from, to) {
56
+ return posix.relative(posix.dirname(from), to) || posix.basename(to);
57
+ }
58
+ function attribute(tag, name) {
59
+ const pattern = new RegExp(`(?:^|\\s)${name}\\s*=\\s*(?:"([^"]*)"|'([^']*)'|([^\\s"'=<>\u0060]+))`, "iu");
60
+ const match = pattern.exec(tag);
61
+ return match?.[1] ?? match?.[2] ?? match?.[3];
62
+ }
63
+ function resolveLocalReference(from, reference) {
64
+ const trimmed = reference.trim();
65
+ if (trimmed.length === 0 || trimmed.startsWith("#") || trimmed.startsWith("//"))
66
+ return undefined;
67
+ if (/^[a-z][a-z0-9+.-]*:/iu.test(trimmed))
68
+ return undefined;
69
+ const withoutSuffix = trimmed.split(/[?#]/u, 1)[0] ?? "";
70
+ let decoded;
71
+ try {
72
+ decoded = decodeURIComponent(withoutSuffix);
73
+ }
74
+ catch {
75
+ decoded = withoutSuffix;
76
+ }
77
+ const resolved = decoded.startsWith("/")
78
+ ? posix.normalize(decoded.slice(1))
79
+ : posix.normalize(posix.join(posix.dirname(from), decoded));
80
+ if (resolved === ".." || resolved.startsWith("../"))
81
+ return undefined;
82
+ return resolved.replace(/^\.\//u, "");
83
+ }
84
+ function tagEnd(html, start) {
85
+ let quote;
86
+ for (let index = start + 1; index < html.length; index += 1) {
87
+ const char = html[index];
88
+ if (quote !== undefined) {
89
+ if (char === quote)
90
+ quote = undefined;
91
+ }
92
+ else if (char === "\"" || char === "'") {
93
+ quote = char;
94
+ }
95
+ else if (char === ">") {
96
+ return index;
97
+ }
98
+ }
99
+ return html.length - 1;
100
+ }
101
+ /**
102
+ * Extract active start tags without accepting examples inside HTML comments,
103
+ * template contents, or JavaScript/CSS raw-text bodies as real references.
104
+ */
105
+ function htmlStartTags(html) {
106
+ const tags = [];
107
+ let offset = 0;
108
+ while (offset < html.length) {
109
+ const start = html.indexOf("<", offset);
110
+ if (start === -1)
111
+ break;
112
+ if (html.startsWith("<!--", start)) {
113
+ const end = html.indexOf("-->", start + 4);
114
+ offset = end === -1 ? html.length : end + 3;
115
+ continue;
116
+ }
117
+ const end = tagEnd(html, start);
118
+ const source = html.slice(start, end + 1);
119
+ const match = /^<\s*([a-z][a-z0-9:-]*)\b/iu.exec(source);
120
+ if (!match) {
121
+ offset = end + 1;
122
+ continue;
123
+ }
124
+ const name = match[1].toLowerCase();
125
+ tags.push({ name, source });
126
+ if (RAW_OR_INERT_HTML_ELEMENTS.has(name) && !/\/\s*>$/u.test(source)) {
127
+ const closing = new RegExp(`<\\/\\s*${name}\\s*>`, "giu");
128
+ closing.lastIndex = end + 1;
129
+ const close = closing.exec(html);
130
+ offset = close === null ? html.length : close.index + close[0].length;
131
+ }
132
+ else {
133
+ offset = end + 1;
134
+ }
135
+ }
136
+ return tags;
137
+ }
138
+ function hasStylesheetReference(htmlPath, tags, stylesheetPath) {
139
+ for (const tag of tags) {
140
+ if (tag.name !== "link")
141
+ continue;
142
+ const rel = attribute(tag.source, "rel")?.toLowerCase().split(/\s+/u) ?? [];
143
+ const href = attribute(tag.source, "href");
144
+ if (rel.includes("stylesheet") && href !== undefined && resolveLocalReference(htmlPath, href) === stylesheetPath)
145
+ return true;
146
+ }
147
+ return false;
148
+ }
149
+ function hasScriptReference(htmlPath, tags, scriptPath) {
150
+ for (const tag of tags) {
151
+ if (tag.name !== "script")
152
+ continue;
153
+ const source = attribute(tag.source, "src");
154
+ if (source !== undefined && resolveLocalReference(htmlPath, source) === scriptPath)
155
+ return true;
156
+ }
157
+ return false;
158
+ }
159
+ /** Check one complete HTML candidate against its known generated companions. */
160
+ export function findHtmlIntegrationIssues(htmlPath, html, relatedUnits) {
161
+ const issues = [];
162
+ const tags = htmlStartTags(html);
163
+ for (const unit of relatedUnits) {
164
+ const relatedPath = targetPath(unit);
165
+ const reference = requiredReference(htmlPath, relatedPath);
166
+ if (isStylesheetCompanion(unit) && !hasStylesheetReference(htmlPath, tags, relatedPath)) {
167
+ issues.push({
168
+ code: "MISSING_STYLESHEET_REFERENCE",
169
+ message: `${htmlPath} does not load its generated stylesheet companion ${relatedPath}.`,
170
+ relatedPath,
171
+ requiredReference: reference,
172
+ });
173
+ }
174
+ else if (isBrowserScriptCompanion(unit) && !hasScriptReference(htmlPath, tags, relatedPath)) {
175
+ issues.push({
176
+ code: "MISSING_BROWSER_SCRIPT_REFERENCE",
177
+ message: `${htmlPath} does not load its generated browser-script companion ${relatedPath}.`,
178
+ relatedPath,
179
+ requiredReference: reference,
180
+ });
181
+ }
182
+ }
183
+ return issues;
184
+ }
185
+ function describeIssues(issues) {
186
+ return issues.map((issue) => `${issue.code} (${issue.requiredReference})`).join(", ");
187
+ }
188
+ function buildIntegrationRequest(group, currentCode, issues, byUnit, contextCharBudget, projectMemory) {
189
+ const issueChars = issues.reduce((total, issue) => total + issue.message.length + issue.relatedPath.length + issue.requiredReference.length + 48, 0);
190
+ let budget = contextCharBudget - currentCode.length - issueChars;
191
+ if (budget < 0)
192
+ return undefined;
193
+ const renderedProjectMemory = projectMemory?.renderFor(group.html, Math.floor(budget / 2));
194
+ budget -= renderedProjectMemory?.length ?? 0;
195
+ const relatedFiles = [];
196
+ for (const unit of group.related) {
197
+ const item = byUnit.get(unit);
198
+ if (!item || item.error !== undefined || item.code.length > budget)
199
+ continue;
200
+ relatedFiles.push({ path: targetPath(unit), content: item.code });
201
+ budget -= item.code.length;
202
+ }
203
+ return {
204
+ unit: group.html,
205
+ targetPath: targetPath(group.html),
206
+ instruction: group.html.prompt,
207
+ currentCode,
208
+ issues,
209
+ relatedFiles,
210
+ ...(renderedProjectMemory ? { projectMemory: renderedProjectMemory } : {}),
211
+ };
212
+ }
213
+ /** Run opt-in integration checks and bounded repair over generated candidates. */
214
+ export async function reconcileGeneratedIntegrations(generated, options = {}) {
215
+ const results = generated.map((item) => ({ ...item }));
216
+ const byUnit = new Map(results.map((item) => [item.unit, item]));
217
+ const groups = webIntegrationGroups(results.map((item) => item.unit));
218
+ const maxAttempts = Math.max(0, options.maxIntegrationAttemptsPerUnit ?? 1);
219
+ const contextCharBudget = Math.max(0, options.contextCharBudget ?? DEFAULT_CONTEXT_CHAR_BUDGET);
220
+ let integrationRequests = 0;
221
+ const rejectGroup = (group, reason) => {
222
+ for (const unit of [group.html, ...group.related]) {
223
+ const item = byUnit.get(unit);
224
+ if (!item || item.error !== undefined)
225
+ continue;
226
+ item.error = reason;
227
+ item.code = "";
228
+ options.onProgress?.({ kind: "reject", unit, reason });
229
+ }
230
+ };
231
+ for (const group of groups) {
232
+ const groupItems = [group.html, ...group.related].map((unit) => byUnit.get(unit));
233
+ const unavailable = groupItems.filter((item) => item.error !== undefined || item.code.trim().length === 0);
234
+ if (unavailable.length > 0) {
235
+ rejectGroup(group, `cross-file integration group is incomplete because ${unavailable.map((item) => item.unit.sourcePath).join(", ")} did not produce an applicable candidate`);
236
+ continue;
237
+ }
238
+ const htmlItem = byUnit.get(group.html);
239
+ let issues = findHtmlIntegrationIssues(targetPath(group.html), htmlItem.code, group.related);
240
+ options.onProgress?.({ kind: "integration-check", unit: group.html, issues: issues.length });
241
+ if (issues.length === 0)
242
+ continue;
243
+ if (!options.integrate || maxAttempts === 0) {
244
+ rejectGroup(group, `cross-file integration validation failed: ${describeIssues(issues)}`);
245
+ continue;
246
+ }
247
+ let reconciled = false;
248
+ for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
249
+ const request = buildIntegrationRequest(group, htmlItem.code, issues, byUnit, contextCharBudget, options.projectMemory);
250
+ if (!request)
251
+ break;
252
+ const outbound = [request.currentCode, request.projectMemory ?? "", ...request.relatedFiles.map((file) => file.content)].join("\n");
253
+ if (scanSecrets(outbound).length > 0)
254
+ break;
255
+ options.onProgress?.({ kind: "integrate", unit: group.html, attempt, issues: issues.length });
256
+ integrationRequests += 1;
257
+ try {
258
+ const integratedCode = await options.integrate(request);
259
+ if (integratedCode.trim().length === 0 || integratedCode === htmlItem.code)
260
+ continue;
261
+ await validateGeneratedUnit(group.html, integratedCode);
262
+ const remaining = findHtmlIntegrationIssues(targetPath(group.html), integratedCode, group.related);
263
+ if (remaining.length > 0) {
264
+ issues = remaining;
265
+ continue;
266
+ }
267
+ htmlItem.code = integratedCode;
268
+ options.projectMemory?.remember(group.html, integratedCode);
269
+ reconciled = true;
270
+ break;
271
+ }
272
+ catch (error) {
273
+ if (error instanceof ContextSecurityError)
274
+ throw error;
275
+ // The request budget is consumed. A known-broken connected group is
276
+ // rejected below instead of being written partially.
277
+ }
278
+ }
279
+ if (!reconciled)
280
+ rejectGroup(group, `cross-file integration validation failed after bounded reconciliation: ${describeIssues(issues)}`);
281
+ }
282
+ return { results, integrationRequests, checkedTargets: groups.length };
283
+ }
284
+ //# sourceMappingURL=integration-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration-validation.js","sourceRoot":"","sources":["../../../src/agents/direct/integration-validation.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,14 @@ import type { ConversionUnit } from "./types.ts";
2
2
  export declare class ModelOutputError extends Error {
3
3
  constructor(message: string);
4
4
  }
5
- export declare function renderReceipt(units: readonly ConversionUnit[], provider: string, model: string, configuredLanguages: string | readonly string[]): string;
5
+ export interface ConditionalRequestAllowance {
6
+ integrationUpTo: number;
7
+ compilerRepairUpTo: number;
8
+ }
9
+ /** Conservative opt-in request ceilings for pre-generation disclosure. */
10
+ export declare function conditionalRequestAllowance(units: readonly ConversionUnit[], configuredLanguages: string | readonly string[]): ConditionalRequestAllowance;
11
+ export declare function renderReceipt(units: readonly ConversionUnit[], provider: string, model: string, configuredLanguages: string | readonly string[], options?: {
12
+ reconcileIntegrations?: boolean;
13
+ }): string;
6
14
  export declare function stripCodeFence(output: string): string;
7
15
  //# sourceMappingURL=presentation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"presentation.d.ts","sourceRoot":"","sources":["../../../src/agents/direct/presentation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,cAAc,EAAE,EAChC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,mBAAmB,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAC9C,MAAM,CAwCR;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAWrD"}
1
+ {"version":3,"file":"presentation.d.ts","sourceRoot":"","sources":["../../../src/agents/direct/presentation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,WAAW,2BAA2B;IAC1C,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,0EAA0E;AAC1E,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,SAAS,cAAc,EAAE,EAChC,mBAAmB,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAC9C,2BAA2B,CAU7B;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,cAAc,EAAE,EAChC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,mBAAmB,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,EAC/C,OAAO,GAAE;IAAE,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAAO,GAChD,MAAM,CAmDR;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAWrD"}
@@ -1,11 +1,24 @@
1
1
  import { languageProfile } from "./languages.js";
2
+ import { potentialIntegrationRequests } from "./integration-validation.js";
2
3
  export class ModelOutputError extends Error {
3
4
  constructor(message) {
4
5
  super(message);
5
6
  this.name = "ModelOutputError";
6
7
  }
7
8
  }
8
- export function renderReceipt(units, provider, model, configuredLanguages) {
9
+ /** Conservative opt-in request ceilings for pre-generation disclosure. */
10
+ export function conditionalRequestAllowance(units, configuredLanguages) {
11
+ const configured = typeof configuredLanguages === "string" ? [configuredLanguages] : configuredLanguages;
12
+ const primary = configured[0] ?? "typescript";
13
+ return {
14
+ integrationUpTo: potentialIntegrationRequests(units),
15
+ compilerRepairUpTo: units.filter((unit) => {
16
+ const language = unit.language ?? primary;
17
+ return unit.kind === "file" && (language === "typescript" || language === "javascript");
18
+ }).length,
19
+ };
20
+ }
21
+ export function renderReceipt(units, provider, model, configuredLanguages, options = {}) {
9
22
  const configured = typeof configuredLanguages === "string"
10
23
  ? [configuredLanguages]
11
24
  : configuredLanguages;
@@ -29,6 +42,12 @@ export function renderReceipt(units, provider, model, configuredLanguages) {
29
42
  const repairAllowance = repairableUnits.length > 0
30
43
  ? ` (up to ${repairableUnits.length} extra bounded repair request${repairableUnits.length === 1 ? "" : "s"} for ${repairLanguages})`
31
44
  : "";
45
+ const conditional = options.reconcileIntegrations
46
+ ? conditionalRequestAllowance(units, configured)
47
+ : undefined;
48
+ const integrationDisclaimer = conditional !== undefined && conditional.integrationUpTo > 0
49
+ ? ` Additional: opt-in integration reconciliation may issue up to ${conditional.integrationUpTo} extra bounded request${conditional.integrationUpTo === 1 ? "" : "s"}, only when generated cross-file links are missing.`
50
+ : undefined;
32
51
  const lines = [
33
52
  "human-to-code — conversion receipt",
34
53
  "",
@@ -36,7 +55,12 @@ export function renderReceipt(units, provider, model, configuredLanguages) {
36
55
  ` Provider : ${provider}`,
37
56
  ` Model : ${model}`,
38
57
  ` Engine : direct (one model request per prompt; bounded cross-file repair may add requests)`,
39
- ` Requests : ${units.length} planned${repairAllowance}`,
58
+ ` Context : compact current/projected ProjectMemory (target-specific, bounded)`,
59
+ ` Requests : ${units.length} planned${options.reconcileIntegrations ? "" : repairAllowance}`,
60
+ ...(integrationDisclaimer ? [integrationDisclaimer] : []),
61
+ ...(conditional !== undefined && conditional.compilerRepairUpTo > 0
62
+ ? [` Validation: up to ${conditional.compilerRepairUpTo} additional bounded JS/TS compiler-repair request${conditional.compilerRepairUpTo === 1 ? "" : "s"}, only if validation fails.`]
63
+ : []),
40
64
  "",
41
65
  ];
42
66
  if (units.length === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"presentation.js","sourceRoot":"","sources":["../../../src/agents/direct/presentation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"presentation.js","sourceRoot":"","sources":["../../../src/agents/direct/presentation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare const PROJECT_CONTRACT_EXTENSIONS: Set<string>;
2
+ export declare const PROJECT_MANIFEST_NAMES: Set<string>;
3
+ /** Extract a bounded interface/relationship summary without executing source. */
4
+ export declare function compactFileContract(path: string, content: string): string;
5
+ //# sourceMappingURL=project-contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-contracts.d.ts","sourceRoot":"","sources":["../../../src/agents/direct/project-contracts.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,2BAA2B,aAItC,CAAC;AAEH,eAAO,MAAM,sBAAsB,aAIjC,CAAC;AAiIH,iFAAiF;AACjF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAuBzE"}
@@ -0,0 +1,167 @@
1
+ /**
2
+ * Static, language-aware contract extraction for ProjectMemory. These compact
3
+ * summaries expose relationships and public structure without executing source
4
+ * or sending whole files. Credential-bearing content yields no contract.
5
+ */
6
+ import { basename, extname } from "node:path";
7
+ import { scanSecrets } from "../../context/context.js";
8
+ import { extractStaticFileMemory } from "../../pipeline/file-memory.js";
9
+ const MAX_CONTRACT_CHARS = 2_400;
10
+ const MAX_CONTRACT_ITEMS = 24;
11
+ export const PROJECT_CONTRACT_EXTENSIONS = new Set([
12
+ ".ts", ".tsx", ".mts", ".cts", ".js", ".jsx", ".mjs", ".cjs",
13
+ ".html", ".htm", ".css", ".py", ".rs", ".go", ".java", ".rb",
14
+ ".cs", ".cpp", ".cc", ".c", ".h", ".hpp", ".json",
15
+ ]);
16
+ export const PROJECT_MANIFEST_NAMES = new Set([
17
+ "package.json", "tsconfig.json", "jsconfig.json", "Cargo.toml", "go.mod",
18
+ "pom.xml", "build.gradle", "build.gradle.kts", "requirements.txt",
19
+ "pyproject.toml", "CMakeLists.txt", "Makefile",
20
+ ]);
21
+ function oneLine(value, limit) {
22
+ const sanitized = value
23
+ .replace(/[\u0000-\u0008\u000b-\u001f\u007f]/gu, " ")
24
+ .replace(/\s+/gu, " ")
25
+ .trim();
26
+ return sanitized.length <= limit ? sanitized : `${sanitized.slice(0, Math.max(0, limit - 1))}…`;
27
+ }
28
+ function unique(values, limit = MAX_CONTRACT_ITEMS) {
29
+ const result = [];
30
+ const seen = new Set();
31
+ for (const value of values) {
32
+ const cleaned = oneLine(value, 180);
33
+ if (cleaned.length === 0 || seen.has(cleaned))
34
+ continue;
35
+ seen.add(cleaned);
36
+ result.push(cleaned);
37
+ if (result.length >= limit)
38
+ break;
39
+ }
40
+ return result;
41
+ }
42
+ function matches(content, expression, group = 1) {
43
+ const values = [];
44
+ for (const match of content.matchAll(expression)) {
45
+ const value = match[group];
46
+ if (value !== undefined)
47
+ values.push(value);
48
+ }
49
+ return values;
50
+ }
51
+ function listLine(label, values) {
52
+ return values.length === 0 ? undefined : `${label}: ${values.join(", ")}`;
53
+ }
54
+ function htmlContract(content) {
55
+ const stylesheets = matches(content, /<link\b(?=[^>]*\brel\s*=\s*["'][^"']*stylesheet[^"']*["'])[^>]*\bhref\s*=\s*["']([^"']+)["'][^>]*>/giu);
56
+ const scripts = matches(content, /<script\b[^>]*\bsrc\s*=\s*["']([^"']+)["'][^>]*>/giu);
57
+ const ids = matches(content, /\bid\s*=\s*["']([^"']+)["']/giu)
58
+ .flatMap((value) => value.split(/\s+/u));
59
+ const classes = matches(content, /\bclass\s*=\s*["']([^"']+)["']/giu)
60
+ .flatMap((value) => value.split(/\s+/u));
61
+ const landmarks = matches(content, /<(header|nav|main|section|article|aside|footer|form)\b/giu);
62
+ const elements = matches(content, /<([a-z][a-z0-9-]*)\b/giu);
63
+ return [
64
+ listLine("stylesheets", unique(stylesheets)),
65
+ listLine("scripts", unique(scripts)),
66
+ listLine("ids", unique(ids)),
67
+ listLine("classes", unique(classes)),
68
+ listLine("landmarks", unique(landmarks)),
69
+ listLine("elements", unique(elements)),
70
+ ].filter((line) => line !== undefined);
71
+ }
72
+ function cssContract(content) {
73
+ const imports = matches(content, /@import\s+(?:url\(\s*)?["']([^"']+)["']/giu);
74
+ const urls = matches(content, /url\(\s*["']?([^"')\s]+)["']?\s*\)/giu);
75
+ const customProperties = matches(content, /(^|[;{]\s*)(--[A-Za-z0-9_-]+)\s*:/gmu, 2);
76
+ const selectors = matches(content, /(?:^|\})\s*([^@{}][^{}]{0,240})\s*\{/gmu)
77
+ .flatMap((value) => value.split(","));
78
+ return [
79
+ listLine("imports", unique(imports)),
80
+ listLine("asset URLs", unique(urls)),
81
+ listLine("custom properties", unique(customProperties)),
82
+ listLine("selectors", unique(selectors)),
83
+ ].filter((line) => line !== undefined);
84
+ }
85
+ function javascriptContract(content) {
86
+ const modules = [
87
+ ...matches(content, /\b(?:import|export)\b[\s\S]{0,240}?\bfrom\s*["']([^"']+)["']/gu),
88
+ ...matches(content, /\bimport\s*["']([^"']+)["']/gu),
89
+ ...matches(content, /\brequire\s*\(\s*["']([^"']+)["']\s*\)/gu),
90
+ ];
91
+ const selectors = [
92
+ ...matches(content, /\bquerySelector(?:All)?\s*\(\s*["']([^"']+)["']/gu),
93
+ ...matches(content, /\bgetElementById\s*\(\s*["']([^"']+)["']/gu).map((value) => `#${value}`),
94
+ ];
95
+ return [
96
+ listLine("module references", unique(modules)),
97
+ listLine("DOM selectors", unique(selectors)),
98
+ ].filter((line) => line !== undefined);
99
+ }
100
+ function genericReferences(path, content) {
101
+ const extension = extname(path).toLowerCase();
102
+ if ([".c", ".cc", ".cpp", ".h", ".hpp"].includes(extension)) {
103
+ return [listLine("includes", unique(matches(content, /^\s*#\s*include\s*["<]([^">]+)[">]/gmu)))]
104
+ .filter((line) => line !== undefined);
105
+ }
106
+ if (extension === ".py") {
107
+ const imports = [
108
+ ...matches(content, /^\s*from\s+([A-Za-z0-9_.]+)\s+import/gmu),
109
+ ...matches(content, /^\s*import\s+([A-Za-z0-9_.]+)/gmu),
110
+ ];
111
+ return [listLine("imports", unique(imports))]
112
+ .filter((line) => line !== undefined);
113
+ }
114
+ return [];
115
+ }
116
+ function jsonManifestContract(path, content) {
117
+ if (basename(path) !== "package.json")
118
+ return [];
119
+ try {
120
+ const parsed = JSON.parse(content);
121
+ const dependencies = ["dependencies", "devDependencies", "peerDependencies"]
122
+ .flatMap((key) => {
123
+ const value = parsed[key];
124
+ return typeof value === "object" && value !== null && !Array.isArray(value)
125
+ ? Object.keys(value)
126
+ : [];
127
+ });
128
+ const scripts = typeof parsed.scripts === "object" && parsed.scripts !== null && !Array.isArray(parsed.scripts)
129
+ ? Object.keys(parsed.scripts)
130
+ : [];
131
+ return [
132
+ typeof parsed.type === "string" ? `module type: ${oneLine(parsed.type, 40)}` : undefined,
133
+ listLine("dependencies", unique(dependencies)),
134
+ listLine("script names", unique(scripts)),
135
+ ].filter((line) => line !== undefined);
136
+ }
137
+ catch {
138
+ return [];
139
+ }
140
+ }
141
+ /** Extract a bounded interface/relationship summary without executing source. */
142
+ export function compactFileContract(path, content) {
143
+ if (scanSecrets(content).length > 0)
144
+ return "";
145
+ const extension = extname(path).toLowerCase();
146
+ const details = extension === ".html" || extension === ".htm"
147
+ ? htmlContract(content)
148
+ : extension === ".css"
149
+ ? cssContract(content)
150
+ : [".ts", ".tsx", ".mts", ".cts", ".js", ".jsx", ".mjs", ".cjs"].includes(extension)
151
+ ? javascriptContract(content)
152
+ : extension === ".json"
153
+ ? jsonManifestContract(path, content)
154
+ : genericReferences(path, content);
155
+ const declarations = extractStaticFileMemory(path, content)
156
+ .slice(0, MAX_CONTRACT_ITEMS)
157
+ .map((entry) => oneLine(entry.code, 220));
158
+ const lines = [
159
+ ...details,
160
+ ...(declarations.length > 0 ? [`declarations: ${declarations.join(" | ")}`] : []),
161
+ ];
162
+ const rendered = lines.join("\n");
163
+ return rendered.length <= MAX_CONTRACT_CHARS
164
+ ? rendered
165
+ : `${rendered.slice(0, MAX_CONTRACT_CHARS - 1)}…`;
166
+ }
167
+ //# sourceMappingURL=project-contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-contracts.js","sourceRoot":"","sources":["../../../src/agents/direct/project-contracts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { ConversionUnit, ProjectMemoryProvider } from "./types.ts";
2
+ export interface ProjectMemoryOptions {
3
+ /** Reuse discovery's already-bounded walk instead of walking the tree twice. */
4
+ scannedPaths?: readonly string[];
5
+ /** Exact names omitted by operator policy. */
6
+ ignoredNames?: readonly string[];
7
+ /** Project-relative files or directories forbidden from outbound context. */
8
+ excludedPaths?: readonly string[];
9
+ /** Maximum file size eligible for static contract extraction. */
10
+ maxFileBytes?: number;
11
+ /** Hard cap on source files read for compact contracts. */
12
+ maxContractFiles?: number;
13
+ /** Hard cap for one rendered ProjectMemory block. */
14
+ renderCharLimit?: number;
15
+ }
16
+ export interface PlannedProjectFile {
17
+ path: string;
18
+ sourcePaths: string[];
19
+ language: string;
20
+ purposes: string[];
21
+ created: boolean;
22
+ }
23
+ /** Shared project-level memory updated after every accepted generation. */
24
+ export declare class ProjectMemory implements ProjectMemoryProvider {
25
+ #private;
26
+ readonly root: string;
27
+ readonly currentFiles: readonly string[];
28
+ readonly projectedFiles: readonly string[];
29
+ constructor(input: {
30
+ root: string;
31
+ currentFiles: readonly string[];
32
+ planned: ReadonlyMap<string, PlannedProjectFile>;
33
+ existingContracts: ReadonlyMap<string, string>;
34
+ contextExcludedTargets: ReadonlySet<string>;
35
+ renderCharLimit: number;
36
+ });
37
+ remember(unit: ConversionUnit, code: string): void;
38
+ renderFor(unit: ConversionUnit, requestedBudget?: number): string;
39
+ }
40
+ /** Build one immutable current/projected inventory plus compact current contracts. */
41
+ export declare function buildProjectMemory(root: string, units: readonly ConversionUnit[], options?: ProjectMemoryOptions): Promise<ProjectMemory>;
42
+ //# sourceMappingURL=project-memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-memory.d.ts","sourceRoot":"","sources":["../../../src/agents/direct/project-memory.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAYxE,MAAM,WAAW,oBAAoB;IACnC,gFAAgF;IAChF,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,8CAA8C;IAC9C,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,6EAA6E;IAC7E,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,iEAAiE;IACjE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qDAAqD;IACrD,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AAiKD,2EAA2E;AAC3E,qBAAa,aAAc,YAAW,qBAAqB;;IACzD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;gBAgB/B,KAAK,EAAE;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;QAChC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;QACjD,iBAAiB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/C,sBAAsB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QAC5C,eAAe,EAAE,MAAM,CAAC;KACzB;IAuCD,QAAQ,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAgElD,SAAS,CAAC,IAAI,EAAE,cAAc,EAAE,eAAe,SAAwB,GAAG,MAAM;CA8EjF;AA6CD,sFAAsF;AACtF,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,SAAS,cAAc,EAAE,EAChC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,aAAa,CAAC,CA6DxB"}