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

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 +186 -0
  217. package/dist/credential/mcp-auth-context.d.mts +1 -0
  218. package/dist/credential/mcp-auth-context.mjs +186 -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
package/README.md CHANGED
@@ -1,38 +1,228 @@
1
1
  # @aigne/afs-cli
2
2
 
3
- AFS 命令行工具
3
+ AFS 命令行工具 - AFS-UI 的文本投影 (reference implementation)
4
+
5
+ ## 安装
6
+
7
+ ```bash
8
+ npm install -g @aigne/afs-cli
9
+ # 或
10
+ pnpm add -g @aigne/afs-cli
11
+ ```
12
+
13
+ ## 快速开始
14
+
15
+ ```bash
16
+ # 配置挂载点
17
+ afs mount add /src fs:///path/to/project/src
18
+ afs mount add /docs fs:///path/to/docs
19
+
20
+ # 列出目录
21
+ afs list /src
22
+
23
+ # 读取文件
24
+ afs read /src/index.ts
25
+
26
+ # 搜索内容
27
+ afs search /src "TODO"
28
+ ```
29
+
30
+ ## 配置文件
31
+
32
+ AFS CLI 使用 `.afs-config/config.toml` 配置挂载点和服务器设置。
33
+
34
+ ### 配置文件位置
35
+
36
+ ```
37
+ ~/.afs-config/config.toml # 用户级 (最低优先级)
38
+ <project>/.afs-config/config.toml # 项目级
39
+ <subdir>/.afs-config/config.toml # 子目录级 (最高优先级)
40
+ ```
41
+
42
+ ### 配置示例
43
+
44
+ ```toml
45
+ # 本地文件系统
46
+ [[mounts]]
47
+ path = "/src"
48
+ uri = "fs:///Users/dev/project/src"
49
+ description = "项目源码"
50
+
51
+ # Git 仓库
52
+ [[mounts]]
53
+ path = "/upstream"
54
+ uri = "git:///path/to/repo?branch=main"
55
+ access_mode = "readonly"
56
+
57
+ # SQLite 数据库
58
+ [[mounts]]
59
+ path = "/db"
60
+ uri = "sqlite:///path/to/app.db"
61
+
62
+ # 远程 AFS 服务器 (带认证)
63
+ [[mounts]]
64
+ path = "/remote"
65
+ uri = "https://afs.example.com/afs"
66
+ token = "${AFS_TOKEN}" # 使用环境变量
67
+
68
+ # HTTP 服务器配置
69
+ [serve]
70
+ host = "localhost"
71
+ port = 3000
72
+ path = "/afs"
73
+ readonly = false
74
+ cors = false
75
+ max_body_size = 10485760 # 10MB
76
+ token = "${AFS_SERVER_TOKEN}" # 服务器认证 token
77
+ ```
78
+
79
+ ### 挂载配置字段
80
+
81
+ | 字段 | 必填 | 说明 |
82
+ |------|------|------|
83
+ | `path` | 是 | 挂载路径 (如 `/src`) |
84
+ | `uri` | 是 | Provider URI (如 `fs:///path`) |
85
+ | `description` | 否 | 人类/LLM 可读描述 |
86
+ | `access_mode` | 否 | 访问模式: `readonly` 或 `readwrite` |
87
+ | `token` | 否 | HTTP Provider 认证 token (支持 `${ENV_VAR}`) |
88
+ | `auth` | 否 | 认证字符串 (支持 `${ENV_VAR}`) |
89
+ | `namespace` | 否 | 命名空间 (用于隔离不同环境) |
90
+ | `options` | 否 | Provider 特定选项 |
4
91
 
5
92
  ## 命令
6
93
 
94
+ ### 文件操作
95
+
7
96
  | 命令 | 功能 |
8
97
  |------|------|
