human-to-code 0.1.12 → 0.1.13
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 +59 -36
- package/assets/banner.svg +9 -14
- package/assets/brand/social-card.svg +6 -6
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +18 -67
- package/dist/cli.js.map +1 -1
- package/dist/pipeline/agent-tools.d.ts +348 -0
- package/dist/pipeline/agent-tools.d.ts.map +1 -0
- package/dist/pipeline/agent-tools.js +542 -0
- package/dist/pipeline/agent-tools.js.map +1 -0
- package/dist/pipeline/agent-tui.d.ts +15 -0
- package/dist/pipeline/agent-tui.d.ts.map +1 -0
- package/dist/pipeline/agent-tui.js +133 -0
- package/dist/pipeline/agent-tui.js.map +1 -0
- package/dist/pipeline/deep-agent.d.ts +22 -203
- package/dist/pipeline/deep-agent.d.ts.map +1 -1
- package/dist/pipeline/deep-agent.js +320 -190
- package/dist/pipeline/deep-agent.js.map +1 -1
- package/docs/ARCHITECTURE.md +14 -13
- package/docs/MODULES.md +4 -2
- package/docs/SCALABILITY.md +5 -4
- package/package.json +1 -3
|
@@ -0,0 +1,133 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-tui.js","sourceRoot":"","sources":["../../src/pipeline/agent-tui.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,27 +1,7 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Deep-agent orchestration for the direct `npx human-to-code .` flow.
|
|
3
|
-
*
|
|
4
|
-
* This path runs a LangChain/LangGraph "deep agent" (via the `deepagents`
|
|
5
|
-
* harness) with the four batteries-included pillars:
|
|
6
|
-
*
|
|
7
|
-
* 1. Planning — the built-in `write_todos` tool decomposes the run.
|
|
8
|
-
* 2. File System — a real-disk `FilesystemBackend` rooted at the project
|
|
9
|
-
* gives the agent `ls`/`read_file`/`write_file`/`edit_file`/
|
|
10
|
-
* `glob`/`grep` over the working tree.
|
|
11
|
-
* 3. Sub Agents — a `planner`, `implementer`, and `reviewer` subagent are
|
|
12
|
-
* reachable through the built-in `task` tool.
|
|
13
|
-
* 4. Prompts — a task-specific system prompt for the main agent and one
|
|
14
|
-
* per subagent role.
|
|
15
|
-
*
|
|
16
|
-
* Unlike the deterministic guided pipeline, the model drives scope, file
|
|
17
|
-
* reads/writes, and delegation here. The blast radius is bounded to the project
|
|
18
|
-
* root by the backend and by deny-write filesystem permissions on sensitive
|
|
19
|
-
* paths, but this is an autonomous agent, not a hash-verified patch pipeline.
|
|
20
|
-
*/
|
|
21
|
-
import { type SubAgent } from "deepagents";
|
|
1
|
+
/** Tool-rich, bounded agent orchestration for the direct conversion flow. */
|
|
22
2
|
import type { BaseChatModel } from "@langchain/core/language_models/chat_models";
|
|
23
|
-
import type
|
|
24
|
-
|
|
3
|
+
import { type AgentDiffLine } from "./agent-tools.ts";
|
|
4
|
+
import { type ConversionUnit } from "./simple.ts";
|
|
25
5
|
export interface DeepAgentModelOptions {
|
|
26
6
|
provider: string;
|
|
27
7
|
model: string;
|
|
@@ -29,25 +9,19 @@ export interface DeepAgentModelOptions {
|
|
|
29
9
|
apiKey?: string;
|
|
30
10
|
}
|
|
31
11
|
export interface DeepAgentRunOptions extends DeepAgentModelOptions {
|
|
32
|
-
/** Absolute project root; becomes the agent filesystem root. */
|
|
33
12
|
root: string;
|
|
34
|
-
/** Operator-declared output language. */
|
|
35
13
|
language: string;
|
|
36
|
-
/** Deterministically discovered worklist, seeded into the task prompt. */
|
|
37
14
|
units: readonly ConversionUnit[];
|
|
38
|
-
/** Test/embedding seam: skip provider construction and use this model. */
|
|
39
15
|
model_override?: BaseChatModel;
|
|
40
|
-
/** Hard cap on agent graph steps so a loop cannot run unbounded. */
|
|
41
16
|
recursionLimit?: number;
|
|
42
|
-
/** Live progress sink for interactive output (planning, tool calls, delegation). */
|
|
43
17
|
onProgress?: (event: DeepAgentProgress) => void;
|
|
44
18
|
signal?: AbortSignal;
|
|
45
19
|
}
|
|
46
20
|
export interface DeepAgentTodo {
|
|
21
|
+
id?: string;
|
|
47
22
|
content: string;
|
|
48
23
|
status: string;
|
|
49
24
|
}
|
|
50
|
-
/** A live event emitted while the agent runs, for interactive rendering. */
|
|
51
25
|
export type DeepAgentProgress = {
|
|
52
26
|
kind: "plan";
|
|
53
27
|
todos: DeepAgentTodo[];
|
|
@@ -55,188 +29,33 @@ export type DeepAgentProgress = {
|
|
|
55
29
|
kind: "tool";
|
|
56
30
|
name: string;
|
|
57
31
|
detail?: string;
|
|
32
|
+
} | {
|
|
33
|
+
kind: "output";
|
|
34
|
+
name: string;
|
|
35
|
+
text: string;
|
|
36
|
+
} | {
|
|
37
|
+
kind: "diff";
|
|
38
|
+
path: string;
|
|
39
|
+
lines: AgentDiffLine[];
|
|
58
40
|
} | {
|
|
59
41
|
kind: "assistant";
|
|
60
42
|
text: string;
|
|
61
43
|
};
|
|
44
|
+
export type DeepAgentStopReason = "model" | "worklist_complete";
|
|
62
45
|
export interface DeepAgentRunResult {
|
|
63
|
-
/** Final plan the agent produced (the Planning pillar's output). */
|
|
64
46
|
todos: DeepAgentTodo[];
|
|
65
|
-
/** Number of messages exchanged in the run. */
|
|
66
47
|
messageCount: number;
|
|
67
|
-
|
|
48
|
+
toolCount: number;
|
|
68
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);
|
|
69
55
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
*
|
|
73
|
-
* Both providers use the OpenAI-compatible chat client. Ollama is reached
|
|
74
|
-
* through its `/v1` endpoint rather than `@langchain/ollama`'s native
|
|
75
|
-
* `/api/chat`: the deep-agent harness emits tool messages with structured
|
|
76
|
-
* (array) content, which the native Ollama adapter rejects, whereas the
|
|
77
|
-
* OpenAI-compatible surface serializes them correctly.
|
|
78
|
-
*/
|
|
56
|
+
export declare const AGENT_TOOL_NAMES: readonly string[];
|
|
57
|
+
export declare function agentSystemPrompt(languageLabel: string): string;
|
|
79
58
|
export declare function buildDeepAgentModel(options: DeepAgentModelOptions): Promise<BaseChatModel>;
|
|
80
|
-
|
|
81
|
-
* Build (but do not run) the deep agent. Exposed so callers and tests can
|
|
82
|
-
* inspect wiring without a live provider.
|
|
83
|
-
*/
|
|
84
|
-
export declare function buildDeepAgent(options: DeepAgentRunOptions): Promise<import("deepagents").DeepAgent<import("deepagents").DeepAgentTypeConfig<import("langchain").ResponseFormatUndefined, undefined, import("@langchain/core/utils/types").InteropZodObject, readonly [import("langchain").AgentMiddleware<import("zod/v3").ZodObject<{
|
|
85
|
-
todos: import("zod/v3").ZodDefault<import("zod/v3").ZodArray<import("zod/v3").ZodObject<{
|
|
86
|
-
content: import("zod/v3").ZodString;
|
|
87
|
-
status: import("zod/v3").ZodEnum<["pending", "in_progress", "completed"]>;
|
|
88
|
-
}, "strip", import("zod/v3").ZodTypeAny, {
|
|
89
|
-
content: string;
|
|
90
|
-
status: "completed" | "in_progress" | "pending";
|
|
91
|
-
}, {
|
|
92
|
-
content: string;
|
|
93
|
-
status: "completed" | "in_progress" | "pending";
|
|
94
|
-
}>, "many">>;
|
|
95
|
-
}, "strip", import("zod/v3").ZodTypeAny, {
|
|
96
|
-
todos: {
|
|
97
|
-
content: string;
|
|
98
|
-
status: "completed" | "in_progress" | "pending";
|
|
99
|
-
}[];
|
|
100
|
-
}, {
|
|
101
|
-
todos?: {
|
|
102
|
-
content: string;
|
|
103
|
-
status: "completed" | "in_progress" | "pending";
|
|
104
|
-
}[] | undefined;
|
|
105
|
-
}>, undefined, unknown, readonly [import("langchain").DynamicStructuredTool<import("zod/v3").ZodObject<{
|
|
106
|
-
todos: import("zod/v3").ZodArray<import("zod/v3").ZodObject<{
|
|
107
|
-
content: import("zod/v3").ZodString;
|
|
108
|
-
status: import("zod/v3").ZodEnum<["pending", "in_progress", "completed"]>;
|
|
109
|
-
}, "strip", import("zod/v3").ZodTypeAny, {
|
|
110
|
-
content: string;
|
|
111
|
-
status: "completed" | "in_progress" | "pending";
|
|
112
|
-
}, {
|
|
113
|
-
content: string;
|
|
114
|
-
status: "completed" | "in_progress" | "pending";
|
|
115
|
-
}>, "many">;
|
|
116
|
-
}, "strip", import("zod/v3").ZodTypeAny, {
|
|
117
|
-
todos: {
|
|
118
|
-
content: string;
|
|
119
|
-
status: "completed" | "in_progress" | "pending";
|
|
120
|
-
}[];
|
|
121
|
-
}, {
|
|
122
|
-
todos: {
|
|
123
|
-
content: string;
|
|
124
|
-
status: "completed" | "in_progress" | "pending";
|
|
125
|
-
}[];
|
|
126
|
-
}>, {
|
|
127
|
-
todos: {
|
|
128
|
-
content: string;
|
|
129
|
-
status: "completed" | "in_progress" | "pending";
|
|
130
|
-
}[];
|
|
131
|
-
}, {
|
|
132
|
-
todos: {
|
|
133
|
-
content: string;
|
|
134
|
-
status: "completed" | "in_progress" | "pending";
|
|
135
|
-
}[];
|
|
136
|
-
}, import("@langchain/langgraph").Command<unknown, {
|
|
137
|
-
todos: {
|
|
138
|
-
content: string;
|
|
139
|
-
status: "completed" | "in_progress" | "pending";
|
|
140
|
-
}[];
|
|
141
|
-
messages: import("langchain").ToolMessage<import("@langchain/core/messages").MessageStructure<import("@langchain/core/messages").MessageToolSet>>[];
|
|
142
|
-
}, string>, unknown, "write_todos">], readonly []>, import("langchain").AgentMiddleware<import("@langchain/langgraph").StateSchema<{
|
|
143
|
-
files: import("@langchain/langgraph").ReducedValue<{
|
|
144
|
-
[x: string]: import("deepagents").FileData;
|
|
145
|
-
} | undefined, {
|
|
146
|
-
[x: string]: import("deepagents").FileData | null;
|
|
147
|
-
} | undefined>;
|
|
148
|
-
}>, undefined, unknown, (import("langchain").DynamicStructuredTool<import("zod").ZodObject<{
|
|
149
|
-
path: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodString>>;
|
|
150
|
-
}, import("zod/v4/core").$strip>, {
|
|
151
|
-
path: string;
|
|
152
|
-
}, {
|
|
153
|
-
path?: string | undefined;
|
|
154
|
-
}, string, unknown, "ls"> | import("langchain").DynamicStructuredTool<import("zod").ZodPreprocess<import("zod").ZodObject<{
|
|
155
|
-
file_path: import("zod").ZodString;
|
|
156
|
-
offset: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodCoercedNumber<unknown>>>;
|
|
157
|
-
limit: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodCoercedNumber<unknown>>>;
|
|
158
|
-
}, import("zod/v4/core").$strip>>, {
|
|
159
|
-
file_path: string;
|
|
160
|
-
offset: number;
|
|
161
|
-
limit: number;
|
|
162
|
-
}, unknown, {
|
|
163
|
-
type: string;
|
|
164
|
-
text: string;
|
|
165
|
-
}[] | {
|
|
166
|
-
type: string;
|
|
167
|
-
mimeType: string;
|
|
168
|
-
data: string;
|
|
169
|
-
}[], unknown, "read_file"> | import("langchain").DynamicStructuredTool<import("zod").ZodPreprocess<import("zod").ZodObject<{
|
|
170
|
-
file_path: import("zod").ZodString;
|
|
171
|
-
content: import("zod").ZodDefault<import("zod").ZodString>;
|
|
172
|
-
}, import("zod/v4/core").$strip>>, {
|
|
173
|
-
file_path: string;
|
|
174
|
-
content: string;
|
|
175
|
-
}, unknown, string | import("langchain").ToolMessage<import("@langchain/core/messages").MessageStructure<import("@langchain/core/messages").MessageToolSet>> | import("@langchain/langgraph").Command<unknown, {
|
|
176
|
-
files: Record<string, import("deepagents").FileData>;
|
|
177
|
-
messages: import("langchain").ToolMessage<import("@langchain/core/messages").MessageStructure<import("@langchain/core/messages").MessageToolSet>>[];
|
|
178
|
-
}, string>, unknown, "write_file"> | import("langchain").DynamicStructuredTool<import("zod").ZodPreprocess<import("zod").ZodObject<{
|
|
179
|
-
file_path: import("zod").ZodString;
|
|
180
|
-
old_string: import("zod").ZodString;
|
|
181
|
-
new_string: import("zod").ZodString;
|
|
182
|
-
replace_all: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodBoolean>>;
|
|
183
|
-
}, import("zod/v4/core").$strip>>, {
|
|
184
|
-
file_path: string;
|
|
185
|
-
old_string: string;
|
|
186
|
-
new_string: string;
|
|
187
|
-
replace_all: boolean;
|
|
188
|
-
}, unknown, string | import("langchain").ToolMessage<import("@langchain/core/messages").MessageStructure<import("@langchain/core/messages").MessageToolSet>> | import("@langchain/langgraph").Command<unknown, {
|
|
189
|
-
files: Record<string, import("deepagents").FileData>;
|
|
190
|
-
messages: import("langchain").ToolMessage<import("@langchain/core/messages").MessageStructure<import("@langchain/core/messages").MessageToolSet>>[];
|
|
191
|
-
}, string>, unknown, "edit_file"> | import("langchain").DynamicStructuredTool<import("zod").ZodObject<{
|
|
192
|
-
pattern: import("zod").ZodString;
|
|
193
|
-
path: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodString>>;
|
|
194
|
-
}, import("zod/v4/core").$strip>, {
|
|
195
|
-
pattern: string;
|
|
196
|
-
path: string;
|
|
197
|
-
}, {
|
|
198
|
-
pattern: string;
|
|
199
|
-
path?: string | undefined;
|
|
200
|
-
}, string, unknown, "glob"> | import("langchain").DynamicStructuredTool<import("zod").ZodObject<{
|
|
201
|
-
pattern: import("zod").ZodString;
|
|
202
|
-
path: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodString>>;
|
|
203
|
-
glob: import("zod").ZodDefault<import("zod").ZodNullable<import("zod").ZodOptional<import("zod").ZodString>>>;
|
|
204
|
-
}, import("zod/v4/core").$strip>, {
|
|
205
|
-
pattern: string;
|
|
206
|
-
path: string;
|
|
207
|
-
glob: string | null;
|
|
208
|
-
}, {
|
|
209
|
-
pattern: string;
|
|
210
|
-
path?: string | undefined;
|
|
211
|
-
glob?: string | null | undefined;
|
|
212
|
-
}, string, unknown, "grep"> | import("langchain").DynamicStructuredTool<import("zod").ZodObject<{
|
|
213
|
-
command: import("zod").ZodString;
|
|
214
|
-
}, import("zod/v4/core").$strip>, {
|
|
215
|
-
command: string;
|
|
216
|
-
}, {
|
|
217
|
-
command: string;
|
|
218
|
-
}, string, unknown, "execute">)[], readonly []>, import("langchain").AgentMiddleware<undefined, undefined, unknown, readonly [import("langchain").DynamicStructuredTool<import("zod").ZodObject<{
|
|
219
|
-
description: import("zod").ZodString;
|
|
220
|
-
subagent_type: import("zod").ZodString;
|
|
221
|
-
}, import("zod/v4/core").$strip>, {
|
|
222
|
-
description: string;
|
|
223
|
-
subagent_type: string;
|
|
224
|
-
}, {
|
|
225
|
-
description: string;
|
|
226
|
-
subagent_type: string;
|
|
227
|
-
}, string | import("@langchain/langgraph").Command<unknown, Record<string, unknown>, string>, unknown, "task">], readonly []>, import("langchain").AgentMiddleware<import("zod").ZodObject<{
|
|
228
|
-
_summarizationSessionId: import("zod").ZodOptional<import("zod").ZodString>;
|
|
229
|
-
_summarizationEvent: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
230
|
-
cutoffIndex: import("zod").ZodNumber;
|
|
231
|
-
summaryMessage: import("zod").ZodCustom<import("langchain").HumanMessage<import("@langchain/core/messages").MessageStructure<import("@langchain/core/messages").MessageToolSet>>, import("langchain").HumanMessage<import("@langchain/core/messages").MessageStructure<import("@langchain/core/messages").MessageToolSet>>>;
|
|
232
|
-
filePath: import("zod").ZodNullable<import("zod").ZodString>;
|
|
233
|
-
}, import("zod/v4/core").$strip>>;
|
|
234
|
-
}, import("zod/v4/core").$strip>, undefined, unknown, readonly (import("@langchain/core/tools").ClientTool | import("@langchain/core/tools").ServerTool)[], readonly []>, import("langchain").AgentMiddleware<undefined, undefined, unknown, readonly (import("@langchain/core/tools").ClientTool | import("@langchain/core/tools").ServerTool)[], readonly []>, ...import("langchain").AgentMiddleware<any, any, any, readonly (import("@langchain/core/tools").ClientTool | import("@langchain/core/tools").ServerTool)[], readonly (() => import("@langchain/langgraph").StreamTransformer<any>)[]>[]], readonly [], readonly [SubAgent, SubAgent, SubAgent], readonly []>>>;
|
|
235
|
-
/**
|
|
236
|
-
* Run the deep agent against the discovered worklist, streaming live progress
|
|
237
|
-
* (planning, tool calls, delegation) through `onProgress`. The agent edits
|
|
238
|
-
* files on disk through its filesystem backend; this returns the final plan and
|
|
239
|
-
* summary it produced for the report.
|
|
240
|
-
*/
|
|
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>)[]>>>;
|
|
241
60
|
export declare function runDeepAgentConversion(options: DeepAgentRunOptions): Promise<DeepAgentRunResult>;
|
|
242
61
|
//# sourceMappingURL=deep-agent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deep-agent.d.ts","sourceRoot":"","sources":["../../src/pipeline/deep-agent.ts"],"names":[],"mappings":"AAAA
|
|
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"}
|