human-to-code 0.1.13 → 0.1.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Readme.md +21 -43
- package/SECURITY.md +16 -1
- package/dist/agents/direct/application.d.ts +10 -0
- package/dist/agents/direct/application.d.ts.map +1 -0
- package/dist/agents/direct/application.js +51 -0
- package/dist/agents/direct/application.js.map +1 -0
- package/dist/agents/direct/candidate-validation.d.ts +8 -0
- package/dist/agents/direct/candidate-validation.d.ts.map +1 -0
- package/dist/agents/direct/candidate-validation.js +125 -0
- package/dist/agents/direct/candidate-validation.js.map +1 -0
- package/dist/agents/direct/declarations.d.ts +3 -0
- package/dist/agents/direct/declarations.d.ts.map +1 -0
- package/dist/agents/direct/declarations.js +36 -0
- package/dist/agents/direct/declarations.js.map +1 -0
- package/dist/agents/direct/discovery.d.ts +6 -0
- package/dist/agents/direct/discovery.d.ts.map +1 -0
- package/dist/agents/direct/discovery.js +144 -0
- package/dist/agents/direct/discovery.js.map +1 -0
- package/dist/agents/direct/file-memory.d.ts +20 -0
- package/dist/agents/direct/file-memory.d.ts.map +1 -0
- package/dist/agents/direct/file-memory.js +170 -0
- package/dist/agents/direct/file-memory.js.map +1 -0
- package/dist/agents/direct/generation-client.d.ts +4 -0
- package/dist/agents/direct/generation-client.d.ts.map +1 -0
- package/dist/agents/direct/generation-client.js +56 -0
- package/dist/agents/direct/generation-client.js.map +1 -0
- package/dist/agents/direct/index.d.ts +13 -0
- package/dist/agents/direct/index.d.ts.map +1 -0
- package/dist/agents/direct/index.js +13 -0
- package/dist/agents/direct/index.js.map +1 -0
- package/dist/agents/direct/languages.d.ts +5 -0
- package/dist/agents/direct/languages.d.ts.map +1 -0
- package/dist/agents/direct/languages.js +17 -0
- package/dist/agents/direct/languages.js.map +1 -0
- package/dist/agents/direct/marker-parser.d.ts +8 -0
- package/dist/agents/direct/marker-parser.d.ts.map +1 -0
- package/dist/agents/direct/marker-parser.js +83 -0
- package/dist/agents/direct/marker-parser.js.map +1 -0
- package/dist/agents/direct/presentation.d.ts +7 -0
- package/dist/agents/direct/presentation.d.ts.map +1 -0
- package/dist/agents/direct/presentation.js +42 -0
- package/dist/agents/direct/presentation.js.map +1 -0
- package/dist/agents/direct/replacement.d.ts +10 -0
- package/dist/agents/direct/replacement.d.ts.map +1 -0
- package/dist/agents/direct/replacement.js +19 -0
- package/dist/agents/direct/replacement.js.map +1 -0
- package/dist/agents/direct/types.d.ts +87 -0
- package/dist/agents/direct/types.d.ts.map +1 -0
- package/dist/agents/direct/types.js +2 -0
- package/dist/agents/direct/types.js.map +1 -0
- package/dist/agents/guided/api-grounding.d.ts +6 -0
- package/dist/agents/guided/api-grounding.d.ts.map +1 -0
- package/dist/agents/guided/api-grounding.js +158 -0
- package/dist/agents/guided/api-grounding.js.map +1 -0
- package/dist/agents/guided/index.d.ts +7 -0
- package/dist/agents/guided/index.d.ts.map +1 -0
- package/dist/agents/guided/index.js +7 -0
- package/dist/agents/guided/index.js.map +1 -0
- package/dist/agents/guided/patch-diff.d.ts +4 -0
- package/dist/agents/guided/patch-diff.d.ts.map +1 -0
- package/dist/agents/guided/patch-diff.js +31 -0
- package/dist/agents/guided/patch-diff.js.map +1 -0
- package/dist/agents/guided/types.d.ts +55 -0
- package/dist/agents/guided/types.d.ts.map +1 -0
- package/dist/agents/guided/types.js +2 -0
- package/dist/agents/guided/types.js.map +1 -0
- package/dist/agents/guided/workflow.d.ts +17 -0
- package/dist/agents/guided/workflow.d.ts.map +1 -0
- package/dist/agents/guided/workflow.js +1360 -0
- package/dist/agents/guided/workflow.js.map +1 -0
- package/dist/agents/guided/workspace-policy.d.ts +9 -0
- package/dist/agents/guided/workspace-policy.d.ts.map +1 -0
- package/dist/agents/guided/workspace-policy.js +83 -0
- package/dist/agents/guided/workspace-policy.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +22 -61
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/pipeline/file-memory.d.ts.map +1 -1
- package/dist/pipeline/file-memory.js +42 -1
- package/dist/pipeline/file-memory.js.map +1 -1
- package/dist/pipeline/simple.d.ts +3 -160
- package/dist/pipeline/simple.d.ts.map +1 -1
- package/dist/pipeline/simple.js +3 -502
- package/dist/pipeline/simple.js.map +1 -1
- package/dist/pipeline/workflow.d.ts +5 -66
- package/dist/pipeline/workflow.d.ts.map +1 -1
- package/dist/pipeline/workflow.js +5 -1642
- package/dist/pipeline/workflow.js.map +1 -1
- package/dist/prompts/direct-conversion.d.ts +13 -0
- package/dist/prompts/direct-conversion.d.ts.map +1 -0
- package/dist/prompts/direct-conversion.js +35 -0
- package/dist/prompts/direct-conversion.js.map +1 -0
- package/dist/prompts/guided-patch.d.ts +14 -0
- package/dist/prompts/guided-patch.d.ts.map +1 -0
- package/dist/prompts/guided-patch.js +41 -0
- package/dist/prompts/guided-patch.js.map +1 -0
- package/dist/prompts/guided-repair.d.ts +12 -0
- package/dist/prompts/guided-repair.d.ts.map +1 -0
- package/dist/prompts/guided-repair.js +30 -0
- package/dist/prompts/guided-repair.js.map +1 -0
- package/dist/prompts/index.d.ts +6 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +6 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/provider-output.d.ts +4 -0
- package/dist/prompts/provider-output.d.ts.map +1 -0
- package/dist/prompts/provider-output.js +12 -0
- package/dist/prompts/provider-output.js.map +1 -0
- package/dist/providers/providers.d.ts.map +1 -1
- package/dist/providers/providers.js +2 -10
- package/dist/providers/providers.js.map +1 -1
- package/docs/ARCHITECTURE.md +42 -35
- package/docs/MODULES.md +51 -11
- package/docs/SCALABILITY.md +11 -9
- package/docs/roadmap/README.md +3 -2
- package/docs/roadmap/ruby.md +3 -4
- package/package.json +5 -8
- package/dist/pipeline/agent-tools.d.ts +0 -348
- package/dist/pipeline/agent-tools.d.ts.map +0 -1
- package/dist/pipeline/agent-tools.js +0 -542
- package/dist/pipeline/agent-tools.js.map +0 -1
- package/dist/pipeline/agent-tui.d.ts +0 -15
- package/dist/pipeline/agent-tui.d.ts.map +0 -1
- package/dist/pipeline/agent-tui.js +0 -133
- package/dist/pipeline/agent-tui.js.map +0 -1
- package/dist/pipeline/deep-agent.d.ts +0 -61
- package/dist/pipeline/deep-agent.d.ts.map +0 -1
- package/dist/pipeline/deep-agent.js +0 -395
- package/dist/pipeline/deep-agent.js.map +0 -1
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
/** ANSI terminal dashboard for live deep-agent todos, activity, and diffs. */
|
|
2
|
-
const ANSI = /\u001b\[[0-9;?]*[ -/]*[@-~]/gu;
|
|
3
|
-
function visibleLength(value) {
|
|
4
|
-
return value.replace(ANSI, "").length;
|
|
5
|
-
}
|
|
6
|
-
function truncate(value, width) {
|
|
7
|
-
if (width < 2)
|
|
8
|
-
return "";
|
|
9
|
-
const plain = value.replace(ANSI, "");
|
|
10
|
-
if (plain.length <= width)
|
|
11
|
-
return value;
|
|
12
|
-
return `${plain.slice(0, width - 1)}…`;
|
|
13
|
-
}
|
|
14
|
-
function pad(value, width) {
|
|
15
|
-
const clipped = truncate(value, width);
|
|
16
|
-
return `${clipped}${" ".repeat(Math.max(0, width - visibleLength(clipped)))}`;
|
|
17
|
-
}
|
|
18
|
-
function wrap(value, width) {
|
|
19
|
-
if (width < 2)
|
|
20
|
-
return [""];
|
|
21
|
-
const clean = value.replaceAll("\t", " ");
|
|
22
|
-
if (clean.length === 0)
|
|
23
|
-
return [""];
|
|
24
|
-
const result = [];
|
|
25
|
-
for (let offset = 0; offset < clean.length; offset += width)
|
|
26
|
-
result.push(clean.slice(offset, offset + width));
|
|
27
|
-
return result;
|
|
28
|
-
}
|
|
29
|
-
function todoLine(todo) {
|
|
30
|
-
const icon = todo.status === "completed" ? "✓" : todo.status === "in_progress" ? "●" : "○";
|
|
31
|
-
return `${icon} ${todo.content}`;
|
|
32
|
-
}
|
|
33
|
-
function colorActivity(line, color) {
|
|
34
|
-
if (!color)
|
|
35
|
-
return line;
|
|
36
|
-
if (line.startsWith("+"))
|
|
37
|
-
return `\u001b[32m${line}\u001b[0m`;
|
|
38
|
-
if (line.startsWith("-"))
|
|
39
|
-
return `\u001b[31m${line}\u001b[0m`;
|
|
40
|
-
if (line.startsWith("→") || line.startsWith("$"))
|
|
41
|
-
return `\u001b[36m${line}\u001b[0m`;
|
|
42
|
-
if (line.startsWith("!"))
|
|
43
|
-
return `\u001b[33m${line}\u001b[0m`;
|
|
44
|
-
return line;
|
|
45
|
-
}
|
|
46
|
-
export function renderAgentTui(state, width = 100, height = 30, color = true) {
|
|
47
|
-
const safeWidth = Math.max(50, width);
|
|
48
|
-
const safeHeight = Math.max(12, height);
|
|
49
|
-
const leftWidth = Math.max(22, Math.min(38, Math.floor(safeWidth * 0.34)));
|
|
50
|
-
const rightWidth = safeWidth - leftWidth - 3;
|
|
51
|
-
const bodyHeight = safeHeight - 4;
|
|
52
|
-
const todoRows = state.todos.length > 0 ? state.todos.flatMap((todo) => wrap(todoLine(todo), leftWidth)) : ["○ Waiting for plan"];
|
|
53
|
-
const activityRows = state.activity.flatMap((line) => wrap(line, rightWidth)).slice(-bodyHeight);
|
|
54
|
-
const top = `┌${"─".repeat(leftWidth + 1)}┬${"─".repeat(rightWidth + 1)}┐`;
|
|
55
|
-
const heading = `│ ${pad("TODOS", leftWidth)}│ ${pad("ACTIVITY / DIFF", rightWidth)}│`;
|
|
56
|
-
const divider = `├${"─".repeat(leftWidth + 1)}┼${"─".repeat(rightWidth + 1)}┤`;
|
|
57
|
-
const rows = [truncate(state.title, safeWidth), top, heading, divider];
|
|
58
|
-
for (let index = 0; index < bodyHeight; index++) {
|
|
59
|
-
const left = todoRows[index] ?? "";
|
|
60
|
-
const right = colorActivity(activityRows[index] ?? "", color);
|
|
61
|
-
rows.push(`│ ${pad(left, leftWidth)}│ ${pad(right, rightWidth)}│`);
|
|
62
|
-
}
|
|
63
|
-
rows.push(`└${"─".repeat(leftWidth + 1)}┴${"─".repeat(rightWidth + 1)}┘`);
|
|
64
|
-
return rows.join("\n");
|
|
65
|
-
}
|
|
66
|
-
function compactProgress(event) {
|
|
67
|
-
if (event.kind === "plan") {
|
|
68
|
-
const current = event.todos.find((todo) => todo.status === "in_progress");
|
|
69
|
-
if (current)
|
|
70
|
-
console.log(` [~] ${current.content}`);
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
if (event.kind === "tool")
|
|
74
|
-
console.log(` → ${event.name}${event.detail ? ` ${event.detail}` : ""}`);
|
|
75
|
-
else if (event.kind === "output")
|
|
76
|
-
console.log(` ${event.name}: ${event.text.split("\n")[0] ?? ""}`);
|
|
77
|
-
else if (event.kind === "diff") {
|
|
78
|
-
console.log(` Δ ${event.path}`);
|
|
79
|
-
for (const line of event.lines.slice(0, 20))
|
|
80
|
-
console.log(` ${line.kind === "add" ? "+" : line.kind === "remove" ? "-" : " "} ${line.text}`);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
export function createAgentTerminal(title, stream = process.stdout) {
|
|
84
|
-
const interactive = stream.isTTY === true;
|
|
85
|
-
const state = { todos: [], activity: [], title };
|
|
86
|
-
let closed = false;
|
|
87
|
-
const render = () => {
|
|
88
|
-
if (!interactive || closed)
|
|
89
|
-
return;
|
|
90
|
-
stream.write(`\u001b[H\u001b[2J${renderAgentTui(state, stream.columns ?? 100, stream.rows ?? 30, true)}`);
|
|
91
|
-
};
|
|
92
|
-
const onResize = () => render();
|
|
93
|
-
if (interactive) {
|
|
94
|
-
stream.write("\u001b[?1049h\u001b[?25l");
|
|
95
|
-
stream.on("resize", onResize);
|
|
96
|
-
render();
|
|
97
|
-
}
|
|
98
|
-
return {
|
|
99
|
-
progress(event) {
|
|
100
|
-
if (!interactive) {
|
|
101
|
-
compactProgress(event);
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
if (event.kind === "plan")
|
|
105
|
-
state.todos = event.todos.map((todo) => ({ ...todo }));
|
|
106
|
-
else if (event.kind === "tool")
|
|
107
|
-
state.activity.push(`→ ${event.name}${event.detail ? ` ${event.detail}` : ""}`);
|
|
108
|
-
else if (event.kind === "output") {
|
|
109
|
-
state.activity.push(`${event.name}:`);
|
|
110
|
-
state.activity.push(...event.text.split("\n").slice(-12).map((line) => ` ${line}`));
|
|
111
|
-
}
|
|
112
|
-
else if (event.kind === "diff") {
|
|
113
|
-
state.activity.push(`Δ ${event.path}`);
|
|
114
|
-
state.activity.push(...event.lines.map((line) => `${line.kind === "add" ? "+" : line.kind === "remove" ? "-" : " "} ${line.text}`));
|
|
115
|
-
}
|
|
116
|
-
else if (event.kind === "assistant")
|
|
117
|
-
state.activity.push(`✓ ${event.text}`);
|
|
118
|
-
if (state.activity.length > 500)
|
|
119
|
-
state.activity.splice(0, state.activity.length - 500);
|
|
120
|
-
render();
|
|
121
|
-
},
|
|
122
|
-
stop() {
|
|
123
|
-
if (closed)
|
|
124
|
-
return;
|
|
125
|
-
closed = true;
|
|
126
|
-
if (interactive) {
|
|
127
|
-
stream.off("resize", onResize);
|
|
128
|
-
stream.write(`\u001b[?25h\u001b[?1049l${renderAgentTui(state, stream.columns ?? 100, stream.rows ?? 30, true)}\n`);
|
|
129
|
-
}
|
|
130
|
-
},
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
//# sourceMappingURL=agent-tui.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-tui.js","sourceRoot":"","sources":["../../src/pipeline/agent-tui.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
/** Tool-rich, bounded agent orchestration for the direct conversion flow. */
|
|
2
|
-
import type { BaseChatModel } from "@langchain/core/language_models/chat_models";
|
|
3
|
-
import { type AgentDiffLine } from "./agent-tools.ts";
|
|
4
|
-
import { type ConversionUnit } from "./simple.ts";
|
|
5
|
-
export interface DeepAgentModelOptions {
|
|
6
|
-
provider: string;
|
|
7
|
-
model: string;
|
|
8
|
-
baseUrl?: string;
|
|
9
|
-
apiKey?: string;
|
|
10
|
-
}
|
|
11
|
-
export interface DeepAgentRunOptions extends DeepAgentModelOptions {
|
|
12
|
-
root: string;
|
|
13
|
-
language: string;
|
|
14
|
-
units: readonly ConversionUnit[];
|
|
15
|
-
model_override?: BaseChatModel;
|
|
16
|
-
recursionLimit?: number;
|
|
17
|
-
onProgress?: (event: DeepAgentProgress) => void;
|
|
18
|
-
signal?: AbortSignal;
|
|
19
|
-
}
|
|
20
|
-
export interface DeepAgentTodo {
|
|
21
|
-
id?: string;
|
|
22
|
-
content: string;
|
|
23
|
-
status: string;
|
|
24
|
-
}
|
|
25
|
-
export type DeepAgentProgress = {
|
|
26
|
-
kind: "plan";
|
|
27
|
-
todos: DeepAgentTodo[];
|
|
28
|
-
} | {
|
|
29
|
-
kind: "tool";
|
|
30
|
-
name: string;
|
|
31
|
-
detail?: string;
|
|
32
|
-
} | {
|
|
33
|
-
kind: "output";
|
|
34
|
-
name: string;
|
|
35
|
-
text: string;
|
|
36
|
-
} | {
|
|
37
|
-
kind: "diff";
|
|
38
|
-
path: string;
|
|
39
|
-
lines: AgentDiffLine[];
|
|
40
|
-
} | {
|
|
41
|
-
kind: "assistant";
|
|
42
|
-
text: string;
|
|
43
|
-
};
|
|
44
|
-
export type DeepAgentStopReason = "model" | "worklist_complete";
|
|
45
|
-
export interface DeepAgentRunResult {
|
|
46
|
-
todos: DeepAgentTodo[];
|
|
47
|
-
messageCount: number;
|
|
48
|
-
toolCount: number;
|
|
49
|
-
summary: string;
|
|
50
|
-
stopReason: DeepAgentStopReason;
|
|
51
|
-
}
|
|
52
|
-
export declare class DeepAgentIncompleteError extends Error {
|
|
53
|
-
readonly code: "INCOMPLETE" | "TOOL_LOOP" | "STEP_LIMIT";
|
|
54
|
-
constructor(code: DeepAgentIncompleteError["code"], message: string);
|
|
55
|
-
}
|
|
56
|
-
export declare const AGENT_TOOL_NAMES: readonly string[];
|
|
57
|
-
export declare function agentSystemPrompt(languageLabel: string): string;
|
|
58
|
-
export declare function buildDeepAgentModel(options: DeepAgentModelOptions): Promise<BaseChatModel>;
|
|
59
|
-
export declare function buildDeepAgent(options: DeepAgentRunOptions): Promise<import("langchain").ReactAgent<import("langchain").AgentTypeConfig<Record<string, any>, import("@langchain/langgraph").StateDefinitionInit | undefined, import("@langchain/core/utils/types").InteropZodObject | import("langchain").AnyAnnotationRoot, readonly import("langchain").AnyAgentMiddleware[], readonly (import("@langchain/core/tools").ClientTool | import("@langchain/core/tools").ServerTool)[], readonly (() => import("@langchain/langgraph").StreamTransformer<any>)[]>>>;
|
|
60
|
-
export declare function runDeepAgentConversion(options: DeepAgentRunOptions): Promise<DeepAgentRunResult>;
|
|
61
|
-
//# sourceMappingURL=deep-agent.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"deep-agent.d.ts","sourceRoot":"","sources":["../../src/pipeline/deep-agent.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAK7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAEjF,OAAO,EAGL,KAAK,aAAa,EAEnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAyC,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAEzF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAoB,SAAQ,qBAAqB;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IACjC,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAChD,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,aAAa,EAAE,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,aAAa,EAAE,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,mBAAmB,CAAC;AAEhE,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,mBAAmB,CAAC;CACjC;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,WAAW,GAAG,YAAY,CAAC;gBAE7C,IAAI,EAAE,wBAAwB,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM;CAKpE;AAED,eAAO,MAAM,gBAAgB,mBAAiD,CAAC;AAE/E,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CA8B/D;AA+BD,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC,CAsBhG;AAkGD,wBAAsB,cAAc,CAAC,OAAO,EAAE,mBAAmB,weAEhE;AAgGD,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA8GtG"}
|
|
@@ -1,395 +0,0 @@
|
|
|
1
|
-
/** Tool-rich, bounded agent orchestration for the direct conversion flow. */
|
|
2
|
-
import { readFile } from "node:fs/promises";
|
|
3
|
-
import { resolve } from "node:path";
|
|
4
|
-
import { createAgent } from "langchain";
|
|
5
|
-
import { tool } from "@langchain/core/tools";
|
|
6
|
-
import { AGENT_TOOL_SCHEMAS, AgentToolRuntime, } from "./agent-tools.js";
|
|
7
|
-
import { extractInlineMarkers, languageProfile } from "./simple.js";
|
|
8
|
-
export class DeepAgentIncompleteError extends Error {
|
|
9
|
-
code;
|
|
10
|
-
constructor(code, message) {
|
|
11
|
-
super(message);
|
|
12
|
-
this.name = "DeepAgentIncompleteError";
|
|
13
|
-
this.code = code;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
export const AGENT_TOOL_NAMES = Object.freeze(Object.keys(AGENT_TOOL_SCHEMAS));
|
|
17
|
-
export function agentSystemPrompt(languageLabel) {
|
|
18
|
-
return [
|
|
19
|
-
`You are human-to-code, an interactive ${languageLabel} software-engineering agent.`,
|
|
20
|
-
"Complete the confirmed worklist by inspecting and editing the project with tools. Be concise and stop as soon as every item is implemented.",
|
|
21
|
-
"",
|
|
22
|
-
"MANDATORY WORKFLOW:",
|
|
23
|
-
"1. Call TodoWrite exactly once at the start with one todo per worklist item. Only one todo may be in_progress.",
|
|
24
|
-
"2. Call Read before Edit, MultiEdit, or overwriting an existing file with Write.",
|
|
25
|
-
"3. Use Edit for one exact replacement, MultiEdit for several replacements in one file, and Write only for a new whole-file output.",
|
|
26
|
-
"4. Use Glob/Grep/LS for discovery. Use Bash only for a necessary build, typecheck, or test command. Never use Bash to read, search, or edit files.",
|
|
27
|
-
"5. Use Task only when an item truly needs multi-step research or independent implementation. Valid subagent_type values are general-purpose, implementer, and reviewer.",
|
|
28
|
-
"6. After writing an item, immediately call TodoWrite with that item completed and the next item in_progress.",
|
|
29
|
-
"7. When all items are completed, return one short sentence with no tool call. This is the stop condition. Never continue checking completed work.",
|
|
30
|
-
"",
|
|
31
|
-
"PATH AND FILE RULES:",
|
|
32
|
-
"- Every tool path is project-rooted and starts with '/'. Example: src/app.ts is /src/app.ts.",
|
|
33
|
-
"- A whole .human file creates the sibling output named in the worklist. Never overwrite an existing output without reading it.",
|
|
34
|
-
"- An inline @human marker is replaced in place. Preserve indentation and all unrelated code.",
|
|
35
|
-
"- Reuse existing declarations. Write only real compilable code; no markdown fences or change-description comments.",
|
|
36
|
-
"- Never touch dependencies, lockfiles, VCS data, tool state, credentials, or configuration unless the worklist explicitly names a normal source configuration file.",
|
|
37
|
-
"",
|
|
38
|
-
"TOOL-CALL FORMAT FOR SMALL MODELS:",
|
|
39
|
-
"Tool arguments are JSON objects. Do not print XML or narrate a tool call.",
|
|
40
|
-
"Plan example: TodoWrite({\"todos\":[{\"id\":\"1\",\"content\":\"Implement /src/math.ts marker\",\"status\":\"in_progress\"}]})",
|
|
41
|
-
"Read example: Read({\"file_path\":\"/src/math.ts\"})",
|
|
42
|
-
"Inline edit example: Edit({\"file_path\":\"/src/math.ts\",\"old_string\":\"// @human add two numbers\",\"new_string\":\"export function add(a: number, b: number) { return a + b; }\"})",
|
|
43
|
-
"New file example: Read({\"file_path\":\"/feature.human\"}) then Write({\"file_path\":\"/feature.ts\",\"content\":\"export const feature = true;\\n\"})",
|
|
44
|
-
"Validation example: Bash({\"command\":\"npm test\",\"description\":\"Runs project tests\"})",
|
|
45
|
-
"Finish example: TodoWrite({\"todos\":[{\"id\":\"1\",\"content\":\"Implement /src/math.ts marker\",\"status\":\"completed\"}]}) then answer: Implemented the requested conversion.",
|
|
46
|
-
].join("\n");
|
|
47
|
-
}
|
|
48
|
-
function subagentSystemPrompt(type, languageLabel) {
|
|
49
|
-
const shared = [
|
|
50
|
-
`You are a focused ${languageLabel} ${type} subagent.`,
|
|
51
|
-
"Complete only the delegated task. Use project-rooted tools, preserve unrelated code, and return a concise result.",
|
|
52
|
-
"Do not delegate again. Do not touch protected, dependency, credential, VCS, or tool-state paths.",
|
|
53
|
-
];
|
|
54
|
-
if (type === "reviewer")
|
|
55
|
-
shared.push("Inspect the requested code and report concrete correctness problems. Do not edit unless the prompt explicitly asks for fixes.");
|
|
56
|
-
else if (type === "implementer")
|
|
57
|
-
shared.push("Read the relevant files, implement the requested code, and stop immediately after the necessary edit.");
|
|
58
|
-
else
|
|
59
|
-
shared.push("Research the project with Read, Glob, and Grep; edit only when the delegated prompt explicitly requests implementation.");
|
|
60
|
-
return shared.join("\n");
|
|
61
|
-
}
|
|
62
|
-
function backendPath(relativePath) {
|
|
63
|
-
return `/${relativePath.replace(/^\/+/, "")}`;
|
|
64
|
-
}
|
|
65
|
-
function taskPrompt(units, languageLabel) {
|
|
66
|
-
if (units.length === 0)
|
|
67
|
-
return `Find and convert any .human files or inline @human markers to ${languageLabel}. If none exist, say so and stop.`;
|
|
68
|
-
const worklist = units.map((unit, index) => unit.kind === "file"
|
|
69
|
-
? `${index + 1}. Whole file: Read ${backendPath(unit.sourcePath)} and create ${backendPath(unit.outputPath ?? unit.sourcePath)}. Instruction: ${unit.prompt}`
|
|
70
|
-
: `${index + 1}. Inline: Read ${backendPath(unit.sourcePath)} and replace only its @human marker. Instruction: ${unit.prompt}`).join("\n");
|
|
71
|
-
return [
|
|
72
|
-
`Convert these ${units.length} ${languageLabel} worklist item(s):`,
|
|
73
|
-
worklist,
|
|
74
|
-
"",
|
|
75
|
-
"Start with TodoWrite. Implement in order. Stop immediately after every todo is completed.",
|
|
76
|
-
].join("\n");
|
|
77
|
-
}
|
|
78
|
-
export async function buildDeepAgentModel(options) {
|
|
79
|
-
const { ChatOpenAI } = await import("@langchain/openai");
|
|
80
|
-
if (options.provider === "openai") {
|
|
81
|
-
return new ChatOpenAI({
|
|
82
|
-
model: options.model,
|
|
83
|
-
temperature: 0,
|
|
84
|
-
maxRetries: 1,
|
|
85
|
-
...(options.apiKey ? { apiKey: options.apiKey } : {}),
|
|
86
|
-
...(options.baseUrl ? { configuration: { baseURL: options.baseUrl } } : {}),
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
if (options.provider === "ollama") {
|
|
90
|
-
const root = (options.baseUrl ?? "http://localhost:11434").replace(/\/+$/u, "").replace(/\/v1$/u, "");
|
|
91
|
-
return new ChatOpenAI({
|
|
92
|
-
model: options.model,
|
|
93
|
-
temperature: 0,
|
|
94
|
-
maxRetries: 1,
|
|
95
|
-
apiKey: options.apiKey ?? "ollama",
|
|
96
|
-
configuration: { baseURL: `${root}/v1` },
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
throw new Error(`Provider '${options.provider}' has no agent chat-model binding. Use openai or ollama.`);
|
|
100
|
-
}
|
|
101
|
-
function toolDescription(name) {
|
|
102
|
-
const descriptions = {
|
|
103
|
-
Task: "Launch one stateless subagent for a complex delegated task. Supply a short description, detailed prompt, and subagent_type.",
|
|
104
|
-
Bash: "Run one bounded shell command from the project root. Use only for builds, tests, and necessary development commands; background runs return a bash_id.",
|
|
105
|
-
Glob: "Find project files using a glob pattern. Paths are project-rooted.",
|
|
106
|
-
Grep: "Search project file contents with ripgrep and optional output controls.",
|
|
107
|
-
LS: "List one project directory.",
|
|
108
|
-
ExitPlanMode: "Record that planning is complete for this already-confirmed conversion and continue implementation.",
|
|
109
|
-
Read: "Read a project file with numbered lines. Must be called before editing an existing file.",
|
|
110
|
-
Edit: "Perform one exact, unique string replacement in a file previously read.",
|
|
111
|
-
MultiEdit: "Atomically perform several exact replacements in one file previously read.",
|
|
112
|
-
Write: "Create a file or overwrite a previously read file.",
|
|
113
|
-
NotebookEdit: "Replace, insert, or delete one Jupyter notebook cell.",
|
|
114
|
-
WebFetch: "Fetch one reviewed public HTTPS URL as bounded text.",
|
|
115
|
-
TodoWrite: "Create or update the complete todo list. Use pending, in_progress, and completed statuses with one in_progress item.",
|
|
116
|
-
WebSearch: "Search the public web for current programming information with optional domain filters.",
|
|
117
|
-
BashOutput: "Read only new output from a background Bash run.",
|
|
118
|
-
KillBash: "Terminate a background Bash run by shell_id.",
|
|
119
|
-
};
|
|
120
|
-
return descriptions[name] ?? `${name} tool.`;
|
|
121
|
-
}
|
|
122
|
-
function createAgentTools(runtime, taskRunner) {
|
|
123
|
-
const handler = (name) => async (input) => {
|
|
124
|
-
if (name === "Task") {
|
|
125
|
-
if (!taskRunner)
|
|
126
|
-
return "Task delegation is disabled inside a subagent; complete the delegated work directly.";
|
|
127
|
-
return taskRunner(input);
|
|
128
|
-
}
|
|
129
|
-
if (name === "Bash")
|
|
130
|
-
return runtime.bash(input);
|
|
131
|
-
if (name === "Glob")
|
|
132
|
-
return runtime.glob(input);
|
|
133
|
-
if (name === "Grep")
|
|
134
|
-
return runtime.grep(input);
|
|
135
|
-
if (name === "LS")
|
|
136
|
-
return runtime.ls(input);
|
|
137
|
-
if (name === "ExitPlanMode")
|
|
138
|
-
return `Plan recorded: ${String(input.plan ?? "")}. Continue implementation now.`;
|
|
139
|
-
if (name === "Read")
|
|
140
|
-
return runtime.read(input);
|
|
141
|
-
if (name === "Edit")
|
|
142
|
-
return runtime.edit(input);
|
|
143
|
-
if (name === "MultiEdit")
|
|
144
|
-
return runtime.multiEdit(input);
|
|
145
|
-
if (name === "Write")
|
|
146
|
-
return runtime.write(input);
|
|
147
|
-
if (name === "NotebookEdit")
|
|
148
|
-
return runtime.notebookEdit(input);
|
|
149
|
-
if (name === "WebFetch")
|
|
150
|
-
return runtime.webFetch(input);
|
|
151
|
-
if (name === "TodoWrite")
|
|
152
|
-
return `Todo list updated (${Array.isArray(input.todos) ? input.todos.length : 0} items).`;
|
|
153
|
-
if (name === "WebSearch")
|
|
154
|
-
return runtime.webSearch(input);
|
|
155
|
-
if (name === "BashOutput")
|
|
156
|
-
return runtime.bashOutput(input);
|
|
157
|
-
if (name === "KillBash")
|
|
158
|
-
return runtime.killBash(input);
|
|
159
|
-
throw new Error(`Unsupported agent tool ${name}.`);
|
|
160
|
-
};
|
|
161
|
-
return AGENT_TOOL_NAMES.map((name) => tool(handler(name), {
|
|
162
|
-
name,
|
|
163
|
-
description: toolDescription(name),
|
|
164
|
-
schema: AGENT_TOOL_SCHEMAS[name],
|
|
165
|
-
}));
|
|
166
|
-
}
|
|
167
|
-
function messageText(message) {
|
|
168
|
-
if (!message || typeof message !== "object")
|
|
169
|
-
return "";
|
|
170
|
-
const content = message.content;
|
|
171
|
-
if (typeof content === "string")
|
|
172
|
-
return content.trim();
|
|
173
|
-
if (!Array.isArray(content))
|
|
174
|
-
return "";
|
|
175
|
-
return content.map((item) => item && typeof item === "object" && typeof item.text === "string"
|
|
176
|
-
? item.text : "").join("\n").trim();
|
|
177
|
-
}
|
|
178
|
-
async function buildAgentBundle(options) {
|
|
179
|
-
const label = languageProfile(options.language).label;
|
|
180
|
-
const model = options.model_override ?? await buildDeepAgentModel(options);
|
|
181
|
-
const activity = (event) => {
|
|
182
|
-
if (event.kind === "output")
|
|
183
|
-
options.onProgress?.({ kind: "output", name: event.name, text: event.text });
|
|
184
|
-
else
|
|
185
|
-
options.onProgress?.({ kind: "diff", path: event.path, lines: event.lines });
|
|
186
|
-
};
|
|
187
|
-
const runtime = new AgentToolRuntime({ root: options.root, onActivity: activity });
|
|
188
|
-
const taskRunner = async (input) => {
|
|
189
|
-
const type = typeof input.subagent_type === "string" ? input.subagent_type : "general-purpose";
|
|
190
|
-
const prompt = typeof input.prompt === "string" ? input.prompt : "";
|
|
191
|
-
const subagent = createAgent({
|
|
192
|
-
model,
|
|
193
|
-
tools: createAgentTools(runtime),
|
|
194
|
-
systemPrompt: subagentSystemPrompt(type, label),
|
|
195
|
-
});
|
|
196
|
-
const result = await subagent.invoke({ messages: [{ role: "user", content: prompt }] }, { recursionLimit: 48, ...(options.signal ? { signal: options.signal } : {}) });
|
|
197
|
-
const messages = Array.isArray(result.messages) ? result.messages : [];
|
|
198
|
-
return messageText(messages.at(-1)) || "Subagent completed without a written summary.";
|
|
199
|
-
};
|
|
200
|
-
const agent = createAgent({
|
|
201
|
-
model,
|
|
202
|
-
tools: createAgentTools(runtime, taskRunner),
|
|
203
|
-
systemPrompt: agentSystemPrompt(label),
|
|
204
|
-
});
|
|
205
|
-
return { agent, runtime };
|
|
206
|
-
}
|
|
207
|
-
export async function buildDeepAgent(options) {
|
|
208
|
-
return (await buildAgentBundle(options)).agent;
|
|
209
|
-
}
|
|
210
|
-
function normalizeTodos(raw) {
|
|
211
|
-
return raw.map((todo, index) => ({
|
|
212
|
-
id: typeof todo.id === "string" ? todo.id : String(index + 1),
|
|
213
|
-
content: typeof todo.content === "string" ? todo.content : String(todo.content ?? ""),
|
|
214
|
-
status: typeof todo.status === "string" ? todo.status : String(todo.status ?? "pending"),
|
|
215
|
-
}));
|
|
216
|
-
}
|
|
217
|
-
function todosFromArgs(args) {
|
|
218
|
-
if (!args || typeof args !== "object" || Array.isArray(args))
|
|
219
|
-
return undefined;
|
|
220
|
-
const raw = args.todos;
|
|
221
|
-
return Array.isArray(raw) ? normalizeTodos(raw) : undefined;
|
|
222
|
-
}
|
|
223
|
-
function toolDetail(name, args) {
|
|
224
|
-
if (!args || typeof args !== "object" || Array.isArray(args))
|
|
225
|
-
return undefined;
|
|
226
|
-
const record = args;
|
|
227
|
-
if (name.toLowerCase() === "task") {
|
|
228
|
-
const value = record.subagent_type ?? record.subagentType ?? record.description;
|
|
229
|
-
return typeof value === "string" ? value : undefined;
|
|
230
|
-
}
|
|
231
|
-
if (name === "Bash" || name === "execute") {
|
|
232
|
-
const value = record.description ?? record.command;
|
|
233
|
-
return typeof value === "string" ? value.slice(0, 100) : undefined;
|
|
234
|
-
}
|
|
235
|
-
for (const key of ["file_path", "notebook_path", "filePath", "path", "file"]) {
|
|
236
|
-
const value = record[key];
|
|
237
|
-
if (typeof value === "string" && value.length > 0)
|
|
238
|
-
return value;
|
|
239
|
-
}
|
|
240
|
-
return undefined;
|
|
241
|
-
}
|
|
242
|
-
async function captureWorklist(units) {
|
|
243
|
-
return Promise.all(units.map(async (unit) => {
|
|
244
|
-
const target = unit.kind === "file" ? resolve(dirnameFor(unit.absoluteSource), unit.outputPath?.split("/").at(-1) ?? "") : unit.absoluteSource;
|
|
245
|
-
const initial = await readFile(target, "utf8").catch(() => undefined);
|
|
246
|
-
return { unit, initial };
|
|
247
|
-
}));
|
|
248
|
-
}
|
|
249
|
-
function dirnameFor(path) {
|
|
250
|
-
return path.slice(0, Math.max(path.lastIndexOf("/"), path.lastIndexOf("\\")) + 1);
|
|
251
|
-
}
|
|
252
|
-
async function worklistComplete(root, states) {
|
|
253
|
-
if (states.length === 0)
|
|
254
|
-
return true;
|
|
255
|
-
for (const state of states) {
|
|
256
|
-
if (state.unit.kind === "file") {
|
|
257
|
-
const output = state.unit.outputPath;
|
|
258
|
-
if (!output)
|
|
259
|
-
return false;
|
|
260
|
-
const current = await readFile(resolve(root, output), "utf8").catch(() => undefined);
|
|
261
|
-
if (current === undefined || current.trim().length === 0 || current === state.initial)
|
|
262
|
-
return false;
|
|
263
|
-
continue;
|
|
264
|
-
}
|
|
265
|
-
const current = await readFile(state.unit.absoluteSource, "utf8").catch(() => undefined);
|
|
266
|
-
if (current === undefined || current === state.initial)
|
|
267
|
-
return false;
|
|
268
|
-
const markers = extractInlineMarkers(current);
|
|
269
|
-
if (markers.some((marker) => marker.prompt.trim() === state.unit.prompt.trim()))
|
|
270
|
-
return false;
|
|
271
|
-
}
|
|
272
|
-
return true;
|
|
273
|
-
}
|
|
274
|
-
function recursionFailure(error) {
|
|
275
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
276
|
-
return /recursion limit|GRAPH_RECURSION_LIMIT/iu.test(message);
|
|
277
|
-
}
|
|
278
|
-
function defaultRecursionLimit(unitCount) {
|
|
279
|
-
return Math.min(120, Math.max(40, 28 + unitCount * 12));
|
|
280
|
-
}
|
|
281
|
-
function completedTodos(todos) {
|
|
282
|
-
return todos.map((todo) => ({ ...todo, status: "completed" }));
|
|
283
|
-
}
|
|
284
|
-
export async function runDeepAgentConversion(options) {
|
|
285
|
-
const states = await captureWorklist(options.units);
|
|
286
|
-
const bundle = await buildAgentBundle(options);
|
|
287
|
-
const label = languageProfile(options.language).label;
|
|
288
|
-
const input = { messages: [{ role: "user", content: taskPrompt(options.units, label) }] };
|
|
289
|
-
const config = { recursionLimit: options.recursionLimit ?? defaultRecursionLimit(options.units.length), ...(options.signal ? { signal: options.signal } : {}) };
|
|
290
|
-
const seenMessages = new Set();
|
|
291
|
-
let todos = [];
|
|
292
|
-
let lastTodosKey = "";
|
|
293
|
-
let summary = "";
|
|
294
|
-
let messageCount = 0;
|
|
295
|
-
let toolCount = 0;
|
|
296
|
-
let lastToolSignature = "";
|
|
297
|
-
let repeatedToolCalls = 0;
|
|
298
|
-
let stopReason = "model";
|
|
299
|
-
try {
|
|
300
|
-
const stream = await bundle.agent.stream(input, { ...config, streamMode: "updates" });
|
|
301
|
-
streamLoop: for await (const chunk of stream) {
|
|
302
|
-
for (const update of Object.values(chunk)) {
|
|
303
|
-
if (!update || typeof update !== "object")
|
|
304
|
-
continue;
|
|
305
|
-
const node = update;
|
|
306
|
-
if (Array.isArray(node.todos)) {
|
|
307
|
-
const next = normalizeTodos(node.todos);
|
|
308
|
-
const key = JSON.stringify(next);
|
|
309
|
-
if (key !== lastTodosKey) {
|
|
310
|
-
lastTodosKey = key;
|
|
311
|
-
todos = next;
|
|
312
|
-
options.onProgress?.({ kind: "plan", todos: next });
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
if (Array.isArray(node.messages)) {
|
|
316
|
-
for (const raw of node.messages) {
|
|
317
|
-
const message = raw;
|
|
318
|
-
const id = typeof message.id === "string" ? message.id : undefined;
|
|
319
|
-
if (id && seenMessages.has(id))
|
|
320
|
-
continue;
|
|
321
|
-
if (id)
|
|
322
|
-
seenMessages.add(id);
|
|
323
|
-
messageCount += 1;
|
|
324
|
-
const type = typeof message.getType === "function" ? message.getType() : undefined;
|
|
325
|
-
if (type === "ai" && Array.isArray(message.tool_calls) && message.tool_calls.length > 0) {
|
|
326
|
-
for (const call of message.tool_calls) {
|
|
327
|
-
const name = typeof call.name === "string" ? call.name : "tool";
|
|
328
|
-
const signature = `${name}:${JSON.stringify(call.args ?? {})}`;
|
|
329
|
-
repeatedToolCalls = signature === lastToolSignature ? repeatedToolCalls + 1 : 1;
|
|
330
|
-
lastToolSignature = signature;
|
|
331
|
-
toolCount += 1;
|
|
332
|
-
const detail = toolDetail(name, call.args);
|
|
333
|
-
options.onProgress?.({ kind: "tool", name, ...(detail ? { detail } : {}) });
|
|
334
|
-
if (name === "TodoWrite" || name === "write_todos") {
|
|
335
|
-
const next = todosFromArgs(call.args);
|
|
336
|
-
if (next) {
|
|
337
|
-
todos = next;
|
|
338
|
-
options.onProgress?.({ kind: "plan", todos: next });
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
if (repeatedToolCalls >= 4) {
|
|
342
|
-
if (await worklistComplete(options.root, states)) {
|
|
343
|
-
stopReason = "worklist_complete";
|
|
344
|
-
summary = "Implemented every requested conversion; stopped a repeated tool loop.";
|
|
345
|
-
todos = completedTodos(todos);
|
|
346
|
-
options.onProgress?.({ kind: "plan", todos });
|
|
347
|
-
break streamLoop;
|
|
348
|
-
}
|
|
349
|
-
throw new DeepAgentIncompleteError("TOOL_LOOP", `Agent stopped after repeating the same ${name} call four times. No further project changes were attempted.`);
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
else if (type === "ai") {
|
|
354
|
-
const text = messageText(message);
|
|
355
|
-
if (text.length > 0) {
|
|
356
|
-
summary = text;
|
|
357
|
-
options.onProgress?.({ kind: "assistant", text });
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
if (toolCount > 0 && await worklistComplete(options.root, states)) {
|
|
364
|
-
stopReason = "worklist_complete";
|
|
365
|
-
summary ||= "Implemented every requested conversion.";
|
|
366
|
-
todos = completedTodos(todos);
|
|
367
|
-
options.onProgress?.({ kind: "plan", todos });
|
|
368
|
-
break;
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
catch (error) {
|
|
373
|
-
if (error instanceof DeepAgentIncompleteError)
|
|
374
|
-
throw error;
|
|
375
|
-
if (!recursionFailure(error))
|
|
376
|
-
throw error;
|
|
377
|
-
if (await worklistComplete(options.root, states)) {
|
|
378
|
-
stopReason = "worklist_complete";
|
|
379
|
-
summary = "Implemented every requested conversion before the agent step limit.";
|
|
380
|
-
todos = completedTodos(todos);
|
|
381
|
-
options.onProgress?.({ kind: "plan", todos });
|
|
382
|
-
}
|
|
383
|
-
else {
|
|
384
|
-
throw new DeepAgentIncompleteError("STEP_LIMIT", `Agent reached its bounded ${config.recursionLimit}-step limit before completing the worklist. Partial edits were left visible for review; rerun with a more capable tool-calling model.`);
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
finally {
|
|
388
|
-
await bundle.runtime.cleanup();
|
|
389
|
-
}
|
|
390
|
-
if (states.length > 0 && !await worklistComplete(options.root, states)) {
|
|
391
|
-
throw new DeepAgentIncompleteError("INCOMPLETE", "Agent stopped without completing every discovered worklist item. Partial edits were left visible for review.");
|
|
392
|
-
}
|
|
393
|
-
return { todos, messageCount, toolCount, summary, stopReason };
|
|
394
|
-
}
|
|
395
|
-
//# sourceMappingURL=deep-agent.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"deep-agent.js","sourceRoot":"","sources":["../../src/pipeline/deep-agent.ts"],"names":[],"mappings":"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"}
|