9
- | `afs ls [path]` | 列出目录内容 |
10
- | `afs cat <path>` | 读取文件内容 |
11
- | `afs write <path>` | 写入文件 |
12
- | `afs search <path> <pattern>` | 搜索内容 |
98
+ | `afs list [path]` (别名: `ls`) | 列出目录内容 |
99
+ | `afs read <path>` | 读取文件内容 |
100
+ | `afs write <path> [--content]` | 写入文件 (--content 或 stdin) |
101
+ | `afs stat <path>` | 获取文件/目录元信息 |
102
+ | `afs search <path> <query>` | 搜索文件内容 |
13
103
  | `afs exec <path> <action>` | 执行操作 |
14
- | `afs explain <path>` | 语义解释 |
104
+
105
+ ### 挂载管理
106
+
107
+ | 命令 | 功能 |
108
+ |------|------|
109
+ | `afs mount list` (别名: `ls`) | 列出挂载配置 |
110
+ | `afs mount add <path> <uri>` | 添加挂载 |
111
+ | `afs mount remove <path>` (别名: `rm`) | 移除挂载 |
112
+ | `afs mount validate` | 验证挂载配置 |
113
+
114
+ ### 其他命令
115
+
116
+ | 命令 | 功能 |
117
+ |------|------|
118
+ | `afs explain [topic]` | 解释概念 (命令或路径) |
119
+ | `afs serve` | 启动 HTTP 服务器 |
120
+
121
+ ## 支持的 URI 方案
122
+
123
+ | 方案 | 示例 | 说明 |
124
+ |------|------|------|
125
+ | `fs://` | `fs:///path/to/dir` | 本地文件系统 |
126
+ | `git://` | `git:///path/to/repo?branch=main` | Git 仓库 |
127
+ | `sqlite://` | `sqlite:///path/to/db.sqlite` | SQLite 数据库 |
128
+ | `json://` | `json:///path/to/config.json` | JSON/YAML 文件 |
129
+ | `http://` | `http://localhost:3000/afs` | HTTP 远程 AFS |
130
+ | `https://` | `https://api.example.com/afs` | HTTPS 远程 AFS |
131
+
132
+ ## HTTP 服务器
133
+
134
+ ### 启动服务器
135
+
136
+ ```bash
137
+ # 使用配置文件中的设置启动
138
+ afs serve
139
+
140
+ # 自定义主机和端口
141
+ afs serve --host 0.0.0.0 --port 8080
142
+
143
+ # 只读模式(禁用写入操作)
144
+ afs serve --readonly
145
+
146
+ # 启用 CORS 支持
147
+ afs serve --cors
148
+
149
+ # 自定义基础路径
150
+ afs serve --path /api/afs
151
+ ```
152
+
153
+ ### 服务器选项
154
+
155
+ | 选项 | 默认值 | 说明 |
156
+ |------|--------|------|
157
+ | `--host` | localhost | 监听主机地址 |
158
+ | `--port` | 3000 | 监听端口 |
159
+ | `--path` | /afs | 服务路径前缀 |
160
+ | `--readonly` | false | 只读模式 |
161
+ | `--cors` | false | 启用 CORS |
162
+ | `--maxBodySize` | 10MB | 最大请求体大小 |
163
+
164
+ ### 配置优先级
165
+
166
+ `命令行参数 > config.toml > 默认值`
167
+
168
+ ### 挂载远程服务器
169
+
170
+ ```bash
171
+ # 添加远程 HTTP 挂载
172
+ afs mount add /remote http://localhost:3000/afs
173
+
174
+ # 添加 HTTPS 挂载
175
+ afs mount add /api https://api.example.com/afs
176
+
177
+ # 访问远程挂载
178
+ afs list /remote
179
+ afs read /remote/file.txt
180
+ ```
15
181
 
16
182
  ## 输出模式
17
183
 
18
184
  ```bash
19
185
  # 默认: Machine Truth (LLM/脚本友好)
20
- afs ls /modules/local-fs
186
+ afs list /src
187
+ # 输出: 每行一个路径
21
188
 
22
189
  # JSON 结构化输出
23
- afs ls /modules/local-fs --json
190
+ afs list /src --json
24
191
 
25
- # LLM 优化输出
26
- afs ls /modules/local-fs --view=llm
192
+ # LLM 优化输出 (token 高效)
193
+ afs list /src --view=llm
27
194
 
28
- # 人类友好输出
29
- afs ls /modules/local-fs --view=human
195
+ # 人类友好输出 (树形结构)
196
+ afs list /src --view=human
30
197
  ```
