human-to-code 0.1.12 → 0.1.14

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 (111) hide show
  1. package/Readme.md +33 -45
  2. package/assets/banner.svg +9 -14
  3. package/assets/brand/social-card.svg +6 -6
  4. package/dist/agents/direct/application.d.ts +7 -0
  5. package/dist/agents/direct/application.d.ts.map +1 -0
  6. package/dist/agents/direct/application.js +30 -0
  7. package/dist/agents/direct/application.js.map +1 -0
  8. package/dist/agents/direct/discovery.d.ts +4 -0
  9. package/dist/agents/direct/discovery.d.ts.map +1 -0
  10. package/dist/agents/direct/discovery.js +101 -0
  11. package/dist/agents/direct/discovery.js.map +1 -0
  12. package/dist/agents/direct/file-memory.d.ts +20 -0
  13. package/dist/agents/direct/file-memory.d.ts.map +1 -0
  14. package/dist/agents/direct/file-memory.js +174 -0
  15. package/dist/agents/direct/file-memory.js.map +1 -0
  16. package/dist/agents/direct/generation-client.d.ts +4 -0
  17. package/dist/agents/direct/generation-client.d.ts.map +1 -0
  18. package/dist/agents/direct/generation-client.js +56 -0
  19. package/dist/agents/direct/generation-client.js.map +1 -0
  20. package/dist/agents/direct/index.d.ts +10 -0
  21. package/dist/agents/direct/index.d.ts.map +1 -0
  22. package/dist/agents/direct/index.js +10 -0
  23. package/dist/agents/direct/index.js.map +1 -0
  24. package/dist/agents/direct/languages.d.ts +5 -0
  25. package/dist/agents/direct/languages.d.ts.map +1 -0
  26. package/dist/agents/direct/languages.js +17 -0
  27. package/dist/agents/direct/languages.js.map +1 -0
  28. package/dist/agents/direct/marker-parser.d.ts +8 -0
  29. package/dist/agents/direct/marker-parser.d.ts.map +1 -0
  30. package/dist/agents/direct/marker-parser.js +68 -0
  31. package/dist/agents/direct/marker-parser.js.map +1 -0
  32. package/dist/agents/direct/presentation.d.ts +4 -0
  33. package/dist/agents/direct/presentation.d.ts.map +1 -0
  34. package/dist/agents/direct/presentation.js +28 -0
  35. package/dist/agents/direct/presentation.js.map +1 -0
  36. package/dist/agents/direct/types.d.ts +74 -0
  37. package/dist/agents/direct/types.d.ts.map +1 -0
  38. package/dist/agents/direct/types.js +2 -0
  39. package/dist/agents/direct/types.js.map +1 -0
  40. package/dist/agents/guided/api-grounding.d.ts +6 -0
  41. package/dist/agents/guided/api-grounding.d.ts.map +1 -0
  42. package/dist/agents/guided/api-grounding.js +158 -0
  43. package/dist/agents/guided/api-grounding.js.map +1 -0
  44. package/dist/agents/guided/index.d.ts +7 -0
  45. package/dist/agents/guided/index.d.ts.map +1 -0
  46. package/dist/agents/guided/index.js +7 -0
  47. package/dist/agents/guided/index.js.map +1 -0
  48. package/dist/agents/guided/patch-diff.d.ts +4 -0
  49. package/dist/agents/guided/patch-diff.d.ts.map +1 -0
  50. package/dist/agents/guided/patch-diff.js +31 -0
  51. package/dist/agents/guided/patch-diff.js.map +1 -0
  52. package/dist/agents/guided/types.d.ts +55 -0
  53. package/dist/agents/guided/types.d.ts.map +1 -0
  54. package/dist/agents/guided/types.js +2 -0
  55. package/dist/agents/guided/types.js.map +1 -0
  56. package/dist/agents/guided/workflow.d.ts +17 -0
  57. package/dist/agents/guided/workflow.d.ts.map +1 -0
  58. package/dist/agents/guided/workflow.js +1360 -0
  59. package/dist/agents/guided/workflow.js.map +1 -0
  60. package/dist/agents/guided/workspace-policy.d.ts +9 -0
  61. package/dist/agents/guided/workspace-policy.d.ts.map +1 -0
  62. package/dist/agents/guided/workspace-policy.js +83 -0
  63. package/dist/agents/guided/workspace-policy.js.map +1 -0
  64. package/dist/cli.d.ts.map +1 -1
  65. package/dist/cli.js +7 -107
  66. package/dist/cli.js.map +1 -1
  67. package/dist/index.d.ts +3 -1
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +4 -1
  70. package/dist/index.js.map +1 -1
  71. package/dist/pipeline/simple.d.ts +3 -160
  72. package/dist/pipeline/simple.d.ts.map +1 -1
  73. package/dist/pipeline/simple.js +3 -502
  74. package/dist/pipeline/simple.js.map +1 -1
  75. package/dist/pipeline/workflow.d.ts +5 -66
  76. package/dist/pipeline/workflow.d.ts.map +1 -1
  77. package/dist/pipeline/workflow.js +5 -1642
  78. package/dist/pipeline/workflow.js.map +1 -1
  79. package/dist/prompts/direct-conversion.d.ts +13 -0
  80. package/dist/prompts/direct-conversion.d.ts.map +1 -0
  81. package/dist/prompts/direct-conversion.js +35 -0
  82. package/dist/prompts/direct-conversion.js.map +1 -0
  83. package/dist/prompts/guided-patch.d.ts +14 -0
  84. package/dist/prompts/guided-patch.d.ts.map +1 -0
  85. package/dist/prompts/guided-patch.js +41 -0
  86. package/dist/prompts/guided-patch.js.map +1 -0
  87. package/dist/prompts/guided-repair.d.ts +12 -0
  88. package/dist/prompts/guided-repair.d.ts.map +1 -0
  89. package/dist/prompts/guided-repair.js +30 -0
  90. package/dist/prompts/guided-repair.js.map +1 -0
  91. package/dist/prompts/index.d.ts +6 -0
  92. package/dist/prompts/index.d.ts.map +1 -0
  93. package/dist/prompts/index.js +6 -0
  94. package/dist/prompts/index.js.map +1 -0
  95. package/dist/prompts/provider-output.d.ts +4 -0
  96. package/dist/prompts/provider-output.d.ts.map +1 -0
  97. package/dist/prompts/provider-output.js +12 -0
  98. package/dist/prompts/provider-output.js.map +1 -0
  99. package/dist/providers/providers.d.ts.map +1 -1
  100. package/dist/providers/providers.js +2 -10
  101. package/dist/providers/providers.js.map +1 -1
  102. package/docs/ARCHITECTURE.md +30 -28
  103. package/docs/MODULES.md +46 -8
  104. package/docs/SCALABILITY.md +10 -8
  105. package/docs/roadmap/README.md +1 -1
  106. package/docs/roadmap/ruby.md +1 -1
  107. package/package.json +1 -8
  108. package/dist/pipeline/deep-agent.d.ts +0 -242
  109. package/dist/pipeline/deep-agent.d.ts.map +0 -1
  110. package/dist/pipeline/deep-agent.js +0 -265
  111. package/dist/pipeline/deep-agent.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generation-client.d.ts","sourceRoot":"","sources":["../../../src/agents/direct/generation-client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,8EAA8E;AAC9E,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAkDjG"}
