@easynet/agent-runtime 1.0.3 → 1.0.4

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 (205) hide show
  1. package/.github/workflows/ci.yml +9 -24
  2. package/.github/workflows/release.yml +14 -35
  3. package/agent-runtime/.github/workflows/ci.yml +69 -0
  4. package/agent-runtime/.github/workflows/release.yml +118 -0
  5. package/agent-runtime/.releaserc.cjs +26 -0
  6. package/agent-runtime/config/agent.deep.yaml +25 -0
  7. package/agent-runtime/config/agent.react.yaml +24 -0
  8. package/agent-runtime/example/basic-usage.ts +49 -0
  9. package/agent-runtime/package-lock.json +7740 -0
  10. package/agent-runtime/package.json +49 -0
  11. package/agent-runtime/pnpm-lock.yaml +3712 -0
  12. package/agent-runtime/scripts/resolve-deps.js +54 -0
  13. package/agent-runtime/src/agents/deep-agent.ts +165 -0
  14. package/agent-runtime/src/agents/react-agent.helpers.ts +227 -0
  15. package/agent-runtime/src/agents/react-agent.ts +584 -0
  16. package/{src → agent-runtime/src/agents}/sub-agent.ts +2 -2
  17. package/agent-runtime/src/cli/args.ts +15 -0
  18. package/agent-runtime/src/cli/event-listener.ts +162 -0
  19. package/agent-runtime/src/cli/interactive.ts +144 -0
  20. package/agent-runtime/src/cli/runtime.ts +31 -0
  21. package/agent-runtime/src/cli/spinner.ts +23 -0
  22. package/agent-runtime/src/cli/terminal-render.ts +322 -0
  23. package/agent-runtime/src/cli/types.ts +33 -0
  24. package/agent-runtime/src/cli.ts +134 -0
  25. package/agent-runtime/src/config/helpers.ts +179 -0
  26. package/agent-runtime/src/config/index.ts +245 -0
  27. package/agent-runtime/src/config/types.ts +62 -0
  28. package/agent-runtime/src/core/context.ts +266 -0
  29. package/agent-runtime/src/index.ts +55 -0
  30. package/agent-runtime/tsconfig.json +18 -0
  31. package/apps/imessagebot/README.md +38 -0
  32. package/apps/imessagebot/config/.agent/cache/easynet/agent-tool-buildin/0.0.45/README.md +33 -0
  33. package/apps/imessagebot/config/.agent/cache/easynet/agent-tool-buildin/0.0.45/package-lock.json +15257 -0
  34. package/apps/imessagebot/config/.agent/cache/easynet/agent-tool-buildin/0.0.45/package.json +55 -0
  35. package/apps/imessagebot/config/agents/deep/agent.yaml +31 -0
  36. package/apps/imessagebot/config/agents/react/agent.yaml +58 -0
  37. package/apps/imessagebot/config/agents/shared/.agent/cache/easynet/agent-tool-buildin/0.0.43/README.md +33 -0
  38. package/apps/imessagebot/config/agents/shared/.agent/cache/easynet/agent-tool-buildin/0.0.43/package-lock.json +15457 -0
  39. package/apps/imessagebot/config/agents/shared/.agent/cache/easynet/agent-tool-buildin/0.0.43/package.json +55 -0
  40. package/apps/imessagebot/config/agents/shared/.agent/cache/easynet/agent-tool-buildin/0.0.46/README.md +33 -0
  41. package/apps/imessagebot/config/agents/shared/.agent/cache/easynet/agent-tool-buildin/0.0.46/package-lock.json +15257 -0
  42. package/apps/imessagebot/config/agents/shared/.agent/cache/easynet/agent-tool-buildin/0.0.46/package.json +62 -0
  43. package/apps/imessagebot/config/agents/shared/memory.yaml +31 -0
  44. package/apps/imessagebot/config/agents/shared/model.yaml +23 -0
  45. package/apps/imessagebot/config/agents/shared/tool.yaml +13 -0
  46. package/apps/imessagebot/config/app.yaml +14 -0
  47. package/apps/imessagebot/package-lock.json +53695 -0
  48. package/apps/imessagebot/package.json +41 -0
  49. package/apps/imessagebot/pnpm-lock.yaml +1589 -0
  50. package/apps/imessagebot/scripts/resolve-deps.js +41 -0
  51. package/apps/imessagebot/scripts/test-llm.mjs +27 -0
  52. package/apps/imessagebot/scripts/validate-tools-config.mjs +174 -0
  53. package/apps/imessagebot/src/config.ts +76 -0
  54. package/apps/imessagebot/src/context.ts +35 -0
  55. package/apps/imessagebot/src/index.ts +17 -0
  56. package/apps/imessagebot/tsconfig.json +18 -0
  57. package/apps/itermbot/.github/workflows/ci.yml +61 -0
  58. package/apps/itermbot/.github/workflows/release.yml +80 -0
  59. package/apps/itermbot/.releaserc.cjs +26 -0
  60. package/apps/itermbot/README.md +82 -0
  61. package/apps/itermbot/config/app.yaml +29 -0
  62. package/apps/itermbot/config/tsconfig.json +18 -0
  63. package/apps/itermbot/macos_disk_usage_agent_plan.md +244 -0
  64. package/apps/itermbot/package-lock.json +53697 -0
  65. package/apps/itermbot/package.json +57 -0
  66. package/apps/itermbot/pnpm-lock.yaml +3966 -0
  67. package/apps/itermbot/scripts/patch-buildin-cache.sh +25 -0
  68. package/apps/itermbot/scripts/resolve-deps.js +41 -0
  69. package/apps/itermbot/scripts/test-llm.mjs +32 -0
  70. package/apps/itermbot/skills/command-explain-and-guard/SKILL.md +39 -0
  71. package/apps/itermbot/skills/command-explain-and-guard/handler.js +86 -0
  72. package/apps/itermbot/skills/disk-usage-investigate/SKILL.md +44 -0
  73. package/apps/itermbot/skills/disk-usage-investigate/handler.js +12 -0
  74. package/apps/itermbot/skills/gpu-ssh-monitor/SKILL.md +64 -0
  75. package/apps/itermbot/skills/repo-triage/SKILL.md +40 -0
  76. package/apps/itermbot/skills/repo-triage/handler.js +56 -0
  77. package/apps/itermbot/skills/test-failure-diagnose/SKILL.md +43 -0
  78. package/apps/itermbot/skills/test-failure-diagnose/handler.js +107 -0
  79. package/apps/itermbot/src/config.ts +95 -0
  80. package/apps/itermbot/src/context.ts +35 -0
  81. package/apps/itermbot/src/index.ts +223 -0
  82. package/apps/itermbot/src/iterm/session-hint.ts +40 -0
  83. package/apps/itermbot/src/iterm/target-routing.ts +419 -0
  84. package/apps/itermbot/src/startup/colors.ts +317 -0
  85. package/apps/itermbot/src/startup/diagnostics.ts +97 -0
  86. package/apps/itermbot/src/startup/ui.ts +141 -0
  87. package/config/agent.deep.yaml +25 -0
  88. package/config/agent.react.yaml +24 -0
  89. package/dist/agents/deep-agent.d.ts +37 -0
  90. package/dist/agents/deep-agent.d.ts.map +1 -0
  91. package/dist/agents/deep-agent.js +115 -0
  92. package/dist/agents/deep-agent.js.map +1 -0
  93. package/dist/agents/react-agent.d.ts +40 -0
  94. package/dist/agents/react-agent.d.ts.map +1 -0
  95. package/dist/agents/react-agent.helpers.d.ts +40 -0
  96. package/dist/agents/react-agent.helpers.d.ts.map +1 -0
  97. package/dist/agents/react-agent.helpers.js +196 -0
  98. package/dist/agents/react-agent.helpers.js.map +1 -0
  99. package/dist/agents/react-agent.js +400 -0
  100. package/dist/agents/react-agent.js.map +1 -0
  101. package/dist/agents/sub-agent.d.ts +34 -0
  102. package/dist/agents/sub-agent.d.ts.map +1 -0
  103. package/dist/agents/sub-agent.js +53 -0
  104. package/dist/agents/sub-agent.js.map +1 -0
  105. package/dist/cli/args.d.ts +8 -0
  106. package/dist/cli/args.d.ts.map +1 -0
  107. package/dist/cli/args.js +9 -0
  108. package/dist/cli/args.js.map +1 -0
  109. package/dist/cli/event-listener.d.ts +3 -0
  110. package/dist/cli/event-listener.d.ts.map +1 -0
  111. package/dist/cli/event-listener.js +131 -0
  112. package/dist/cli/event-listener.js.map +1 -0
  113. package/dist/cli/interactive.d.ts +4 -0
  114. package/dist/cli/interactive.d.ts.map +1 -0
  115. package/dist/cli/interactive.js +118 -0
  116. package/dist/cli/interactive.js.map +1 -0
  117. package/dist/cli/runtime.d.ts +8 -0
  118. package/dist/cli/runtime.d.ts.map +1 -0
  119. package/dist/cli/runtime.js +27 -0
  120. package/dist/cli/runtime.js.map +1 -0
  121. package/dist/cli/spinner.d.ts +2 -0
  122. package/dist/cli/spinner.d.ts.map +1 -0
  123. package/dist/cli/spinner.js +22 -0
  124. package/dist/cli/spinner.js.map +1 -0
  125. package/dist/cli/terminal-render.d.ts +7 -0
  126. package/dist/cli/terminal-render.d.ts.map +1 -0
  127. package/dist/cli/terminal-render.js +282 -0
  128. package/dist/cli/terminal-render.js.map +1 -0
  129. package/dist/cli/types.d.ts +29 -0
  130. package/dist/cli/types.d.ts.map +1 -0
  131. package/dist/cli/types.js +3 -0
  132. package/dist/cli/types.js.map +1 -0
  133. package/dist/cli.d.ts +4 -41
  134. package/dist/cli.d.ts.map +1 -1
  135. package/dist/cli.js +84 -588
  136. package/dist/cli.js.map +1 -1
  137. package/dist/config/helpers.d.ts +6 -0
  138. package/dist/config/helpers.d.ts.map +1 -0
  139. package/dist/config/helpers.js +164 -0
  140. package/dist/config/helpers.js.map +1 -0
  141. package/dist/config/index.d.ts +15 -0
  142. package/dist/config/index.d.ts.map +1 -0
  143. package/dist/config/index.js +160 -0
  144. package/dist/config/index.js.map +1 -0
  145. package/dist/config/types.d.ts +57 -0
  146. package/dist/config/types.d.ts.map +1 -0
  147. package/dist/config/types.js +2 -0
  148. package/dist/config/types.js.map +1 -0
  149. package/dist/context.d.ts +8 -69
  150. package/dist/context.d.ts.map +1 -1
  151. package/dist/context.js +44 -24
  152. package/dist/context.js.map +1 -1
  153. package/dist/core/context.d.ts +66 -0
  154. package/dist/core/context.d.ts.map +1 -0
  155. package/dist/core/context.js +149 -0
  156. package/dist/core/context.js.map +1 -0
  157. package/dist/deep-agent.d.ts +5 -2
  158. package/dist/deep-agent.d.ts.map +1 -1
  159. package/dist/deep-agent.js +44 -11
  160. package/dist/deep-agent.js.map +1 -1
  161. package/dist/index.d.ts +6 -6
  162. package/dist/index.d.ts.map +1 -1
  163. package/dist/index.js +6 -6
  164. package/dist/index.js.map +1 -1
  165. package/dist/middleware/malformed-tool-call-middleware.d.ts +8 -0
  166. package/dist/middleware/malformed-tool-call-middleware.d.ts.map +1 -0
  167. package/dist/middleware/malformed-tool-call-middleware.js +191 -0
  168. package/dist/middleware/malformed-tool-call-middleware.js.map +1 -0
  169. package/dist/react-agent.d.ts +2 -2
  170. package/dist/react-agent.d.ts.map +1 -1
  171. package/dist/react-agent.js +28 -9
  172. package/dist/react-agent.js.map +1 -1
  173. package/package.json +1 -1
  174. package/scripts/resolve-deps.js +54 -0
  175. package/src/agents/deep-agent.ts +165 -0
  176. package/src/agents/react-agent.helpers.ts +227 -0
  177. package/src/agents/react-agent.ts +584 -0
  178. package/src/agents/sub-agent.ts +82 -0
  179. package/src/cli/args.ts +15 -0
  180. package/src/cli/event-listener.ts +162 -0
  181. package/src/cli/interactive.ts +144 -0
  182. package/src/cli/runtime.ts +31 -0
  183. package/src/cli/spinner.ts +23 -0
  184. package/src/cli/terminal-render.ts +322 -0
  185. package/src/cli/types.ts +33 -0
  186. package/src/cli.ts +91 -702
  187. package/src/config/helpers.ts +179 -0
  188. package/src/config/index.ts +245 -0
  189. package/src/config/types.ts +62 -0
  190. package/src/core/context.ts +266 -0
  191. package/src/index.ts +13 -11
  192. package/src/middleware/malformed-tool-call-middleware.ts +239 -0
  193. package/src/types/markdown-it-terminal.d.ts +4 -0
  194. package/src/types/marked-terminal.d.ts +16 -0
  195. package/dist/config.d.ts +0 -86
  196. package/dist/config.d.ts.map +0 -1
  197. package/dist/config.js +0 -84
  198. package/dist/config.js.map +0 -1
  199. package/src/config.ts +0 -177
  200. package/src/context.ts +0 -247
  201. package/src/deep-agent.ts +0 -104
  202. package/src/react-agent.ts +0 -576
  203. /package/{src → agent-runtime/src/middleware}/malformed-tool-call-middleware.ts +0 -0
  204. /package/{src → agent-runtime/src/types}/markdown-it-terminal.d.ts +0 -0
  205. /package/{src → agent-runtime/src/types}/marked-terminal.d.ts +0 -0