31
198
 
32
- ## 运行模式
199
+ ### 输出模式对比
200
+
201
+ | 模式 | 特点 | 适用场景 |
202
+ |------|------|----------|
203
+ | default | 每行一个路径,pipe-safe | 脚本、grep、awk |
204
+ | json | 结构化 JSON | 程序解析 |
205
+ | llm | 语义事实,token 高效 | LLM/Agent |
206
+ | human | 树形结构,带图标 | 人类阅读 |
33
207
 
34
- - **直接模式** (默认): 直接调用 `@aigne/afs` 库
35
- - **daemon 模式** (`--daemon`): 通过 afsd 代理,支持状态持久化
208
+ ## explain 命令
209
+
210
+ explain 是 AFS CLI 的一等公民,专为 LLM/Agent 设计:
211
+
212
+ ```bash
213
+ # 解释命令行为
214
+ afs explain afs ls
215
+
216
+ # 解释 AFS 对象
217
+ afs explain /src/index.ts
218
+
219
+ # JSON 输出 (供 agent 缓存)
220
+ afs explain --json afs read
221
+ ```
222
+
223
+ **explain vs help**:
224
+ - `help`: 解决"我怎么用" - 面向人类
225
+ - `explain`: 解决"它到底做了什么" - 面向 LLM/Agent,输出稳定可解析
36
226
 
37
227
  ## 退出码
38
228
 
@@ -43,3 +233,60 @@ afs ls /modules/local-fs --view=human
43
233
  | 2 | 参数错误 |
44
234
  | 3 | 资源未找到 |
45
235
  | 4 | 权限拒绝 |
