@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,175 @@
1
+ import { ACCESS_KEY_SESSION_API, WELLKNOWN_SERVICE_PATH_PREFIX, isTest } from "./constants.mjs";
2
+ import { decrypt, encodeEncryptionKey } from "./crypto.mjs";
3
+ import store_default from "./store/index.mjs";
4
+ import { existsSync, mkdirSync } from "node:fs";
5
+ import { join } from "node:path";
6
+ import { fetch } from "@aigne/core/utils/fetch";
7
+ import { joinURL, withQuery } from "ufo";
8
+ import { AIGNE_HUB_BLOCKLET_DID, AIGNE_HUB_URL, getAIGNEHubMountPoint } from "@aigne/aigne-hub";
9
+ import inquirer from "inquirer";
10
+ import { homedir } from "node:os";
11
+ import open from "open";
12
+ import pWaitFor from "p-wait-for";
13
+
14
+ //#region src/utils/aigne-hub/credential.ts
15
+ const request = async (config) => {
16
+ const headers = {};
17
+ if (config.requestCount !== void 0) headers["X-Request-Count"] = config.requestCount.toString();
18
+ return { data: await (await fetch(config.url, {
19
+ method: config.method || "GET",
20
+ headers
21
+ })).json() };
22
+ };
23
+ const fetchConfigs = async ({ connectUrl, sessionId, fetchInterval, fetchTimeout }) => {
24
+ const sessionURL = withQuery(joinURL(connectUrl, ACCESS_KEY_SESSION_API), { sid: sessionId });
25
+ let requestCount = 0;
26
+ const condition = async () => {
27
+ const { data: session$1 } = await request({
28
+ url: sessionURL,
29
+ requestCount
30
+ });
31
+ requestCount++;
32
+ return Boolean(session$1.accessKeyId && session$1.accessKeySecret);
33
+ };
34
+ await pWaitFor(condition, {
35
+ interval: fetchInterval,
36
+ timeout: fetchTimeout
37
+ });
38
+ const { data: session } = await request({
39
+ url: sessionURL,
40
+ requestCount
41
+ });
42
+ await request({
43
+ url: sessionURL,
44
+ method: "DELETE"
45
+ });
46
+ return {
47
+ ...session,
48
+ accessKeyId: session.accessKeyId,
49
+ accessKeySecret: decrypt(session.accessKeySecret, session.accessKeyId, session.challenge)
50
+ };
51
+ };
52
+ function baseWrapSpinner(_, waiting) {
53
+ return waiting();
54
+ }
55
+ async function createConnect({ connectUrl, openPage, fetchInterval = 3 * 1e3, retry = 1500, source = "Blocklet CLI", connectAction = "connect-cli", wrapSpinner = baseWrapSpinner, closeOnSuccess, intervalFetchConfig, appName = "AIGNE CLI", appLogo = "https://www.aigne.io/favicon.ico?imageFilter=resize&w=32" }) {
56
+ const { data: session } = await request({
57
+ url: joinURL(connectUrl, ACCESS_KEY_SESSION_API),
58
+ method: "POST"
59
+ });
60
+ const token = session.id;
61
+ const pageUrl = withQuery(joinURL(connectUrl, connectAction), {
62
+ __token__: encodeEncryptionKey(token),
63
+ source,
64
+ closeOnSuccess,
65
+ cli: true,
66
+ appName: ` ${appName}`,
67
+ appLogo
68
+ });
69
+ openPage?.(pageUrl);
70
+ return await wrapSpinner(`Waiting for connection: ${connectUrl}`, async () => {
71
+ return await (intervalFetchConfig ?? fetchConfigs)({
72
+ connectUrl,
73
+ sessionId: token,
74
+ fetchTimeout: retry * fetchInterval,
75
+ fetchInterval: retry
76
+ });
77
+ });
78
+ }
79
+ async function connectToAIGNEHub(url) {
80
+ const { origin } = new URL(url);
81
+ const connectUrl = joinURL(origin, WELLKNOWN_SERVICE_PATH_PREFIX);
82
+ const apiUrl = await getAIGNEHubMountPoint(url, AIGNE_HUB_BLOCKLET_DID);
83
+ const openFn = isTest ? () => {} : open;
84
+ const accessKeyOptions = {
85
+ apiKey: (await createConnect({
86
+ connectUrl,
87
+ connectAction: "gen-simple-access-key",
88
+ source: `@aigne/cli connect to AIGNE hub`,
89
+ closeOnSuccess: true,
90
+ openPage: (pageUrl) => openFn(pageUrl)
91
+ })).accessKeySecret,
92
+ url: apiUrl
93
+ };
94
+ const secretStore = await store_default();
95
+ await secretStore.setKey(accessKeyOptions.url, accessKeyOptions.apiKey);
96
+ await secretStore.setDefault(accessKeyOptions.url);
97
+ return accessKeyOptions;
98
+ }
99
+ const checkConnectionStatus = async (host) => {
100
+ const env = await (await store_default()).getKey(host);
101
+ if (!env?.AIGNE_HUB_API_KEY) throw new Error("AIGNE_HUB_API_KEY key not found, need to login first");
102
+ return {
103
+ apiKey: env.AIGNE_HUB_API_KEY,
104
+ url: env.AIGNE_HUB_API_URL
105
+ };
106
+ };
107
+ async function loadAIGNEHubCredential(options) {
108
+ if (process.env.BLOCKLET_AIGNE_API_URL && process.env.BLOCKLET_AIGNE_API_PROVIDER) return void 0;
109
+ const aigneDir = join(homedir(), ".aigne");
110
+ if (!existsSync(aigneDir)) mkdirSync(aigneDir, { recursive: true });
111
+ const defaultHost = await (await store_default()).getDefault();
112
+ const inquirerPrompt = options?.inquirerPromptFn ?? inquirer.prompt;
113
+ const configUrl = options?.aigneHubUrl || process.env.AIGNE_HUB_API_URL;
114
+ const url = configUrl || defaultHost?.AIGNE_HUB_API_URL || AIGNE_HUB_URL;
115
+ const connectUrl = joinURL(new URL(url).origin, WELLKNOWN_SERVICE_PATH_PREFIX);
116
+ const { host } = new URL(url);
117
+ let credential = {};
118
+ try {
119
+ if (process.env.AIGNE_HUB_API_KEY) credential = {
120
+ apiKey: process.env.AIGNE_HUB_API_KEY,
121
+ url: process.env.AIGNE_HUB_API_URL || url
122
+ };
123
+ else credential = await checkConnectionStatus(host);
124
+ } catch (error) {
125
+ if (error instanceof Error && error.message.includes("login first")) {
126
+ let aigneHubUrl = connectUrl;
127
+ if (!configUrl) {
128
+ const { subscribe } = await inquirerPrompt({
129
+ type: "list",
130
+ name: "subscribe",
131
+ message: "No LLM API Keys or AIGNE Hub connections found. How would you like to proceed?",
132
+ choices: [
133
+ {
134
+ name: "Connect to the Arcblock official AIGNE Hub (recommended, free credits for new users)",
135
+ value: "official"
136
+ },
137
+ connectUrl.includes(AIGNE_HUB_URL) ? {
138
+ name: "Connect to your own AIGNE Hub instance (self-hosted)",
139
+ value: "custom"
140
+ } : null,
141
+ {
142
+ name: "Exit and configure my own LLM API Keys",
143
+ value: "manual"
144
+ }
145
+ ].filter(Boolean),
146
+ default: "official"
147
+ });
148
+ if (subscribe === "custom") {
149
+ const { customUrl } = await inquirerPrompt({
150
+ type: "input",
151
+ name: "customUrl",
152
+ message: "Enter the URL of your AIGNE Hub:",
153
+ validate(input) {
154
+ try {
155
+ return new URL(input).protocol.startsWith("http") ? true : "Must be a valid URL with http or https";
156
+ } catch {
157
+ return "Invalid URL";
158
+ }
159
+ }
160
+ });
161
+ aigneHubUrl = customUrl;
162
+ } else if (subscribe === "manual") {
163
+ console.log("You chose to configure your own LLM API Keys. Please follow the instructions in the documentation: https://www.arcblock.io/docs/aigne-framework/models-configuration-9dc03e");
164
+ process.exit(0);
165
+ }
166
+ }
167
+ credential = await connectToAIGNEHub(aigneHubUrl);
168
+ } else throw error;
169
+ }
170
+ return credential;
171
+ }
172
+
173
+ //#endregion
174
+ export { connectToAIGNEHub, loadAIGNEHubCredential };
175
+ //# sourceMappingURL=credential.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential.mjs","names":["session","getSecretStore"],"sources":["../../../src/utils/aigne-hub/credential.ts"],"sourcesContent":["import { existsSync, mkdirSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { AIGNE_HUB_BLOCKLET_DID, AIGNE_HUB_URL, getAIGNEHubMountPoint } from \"@aigne/aigne-hub\";\nimport { fetch } from \"@aigne/core/utils/fetch\";\nimport inquirer from \"inquirer\";\nimport open from \"open\";\nimport pWaitFor from \"p-wait-for\";\nimport { joinURL, withQuery } from \"ufo\";\nimport { ACCESS_KEY_SESSION_API, isTest, WELLKNOWN_SERVICE_PATH_PREFIX } from \"./constants.js\";\nimport { decrypt, encodeEncryptionKey } from \"./crypto.js\";\nimport getSecretStore from \"./store/index.js\";\nimport type { CreateConnectOptions, FetchResult, LoadCredentialOptions } from \"./type.js\";\n\nconst request = async (config: { url: string; method?: string; requestCount?: number }) => {\n const headers: Record<string, string> = {};\n if (config.requestCount !== undefined) {\n headers[\"X-Request-Count\"] = config.requestCount.toString();\n }\n\n const response = await fetch(config.url, { method: config.method || \"GET\", headers });\n\n const data = await response.json();\n\n return { data };\n};\n\nexport const fetchConfigs = async ({\n connectUrl,\n sessionId,\n fetchInterval,\n fetchTimeout,\n}: {\n connectUrl: string;\n sessionId: string;\n fetchInterval: number;\n fetchTimeout: number;\n}) => {\n const sessionURL = withQuery(joinURL(connectUrl, ACCESS_KEY_SESSION_API), { sid: sessionId });\n\n let requestCount = 0;\n const condition = async () => {\n const { data: session } = await request({ url: sessionURL, requestCount });\n requestCount++;\n return Boolean(session.accessKeyId && session.accessKeySecret);\n };\n\n await pWaitFor(condition, { interval: fetchInterval, timeout: fetchTimeout });\n\n const { data: session } = await request({ url: sessionURL, requestCount });\n await request({ url: sessionURL, method: \"DELETE\" });\n\n return {\n ...session,\n accessKeyId: session.accessKeyId,\n accessKeySecret: decrypt(session.accessKeySecret, session.accessKeyId, session.challenge),\n };\n};\n\nfunction baseWrapSpinner(_: string, waiting: () => Promise<FetchResult>) {\n return waiting();\n}\n\nexport async function createConnect({\n connectUrl,\n openPage,\n fetchInterval = 3 * 1000,\n retry = 1500,\n source = \"Blocklet CLI\",\n connectAction = \"connect-cli\",\n wrapSpinner = baseWrapSpinner,\n closeOnSuccess,\n intervalFetchConfig,\n appName = \"AIGNE CLI\",\n appLogo = \"https://www.aigne.io/favicon.ico?imageFilter=resize&w=32\",\n}: CreateConnectOptions) {\n const startSessionURL = joinURL(connectUrl, ACCESS_KEY_SESSION_API);\n const { data: session } = await request({ url: startSessionURL, method: \"POST\" });\n const token = session.id;\n\n const pageUrl = withQuery(joinURL(connectUrl, connectAction), {\n __token__: encodeEncryptionKey(token),\n source,\n closeOnSuccess,\n cli: true,\n appName: ` ${appName}`,\n appLogo,\n });\n\n openPage?.(pageUrl);\n\n return await wrapSpinner(`Waiting for connection: ${connectUrl}`, async () => {\n const checkAuthorizeStatus = intervalFetchConfig ?? fetchConfigs;\n\n const authorizeStatus = await checkAuthorizeStatus({\n connectUrl,\n sessionId: token,\n fetchTimeout: retry * fetchInterval,\n fetchInterval: retry,\n });\n\n return authorizeStatus;\n });\n}\n\nexport async function connectToAIGNEHub(url: string) {\n const { origin } = new URL(url);\n const connectUrl = joinURL(origin, WELLKNOWN_SERVICE_PATH_PREFIX);\n const apiUrl = await getAIGNEHubMountPoint(url, AIGNE_HUB_BLOCKLET_DID);\n\n const openFn = isTest ? () => {} : open;\n const result = await createConnect({\n connectUrl: connectUrl,\n connectAction: \"gen-simple-access-key\",\n source: `@aigne/cli connect to AIGNE hub`,\n closeOnSuccess: true,\n openPage: (pageUrl) => openFn(pageUrl),\n });\n\n const accessKeyOptions = {\n apiKey: result.accessKeySecret,\n url: apiUrl,\n };\n\n const secretStore = await getSecretStore();\n await secretStore.setKey(accessKeyOptions.url, accessKeyOptions.apiKey);\n await secretStore.setDefault(accessKeyOptions.url);\n\n return accessKeyOptions;\n}\n\nexport const checkConnectionStatus = async (host: string) => {\n const secretStore = await getSecretStore();\n const env = await secretStore.getKey(host);\n\n if (!env?.AIGNE_HUB_API_KEY) {\n throw new Error(\"AIGNE_HUB_API_KEY key not found, need to login first\");\n }\n\n return {\n apiKey: env.AIGNE_HUB_API_KEY,\n url: env.AIGNE_HUB_API_URL,\n };\n};\n\nexport async function loadAIGNEHubCredential(options?: LoadCredentialOptions) {\n const isBlocklet = process.env.BLOCKLET_AIGNE_API_URL && process.env.BLOCKLET_AIGNE_API_PROVIDER;\n if (isBlocklet) return undefined;\n\n const aigneDir = join(homedir(), \".aigne\");\n if (!existsSync(aigneDir)) {\n mkdirSync(aigneDir, { recursive: true });\n }\n\n const secretStore = await getSecretStore();\n const defaultHost = await secretStore.getDefault();\n const inquirerPrompt = (options?.inquirerPromptFn ?? inquirer.prompt) as typeof inquirer.prompt;\n\n const configUrl = options?.aigneHubUrl || process.env.AIGNE_HUB_API_URL;\n const url = configUrl || defaultHost?.AIGNE_HUB_API_URL || AIGNE_HUB_URL;\n const connectUrl = joinURL(new URL(url).origin, WELLKNOWN_SERVICE_PATH_PREFIX);\n const { host } = new URL(url);\n\n let credential: { apiKey?: string; url?: string } = {};\n\n try {\n if (process.env.AIGNE_HUB_API_KEY) {\n credential = {\n apiKey: process.env.AIGNE_HUB_API_KEY,\n url: process.env.AIGNE_HUB_API_URL || url,\n };\n } else {\n credential = await checkConnectionStatus(host);\n }\n } catch (error) {\n if (error instanceof Error && error.message.includes(\"login first\")) {\n let aigneHubUrl = connectUrl;\n\n if (!configUrl) {\n const { subscribe } = await inquirerPrompt({\n type: \"list\",\n name: \"subscribe\",\n message: \"No LLM API Keys or AIGNE Hub connections found. How would you like to proceed?\",\n choices: [\n {\n name: \"Connect to the Arcblock official AIGNE Hub (recommended, free credits for new users)\",\n value: \"official\",\n },\n connectUrl.includes(AIGNE_HUB_URL)\n ? {\n name: \"Connect to your own AIGNE Hub instance (self-hosted)\",\n value: \"custom\",\n }\n : null,\n {\n name: \"Exit and configure my own LLM API Keys\",\n value: \"manual\",\n },\n ].filter(Boolean) as { name: string; value: string }[],\n default: \"official\",\n });\n\n if (subscribe === \"custom\") {\n const { customUrl } = await inquirerPrompt({\n type: \"input\",\n name: \"customUrl\",\n message: \"Enter the URL of your AIGNE Hub:\",\n validate(input) {\n try {\n const url = new URL(input);\n return url.protocol.startsWith(\"http\")\n ? true\n : \"Must be a valid URL with http or https\";\n } catch {\n return \"Invalid URL\";\n }\n },\n });\n aigneHubUrl = customUrl;\n } else if (subscribe === \"manual\") {\n console.log(\n \"You chose to configure your own LLM API Keys. Please follow the instructions in the documentation: https://www.arcblock.io/docs/aigne-framework/models-configuration-9dc03e\",\n );\n process.exit(0);\n }\n }\n\n credential = await connectToAIGNEHub(aigneHubUrl);\n } else {\n throw error;\n }\n }\n\n return credential;\n}\n"],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
+ let node_crypto = require("node:crypto");
3
+ node_crypto = require_rolldown_runtime.__toESM(node_crypto);
4
+ let crypto_js_aes_js = require("crypto-js/aes.js");
5
+ crypto_js_aes_js = require_rolldown_runtime.__toESM(crypto_js_aes_js);
6
+ let crypto_js_enc_base64_js = require("crypto-js/enc-base64.js");
7
+ crypto_js_enc_base64_js = require_rolldown_runtime.__toESM(crypto_js_enc_base64_js);
8
+ let crypto_js_enc_hex_js = require("crypto-js/enc-hex.js");
9
+ crypto_js_enc_hex_js = require_rolldown_runtime.__toESM(crypto_js_enc_hex_js);
10
+ let crypto_js_enc_latin1_js = require("crypto-js/enc-latin1.js");
11
+ crypto_js_enc_latin1_js = require_rolldown_runtime.__toESM(crypto_js_enc_latin1_js);
12
+ let crypto_js_enc_utf8_js = require("crypto-js/enc-utf8.js");
13
+ crypto_js_enc_utf8_js = require_rolldown_runtime.__toESM(crypto_js_enc_utf8_js);
14
+ let crypto_js_enc_utf16_js = require("crypto-js/enc-utf16.js");
15
+ crypto_js_enc_utf16_js = require_rolldown_runtime.__toESM(crypto_js_enc_utf16_js);
16
+
17
+ //#region src/utils/aigne-hub/crypto.ts
18
+ const encoders = {
19
+ latin1: crypto_js_enc_latin1_js.default,
20
+ utf8: crypto_js_enc_utf8_js.default,
21
+ hex: crypto_js_enc_hex_js.default,
22
+ utf16: crypto_js_enc_utf16_js.default,
23
+ base64: crypto_js_enc_base64_js.default
24
+ };
25
+ var AesCrypter = class {
26
+ encrypt(message, secret) {
27
+ const text = typeof message === "string" ? message : JSON.stringify(message);
28
+ return crypto_js_aes_js.default.encrypt(text, secret).toString();
29
+ }
30
+ decrypt(cipher, secret, outputEncoding = "utf8") {
31
+ return crypto_js_aes_js.default.decrypt(cipher, secret).toString(encoders[outputEncoding]);
32
+ }
33
+ };
34
+ const aes = new AesCrypter();
35
+ const decrypt = (m, s, i) => aes.decrypt(m, node_crypto.default.pbkdf2Sync(i, s, 256, 32, "sha512").toString("hex"));
36
+ const escapeFn = (str) => str.replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
37
+ const encodeEncryptionKey = (key) => escapeFn(Buffer.from(key).toString("base64"));
38
+
39
+ //#endregion
40
+ exports.decrypt = decrypt;
41
+ exports.encodeEncryptionKey = encodeEncryptionKey;
@@ -0,0 +1,33 @@
1
+ import crypto from "node:crypto";
2
+ import AES from "crypto-js/aes.js";
3
+ import encBase64 from "crypto-js/enc-base64.js";
4
+ import encHex from "crypto-js/enc-hex.js";
5
+ import encLatin1 from "crypto-js/enc-latin1.js";
6
+ import encUtf8 from "crypto-js/enc-utf8.js";
7
+ import encUtf16 from "crypto-js/enc-utf16.js";
8
+
9
+ //#region src/utils/aigne-hub/crypto.ts
10
+ const encoders = {
11
+ latin1: encLatin1,
12
+ utf8: encUtf8,
13
+ hex: encHex,
14
+ utf16: encUtf16,
15
+ base64: encBase64
16
+ };
17
+ var AesCrypter = class {
18
+ encrypt(message, secret) {
19
+ const text = typeof message === "string" ? message : JSON.stringify(message);
20
+ return AES.encrypt(text, secret).toString();
21
+ }
22
+ decrypt(cipher, secret, outputEncoding = "utf8") {
23
+ return AES.decrypt(cipher, secret).toString(encoders[outputEncoding]);
24
+ }
25
+ };
26
+ const aes = new AesCrypter();
27
+ const decrypt = (m, s, i) => aes.decrypt(m, crypto.pbkdf2Sync(i, s, 256, 32, "sha512").toString("hex"));
28
+ const escapeFn = (str) => str.replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
29
+ const encodeEncryptionKey = (key) => escapeFn(Buffer.from(key).toString("base64"));
30
+
31
+ //#endregion
32
+ export { decrypt, encodeEncryptionKey };
33
+ //# sourceMappingURL=crypto.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.mjs","names":[],"sources":["../../../src/utils/aigne-hub/crypto.ts"],"sourcesContent":["import crypto from \"node:crypto\";\nimport AES from \"crypto-js/aes.js\";\nimport encBase64 from \"crypto-js/enc-base64.js\";\nimport encHex from \"crypto-js/enc-hex.js\";\nimport encLatin1 from \"crypto-js/enc-latin1.js\";\nimport encUtf8 from \"crypto-js/enc-utf8.js\";\nimport encUtf16 from \"crypto-js/enc-utf16.js\";\n\nconst encoders: { [index: string]: typeof encLatin1 } = {\n latin1: encLatin1,\n utf8: encUtf8,\n hex: encHex,\n utf16: encUtf16,\n base64: encBase64,\n};\n\nclass AesCrypter {\n encrypt(message: string | object, secret: string) {\n const text = typeof message === \"string\" ? message : JSON.stringify(message);\n return AES.encrypt(text, secret).toString();\n }\n\n decrypt(cipher: string, secret: string, outputEncoding = \"utf8\") {\n return AES.decrypt(cipher, secret).toString(encoders[outputEncoding]);\n }\n}\n\nconst aes = new AesCrypter();\n\nexport const decrypt = (m: string, s: string, i: string) =>\n aes.decrypt(m, crypto.pbkdf2Sync(i, s, 256, 32, \"sha512\").toString(\"hex\"));\nexport const encrypt = (m: string, s: string, i: string) =>\n aes.encrypt(m, crypto.pbkdf2Sync(i, s, 256, 32, \"sha512\").toString(\"hex\"));\n\nconst escapeFn = (str: string) => str.replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\nconst unescapeFn = (str: string) =>\n (str + \"===\".slice((str.length + 3) % 4)).replace(/-/g, \"+\").replace(/_/g, \"/\");\nexport const encodeEncryptionKey = (key: string) => escapeFn(Buffer.from(key).toString(\"base64\"));\nexport const decodeEncryptionKey = (str: string) =>\n new Uint8Array(Buffer.from(unescapeFn(str), \"base64\"));\n"],"mappings":";;;;;;;;;AAQA,MAAM,WAAkD;CACtD,QAAQ;CACR,MAAM;CACN,KAAK;CACL,OAAO;CACP,QAAQ;CACT;AAED,IAAM,aAAN,MAAiB;CACf,QAAQ,SAA0B,QAAgB;EAChD,MAAM,OAAO,OAAO,YAAY,WAAW,UAAU,KAAK,UAAU,QAAQ;AAC5E,SAAO,IAAI,QAAQ,MAAM,OAAO,CAAC,UAAU;;CAG7C,QAAQ,QAAgB,QAAgB,iBAAiB,QAAQ;AAC/D,SAAO,IAAI,QAAQ,QAAQ,OAAO,CAAC,SAAS,SAAS,gBAAgB;;;AAIzE,MAAM,MAAM,IAAI,YAAY;AAE5B,MAAa,WAAW,GAAW,GAAW,MAC5C,IAAI,QAAQ,GAAG,OAAO,WAAW,GAAG,GAAG,KAAK,IAAI,SAAS,CAAC,SAAS,MAAM,CAAC;AAI5E,MAAM,YAAY,QAAgB,IAAI,QAAQ,OAAO,IAAI,CAAC,QAAQ,OAAO,IAAI,CAAC,QAAQ,MAAM,GAAG;AAG/F,MAAa,uBAAuB,QAAgB,SAAS,OAAO,KAAK,IAAI,CAAC,SAAS,SAAS,CAAC"}
@@ -0,0 +1,112 @@
1
+ const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
+ const require_constants = require('./constants.cjs');
3
+ const require_index = require('./store/index.cjs');
4
+ const require_credential = require('./credential.cjs');
5
+ let chalk = require("chalk");
6
+ chalk = require_rolldown_runtime.__toESM(chalk);
7
+ let _aigne_core_utils_type_utils = require("@aigne/core/utils/type-utils");
8
+ let _aigne_aigne_hub = require("@aigne/aigne-hub");
9
+ let inquirer = require("inquirer");
10
+ inquirer = require_rolldown_runtime.__toESM(inquirer);
11
+
12
+ //#region src/utils/aigne-hub/model.ts
13
+ function maskApiKey(apiKey) {
14
+ if (!apiKey || apiKey.length <= 8) return apiKey;
15
+ const start = apiKey.slice(0, 4);
16
+ const end = apiKey.slice(-4);
17
+ return `${start}${"*".repeat(8)}${end}`;
18
+ }
19
+ function findConfiguredProvider(provider, name) {
20
+ if (provider && provider.trim().toLowerCase() !== require_constants.AIGNE_HUB_PROVIDER.trim().toLowerCase()) return;
21
+ if (!name) return void 0;
22
+ const supportedProviders = (0, _aigne_aigne_hub.getSupportedProviders)(name);
23
+ for (const supportedProvider of supportedProviders) {
24
+ const { match } = (0, _aigne_aigne_hub.findModel)(supportedProvider);
25
+ if (match) {
26
+ if ((0, _aigne_core_utils_type_utils.flat)(match.apiKeyEnvName).some((name$1) => name$1 && process.env[name$1])) return {
27
+ provider: supportedProvider,
28
+ model: (0, _aigne_aigne_hub.resolveProviderModelId)(supportedProvider, name)
29
+ };
30
+ }
31
+ }
32
+ }
33
+ const formatModelName = async (model, inquirerPrompt) => {
34
+ let { provider, model: name } = (0, _aigne_aigne_hub.parseModel)(model);
35
+ const configuredEnvProvider = findConfiguredProvider(provider, name);
36
+ if (configuredEnvProvider) return configuredEnvProvider;
37
+ provider ||= require_constants.AIGNE_HUB_PROVIDER;
38
+ const { match, all } = (0, _aigne_aigne_hub.findModel)(provider);
39
+ if (!match) throw new Error(`Unsupported model: ${provider}/${name}, available providers: ${all.map((m) => m.name).join(", ")}`);
40
+ if (provider.includes(require_constants.AIGNE_HUB_PROVIDER)) return {
41
+ provider,
42
+ model: name || _aigne_aigne_hub.AIGNE_HUB_DEFAULT_MODEL
43
+ };
44
+ const requireEnvs = (0, _aigne_core_utils_type_utils.flat)(match.apiKeyEnvName);
45
+ if (requireEnvs.some((name$1) => name$1 && process.env[name$1])) return {
46
+ provider,
47
+ model: name
48
+ };
49
+ const secretStore = await require_index.default();
50
+ const defaultHost = await secretStore.getDefault();
51
+ if (process.env.AIGNE_HUB_API_KEY || defaultHost?.AIGNE_HUB_API_URL) return {
52
+ provider: require_constants.AIGNE_HUB_PROVIDER,
53
+ model: `${provider}/${name}`
54
+ };
55
+ if (!(await inquirerPrompt({
56
+ type: "list",
57
+ name: "useAigneHub",
58
+ message: `No API key is configured for ${provider}/${name}, How would you like to proceed?`,
59
+ choices: [{
60
+ name: `Connect to AIGNE Hub to use ${name} (recommended — includes free credits)`,
61
+ value: true
62
+ }, {
63
+ name: `Exit and use my own API key (set ${requireEnvs.join(" or ")})`,
64
+ value: false
65
+ }],
66
+ default: true
67
+ })).useAigneHub) {
68
+ console.log(chalk.default.yellow(`You can use command "export ${requireEnvs[0]}=xxx" to set API Key in your shell. Or you can set environment variables in .env file.`));
69
+ process.exit(0);
70
+ }
71
+ const envs = await secretStore.listHostsMap();
72
+ if (envs && Object.keys(envs).length > 0 && !defaultHost?.AIGNE_HUB_API_URL) {
73
+ const host = new URL(_aigne_aigne_hub.AIGNE_HUB_URL).host;
74
+ const defaultEnv = envs[host]?.AIGNE_HUB_API_URL ? envs[host] : Object.values(envs)[0] || { AIGNE_HUB_API_URL: "" };
75
+ await secretStore.setDefault(defaultEnv?.AIGNE_HUB_API_URL);
76
+ }
77
+ return {
78
+ provider: require_constants.AIGNE_HUB_PROVIDER,
79
+ model: `${provider}/${name}`
80
+ };
81
+ };
82
+ async function loadChatModel(options) {
83
+ const { provider, model } = await formatModelName((typeof options?.model === "string" ? options.model : void 0) || process.env.MODEL || "", options?.inquirerPromptFn ?? inquirer.default.prompt);
84
+ const { match, all } = (0, _aigne_aigne_hub.findModel)(provider);
85
+ if (!match) throw new Error(`Unsupported model provider ${provider}, available providers: ${all.map((m) => m.name).join(", ")}`);
86
+ const credential = provider.toLowerCase().includes(require_constants.AIGNE_HUB_PROVIDER) ? await require_credential.loadAIGNEHubCredential(options) : void 0;
87
+ return match.create({
88
+ ...credential,
89
+ baseURL: credential?.url,
90
+ model,
91
+ modelOptions: options && (0, _aigne_core_utils_type_utils.omit)(options, "model", "aigneHubUrl", "inquirerPromptFn")
92
+ });
93
+ }
94
+ async function loadImageModel(options) {
95
+ const { provider, model } = await formatModelName((typeof options?.model === "string" ? options.model : void 0) || process.env.IMAGE_MODEL || "", options?.inquirerPromptFn ?? inquirer.default.prompt);
96
+ const { match, all } = (0, _aigne_aigne_hub.findImageModel)(provider);
97
+ if (!match) throw new Error(`Unsupported image model provider ${provider}, available providers: ${all.map((m) => m.name).join(", ")}`);
98
+ const credential = provider.toLowerCase().includes(require_constants.AIGNE_HUB_PROVIDER) ? await require_credential.loadAIGNEHubCredential(options) : void 0;
99
+ return match.create({
100
+ ...credential,
101
+ baseURL: credential?.url,
102
+ model,
103
+ modelOptions: options && (0, _aigne_core_utils_type_utils.omit)(options, "model", "aigneHubUrl", "inquirerPromptFn")
104
+ });
105
+ }
106
+
107
+ //#endregion
108
+ exports.findConfiguredProvider = findConfiguredProvider;
109
+ exports.formatModelName = formatModelName;
110
+ exports.loadChatModel = loadChatModel;
111
+ exports.loadImageModel = loadImageModel;
112
+ exports.maskApiKey = maskApiKey;
@@ -0,0 +1,19 @@
1
+ import { LoadCredentialOptions } from "./type.cjs";
2
+ import { ChatModel, ChatModelInputOptionsWithGetter, ImageModel, ImageModelInputOptionsWithGetter } from "@aigne/core";
3
+ import * as _aigne_aigne_hub0 from "@aigne/aigne-hub";
4
+
5
+ //#region src/utils/aigne-hub/model.d.ts
6
+ declare function maskApiKey(apiKey?: string): string | undefined;
7
+ declare function findConfiguredProvider(provider?: string, name?: string): {
8
+ provider: _aigne_aigne_hub0.AIProviderType;
9
+ model: string;
10
+ } | undefined;
11
+ declare const formatModelName: (model: string, inquirerPrompt: NonNullable<LoadCredentialOptions["inquirerPromptFn"]>) => Promise<{
12
+ provider: string;
13
+ model?: string;
14
+ }>;
15
+ declare function loadChatModel(options?: ChatModelInputOptionsWithGetter & LoadCredentialOptions): Promise<ChatModel>;
16
+ declare function loadImageModel(options?: ImageModelInputOptionsWithGetter & LoadCredentialOptions): Promise<ImageModel>;
17
+ //#endregion
18
+ export { findConfiguredProvider, formatModelName, loadChatModel, loadImageModel, maskApiKey };
19
+ //# sourceMappingURL=model.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.cts","names":[],"sources":["../../../src/utils/aigne-hub/model.ts"],"mappings":";;;;;iBAuBgB,UAAA,CAAA,MAAA;AAAA,iBAOA,sBAAA,CAAA,QAAA,WAAA,IAAA;EAAA,QAAA,EAAsB,iBAAA,CAAA,cAAA;EAAA,KAAA;AAAA;AAAA,cAqBzB,eAAA,GAAA,KAAA,UAAA,cAAA,EAEK,WAAA,CAAY,qBAAA,0BAC3B,OAAA;EAAA,QAAA;EAAA,KAAA;AAAA;AAAA,iBAsEmB,aAAA,CAAA,OAAA,GACV,+BAAA,GAAkC,qBAAA,GAC3C,OAAA,CAAQ,SAAA;AAAA,iBA0BW,cAAA,CAAA,OAAA,GACV,gCAAA,GAAmC,qBAAA,GAC5C,OAAA,CAAQ,UAAA"}
@@ -0,0 +1,19 @@
1
+ import { LoadCredentialOptions } from "./type.mjs";
2
+ import { ChatModel, ChatModelInputOptionsWithGetter, ImageModel, ImageModelInputOptionsWithGetter } from "@aigne/core";
3
+ import * as _aigne_aigne_hub0 from "@aigne/aigne-hub";
4
+
5
+ //#region src/utils/aigne-hub/model.d.ts
6
+ declare function maskApiKey(apiKey?: string): string | undefined;
7
+ declare function findConfiguredProvider(provider?: string, name?: string): {
8
+ provider: _aigne_aigne_hub0.AIProviderType;
9
+ model: string;
10
+ } | undefined;
11
+ declare const formatModelName: (model: string, inquirerPrompt: NonNullable<LoadCredentialOptions["inquirerPromptFn"]>) => Promise<{
12
+ provider: string;
13
+ model?: string;
14
+ }>;
15
+ declare function loadChatModel(options?: ChatModelInputOptionsWithGetter & LoadCredentialOptions): Promise<ChatModel>;
16
+ declare function loadImageModel(options?: ImageModelInputOptionsWithGetter & LoadCredentialOptions): Promise<ImageModel>;
17
+ //#endregion
18
+ export { findConfiguredProvider, formatModelName, loadChatModel, loadImageModel, maskApiKey };
19
+ //# sourceMappingURL=model.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.mts","names":[],"sources":["../../../src/utils/aigne-hub/model.ts"],"mappings":";;;;;iBAuBgB,UAAA,CAAA,MAAA;AAAA,iBAOA,sBAAA,CAAA,QAAA,WAAA,IAAA;EAAA,QAAA,EAAsB,iBAAA,CAAA,cAAA;EAAA,KAAA;AAAA;AAAA,cAqBzB,eAAA,GAAA,KAAA,UAAA,cAAA,EAEK,WAAA,CAAY,qBAAA,0BAC3B,OAAA;EAAA,QAAA;EAAA,KAAA;AAAA;AAAA,iBAsEmB,aAAA,CAAA,OAAA,GACV,+BAAA,GAAkC,qBAAA,GAC3C,OAAA,CAAQ,SAAA;AAAA,iBA0BW,cAAA,CAAA,OAAA,GACV,gCAAA,GAAmC,qBAAA,GAC5C,OAAA,CAAQ,UAAA"}
@@ -0,0 +1,106 @@
1
+ import { AIGNE_HUB_PROVIDER } from "./constants.mjs";
2
+ import store_default from "./store/index.mjs";
3
+ import { loadAIGNEHubCredential } from "./credential.mjs";
4
+ import chalk from "chalk";
5
+ import { flat, omit } from "@aigne/core/utils/type-utils";
6
+ import { AIGNE_HUB_DEFAULT_MODEL, AIGNE_HUB_URL, findImageModel, findModel, getSupportedProviders, parseModel, resolveProviderModelId } from "@aigne/aigne-hub";
7
+ import inquirer from "inquirer";
8
+
9
+ //#region src/utils/aigne-hub/model.ts
10
+ function maskApiKey(apiKey) {
11
+ if (!apiKey || apiKey.length <= 8) return apiKey;
12
+ const start = apiKey.slice(0, 4);
13
+ const end = apiKey.slice(-4);
14
+ return `${start}${"*".repeat(8)}${end}`;
15
+ }
16
+ function findConfiguredProvider(provider, name) {
17
+ if (provider && provider.trim().toLowerCase() !== AIGNE_HUB_PROVIDER.trim().toLowerCase()) return;
18
+ if (!name) return void 0;
19
+ const supportedProviders = getSupportedProviders(name);
20
+ for (const supportedProvider of supportedProviders) {
21
+ const { match } = findModel(supportedProvider);
22
+ if (match) {
23
+ if (flat(match.apiKeyEnvName).some((name$1) => name$1 && process.env[name$1])) return {
24
+ provider: supportedProvider,
25
+ model: resolveProviderModelId(supportedProvider, name)
26
+ };
27
+ }
28
+ }
29
+ }
30
+ const formatModelName = async (model, inquirerPrompt) => {
31
+ let { provider, model: name } = parseModel(model);
32
+ const configuredEnvProvider = findConfiguredProvider(provider, name);
33
+ if (configuredEnvProvider) return configuredEnvProvider;
34
+ provider ||= AIGNE_HUB_PROVIDER;
35
+ const { match, all } = findModel(provider);
36
+ if (!match) throw new Error(`Unsupported model: ${provider}/${name}, available providers: ${all.map((m) => m.name).join(", ")}`);
37
+ if (provider.includes(AIGNE_HUB_PROVIDER)) return {
38
+ provider,
39
+ model: name || AIGNE_HUB_DEFAULT_MODEL
40
+ };
41
+ const requireEnvs = flat(match.apiKeyEnvName);
42
+ if (requireEnvs.some((name$1) => name$1 && process.env[name$1])) return {
43
+ provider,
44
+ model: name
45
+ };
46
+ const secretStore = await store_default();
47
+ const defaultHost = await secretStore.getDefault();
48
+ if (process.env.AIGNE_HUB_API_KEY || defaultHost?.AIGNE_HUB_API_URL) return {
49
+ provider: AIGNE_HUB_PROVIDER,
50
+ model: `${provider}/${name}`
51
+ };
52
+ if (!(await inquirerPrompt({
53
+ type: "list",
54
+ name: "useAigneHub",
55
+ message: `No API key is configured for ${provider}/${name}, How would you like to proceed?`,
56
+ choices: [{
57
+ name: `Connect to AIGNE Hub to use ${name} (recommended — includes free credits)`,
58
+ value: true
59
+ }, {
60
+ name: `Exit and use my own API key (set ${requireEnvs.join(" or ")})`,
61
+ value: false
62
+ }],
63
+ default: true
64
+ })).useAigneHub) {
65
+ console.log(chalk.yellow(`You can use command "export ${requireEnvs[0]}=xxx" to set API Key in your shell. Or you can set environment variables in .env file.`));
66
+ process.exit(0);
67
+ }
68
+ const envs = await secretStore.listHostsMap();
69
+ if (envs && Object.keys(envs).length > 0 && !defaultHost?.AIGNE_HUB_API_URL) {
70
+ const host = new URL(AIGNE_HUB_URL).host;
71
+ const defaultEnv = envs[host]?.AIGNE_HUB_API_URL ? envs[host] : Object.values(envs)[0] || { AIGNE_HUB_API_URL: "" };
72
+ await secretStore.setDefault(defaultEnv?.AIGNE_HUB_API_URL);
73
+ }
74
+ return {
75
+ provider: AIGNE_HUB_PROVIDER,
76
+ model: `${provider}/${name}`
77
+ };
78
+ };
79
+ async function loadChatModel(options) {
80
+ const { provider, model } = await formatModelName((typeof options?.model === "string" ? options.model : void 0) || process.env.MODEL || "", options?.inquirerPromptFn ?? inquirer.prompt);
81
+ const { match, all } = findModel(provider);
82
+ if (!match) throw new Error(`Unsupported model provider ${provider}, available providers: ${all.map((m) => m.name).join(", ")}`);
83
+ const credential = provider.toLowerCase().includes(AIGNE_HUB_PROVIDER) ? await loadAIGNEHubCredential(options) : void 0;
84
+ return match.create({
85
+ ...credential,
86
+ baseURL: credential?.url,
87
+ model,
88
+ modelOptions: options && omit(options, "model", "aigneHubUrl", "inquirerPromptFn")
89
+ });
90
+ }
91
+ async function loadImageModel(options) {
92
+ const { provider, model } = await formatModelName((typeof options?.model === "string" ? options.model : void 0) || process.env.IMAGE_MODEL || "", options?.inquirerPromptFn ?? inquirer.prompt);
93
+ const { match, all } = findImageModel(provider);
94
+ if (!match) throw new Error(`Unsupported image model provider ${provider}, available providers: ${all.map((m) => m.name).join(", ")}`);
95
+ const credential = provider.toLowerCase().includes(AIGNE_HUB_PROVIDER) ? await loadAIGNEHubCredential(options) : void 0;
96
+ return match.create({
97
+ ...credential,
98
+ baseURL: credential?.url,
99
+ model,
100
+ modelOptions: options && omit(options, "model", "aigneHubUrl", "inquirerPromptFn")
101
+ });
102
+ }
103
+
104
+ //#endregion
105
+ export { findConfiguredProvider, formatModelName, loadChatModel, loadImageModel, maskApiKey };
106
+ //# sourceMappingURL=model.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.mjs","names":["name","getSecretStore"],"sources":["../../../src/utils/aigne-hub/model.ts"],"sourcesContent":["import {\n AIGNE_HUB_DEFAULT_MODEL,\n AIGNE_HUB_URL,\n findImageModel,\n findModel,\n getSupportedProviders,\n parseModel,\n resolveProviderModelId,\n} from \"@aigne/aigne-hub\";\nimport type {\n ChatModel,\n ChatModelInputOptionsWithGetter,\n ImageModel,\n ImageModelInputOptionsWithGetter,\n} from \"@aigne/core\";\nimport { flat, omit } from \"@aigne/core/utils/type-utils\";\nimport chalk from \"chalk\";\nimport inquirer from \"inquirer\";\nimport { AIGNE_HUB_PROVIDER } from \"./constants.js\";\nimport { loadAIGNEHubCredential } from \"./credential.js\";\nimport getSecretStore from \"./store/index.js\";\nimport type { LoadCredentialOptions } from \"./type.js\";\n\nexport function maskApiKey(apiKey?: string) {\n if (!apiKey || apiKey.length <= 8) return apiKey;\n const start = apiKey.slice(0, 4);\n const end = apiKey.slice(-4);\n return `${start}${\"*\".repeat(8)}${end}`;\n}\n\nexport function findConfiguredProvider(provider?: string, name?: string) {\n if (provider && provider.trim().toLowerCase() !== AIGNE_HUB_PROVIDER.trim().toLowerCase()) {\n return undefined;\n }\n if (!name) return undefined;\n\n const supportedProviders = getSupportedProviders(name);\n for (const supportedProvider of supportedProviders) {\n const { match } = findModel(supportedProvider);\n if (match) {\n const requireEnvs = flat(match.apiKeyEnvName);\n if (requireEnvs.some((name) => name && process.env[name])) {\n return {\n provider: supportedProvider,\n model: resolveProviderModelId(supportedProvider, name),\n };\n }\n }\n }\n}\n\nexport const formatModelName = async (\n model: string,\n inquirerPrompt: NonNullable<LoadCredentialOptions[\"inquirerPromptFn\"]>,\n): Promise<{ provider: string; model?: string }> => {\n let { provider, model: name } = parseModel(model);\n\n const configuredEnvProvider = findConfiguredProvider(provider, name);\n if (configuredEnvProvider) return configuredEnvProvider;\n\n provider ||= AIGNE_HUB_PROVIDER;\n const { match, all } = findModel(provider);\n if (!match) {\n throw new Error(\n `Unsupported model: ${provider}/${name}, available providers: ${all.map((m) => m.name).join(\", \")}`,\n );\n }\n\n if (provider.includes(AIGNE_HUB_PROVIDER)) {\n return { provider, model: name || AIGNE_HUB_DEFAULT_MODEL };\n }\n\n const requireEnvs = flat(match.apiKeyEnvName);\n if (requireEnvs.some((name) => name && process.env[name])) {\n return { provider, model: name };\n }\n\n const secretStore = await getSecretStore();\n const defaultHost = await secretStore.getDefault();\n\n if (process.env.AIGNE_HUB_API_KEY || defaultHost?.AIGNE_HUB_API_URL) {\n return { provider: AIGNE_HUB_PROVIDER, model: `${provider}/${name}` };\n }\n\n const result = await inquirerPrompt({\n type: \"list\",\n name: \"useAigneHub\",\n message: `No API key is configured for ${provider}/${name}, How would you like to proceed?`,\n choices: [\n {\n name: `Connect to AIGNE Hub to use ${name} (recommended — includes free credits)`,\n value: true,\n },\n {\n name: `Exit and use my own API key (set ${requireEnvs.join(\" or \")})`,\n value: false,\n },\n ],\n default: true,\n });\n\n if (!result.useAigneHub) {\n console.log(\n chalk.yellow(\n `You can use command \"export ${requireEnvs[0]}=xxx\" to set API Key in your shell. Or you can set environment variables in .env file.`,\n ),\n );\n process.exit(0);\n }\n\n const envs = await secretStore.listHostsMap();\n if (envs && Object.keys(envs).length > 0 && !defaultHost?.AIGNE_HUB_API_URL) {\n const host = new URL(AIGNE_HUB_URL).host;\n\n const defaultEnv = envs[host]?.AIGNE_HUB_API_URL\n ? envs[host]\n : Object.values(envs)[0] || { AIGNE_HUB_API_URL: \"\" };\n\n await secretStore.setDefault(defaultEnv?.AIGNE_HUB_API_URL);\n }\n\n return { provider: AIGNE_HUB_PROVIDER, model: `${provider}/${name}` };\n};\n\nexport async function loadChatModel(\n options?: ChatModelInputOptionsWithGetter & LoadCredentialOptions,\n): Promise<ChatModel> {\n const { provider, model } = await formatModelName(\n (typeof options?.model === \"string\" ? options.model : undefined) || process.env.MODEL || \"\",\n options?.inquirerPromptFn ??\n (inquirer.prompt as NonNullable<LoadCredentialOptions[\"inquirerPromptFn\"]>),\n );\n\n const { match, all } = findModel(provider);\n if (!match) {\n throw new Error(\n `Unsupported model provider ${provider}, available providers: ${all.map((m) => m.name).join(\", \")}`,\n );\n }\n\n const credential = provider.toLowerCase().includes(AIGNE_HUB_PROVIDER)\n ? await loadAIGNEHubCredential(options)\n : undefined;\n\n return match.create({\n ...credential,\n baseURL: credential?.url,\n model,\n modelOptions: options && omit(options, \"model\", \"aigneHubUrl\", \"inquirerPromptFn\"),\n });\n}\n\nexport async function loadImageModel(\n options?: ImageModelInputOptionsWithGetter & LoadCredentialOptions,\n): Promise<ImageModel> {\n const { provider, model } = await formatModelName(\n (typeof options?.model === \"string\" ? options.model : undefined) ||\n process.env.IMAGE_MODEL ||\n \"\",\n options?.inquirerPromptFn ??\n (inquirer.prompt as NonNullable<LoadCredentialOptions[\"inquirerPromptFn\"]>),\n );\n\n const { match, all } = findImageModel(provider);\n if (!match) {\n throw new Error(\n `Unsupported image model provider ${provider}, available providers: ${all.map((m) => m.name).join(\", \")}`,\n );\n }\n\n const credential = provider.toLowerCase().includes(AIGNE_HUB_PROVIDER)\n ? await loadAIGNEHubCredential(options)\n : undefined;\n\n return match.create({\n ...credential,\n baseURL: credential?.url,\n model,\n modelOptions: options && omit(options, \"model\", \"aigneHubUrl\", \"inquirerPromptFn\"),\n });\n}\n"],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ const require_rolldown_runtime = require('../../../_virtual/rolldown_runtime.cjs');
2
+ let _aigne_secrets = require("@aigne/secrets");
3
+
4
+ //#region src/utils/aigne-hub/store/file.ts
5
+ var FileStore = class extends _aigne_secrets.FileStore {
6
+ outputConfig;
7
+ constructor(options) {
8
+ super(options);
9
+ this.outputConfig = {
10
+ url: "AIGNE_HUB_API_URL",
11
+ key: "AIGNE_HUB_API_KEY"
12
+ };
13
+ }
14
+ async setKey(url, apiKey) {
15
+ return this.setItem(this.normalizeHostFrom(url), {
16
+ [this.outputConfig.url]: url,
17
+ [this.outputConfig.key]: apiKey
18
+ });
19
+ }
20
+ async getKey(url) {
21
+ const host = this.normalizeHostFrom(url);
22
+ return this.getItem(host);
23
+ }
24
+ async deleteKey(url) {
25
+ const host = this.normalizeHostFrom(url);
26
+ return this.deleteItem(host);
27
+ }
28
+ async listHosts() {
29
+ return this.listEntries();
30
+ }
31
+ async listHostsMap() {
32
+ return this.listMap();
33
+ }
34
+ async setDefault(url) {
35
+ return this.setDefaultItem({ [this.outputConfig.url]: url });
36
+ }
37
+ async getDefault(options = {}) {
38
+ const { fallbackToFirst = false, presetIfFallback = false } = options;
39
+ if (!await this.available()) return null;
40
+ try {
41
+ const apiUrl = (await this.getDefaultItem())?.[this.outputConfig.url];
42
+ if (apiUrl) {
43
+ const defaultInfo = await this.getKey(apiUrl);
44
+ if (defaultInfo) return defaultInfo;
45
+ }
46
+ } catch {}
47
+ if (!fallbackToFirst) return null;
48
+ const hosts = await this.listHosts();
49
+ if (hosts.length === 0) return null;
50
+ const firstHost = hosts[0];
51
+ if (!firstHost) return null;
52
+ if (presetIfFallback && firstHost[this.outputConfig.url]) try {
53
+ await this.setDefault(firstHost[this.outputConfig.url]);
54
+ } catch {}
55
+ return firstHost;
56
+ }
57
+ async deleteDefault() {
58
+ return this.deleteDefaultItem();
59
+ }
60
+ };
61
+ var file_default = FileStore;
62
+
63
+ //#endregion
64
+ exports.default = file_default;