@aigne/cli 1.60.0-beta → 1.74.0-beta

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 (360) hide show
  1. package/README.md +12 -12
  2. package/dist/_virtual/rolldown_runtime.cjs +29 -0
  3. package/dist/bunwrapper.cjs +22 -0
  4. package/dist/bunwrapper.d.cts +1 -0
  5. package/dist/bunwrapper.d.mts +1 -0
  6. package/dist/bunwrapper.mjs +23 -0
  7. package/dist/bunwrapper.mjs.map +1 -0
  8. package/dist/cli.cjs +42 -0
  9. package/dist/cli.d.cts +9 -0
  10. package/dist/cli.d.cts.map +1 -0
  11. package/dist/cli.d.mts +10 -0
  12. package/dist/cli.d.mts.map +1 -0
  13. package/dist/cli.mjs +41 -0
  14. package/dist/cli.mjs.map +1 -0
  15. package/dist/commands/aigne.cjs +23 -0
  16. package/dist/commands/aigne.mjs +22 -0
  17. package/dist/commands/aigne.mjs.map +1 -0
  18. package/dist/commands/app/agent.cjs +117 -0
  19. package/dist/commands/app/agent.mjs +113 -0
  20. package/dist/commands/app/agent.mjs.map +1 -0
  21. package/dist/commands/app/app.cjs +92 -0
  22. package/dist/commands/app/app.mjs +90 -0
  23. package/dist/commands/app/app.mjs.map +1 -0
  24. package/dist/commands/app/cli.cjs +6 -0
  25. package/dist/commands/app/cli.d.cts +1 -0
  26. package/dist/commands/app/cli.d.mts +1 -0
  27. package/dist/commands/app/cli.mjs +8 -0
  28. package/dist/commands/app/cli.mjs.map +1 -0
  29. package/dist/commands/app/upgrade.cjs +243 -0
  30. package/dist/commands/app/upgrade.mjs +240 -0
  31. package/dist/commands/app/upgrade.mjs.map +1 -0
  32. package/dist/commands/app.cjs +53 -0
  33. package/dist/commands/app.mjs +53 -0
  34. package/dist/commands/app.mjs.map +1 -0
  35. package/dist/commands/create.cjs +66 -0
  36. package/dist/commands/create.mjs +65 -0
  37. package/dist/commands/create.mjs.map +1 -0
  38. package/dist/commands/deploy.cjs +237 -0
  39. package/dist/commands/deploy.mjs +237 -0
  40. package/dist/commands/deploy.mjs.map +1 -0
  41. package/dist/commands/eval.cjs +88 -0
  42. package/dist/commands/eval.mjs +88 -0
  43. package/dist/commands/eval.mjs.map +1 -0
  44. package/dist/commands/hub.cjs +297 -0
  45. package/dist/commands/hub.mjs +294 -0
  46. package/dist/commands/hub.mjs.map +1 -0
  47. package/dist/commands/observe.cjs +49 -0
  48. package/dist/commands/observe.mjs +46 -0
  49. package/dist/commands/observe.mjs.map +1 -0
  50. package/dist/commands/run-skill.cjs +84 -0
  51. package/dist/commands/run-skill.mjs +81 -0
  52. package/dist/commands/run-skill.mjs.map +1 -0
  53. package/dist/commands/run.cjs +172 -0
  54. package/dist/commands/run.mjs +171 -0
  55. package/dist/commands/run.mjs.map +1 -0
  56. package/dist/commands/serve-mcp.cjs +68 -0
  57. package/dist/commands/serve-mcp.mjs +67 -0
  58. package/dist/commands/serve-mcp.mjs.map +1 -0
  59. package/dist/commands/test.cjs +40 -0
  60. package/dist/commands/test.mjs +39 -0
  61. package/dist/commands/test.mjs.map +1 -0
  62. package/dist/constants.cjs +28 -0
  63. package/dist/constants.d.cts +9 -0
  64. package/dist/constants.d.cts.map +1 -0
  65. package/dist/constants.d.mts +9 -0
  66. package/dist/constants.d.mts.map +1 -0
  67. package/dist/constants.mjs +24 -0
  68. package/dist/constants.mjs.map +1 -0
  69. package/dist/global.d.cjs +0 -0
  70. package/dist/global.d.cts +6 -0
  71. package/dist/global.d.cts.map +1 -0
  72. package/dist/global.d.mts +6 -0
  73. package/dist/global.d.mts.map +1 -0
  74. package/dist/index.cjs +0 -0
  75. package/dist/index.d.cts +2 -0
  76. package/dist/index.d.mts +2 -0
  77. package/dist/index.mjs +1 -0
  78. package/dist/tracer/terminal.cjs +336 -0
  79. package/dist/tracer/terminal.mjs +332 -0
  80. package/dist/tracer/terminal.mjs.map +1 -0
  81. package/dist/type.cjs +0 -0
  82. package/dist/type.d.cts +10 -0
  83. package/dist/type.d.cts.map +1 -0
  84. package/dist/type.d.mts +10 -0
  85. package/dist/type.d.mts.map +1 -0
  86. package/dist/type.mjs +1 -0
  87. package/dist/ui/utils/terminal-input.cjs +145 -0
  88. package/dist/ui/utils/terminal-input.mjs +144 -0
  89. package/dist/ui/utils/terminal-input.mjs.map +1 -0
  90. package/dist/ui/utils/text-buffer.cjs +865 -0
  91. package/dist/ui/utils/text-buffer.mjs +865 -0
  92. package/dist/ui/utils/text-buffer.mjs.map +1 -0
  93. package/dist/ui/utils/text-utils.cjs +85 -0
  94. package/dist/ui/utils/text-utils.mjs +78 -0
  95. package/dist/ui/utils/text-utils.mjs.map +1 -0
  96. package/dist/utils/agent-v1.cjs +180 -0
  97. package/dist/utils/agent-v1.d.cts +138 -0
  98. package/dist/utils/agent-v1.d.cts.map +1 -0
  99. package/dist/utils/agent-v1.d.mts +138 -0
  100. package/dist/utils/agent-v1.d.mts.map +1 -0
  101. package/dist/utils/agent-v1.mjs +179 -0
  102. package/dist/utils/agent-v1.mjs.map +1 -0
  103. package/dist/utils/aigne-hub/constants.cjs +22 -0
  104. package/dist/utils/aigne-hub/constants.mjs +18 -0
  105. package/dist/utils/aigne-hub/constants.mjs.map +1 -0
  106. package/dist/utils/aigne-hub/credential.cjs +179 -0
  107. package/dist/utils/aigne-hub/credential.mjs +175 -0
  108. package/dist/utils/aigne-hub/credential.mjs.map +1 -0
  109. package/dist/utils/aigne-hub/crypto.cjs +41 -0
  110. package/dist/utils/aigne-hub/crypto.mjs +33 -0
  111. package/dist/utils/aigne-hub/crypto.mjs.map +1 -0
  112. package/dist/utils/aigne-hub/model.cjs +112 -0
  113. package/dist/utils/aigne-hub/model.d.cts +19 -0
  114. package/dist/utils/aigne-hub/model.d.cts.map +1 -0
  115. package/dist/utils/aigne-hub/model.d.mts +19 -0
  116. package/dist/utils/aigne-hub/model.d.mts.map +1 -0
  117. package/dist/utils/aigne-hub/model.mjs +106 -0
  118. package/dist/utils/aigne-hub/model.mjs.map +1 -0
  119. package/dist/utils/aigne-hub/store/file.cjs +64 -0
  120. package/dist/utils/aigne-hub/store/file.mjs +64 -0
  121. package/dist/utils/aigne-hub/store/file.mjs.map +1 -0
  122. package/dist/utils/aigne-hub/store/index.cjs +37 -0
  123. package/dist/utils/aigne-hub/store/index.mjs +37 -0
  124. package/dist/utils/aigne-hub/store/index.mjs.map +1 -0
  125. package/dist/utils/aigne-hub/store/keytar.cjs +61 -0
  126. package/dist/utils/aigne-hub/store/keytar.mjs +61 -0
  127. package/dist/utils/aigne-hub/store/keytar.mjs.map +1 -0
  128. package/dist/utils/aigne-hub/store/migrate.cjs +46 -0
  129. package/dist/utils/aigne-hub/store/migrate.mjs +45 -0
  130. package/dist/utils/aigne-hub/store/migrate.mjs.map +1 -0
  131. package/dist/utils/aigne-hub/type.d.cts +18 -0
  132. package/dist/utils/aigne-hub/type.d.cts.map +1 -0
  133. package/dist/utils/aigne-hub/type.d.mts +18 -0
  134. package/dist/utils/aigne-hub/type.d.mts.map +1 -0
  135. package/dist/utils/aigne-hub-user.cjs +11 -0
  136. package/dist/utils/aigne-hub-user.d.cts +23 -0
  137. package/dist/utils/aigne-hub-user.d.cts.map +1 -0
  138. package/dist/utils/aigne-hub-user.d.mts +23 -0
  139. package/dist/utils/aigne-hub-user.d.mts.map +1 -0
  140. package/dist/utils/aigne-hub-user.mjs +11 -0
  141. package/dist/utils/aigne-hub-user.mjs.map +1 -0
  142. package/dist/utils/ascii-logo.cjs +30 -0
  143. package/dist/utils/ascii-logo.d.cts +5 -0
  144. package/dist/utils/ascii-logo.d.cts.map +1 -0
  145. package/dist/utils/ascii-logo.d.mts +5 -0
  146. package/dist/utils/ascii-logo.d.mts.map +1 -0
  147. package/dist/utils/{ascii-logo.js → ascii-logo.mjs} +13 -3
  148. package/dist/utils/ascii-logo.mjs.map +1 -0
  149. package/dist/utils/download.cjs +25 -0
  150. package/dist/utils/download.d.cts +7 -0
  151. package/dist/utils/download.d.cts.map +1 -0
  152. package/dist/utils/download.d.mts +7 -0
  153. package/dist/utils/download.d.mts.map +1 -0
  154. package/dist/utils/download.mjs +25 -0
  155. package/dist/utils/download.mjs.map +1 -0
  156. package/dist/utils/evaluation/core.cjs +84 -0
  157. package/dist/utils/evaluation/core.mjs +84 -0
  158. package/dist/utils/evaluation/core.mjs.map +1 -0
  159. package/dist/utils/evaluation/dataset.cjs +47 -0
  160. package/dist/utils/evaluation/dataset.mjs +46 -0
  161. package/dist/utils/evaluation/dataset.mjs.map +1 -0
  162. package/dist/utils/evaluation/evaluator.cjs +109 -0
  163. package/dist/utils/evaluation/{evaluator.js → evaluator.mjs} +48 -45
  164. package/dist/utils/evaluation/evaluator.mjs.map +1 -0
  165. package/dist/utils/evaluation/reporter.cjs +225 -0
  166. package/dist/utils/evaluation/reporter.mjs +220 -0
  167. package/dist/utils/evaluation/reporter.mjs.map +1 -0
  168. package/dist/utils/evaluation/runner.cjs +85 -0
  169. package/dist/utils/evaluation/runner.mjs +85 -0
  170. package/dist/utils/evaluation/runner.mjs.map +1 -0
  171. package/dist/utils/get-url-origin.cjs +12 -0
  172. package/dist/utils/get-url-origin.d.cts +5 -0
  173. package/dist/utils/get-url-origin.d.cts.map +1 -0
  174. package/dist/utils/get-url-origin.d.mts +5 -0
  175. package/dist/utils/get-url-origin.d.mts.map +1 -0
  176. package/dist/utils/get-url-origin.mjs +12 -0
  177. package/dist/utils/get-url-origin.mjs.map +1 -0
  178. package/dist/utils/inquirer/checkbox.cjs +265 -0
  179. package/dist/utils/inquirer/checkbox.mjs +262 -0
  180. package/dist/utils/inquirer/checkbox.mjs.map +1 -0
  181. package/dist/utils/listr.cjs +226 -0
  182. package/dist/utils/listr.d.cts +71 -0
  183. package/dist/utils/listr.d.cts.map +1 -0
  184. package/dist/utils/listr.d.mts +71 -0
  185. package/dist/utils/listr.d.mts.map +1 -0
  186. package/dist/utils/listr.mjs +222 -0
  187. package/dist/utils/listr.mjs.map +1 -0
  188. package/dist/utils/load-aigne.cjs +77 -0
  189. package/dist/utils/load-aigne.d.cts +29 -0
  190. package/dist/utils/load-aigne.d.cts.map +1 -0
  191. package/dist/utils/load-aigne.d.mts +29 -0
  192. package/dist/utils/load-aigne.d.mts.map +1 -0
  193. package/dist/utils/load-aigne.mjs +74 -0
  194. package/dist/utils/load-aigne.mjs.map +1 -0
  195. package/dist/utils/run-chat-loop.cjs +90 -0
  196. package/dist/utils/run-chat-loop.d.cts +20 -0
  197. package/dist/utils/run-chat-loop.d.cts.map +1 -0
  198. package/dist/utils/run-chat-loop.d.mts +20 -0
  199. package/dist/utils/run-chat-loop.d.mts.map +1 -0
  200. package/dist/utils/run-chat-loop.mjs +89 -0
  201. package/dist/utils/run-chat-loop.mjs.map +1 -0
  202. package/dist/utils/run-with-aigne.cjs +131 -0
  203. package/dist/utils/run-with-aigne.d.cts +46 -0
  204. package/dist/utils/run-with-aigne.d.cts.map +1 -0
  205. package/dist/utils/run-with-aigne.d.mts +46 -0
  206. package/dist/utils/run-with-aigne.d.mts.map +1 -0
  207. package/dist/utils/run-with-aigne.mjs +126 -0
  208. package/dist/utils/run-with-aigne.mjs.map +1 -0
  209. package/dist/utils/serve-mcp.cjs +91 -0
  210. package/dist/utils/serve-mcp.d.cts +20 -0
  211. package/dist/utils/serve-mcp.d.cts.map +1 -0
  212. package/dist/utils/serve-mcp.d.mts +20 -0
  213. package/dist/utils/serve-mcp.d.mts.map +1 -0
  214. package/dist/utils/serve-mcp.mjs +89 -0
  215. package/dist/utils/serve-mcp.mjs.map +1 -0
  216. package/dist/utils/spinner.cjs +19 -0
  217. package/dist/utils/spinner.d.cts +5 -0
  218. package/dist/utils/spinner.d.cts.map +1 -0
  219. package/dist/utils/spinner.d.mts +5 -0
  220. package/dist/utils/spinner.d.mts.map +1 -0
  221. package/dist/utils/spinner.mjs +19 -0
  222. package/dist/utils/spinner.mjs.map +1 -0
  223. package/dist/utils/string-utils.cjs +11 -0
  224. package/dist/utils/string-utils.d.cts +5 -0
  225. package/dist/utils/string-utils.d.cts.map +1 -0
  226. package/dist/utils/string-utils.d.mts +5 -0
  227. package/dist/utils/string-utils.d.mts.map +1 -0
  228. package/dist/utils/string-utils.mjs +10 -0
  229. package/dist/utils/string-utils.mjs.map +1 -0
  230. package/dist/utils/time.cjs +14 -0
  231. package/dist/utils/time.d.cts +5 -0
  232. package/dist/utils/time.d.cts.map +1 -0
  233. package/dist/utils/time.d.mts +5 -0
  234. package/dist/utils/time.d.mts.map +1 -0
  235. package/dist/utils/time.mjs +14 -0
  236. package/dist/utils/time.mjs.map +1 -0
  237. package/dist/utils/url.cjs +8 -0
  238. package/dist/utils/url.d.cts +5 -0
  239. package/dist/utils/url.d.cts.map +1 -0
  240. package/dist/utils/url.d.mts +5 -0
  241. package/dist/utils/url.d.mts.map +1 -0
  242. package/dist/utils/url.mjs +8 -0
  243. package/dist/utils/url.mjs.map +1 -0
  244. package/dist/utils/yargs.cjs +191 -0
  245. package/dist/utils/yargs.d.cts +96 -0
  246. package/dist/utils/yargs.d.cts.map +1 -0
  247. package/dist/utils/yargs.d.mts +96 -0
  248. package/dist/utils/yargs.d.mts.map +1 -0
  249. package/dist/utils/yargs.mjs +186 -0
  250. package/dist/utils/yargs.mjs.map +1 -0
  251. package/package.json +122 -45
  252. package/CHANGELOG.md +0 -5019
  253. package/dist/bunwrapper.d.ts +0 -2
  254. package/dist/bunwrapper.js +0 -18
  255. package/dist/cli.d.ts +0 -7
  256. package/dist/cli.js +0 -42
  257. package/dist/commands/aigne.d.ts +0 -4
  258. package/dist/commands/aigne.js +0 -35
  259. package/dist/commands/app/agent.d.ts +0 -26
  260. package/dist/commands/app/agent.js +0 -122
  261. package/dist/commands/app/app.d.ts +0 -7
  262. package/dist/commands/app/app.js +0 -92
  263. package/dist/commands/app/cli.d.ts +0 -1
  264. package/dist/commands/app/cli.js +0 -2
  265. package/dist/commands/app/upgrade.d.ts +0 -54
  266. package/dist/commands/app/upgrade.js +0 -236
  267. package/dist/commands/app.d.ts +0 -4
  268. package/dist/commands/app.js +0 -54
  269. package/dist/commands/create.d.ts +0 -6
  270. package/dist/commands/create.js +0 -74
  271. package/dist/commands/deploy.d.ts +0 -11
  272. package/dist/commands/deploy.js +0 -255
  273. package/dist/commands/eval.d.ts +0 -11
  274. package/dist/commands/eval.js +0 -110
  275. package/dist/commands/hub.d.ts +0 -3
  276. package/dist/commands/hub.js +0 -323
  277. package/dist/commands/observe.d.ts +0 -7
  278. package/dist/commands/observe.js +0 -41
  279. package/dist/commands/run-skill.d.ts +0 -6
  280. package/dist/commands/run-skill.js +0 -102
  281. package/dist/commands/run.d.ts +0 -9
  282. package/dist/commands/run.js +0 -187
  283. package/dist/commands/serve-mcp.d.ts +0 -20
  284. package/dist/commands/serve-mcp.js +0 -67
  285. package/dist/commands/test.d.ts +0 -9
  286. package/dist/commands/test.js +0 -33
  287. package/dist/constants.d.ts +0 -7
  288. package/dist/constants.js +0 -21
  289. package/dist/index.d.ts +0 -1
  290. package/dist/index.js +0 -1
  291. package/dist/tracer/terminal.d.ts +0 -62
  292. package/dist/tracer/terminal.js +0 -404
  293. package/dist/type.d.ts +0 -5
  294. package/dist/type.js +0 -1
  295. package/dist/ui/utils/terminal-input.d.ts +0 -19
  296. package/dist/ui/utils/terminal-input.js +0 -123
  297. package/dist/ui/utils/text-buffer.d.ts +0 -87
  298. package/dist/ui/utils/text-buffer.js +0 -1059
  299. package/dist/ui/utils/text-utils.d.ts +0 -37
  300. package/dist/ui/utils/text-utils.js +0 -185
  301. package/dist/utils/agent-v1.d.ts +0 -134
  302. package/dist/utils/agent-v1.js +0 -213
  303. package/dist/utils/aigne-hub/constants.d.ts +0 -6
  304. package/dist/utils/aigne-hub/constants.js +0 -12
  305. package/dist/utils/aigne-hub/credential.d.ts +0 -20
  306. package/dist/utils/aigne-hub/credential.js +0 -182
  307. package/dist/utils/aigne-hub/crypto.d.ts +0 -4
  308. package/dist/utils/aigne-hub/crypto.js +0 -30
  309. package/dist/utils/aigne-hub/model.d.ts +0 -13
  310. package/dist/utils/aigne-hub/model.js +0 -122
  311. package/dist/utils/aigne-hub/store/file.d.ts +0 -15
  312. package/dist/utils/aigne-hub/store/file.js +0 -69
  313. package/dist/utils/aigne-hub/store/index.d.ts +0 -5
  314. package/dist/utils/aigne-hub/store/index.js +0 -43
  315. package/dist/utils/aigne-hub/store/keytar.d.ts +0 -15
  316. package/dist/utils/aigne-hub/store/keytar.js +0 -67
  317. package/dist/utils/aigne-hub/store/migrate.d.ts +0 -2
  318. package/dist/utils/aigne-hub/store/migrate.js +0 -57
  319. package/dist/utils/aigne-hub/type.d.ts +0 -38
  320. package/dist/utils/aigne-hub/type.js +0 -1
  321. package/dist/utils/aigne-hub-user.d.ts +0 -16
  322. package/dist/utils/aigne-hub-user.js +0 -10
  323. package/dist/utils/ascii-logo.d.ts +0 -1
  324. package/dist/utils/download.d.ts +0 -3
  325. package/dist/utils/download.js +0 -19
  326. package/dist/utils/evaluation/core.d.ts +0 -8
  327. package/dist/utils/evaluation/core.js +0 -83
  328. package/dist/utils/evaluation/dataset.d.ts +0 -15
  329. package/dist/utils/evaluation/dataset.js +0 -61
  330. package/dist/utils/evaluation/evaluator.d.ts +0 -9
  331. package/dist/utils/evaluation/reporter.d.ts +0 -28
  332. package/dist/utils/evaluation/reporter.js +0 -221
  333. package/dist/utils/evaluation/runner.d.ts +0 -16
  334. package/dist/utils/evaluation/runner.js +0 -129
  335. package/dist/utils/evaluation/type.d.ts +0 -69
  336. package/dist/utils/evaluation/type.js +0 -1
  337. package/dist/utils/get-url-origin.d.ts +0 -1
  338. package/dist/utils/get-url-origin.js +0 -8
  339. package/dist/utils/inquirer/checkbox.d.ts +0 -55
  340. package/dist/utils/inquirer/checkbox.js +0 -319
  341. package/dist/utils/listr.d.ts +0 -64
  342. package/dist/utils/listr.js +0 -265
  343. package/dist/utils/load-aigne.d.ts +0 -18
  344. package/dist/utils/load-aigne.js +0 -80
  345. package/dist/utils/run-chat-loop.d.ts +0 -15
  346. package/dist/utils/run-chat-loop.js +0 -87
  347. package/dist/utils/run-with-aigne.d.ts +0 -27
  348. package/dist/utils/run-with-aigne.js +0 -157
  349. package/dist/utils/serve-mcp.d.ts +0 -9
  350. package/dist/utils/serve-mcp.js +0 -93
  351. package/dist/utils/spinner.d.ts +0 -1
  352. package/dist/utils/spinner.js +0 -14
  353. package/dist/utils/string-utils.d.ts +0 -1
  354. package/dist/utils/string-utils.js +0 -4
  355. package/dist/utils/time.d.ts +0 -1
  356. package/dist/utils/time.js +0 -12
  357. package/dist/utils/url.d.ts +0 -1
  358. package/dist/utils/url.js +0 -3
  359. package/dist/utils/yargs.d.ts +0 -94
  360. package/dist/utils/yargs.js +0 -210
