@aigne/afs-cli 1.11.0-beta.1 → 1.11.0-beta.11

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 (348) hide show
  1. package/README.md +262 -15
  2. package/dist/_virtual/rolldown_runtime.cjs +29 -0
  3. package/dist/_virtual/rolldown_runtime.mjs +7 -0
  4. package/dist/cli.cjs +40 -0
  5. package/dist/cli.d.cts +2 -0
  6. package/dist/cli.d.mts +2 -1
  7. package/dist/cli.mjs +36 -24
  8. package/dist/cli.mjs.map +1 -0
  9. package/dist/config/afs-loader.cjs +578 -0
  10. package/dist/config/afs-loader.d.cts +19 -0
  11. package/dist/config/afs-loader.d.cts.map +1 -0
  12. package/dist/config/afs-loader.d.mts +19 -0
  13. package/dist/config/afs-loader.d.mts.map +1 -0
  14. package/dist/config/afs-loader.mjs +576 -0
  15. package/dist/config/afs-loader.mjs.map +1 -0
  16. package/dist/config/env.cjs +46 -0
  17. package/dist/config/env.mjs +46 -0
  18. package/dist/config/env.mjs.map +1 -0
  19. package/dist/config/loader.cjs +219 -0
  20. package/dist/config/loader.mjs +217 -0
  21. package/dist/config/loader.mjs.map +1 -0
  22. package/dist/config/mount-commands.cjs +226 -0
  23. package/dist/config/mount-commands.d.cts +14 -0
  24. package/dist/config/mount-commands.d.cts.map +1 -0
  25. package/dist/config/mount-commands.d.mts +14 -0
  26. package/dist/config/mount-commands.d.mts.map +1 -0
  27. package/dist/config/mount-commands.mjs +220 -0
  28. package/dist/config/mount-commands.mjs.map +1 -0
  29. package/dist/config/schema.cjs +99 -0
  30. package/dist/config/schema.mjs +98 -0
  31. package/dist/config/schema.mjs.map +1 -0
  32. package/dist/core/commands/delete.cjs +41 -0
  33. package/dist/core/commands/delete.d.cts +18 -0
  34. package/dist/core/commands/delete.d.cts.map +1 -0
  35. package/dist/core/commands/delete.d.mts +18 -0
  36. package/dist/core/commands/delete.d.mts.map +1 -0
  37. package/dist/core/commands/delete.mjs +42 -0
  38. package/dist/core/commands/delete.mjs.map +1 -0
  39. package/dist/core/commands/exec.cjs +98 -0
  40. package/dist/core/commands/exec.d.cts +26 -0
  41. package/dist/core/commands/exec.d.cts.map +1 -0
  42. package/dist/core/commands/exec.d.mts +26 -0
  43. package/dist/core/commands/exec.d.mts.map +1 -0
  44. package/dist/core/commands/exec.mjs +99 -0
  45. package/dist/core/commands/exec.mjs.map +1 -0
  46. package/dist/core/commands/explain.cjs +278 -0
  47. package/dist/core/commands/explain.d.cts +25 -0
  48. package/dist/core/commands/explain.d.cts.map +1 -0
  49. package/dist/core/commands/explain.d.mts +25 -0
  50. package/dist/core/commands/explain.d.mts.map +1 -0
  51. package/dist/core/commands/explain.mjs +279 -0
  52. package/dist/core/commands/explain.mjs.map +1 -0
  53. package/dist/core/commands/explore.cjs +30 -0
  54. package/dist/core/commands/explore.d.mts +2 -0
  55. package/dist/core/commands/explore.mjs +31 -0
  56. package/dist/core/commands/explore.mjs.map +1 -0
  57. package/dist/core/commands/index.cjs +36 -0
  58. package/dist/core/commands/index.d.cts +21 -0
  59. package/dist/core/commands/index.d.cts.map +1 -0
  60. package/dist/core/commands/index.d.mts +24 -0
  61. package/dist/core/commands/index.d.mts.map +1 -0
  62. package/dist/core/commands/index.mjs +37 -0
  63. package/dist/core/commands/index.mjs.map +1 -0
  64. package/dist/core/commands/ls.cjs +57 -0
  65. package/dist/core/commands/ls.d.cts +21 -0
  66. package/dist/core/commands/ls.d.cts.map +1 -0
  67. package/dist/core/commands/ls.d.mts +21 -0
  68. package/dist/core/commands/ls.d.mts.map +1 -0
  69. package/dist/core/commands/ls.mjs +58 -0
  70. package/dist/core/commands/ls.mjs.map +1 -0
  71. package/dist/core/commands/mount.cjs +222 -0
  72. package/dist/core/commands/mount.d.cts +35 -0
  73. package/dist/core/commands/mount.d.cts.map +1 -0
  74. package/dist/core/commands/mount.d.mts +35 -0
  75. package/dist/core/commands/mount.d.mts.map +1 -0
  76. package/dist/core/commands/mount.mjs +223 -0
  77. package/dist/core/commands/mount.mjs.map +1 -0
  78. package/dist/core/commands/read.cjs +48 -0
  79. package/dist/core/commands/read.d.cts +17 -0
  80. package/dist/core/commands/read.d.cts.map +1 -0
  81. package/dist/core/commands/read.d.mts +17 -0
  82. package/dist/core/commands/read.d.mts.map +1 -0
  83. package/dist/core/commands/read.mjs +49 -0
  84. package/dist/core/commands/read.mjs.map +1 -0
  85. package/dist/core/commands/search.cjs +40 -0
  86. package/dist/core/commands/search.d.mts +2 -0
  87. package/dist/core/commands/search.mjs +41 -0
  88. package/dist/core/commands/search.mjs.map +1 -0
  89. package/dist/core/commands/serve.cjs +267 -0
  90. package/dist/core/commands/serve.d.mts +2 -0
  91. package/dist/core/commands/serve.mjs +267 -0
  92. package/dist/core/commands/serve.mjs.map +1 -0
  93. package/dist/core/commands/stat.cjs +53 -0
  94. package/dist/core/commands/stat.d.cts +17 -0
  95. package/dist/core/commands/stat.d.cts.map +1 -0
  96. package/dist/core/commands/stat.d.mts +17 -0
  97. package/dist/core/commands/stat.d.mts.map +1 -0
  98. package/dist/core/commands/stat.mjs +54 -0
  99. package/dist/core/commands/stat.mjs.map +1 -0
  100. package/dist/core/commands/types.cjs +18 -0
  101. package/dist/core/commands/types.d.cts +54 -0
  102. package/dist/core/commands/types.d.cts.map +1 -0
  103. package/dist/core/commands/types.d.mts +54 -0
  104. package/dist/core/commands/types.d.mts.map +1 -0
  105. package/dist/core/commands/types.mjs +19 -0
  106. package/dist/core/commands/types.mjs.map +1 -0
  107. package/dist/core/commands/write.cjs +70 -0
  108. package/dist/core/commands/write.d.cts +20 -0
  109. package/dist/core/commands/write.d.cts.map +1 -0
  110. package/dist/core/commands/write.d.mts +20 -0
  111. package/dist/core/commands/write.d.mts.map +1 -0
  112. package/dist/core/commands/write.mjs +71 -0
  113. package/dist/core/commands/write.mjs.map +1 -0
  114. package/dist/core/executor/index.cjs +196 -0
  115. package/dist/core/executor/index.d.cts +77 -0
  116. package/dist/core/executor/index.d.cts.map +1 -0
  117. package/dist/core/executor/index.d.mts +77 -0
  118. package/dist/core/executor/index.d.mts.map +1 -0
  119. package/dist/core/executor/index.mjs +195 -0
  120. package/dist/core/executor/index.mjs.map +1 -0
  121. package/dist/core/formatters/delete.cjs +37 -0
  122. package/dist/core/formatters/delete.d.cts +18 -0
  123. package/dist/core/formatters/delete.d.cts.map +1 -0
  124. package/dist/core/formatters/delete.d.mts +18 -0
  125. package/dist/core/formatters/delete.d.mts.map +1 -0
  126. package/dist/core/formatters/delete.mjs +37 -0
  127. package/dist/core/formatters/delete.mjs.map +1 -0
  128. package/dist/core/formatters/exec.cjs +60 -0
  129. package/dist/core/formatters/exec.d.cts +18 -0
  130. package/dist/core/formatters/exec.d.cts.map +1 -0
  131. package/dist/core/formatters/exec.d.mts +18 -0
  132. package/dist/core/formatters/exec.d.mts.map +1 -0
  133. package/dist/core/formatters/exec.mjs +60 -0
  134. package/dist/core/formatters/exec.mjs.map +1 -0
  135. package/dist/core/formatters/explain.cjs +99 -0
  136. package/dist/core/formatters/explain.d.cts +11 -0
  137. package/dist/core/formatters/explain.d.cts.map +1 -0
  138. package/dist/core/formatters/explain.d.mts +11 -0
  139. package/dist/core/formatters/explain.d.mts.map +1 -0
  140. package/dist/core/formatters/explain.mjs +98 -0
  141. package/dist/core/formatters/explain.mjs.map +1 -0
  142. package/dist/core/formatters/index.d.mts +9 -0
  143. package/dist/core/formatters/ls.cjs +179 -0
  144. package/dist/core/formatters/ls.d.cts +20 -0
  145. package/dist/core/formatters/ls.d.cts.map +1 -0
  146. package/dist/core/formatters/ls.d.mts +20 -0
  147. package/dist/core/formatters/ls.d.mts.map +1 -0
  148. package/dist/core/formatters/ls.mjs +179 -0
  149. package/dist/core/formatters/ls.mjs.map +1 -0
  150. package/dist/core/formatters/mount.cjs +55 -0
  151. package/dist/core/formatters/mount.d.cts +15 -0
  152. package/dist/core/formatters/mount.d.cts.map +1 -0
  153. package/dist/core/formatters/mount.d.mts +15 -0
  154. package/dist/core/formatters/mount.d.mts.map +1 -0
  155. package/dist/core/formatters/mount.mjs +55 -0
  156. package/dist/core/formatters/mount.mjs.map +1 -0
  157. package/dist/core/formatters/read.cjs +100 -0
  158. package/dist/core/formatters/read.d.cts +22 -0
  159. package/dist/core/formatters/read.d.cts.map +1 -0
  160. package/dist/core/formatters/read.d.mts +22 -0
  161. package/dist/core/formatters/read.d.mts.map +1 -0
  162. package/dist/core/formatters/read.mjs +100 -0
  163. package/dist/core/formatters/read.mjs.map +1 -0
  164. package/dist/core/formatters/search.cjs +44 -0
  165. package/dist/core/formatters/search.d.mts +1 -0
  166. package/dist/core/formatters/search.mjs +44 -0
  167. package/dist/core/formatters/search.mjs.map +1 -0
  168. package/dist/core/formatters/stat.cjs +155 -0
  169. package/dist/core/formatters/stat.d.cts +15 -0
  170. package/dist/core/formatters/stat.d.cts.map +1 -0
  171. package/dist/core/formatters/stat.d.mts +15 -0
  172. package/dist/core/formatters/stat.d.mts.map +1 -0
  173. package/dist/core/formatters/stat.mjs +155 -0
  174. package/dist/core/formatters/stat.mjs.map +1 -0
  175. package/dist/core/formatters/write.cjs +51 -0
  176. package/dist/core/formatters/write.d.cts +22 -0
  177. package/dist/core/formatters/write.d.cts.map +1 -0
  178. package/dist/core/formatters/write.d.mts +22 -0
  179. package/dist/core/formatters/write.d.mts.map +1 -0
  180. package/dist/core/formatters/write.mjs +51 -0
  181. package/dist/core/formatters/write.mjs.map +1 -0
  182. package/dist/core/helpers/exec-args.cjs +142 -0
  183. package/dist/core/helpers/exec-args.d.cts +46 -0
  184. package/dist/core/helpers/exec-args.d.cts.map +1 -0
  185. package/dist/core/helpers/exec-args.d.mts +46 -0
  186. package/dist/core/helpers/exec-args.d.mts.map +1 -0
  187. package/dist/core/helpers/exec-args.mjs +139 -0
  188. package/dist/core/helpers/exec-args.mjs.map +1 -0
  189. package/dist/core/helpers/stdin.cjs +41 -0
  190. package/dist/core/helpers/stdin.d.cts +15 -0
  191. package/dist/core/helpers/stdin.d.cts.map +1 -0
  192. package/dist/core/helpers/stdin.d.mts +15 -0
  193. package/dist/core/helpers/stdin.d.mts.map +1 -0
  194. package/dist/core/helpers/stdin.mjs +41 -0
  195. package/dist/core/helpers/stdin.mjs.map +1 -0
  196. package/dist/core/index.cjs +49 -0
  197. package/dist/core/index.d.cts +24 -0
  198. package/dist/core/index.d.mts +25 -0
  199. package/dist/core/index.mjs +24 -0
  200. package/dist/core/path-utils.cjs +1 -0
  201. package/dist/core/path-utils.mjs +3 -0
  202. package/dist/core/types.d.cts +24 -0
  203. package/dist/core/types.d.cts.map +1 -0
  204. package/dist/core/types.d.mts +24 -0
  205. package/dist/core/types.d.mts.map +1 -0
  206. package/dist/credential/auth-server.cjs +247 -0
  207. package/dist/credential/auth-server.mjs +247 -0
  208. package/dist/credential/auth-server.mjs.map +1 -0
  209. package/dist/credential/cli-auth-context.cjs +86 -0
  210. package/dist/credential/cli-auth-context.d.mts +1 -0
  211. package/dist/credential/cli-auth-context.mjs +86 -0
  212. package/dist/credential/cli-auth-context.mjs.map +1 -0
  213. package/dist/credential/index.cjs +5 -0
  214. package/dist/credential/index.d.mts +4 -0
  215. package/dist/credential/index.mjs +7 -0
  216. package/dist/credential/mcp-auth-context.cjs +192 -0
  217. package/dist/credential/mcp-auth-context.d.mts +1 -0
  218. package/dist/credential/mcp-auth-context.mjs +192 -0
  219. package/dist/credential/mcp-auth-context.mjs.map +1 -0
  220. package/dist/credential/resolver.cjs +127 -0
  221. package/dist/credential/resolver.d.mts +1 -0
  222. package/dist/credential/resolver.mjs +127 -0
  223. package/dist/credential/resolver.mjs.map +1 -0
  224. package/dist/credential/store.cjs +106 -0
  225. package/dist/credential/store.d.cts +30 -0
  226. package/dist/credential/store.d.cts.map +1 -0
  227. package/dist/credential/store.d.mts +30 -0
  228. package/dist/credential/store.d.mts.map +1 -0
  229. package/dist/credential/store.mjs +106 -0
  230. package/dist/credential/store.mjs.map +1 -0
  231. package/dist/errors.cjs +18 -0
  232. package/dist/errors.mjs +18 -0
  233. package/dist/errors.mjs.map +1 -0
  234. package/dist/explorer/actions.cjs +311 -0
  235. package/dist/explorer/actions.mjs +305 -0
  236. package/dist/explorer/actions.mjs.map +1 -0
  237. package/dist/explorer/components/dialog.cjs +508 -0
  238. package/dist/explorer/components/dialog.mjs +509 -0
  239. package/dist/explorer/components/dialog.mjs.map +1 -0
  240. package/dist/explorer/components/file-list.cjs +107 -0
  241. package/dist/explorer/components/file-list.mjs +107 -0
  242. package/dist/explorer/components/file-list.mjs.map +1 -0
  243. package/dist/explorer/components/function-bar.cjs +55 -0
  244. package/dist/explorer/components/function-bar.mjs +55 -0
  245. package/dist/explorer/components/function-bar.mjs.map +1 -0
  246. package/dist/explorer/components/index.cjs +5 -0
  247. package/dist/explorer/components/index.mjs +7 -0
  248. package/dist/explorer/components/metadata-panel.cjs +219 -0
  249. package/dist/explorer/components/metadata-panel.mjs +219 -0
  250. package/dist/explorer/components/metadata-panel.mjs.map +1 -0
  251. package/dist/explorer/components/status-bar.cjs +53 -0
  252. package/dist/explorer/components/status-bar.mjs +54 -0
  253. package/dist/explorer/components/status-bar.mjs.map +1 -0
  254. package/dist/explorer/keybindings.cjs +214 -0
  255. package/dist/explorer/keybindings.mjs +213 -0
  256. package/dist/explorer/keybindings.mjs.map +1 -0
  257. package/dist/explorer/screen.cjs +251 -0
  258. package/dist/explorer/screen.d.cts +23 -0
  259. package/dist/explorer/screen.d.cts.map +1 -0
  260. package/dist/explorer/screen.d.mts +23 -0
  261. package/dist/explorer/screen.d.mts.map +1 -0
  262. package/dist/explorer/screen.mjs +250 -0
  263. package/dist/explorer/screen.mjs.map +1 -0
  264. package/dist/explorer/state.cjs +53 -0
  265. package/dist/explorer/state.mjs +53 -0
  266. package/dist/explorer/state.mjs.map +1 -0
  267. package/dist/explorer/theme.cjs +160 -0
  268. package/dist/explorer/theme.mjs +157 -0
  269. package/dist/explorer/theme.mjs.map +1 -0
  270. package/dist/index.cjs +12 -0
  271. package/dist/index.d.cts +6 -0
  272. package/dist/index.d.mts +7 -4
  273. package/dist/index.mjs +7 -2
  274. package/dist/mcp/http-transport.cjs +87 -0
  275. package/dist/mcp/http-transport.mjs +87 -0
  276. package/dist/mcp/http-transport.mjs.map +1 -0
  277. package/dist/mcp/prompts.cjs +48 -0
  278. package/dist/mcp/prompts.mjs +48 -0
  279. package/dist/mcp/prompts.mjs.map +1 -0
  280. package/dist/mcp/resources.cjs +25 -0
  281. package/dist/mcp/resources.mjs +25 -0
  282. package/dist/mcp/resources.mjs.map +1 -0
  283. package/dist/mcp/server.cjs +74 -0
  284. package/dist/mcp/server.mjs +73 -0
  285. package/dist/mcp/server.mjs.map +1 -0
  286. package/dist/mcp/tools.cjs +152 -0
  287. package/dist/mcp/tools.mjs +152 -0
  288. package/dist/mcp/tools.mjs.map +1 -0
  289. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/index.d.cts +10 -0
  290. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/index.d.cts.map +1 -0
  291. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/index.d.mts +10 -0
  292. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/index.d.mts.map +1 -0
  293. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/types.d.cts +46 -0
  294. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/types.d.cts.map +1 -0
  295. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/types.d.mts +46 -0
  296. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/types.d.mts.map +1 -0
  297. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/urlpattern.cjs +902 -0
  298. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/urlpattern.mjs +902 -0
  299. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/urlpattern.mjs.map +1 -0
  300. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/index.cjs +6 -0
  301. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/index.mjs +8 -0
  302. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/index.mjs.map +1 -0
  303. package/dist/path-utils.cjs +105 -0
  304. package/dist/path-utils.d.cts +50 -0
  305. package/dist/path-utils.d.cts.map +1 -0
  306. package/dist/path-utils.d.mts +50 -0
  307. package/dist/path-utils.d.mts.map +1 -0
  308. package/dist/path-utils.mjs +104 -0
  309. package/dist/path-utils.mjs.map +1 -0
  310. package/dist/repl.cjs +491 -0
  311. package/dist/repl.d.cts +15 -0
  312. package/dist/repl.d.cts.map +1 -0
  313. package/dist/repl.d.mts +16 -0
  314. package/dist/repl.d.mts.map +1 -0
  315. package/dist/repl.mjs +491 -0
  316. package/dist/repl.mjs.map +1 -0
  317. package/dist/serve.cjs +146 -0
  318. package/dist/serve.d.cts +41 -0
  319. package/dist/serve.d.cts.map +1 -0
  320. package/dist/serve.d.mts +41 -0
  321. package/dist/serve.d.mts.map +1 -0
  322. package/dist/serve.mjs +146 -0
  323. package/dist/serve.mjs.map +1 -0
  324. package/dist/ui/header.cjs +12 -0
  325. package/dist/ui/header.mjs +13 -0
  326. package/dist/ui/header.mjs.map +1 -0
  327. package/dist/ui/index.cjs +8 -0
  328. package/dist/ui/index.mjs +9 -0
  329. package/dist/ui/index.mjs.map +1 -0
  330. package/dist/ui/terminal.cjs +88 -0
  331. package/dist/ui/terminal.mjs +88 -0
  332. package/dist/ui/terminal.mjs.map +1 -0
  333. package/dist/version.cjs +9 -0
  334. package/dist/version.d.cts +5 -0
  335. package/dist/version.d.cts.map +1 -0
  336. package/dist/version.d.mts +5 -0
  337. package/dist/version.d.mts.map +1 -0
  338. package/dist/version.mjs +9 -0
  339. package/dist/version.mjs.map +1 -0
  340. package/package.json +77 -11
  341. package/.turbo/turbo-build.log +0 -18
  342. package/.turbo/turbo-check-types.log +0 -4
  343. package/dist/version--p6A8sKX.mjs +0 -5
  344. package/src/cli.test.ts +0 -8
  345. package/src/cli.ts +0 -29
  346. package/src/index.ts +0 -7
  347. package/src/version.ts +0 -1
  348. package/tsconfig.json +0 -16