@@ -0,0 +1,400 @@
1
+ import { createAgent as createLangChainAgent } from "langchain";
2
+ import { DynamicStructuredTool } from "@langchain/core/tools";
3
+ import { z } from "zod";
4
+ import { extractLastMessageText, stripNullishObjectFields, summarizeForLog } from "@easynet/agent-common";
5
+ import { buildPtcHint, deriveFallbackTextFromMessages, extractSchemaKeys, hasToolMessages, inferMemoryTypeByStructure, inferMemoryTypeWithModel, pickAgentConfig, pickFirstAgentName, printReactSteps, readAppBoolean, readAppString, } from "./react-agent.helpers.js";
6
+ function applyDefaultToolChoice(model) {
7
+ const m = model;
8
+ const orig = m.bindTools?.bind(model);
9
+ if (!orig)
10
+ return;
11
+ m.bindTools = function (tools, opts) {
12
+ return orig(tools, { ...opts, tool_choice: "auto" });
13
+ };
14
+ }
15
+ function resolveRuntimeConfig(ctx, options) {
16
+ const agentName = options.agentName ?? pickFirstAgentName(ctx.config);
17
+ const configReact = pickAgentConfig(ctx.config, agentName);
18
+ const appConfig = ctx.config.app;
19
+ return {
20
+ agentName,
21
+ configReact,
22
+ namespace: options.namespace ?? configReact?.memory?.namespace,
23
+ topK: options.topK ?? configReact?.memory?.top_k,
24
+ budgetTokens: options.budgetTokens ?? configReact?.memory?.budget_tokens,
25
+ systemPrompt: options.systemPrompt ?? configReact?.systemPrompt,
26
+ maxSteps: options.maxSteps ?? configReact?.maxSteps,
27
+ printSteps: options.printSteps ?? configReact?.printSteps ?? readAppBoolean(appConfig, "printSteps"),
28
+ fallbackText: options.fallbackText ?? configReact?.fallbackText ?? readAppString(appConfig, "fallbackText"),
29
+ commandWindowLabel: options.commandWindowLabel ?? configReact?.commandWindowLabel ?? readAppString(appConfig, "commandWindowLabel"),
30
+ autoWriteMemory: options.autoWriteMemory ?? (configReact?.memory?.auto_write ?? true),
31
+ autoWriteScope: configReact?.memory?.auto_write_scope ?? "thread",
32
+ autoWriteMaxChars: configReact?.memory?.auto_write_max_chars ?? 2400,
33
+ autoWriteUser: configReact?.memory?.auto_write_user ?? true,
34
+ autoWriteAssistant: configReact?.memory?.auto_write_assistant ?? true,
35
+ ptcEnabled: options.ptc?.enabled ?? true,
36
+ ptcMaxRetries: Math.max(0, options.ptc?.maxRetries ?? 1),
37
+ invokeTimeoutMs: Math.max(5000, Number(configReact?.invokeTimeoutMs
38
+ ?? appConfig?.invokeTimeoutMs
39
+ ?? 90000) || 90000),
40
+ };
41
+ }
42
+ function createAliasGenerator() {
43
+ const usedNames = new Set();
44
+ return (raw, index) => {
45
+ const segments = raw.split(".");
46
+ const base = segments[0] === "file" && segments.length > 2
47
+ ? segments.slice(2).join("-")
48
+ : segments.pop() || `tool_${index + 1}`;
49
+ const normalized = base.replace(/[^a-zA-Z0-9_-]/g, "_").slice(0, 48) || `tool_${index + 1}`;
50
+ let name = normalized;
51
+ let suffix = 2;
52
+ while (usedNames.has(name)) {
53
+ name = `${normalized}_${suffix}`;
54
+ suffix += 1;
55
+ }
56
+ usedNames.add(name);
57
+ return name;
58
+ };
59
+ }
60
+ function buildAliasedTools(args) {
61
+ const toAlias = createAliasGenerator();
62
+ return args.runtimeTools.map((tool, idx) => {
63
+ const alias = toAlias(tool.name, idx);
64
+ return new DynamicStructuredTool({
65
+ name: alias,
66
+ description: tool.description ?? `Tool ${alias}`,
67
+ schema: tool.schema,
68
+ func: async (inputArgs) => {
69
+ const sanitizedArgs = stripNullishObjectFields((inputArgs ?? {}));
70
+ if (args.currentToolStatsRef.current)
71
+ args.currentToolStatsRef.current.invoked += 1;
72
+ args.publish("agent.react.tool.invoke.start", "react-agent", alias, { args: sanitizedArgs });
73
+ try {
74
+ const raw = await tool.invoke(sanitizedArgs);
75
+ if (args.currentToolStatsRef.current)
76
+ args.currentToolStatsRef.current.succeeded += 1;
77
+ args.publish("agent.react.tool.invoke.done", alias, "react-agent", { result: raw, resultPreview: summarizeForLog(raw) });
78
+ return typeof raw === "string" ? raw : raw == null ? "" : JSON.stringify(raw);
79
+ }
80
+ catch (err) {
81
+ const message = err instanceof Error ? err.message : String(err);
82
+ if (args.currentToolStatsRef.current) {
83
+ args.currentToolStatsRef.current.failed += 1;
84
+ args.currentToolStatsRef.current.lastError = message;
85
+ }
86
+ args.publish("agent.react.tool.invoke.error", alias, "react-agent", { error: message });
87
+ throw err;
88
+ }
89
+ },
90
+ });
91
+ });
92
+ }
93
+ function maybeAddActivateSkillTool(allTools, ctx, config) {
94
+ const skillsConfig = pickAgentConfig(ctx.config, config.agentName)?.skills;
95
+ if (!ctx.skillSet || skillsConfig?.mode !== "subagent" || ctx.skillSet.list().length === 0)
96
+ return;
97
+ const skillNames = ctx.skillSet.list().map((skill) => skill.name);
98
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- zod enum tuple constraints
99
+ allTools.push(new DynamicStructuredTool({
100
+ name: "activateSkill",
101
+ description: `Activate a skill by name to get its detailed instructions. Available skills: ${skillNames.join(", ")}`,
102
+ schema: z.object({
103
+ skillName: z.enum(skillNames).describe("Name of the skill to activate"),
104
+ }),
105
+ func: async (args) => {
106
+ try {
107
+ return await ctx.skillSet.read(args.skillName);
108
+ }
109
+ catch (err) {
110
+ return JSON.stringify({ error: err instanceof Error ? err.message : String(err) });
111
+ }
112
+ },
113
+ }));
114
+ }
115
+ async function recallInjectedText(ctx, config, userMessage) {
116
+ if (!config.namespace)
117
+ return "";
118
+ const recalled = await ctx.memory.recall({
119
+ namespace: config.namespace,
120
+ query: userMessage,
121
+ ...(typeof config.topK === "number" ? { topK: config.topK } : {}),
122
+ ...(typeof config.budgetTokens === "number" ? { budgetTokens: config.budgetTokens } : {}),
123
+ });
124
+ return recalled.injectedText;
125
+ }
126
+ async function buildEffectiveMessage(ctx, config, userMessage, injectedText, publish) {
127
+ let skillBlock = "";
128
+ if (ctx.skillSet) {
129
+ const skillMatchOptions = {
130
+ ...(typeof config.configReact?.skills?.embedding_threshold === "number"
131
+ ? { embeddingThreshold: config.configReact.skills.embedding_threshold }
132
+ : {}),
133
+ ...(typeof config.configReact?.skills?.keyword_threshold === "number"
134
+ ? { keywordThreshold: config.configReact.skills.keyword_threshold }
135
+ : {}),
136
+ };
137
+ const match = await ctx.skillSet.match(userMessage, skillMatchOptions);
138
+ if (match) {
139
+ publish("agent.react.skill.matched", "react-agent", "skill", { skill: match.skill.name, score: match.score });
140
+ skillBlock = `[Matched skill: ${match.skill.name}]\nFollow these instructions step by step:\n\n${match.instructions}\n\n`;
141
+ }
142
+ }
143
+ const contextBlock = injectedText.trim().length > 0 ? `[Relevant memory]\n${injectedText}\n\n` : "";
144
+ return skillBlock + contextBlock + userMessage;
145
+ }
146
+ async function invokeWithOptionalRecursion(agent, messageContent, conversationHistory, maxSteps, invokeTimeoutMs, currentToolStatsRef) {
147
+ const invokeInput = { messages: [...conversationHistory, { role: "user", content: messageContent }] };
148
+ currentToolStatsRef.current = { invoked: 0, succeeded: 0, failed: 0 };
149
+ try {
150
+ const invokePromise = typeof maxSteps === "number"
151
+ ? agent.invoke(invokeInput, { recursionLimit: maxSteps })
152
+ : agent.invoke(invokeInput);
153
+ const out = await Promise.race([
154
+ invokePromise,
155
+ new Promise((_, reject) => {
156
+ setTimeout(() => reject(new Error(`Agent invoke timed out after ${invokeTimeoutMs}ms`)), invokeTimeoutMs);
157
+ }),
158
+ ]);
159
+ return { out, stats: currentToolStatsRef.current };
160
+ }
161
+ finally {
162
+ currentToolStatsRef.current = null;
163
+ }
164
+ }
165
+ async function runWithPtcIfNeeded(args) {
166
+ let { out: result, stats } = await invokeWithOptionalRecursion(args.agent, args.effectiveMessage, args.conversationHistory, args.maxSteps, args.invokeTimeoutMs, args.currentToolStatsRef);
167
+ let messages = result?.messages ?? result;
168
+ let extractedText = extractLastMessageText(result).trim();
169
+ if (!args.ptcEnabled || args.ptcMaxRetries <= 0) {
170
+ return { result, messages, extractedText, stats };
171
+ }
172
+ let retries = 0;
173
+ while (retries < args.ptcMaxRetries) {
174
+ const noToolActivity = (stats?.invoked ?? 0) === 0 && !hasToolMessages(messages);
175
+ const onlyToolFailure = (stats?.invoked ?? 0) > 0 && (stats?.succeeded ?? 0) === 0;
176
+ if (!noToolActivity && !onlyToolFailure)
177
+ break;
178
+ args.publish("agent.react.ptc.retry", "react-agent", "react-agent", {
179
+ retry: retries + 1,
180
+ reason: noToolActivity ? "no_tool_activity" : "tool_failed",
181
+ stats,
182
+ });
183
+ const ptcHint = buildPtcHint({
184
+ taskIntent: args.userMessage,
185
+ stats: stats ?? { invoked: 0, succeeded: 0, failed: 0 },
186
+ toolSignatures: args.toolSignatures,
187
+ });
188
+ const retried = await invokeWithOptionalRecursion(args.agent, `${args.effectiveMessage}\n\n${ptcHint}`, args.conversationHistory, args.maxSteps, args.invokeTimeoutMs, args.currentToolStatsRef);
189
+ result = retried.out;
190
+ stats = retried.stats;
191
+ messages = result?.messages ?? result;
192
+ extractedText = extractLastMessageText(result).trim();
193
+ retries += 1;
194
+ }
195
+ return { result, messages, extractedText, stats };
196
+ }
197
+ function updateConversationHistory(history, userMessage, text) {
198
+ history.push({ role: "user", content: userMessage });
199
+ if (text.trim().length > 0)
200
+ history.push({ role: "assistant", content: text });
201
+ if (history.length > 24) {
202
+ history.splice(0, history.length - 24);
203
+ }
204
+ }
205
+ function findItermCommandTool(tools) {
206
+ return tools.find((tool) => tool.name.includes("itermRunCommandInSession")) ?? null;
207
+ }
208
+ function extractItermOutput(raw) {
209
+ if (!raw || typeof raw !== "object") {
210
+ return {
211
+ output: "",
212
+ command: "pwd && ls -la",
213
+ isOutputTruncated: false,
214
+ readError: "",
215
+ sessionId: "",
216
+ totalBufferLines: 0,
217
+ returnedLineCount: 0,
218
+ };
219
+ }
220
+ const result = raw.result;
221
+ if (!result || typeof result !== "object") {
222
+ return {
223
+ output: "",
224
+ command: "pwd && ls -la",
225
+ isOutputTruncated: false,
226
+ readError: "",
227
+ sessionId: "",
228
+ totalBufferLines: 0,
229
+ returnedLineCount: 0,
230
+ };
231
+ }
232
+ const rec = result;
233
+ return {
234
+ output: typeof rec.output === "string" ? rec.output : "",
235
+ command: typeof rec.command === "string" && rec.command.trim() ? rec.command : "pwd && ls -la",
236
+ isOutputTruncated: rec.isOutputTruncated === true,
237
+ readError: typeof rec.readError === "string" ? rec.readError.trim() : "",
238
+ sessionId: typeof rec.sessionId === "string" ? rec.sessionId : "",
239
+ totalBufferLines: typeof rec.totalBufferLines === "number" && Number.isFinite(rec.totalBufferLines)
240
+ ? rec.totalBufferLines
241
+ : 0,
242
+ returnedLineCount: typeof rec.returnedLineCount === "number" && Number.isFinite(rec.returnedLineCount)
243
+ ? rec.returnedLineCount
244
+ : 0,
245
+ };
246
+ }
247
+ async function fallbackWithTargetPanelContext(args) {
248
+ const itermTool = findItermCommandTool(args.runtimeTools);
249
+ if (!itermTool)
250
+ return null;
251
+ const fallbackCommand = "pwd && ls -la";
252
+ args.publish("agent.react.tool.invoke.start", "react-agent", itermTool.name, {
253
+ args: { command: fallbackCommand, maxOutputLines: 200, outputOffsetLines: 0 },
254
+ forced: true,
255
+ reason: "no_tool_activity",
256
+ });
257
+ try {
258
+ const raw = await itermTool.invoke({
259
+ command: fallbackCommand,
260
+ maxOutputLines: 200,
261
+ outputOffsetLines: 0,
262
+ });
263
+ args.publish("agent.react.tool.invoke.done", itermTool.name, "react-agent", {
264
+ forced: true,
265
+ reason: "no_tool_activity",
266
+ resultPreview: summarizeForLog(raw),
267
+ });
268
+ const parsed = extractItermOutput(raw);
269
+ if (!parsed.output.trim()) {
270
+ if (parsed.readError) {
271
+ return `Executed \`${parsed.command}\` in target panel, but reading terminal output failed: ${parsed.readError}`;
272
+ }
273
+ const diagnostics = [
274
+ parsed.sessionId ? `sessionId=${parsed.sessionId}` : "",
275
+ `bufferLines=${parsed.totalBufferLines}`,
276
+ `returnedLines=${parsed.returnedLineCount}`,
277
+ ].filter(Boolean).join(", ");
278
+ return `Executed \`${parsed.command}\` in target panel, but no output was returned (${diagnostics}).`;
279
+ }
280
+ return [
281
+ "I collected context from target panel and used it as the source of truth.",
282
+ "",
283
+ `Command: \`${parsed.command}\``,
284
+ "",
285
+ "```",
286
+ parsed.output,
287
+ "```",
288
+ parsed.isOutputTruncated ? "\nNote: output is truncated; run paginated reads for full coverage." : "",
289
+ ].join("\n");
290
+ }
291
+ catch (err) {
292
+ args.publish("agent.react.tool.invoke.error", itermTool.name, "react-agent", {
293
+ forced: true,
294
+ reason: "no_tool_activity",
295
+ error: err instanceof Error ? err.message : String(err),
296
+ });
297
+ return null;
298
+ }
299
+ }
300
+ async function autoWriteMemoryIfNeeded(ctx, config, userMessage, text, publish) {
301
+ if (!config.namespace || !config.autoWriteMemory)
302
+ return;
303
+ const scope = config.autoWriteScope === "auto"
304
+ ? inferMemoryTypeByStructure(`${userMessage}\n${text}`)
305
+ : config.autoWriteScope;
306
+ const writeItems = [];
307
+ if (config.autoWriteUser && userMessage.trim().length > 0)
308
+ writeItems.push(`[user]\n${userMessage.trim()}`);
309
+ if (config.autoWriteAssistant && text.trim().length > 0)
310
+ writeItems.push(`[assistant]\n${text.trim()}`);
311
+ const content = writeItems.join("\n\n").slice(0, Math.max(0, config.autoWriteMaxChars));
312
+ if (!content.length)
313
+ return;
314
+ try {
315
+ publish("agent.react.memory.write.start", "react-agent", "memory", { type: scope, auto: true });
316
+ await ctx.memory.memorize(config.namespace, scope, content);
317
+ publish("agent.react.memory.write.done", "memory", "react-agent", { type: scope, auto: true });
318
+ }
319
+ catch (err) {
320
+ publish("agent.react.memory.write.error", "memory", "react-agent", {
321
+ auto: true,
322
+ error: err instanceof Error ? err.message : String(err),
323
+ });
324
+ }
325
+ }
326
+ export { printReactSteps } from "./react-agent.helpers.js";
327
+ export function createReactAgent(ctx, options = {}) {
328
+ const publish = (name, from, to, payload) => {
329
+ ctx.events.publish({ name, from, to, payload });
330
+ };
331
+ const runtimeTools = ctx.tools;
332
+ const config = resolveRuntimeConfig(ctx, options);
333
+ const currentToolStatsRef = { current: null };
334
+ const aliasedTools = buildAliasedTools({ runtimeTools, publish, currentToolStatsRef });
335
+ const allTools = [...aliasedTools];
336
+ maybeAddActivateSkillTool(allTools, ctx, config);
337
+ const toolSignatures = aliasedTools.map((tool) => {
338
+ const keys = extractSchemaKeys(tool.schema);
339
+ return keys.length > 0 ? `${tool.name}(${keys.join(",")})` : `${tool.name}(...)`;
340
+ });
341
+ applyDefaultToolChoice(ctx.llm);
342
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- heavily overloaded createAgent
343
+ const agent = createLangChainAgent({
344
+ model: ctx.llm,
345
+ tools: allTools,
346
+ systemPrompt: config.systemPrompt,
347
+ ...(options.middleware?.length ? { middleware: options.middleware } : {}),
348
+ });
349
+ const conversationHistory = [];
350
+ return {
351
+ agent,
352
+ async run(userMessage) {
353
+ publish("agent.react.run.start", "user", "react-agent", { userMessage });
354
+ const injectedText = await recallInjectedText(ctx, config, userMessage);
355
+ const effectiveMessage = await buildEffectiveMessage(ctx, config, userMessage, injectedText, publish);
356
+ const runResult = await runWithPtcIfNeeded({
357
+ agent,
358
+ effectiveMessage,
359
+ userMessage,
360
+ ptcEnabled: config.ptcEnabled,
361
+ ptcMaxRetries: config.ptcMaxRetries,
362
+ toolSignatures,
363
+ publish,
364
+ maxSteps: typeof config.maxSteps === "number" ? config.maxSteps : 8,
365
+ invokeTimeoutMs: config.invokeTimeoutMs,
366
+ conversationHistory,
367
+ currentToolStatsRef,
368
+ });
369
+ if (config.printSteps === true)
370
+ printReactSteps(runResult.messages);
371
+ const noToolActivity = (runResult.stats?.invoked ?? 0) === 0 && !hasToolMessages(runResult.messages);
372
+ const forcedText = noToolActivity
373
+ ? await fallbackWithTargetPanelContext({ runtimeTools, userMessage, publish })
374
+ : null;
375
+ const text = forcedText ?? (runResult.extractedText || (config.fallbackText
376
+ ? deriveFallbackTextFromMessages((Array.isArray(runResult.messages) ? runResult.messages : []), {
377
+ fallbackText: config.fallbackText,
378
+ commandWindowLabel: config.commandWindowLabel,
379
+ })
380
+ : runResult.extractedText));
381
+ updateConversationHistory(conversationHistory, userMessage, text);
382
+ await autoWriteMemoryIfNeeded(ctx, config, userMessage, text, publish);
383
+ publish("agent.react.run.done", "react-agent", "user", { text });
384
+ return { text, messages: runResult.messages };
385
+ },
386
+ async remember(content, type = "auto") {
387
+ const resolvedType = type === "auto"
388
+ ? (await inferMemoryTypeWithModel(ctx.llm, content)) ?? inferMemoryTypeByStructure(content)
389
+ : type;
390
+ publish("agent.react.memory.write.start", "react-agent", "memory", { type: resolvedType });
391
+ if (!config.namespace) {
392
+ publish("agent.react.memory.write.skipped", "react-agent", "memory", { reason: "namespace_not_configured" });
393
+ return;
394
+ }
395
+ await ctx.memory.memorize(config.namespace, resolvedType, content);
396
+ publish("agent.react.memory.write.done", "memory", "react-agent", { type: resolvedType });
397
+ },
398
+ };
399
+ }
400
+ //# sourceMappingURL=react-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react-agent.js","sourceRoot":"","sources":["../../src/agents/react-agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { BotContext } from "../core/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/agents/sub-agent.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,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 "../middleware/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/agents/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,iDAAiD,CAAC;AA2B9F;;;;;;;;;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,8 @@
1
+ import { type AgentKind } from "./types.js";
2
+ export interface ParsedArgs {
3
+ kind: AgentKind;
4
+ query?: string;
5
+ explicitKind: boolean;
6
+ }
7
+ export declare function parseArgs(argv?: string[]): ParsedArgs;
8
+ //# sourceMappingURL=args.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,SAAS,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,UAAU,CAM5E"}
@@ -0,0 +1,9 @@
1
+ import { DEEP, REACT } from "./types.js";
2
+ export function parseArgs(argv = process.argv.slice(2)) {
3
+ const first = argv[0]?.toLowerCase();
4
+ const explicitKind = first === REACT || first === DEEP;
5
+ const kind = first === DEEP ? DEEP : REACT;
6
+ const query = explicitKind ? (argv[1] ?? undefined) : (first ?? undefined);
7
+ return { kind, query, explicitKind };
8
+ }
9
+ //# sourceMappingURL=args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAkB,MAAM,YAAY,CAAC;AAQzD,MAAM,UAAU,SAAS,CAAC,OAAiB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;IACrC,MAAM,YAAY,GAAG,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC;IACvD,MAAM,IAAI,GAAc,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IACtD,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC;IAC3E,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;AACvC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { AgentEventListener } from "@easynet/agent-common";
2
+ export declare function createStructuredRunEventListener(writer?: (line: string) => void): AgentEventListener;
3
+ //# sourceMappingURL=event-listener.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-listener.d.ts","sourceRoot":"","sources":["../../src/cli/event-listener.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAyJ5E,wBAAgB,gCAAgC,CAAC,MAAM,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAoB,GAAG,kBAAkB,CAQnH"}