236
+ | 5 | 运行时错误 |
237
+
238
+ ## 使用场景
239
+
240
+ ### 本地开发
241
+
242
+ ```bash
243
+ # 配置项目挂载
244
+ afs mount add /src fs://$(pwd)/src
245
+ afs mount add /docs fs://$(pwd)/docs
246
+
247
+ # 启动开发服务器供团队访问
248
+ afs serve --host 0.0.0.0 --port 3000
249
+ ```
250
+
251
+ ### CI/CD 测试
252
+
253
+ ```bash
254
+ # 启动测试数据服务器
255
+ afs serve --readonly --port 8080 &
256
+
257
+ # 测试用例访问
258
+ curl http://localhost:8080/afs/rpc \
259
+ -d '{"method":"read","params":{"path":"/test-fixtures/data.json"}}'
260
+ ```
261
+
262
+ ### 临时文件共享
263
+
264
+ ```bash
265
+ # 快速共享当前目录
266
+ afs mount add /share fs://$(pwd)
267
+ afs serve --host 0.0.0.0
268
+
269
+ # 其他人访问
270
+ afs mount add /remote-share http://your-ip:3000/afs
271
+ afs list /remote-share
272
+ ```
273
+
274
+ ### 使用配置文件
275
+
276
+ ```bash
277
+ # 创建配置
278
+ cat > .afs-config/config.toml << 'EOF'
279
+ [[mounts]]
280
+ path = "/data"
281
+ uri = "fs:///var/data"
282
+
283
+ [serve]
284
+ host = "0.0.0.0"
285
+ port = 8080
286
+ readonly = true
287
+ cors = true
288
+ EOF
289
+
290
+ # 直接启动,无需参数
291
+ afs serve
292
+ ```
@@ -0,0 +1,29 @@
1
+ //#region rolldown:runtime
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") {
10
+ for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
11
+ key = keys[i];
12
+ if (!__hasOwnProp.call(to, key) && key !== except) {
13
+ __defProp(to, key, {
14
+ get: ((k) => from[k]).bind(null, key),
15
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
16
+ });
17
+ }
18
+ }
19
+ }
20
+ return to;
21
+ };
22
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
23
+ value: mod,
24
+ enumerable: true
25
+ }) : target, mod));
26
+
27
+ //#endregion
28
+
29
+ exports.__toESM = __toESM;
@@ -0,0 +1,7 @@
1
+ import { createRequire } from "node:module";
2
+
3
+ //#region rolldown:runtime
4
+ var __require = /* @__PURE__ */ createRequire(import.meta.url);
5
+
6
+ //#endregion
7
+ export { __require };
package/dist/cli.cjs ADDED
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env node
2
+ const require_rolldown_runtime = require('./_virtual/rolldown_runtime.cjs');
3
+ const require_version = require('./version.cjs');
4
+ const require_errors = require('./errors.cjs');
5
+ const require_index = require('./core/executor/index.cjs');
6
+ require('./node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/index.cjs');
7
+ require('./core/index.cjs');
8
+ let yargs_helpers = require("yargs/helpers");
9
+
10
+ //#region src/cli.ts
11
+ async function main() {
12
+ const args = (0, yargs_helpers.hideBin)(process.argv);
13
+ const cwd = process.cwd();
14
+ if (args.includes("-i") || args.includes("--interactive")) {
15
+ const { startRepl } = await Promise.resolve().then(() => require("./repl.cjs"));
16
+ await startRepl({
17
+ cwd,
18
+ version: require_version.VERSION
19
+ });
20
+ process.exit(require_errors.ExitCode.OK);
21
+ }
22
+ const result = await new require_index.AFSCommandExecutor(void 0, {
23
+ cwd,
24
+ tty: process.stdout.isTTY ?? false,
25
+ version: require_version.VERSION
26
+ }).execute(args);
27
+ if (result.success) {
28
+ console.log(result.formatted);
29
+ process.exit(require_errors.ExitCode.OK);
30
+ } else {
31
+ console.error(result.formatted);
32
+ process.exit(result.error?.code ?? require_errors.ExitCode.RUNTIME_ERROR);
33
+ }
34
+ }
35
+ main().catch((error) => {
36
+ console.error(error instanceof Error ? error.message : String(error));
37
+ process.exit(require_errors.ExitCode.RUNTIME_ERROR);
38
+ });
39
+
40
+ //#endregion
package/dist/cli.d.cts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import "./node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/index.cjs";
package/dist/cli.d.mts CHANGED
@@ -1 +1,2 @@
1
- export { };
1
+ #!/usr/bin/env node
2
+ import "./node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/index.mjs";
package/dist/cli.mjs CHANGED
@@ -1,29 +1,41 @@
1
1
  #!/usr/bin/env node
2
- import { t as VERSION } from "./version--p6A8sKX.mjs";
2
+ import { VERSION } from "./version.mjs";
3
+ import { ExitCode } from "./errors.mjs";
4
+ import { AFSCommandExecutor } from "./core/executor/index.mjs";
5
+ import "./node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/index.mjs";
6
+ import "./core/index.mjs";
7
+ import { hideBin } from "yargs/helpers";
3
8
 
4
9
  //#region src/cli.ts
