@easynet/agent-runtime 1.0.1

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 (48) hide show
  1. package/.github/workflows/ci.yml +80 -0
  2. package/.github/workflows/release.yml +82 -0
  3. package/.releaserc.cjs +26 -0
  4. package/dist/cli.d.ts +43 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +617 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/config.d.ts +86 -0
  9. package/dist/config.d.ts.map +1 -0
  10. package/dist/config.js +84 -0
  11. package/dist/config.js.map +1 -0
  12. package/dist/context.d.ts +104 -0
  13. package/dist/context.d.ts.map +1 -0
  14. package/dist/context.js +111 -0
  15. package/dist/context.js.map +1 -0
  16. package/dist/deep-agent.d.ts +29 -0
  17. package/dist/deep-agent.d.ts.map +1 -0
  18. package/dist/deep-agent.js +77 -0
  19. package/dist/deep-agent.js.map +1 -0
  20. package/dist/index.d.ts +8 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +8 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/malformed-tool-call-middleware.d.ts +8 -0
  25. package/dist/malformed-tool-call-middleware.d.ts.map +1 -0
  26. package/dist/malformed-tool-call-middleware.js +191 -0
  27. package/dist/malformed-tool-call-middleware.js.map +1 -0
  28. package/dist/react-agent.d.ts +38 -0
  29. package/dist/react-agent.d.ts.map +1 -0
  30. package/dist/react-agent.js +465 -0
  31. package/dist/react-agent.js.map +1 -0
  32. package/dist/sub-agent.d.ts +34 -0
  33. package/dist/sub-agent.d.ts.map +1 -0
  34. package/dist/sub-agent.js +53 -0
  35. package/dist/sub-agent.js.map +1 -0
  36. package/example/basic-usage.ts +49 -0
  37. package/package.json +53 -0
  38. package/src/cli.ts +745 -0
  39. package/src/config.ts +177 -0
  40. package/src/context.ts +247 -0
  41. package/src/deep-agent.ts +104 -0
  42. package/src/index.ts +53 -0
  43. package/src/malformed-tool-call-middleware.ts +239 -0
  44. package/src/markdown-it-terminal.d.ts +4 -0
  45. package/src/marked-terminal.d.ts +16 -0
  46. package/src/react-agent.ts +576 -0
  47. package/src/sub-agent.ts +82 -0
  48. package/tsconfig.json +18 -0