@@ -0,0 +1,226 @@
1
+ const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
+ let _aigne_core_utils_logger = require("@aigne/core/utils/logger");
3
+ let chalk = require("chalk");
4
+ chalk = require_rolldown_runtime.__toESM(chalk);
5
+ let _aigne_listr2 = require("@aigne/listr2");
6
+ let _aigne_core = require("@aigne/core");
7
+ let node_os = require("node:os");
8
+ let node_util = require("node:util");
9
+ let _aigne_marked_terminal = require("@aigne/marked-terminal");
10
+ let marked = require("marked");
11
+ let _aigne_core_utils_stream_utils = require("@aigne/core/utils/stream-utils");
12
+ let wrap_ansi = require("wrap-ansi");
13
+ wrap_ansi = require_rolldown_runtime.__toESM(wrap_ansi);
14
+
15
+ //#region src/utils/listr.ts
16
+ var AIGNEListr = class extends _aigne_listr2.Listr {
17
+ result = {};
18
+ error;
19
+ logs = [];
20
+ spinner;
21
+ constructor(myOptions, ...[task, options, parentTask]) {
22
+ const aigneOptions = {
23
+ getStdoutLogs: () => {
24
+ return this.logs.splice(0);
25
+ },
26
+ getBottomBarLogs: (_options) => {
27
+ return [];
28
+ }
29
+ };
30
+ super(task, {
31
+ ...options,
32
+ renderer: AIGNEListrRenderer,
33
+ rendererOptions: {
34
+ collapseSubtasks: false,
35
+ icon: {
36
+ [_aigne_listr2.ListrDefaultRendererLogLevels.PENDING]: () => this.spinner.fetch(),
37
+ [_aigne_listr2.ListrDefaultRendererLogLevels.COMPLETED_WITH_FAILED_SUBTASKS]: _aigne_listr2.figures.cross
38
+ },
39
+ color: { [_aigne_listr2.ListrDefaultRendererLogLevels.COMPLETED_WITH_FAILED_SUBTASKS]: (m) => m ? _aigne_listr2.color.red(m) : "" },
40
+ aigne: aigneOptions
41
+ },
42
+ fallbackRenderer: AIGNEListrFallbackRenderer,
43
+ fallbackRendererOptions: {
44
+ aigne: aigneOptions,
45
+ logger: new class extends _aigne_listr2.ListrLogger {
46
+ log(...[level, ...args]) {
47
+ if (!this.options?.toStderr?.includes(level) && !_aigne_core_utils_logger.logger.enabled(_aigne_core_utils_logger.LogLevel.INFO)) return;
48
+ super.log(level, ...args);
49
+ }
50
+ }()
51
+ }
52
+ }, parentTask);
53
+ this.myOptions = myOptions;
54
+ this.spinner = new _aigne_listr2.Spinner();
55
+ }
56
+ needLogResult = true;
57
+ async run(stream) {
58
+ const originalLog = _aigne_core_utils_logger.logger.logMessage;
59
+ const originalConsole = { ...console };
60
+ try {
61
+ this.ctx = {};
62
+ this.spinner.start();
63
+ if (_aigne_core_utils_logger.logger.enabled(_aigne_core_utils_logger.LogLevel.INFO)) {
64
+ const request = this.myOptions.formatRequest();
65
+ if (request) console.log(request);
66
+ }
67
+ _aigne_core_utils_logger.logger.logMessage = (...args) => this.logs.push((0, node_util.format)(...args));
68
+ for (const method of [
69
+ "debug",
70
+ "log",
71
+ "info",
72
+ "warn",
73
+ "error"
74
+ ]) console[method] = (...args) => {
75
+ const renderer = this["renderer"] instanceof AIGNEListrRenderer ? this["renderer"] : void 0;
76
+ const msg = (0, node_util.format)(...args);
77
+ renderer ? renderer.log(msg) : this.logs.push(msg);
78
+ };
79
+ const _stream = await stream();
80
+ this.add({ task: () => this.extractStream(_stream) });
81
+ const result = await super.run().then(() => {
82
+ if (this.error) throw this.error;
83
+ return { ...this.result };
84
+ });
85
+ if (this.needLogResult) console.log(await this.myOptions.formatResult(this.result, {
86
+ running: false,
87
+ renderImage: true
88
+ }));
89
+ return result;
90
+ } finally {
91
+ _aigne_core_utils_logger.logger.logMessage = originalLog;
92
+ Object.assign(console, originalConsole);
93
+ this.spinner.stop();
94
+ }
95
+ }
96
+ marked = new marked.Marked().use({ walkTokens: (token) => {
97
+ if (token.type === "code") {
98
+ if (typeof token.lang === "string") token.lang = token.lang.trim().split(/\s+/)[0];
99
+ }
100
+ } }, (0, _aigne_marked_terminal.markedTerminal)({ forceHyperLink: false }, { theme: { string: chalk.default.green } }));
101
+ async extractStream(stream) {
102
+ try {
103
+ this.result = {};
104
+ for await (const value of stream) {
105
+ (0, _aigne_core_utils_stream_utils.mergeAgentResponseChunk)(this.result, value);
106
+ if ((0, _aigne_core.isAgentResponseProgress)(value) && value.progress.event === "message") {
107
+ const { message } = value.progress;
108
+ const rendered = [];
109
+ if (message.role === "user" || message.role === "agent") {
110
+ if (message.role === "agent" && message.toolCalls) for (const call of message.toolCalls) rendered.push(`${chalk.default.bold.gray(`[${call.function.name}]`)} ${chalk.default.gray(`${JSON.stringify(call.function.arguments).slice(0, 200)}...`)}`);
111
+ else if (typeof message.content === "string") rendered.push(this.marked.parse(message.content, { async: false }).trim());
112
+ else if (Array.isArray(message.content)) {
113
+ for (const msg of message.content) if (msg.type === "text") if (msg.isThinking) rendered.push(chalk.default.dim(chalk.default.grey(chalk.default.italic(`[Thinking] ${msg.text}`))));
114
+ else rendered.push(this.marked.parse(msg.text, { async: false }).trim());
115
+ }
116
+ }
117
+ if (rendered.length) {
118
+ const prefix = message.role === "user" ? chalk.default.blue.bold(">") : chalk.default.green.bold("•");
119
+ console.log(`${prefix} ${rendered.join("\n")}\n`);
120
+ this.needLogResult = false;
121
+ }
122
+ }
123
+ }
124
+ return this.result;
125
+ } catch (error) {
126
+ this.error = error;
127
+ throw error;
128
+ }
129
+ }
130
+ };
131
+ var AIGNEListrRenderer = class extends _aigne_listr2.DefaultRenderer {
132
+ static rendererOptions = { ..._aigne_listr2.DefaultRenderer.rendererOptions };
133
+ get _updater() {
134
+ return this["updater"];
135
+ }
136
+ get _logger() {
137
+ return this["logger"];
138
+ }
139
+ get _options() {
140
+ return this["options"];
141
+ }
142
+ get _spinner() {
143
+ return this["spinner"];
144
+ }
145
+ update() {
146
+ if (this.paused || this.ended) return;
147
+ this._updater(this.create({ running: true }));
148
+ }
149
+ paused = false;
150
+ ended = false;
151
+ end() {
152
+ this.ended = true;
153
+ super.end();
154
+ }
155
+ async pause() {
156
+ this.paused = true;
157
+ this._updater?.clear();
158
+ this._updater?.done();
159
+ await new Promise((resolve) => setTimeout(resolve, 100));
160
+ this._logger.process.release();
161
+ }
162
+ async resume() {
163
+ this._logger.process.hijack();
164
+ this.paused = false;
165
+ }
166
+ log(message) {
167
+ this._updater?.clear();
168
+ this._logger.toStdout(message);
169
+ }
170
+ isPreviousPrompt = false;
171
+ create({ running = false, ...options }) {
172
+ const logs = this._options.aigne?.getStdoutLogs?.();
173
+ if (logs?.length) {
174
+ this._updater.clear();
175
+ this._logger.toStdout(logs.join(node_os.EOL));
176
+ }
177
+ let buffer = "";
178
+ const prompt = super["renderPrompt"]();
179
+ if (prompt.length) {
180
+ buffer += prompt.join(node_os.EOL);
181
+ this.isPreviousPrompt = true;
182
+ } else if (this.isPreviousPrompt) this.isPreviousPrompt = false;
183
+ else {
184
+ buffer += super.create({
185
+ ...options,
186
+ prompt: false
187
+ });
188
+ const bottomBar = this._options.aigne?.getBottomBarLogs?.({ running });
189
+ if (bottomBar?.length) {
190
+ buffer += node_os.EOL.repeat(2);
191
+ const output = [...bottomBar, running ? this._spinner.fetch() : ""].map((i) => this._wrap(i)).join(node_os.EOL);
192
+ if (!running) buffer += output;
193
+ else {
194
+ const { rows } = process.stdout;
195
+ const lines = rows - buffer.split(node_os.EOL).length - 2;
196
+ buffer += output.split(node_os.EOL).slice(-Math.max(4, lines)).join(node_os.EOL);
197
+ }
198
+ }
199
+ }
200
+ return buffer;
201
+ }
202
+ _wrap(str) {
203
+ return (0, wrap_ansi.default)(str, process.stdout.columns ?? 80, {
204
+ hard: true,
205
+ trim: false
206
+ });
207
+ }
208
+ };
209
+ var AIGNEListrFallbackRenderer = class extends _aigne_listr2.SimpleRenderer {
210
+ static rendererOptions = { ..._aigne_listr2.SimpleRenderer.rendererOptions };
211
+ get _logger() {
212
+ return this["logger"];
213
+ }
214
+ get _options() {
215
+ return this["options"];
216
+ }
217
+ end() {
218
+ const logs = [this._options.aigne?.getStdoutLogs?.(), this._options.aigne?.getBottomBarLogs?.()].filter(Boolean).flat().join(node_os.EOL);
219
+ if (logs) this._logger.toStdout(logs);
220
+ }
221
+ };
222
+
223
+ //#endregion
224
+ exports.AIGNEListr = AIGNEListr;
225
+ exports.AIGNEListrFallbackRenderer = AIGNEListrFallbackRenderer;
226
+ exports.AIGNEListrRenderer = AIGNEListrRenderer;
@@ -0,0 +1,71 @@
1
+ import { AgentResponseStream, Message } from "@aigne/core";
2
+ import { PromiseOrValue } from "@aigne/core/utils/type-utils";
3
+ import { DefaultRenderer, Listr, ListrDefaultRendererOptions, ListrLogger, ListrSimpleRendererOptions, ListrTaskWrapper, SimpleRenderer, Spinner } from "@aigne/listr2";
4
+ import { createLogUpdate } from "log-update";
5
+
6
+ //#region src/utils/listr.d.ts
7
+ type AIGNEListrTaskWrapper = ListrTaskWrapper<unknown, typeof AIGNEListrRenderer, typeof AIGNEListrFallbackRenderer>;
8
+ declare class AIGNEListr extends Listr<object, typeof AIGNEListrRenderer, typeof AIGNEListrFallbackRenderer> {
9
+ myOptions: {
10
+ formatRequest: () => string | undefined;
11
+ formatResult: (result: Message, options?: {
12
+ running?: boolean;
13
+ renderImage?: boolean;
14
+ }) => string | Promise<string>;
15
+ };
16
+ private result;
17
+ private error?;
18
+ private logs;
19
+ private spinner;
20
+ constructor(myOptions: {
21
+ formatRequest: () => string | undefined;
22
+ formatResult: (result: Message, options?: {
23
+ running?: boolean;
24
+ renderImage?: boolean;
25
+ }) => string | Promise<string>;
26
+ }, ...[task, options, parentTask]: ConstructorParameters<typeof Listr<object, typeof AIGNEListrRenderer, typeof AIGNEListrFallbackRenderer>>);
27
+ private needLogResult;
28
+ run(stream: () => PromiseOrValue<AgentResponseStream<Message>>): Promise<Message>;
29
+ private marked;
30
+ private extractStream;
31
+ }
32
+ interface AIGNEListrRendererOptions extends ListrDefaultRendererOptions {
33
+ aigne?: {
34
+ getStdoutLogs?: () => string[];
35
+ getBottomBarLogs?: (options?: {
36
+ running?: boolean;
37
+ }) => string[];
38
+ };
39
+ }
40
+ declare class AIGNEListrRenderer extends DefaultRenderer {
41
+ static rendererOptions: AIGNEListrRendererOptions;
42
+ get _updater(): ReturnType<typeof createLogUpdate>;
43
+ get _logger(): ListrLogger;
44
+ get _options(): AIGNEListrRendererOptions;
45
+ get _spinner(): Spinner;
46
+ update(): void;
47
+ private paused;
48
+ private ended;
49
+ end(): void;
50
+ pause(): Promise<void>;
51
+ resume(): Promise<void>;
52
+ log(message: string): void;
53
+ private isPreviousPrompt;
54
+ create({
55
+ running,
56
+ ...options
57
+ }: Parameters<DefaultRenderer["create"]>[0] & {
58
+ running?: boolean;
59
+ }): string;
60
+ _wrap(str: string): string;
61
+ }
62
+ interface AIGNEListrFallbackRendererOptions extends ListrSimpleRendererOptions, Pick<AIGNEListrRendererOptions, "aigne"> {}
63
+ declare class AIGNEListrFallbackRenderer extends SimpleRenderer {
64
+ static rendererOptions: AIGNEListrFallbackRendererOptions;
65
+ get _logger(): ListrLogger;
66
+ get _options(): AIGNEListrFallbackRendererOptions;
67
+ end(): void;
68
+ }
69
+ //#endregion
70
+ export { AIGNEListr, AIGNEListrFallbackRenderer, AIGNEListrFallbackRendererOptions, AIGNEListrRenderer, AIGNEListrRendererOptions, AIGNEListrTaskWrapper };
71
+ //# sourceMappingURL=listr.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listr.d.cts","names":[],"sources":["../../src/utils/listr.ts"],"mappings":";;;;;;KAyBY,qBAAA,GAAwB,gBAAA,iBAE3B,kBAAA,SACA,0BAAA;AAAA,cAGI,UAAA,SAAmB,KAAA,gBAEvB,kBAAA,SACA,0BAAA;EAAA,SAAA;IAAA,aAAA;IAAA,YAAA,GAAA,MAAA,EAaO,OAAA,EAAA,OAAA;MAAA,OAAA;MAAA,WAAA;IAAA,eAEI,OAAA;EAAA;EAAA,QAAA,MAAA;EAAA,QAAA,KAAA;EAAA,QAAA,IAAA;EAAA,QAAA,OAAA;EAAA,YAAA,SAAA;IAAA,aAAA;IAAA,YAAA,GAAA,MAAA,EAFJ,OAAA,EAAA,OAAA;MAAA,OAAA;MAAA,WAAA;IAAA,eAEI,OAAA;EAAA,OAAA,IAAA,EAAA,OAAA,EAAA,UAAA,GAEgB,qBAAA,QACvB,KAAA,gBAAqB,kBAAA,SAA2B,0BAAA;EAAA,QAAA,aAAA;EAAA,IAAA,MAAA,QAwD1B,cAAA,CAAe,mBAAA,CAAoB,OAAA,KAAY,OAAA,CAAQ,OAAA;EAAA,QAAA,MAAA;EAAA,QAAA,aAAA;AAAA;AAAA,UAuHzE,yBAAA,SAAkC,2BAAA;EAAA,KAAA;IAAA,aAAA;IAAA,gBAAA,IAAA,OAAA;MAAA,OAAA;IAAA;EAAA;AAAA;AAAA,cAOtC,kBAAA,SAA2B,eAAA;EAAA,OAAA,eAAA,EACE,yBAAA;EAAA,IAAA,SAAA,GAKZ,UAAA,QAAkB,eAAA;EAAA,IAAA,QAAA,GAInB,WAAA;EAAA,IAAA,SAAA,GAIC,yBAAA;EAAA,IAAA,SAAA,GAIA,OAAA;EAAA,OAAA;EAAA,QAAA,MAAA;EAAA,QAAA,KAAA;EAAA,IAAA;EAAA,MAAA,GAmBjB,OAAA;EAAA,OAAA,GAQC,OAAA;EAAA,IAAA,OAAA;EAAA,QAAA,gBAAA;EAAA,OAAA;IAAA,OAAA;IAAA,GAAA;EAAA,GAeT,UAAA,CAAW,eAAA;IAAA,OAAA;EAAA;EAAA,MAAA,GAAA;AAAA;AAAA,UAoDC,iCAAA,SACP,0BAAA,EACN,IAAA,CAAK,yBAAA;AAAA,cAEI,0BAAA,SAAmC,cAAA;EAAA,OAAA,eAAA,EACb,iCAAA;EAAA,IAAA,QAAA,GAKN,WAAA;EAAA,IAAA,SAAA,GAIC,iCAAA;EAAA,IAAA;AAAA"}
@@ -0,0 +1,71 @@
1
+ import { DefaultRenderer, Listr, ListrDefaultRendererOptions, ListrLogger, ListrSimpleRendererOptions, ListrTaskWrapper, SimpleRenderer, Spinner } from "@aigne/listr2";
2
+ import { AgentResponseStream, Message } from "@aigne/core";
3
+ import { PromiseOrValue } from "@aigne/core/utils/type-utils";
4
+ import { createLogUpdate } from "log-update";
5
+
6
+ //#region src/utils/listr.d.ts
7
+ type AIGNEListrTaskWrapper = ListrTaskWrapper<unknown, typeof AIGNEListrRenderer, typeof AIGNEListrFallbackRenderer>;
8
+ declare class AIGNEListr extends Listr<object, typeof AIGNEListrRenderer, typeof AIGNEListrFallbackRenderer> {
9
+ myOptions: {
10
+ formatRequest: () => string | undefined;
11
+ formatResult: (result: Message, options?: {
12
+ running?: boolean;
13
+ renderImage?: boolean;
14
+ }) => string | Promise<string>;
15
+ };
16
+ private result;
17
+ private error?;
18
+ private logs;
19
+ private spinner;
20
+ constructor(myOptions: {
21
+ formatRequest: () => string | undefined;
22
+ formatResult: (result: Message, options?: {
23
+ running?: boolean;
24
+ renderImage?: boolean;
25
+ }) => string | Promise<string>;
26
+ }, ...[task, options, parentTask]: ConstructorParameters<typeof Listr<object, typeof AIGNEListrRenderer, typeof AIGNEListrFallbackRenderer>>);
27
+ private needLogResult;
28
+ run(stream: () => PromiseOrValue<AgentResponseStream<Message>>): Promise<Message>;
29
+ private marked;
30
+ private extractStream;
31
+ }
32
+ interface AIGNEListrRendererOptions extends ListrDefaultRendererOptions {
33
+ aigne?: {
34
+ getStdoutLogs?: () => string[];
35
+ getBottomBarLogs?: (options?: {
36
+ running?: boolean;
37
+ }) => string[];
38
+ };
39
+ }
40
+ declare class AIGNEListrRenderer extends DefaultRenderer {
41
+ static rendererOptions: AIGNEListrRendererOptions;
42
+ get _updater(): ReturnType<typeof createLogUpdate>;
43
+ get _logger(): ListrLogger;
44
+ get _options(): AIGNEListrRendererOptions;
45
+ get _spinner(): Spinner;
46
+ update(): void;
47
+ private paused;
48
+ private ended;
49
+ end(): void;
50
+ pause(): Promise<void>;
51
+ resume(): Promise<void>;
52
+ log(message: string): void;
53
+ private isPreviousPrompt;
54
+ create({
55
+ running,
56
+ ...options
57
+ }: Parameters<DefaultRenderer["create"]>[0] & {
58
+ running?: boolean;
59
+ }): string;
60
+ _wrap(str: string): string;
61
+ }
62
+ interface AIGNEListrFallbackRendererOptions extends ListrSimpleRendererOptions, Pick<AIGNEListrRendererOptions, "aigne"> {}
63
+ declare class AIGNEListrFallbackRenderer extends SimpleRenderer {
64
+ static rendererOptions: AIGNEListrFallbackRendererOptions;
65
+ get _logger(): ListrLogger;
66
+ get _options(): AIGNEListrFallbackRendererOptions;
67
+ end(): void;
68
+ }
69
+ //#endregion
70
+ export { AIGNEListr, AIGNEListrFallbackRenderer, AIGNEListrFallbackRendererOptions, AIGNEListrRenderer, AIGNEListrRendererOptions, AIGNEListrTaskWrapper };
71
+ //# sourceMappingURL=listr.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listr.d.mts","names":[],"sources":["../../src/utils/listr.ts"],"mappings":";;;;;;KAyBY,qBAAA,GAAwB,gBAAA,iBAE3B,kBAAA,SACA,0BAAA;AAAA,cAGI,UAAA,SAAmB,KAAA,gBAEvB,kBAAA,SACA,0BAAA;EAAA,SAAA;IAAA,aAAA;IAAA,YAAA,GAAA,MAAA,EAaO,OAAA,EAAA,OAAA;MAAA,OAAA;MAAA,WAAA;IAAA,eAEI,OAAA;EAAA;EAAA,QAAA,MAAA;EAAA,QAAA,KAAA;EAAA,QAAA,IAAA;EAAA,QAAA,OAAA;EAAA,YAAA,SAAA;IAAA,aAAA;IAAA,YAAA,GAAA,MAAA,EAFJ,OAAA,EAAA,OAAA;MAAA,OAAA;MAAA,WAAA;IAAA,eAEI,OAAA;EAAA,OAAA,IAAA,EAAA,OAAA,EAAA,UAAA,GAEgB,qBAAA,QACvB,KAAA,gBAAqB,kBAAA,SAA2B,0BAAA;EAAA,QAAA,aAAA;EAAA,IAAA,MAAA,QAwD1B,cAAA,CAAe,mBAAA,CAAoB,OAAA,KAAY,OAAA,CAAQ,OAAA;EAAA,QAAA,MAAA;EAAA,QAAA,aAAA;AAAA;AAAA,UAuHzE,yBAAA,SAAkC,2BAAA;EAAA,KAAA;IAAA,aAAA;IAAA,gBAAA,IAAA,OAAA;MAAA,OAAA;IAAA;EAAA;AAAA;AAAA,cAOtC,kBAAA,SAA2B,eAAA;EAAA,OAAA,eAAA,EACE,yBAAA;EAAA,IAAA,SAAA,GAKZ,UAAA,QAAkB,eAAA;EAAA,IAAA,QAAA,GAInB,WAAA;EAAA,IAAA,SAAA,GAIC,yBAAA;EAAA,IAAA,SAAA,GAIA,OAAA;EAAA,OAAA;EAAA,QAAA,MAAA;EAAA,QAAA,KAAA;EAAA,IAAA;EAAA,MAAA,GAmBjB,OAAA;EAAA,OAAA,GAQC,OAAA;EAAA,IAAA,OAAA;EAAA,QAAA,gBAAA;EAAA,OAAA;IAAA,OAAA;IAAA,GAAA;EAAA,GAeT,UAAA,CAAW,eAAA;IAAA,OAAA;EAAA;EAAA,MAAA,GAAA;AAAA;AAAA,UAoDC,iCAAA,SACP,0BAAA,EACN,IAAA,CAAK,yBAAA;AAAA,cAEI,0BAAA,SAAmC,cAAA;EAAA,OAAA,eAAA,EACb,iCAAA;EAAA,IAAA,QAAA,GAKN,WAAA;EAAA,IAAA,SAAA,GAIC,iCAAA;EAAA,IAAA;AAAA"}
@@ -0,0 +1,222 @@
1
+ import { LogLevel, logger } from "@aigne/core/utils/logger";
2
+ import chalk from "chalk";
3
+ import { DefaultRenderer, Listr, ListrDefaultRendererLogLevels, ListrLogger, SimpleRenderer, Spinner, color, figures } from "@aigne/listr2";
4
+ import { isAgentResponseProgress } from "@aigne/core";
5
+ import { EOL } from "node:os";
6
+ import { format } from "node:util";
7
+ import { markedTerminal } from "@aigne/marked-terminal";
8
+ import { Marked } from "marked";
9
+ import { mergeAgentResponseChunk } from "@aigne/core/utils/stream-utils";
10
+ import wrap from "wrap-ansi";
11
+
12
+ //#region src/utils/listr.ts
13
+ var AIGNEListr = class extends Listr {
14
+ result = {};
15
+ error;
16
+ logs = [];
17
+ spinner;
18
+ constructor(myOptions, ...[task, options, parentTask]) {
19
+ const aigneOptions = {
20
+ getStdoutLogs: () => {
21
+ return this.logs.splice(0);
22
+ },
23
+ getBottomBarLogs: (_options) => {
24
+ return [];
25
+ }
26
+ };
27
+ super(task, {
28
+ ...options,
29
+ renderer: AIGNEListrRenderer,
30
+ rendererOptions: {
31
+ collapseSubtasks: false,
32
+ icon: {
33
+ [ListrDefaultRendererLogLevels.PENDING]: () => this.spinner.fetch(),
34
+ [ListrDefaultRendererLogLevels.COMPLETED_WITH_FAILED_SUBTASKS]: figures.cross
35
+ },
36
+ color: { [ListrDefaultRendererLogLevels.COMPLETED_WITH_FAILED_SUBTASKS]: (m) => m ? color.red(m) : "" },
37
+ aigne: aigneOptions
38
+ },
39
+ fallbackRenderer: AIGNEListrFallbackRenderer,
40
+ fallbackRendererOptions: {
41
+ aigne: aigneOptions,
42
+ logger: new class extends ListrLogger {
43
+ log(...[level, ...args]) {
44
+ if (!this.options?.toStderr?.includes(level) && !logger.enabled(LogLevel.INFO)) return;
45
+ super.log(level, ...args);
46
+ }
47
+ }()
48
+ }
49
+ }, parentTask);
50
+ this.myOptions = myOptions;
51
+ this.spinner = new Spinner();
52
+ }
53
+ needLogResult = true;
54
+ async run(stream) {
55
+ const originalLog = logger.logMessage;
56
+ const originalConsole = { ...console };
57
+ try {
58
+ this.ctx = {};
59
+ this.spinner.start();
60
+ if (logger.enabled(LogLevel.INFO)) {
61
+ const request = this.myOptions.formatRequest();
62
+ if (request) console.log(request);
63
+ }
64
+ logger.logMessage = (...args) => this.logs.push(format(...args));
65
+ for (const method of [
66
+ "debug",
67
+ "log",
68
+ "info",
69
+ "warn",
70
+ "error"
71
+ ]) console[method] = (...args) => {
72
+ const renderer = this["renderer"] instanceof AIGNEListrRenderer ? this["renderer"] : void 0;
73
+ const msg = format(...args);
74
+ renderer ? renderer.log(msg) : this.logs.push(msg);
75
+ };
76
+ const _stream = await stream();
77
+ this.add({ task: () => this.extractStream(_stream) });
78
+ const result = await super.run().then(() => {
79
+ if (this.error) throw this.error;
80
+ return { ...this.result };
81
+ });
82
+ if (this.needLogResult) console.log(await this.myOptions.formatResult(this.result, {
83
+ running: false,
84
+ renderImage: true
85
+ }));
86
+ return result;
87
+ } finally {
88
+ logger.logMessage = originalLog;
89
+ Object.assign(console, originalConsole);
90
+ this.spinner.stop();
91
+ }
92
+ }
93
+ marked = new Marked().use({ walkTokens: (token) => {
94
+ if (token.type === "code") {
95
+ if (typeof token.lang === "string") token.lang = token.lang.trim().split(/\s+/)[0];
96
+ }
97
+ } }, markedTerminal({ forceHyperLink: false }, { theme: { string: chalk.green } }));
98
+ async extractStream(stream) {
99
+ try {
100
+ this.result = {};
101
+ for await (const value of stream) {
102
+ mergeAgentResponseChunk(this.result, value);
103
+ if (isAgentResponseProgress(value) && value.progress.event === "message") {
104
+ const { message } = value.progress;
105
+ const rendered = [];
106
+ if (message.role === "user" || message.role === "agent") {
107
+ if (message.role === "agent" && message.toolCalls) for (const call of message.toolCalls) rendered.push(`${chalk.bold.gray(`[${call.function.name}]`)} ${chalk.gray(`${JSON.stringify(call.function.arguments).slice(0, 200)}...`)}`);
108
+ else if (typeof message.content === "string") rendered.push(this.marked.parse(message.content, { async: false }).trim());
109
+ else if (Array.isArray(message.content)) {
110
+ for (const msg of message.content) if (msg.type === "text") if (msg.isThinking) rendered.push(chalk.dim(chalk.grey(chalk.italic(`[Thinking] ${msg.text}`))));
111
+ else rendered.push(this.marked.parse(msg.text, { async: false }).trim());
112
+ }
113
+ }
114
+ if (rendered.length) {
115
+ const prefix = message.role === "user" ? chalk.blue.bold(">") : chalk.green.bold("•");
116
+ console.log(`${prefix} ${rendered.join("\n")}\n`);
117
+ this.needLogResult = false;
118
+ }
119
+ }
120
+ }
121
+ return this.result;
122
+ } catch (error) {
123
+ this.error = error;
124
+ throw error;
125
+ }
126
+ }
127
+ };
128
+ var AIGNEListrRenderer = class extends DefaultRenderer {
129
+ static rendererOptions = { ...DefaultRenderer.rendererOptions };
130
+ get _updater() {
131
+ return this["updater"];
132
+ }
133
+ get _logger() {
134
+ return this["logger"];
135
+ }
136
+ get _options() {
137
+ return this["options"];
138
+ }
139
+ get _spinner() {
140
+ return this["spinner"];
141
+ }
142
+ update() {
143
+ if (this.paused || this.ended) return;
144
+ this._updater(this.create({ running: true }));
145
+ }
146
+ paused = false;
147
+ ended = false;
148
+ end() {
149
+ this.ended = true;
150
+ super.end();
151
+ }
152
+ async pause() {
153
+ this.paused = true;
154
+ this._updater?.clear();
155
+ this._updater?.done();
156
+ await new Promise((resolve) => setTimeout(resolve, 100));
157
+ this._logger.process.release();
158
+ }
159
+ async resume() {
160
+ this._logger.process.hijack();
161
+ this.paused = false;
162
+ }
163
+ log(message) {
164
+ this._updater?.clear();
165
+ this._logger.toStdout(message);
166
+ }
167
+ isPreviousPrompt = false;
168
+ create({ running = false, ...options }) {
169
+ const logs = this._options.aigne?.getStdoutLogs?.();
170
+ if (logs?.length) {
171
+ this._updater.clear();
172
+ this._logger.toStdout(logs.join(EOL));
173
+ }
174
+ let buffer = "";
175
+ const prompt = super["renderPrompt"]();
176
+ if (prompt.length) {
177
+ buffer += prompt.join(EOL);
178
+ this.isPreviousPrompt = true;
179
+ } else if (this.isPreviousPrompt) this.isPreviousPrompt = false;
180
+ else {
181
+ buffer += super.create({
182
+ ...options,
183
+ prompt: false
184
+ });
185
+ const bottomBar = this._options.aigne?.getBottomBarLogs?.({ running });
186
+ if (bottomBar?.length) {
187
+ buffer += EOL.repeat(2);
188
+ const output = [...bottomBar, running ? this._spinner.fetch() : ""].map((i) => this._wrap(i)).join(EOL);
189
+ if (!running) buffer += output;
190
+ else {
191
+ const { rows } = process.stdout;
192
+ const lines = rows - buffer.split(EOL).length - 2;
193
+ buffer += output.split(EOL).slice(-Math.max(4, lines)).join(EOL);
194
+ }
195
+ }
196
+ }
197
+ return buffer;
198
+ }
199
+ _wrap(str) {
200
+ return wrap(str, process.stdout.columns ?? 80, {
201
+ hard: true,
202
+ trim: false
203
+ });
204
+ }
205
+ };
206
+ var AIGNEListrFallbackRenderer = class extends SimpleRenderer {
207
+ static rendererOptions = { ...SimpleRenderer.rendererOptions };
208
+ get _logger() {
209
+ return this["logger"];
210
+ }
211
+ get _options() {
212
+ return this["options"];
213
+ }
214
+ end() {
215
+ const logs = [this._options.aigne?.getStdoutLogs?.(), this._options.aigne?.getBottomBarLogs?.()].filter(Boolean).flat().join(EOL);
216
+ if (logs) this._logger.toStdout(logs);
217
+ }
218
+ };
219
+
220
+ //#endregion
221
+ export { AIGNEListr, AIGNEListrFallbackRenderer, AIGNEListrRenderer };
222
+ //# sourceMappingURL=listr.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listr.mjs","names":[],"sources":["../../src/utils/listr.ts"],"sourcesContent":["import { EOL } from \"node:os\";\nimport { format } from \"node:util\";\nimport { type AgentResponseStream, isAgentResponseProgress, type Message } from \"@aigne/core\";\nimport { LogLevel, logger } from \"@aigne/core/utils/logger\";\nimport { mergeAgentResponseChunk } from \"@aigne/core/utils/stream-utils\";\nimport type { PromiseOrValue } from \"@aigne/core/utils/type-utils\";\nimport {\n color,\n DefaultRenderer,\n figures,\n Listr,\n ListrDefaultRendererLogLevels,\n type ListrDefaultRendererOptions,\n ListrLogger,\n type ListrSimpleRendererOptions,\n type ListrTaskWrapper,\n SimpleRenderer,\n Spinner,\n} from \"@aigne/listr2\";\nimport { markedTerminal } from \"@aigne/marked-terminal\";\nimport chalk from \"chalk\";\nimport type { createLogUpdate } from \"log-update\";\nimport { Marked } from \"marked\";\nimport wrap from \"wrap-ansi\";\n\nexport type AIGNEListrTaskWrapper = ListrTaskWrapper<\n unknown,\n typeof AIGNEListrRenderer,\n typeof AIGNEListrFallbackRenderer\n>;\n\nexport class AIGNEListr extends Listr<\n object,\n typeof AIGNEListrRenderer,\n typeof AIGNEListrFallbackRenderer\n> {\n private result: Message = {};\n private error?: Error;\n\n private logs: string[] = [];\n\n private spinner: Spinner;\n\n constructor(\n public myOptions: {\n formatRequest: () => string | undefined;\n formatResult: (\n result: Message,\n options?: { running?: boolean; renderImage?: boolean },\n ) => string | Promise<string>;\n },\n ...[task, options, parentTask]: ConstructorParameters<\n typeof Listr<object, typeof AIGNEListrRenderer, typeof AIGNEListrFallbackRenderer>\n >\n ) {\n const aigneOptions: AIGNEListrRendererOptions[\"aigne\"] = {\n getStdoutLogs: () => {\n return this.logs.splice(0);\n },\n getBottomBarLogs: (_options?: { running?: boolean; renderImage?: boolean }) => {\n // if (!options?.running) return [];\n // const r = this.myOptions.formatResult(this.result);\n // if (typeof r !== \"string\") throw new Error(\"Must return a string result for running task\");\n // return [r];\n return [];\n },\n };\n\n super(\n task,\n {\n ...options,\n renderer: AIGNEListrRenderer,\n rendererOptions: {\n collapseSubtasks: false,\n icon: {\n [ListrDefaultRendererLogLevels.PENDING]: () => this.spinner.fetch(),\n [ListrDefaultRendererLogLevels.COMPLETED_WITH_FAILED_SUBTASKS]: figures.cross,\n },\n color: {\n [ListrDefaultRendererLogLevels.COMPLETED_WITH_FAILED_SUBTASKS]: (m) =>\n m ? color.red(m) : \"\",\n },\n aigne: aigneOptions,\n },\n fallbackRenderer: AIGNEListrFallbackRenderer,\n fallbackRendererOptions: {\n aigne: aigneOptions,\n logger: new (class extends ListrLogger {\n override log(...[level, ...args]: Parameters<ListrLogger[\"log\"]>): void {\n // ignore stdout logs if level `INFO` is not enabled\n if (!this.options?.toStderr?.includes(level) && !logger.enabled(LogLevel.INFO)) {\n return;\n }\n\n super.log(level, ...args);\n }\n })(),\n },\n },\n parentTask,\n );\n\n this.spinner = new Spinner();\n }\n\n private needLogResult = true;\n\n override async run(stream: () => PromiseOrValue<AgentResponseStream<Message>>): Promise<Message> {\n const originalLog = logger.logMessage;\n const originalConsole = { ...console };\n\n try {\n this.ctx = {};\n this.spinner.start();\n\n if (logger.enabled(LogLevel.INFO)) {\n const request = this.myOptions.formatRequest();\n if (request) console.log(request);\n }\n\n logger.logMessage = (...args) => this.logs.push(format(...args));\n for (const method of [\"debug\", \"log\", \"info\", \"warn\", \"error\"] as const) {\n console[method] = (...args) => {\n const renderer =\n this[\"renderer\"] instanceof AIGNEListrRenderer ? this[\"renderer\"] : undefined;\n const msg = format(...args);\n\n renderer ? renderer.log(msg) : this.logs.push(msg);\n };\n }\n\n const _stream = await stream();\n\n this.add({ task: () => this.extractStream(_stream) });\n\n const result = await super.run().then(() => {\n if (this.error) throw this.error;\n return { ...this.result };\n });\n\n if (this.needLogResult) {\n console.log(\n await this.myOptions.formatResult(this.result, { running: false, renderImage: true }),\n );\n }\n\n return result;\n } finally {\n logger.logMessage = originalLog;\n Object.assign(console, originalConsole);\n\n this.spinner.stop();\n }\n }\n\n private marked = new Marked().use(\n {\n // marked-terminal does not support code block meta, so we need to strip it\n walkTokens: (token) => {\n if (token.type === \"code\") {\n if (typeof token.lang === \"string\") {\n token.lang = token.lang.trim().split(/\\s+/)[0];\n }\n }\n },\n },\n markedTerminal(\n { forceHyperLink: false },\n {\n theme: {\n string: chalk.green,\n },\n },\n ),\n );\n\n private async extractStream(stream: AgentResponseStream<Message>) {\n try {\n this.result = {};\n\n for await (const value of stream) {\n mergeAgentResponseChunk(this.result, value);\n\n if (isAgentResponseProgress(value) && value.progress.event === \"message\") {\n const { message } = value.progress;\n\n const rendered: string[] = [];\n\n if (message.role === \"user\" || message.role === \"agent\") {\n if (message.role === \"agent\" && message.toolCalls) {\n for (const call of message.toolCalls) {\n rendered.push(\n `${chalk.bold.gray(`[${call.function.name}]`)} ${chalk.gray(`${JSON.stringify(call.function.arguments).slice(0, 200)}...`)}`,\n );\n }\n } else if (typeof message.content === \"string\") {\n rendered.push(this.marked.parse(message.content, { async: false }).trim());\n } else if (Array.isArray(message.content)) {\n for (const msg of message.content) {\n if (msg.type === \"text\") {\n if (msg.isThinking) {\n rendered.push(chalk.dim(chalk.grey(chalk.italic(`[Thinking] ${msg.text}`))));\n } else {\n rendered.push(this.marked.parse(msg.text, { async: false }).trim());\n }\n }\n }\n }\n }\n\n if (rendered.length) {\n const prefix = message.role === \"user\" ? chalk.blue.bold(\">\") : chalk.green.bold(\"•\");\n console.log(`${prefix} ${rendered.join(\"\\n\")}\\n`);\n this.needLogResult = false;\n }\n }\n }\n\n return this.result;\n } catch (error) {\n this.error = error;\n throw error;\n }\n }\n}\n\nexport interface AIGNEListrRendererOptions extends ListrDefaultRendererOptions {\n aigne?: {\n getStdoutLogs?: () => string[];\n getBottomBarLogs?: (options?: { running?: boolean }) => string[];\n };\n}\n\nexport class AIGNEListrRenderer extends DefaultRenderer {\n public static override rendererOptions: AIGNEListrRendererOptions = {\n ...DefaultRenderer.rendererOptions,\n };\n\n get _updater() {\n return this[\"updater\"] as ReturnType<typeof createLogUpdate>;\n }\n\n get _logger() {\n return this[\"logger\"] as ListrLogger;\n }\n\n get _options() {\n return this[\"options\"] as AIGNEListrRendererOptions;\n }\n\n get _spinner() {\n return this[\"spinner\"] as Spinner;\n }\n\n override update(): void {\n if (this.paused || this.ended) {\n return;\n }\n this._updater(this.create({ running: true }));\n }\n\n private paused = false;\n\n private ended = false;\n\n override end(): void {\n this.ended = true;\n super.end();\n }\n\n async pause() {\n this.paused = true;\n this._updater?.clear();\n this._updater?.done();\n await new Promise((resolve) => setTimeout(resolve, 100));\n this._logger.process.release();\n }\n\n async resume() {\n this._logger.process.hijack();\n this.paused = false;\n }\n\n log(message: string) {\n this._updater?.clear();\n this._logger.toStdout(message);\n }\n\n private isPreviousPrompt = false;\n\n override create({\n running = false,\n ...options\n }: Parameters<DefaultRenderer[\"create\"]>[0] & { running?: boolean }): string {\n const logs = this._options.aigne?.getStdoutLogs?.();\n if (logs?.length) {\n this._updater.clear();\n this._logger.toStdout(logs.join(EOL));\n }\n\n let buffer = \"\";\n\n const prompt: string[] = super[\"renderPrompt\"]();\n if (prompt.length) {\n buffer += prompt.join(EOL);\n this.isPreviousPrompt = true;\n }\n // Skip a frame if previous render was a prompt, and reset the flag\n else if (this.isPreviousPrompt) {\n this.isPreviousPrompt = false;\n } else {\n buffer += super.create({ ...options, prompt: false });\n\n const bottomBar = this._options.aigne?.getBottomBarLogs?.({ running });\n if (bottomBar?.length) {\n buffer += EOL.repeat(2);\n\n const output = [...bottomBar, running ? this._spinner.fetch() : \"\"]\n .map((i) => this._wrap(i))\n .join(EOL);\n\n // If the task is not running, we show all lines\n if (!running) {\n buffer += output;\n }\n // For running tasks, we only show the last few lines\n else {\n const { rows } = process.stdout;\n const lines = rows - buffer.split(EOL).length - 2;\n buffer += output.split(EOL).slice(-Math.max(4, lines)).join(EOL);\n }\n }\n }\n\n return buffer;\n }\n\n _wrap(str: string) {\n return wrap(str, process.stdout.columns ?? 80, {\n hard: true,\n trim: false,\n });\n }\n}\n\nexport interface AIGNEListrFallbackRendererOptions\n extends ListrSimpleRendererOptions,\n Pick<AIGNEListrRendererOptions, \"aigne\"> {}\n\nexport class AIGNEListrFallbackRenderer extends SimpleRenderer {\n static override rendererOptions: AIGNEListrFallbackRendererOptions = {\n ...SimpleRenderer.rendererOptions,\n };\n\n get _logger() {\n return this[\"logger\"] as ListrLogger;\n }\n\n get _options() {\n return this[\"options\"] as AIGNEListrFallbackRendererOptions;\n }\n\n override end(): void {\n const logs = [this._options.aigne?.getStdoutLogs?.(), this._options.aigne?.getBottomBarLogs?.()]\n .filter(Boolean)\n .flat()\n .join(EOL);\n\n if (logs) this._logger.toStdout(logs);\n }\n}\n"],"mappings":"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"}