5
- /**
6
- * AFS CLI - Command Line Interface
7
- *
8
- * 命令:
9
- * - afs ls [path] 列出目录
10
- * - afs cat <path> 读取文件
11
- * - afs write <path> 写入文件
12
- * - afs search <path> <pattern> 搜索内容
13
- * - afs exec <path> <action> 执行操作
14
- * - afs explain <path> 语义解释
15
- *
16
- * 输出模式:
17
- * - 默认: Machine Truth (LLM/脚本友好)
18
- * - --json: 结构化 JSON
19
- * - --view=llm: LLM 优化输出
20
- * - --view=human: 人类友好格式
21
- *
22
- * 运行模式:
23
- * - 直接模式 (默认): 直接调用 @aigne/afs
24
- * - daemon 模式 (--daemon): 通过 afsd 代理
25
- */
26
- console.log(`afs-cli v${VERSION}`);
10
+ async function main() {
11
+ const args = hideBin(process.argv);
12
+ const cwd = process.cwd();
13
+ if (args.includes("-i") || args.includes("--interactive")) {
14
+ const { startRepl } = await import("./repl.mjs");
15
+ await startRepl({
16
+ cwd,
17
+ version: VERSION
18
+ });
19
+ process.exit(ExitCode.OK);
20
+ }
21
+ const result = await new AFSCommandExecutor(void 0, {
22
+ cwd,
23
+ tty: process.stdout.isTTY ?? false,
24
+ version: VERSION
25
+ }).execute(args);
26
+ if (result.success) {
27
+ console.log(result.formatted);
28
+ process.exit(ExitCode.OK);
29
+ } else {
30
+ console.error(result.formatted);
31
+ process.exit(result.error?.code ?? ExitCode.RUNTIME_ERROR);
32
+ }
33
+ }
34
+ main().catch((error) => {
35
+ console.error(error instanceof Error ? error.message : String(error));
36
+ process.exit(ExitCode.RUNTIME_ERROR);
37
+ });
27
38
 
28
39
  //#endregion
29
- export { };
40
+ export { };
41
+ //# sourceMappingURL=cli.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.mjs","names":[],"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\n/**\n * AFS CLI - Command Line Interface\n *\n * Simple CLI that delegates to executor. AFS is lazy-loaded on demand\n * by individual commands, so mount failures don't block config commands.\n */\n\nimport \"urlpattern-polyfill\";\nimport { hideBin } from \"yargs/helpers\";\nimport { AFSCommandExecutor } from \"./core/index.js\";\nimport { ExitCode } from \"./errors.js\";\nimport { VERSION } from \"./version.js\";\n\nasync function main() {\n const args = hideBin(process.argv);\n const cwd = process.cwd();\n\n // Check for -i / --interactive before yargs parsing\n if (args.includes(\"-i\") || args.includes(\"--interactive\")) {\n const { startRepl } = await import(\"./repl.js\");\n await startRepl({ cwd, version: VERSION });\n process.exit(ExitCode.OK);\n }\n\n const executor = new AFSCommandExecutor(undefined, {\n cwd,\n tty: process.stdout.isTTY ?? false,\n version: VERSION,\n });\n\n const result = await executor.execute(args);\n\n if (result.success) {\n console.log(result.formatted);\n process.exit(ExitCode.OK);\n } else {\n console.error(result.formatted);\n process.exit(result.error?.code ?? ExitCode.RUNTIME_ERROR);\n }\n}\n\nmain().catch((error) => {\n console.error(error instanceof Error ? error.message : String(error));\n process.exit(ExitCode.RUNTIME_ERROR);\n});\n"],"mappings":";;;;;;;;;AAeA,eAAe,OAAO;CACpB,MAAM,OAAO,QAAQ,QAAQ,KAAK;CAClC,MAAM,MAAM,QAAQ,KAAK;AAGzB,KAAI,KAAK,SAAS,KAAK,IAAI,KAAK,SAAS,gBAAgB,EAAE;EACzD,MAAM,EAAE,cAAc,MAAM,OAAO;AACnC,QAAM,UAAU;GAAE;GAAK,SAAS;GAAS,CAAC;AAC1C,UAAQ,KAAK,SAAS,GAAG;;CAS3B,MAAM,SAAS,MANE,IAAI,mBAAmB,QAAW;EACjD;EACA,KAAK,QAAQ,OAAO,SAAS;EAC7B,SAAS;EACV,CAAC,CAE4B,QAAQ,KAAK;AAE3C,KAAI,OAAO,SAAS;AAClB,UAAQ,IAAI,OAAO,UAAU;AAC7B,UAAQ,KAAK,SAAS,GAAG;QACpB;AACL,UAAQ,MAAM,OAAO,UAAU;AAC/B,UAAQ,KAAK,OAAO,OAAO,QAAQ,SAAS,cAAc;;;AAI9D,MAAM,CAAC,OAAO,UAAU;AACtB,SAAQ,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,CAAC;AACrE,SAAQ,KAAK,SAAS,cAAc;EACpC"}