@@ -0,0 +1,56 @@
1
+ import { buildDirectConversionPrompt } from "../../prompts/direct-conversion.js";
2
+ import { languageProfile } from "./languages.js";
3
+ import { stripCodeFence } from "./presentation.js";
4
+ /** Send one direct-conversion request to OpenAI-compatible chat or Ollama. */
5
+ export async function generateCode(instruction, options) {
6
+ const profile = languageProfile(options.language);
7
+ const prompt = buildDirectConversionPrompt({
8
+ languageLabel: profile.label,
9
+ instruction,
10
+ inline: options.inline ?? false,
11
+ ...(options.fileMemory ? { fileMemory: options.fileMemory } : {}),
12
+ });
13
+ if (options.provider === "openai") {
14
+ const base = options.baseUrl ?? "https://api.openai.com/v1";
15
+ const response = await fetch(`${base}/chat/completions`, {
16
+ method: "POST",
17
+ headers: {
18
+ "content-type": "application/json",
19
+ ...(options.apiKey ? { authorization: `Bearer ${options.apiKey}` } : {}),
20
+ },
21
+ body: JSON.stringify({
22
+ model: options.model,
23
+ messages: [
24
+ { role: "system", content: prompt.system },
25
+ { role: "user", content: prompt.user },
26
+ ],
27
+ temperature: 0,
28
+ }),
29
+ signal: options.signal,
30
+ });
31
+ if (!response.ok)
32
+ throw new Error(`OpenAI request failed: ${response.status} ${await response.text()}`);
33
+ const data = (await response.json());
34
+ return stripCodeFence(data.choices?.[0]?.message?.content ?? "");
35
+ }
36
+ const base = options.baseUrl ?? "http://localhost:11434";
37
+ const response = await fetch(`${base.replace(/\/api\/?$/u, "")}/api/chat`, {
38
+ method: "POST",
39
+ headers: { "content-type": "application/json" },
40
+ body: JSON.stringify({
41
+ model: options.model,
42
+ stream: false,
43
+ options: { temperature: 0 },
44
+ messages: [
45
+ { role: "system", content: prompt.system },
46
+ { role: "user", content: prompt.user },
47
+ ],
48
+ }),
49
+ signal: options.signal,
50
+ });
51
+ if (!response.ok)
52
+ throw new Error(`Ollama request failed: ${response.status} ${await response.text()}`);
53
+ const data = (await response.json());
54
+ return stripCodeFence(data.message?.content ?? "");
55
+ }
56
+ //# sourceMappingURL=generation-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generation-client.js","sourceRoot":"","sources":["../../../src/agents/direct/generation-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /** Public surface of the small-model-friendly direct conversion agent. */
2
+ export * from "./types.ts";
3
+ export * from "./languages.ts";
4
+ export * from "./marker-parser.ts";
5
+ export * from "./file-memory.ts";
6
+ export * from "./discovery.ts";
7
+ export * from "./presentation.ts";
8
+ export * from "./generation-client.ts";
9
+ export * from "./application.ts";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,10 @@
1
+ /** Public surface of the small-model-friendly direct conversion agent. */
2
+ export * from "./types.js";
3
+ export * from "./languages.js";
4
+ export * from "./marker-parser.js";
5
+ export * from "./file-memory.js";
6
+ export * from "./discovery.js";
7
+ export * from "./presentation.js";
8
+ export * from "./generation-client.js";
9
+ export * from "./application.js";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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"}
@@ -0,0 +1,5 @@
1
+ import type { LanguageProfile } from "./types.ts";
2
+ /** Operator-declared config language -> output extension and prompt label. */
3
+ export declare const LANGUAGE_PROFILES: Record<string, LanguageProfile>;
4
+ export declare function languageProfile(language: string): LanguageProfile;
5
+ //# sourceMappingURL=languages.d.ts.map
@@ -0,0 +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,CAW7D,CAAC;AAEF,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAEjE"}
@@ -0,0 +1,17 @@
1
+ /** Operator-declared config language -> output extension and prompt label. */
2
+ export const LANGUAGE_PROFILES = {
3
+ typescript: { ext: "ts", label: "TypeScript" },
4
+ javascript: { ext: "js", label: "JavaScript" },
5
+ python: { ext: "py", label: "Python" },
6
+ rust: { ext: "rs", label: "Rust" },
7
+ go: { ext: "go", label: "Go" },
8
+ java: { ext: "java", label: "Java" },
9
+ ruby: { ext: "rb", label: "Ruby" },
10
+ csharp: { ext: "cs", label: "C#" },
11
+ cpp: { ext: "cpp", label: "C++" },
12
+ c: { ext: "c", label: "C" },
13
+ };
14
+ export function languageProfile(language) {
15
+ return LANGUAGE_PROFILES[language.trim().toLowerCase()] ?? { ext: "txt", label: language };
16
+ }
17
+ //# sourceMappingURL=languages.js.map
@@ -0,0 +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;CAC5B,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"}
@@ -0,0 +1,8 @@
1
+ export interface InlineMarker {
2
+ prompt: string;
3
+ start: number;
4
+ end: number;
5
+ }
6
+ /** Find every lexical `@human` comment marker with its exact character range. */
7
+ export declare function extractInlineMarkers(text: string): InlineMarker[];
8
+ //# sourceMappingURL=marker-parser.d.ts.map
@@ -0,0 +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;AA0BD,iFAAiF;AACjF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CA8CjE"}
@@ -0,0 +1,68 @@
1
+ /** Advance past a quoted region so comment-shaped text inside it stays inert. */
2
+ function endOfQuotedRegion(text, start) {
3
+ const quote = text[start];
4
+ const triple = quote !== "`" && text.startsWith(quote.repeat(3), start);
5
+ const delimiter = triple ? quote.repeat(3) : quote;
6
+ let offset = start + delimiter.length;
7
+ while (offset < text.length) {
8
+ if (text[offset] === "\\") {
9
+ offset = Math.min(offset + 2, text.length);
10
+ continue;
11
+ }
12
+ if (text.startsWith(delimiter, offset))
13
+ return offset + delimiter.length;
14
+ if (!triple && quote !== "`" && (text[offset] === "\n" || text[offset] === "\r"))
15
+ return offset;
16
+ offset += 1;
17
+ }
18
+ return text.length;
19
+ }
20
+ function lineEnd(text, start) {
21
+ const newline = text.indexOf("\n", start);
22
+ return newline === -1 ? text.length : newline;
23
+ }
24
+ /** Find every lexical `@human` comment marker with its exact character range. */
25
+ export function extractInlineMarkers(text) {
26
+ const markers = [];
27
+ let offset = 0;
28
+ while (offset < text.length) {
29
+ const character = text[offset];
30
+ if (character === "'" || character === '"' || character === "`") {
31
+ offset = endOfQuotedRegion(text, offset);
32
+ continue;
33
+ }
34
+ if (text.startsWith("//", offset)) {
35
+ const end = lineEnd(text, offset);
36
+ const match = /^[ \t]*@human\b[ \t]*([^\r]*)$/u.exec(text.slice(offset + 2, end));
37
+ const prompt = (match?.[1] ?? "").trim();
38
+ if (match && prompt.length > 0)
39
+ markers.push({ prompt, start: offset, end });
40
+ offset = end;
41
+ continue;
42
+ }
43
+ if (text.startsWith("/*", offset)) {
44
+ const close = text.indexOf("*/", offset + 2);
45
+ const end = close === -1 ? text.length : close + 2;
46
+ if (close !== -1) {
47
+ const match = /^\s*@human\b[ \t]*([\s\S]*)$/u.exec(text.slice(offset + 2, close));
48
+ const prompt = (match?.[1] ?? "").trim();
49
+ if (match && prompt.length > 0)
50
+ markers.push({ prompt, start: offset, end });
51
+ }
52
+ offset = end;
53
+ continue;
54
+ }
55
+ if (character === "#") {
56
+ const end = lineEnd(text, offset);
57
+ const match = /^[ \t]*@human\b[ \t]*([^\r]*)$/u.exec(text.slice(offset + 1, end));
58
+ const prompt = (match?.[1] ?? "").trim();
59
+ if (match && prompt.length > 0)
60
+ markers.push({ prompt, start: offset, end });
61
+ offset = end;
62
+ continue;
63
+ }
64
+ offset += 1;
65
+ }
66
+ return markers;
67
+ }
68
+ //# sourceMappingURL=marker-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marker-parser.js","sourceRoot":"","sources":["../../../src/agents/direct/marker-parser.ts"],"names":[],"mappings":"AAMA,iFAAiF;AACjF,SAAS,iBAAiB,CAAC,IAAY,EAAE,KAAa;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,KAAK,KAAK,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACxE,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACnD,IAAI,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC;IAEtC,OAAO,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;YAC1B,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3C,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC;YAAE,OAAO,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;QACzE,IAAI,CAAC,MAAM,IAAI,KAAK,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;YAAE,OAAO,MAAM,CAAC;QAChG,MAAM,IAAI,CAAC,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC;AACrB,CAAC;AAED,SAAS,OAAO,CAAC,IAAY,EAAE,KAAa;IAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1C,OAAO,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;AAChD,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,OAAO,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAE,CAAC;QAEhC,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;YAChE,MAAM,GAAG,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACzC,SAAS;QACX,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAClC,MAAM,KAAK,GAAG,iCAAiC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAClF,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACzC,IAAI,KAAK,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAC7E,MAAM,GAAG,GAAG,CAAC;YACb,SAAS;QACX,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;YACnD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;gBACjB,MAAM,KAAK,GAAG,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;gBAClF,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBACzC,IAAI,KAAK,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;oBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAC/E,CAAC;YACD,MAAM,GAAG,GAAG,CAAC;YACb,SAAS;QACX,CAAC;QAED,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAClC,MAAM,KAAK,GAAG,iCAAiC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAClF,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACzC,IAAI,KAAK,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAC7E,MAAM,GAAG,GAAG,CAAC;YACb,SAAS;QACX,CAAC;QAED,MAAM,IAAI,CAAC,CAAC;IACd,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ConversionUnit } from "./types.ts";
2
+ export declare function renderReceipt(units: readonly ConversionUnit[], provider: string, model: string, language: string): string;
3
+ export declare function stripCodeFence(output: string): string;
4
+ //# sourceMappingURL=presentation.d.ts.map
@@ -0,0 +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,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,cAAc,EAAE,EAChC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,MAAM,CAkBR;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAIrD"}
@@ -0,0 +1,28 @@
1
+ import { languageProfile } from "./languages.js";
2
+ export function renderReceipt(units, provider, model, language) {
3
+ const profile = languageProfile(language);
4
+ const lines = [
5
+ "human-to-code — conversion receipt",
6
+ "",
7
+ ` Language : ${profile.label} (.${profile.ext})`,
8
+ ` Provider : ${provider}`,
9
+ ` Model : ${model}`,
10
+ ` Engine : direct (one model request per prompt)`,
11
+ ` Requests : ${units.length}`,
12
+ "",
13
+ ];
14
+ if (units.length === 0)
15
+ lines.push(" No .human files or @human markers were found.");
16
+ else {
17
+ lines.push(" The following will be generated:");
18
+ for (const unit of units)
19
+ lines.push(` • ${unit.describe}`);
20
+ }
21
+ return `${lines.join("\n")}\n`;
22
+ }
23
+ export function stripCodeFence(output) {
24
+ const trimmed = output.trim();
25
+ const match = /^```(?:[\w.+-]+)?\s*\n?([\s\S]*?)\n?```$/u.exec(trimmed);
26
+ return (match?.[1] ?? trimmed).trim();
27
+ }
28
+ //# sourceMappingURL=presentation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation.js","sourceRoot":"","sources":["../../../src/agents/direct/presentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjD,MAAM,UAAU,aAAa,CAC3B,KAAgC,EAChC,QAAgB,EAChB,KAAa,EACb,QAAgB;IAEhB,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG;QACZ,oCAAoC;QACpC,EAAE;QACF,gBAAgB,OAAO,CAAC,KAAK,MAAM,OAAO,CAAC,GAAG,GAAG;QACjD,gBAAgB,QAAQ,EAAE;QAC1B,gBAAgB,KAAK,EAAE;QACvB,oDAAoD;QACpD,gBAAgB,KAAK,CAAC,MAAM,EAAE;QAC9B,EAAE;KACH,CAAC;IACF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;SACjF,CAAC;QACJ,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACjD,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,2CAA2C,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;AACxC,CAAC"}
@@ -0,0 +1,74 @@
1
+ import type { StaticFileMemoryEntry } from "../../pipeline/file-memory.ts";
2
+ export interface LanguageProfile {
3
+ /** Output file extension without a dot. */
4
+ ext: string;
5
+ /** Human label used in prompts. */
6
+ label: string;
7
+ }
8
+ export interface ConversionUnit {
9
+ kind: "file" | "inline";
10
+ /** Project-relative source path. */
11
+ sourcePath: string;
12
+ /** Absolute source path. */
13
+ absoluteSource: string;
14
+ /** The extracted human-language instruction. */
15
+ prompt: string;
16
+ /** For `file` units, the project-relative output path to write. */
17
+ outputPath?: string;
18
+ /** For `inline` units, the character range of the marker to replace. */
19
+ range?: {
20
+ start: number;
21
+ end: number;
22
+ };
23
+ /** 1-based source line of the marker, for progress display. */
24
+ line?: number;
25
+ /** Short human-readable description for the receipt. */
26
+ describe: string;
27
+ }
28
+ export type FileMemoryEntry = StaticFileMemoryEntry;
29
+ export interface UnitGenerationContext {
30
+ inline: boolean;
31
+ /** Static declarations and earlier replacements in this unit's file. */
32
+ fileMemory?: string;
33
+ }
34
+ export interface GeneratedConversionUnit {
35
+ unit: ConversionUnit;
36
+ code: string;
37
+ /** Set when this unit could not be generated; the others are unaffected. */
38
+ error?: string;
39
+ }
40
+ /** Live progress for one unit during a deterministic conversion run. */
41
+ export type ConversionProgress = {
42
+ kind: "start";
43
+ unit: ConversionUnit;
44
+ attempt: number;
45
+ } | {
46
+ kind: "done";
47
+ unit: ConversionUnit;
48
+ } | {
49
+ kind: "skip";
50
+ unit: ConversionUnit;
51
+ reason: string;
52
+ };
53
+ export interface GenerateUnitsOptions {
54
+ /** Extra generation attempts when a unit trips the FileMemory guard or the provider errors. */
55
+ retries?: number;
56
+ onProgress?: (event: ConversionProgress) => void;
57
+ }
58
+ export interface GenerateOptions {
59
+ language: string;
60
+ provider: string;
61
+ model: string;
62
+ baseUrl?: string;
63
+ apiKey?: string;
64
+ /** Whether this request replaces one inline @human marker. */
65
+ inline?: boolean;
66
+ /** Deterministic earlier replacements from the same file. */
67
+ fileMemory?: string;
68
+ signal?: AbortSignal;
69
+ }
70
+ export interface AppliedUnit {
71
+ unit: ConversionUnit;
72
+ writtenPath: string;
73
+ }
74
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/agents/direct/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAE3E,MAAM,WAAW,eAAe;IAC9B,2CAA2C;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;IACxB,oCAAoC;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,4BAA4B;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,eAAe,GAAG,qBAAqB,CAAC;AAEpD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wEAAwE;AACxE,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACxD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D,MAAM,WAAW,oBAAoB;IACnC,+FAA+F;IAC/F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;CAClD;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,cAAc,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/agents/direct/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import type { WorkspaceProfileV1 } from "../../analysis/analyzer.ts";
2
+ import type { ContextManifestV1 } from "../../context/context.ts";
3
+ import type { PatchSetV1 } from "../../core/contracts.ts";
4
+ /** Reject external APIs not proven by dependencies plus selected evidence. */
5
+ export declare function assertExternalApisGrounded(patch: PatchSetV1, workspaces: readonly WorkspaceProfileV1[], manifest: ContextManifestV1): void;
6
+ //# sourceMappingURL=api-grounding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-grounding.d.ts","sourceRoot":"","sources":["../../../src/agents/guided/api-grounding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AA6F1D,8EAA8E;AAC9E,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,UAAU,EACjB,UAAU,EAAE,SAAS,kBAAkB,EAAE,EACzC,QAAQ,EAAE,iBAAiB,GAC1B,IAAI,CAiEN"}
@@ -0,0 +1,158 @@
1
+ import { DocumentationError } from "../../context/documentation.js";
2
+ const PYTHON_STDLIB_MODULES = new Set([
3
+ "abc", "argparse", "asyncio", "base64", "bisect", "builtins", "calendar", "collections", "concurrent",
4
+ "contextlib", "contextvars", "copy", "csv", "dataclasses", "datetime", "decimal", "enum", "functools",
5
+ "getpass", "glob", "gzip", "hashlib", "heapq", "hmac", "html", "http", "importlib", "inspect", "io",
6
+ "itertools", "json", "logging", "math", "multiprocessing", "operator", "os", "pathlib", "pickle", "queue",
7
+ "random", "re", "secrets", "shlex", "shutil", "signal", "socket", "sqlite3", "statistics", "string",
8
+ "struct", "subprocess", "sys", "tempfile", "textwrap", "threading", "time", "tomllib", "traceback", "types", "typing",
9
+ "unittest", "urllib", "uuid", "warnings", "weakref", "xml", "zipfile", "zoneinfo",
10
+ ]);
11
+ function addedOperationText(patch) {
12
+ return patch.operations.flatMap((operation) => {
13
+ if (operation.kind === "create")
14
+ return [{ path: operation.path, text: operation.content }];
15
+ if (operation.kind !== "edit")
16
+ return [];
17
+ const before = new Set(operation.oldText.split("\n").map((line) => line.trim()));
18
+ return [{
19
+ path: operation.path,
20
+ text: operation.newText.split("\n").filter((line) => !before.has(line.trim())).join("\n"),
21
+ }];
22
+ });
23
+ }
24
+ function extractIntroducedApis(patch) {
25
+ const result = [];
26
+ for (const { path, text } of addedOperationText(patch)) {
27
+ if (/\.(?:[cm]?[jt]sx?)$/iu.test(path)) {
28
+ const imports = /import\s+(?:(\w+)\s*,?\s*)?(?:\{([^}]+)\}\s*)?from\s*["']([^"']+)["']|(?:require|import)\s*\(\s*["']([^"']+)["']\s*\)/gu;
29
+ for (const match of text.matchAll(imports)) {
30
+ const module = match[3] ?? match[4];
31
+ if (!module || module.startsWith(".") || module.startsWith("node:"))
32
+ continue;
33
+ const symbols = [
34
+ match[1] ?? "",
35
+ ...(match[2] ?? "").split(",").map((item) => item.trim().split(/\s+as\s+/u)[0] ?? ""),
36
+ ].filter(Boolean);
37
+ result.push({ module, symbols, path });
38
+ }
39
+ for (const match of text.matchAll(/(?:^|\n)\s*import\s*["']([^"']+)["']/gu)) {
40
+ if (match[1] && !match[1].startsWith(".") && !match[1].startsWith("node:")) {
41
+ result.push({ module: match[1], symbols: [], path });
42
+ }
43
+ }
44
+ for (const match of text.matchAll(/\bexport\s+(?:\*|\{([^}]+)\})\s+from\s*["']([^"']+)["']/gu)) {
45
+ const module = match[2];
46
+ if (!module || module.startsWith(".") || module.startsWith("node:"))
47
+ continue;
48
+ const symbols = (match[1] ?? "").split(",")
49
+ .map((item) => item.trim().split(/\s+as\s+/u)[0] ?? "")
50
+ .filter(Boolean);
51
+ result.push({ module, symbols, path });
52
+ }
53
+ }
54
+ else if (/\.pyi?$/iu.test(path)) {
55
+ const imports = /^(?:from\s+([A-Za-z_][\w.]*)\s+import\s+([^\n#]+)|import\s+([A-Za-z_][\w.]*)(?:\s+as\s+\w+)?)/gmu;
56
+ for (const match of text.matchAll(imports)) {
57
+ const module = (match[1] ?? match[3] ?? "").split(".")[0];
58
+ const symbols = (match[2] ?? "").split(",")
59
+ .map((item) => item.trim().split(/\s+as\s+/u)[0] ?? "")
60
+ .filter(Boolean);
61
+ result.push({ module, symbols, path });
62
+ }
63
+ }
64
+ else if (/\.rs$/iu.test(path)) {
65
+ for (const match of text.matchAll(/^use\s+([A-Za-z_][\w-]*)::([^;]+);/gmu)) {
66
+ const module = match[1];
67
+ if (["std", "core", "alloc", "crate", "self", "super"].includes(module))
68
+ continue;
69
+ const symbols = (match[2] ?? "").replace(/[{}]/gu, "").split(",")
70
+ .map((item) => item.trim().split("::").at(-1) ?? "")
71
+ .filter(Boolean);
72
+ result.push({ module, symbols, path });
73
+ }
74
+ for (const match of text.matchAll(/\bextern\s+crate\s+([A-Za-z_][\w-]*)\s*;/gu)) {
75
+ if (match[1])
76
+ result.push({ module: match[1], symbols: [], path });
77
+ }
78
+ for (const match of text.matchAll(/\b([a-z_][\w-]*)::([A-Za-z_][\w]*)/gu)) {
79
+ const module = match[1];
80
+ if (!module || ["std", "core", "alloc", "crate", "self", "super"].includes(module))
81
+ continue;
82
+ result.push({ module, symbols: match[2] ? [match[2]] : [], path });
83
+ }
84
+ }
85
+ }
86
+ return result;
87
+ }
88
+ function packageName(module) {
89
+ if (module.startsWith("@"))
90
+ return module.split("/").slice(0, 2).join("/");
91
+ return module.split("/")[0] ?? module;
92
+ }
93
+ /** Reject external APIs not proven by dependencies plus selected evidence. */
94
+ export function assertExternalApisGrounded(patch, workspaces, manifest) {
95
+ if (workspaces.length > 0 && workspaces.every((workspace) => workspace.ecosystem === "general"))
96
+ return;
97
+ const aliases = workspaces.flatMap((workspace) => Object.keys(workspace.moduleAliases));
98
+ const workspacePackages = new Set(workspaces.flatMap((workspace) => workspace.workspaceDependencies));
99
+ const dependencies = new Map();
100
+ const pythonLocalModules = new Set();
101
+ for (const workspace of workspaces) {
102
+ for (const dependency of workspace.framework.dependencies) {
103
+ dependencies.set(dependency.name.toLowerCase().replaceAll("-", "_"), dependency.name);
104
+ }
105
+ if (workspace.ecosystem !== "fastapi")
106
+ continue;
107
+ for (const sourceRoot of workspace.sourceRoots) {
108
+ const segments = sourceRoot.split("/").filter((segment) => segment !== ".");
109
+ if (segments.length > 0)
110
+ pythonLocalModules.add(segments.at(-1).toLowerCase());
111
+ const sourcePaths = [
112
+ ...workspace.entryPoints,
113
+ ...workspace.routes,
114
+ ...workspace.evidence.filter((item) => item.kind === "source").map((item) => item.path),
115
+ ];
116
+ for (const path of sourcePaths) {
117
+ if (sourceRoot !== "." && !path.startsWith(`${sourceRoot}/`))
118
+ continue;
119
+ const relativePath = sourceRoot === "." ? path : path.slice(sourceRoot.length + 1);
120
+ const top = relativePath.split("/")[0];
121
+ if (top && !top.endsWith(".py"))
122
+ pythonLocalModules.add(top.toLowerCase());
123
+ }
124
+ }
125
+ }
126
+ const groundedEvidence = manifest.evidence.filter((item) => item.origin === "official_documentation"
127
+ || item.origin === "dependency" && "path" in item
128
+ && /(?:^|\/)(?:node_modules|site-packages|vendor)\//u.test(item.path));
129
+ for (const api of extractIntroducedApis(patch)) {
130
+ if (aliases.some((alias) => api.module === alias || api.module.startsWith(`${alias}/`)))
131
+ continue;
132
+ if (workspacePackages.has(packageName(api.module)))
133
+ continue;
134
+ const normalized = packageName(api.module).toLowerCase().replaceAll("-", "_");
135
+ const dependency = dependencies.get(normalized);
136
+ if (!dependency) {
137
+ const localPython = /\.pyi?$/iu.test(api.path)
138
+ && (PYTHON_STDLIB_MODULES.has(normalized)
139
+ || pythonLocalModules.has(packageName(api.module).toLowerCase()));
140
+ if (localPython)
141
+ continue;
142
+ throw new DocumentationError("CONTEXT_INSUFFICIENT", `Introduced external module '${api.module}' is not proven by the target workspace dependency graph.`);
143
+ }
144
+ const evidence = groundedEvidence.filter((item) => item.content.toLowerCase().includes(dependency.toLowerCase().replaceAll("-", "_"))
145
+ || "path" in item && item.path.toLowerCase().includes(dependency.toLowerCase()));
146
+ if (evidence.length === 0) {
147
+ throw new DocumentationError("CONTEXT_INSUFFICIENT", `No installed source/declaration or version-matched official documentation was supplied for '${dependency}'.`);
148
+ }
149
+ for (const symbol of api.symbols) {
150
+ if (symbol === "*" || symbol.length < 2)
151
+ continue;
152
+ if (!evidence.some((item) => item.content.includes(symbol))) {
153
+ throw new DocumentationError("CONTEXT_INSUFFICIENT", `External API '${dependency}.${symbol}' was introduced without exact local or documented evidence.`);
154
+ }
155
+ }
156
+ }
157
+ }
158
+ //# sourceMappingURL=api-grounding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-grounding.js","sourceRoot":"","sources":["../../../src/agents/guided/api-grounding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /** Public surface of the reviewed, grounded, and validated guided agent. */
2
+ export * from "./workflow.ts";
3
+ export * from "./types.ts";
4
+ export * from "./workspace-policy.ts";
5
+ export * from "./patch-diff.ts";
6
+ export * from "./api-grounding.ts";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agents/guided/index.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /** Public surface of the reviewed, grounded, and validated guided agent. */
2
+ export * from "./workflow.js";
3
+ export * from "./types.js";
4
+ export * from "./workspace-policy.js";
5
+ export * from "./patch-diff.js";
6
+ export * from "./api-grounding.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agents/guided/index.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { PatchSetV1 } from "../../core/contracts.ts";
2
+ /** Render structured patch operations as a stable, review-oriented diff. */
3
+ export declare function renderPatchDiff(patch: PatchSetV1): string;
4
+ //# sourceMappingURL=patch-diff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patch-diff.d.ts","sourceRoot":"","sources":["../../../src/agents/guided/patch-diff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CA4BzD"}
@@ -0,0 +1,31 @@
1
+ /** Render structured patch operations as a stable, review-oriented diff. */
2
+ export function renderPatchDiff(patch) {
3
+ const blocks = [];
4
+ for (const operation of patch.operations) {
5
+ if (operation.kind === "rename") {
6
+ blocks.push(`rename from ${operation.from}\nrename to ${operation.path}`);
7
+ continue;
8
+ }
9
+ const before = operation.kind === "create"
10
+ ? ""
11
+ : operation.kind === "edit"
12
+ ? operation.oldText
13
+ : "[content bound by base hash; omitted from model artifact]";
14
+ const after = operation.kind === "delete"
15
+ ? ""
16
+ : operation.kind === "edit"
17
+ ? operation.newText
18
+ : operation.content;
19
+ const oldPath = operation.kind === "create" ? "/dev/null" : `a/${operation.path}`;
20
+ const newPath = operation.kind === "delete" ? "/dev/null" : `b/${operation.path}`;
21
+ blocks.push([
22
+ `--- ${oldPath}`,
23
+ `+++ ${newPath}`,
24
+ "@@ human-to-code structured operation @@",
25
+ ...before.split("\n").map((line) => `-${line}`),
26
+ ...after.split("\n").map((line) => `+${line}`),
27
+ ].join("\n"));
28
+ }
29
+ return `${blocks.join("\n\n")}\n`;
30
+ }
31
+ //# sourceMappingURL=patch-diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patch-diff.js","sourceRoot":"","sources":["../../../src/agents/guided/patch-diff.ts"],"names":[],"mappings":"AAEA,4EAA4E;AAC5E,MAAM,UAAU,eAAe,CAAC,KAAiB;IAC/C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACzC,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,eAAe,SAAS,CAAC,IAAI,eAAe,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1E,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,KAAK,QAAQ;YACxC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM;gBACzB,CAAC,CAAC,SAAS,CAAC,OAAO;gBACnB,CAAC,CAAC,2DAA2D,CAAC;QAClE,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,KAAK,QAAQ;YACvC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM;gBACzB,CAAC,CAAC,SAAS,CAAC,OAAO;gBACnB,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC;QACxB,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;QAClF,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;QAClF,MAAM,CAAC,IAAI,CAAC;YACV,OAAO,OAAO,EAAE;YAChB,OAAO,OAAO,EAAE;YAChB,0CAA0C;YAC1C,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;YAC/C,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;SAC/C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACpC,CAAC"}