@@ -0,0 +1,465 @@
1
+ import { createAgent as createLangChainAgent } from "langchain";
2
+ import { DynamicStructuredTool } from "@langchain/core/tools";
3
+ import { z } from "zod";
4
+ import { applyToolChoiceAuto } from "@easynet/agent-model";
5
+ import { extractLastMessageText, stripNullishObjectFields, summarizeForLog, } from "@easynet/agent-common";
6
+ function toMessageText(content) {
7
+ if (typeof content === "string")
8
+ return content;
9
+ if (Array.isArray(content)) {
10
+ return content
11
+ .map((block) => {
12
+ if (typeof block === "string")
13
+ return block;
14
+ if (typeof block === "object" && block !== null && "text" in block) {
15
+ const text = block.text;
16
+ return typeof text === "string" ? text : "";
17
+ }
18
+ return "";
19
+ })
20
+ .join("");
21
+ }
22
+ return "";
23
+ }
24
+ function inferMemoryTypeByStructure(content) {
25
+ const text = content.trim();
26
+ if (!text)
27
+ return "thread";
28
+ const lines = text.split(/\r?\n/).map((l) => l.trim()).filter(Boolean);
29
+ const lineCount = lines.length;
30
+ const uniqueLineCount = new Set(lines).size;
31
+ const duplicateRatio = lineCount > 0 ? 1 - uniqueLineCount / lineCount : 0;
32
+ const symbolCount = (text.match(/[^\p{L}\p{N}\s]/gu) ?? []).length;
33
+ const symbolRatio = symbolCount / Math.max(1, text.length);
34
+ // Terminal/log-like content is usually long, repetitive, and symbol-dense.
35
+ if (text.length > 1200)
36
+ return "thread";
37
+ if (lineCount > 18)
38
+ return "thread";
39
+ if (duplicateRatio > 0.35)
40
+ return "thread";
41
+ if (symbolRatio > 0.22)
42
+ return "thread";
43
+ return "cross_thread";
44
+ }
45
+ async function inferMemoryTypeWithModel(llm, content) {
46
+ const classifierPrompt = [
47
+ "Classify memory scope for an AI agent.",
48
+ "Return strict JSON only: {\"type\":\"thread|cross_thread\",\"confidence\":0..1}.",
49
+ "Decision policy:",
50
+ "- thread: temporary session context, command output, logs, transient task state, step-by-step investigation details.",
51
+ "- cross_thread: stable user preferences, durable profile facts, long-lived constraints reusable in future sessions.",
52
+ "Use semantic judgment, not keyword matching.",
53
+ ].join("\n");
54
+ try {
55
+ const response = await llm.invoke([
56
+ { role: "system", content: classifierPrompt },
57
+ { role: "user", content },
58
+ ]);
59
+ const text = toMessageText(response.content).trim();
60
+ const jsonBlob = text.match(/\{[\s\S]*\}/)?.[0] ?? text;
61
+ const parsed = JSON.parse(jsonBlob);
62
+ const type = parsed.type === "thread" || parsed.type === "cross_thread" ? parsed.type : null;
63
+ const confidence = typeof parsed.confidence === "number" ? parsed.confidence : 0;
64
+ if (!type)
65
+ return null;
66
+ return confidence >= 0.6 ? type : null;
67
+ }
68
+ catch {
69
+ return null;
70
+ }
71
+ }
72
+ function deriveFallbackTextFromMessages(messages, opts) {
73
+ for (let i = messages.length - 1; i >= 0; i -= 1) {
74
+ const msg = messages[i];
75
+ const type = msg?.type ?? msg?.role ?? "";
76
+ if (type !== "tool" && !msg?.tool_call_id)
77
+ continue;
78
+ const raw = typeof msg.content === "string"
79
+ ? msg.content
80
+ : msg.content != null
81
+ ? String(msg.content)
82
+ : "";
83
+ if (!raw.trim())
84
+ continue;
85
+ try {
86
+ const parsed = JSON.parse(raw);
87
+ const summary = parsed.evidence?.find((e) => e?.summary)?.summary;
88
+ if (typeof summary === "string" && summary.trim())
89
+ return summary.trim();
90
+ const to = parsed.result?.to?.trim();
91
+ const serviceType = parsed.result?.serviceType?.trim();
92
+ if (to) {
93
+ return serviceType ? `Sent ${serviceType} message to ${to}.` : `Sent message to ${to}.`;
94
+ }
95
+ const command = parsed.result?.command?.trim();
96
+ if (command) {
97
+ const w = parsed.result?.windowId;
98
+ const t = parsed.result?.tabIndex;
99
+ if (typeof w === "number" && typeof t === "number") {
100
+ const label = opts.commandWindowLabel ?? "window";
101
+ return `Executed command in ${label} ${w}, tab ${t}: ${command}`;
102
+ }
103
+ return `Executed command: ${command}`;
104
+ }
105
+ }
106
+ catch {
107
+ return raw.length > 200 ? raw.slice(0, 200) + "..." : raw;
108
+ }
109
+ }
110
+ return opts.fallbackText;
111
+ }
112
+ function hasToolMessages(messages) {
113
+ const list = Array.isArray(messages) ? messages : [];
114
+ for (const item of list) {
115
+ const msg = item;
116
+ const type = msg?.type ?? msg?.role ?? "";
117
+ if (type === "tool" || Boolean(msg?.tool_call_id) || (msg?.tool_calls?.length ?? 0) > 0) {
118
+ return true;
119
+ }
120
+ }
121
+ return false;
122
+ }
123
+ function looksLikeToolRefusal(text) {
124
+ const t = text.toLowerCase();
125
+ return (t.includes("don't have") ||
126
+ t.includes("do not have") ||
127
+ t.includes("no direct") ||
128
+ t.includes("cannot directly") ||
129
+ t.includes("can't directly") ||
130
+ t.includes("no tool") ||
131
+ t.includes("schema") ||
132
+ t.includes("invalid"));
133
+ }
134
+ function extractSchemaKeys(schema) {
135
+ if (!schema || typeof schema !== "object")
136
+ return [];
137
+ const rec = schema;
138
+ const properties = rec.properties;
139
+ if (properties && typeof properties === "object" && !Array.isArray(properties)) {
140
+ return Object.keys(properties);
141
+ }
142
+ const shape = rec.shape;
143
+ if (shape && typeof shape === "object" && !Array.isArray(shape)) {
144
+ return Object.keys(shape);
145
+ }
146
+ return [];
147
+ }
148
+ function buildPtcHint(input) {
149
+ const lines = [
150
+ "[PTC_FEEDBACK]",
151
+ `TaskIntent: ${input.taskIntent}`,
152
+ `ToolStats: invoked=${input.stats.invoked}, succeeded=${input.stats.succeeded}, failed=${input.stats.failed}`,
153
+ input.stats.lastError ? `LastToolError: ${input.stats.lastError}` : "",
154
+ "Action: Retry using available tools. Do not claim tools are unavailable.",
155
+ "Action: If previous tool args were invalid, correct arguments strictly by schema.",
156
+ "Action: If a tool is needed, emit a valid tool call instead of plain explanation.",
157
+ `AvailableTools: ${input.toolSignatures.join("; ")}`,
158
+ ].filter((v) => v.length > 0);
159
+ return lines.join("\n");
160
+ }
161
+ export function printReactSteps(messages) {
162
+ const list = Array.isArray(messages) ? messages : [];
163
+ let stepIndex = 0;
164
+ for (let i = 0; i < list.length; i++) {
165
+ const msg = list[i];
166
+ const type = msg?.type ?? msg?.role ?? "";
167
+ const content = msg?.content;
168
+ const contentStr = typeof content === "string"
169
+ ? content
170
+ : typeof content === "object" && content !== null && Array.isArray(content)
171
+ ? content
172
+ .map((b) => ("text" in b ? b.text : JSON.stringify(b)))
173
+ .join("")
174
+ : content != null
175
+ ? String(content)
176
+ : "";
177
+ if (type === "human" || (type === "user" && !msg.tool_calls)) {
178
+ if (contentStr.trim()) {
179
+ console.error(`\n--- Step (user) ---\n${contentStr.trim()}`);
180
+ }
181
+ continue;
182
+ }
183
+ if (type === "ai" || type === "assistant") {
184
+ if (msg.tool_calls?.length) {
185
+ stepIndex += 1;
186
+ if (contentStr.trim()) {
187
+ console.error(`\n--- ReAct Step ${stepIndex}: Thought ---\n${contentStr.trim()}`);
188
+ }
189
+ for (const tc of msg.tool_calls) {
190
+ const name = tc?.name ?? "?";
191
+ const args = typeof tc?.args === "object" && tc?.args !== null
192
+ ? JSON.stringify(tc.args)
193
+ : String(tc?.args ?? "");
194
+ console.error(`--- ReAct Step ${stepIndex}: Action ---\n${name}(${args})`);
195
+ }
196
+ }
197
+ continue;
198
+ }
199
+ if (type === "tool" || msg?.tool_call_id) {
200
+ const toolName = msg?.name ?? "tool";
201
+ const obs = contentStr.length > 200 ? contentStr.slice(0, 200) + "..." : contentStr;
202
+ console.error(`--- ReAct Step ${stepIndex}: Observation (${toolName}) ---\n${obs || "(empty)"}`);
203
+ }
204
+ }
205
+ console.error("");
206
+ }
207
+ export function createReactAgent(ctx, options = {}) {
208
+ const publish = (name, from, to, payload) => {
209
+ ctx.events.publish({ name, from, to, payload });
210
+ };
211
+ const runtimeTools = ctx.tools;
212
+ const agentName = options.agentName ?? "react";
213
+ const configAgent = ctx.config.app?.agent?.[agentName];
214
+ const configReact = configAgent;
215
+ const namespace = options.namespace ?? configReact?.memory?.namespace;
216
+ const topK = options.topK ?? configReact?.memory?.top_k;
217
+ const budgetTokens = options.budgetTokens ?? configReact?.memory?.budget_tokens;
218
+ const promptFromConfig = configReact?.system_prompt;
219
+ const systemPrompt = options.systemPrompt ?? promptFromConfig;
220
+ const maxSteps = options.maxSteps ?? configReact?.max_steps;
221
+ const printSteps = options.printSteps ?? configReact?.print_steps;
222
+ const fallbackText = options.fallbackText ?? configReact?.fallback_text;
223
+ const commandWindowLabel = options.commandWindowLabel ?? configReact?.command_window_label;
224
+ const autoWriteMemory = options.autoWriteMemory ?? (configReact?.memory?.auto_write ?? true);
225
+ const autoWriteScope = configReact?.memory?.auto_write_scope ?? "thread";
226
+ const autoWriteMaxChars = configReact?.memory?.auto_write_max_chars ?? 2400;
227
+ const autoWriteUser = configReact?.memory?.auto_write_user ?? true;
228
+ const autoWriteAssistant = configReact?.memory?.auto_write_assistant ?? true;
229
+ const ptcEnabled = options.ptc?.enabled ?? true;
230
+ const ptcMaxRetries = Math.max(0, options.ptc?.maxRetries ?? 1);
231
+ const usedNames = new Set();
232
+ const toAlias = (raw, index) => {
233
+ const segments = raw.split(".");
234
+ // For npm tools (npm.scope.pkg.version.toolName), last segment is the tool name (camelCase).
235
+ // For file/skill tools (file.skills.disk.usage.investigate), strip the "file.skills." prefix
236
+ // and rejoin remaining segments with hyphens to reconstruct the original name.
237
+ let base;
238
+ if (segments[0] === "file" && segments.length > 2) {
239
+ // Strip "file.<dirName>." prefix (e.g. "file.skills.") and rejoin with hyphens
240
+ base = segments.slice(2).join("-");
241
+ }
242
+ else {
243
+ base = segments.pop() || `tool_${index + 1}`;
244
+ }
245
+ const normalized = base.replace(/[^a-zA-Z0-9_-]/g, "_").slice(0, 48) || `tool_${index + 1}`;
246
+ let name = normalized;
247
+ let n = 2;
248
+ while (usedNames.has(name)) {
249
+ name = `${normalized}_${n}`;
250
+ n += 1;
251
+ }
252
+ usedNames.add(name);
253
+ return name;
254
+ };
255
+ let currentToolStats = null;
256
+ const aliasedTools = runtimeTools.map((tool, idx) => {
257
+ const alias = toAlias(tool.name, idx);
258
+ return new DynamicStructuredTool({
259
+ name: alias,
260
+ description: tool.description ?? `Tool ${alias}`,
261
+ schema: tool.schema,
262
+ func: async (args) => {
263
+ const sanitizedArgs = stripNullishObjectFields((args ?? {}));
264
+ if (currentToolStats)
265
+ currentToolStats.invoked += 1;
266
+ publish("agent.react.tool.invoke.start", "react-agent", alias, { args: sanitizedArgs });
267
+ try {
268
+ const raw = await tool.invoke(sanitizedArgs);
269
+ if (currentToolStats)
270
+ currentToolStats.succeeded += 1;
271
+ publish("agent.react.tool.invoke.done", alias, "react-agent", {
272
+ result: raw,
273
+ resultPreview: summarizeForLog(raw),
274
+ });
275
+ return typeof raw === "string" ? raw : raw == null ? "" : JSON.stringify(raw);
276
+ }
277
+ catch (err) {
278
+ const message = err instanceof Error ? err.message : String(err);
279
+ if (currentToolStats) {
280
+ currentToolStats.failed += 1;
281
+ currentToolStats.lastError = message;
282
+ }
283
+ publish("agent.react.tool.invoke.error", alias, "react-agent", { error: message });
284
+ throw err;
285
+ }
286
+ },
287
+ });
288
+ });
289
+ const toolSignatures = aliasedTools.map((tool) => {
290
+ const keys = extractSchemaKeys(tool.schema);
291
+ return keys.length > 0 ? `${tool.name}(${keys.join(",")})` : `${tool.name}(...)`;
292
+ });
293
+ // In subagent mode, add an activateSkill tool that reads SKILL.md on demand
294
+ const allTools = [...aliasedTools];
295
+ const skillsConfig = ctx.config.app?.agent?.[agentName]?.skills;
296
+ if (ctx.skillSet && skillsConfig?.mode === "subagent" && ctx.skillSet.list().length > 0) {
297
+ const skillNames = ctx.skillSet.list().map((s) => s.name);
298
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- schema generics mismatch
299
+ allTools.push(new DynamicStructuredTool({
300
+ name: "activateSkill",
301
+ description: `Activate a skill by name to get its detailed instructions. Available skills: ${skillNames.join(", ")}`,
302
+ schema: z.object({
303
+ skillName: z.enum(skillNames).describe("Name of the skill to activate"),
304
+ }),
305
+ func: async (args) => {
306
+ try {
307
+ return await ctx.skillSet.read(args.skillName);
308
+ }
309
+ catch (err) {
310
+ return JSON.stringify({
311
+ error: err instanceof Error ? err.message : String(err),
312
+ });
313
+ }
314
+ },
315
+ }));
316
+ }
317
+ applyToolChoiceAuto(ctx.llm);
318
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- heavily overloaded createAgent
319
+ const agent = createLangChainAgent({
320
+ model: ctx.llm,
321
+ tools: allTools,
322
+ systemPrompt,
323
+ ...(options.middleware?.length ? { middleware: options.middleware } : {}),
324
+ });
325
+ const conversationHistory = [];
326
+ const maxHistoryMessages = 24;
327
+ return {
328
+ agent,
329
+ async run(userMessage) {
330
+ publish("agent.react.run.start", "user", "react-agent", { userMessage });
331
+ const injectedText = namespace
332
+ ? (await ctx.memory.recall({
333
+ namespace,
334
+ query: userMessage,
335
+ ...(typeof topK === "number" ? { topK } : {}),
336
+ ...(typeof budgetTokens === "number" ? { budgetTokens } : {}),
337
+ })).injectedText
338
+ : "";
339
+ // Auto-match skills and inject instructions if matched
340
+ let skillBlock = "";
341
+ if (ctx.skillSet) {
342
+ const skillMatchOptions = {
343
+ ...(typeof configReact?.skills?.embedding_threshold === "number"
344
+ ? { embeddingThreshold: configReact.skills.embedding_threshold }
345
+ : {}),
346
+ ...(typeof configReact?.skills?.keyword_threshold === "number"
347
+ ? { keywordThreshold: configReact.skills.keyword_threshold }
348
+ : {}),
349
+ };
350
+ const match = await ctx.skillSet.match(userMessage, skillMatchOptions);
351
+ if (match) {
352
+ publish("agent.react.skill.matched", "react-agent", "skill", {
353
+ skill: match.skill.name,
354
+ score: match.score,
355
+ });
356
+ skillBlock = `[Matched skill: ${match.skill.name}]\nFollow these instructions step by step:\n\n${match.instructions}\n\n`;
357
+ }
358
+ }
359
+ const contextBlock = injectedText.trim().length > 0 ? `[Relevant memory]\n${injectedText}\n\n` : "";
360
+ const effectiveMessage = skillBlock + contextBlock + userMessage;
361
+ const runAttempt = async (messageContent) => {
362
+ const invokeInput = {
363
+ messages: [...conversationHistory, { role: "user", content: messageContent }],
364
+ };
365
+ currentToolStats = { invoked: 0, succeeded: 0, failed: 0 };
366
+ try {
367
+ const out = typeof maxSteps === "number"
368
+ ? await agent.invoke(invokeInput, { recursionLimit: maxSteps })
369
+ : await agent.invoke(invokeInput);
370
+ return { out, stats: currentToolStats };
371
+ }
372
+ finally {
373
+ currentToolStats = null;
374
+ }
375
+ };
376
+ let { out: result, stats } = await runAttempt(effectiveMessage);
377
+ let messages = result?.messages ?? result;
378
+ let extractedText = extractLastMessageText(result).trim();
379
+ if (ptcEnabled && ptcMaxRetries > 0) {
380
+ let retries = 0;
381
+ while (retries < ptcMaxRetries) {
382
+ const noToolActivity = (stats?.invoked ?? 0) === 0 && !hasToolMessages(messages);
383
+ const onlyToolFailure = (stats?.invoked ?? 0) > 0 && (stats?.succeeded ?? 0) === 0;
384
+ const refusal = looksLikeToolRefusal(extractedText);
385
+ if (!noToolActivity && !onlyToolFailure && !refusal)
386
+ break;
387
+ publish("agent.react.ptc.retry", "react-agent", "react-agent", {
388
+ retry: retries + 1,
389
+ reason: noToolActivity ? "no_tool_activity" : onlyToolFailure ? "tool_failed" : "tool_refusal_text",
390
+ stats,
391
+ });
392
+ const ptcHint = buildPtcHint({
393
+ taskIntent: userMessage,
394
+ stats: stats ?? { invoked: 0, succeeded: 0, failed: 0 },
395
+ toolSignatures,
396
+ });
397
+ const retried = await runAttempt(`${effectiveMessage}\n\n${ptcHint}`);
398
+ result = retried.out;
399
+ stats = retried.stats;
400
+ messages = result?.messages ?? result;
401
+ extractedText = extractLastMessageText(result).trim();
402
+ retries += 1;
403
+ }
404
+ }
405
+ if (printSteps === true) {
406
+ printReactSteps(messages);
407
+ }
408
+ const text = extractedText || (fallbackText
409
+ ? deriveFallbackTextFromMessages((Array.isArray(messages) ? messages : []), {
410
+ fallbackText,
411
+ commandWindowLabel,
412
+ })
413
+ : extractedText);
414
+ conversationHistory.push({ role: "user", content: userMessage });
415
+ if (text.trim().length > 0) {
416
+ conversationHistory.push({ role: "assistant", content: text });
417
+ }
418
+ if (conversationHistory.length > maxHistoryMessages) {
419
+ conversationHistory.splice(0, conversationHistory.length - maxHistoryMessages);
420
+ }
421
+ if (namespace && autoWriteMemory) {
422
+ const scope = autoWriteScope === "auto" ? inferMemoryTypeByStructure(`${userMessage}\n${text}`) : autoWriteScope;
423
+ const writeItems = [];
424
+ if (autoWriteUser && userMessage.trim().length > 0) {
425
+ writeItems.push(`[user]\n${userMessage.trim()}`);
426
+ }
427
+ if (autoWriteAssistant && text.trim().length > 0) {
428
+ writeItems.push(`[assistant]\n${text.trim()}`);
429
+ }
430
+ const content = writeItems.join("\n\n").slice(0, Math.max(0, autoWriteMaxChars));
431
+ if (content.length > 0) {
432
+ try {
433
+ publish("agent.react.memory.write.start", "react-agent", "memory", { type: scope, auto: true });
434
+ await ctx.memory.memorize(namespace, scope, content);
435
+ publish("agent.react.memory.write.done", "memory", "react-agent", { type: scope, auto: true });
436
+ }
437
+ catch (err) {
438
+ publish("agent.react.memory.write.error", "memory", "react-agent", {
439
+ auto: true,
440
+ error: err instanceof Error ? err.message : String(err),
441
+ });
442
+ }
443
+ }
444
+ }
445
+ publish("agent.react.run.done", "react-agent", "user", { text });
446
+ return { text, messages };
447
+ },
448
+ async remember(content, type = "auto") {
449
+ const resolvedType = type === "auto"
450
+ ? (await inferMemoryTypeWithModel(ctx.llm, content)) ??
451
+ inferMemoryTypeByStructure(content)
452
+ : type;
453
+ publish("agent.react.memory.write.start", "react-agent", "memory", { type: resolvedType });
454
+ if (!namespace) {
455
+ publish("agent.react.memory.write.skipped", "react-agent", "memory", {
456
+ reason: "namespace_not_configured",
457
+ });
458
+ return;
459
+ }
460
+ await ctx.memory.memorize(namespace, resolvedType, content);
461
+ publish("agent.react.memory.write.done", "memory", "react-agent", { type: resolvedType });
462
+ },
463
+ };
464
+ }
465
+ //# sourceMappingURL=react-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react-agent.js","sourceRoot":"","sources":["../src/react-agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { BotContext } from "./context.js";
2
+ export interface SubAgentOptions {
3
+ /** Agent kind: react or deep. */
4
+ kind: "react" | "deep";
5
+ /** Agent name from config (default: same as kind). */
6
+ agentName?: string;
7
+ /** Override system prompt for this child. */
8
+ systemPrompt?: string;
9
+ /** Max steps (react) or recursion limit (deep) for the child. */
10
+ maxSteps?: number;
11
+ }
12
+ export interface SubAgentResult {
13
+ text: string;
14
+ messages?: unknown;
15
+ }
16
+ export interface SubAgentRunner {
17
+ /**
18
+ * Spawn a child agent, run it with the given message, and return the result.
19
+ * The child reuses the parent's BotContext (LLM, tools, memory, config).
20
+ */
21
+ run(message: string, options: SubAgentOptions): Promise<SubAgentResult>;
22
+ }
23
+ /**
24
+ * Create a SubAgentRunner bound to a parent BotContext.
25
+ *
26
+ * Usage:
27
+ * ```ts
28
+ * const sub = createSubAgentRunner(parentCtx);
29
+ * const result = await sub.run("Summarize the logs", { kind: "react" });
30
+ * console.log(result.text);
31
+ * ```
32
+ */
33
+ export declare function createSubAgentRunner(parentCtx: BotContext): SubAgentRunner;
34
+ //# sourceMappingURL=sub-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sub-agent.d.ts","sourceRoot":"","sources":["../src/sub-agent.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,WAAW,eAAe;IAC9B,iCAAiC;IACjC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CACzE;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,UAAU,GAAG,cAAc,CAmC1E"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Parent-Child sub-agent pattern.
3
+ *
4
+ * A parent agent can spawn child agents (react or deep) that reuse the parent's
5
+ * BotContext (LLM, tools, memory) but run with their own system prompt and options.
6
+ * The child runs to completion and returns its result to the parent.
7
+ */
8
+ import { createReactAgent } from "./react-agent.js";
9
+ import { createDeepAgent } from "./deep-agent.js";
10
+ import { malformedToolCallMiddleware } from "./malformed-tool-call-middleware.js";
11
+ /**
12
+ * Create a SubAgentRunner bound to a parent BotContext.
13
+ *
14
+ * Usage:
15
+ * ```ts
16
+ * const sub = createSubAgentRunner(parentCtx);
17
+ * const result = await sub.run("Summarize the logs", { kind: "react" });
18
+ * console.log(result.text);
19
+ * ```
20
+ */
21
+ export function createSubAgentRunner(parentCtx) {
22
+ const publish = (name, from, to, payload) => {
23
+ parentCtx.events.publish({ name, from, to, payload });
24
+ };
25
+ return {
26
+ async run(message, options) {
27
+ const { kind, agentName, systemPrompt, maxSteps } = options;
28
+ const childName = agentName ?? kind;
29
+ publish("agent.sub.spawn", "parent", childName, { kind, message: message.slice(0, 100) });
30
+ if (kind === "react") {
31
+ const runtime = createReactAgent(parentCtx, {
32
+ agentName: childName,
33
+ systemPrompt,
34
+ maxSteps,
35
+ middleware: [malformedToolCallMiddleware()],
36
+ });
37
+ const result = await runtime.run(message);
38
+ publish("agent.sub.done", childName, "parent", { text: result.text.slice(0, 200) });
39
+ return result;
40
+ }
41
+ // deep
42
+ const runtime = await createDeepAgent(parentCtx, {
43
+ agentName: childName,
44
+ systemPrompt,
45
+ recursionLimit: maxSteps,
46
+ });
47
+ const result = await runtime.run(message);
48
+ publish("agent.sub.done", childName, "parent", { text: result.text.slice(0, 200) });
49
+ return result;
50
+ },
51
+ };
52
+ }
53
+ //# sourceMappingURL=sub-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sub-agent.js","sourceRoot":"","sources":["../src/sub-agent.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AA2BlF;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAqB;IACxD,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,IAAY,EAAE,EAAU,EAAE,OAAiB,EAAE,EAAE;QAC5E,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACxD,CAAC,CAAC;IAEF,OAAO;QACL,KAAK,CAAC,GAAG,CAAC,OAAe,EAAE,OAAwB;YACjD,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;YAC5D,MAAM,SAAS,GAAG,SAAS,IAAI,IAAI,CAAC;YAEpC,OAAO,CAAC,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAE1F,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBACrB,MAAM,OAAO,GAAG,gBAAgB,CAAC,SAAS,EAAE;oBAC1C,SAAS,EAAE,SAAS;oBACpB,YAAY;oBACZ,QAAQ;oBACR,UAAU,EAAE,CAAC,2BAA2B,EAAE,CAAC;iBAC5C,CAAC,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC1C,OAAO,CAAC,gBAAgB,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;gBACpF,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,OAAO;YACP,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,SAAS,EAAE;gBAC/C,SAAS,EAAE,SAAS;gBACpB,YAAY;gBACZ,cAAc,EAAE,QAAQ;aACzB,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC1C,OAAO,CAAC,gBAAgB,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YACpF,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,49 @@
1
+ import {
2
+ createAppContext,
3
+ createContextBuilders,
4
+ createConfigApi,
5
+ loadAppConfig,
6
+ getModelsConfigPath,
7
+ getMemoryConfigPath,
8
+ getToolConfigPath,
9
+ createReactAgent,
10
+ printReactSteps,
11
+ createDeepAgent,
12
+ malformedToolCallMiddleware,
13
+ createSubAgentRunner,
14
+ runAppCli,
15
+ } from "@easynet/agent-runtime";
16
+
17
+ async function runOnce(): Promise<void> {
18
+ const { createAgent } = createAppContext();
19
+ const ctx = await createAgent({ configPath: "./config/app.yaml", agentName: "react" });
20
+
21
+ const react = createReactAgent(ctx, { maxSteps: 6 });
22
+ const result = await react.run("Summarize this repository in one sentence.");
23
+ console.log(result.text);
24
+ printReactSteps(result.messages ?? []);
25
+
26
+ const sub = createSubAgentRunner(ctx);
27
+ const subResult = await sub.run("List risks in this codebase.", { kind: "react" });
28
+ console.log(subResult.text);
29
+
30
+ const deep = createDeepAgent(ctx, { maxSteps: 4 });
31
+ void deep;
32
+ }
33
+
34
+ function runCli(): void {
35
+ const configApi = createConfigApi();
36
+ const config = { app: { agent: { react: {} } } };
37
+ void loadAppConfig("./config/app.yaml");
38
+ void getModelsConfigPath(config, "react");
39
+ void getMemoryConfigPath(config, "react");
40
+ void getToolConfigPath(config, "react");
41
+ void createContextBuilders({ configApi });
42
+ void malformedToolCallMiddleware({ maxRetries: 1, verbose: false });
43
+
44
+ const { createBotContext } = createAppContext();
45
+ runAppCli({ appName: "demo-app", createBotContext: () => createBotContext("./config/app.yaml") });
46
+ }
47
+
48
+ void runOnce();
49
+ // runCli();