@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
package/dist/cli.js ADDED
@@ -0,0 +1,617 @@
1
+ /**
2
+ * Shared CLI runner for agent apps.
3
+ * Provides: arg parsing, single-shot mode, interactive REPL, event logging.
4
+ */
5
+ import os from "node:os";
6
+ import { createInterface } from "node:readline";
7
+ import MarkdownIt from "markdown-it";
8
+ import markdownItTerminal from "markdown-it-terminal";
9
+ import { createConsoleAgentEventListener, } from "@easynet/agent-common";
10
+ import { createReactAgent } from "./react-agent.js";
11
+ import { createDeepAgent } from "./deep-agent.js";
12
+ import { malformedToolCallMiddleware } from "./malformed-tool-call-middleware.js";
13
+ const REACT = "react";
14
+ const DEEP = "deep";
15
+ function parseArgs() {
16
+ const args = process.argv.slice(2);
17
+ const first = args[0]?.toLowerCase();
18
+ const kind = first === DEEP ? DEEP : REACT;
19
+ const query = first === REACT || first === DEEP ? (args[1] ?? undefined) : (first ?? undefined);
20
+ return { kind, query };
21
+ }
22
+ function escapeRegExp(value) {
23
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
24
+ }
25
+ async function createRuntime(ctx, kind) {
26
+ if (kind === REACT) {
27
+ return createReactAgent(ctx, {
28
+ middleware: [malformedToolCallMiddleware()],
29
+ });
30
+ }
31
+ return createDeepAgent(ctx);
32
+ }
33
+ async function runOne(ctx, kind, query) {
34
+ const runtime = await createRuntime(ctx, kind);
35
+ const { text } = await runtime.run(query);
36
+ return text;
37
+ }
38
+ function createAnsi(useColor) {
39
+ return {
40
+ reset: useColor ? "\x1b[0m" : "",
41
+ dim: useColor ? "\x1b[2m" : "",
42
+ heading: useColor ? "\x1b[1;38;5;45m" : "",
43
+ bullet: useColor ? "\x1b[38;5;81m" : "",
44
+ code: useColor ? "\x1b[38;5;221m" : "",
45
+ quote: useColor ? "\x1b[38;5;245m" : "",
46
+ hr: useColor ? "\x1b[38;5;240m" : "",
47
+ };
48
+ }
49
+ function styleInlineMarkdown(line, ansi) {
50
+ return line
51
+ .replace(/`([^`]+)`/g, `${ansi.code}\`$1\`${ansi.reset}`)
52
+ .replace(/\*\*([^*]+)\*\*/g, `${ansi.heading}$1${ansi.reset}`);
53
+ }
54
+ function parseTableRow(line) {
55
+ const trimmed = line.trim().replace(/^\|/, "").replace(/\|$/, "");
56
+ return trimmed.split("|").map((cell) => cell.trim());
57
+ }
58
+ function isTableSeparatorRow(cells) {
59
+ return cells.length > 0 && cells.every((c) => /^:?-{3,}:?$/.test(c));
60
+ }
61
+ function renderTable(rows, ansi) {
62
+ const normalized = rows.map((r) => [...r]);
63
+ const colCount = Math.max(...normalized.map((r) => r.length));
64
+ for (const row of normalized) {
65
+ while (row.length < colCount)
66
+ row.push("");
67
+ }
68
+ const widths = Array.from({ length: colCount }, (_, i) => Math.max(...normalized.map((r) => (r[i] ?? "").length)));
69
+ const line = `+${widths.map((w) => "-".repeat(w + 2)).join("+")}+`;
70
+ const out = [`${ansi.hr}${line}${ansi.reset}`];
71
+ normalized.forEach((row, idx) => {
72
+ const body = row
73
+ .map((cell, i) => ` ${(cell ?? "").padEnd(widths[i] ?? 0)} `)
74
+ .join("|");
75
+ const styledBody = idx === 0
76
+ ? `${ansi.heading}|${styleInlineMarkdown(body, ansi)}|${ansi.reset}`
77
+ : `|${styleInlineMarkdown(body, ansi)}|`;
78
+ out.push(styledBody);
79
+ if (idx === 0)
80
+ out.push(`${ansi.hr}${line}${ansi.reset}`);
81
+ });
82
+ out.push(`${ansi.hr}${line}${ansi.reset}`);
83
+ return out;
84
+ }
85
+ function formatMarkdownForTerminal(markdown, options = { useColor: true }) {
86
+ const ansi = createAnsi(options.useColor);
87
+ const lines = markdown.replace(/\r\n/g, "\n").split("\n");
88
+ const out = [];
89
+ let inCodeBlock = false;
90
+ let codeFenceLang = "";
91
+ let codeBoxWidth = 0;
92
+ for (let i = 0; i < lines.length; i += 1) {
93
+ const rawLine = lines[i];
94
+ const line = rawLine ?? "";
95
+ if (line.trim().startsWith("```")) {
96
+ if (!inCodeBlock) {
97
+ inCodeBlock = true;
98
+ codeFenceLang = line.trim().slice(3).trim();
99
+ const title = codeFenceLang ? ` code:${codeFenceLang} ` : " code ";
100
+ codeBoxWidth = Math.max(16, title.length + 4);
101
+ out.push(`${ansi.hr}┌${"─".repeat(codeBoxWidth)}┐${ansi.reset}`);
102
+ out.push(`${ansi.hr}│${ansi.reset}${ansi.dim}${title.padEnd(codeBoxWidth)}${ansi.reset}${ansi.hr}│${ansi.reset}`);
103
+ }
104
+ else {
105
+ inCodeBlock = false;
106
+ codeFenceLang = "";
107
+ out.push(`${ansi.hr}└${"─".repeat(codeBoxWidth)}┘${ansi.reset}`);
108
+ }
109
+ continue;
110
+ }
111
+ if (inCodeBlock) {
112
+ const content = line.length > codeBoxWidth ? line.slice(0, codeBoxWidth) : line.padEnd(codeBoxWidth);
113
+ out.push(`${ansi.hr}│${ansi.reset}${ansi.code}${content}${ansi.reset}${ansi.hr}│${ansi.reset}`);
114
+ continue;
115
+ }
116
+ // Markdown table: header row + separator row + data rows
117
+ if (line.includes("|") &&
118
+ i + 1 < lines.length &&
119
+ (lines[i + 1] ?? "").includes("|")) {
120
+ const header = parseTableRow(line);
121
+ const sep = parseTableRow(lines[i + 1] ?? "");
122
+ if (header.length > 1 && header.length === sep.length && isTableSeparatorRow(sep)) {
123
+ const rows = [header];
124
+ let j = i + 2;
125
+ while (j < lines.length && (lines[j] ?? "").includes("|")) {
126
+ rows.push(parseTableRow(lines[j] ?? ""));
127
+ j += 1;
128
+ }
129
+ out.push(...renderTable(rows, ansi));
130
+ i = j - 1;
131
+ continue;
132
+ }
133
+ }
134
+ if (/^\s*#{1,6}\s+/.test(line)) {
135
+ const headingText = line.replace(/^\s*#{1,6}\s+/, "").trim();
136
+ out.push(`${ansi.heading}${headingText}${ansi.reset}`);
137
+ continue;
138
+ }
139
+ if (/^\s*>\s?/.test(line)) {
140
+ out.push(`${ansi.quote}${line}${ansi.reset}`);
141
+ continue;
142
+ }
143
+ if (/^\s*([-*]|\d+\.)\s+/.test(line)) {
144
+ out.push(`${ansi.bullet}${styleInlineMarkdown(line, ansi)}${ansi.reset}`);
145
+ continue;
146
+ }
147
+ if (/^\s*---+\s*$/.test(line)) {
148
+ out.push(`${ansi.hr}${"─".repeat(56)}${ansi.reset}`);
149
+ continue;
150
+ }
151
+ out.push(styleInlineMarkdown(line, ansi));
152
+ }
153
+ return out.join("\n");
154
+ }
155
+ const markdownRenderers = new Map();
156
+ function getMarkdownRenderer(useColor) {
157
+ const key = useColor ? "color" : "plain";
158
+ const cached = markdownRenderers.get(key);
159
+ if (cached)
160
+ return cached;
161
+ const md = new MarkdownIt({
162
+ html: false,
163
+ linkify: true,
164
+ typographer: true,
165
+ breaks: false,
166
+ });
167
+ md.use(markdownItTerminal, {
168
+ indent: "",
169
+ ...(useColor
170
+ ? {}
171
+ : {
172
+ styleOptions: {
173
+ code: (s) => s,
174
+ blockquote: (s) => s,
175
+ html: (s) => s,
176
+ heading: (s) => s,
177
+ firstHeading: (s) => s,
178
+ hr: (s) => s,
179
+ listitem: (s) => s,
180
+ table: (s) => s,
181
+ paragraph: (s) => s,
182
+ strong: (s) => s,
183
+ em: (s) => s,
184
+ codespan: (s) => s,
185
+ del: (s) => s,
186
+ link: (s) => s,
187
+ href: (s) => s,
188
+ },
189
+ }),
190
+ });
191
+ markdownRenderers.set(key, md);
192
+ return md;
193
+ }
194
+ function normalizeAssistantMarkdown(text) {
195
+ const source = text.replace(/\r\n/g, "\n");
196
+ const hasMarkdownHeadings = /^\s*#{1,6}\s+/m.test(source);
197
+ const sanitizeLine = (line) => {
198
+ let next = line;
199
+ const trimmed = next.trim();
200
+ // Remove stray inline fence markers that frequently break markdown rendering.
201
+ if (next.includes("```") && !trimmed.startsWith("```")) {
202
+ next = next.replace(/```+/g, "").replace(/\s+$/, "");
203
+ }
204
+ // Keep headings stable and readable in terminal output.
205
+ if (/^\s*#{3,}\s+/.test(next)) {
206
+ next = next.replace(/^\s*#{3,}\s+/, "## ");
207
+ }
208
+ return next;
209
+ };
210
+ const normalizeListLine = (line) => {
211
+ if (/^(\s{2,}|\t+)([*-])\s+/.test(line)) {
212
+ return line.replace(/^(\s{2,}|\t+)([*-])\s+/, "- ");
213
+ }
214
+ if (/^(\s{2,}|\t+)(\d+\.)\s+/.test(line)) {
215
+ return line.replace(/^(\s{2,}|\t+)(\d+\.)\s+/, "$2 ");
216
+ }
217
+ return line;
218
+ };
219
+ const lines = source
220
+ .split("\n")
221
+ .map(sanitizeLine)
222
+ .map(normalizeListLine);
223
+ const titled = lines.map((line) => {
224
+ const trimmed = line.trim();
225
+ const bulletHeading = trimmed.match(/^[-*]\s+\*\*([^*]+)\*\*:?\s*$/);
226
+ if (bulletHeading?.[1]) {
227
+ return `### ${bulletHeading[1].trim()}`;
228
+ }
229
+ const plainBulletHeading = trimmed.match(/^[-*]\s+([^`].+):\s*$/);
230
+ if (plainBulletHeading?.[1] && plainBulletHeading[1].length <= 48) {
231
+ return `### ${plainBulletHeading[1].trim()}`;
232
+ }
233
+ if (hasMarkdownHeadings)
234
+ return trimmed === "Summary (3‑8 bullets)" ? "## Summary" : line;
235
+ const unwrapped = trimmed.replace(/^\*\*(.+)\*\*$/, "$1").trim();
236
+ if (/^(Key terminal output.*|Current terminal buffer.*|Summary.*|Next steps.*)$/i.test(unwrapped)) {
237
+ return `## ${unwrapped}`;
238
+ }
239
+ if (/^(Key observations|Findings|Analysis|Conclusion)$/i.test(unwrapped)) {
240
+ return `## ${unwrapped}`;
241
+ }
242
+ return line;
243
+ });
244
+ // Merge accidental line breaks inside list items so markdown renders as one bullet.
245
+ const merged = [];
246
+ for (let i = 0; i < titled.length; i += 1) {
247
+ const current = titled[i] ?? "";
248
+ const next = titled[i + 1] ?? "";
249
+ const currentTrim = current.trim();
250
+ const nextTrim = next.trim();
251
+ const isListLine = /^([-*]|\d+\.)\s+/.test(currentTrim);
252
+ const nextStartsNewBlock = nextTrim.length === 0 ||
253
+ /^([-*]|\d+\.)\s+/.test(nextTrim) ||
254
+ /^#{1,6}\s+/.test(nextTrim) ||
255
+ /^```/.test(nextTrim) ||
256
+ /^---+$/.test(nextTrim);
257
+ const looksLikeWrappedContinuation = isListLine &&
258
+ !nextStartsNewBlock &&
259
+ /^[0-9./~]/.test(nextTrim);
260
+ if (looksLikeWrappedContinuation) {
261
+ merged.push(`${current.replace(/\s+$/, "")} ${nextTrim}`);
262
+ i += 1;
263
+ continue;
264
+ }
265
+ merged.push(current);
266
+ }
267
+ const out = [];
268
+ for (let i = 0; i < merged.length; i += 1) {
269
+ const line = merged[i] ?? "";
270
+ out.push(line);
271
+ const heading = line.trim();
272
+ const isOutputHeading = /^##\s*(Key terminal output|Current terminal buffer|Terminal output)/i.test(heading);
273
+ if (!isOutputHeading)
274
+ continue;
275
+ if ((merged[i + 1] ?? "").trim().startsWith("```"))
276
+ continue;
277
+ let j = i + 1;
278
+ const block = [];
279
+ while (j < merged.length) {
280
+ const current = merged[j] ?? "";
281
+ if (!current.trim()) {
282
+ if (block.length === 0) {
283
+ j += 1;
284
+ continue;
285
+ }
286
+ break;
287
+ }
288
+ if (!/^\s{2,}\S/.test(current))
289
+ break;
290
+ block.push(current.replace(/^\s+/, ""));
291
+ j += 1;
292
+ }
293
+ if (block.length >= 2) {
294
+ out.push("```text");
295
+ out.push(...block);
296
+ out.push("```");
297
+ i = j - 1;
298
+ }
299
+ }
300
+ const fencedCount = out.reduce((count, line) => count + (/^\s*```/.test(line) ? 1 : 0), 0);
301
+ if (fencedCount % 2 === 1) {
302
+ out.push("```");
303
+ }
304
+ return out.join("\n");
305
+ }
306
+ function renderForTerminal(text, options) {
307
+ if (!options.renderMarkdown)
308
+ return text;
309
+ const normalizedText = normalizeAssistantMarkdown(text);
310
+ try {
311
+ return getMarkdownRenderer(options.useColor).render(normalizedText, {});
312
+ }
313
+ catch {
314
+ return formatMarkdownForTerminal(normalizedText, { useColor: options.useColor });
315
+ }
316
+ }
317
+ function startLoadingSpinner(message) {
318
+ const frames = ["", ".", "..", "..."];
319
+ let frameIndex = 0;
320
+ let lastLength = 0;
321
+ const render = () => {
322
+ const frame = frames[frameIndex % frames.length] ?? "";
323
+ const trimmed = message.trim();
324
+ const base = trimmed.startsWith("⏳") ? trimmed : `⏳ ${trimmed}`;
325
+ const line = `${base}${frame}`;
326
+ const padded = lastLength > line.length ? line.padEnd(lastLength, " ") : line;
327
+ process.stderr.write(`\r${padded}\r`);
328
+ lastLength = padded.length;
329
+ frameIndex += 1;
330
+ };
331
+ render();
332
+ const timer = setInterval(render, 90);
333
+ return () => {
334
+ clearInterval(timer);
335
+ process.stderr.write(`\r${" ".repeat(lastLength)}\r`);
336
+ };
337
+ }
338
+ async function interactive(ctx, kind, options, exitApp) {
339
+ const name = kind === REACT ? "ReAct" : "Deep";
340
+ const runtime = await createRuntime(ctx, kind);
341
+ const userInfo = os.userInfo();
342
+ const userLabel = options.ui?.userLabel ?? `${userInfo.username}`;
343
+ const assistantLabel = options.ui?.assistantLabel ?? name;
344
+ const useColor = options.ui?.useColor ?? (Boolean(process.stdout.isTTY) && !process.env.NO_COLOR);
345
+ const renderMarkdown = options.ui?.renderMarkdown ?? true;
346
+ const echoUserQuestion = options.ui?.echoUserQuestion ?? true;
347
+ const showProcessingSpinner = options.ui?.processingSpinner ?? Boolean(process.stderr.isTTY);
348
+ const processingText = options.ui?.processingText ?? "Processing";
349
+ const color = {
350
+ reset: useColor ? "\x1b[0m" : "",
351
+ dim: useColor ? "\x1b[2m" : "",
352
+ user: useColor ? "\x1b[38;5;39m" : "",
353
+ bot: useColor ? "\x1b[38;5;48m" : "",
354
+ prompt: useColor ? "\x1b[38;5;245m" : "",
355
+ promptUser: useColor ? "\x1b[1;38;5;45m" : "",
356
+ };
357
+ const hr = `${color.dim}${"-".repeat(56)}${color.reset}`;
358
+ const promptText = `${color.prompt}[${color.promptUser}${userLabel}${color.reset}${color.prompt}]${color.reset} `;
359
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
360
+ const userLabelPrefixPattern = new RegExp(`^(?:\\[${escapeRegExp(userLabel)}\\]\\s*)+`, "i");
361
+ const prompt = () => rl.question(promptText, async (line) => {
362
+ const qRaw = line?.trim();
363
+ const q = qRaw?.replace(userLabelPrefixPattern, "").trim();
364
+ if (!q) {
365
+ prompt();
366
+ return;
367
+ }
368
+ if (q === "exit" || q === "quit") {
369
+ rl.close();
370
+ exitApp(0);
371
+ }
372
+ const handler = options.interactiveCommands?.[q.toLowerCase()];
373
+ if (handler) {
374
+ await handler(ctx);
375
+ prompt();
376
+ return;
377
+ }
378
+ let stopProcessingSpinner = null;
379
+ try {
380
+ console.log(`\n${hr}`);
381
+ if (echoUserQuestion) {
382
+ console.log(`${color.user}[${userLabel}]${color.reset}`);
383
+ console.log(`> ${q}`);
384
+ console.log("");
385
+ }
386
+ console.log(`${color.bot}[${assistantLabel}]${color.reset}`);
387
+ stopProcessingSpinner = showProcessingSpinner
388
+ ? startLoadingSpinner(processingText === false ? "⏳" : `⏳ ${processingText}`)
389
+ : null;
390
+ const { text } = await runtime.run(q);
391
+ if (stopProcessingSpinner) {
392
+ stopProcessingSpinner();
393
+ stopProcessingSpinner = null;
394
+ }
395
+ console.log(renderForTerminal(text, { renderMarkdown, useColor }));
396
+ console.log(`${hr}\n`);
397
+ }
398
+ catch (err) {
399
+ if (stopProcessingSpinner) {
400
+ stopProcessingSpinner();
401
+ stopProcessingSpinner = null;
402
+ }
403
+ console.error("Error:", err instanceof Error ? err.message : err);
404
+ }
405
+ finally {
406
+ if (stopProcessingSpinner) {
407
+ stopProcessingSpinner();
408
+ stopProcessingSpinner = null;
409
+ }
410
+ }
411
+ prompt();
412
+ });
413
+ const introText = options.ui?.interactiveIntro ??
414
+ `${options.appName} (${name} agent). Type your message or "exit" to quit.`;
415
+ if (introText !== false) {
416
+ console.log(`${introText}\n`);
417
+ }
418
+ prompt();
419
+ }
420
+ export function createStructuredRunEventListener(writer = console.error) {
421
+ let step = 0;
422
+ let lastCommandSignature = "";
423
+ const stepActionByNumber = new Map();
424
+ const okMark = process.stderr.isTTY && !process.env.NO_COLOR ? "\x1b[32m✔\x1b[0m" : "✔";
425
+ const asRecord = (value) => typeof value === "object" && value !== null ? value : null;
426
+ const asNumber = (value) => typeof value === "number" && Number.isFinite(value) ? value : null;
427
+ const asString = (value) => typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
428
+ const asAnyString = (value) => typeof value === "string" ? value : null;
429
+ const parseJsonObject = (value) => {
430
+ if (typeof value !== "string")
431
+ return null;
432
+ try {
433
+ const parsed = JSON.parse(value);
434
+ return asRecord(parsed);
435
+ }
436
+ catch {
437
+ return null;
438
+ }
439
+ };
440
+ const extractCommandMeta = (args) => {
441
+ const rec = asRecord(args) ?? parseJsonObject(args);
442
+ if (!rec)
443
+ return null;
444
+ const commandRaw = asAnyString(rec.command);
445
+ if (commandRaw === null)
446
+ return null;
447
+ const command = commandRaw.trim();
448
+ return {
449
+ command,
450
+ windowId: asNumber(rec.windowId),
451
+ tabIndex: asNumber(rec.tabIndex),
452
+ sessionId: asString(rec.sessionId),
453
+ };
454
+ };
455
+ const isNoopCaptureCommand = (command) => {
456
+ const normalized = command.trim().replace(/\s+/g, " ");
457
+ return (normalized === "" ||
458
+ normalized === ":" ||
459
+ normalized === "true" ||
460
+ normalized === "printf ''" ||
461
+ normalized === "printf \"\"");
462
+ };
463
+ const extractToolResultMeta = (payload) => {
464
+ const payloadRec = asRecord(payload);
465
+ const rawResult = payloadRec ? (payloadRec.result ?? null) : null;
466
+ const resultRec = asRecord(rawResult) ?? parseJsonObject(rawResult);
467
+ const nestedResult = resultRec ? asRecord(resultRec.result) : null;
468
+ const output = asString((nestedResult ?? resultRec ?? {}).output) ??
469
+ asString((nestedResult ?? resultRec ?? {}).result);
470
+ const outputLines = output ? output.split(/\r?\n/).filter((line) => line.length > 0).length : null;
471
+ const error = asString((nestedResult ?? resultRec ?? {}).error);
472
+ return { outputLines, error };
473
+ };
474
+ return (event) => {
475
+ switch (event.name) {
476
+ case "agent.react.run.start":
477
+ case "agent.deep.run.start":
478
+ step = 0;
479
+ lastCommandSignature = "";
480
+ stepActionByNumber.clear();
481
+ writer("Analyzing started");
482
+ return;
483
+ case "agent.react.skill.matched": {
484
+ const payload = (event.payload ?? {});
485
+ const score = typeof payload.score === "number" ? payload.score.toFixed(3) : "?";
486
+ writer(`[skill] matched ${payload.skill ?? "unknown"} (score ${score})`);
487
+ return;
488
+ }
489
+ case "agent.react.tool.invoke.start": {
490
+ step += 1;
491
+ const payload = (event.payload ?? {});
492
+ const commandMeta = extractCommandMeta(payload.args);
493
+ if (commandMeta) {
494
+ const signature = `${commandMeta.command}|${commandMeta.windowId ?? ""}|${commandMeta.tabIndex ?? ""}|${commandMeta.sessionId ?? ""}`;
495
+ const isRepeat = signature === lastCommandSignature;
496
+ lastCommandSignature = signature;
497
+ const action = isNoopCaptureCommand(commandMeta.command)
498
+ ? "capture current screen"
499
+ : commandMeta.command;
500
+ stepActionByNumber.set(step, `${action}${isRepeat ? " (repeat)" : ""}`);
501
+ }
502
+ else {
503
+ stepActionByNumber.set(step, `tool: ${event.to}`);
504
+ }
505
+ return;
506
+ }
507
+ case "agent.react.tool.invoke.done": {
508
+ const resultMeta = extractToolResultMeta(event.payload);
509
+ const action = stepActionByNumber.get(step) ?? `tool: ${event.to}`;
510
+ if (resultMeta.error) {
511
+ writer(`[step ${step}] ${action} ✖ (${resultMeta.error})`);
512
+ stepActionByNumber.delete(step);
513
+ return;
514
+ }
515
+ writer(`[step ${step}] ${action} ${okMark}`);
516
+ stepActionByNumber.delete(step);
517
+ return;
518
+ }
519
+ case "agent.react.tool.invoke.error": {
520
+ const payload = (event.payload ?? {});
521
+ const action = stepActionByNumber.get(step) ?? `tool: ${event.to}`;
522
+ const message = typeof payload.error === "string"
523
+ ? payload.error
524
+ : payload.error instanceof Error
525
+ ? payload.error.message
526
+ : "unknown error";
527
+ writer(`[step ${step}] ${action} ✖ (${message})`);
528
+ stepActionByNumber.delete(step);
529
+ return;
530
+ }
531
+ case "agent.react.run.done":
532
+ case "agent.deep.run.done":
533
+ writer("completed");
534
+ return;
535
+ default:
536
+ return;
537
+ }
538
+ };
539
+ }
540
+ export function runAppCli(options) {
541
+ const { appName, createBotContext } = options;
542
+ async function main() {
543
+ const { kind, query } = parseArgs();
544
+ const agentLabel = kind === REACT ? "ReAct (LangChain)" : "Deep (DeepAgents)";
545
+ const loadingText = options.ui?.loadingText ?? `${appName}: loading config, LLM, memory, tools...`;
546
+ const useLoadingSpinner = options.ui?.loadingSpinner ?? false;
547
+ let stopLoadingSpinner = null;
548
+ if (loadingText !== false) {
549
+ if (useLoadingSpinner && Boolean(process.stderr.isTTY)) {
550
+ stopLoadingSpinner = startLoadingSpinner(loadingText);
551
+ }
552
+ else {
553
+ console.error(loadingText);
554
+ }
555
+ }
556
+ const ctx = await createBotContext();
557
+ if (stopLoadingSpinner) {
558
+ stopLoadingSpinner();
559
+ }
560
+ let didCleanup = false;
561
+ const cleanup = () => {
562
+ if (didCleanup)
563
+ return;
564
+ didCleanup = true;
565
+ try {
566
+ options.onShutdown?.(ctx);
567
+ }
568
+ catch (err) {
569
+ console.error(`${appName}: onShutdown hook failed:`, err instanceof Error ? err.message : err);
570
+ }
571
+ };
572
+ const exitApp = (code) => {
573
+ cleanup();
574
+ process.exit(code);
575
+ };
576
+ process.once("exit", cleanup);
577
+ process.once("SIGINT", () => exitApp(130));
578
+ process.once("SIGTERM", () => exitApp(143));
579
+ if (process.env.AGENT_EVENT_STDERR === "1") {
580
+ ctx.events.subscribe(createConsoleAgentEventListener());
581
+ }
582
+ const eventListeners = Array.isArray(options.eventListener)
583
+ ? options.eventListener
584
+ : options.eventListener
585
+ ? [options.eventListener]
586
+ : [];
587
+ for (const listener of eventListeners) {
588
+ ctx.events.subscribe(listener);
589
+ }
590
+ if (options.onReady) {
591
+ try {
592
+ await options.onReady(ctx);
593
+ }
594
+ catch (err) {
595
+ console.error(`${appName}: onReady hook failed:`, err instanceof Error ? err.message : err);
596
+ }
597
+ }
598
+ const readyText = options.ui?.readyText ?? `Ready. Agent: ${agentLabel}`;
599
+ if (readyText !== false) {
600
+ console.error(readyText);
601
+ }
602
+ if (query) {
603
+ const text = await runOne(ctx, kind, query);
604
+ const useColor = options.ui?.useColor ?? (Boolean(process.stdout.isTTY) && !process.env.NO_COLOR);
605
+ const renderMarkdown = options.ui?.renderMarkdown ?? true;
606
+ console.log(renderForTerminal(text, { renderMarkdown, useColor }));
607
+ cleanup();
608
+ return;
609
+ }
610
+ await interactive(ctx, kind, options, exitApp);
611
+ }
612
+ main().catch((err) => {
613
+ console.error(err);
614
+ process.exit(1);
615
+ });
616
+ }
617
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}