@@ -0,0 +1,578 @@
1
+ const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
+ const require_loader = require('./loader.cjs');
3
+ const require_mount_commands = require('./mount-commands.cjs');
4
+ let _aigne_afs = require("@aigne/afs");
5
+ let _aigne_afs_utils_uri = require("@aigne/afs/utils/uri");
6
+
7
+ //#region src/config/afs-loader.ts
8
+ /**
9
+ * Register the workspace:// scheme on a ProviderRegistry.
10
+ *
11
+ * Extracted so that both createAFS() and verifyMount() can support
12
+ * workspace URIs. createAFS() overrides this with a richer variant
13
+ * that includes credential resolution.
14
+ */
15
+ function registerWorkspaceFactory(registry) {
16
+ registry.register("workspace", async (mount, parsed) => {
17
+ const mod = await import("@aigne/afs-workspace");
18
+ const AFSWorkspace = mod.AFSWorkspace ?? mod.default;
19
+ if (!AFSWorkspace) throw new Error("workspace:// scheme requires @aigne/afs-workspace package. Install it with: pnpm add @aigne/afs-workspace");
20
+ return new AFSWorkspace({
21
+ workspacePath: parsed.body,
22
+ registry,
23
+ name: mount.path.slice(1).replace(/\//g, "-") || "workspace",
24
+ description: mount.description,
25
+ accessMode: mount.access_mode,
26
+ ...mount.options
27
+ });
28
+ });
29
+ }
30
+ let cached;
31
+ /**
32
+ * Load AFS with caching - first call creates, subsequent calls return cached instance
33
+ */
34
+ async function loadAFS(cwd, options) {
35
+ if (cached) return {
36
+ afs: cached,
37
+ failures: []
38
+ };
39
+ const result = await createAFS(cwd, options);
40
+ cached = result.afs;
41
+ return result;
42
+ }
43
+ /**
44
+ * Create AFS instance from config with parallel tolerant mount
45
+ *
46
+ * - All providers are created and mounted in parallel via Promise.allSettled
47
+ * - Individual failures are logged to stderr and skipped (unless onProgress is provided)
48
+ * - If ALL providers fail, throws an error
49
+ * - If no mounts configured, returns empty AFS (no error)
50
+ */
51
+ async function createAFS(cwd, options) {
52
+ const { config, mountSources } = await new require_loader.ConfigLoader().loadWithSources(cwd);
53
+ const afs = new _aigne_afs.AFS();
54
+ const authContext = options?.authContext;
55
+ const credentialStore = options?.credentialStore;
56
+ const registry = new _aigne_afs.ProviderRegistry();
57
+ registry.register("workspace", async (mount, parsed) => {
58
+ const mod = await import("@aigne/afs-workspace");
59
+ const AFSWorkspace = mod.AFSWorkspace ?? mod.default;
60
+ if (!AFSWorkspace) throw new Error("workspace:// scheme requires @aigne/afs-workspace package. Install it with: pnpm add @aigne/afs-workspace");
61
+ const { resolve } = await import("node:path");
62
+ resolve(parsed.body);
63
+ return new AFSWorkspace({
64
+ workspacePath: parsed.body,
65
+ registry,
66
+ createProvider: async (subMount) => {
67
+ const credResult = await resolveAndMergeCredentials(subMount, authContext, credentialStore, registry);
68
+ const provider = await registry.createProvider(subMount);
69
+ if (credResult) {
70
+ await persistCredentialResult(subMount, credResult);
71
+ const opts = subMount.options ?? {};
72
+ for (const key of Object.keys(credResult.sensitive)) delete opts[key];
73
+ subMount.options = Object.keys(opts).length > 0 ? opts : void 0;
74
+ if (Object.keys(credResult.nonSensitive).length > 0) subMount.options = {
75
+ ...subMount.options ?? {},
76
+ ...credResult.nonSensitive
77
+ };
78
+ }
79
+ return provider;
80
+ },
81
+ name: mount.path.slice(1).replace(/\//g, "-") || "workspace",
82
+ description: mount.description,
83
+ accessMode: mount.access_mode,
84
+ ...mount.options
85
+ });
86
+ });
87
+ afs.loadProvider = async (uri, mountPath, options$1) => {
88
+ (0, _aigne_afs_utils_uri.parseURI)(uri);
89
+ const { cleanUri: loadConfigUri, envRecord: loadEnvRecord } = extractEnvFromURI(uri);
90
+ const hasLoadEnv = Object.keys(loadEnvRecord).length > 0;
91
+ const { accessMode, auth, description, scope, ...providerOptions } = options$1 ?? {};
92
+ if (hasLoadEnv) providerOptions.env = {
93
+ ...providerOptions.env ?? {},
94
+ ...loadEnvRecord
95
+ };
96
+ const mount = {
97
+ uri,
98
+ path: mountPath,
99
+ access_mode: accessMode ?? void 0,
100
+ auth: auth ?? void 0,
101
+ description: description ?? void 0,
102
+ options: Object.keys(providerOptions).length > 0 ? providerOptions : void 0
103
+ };
104
+ const persistScope = scope || "cwd";
105
+ let credResult = await resolveAndMergeCredentials(mount, authContext, credentialStore, registry);
106
+ try {
107
+ const provider = await registry.createProvider(mount);
108
+ await afs.mount(provider, mountPath);
109
+ } catch (mountError) {
110
+ if (credResult === null && authContext) {
111
+ const retryProviderOptions = { ...providerOptions };
112
+ const retryMount = {
113
+ uri,
114
+ path: mountPath,
115
+ access_mode: accessMode ?? void 0,
116
+ auth: auth ?? void 0,
117
+ description: description ?? void 0,
118
+ options: Object.keys(retryProviderOptions).length > 0 ? retryProviderOptions : void 0
119
+ };
120
+ credResult = await resolveAndMergeCredentials(retryMount, authContext, credentialStore, registry, { forceCollect: true });
121
+ const retryProvider = await registry.createProvider(retryMount);
122
+ await afs.mount(retryProvider, mountPath);
123
+ Object.assign(mount, retryMount);
124
+ } else throw mountError;
125
+ }
126
+ if (credResult) await persistCredentialResult(mount, credResult);
127
+ if (hasLoadEnv && credentialStore) try {
128
+ const envCreds = {};
129
+ for (const [k, v] of Object.entries(loadEnvRecord)) envCreds[`env:${k}`] = v;
130
+ const existing = credResult ? { ...credResult.sensitive } : {};
131
+ await credentialStore.set(loadConfigUri, {
132
+ ...existing,
133
+ ...envCreds
134
+ });
135
+ } catch (err) {
136
+ const msg = err instanceof Error ? err.message : String(err);
137
+ console.warn(`[mount] env credential persistence failed: ${msg}`);
138
+ }
139
+ try {
140
+ const entry = {
141
+ path: mountPath,
142
+ uri: hasLoadEnv ? loadConfigUri : mount.uri
143
+ };
144
+ if (description) entry.description = description;
145
+ if (accessMode) entry.access_mode = accessMode;
146
+ if (auth) entry.auth = auth;
147
+ const mergedOptions = {
148
+ ...providerOptions,
149
+ ...credResult?.nonSensitive
150
+ };
151
+ if (hasLoadEnv) delete mergedOptions.env;
152
+ if (Object.keys(mergedOptions).length > 0) entry.options = mergedOptions;
153
+ await require_mount_commands.persistMount(cwd, entry, persistScope);
154
+ } catch (err) {
155
+ const msg = err instanceof Error ? err.message : String(err);
156
+ console.warn(`[mount] config persistence failed: ${msg}`);
157
+ }
158
+ };
159
+ afs.unloadProvider = async (mountPath, options$1) => {
160
+ try {
161
+ await require_mount_commands.unpersistMount(cwd, mountPath, options$1?.scope || void 0);
162
+ } catch (err) {
163
+ const msg = err instanceof Error ? err.message : String(err);
164
+ console.warn(`[unmount] config removal failed: ${msg}`);
165
+ }
166
+ };
167
+ afs.updateProviderConfig = async (mountPath, optionUpdates) => {
168
+ try {
169
+ const key = `:${mountPath}`;
170
+ const configDir = mountSources.get(key);
171
+ if (!configDir) return;
172
+ await require_mount_commands.updateMountOptions(configDir, mountPath, optionUpdates);
173
+ } catch (err) {
174
+ const msg = err instanceof Error ? err.message : String(err);
175
+ console.warn(`[updateProviderConfig] failed: ${msg}`);
176
+ }
177
+ };
178
+ if (config.registry?.enabled !== false) try {
179
+ const { AFSRegistry } = await import("@aigne/afs-registry");
180
+ const officialRegistry = new AFSRegistry(config.registry?.providers?.length ? { providers: config.registry.providers } : { url: "https://raw.githubusercontent.com/ArcBlock/afs-registry/refs/heads/main/providers.json" });
181
+ await afs.mount(officialRegistry, "/registry/official");
182
+ const internalRegistry = new AFSRegistry();
183
+ await afs.mount(internalRegistry, "/registry/internal");
184
+ } catch {}
185
+ if (config.mounts.length === 0) return {
186
+ afs,
187
+ failures: []
188
+ };
189
+ const total = config.mounts.length;
190
+ let completed = 0;
191
+ let failedCount = 0;
192
+ options?.onProgress?.({
193
+ total,
194
+ completed: 0,
195
+ failed: 0
196
+ });
197
+ if (credentialStore && mountSources.size > 0) await mergeStoredCredentials(config.mounts, mountSources, credentialStore);
198
+ const results = await Promise.allSettled(config.mounts.map(async (mount) => {
199
+ const provider = await registry.createProvider(mount);
200
+ await afs.mount(provider, mount.path, { namespace: mount.namespace ?? null });
201
+ completed++;
202
+ options?.onProgress?.({
203
+ total,
204
+ completed,
205
+ failed: failedCount
206
+ });
207
+ return mount.path;
208
+ }));
209
+ const failures = [];
210
+ const succeeded = [];
211
+ for (let i = 0; i < results.length; i++) {
212
+ const result = results[i];
213
+ if (result.status === "fulfilled") succeeded.push(result.value);
214
+ else {
215
+ const reason = result.reason;
216
+ const msg = reason instanceof Error ? reason.message : String(reason);
217
+ failures.push({
218
+ path: config.mounts[i].path,
219
+ reason: msg
220
+ });
221
+ failedCount++;
222
+ completed++;
223
+ options?.onProgress?.({
224
+ total,
225
+ completed,
226
+ failed: failedCount
227
+ });
228
+ }
229
+ }
230
+ if (!options?.onProgress && failures.length > 0) {
231
+ console.warn(`[mount] ${succeeded.length} succeeded, ${failures.length} failed:`);
232
+ for (const f of failures) console.warn(` - ${f.path}: ${f.reason}`);
233
+ }
234
+ if (succeeded.length === 0 && config.mounts.length > 0) throw new Error("All providers failed to mount");
235
+ return {
236
+ afs,
237
+ failures
238
+ };
239
+ }
240
+ /**
241
+ * Extract env query params from MCP URIs for secure credential storage.
242
+ *
243
+ * MCP servers receive secrets via env vars (e.g., `mcp+stdio://npx?env=API_KEY=sk-xxx`).
244
+ * This function extracts env params from the URI so they can be stored in credentials.toml
245
+ * instead of being persisted in plaintext in config.toml.
246
+ *
247
+ * Only applies to MCP schemes (mcp://, mcp+stdio://, mcp+sse://).
248
+ * Non-MCP URIs are returned unchanged.
249
+ */
250
+ function extractEnvFromURI(uri) {
251
+ const parsed = (0, _aigne_afs_utils_uri.parseURI)(uri);
252
+ const envRecord = {};
253
+ if (!parsed.scheme.startsWith("mcp")) return {
254
+ cleanUri: uri,
255
+ envRecord
256
+ };
257
+ const envValues = parsed.query.env;
258
+ if (!envValues) return {
259
+ cleanUri: uri,
260
+ envRecord
261
+ };
262
+ const envList = Array.isArray(envValues) ? envValues : [envValues];
263
+ for (const entry of envList) {
264
+ const eqIdx = entry.indexOf("=");
265
+ if (eqIdx > 0) envRecord[entry.slice(0, eqIdx)] = entry.slice(eqIdx + 1);
266
+ }
267
+ const queryIndex = uri.indexOf("?");
268
+ if (queryIndex < 0) return {
269
+ cleanUri: uri,
270
+ envRecord
271
+ };
272
+ const rawQuery = uri.slice(queryIndex + 1);
273
+ const params = new URLSearchParams(rawQuery);
274
+ params.delete("env");
275
+ const newQuery = params.toString();
276
+ const base = uri.slice(0, queryIndex);
277
+ return {
278
+ cleanUri: newQuery ? `${base}?${newQuery}` : base,
279
+ envRecord
280
+ };
281
+ }
282
+ /**
283
+ * Extract template variables from mount.uri using the manifest's uriTemplate
284
+ * and merge them into mount.options so the credential resolver sees them as "known".
285
+ *
286
+ * Example: cloudflare://d9e5fca3... + template "cloudflare://{accountId}"
287
+ * → mount.options.accountId = "d9e5fca3..."
288
+ */
289
+ function mergeTemplateVarsIntoMount(mount, manifest) {
290
+ if (!manifest?.uriTemplate) return;
291
+ const { parseTemplate } = require("@aigne/afs/utils/uri-template");
292
+ const parsed = (0, _aigne_afs_utils_uri.parseURI)(mount.uri);
293
+ let templateVars;
294
+ try {
295
+ templateVars = parseTemplate(manifest.uriTemplate, parsed.body);
296
+ } catch {
297
+ return;
298
+ }
299
+ for (const [key, value] of Object.entries(templateVars)) if (value !== void 0) {
300
+ if (!mount.options) mount.options = {};
301
+ if (mount.options[key] === void 0) mount.options[key] = value;
302
+ }
303
+ }
304
+ /**
305
+ * After credential resolution, rebuild mount.uri from the template if the
306
+ * current URI body is empty/incomplete and resolved options can fill template vars.
307
+ *
308
+ * Example: mount.uri = "cloudflare://" (empty body), mount.options.accountId = "abc"
309
+ * → mount.uri = "cloudflare://abc"
310
+ */
311
+ function rebuildURIFromTemplate(mount, manifest) {
312
+ if (!manifest?.uriTemplate) return;
313
+ const { buildURI, getTemplateVariableNames } = require("@aigne/afs/utils/uri-template");
314
+ const varNames = getTemplateVariableNames(manifest.uriTemplate);
315
+ if (varNames.length === 0) return;
316
+ const parsed = (0, _aigne_afs_utils_uri.parseURI)(mount.uri);
317
+ const { parseTemplate } = require("@aigne/afs/utils/uri-template");
318
+ let existingVars;
319
+ try {
320
+ existingVars = parseTemplate(manifest.uriTemplate, parsed.body);
321
+ } catch {
322
+ existingVars = {};
323
+ }
324
+ const allVars = { ...existingVars };
325
+ for (const name of varNames) if (!allVars[name] && mount.options?.[name] != null) allVars[name] = String(mount.options[name]);
326
+ try {
327
+ const newURI = buildURI(manifest.uriTemplate, allVars);
328
+ if (newURI !== mount.uri) mount.uri = newURI;
329
+ } catch {}
330
+ }
331
+ /**
332
+ * Attempt credential resolution for a mount, merging resolved values into mount.options.
333
+ *
334
+ * Returns the credential result if any fields were collected interactively,
335
+ * or null if no interactive collection was needed (or no schema/authContext).
336
+ *
337
+ * This function mutates mount.options and mount.auth/mount.token when credentials
338
+ * are resolved, so the subsequent registry.createProvider(mount) receives complete values.
339
+ */
340
+ async function resolveAndMergeCredentials(mount, authContext, credentialStore, registry, opts) {
341
+ const info = await registry.getProviderInfo(mount.uri);
342
+ const schema = info?.schema ?? null;
343
+ const providerAuth = info?.auth;
344
+ if (!schema) return null;
345
+ mergeTemplateVarsIntoMount(mount, info?.manifest);
346
+ const { getSensitiveFields } = await import("@aigne/afs/utils/schema");
347
+ const sensitiveFieldsInSchema = getSensitiveFields(schema);
348
+ const schemaProps = schema.properties ?? {};
349
+ const hasEnvFields = Object.values(schemaProps).some((p) => Array.isArray(p?.env));
350
+ if (sensitiveFieldsInSchema.length === 0 && !hasEnvFields && !providerAuth) return null;
351
+ const { resolveCredentials } = await Promise.resolve().then(() => require("../credential/resolver.cjs"));
352
+ const result = await resolveCredentials({
353
+ mount,
354
+ schema,
355
+ authContext,
356
+ credentialStore,
357
+ providerAuth,
358
+ forceCollect: opts?.forceCollect
359
+ });
360
+ if (!result) {
361
+ const fieldNames = Object.keys(schema.properties ?? {});
362
+ const known = /* @__PURE__ */ new Set();
363
+ if (mount.auth !== void 0) known.add("auth");
364
+ if (mount.token !== void 0) known.add("token");
365
+ if (mount.options) for (const k of Object.keys(mount.options)) known.add(k);
366
+ const missing = fieldNames.filter((f) => !known.has(f));
367
+ const fieldList = missing.length > 0 ? missing.join(", ") : fieldNames.join(", ");
368
+ throw new Error(`Missing credentials: ${fieldList}. Retry with them as args, e.g. { "uri": "${mount.uri}", "path": "${mount.path}", ${missing.map((f) => `"${f}": "..."`).join(", ")} }`);
369
+ }
370
+ if (Object.keys(result.values).length > 0) {
371
+ if (result.values.token !== void 0 && mount.token === void 0) mount.token = String(result.values.token);
372
+ if (result.values.auth !== void 0 && mount.auth === void 0) mount.auth = String(result.values.auth);
373
+ const opts$1 = mount.options ?? {};
374
+ for (const [key, value] of Object.entries(result.values)) if (key !== "token" && key !== "auth" && opts$1[key] === void 0) opts$1[key] = value;
375
+ if (Object.keys(opts$1).length > 0) mount.options = opts$1;
376
+ }
377
+ rebuildURIFromTemplate(mount, info?.manifest);
378
+ return result.collected ? result : null;
379
+ }
380
+ /**
381
+ * Persist credential resolution result (sensitive → credentials.toml, non-sensitive → config).
382
+ */
383
+ async function persistCredentialResult(mount, result) {
384
+ if (Object.keys(result.sensitive).length > 0) try {
385
+ const { createCredentialStore } = await Promise.resolve().then(() => require("../credential/store.cjs"));
386
+ await createCredentialStore().set(mount.uri, result.sensitive);
387
+ } catch (err) {
388
+ const msg = err instanceof Error ? err.message : String(err);
389
+ console.warn(`[mount] credential persistence failed: ${msg}`);
390
+ }
391
+ }
392
+ /**
393
+ * Load stored credentials and merge into mount options during startup.
394
+ *
395
+ * Credentials are keyed by URI (the resource identity), not mount path.
396
+ */
397
+ async function mergeStoredCredentials(mounts, _mountSources, store) {
398
+ for (const mount of mounts) try {
399
+ const stored = await store.get(mount.uri);
400
+ if (stored) {
401
+ const opts = mount.options ?? {};
402
+ for (const [key, value] of Object.entries(stored)) if (key.startsWith("env:")) {
403
+ if (!opts.env) opts.env = {};
404
+ opts.env[key.slice(4)] = value;
405
+ } else if (opts[key] === void 0) opts[key] = value;
406
+ if (Object.keys(opts).length > 0) mount.options = opts;
407
+ }
408
+ } catch {}
409
+ }
410
+ /**
411
+ * Resolve and persist credentials for a mount configuration.
412
+ *
413
+ * Used by `mount add` CLI command to trigger credential collection
414
+ * at add-time rather than deferring to AFS creation.
415
+ *
416
+ * - Gets provider schema via registry
417
+ * - Runs 4-step credential resolution
418
+ * - Persists sensitive values to credentials.toml
419
+ * - Returns non-sensitive values for caller to update config
420
+ *
421
+ * Returns null if no schema found or no credentials needed.
422
+ * Throws if user cancels collection when credentials are required.
423
+ */
424
+ async function resolveCredentialsForMount(options) {
425
+ const { uri, mountPath, authContext, credentialStore, extraOptions, sensitiveArgs } = options;
426
+ const { cleanUri: configUri, envRecord } = extractEnvFromURI(uri);
427
+ const hasExtractedEnv = Object.keys(envRecord).length > 0;
428
+ const info = await (options.registry ?? new _aigne_afs.ProviderRegistry()).getProviderInfo(uri);
429
+ let schema = info?.schema ?? null;
430
+ const providerAuth = info?.auth;
431
+ if (!schema && extraOptions && Object.keys(extraOptions).length > 0) {
432
+ const { buildAdHocSchema } = await import("@aigne/afs/utils/schema");
433
+ schema = buildAdHocSchema(extraOptions, sensitiveArgs ?? []);
434
+ }
435
+ const envOnlyResult = () => {
436
+ if (!hasExtractedEnv) return null;
437
+ return {
438
+ collected: false,
439
+ nonSensitive: {},
440
+ allValues: {},
441
+ persistCredentials: async () => {
442
+ const toStore = {};
443
+ for (const [key, val] of Object.entries(envRecord)) toStore[`env:${key}`] = val;
444
+ if (credentialStore) try {
445
+ await credentialStore.set(configUri, toStore);
446
+ } catch (err) {
447
+ const msg = err instanceof Error ? err.message : String(err);
448
+ console.warn(`[mount add] credential persistence failed: ${msg}`);
449
+ }
450
+ },
451
+ sensitiveFields: [],
452
+ configUri
453
+ };
454
+ };
455
+ if (!schema) return envOnlyResult();
456
+ const properties = schema.properties;
457
+ if (!properties || Object.keys(properties).length === 0) return envOnlyResult();
458
+ if (sensitiveArgs && sensitiveArgs.length > 0) {
459
+ const mergedProps = { ...properties };
460
+ let changed = false;
461
+ for (const field of sensitiveArgs) if (mergedProps[field]) {
462
+ mergedProps[field] = {
463
+ ...mergedProps[field],
464
+ sensitive: true
465
+ };
466
+ changed = true;
467
+ } else if (extraOptions?.[field] !== void 0) {
468
+ const value = extraOptions[field];
469
+ mergedProps[field] = {
470
+ type: typeof value === "number" ? "number" : typeof value === "boolean" ? "boolean" : "string",
471
+ sensitive: true
472
+ };
473
+ changed = true;
474
+ }
475
+ if (changed) schema = {
476
+ ...schema,
477
+ properties: mergedProps
478
+ };
479
+ }
480
+ const { getSensitiveFields } = await import("@aigne/afs/utils/schema");
481
+ const sensitiveFieldsInSchema = getSensitiveFields(schema);
482
+ const schemaProps = schema.properties;
483
+ const hasEnvFields = Object.values(schemaProps).some((p) => Array.isArray(p?.env));
484
+ if (sensitiveFieldsInSchema.length === 0 && !hasEnvFields && !extraOptions) return envOnlyResult();
485
+ const mount = {
486
+ uri,
487
+ path: mountPath
488
+ };
489
+ if (extraOptions && Object.keys(extraOptions).length > 0) mount.options = {
490
+ ...mount.options ?? {},
491
+ ...extraOptions
492
+ };
493
+ mergeTemplateVarsIntoMount(mount, info?.manifest);
494
+ const { resolveCredentials } = await Promise.resolve().then(() => require("../credential/resolver.cjs"));
495
+ const result = await resolveCredentials({
496
+ mount,
497
+ schema,
498
+ authContext,
499
+ credentialStore,
500
+ providerAuth,
501
+ forceCollect: options.forceCollect
502
+ });
503
+ if (!result) {
504
+ const fieldNames = Object.keys(properties);
505
+ throw new Error(`Missing credentials: ${fieldNames.join(", ")}. Retry with them as args, e.g. { "uri": "${uri}", "path": "${mountPath}", ${fieldNames.map((f) => `"${f}": "..."`).join(", ")} }`);
506
+ }
507
+ const sensitiveFieldSet = new Set(sensitiveFieldsInSchema);
508
+ const flatSensitive = {};
509
+ for (const field of sensitiveFieldsInSchema) {
510
+ const val = result.values[field];
511
+ if (val === void 0) continue;
512
+ if (field === "env" && typeof val === "object" && val !== null) for (const [envKey, envVal] of Object.entries(val)) flatSensitive[`env:${envKey}`] = String(envVal);
513
+ else flatSensitive[field] = String(val);
514
+ }
515
+ const nonSensitive = result.collected ? result.nonSensitive : extraOptions ? Object.fromEntries(Object.entries(extraOptions).filter(([k]) => !sensitiveFieldSet.has(k))) : {};
516
+ const persistCredentials = async () => {
517
+ const toStore = { ...flatSensitive };
518
+ for (const [key, val] of Object.entries(envRecord)) toStore[`env:${key}`] = val;
519
+ if (Object.keys(toStore).length > 0 && credentialStore) try {
520
+ await credentialStore.set(configUri, toStore);
521
+ } catch (err) {
522
+ const msg = err instanceof Error ? err.message : String(err);
523
+ console.warn(`[mount add] credential persistence failed: ${msg}`);
524
+ }
525
+ };
526
+ return {
527
+ collected: result.collected,
528
+ nonSensitive,
529
+ allValues: result.values,
530
+ persistCredentials,
531
+ sensitiveFields: sensitiveFieldsInSchema,
532
+ configUri: hasExtractedEnv ? configUri : void 0
533
+ };
534
+ }
535
+ /**
536
+ * Verify that a mount configuration produces a working provider.
537
+ *
538
+ * Creates the provider and mounts it on a temporary AFS instance,
539
+ * which triggers the built-in checkProviderOnMount (stat + data validation + list).
540
+ * Throws if the mount check fails.
541
+ *
542
+ * @param uri - Provider URI
543
+ * @param mountPath - Mount path
544
+ * @param options - Merged options (non-sensitive + sensitive) for provider creation
545
+ */
546
+ async function verifyMount(uri, mountPath, options) {
547
+ const mount = {
548
+ uri,
549
+ path: mountPath,
550
+ options: options && Object.keys(options).length > 0 ? options : void 0
551
+ };
552
+ const registry = new _aigne_afs.ProviderRegistry();
553
+ registerWorkspaceFactory(registry);
554
+ let provider;
555
+ try {
556
+ provider = await registry.createProvider(mount);
557
+ } catch (err) {
558
+ const msg = err instanceof Error ? err.message : String(err);
559
+ throw new Error(`Mount verification failed (provider creation): ${msg}`);
560
+ }
561
+ try {
562
+ const { AFS } = await import("@aigne/afs");
563
+ await new AFS().mount(provider, mountPath);
564
+ } catch (err) {
565
+ const msg = err instanceof Error ? err.message : String(err);
566
+ throw new Error(`Mount verification failed: could not reach provider at ${uri}. Error: ${msg}. Check your URI and credentials.`);
567
+ } finally {
568
+ if (typeof provider.close === "function") try {
569
+ await provider.close();
570
+ } catch {}
571
+ }
572
+ }
573
+
574
+ //#endregion
575
+ exports.createAFS = createAFS;
576
+ exports.loadAFS = loadAFS;
577
+ exports.resolveCredentialsForMount = resolveCredentialsForMount;
578
+ exports.verifyMount = verifyMount;
@@ -0,0 +1,19 @@
1
+ import { CredentialStore } from "../credential/store.cjs";
2
+ import { AFS, AuthContext } from "@aigne/afs";
3
+
4
+ //#region src/config/afs-loader.d.ts
5
+ interface MountProgressEvent {
6
+ total: number;
7
+ completed: number;
8
+ failed: number;
9
+ }
10
+ interface CreateAFSOptions {
11
+ onProgress?: (event: MountProgressEvent) => void;
12
+ /** Auth context for interactive credential collection (CLI or MCP) */
13
+ authContext?: AuthContext;
14
+ /** Credential store for reading/writing credentials */
15
+ credentialStore?: CredentialStore;
16
+ }
17
+ //#endregion
18
+ export { CreateAFSOptions };
19
+ //# sourceMappingURL=afs-loader.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"afs-loader.d.cts","names":[],"sources":["../../src/config/afs-loader.ts"],"mappings":";;;;UA0DiB,kBAAA;EACf,KAAA;EACA,SAAA;EACA,MAAA;AAAA;AAAA,UAae,gBAAA;EACf,UAAA,IAAc,KAAA,EAAO,kBAAA;;EAErB,WAAA,GAAc,WAAA;;EAEd,eAAA,GAAkB,eAAA;AAAA"}
@@ -0,0 +1,19 @@
1
+ import { CredentialStore } from "../credential/store.mjs";
2
+ import { AFS, AuthContext, ProviderRegistry } from "@aigne/afs";
3
+
4
+ //#region src/config/afs-loader.d.ts
5
+ interface MountProgressEvent {
6
+ total: number;
7
+ completed: number;
8
+ failed: number;
9
+ }
10
+ interface CreateAFSOptions {
11
+ onProgress?: (event: MountProgressEvent) => void;
12
+ /** Auth context for interactive credential collection (CLI or MCP) */
13
+ authContext?: AuthContext;
14
+ /** Credential store for reading/writing credentials */
15
+ credentialStore?: CredentialStore;
16
+ }
17
+ //#endregion
18
+ export { CreateAFSOptions };
19
+ //# sourceMappingURL=afs-loader.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"afs-loader.d.mts","names":[],"sources":["../../src/config/afs-loader.ts"],"mappings":";;;;UA0DiB,kBAAA;EACf,KAAA;EACA,SAAA;EACA,MAAA;AAAA;AAAA,UAae,gBAAA;EACf,UAAA,IAAc,KAAA,EAAO,kBAAA;;EAErB,WAAA,GAAc,WAAA;;EAEd,eAAA,GAAkB,eAAA;AAAA"}