@aigne/afs-cli 1.11.0-beta.5 → 1.11.0-beta.7

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 (318) hide show
  1. package/dist/cli.cjs +25 -328
  2. package/dist/cli.d.cts +2 -1
  3. package/dist/cli.d.mts +2 -1
  4. package/dist/cli.mjs +26 -328
  5. package/dist/cli.mjs.map +1 -1
  6. package/dist/config/afs-loader.cjs +123 -0
  7. package/dist/config/afs-loader.d.cts +14 -0
  8. package/dist/config/afs-loader.d.cts.map +1 -0
  9. package/dist/config/afs-loader.d.mts +14 -0
  10. package/dist/config/afs-loader.d.mts.map +1 -0
  11. package/dist/config/afs-loader.mjs +122 -0
  12. package/dist/config/afs-loader.mjs.map +1 -0
  13. package/dist/config/loader.cjs +14 -3
  14. package/dist/config/loader.mjs +14 -3
  15. package/dist/config/loader.mjs.map +1 -1
  16. package/dist/{commands/mount.cjs → config/mount-commands.cjs} +13 -49
  17. package/dist/config/mount-commands.d.cts +20 -0
  18. package/dist/config/mount-commands.d.cts.map +1 -0
  19. package/dist/config/mount-commands.d.mts +20 -0
  20. package/dist/config/mount-commands.d.mts.map +1 -0
  21. package/dist/{commands/mount.mjs → config/mount-commands.mjs} +14 -49
  22. package/dist/config/mount-commands.mjs.map +1 -0
  23. package/dist/config/schema.cjs +9 -1
  24. package/dist/config/schema.mjs +9 -1
  25. package/dist/config/schema.mjs.map +1 -1
  26. package/dist/core/commands/delete.cjs +41 -0
  27. package/dist/core/commands/delete.d.cts +18 -0
  28. package/dist/core/commands/delete.d.cts.map +1 -0
  29. package/dist/core/commands/delete.d.mts +18 -0
  30. package/dist/core/commands/delete.d.mts.map +1 -0
  31. package/dist/core/commands/delete.mjs +42 -0
  32. package/dist/core/commands/delete.mjs.map +1 -0
  33. package/dist/core/commands/exec.cjs +95 -0
  34. package/dist/core/commands/exec.d.cts +26 -0
  35. package/dist/core/commands/exec.d.cts.map +1 -0
  36. package/dist/core/commands/exec.d.mts +26 -0
  37. package/dist/core/commands/exec.d.mts.map +1 -0
  38. package/dist/core/commands/exec.mjs +96 -0
  39. package/dist/core/commands/exec.mjs.map +1 -0
  40. package/dist/core/commands/explain.cjs +254 -0
  41. package/dist/core/commands/explain.d.cts +25 -0
  42. package/dist/core/commands/explain.d.cts.map +1 -0
  43. package/dist/core/commands/explain.d.mts +25 -0
  44. package/dist/core/commands/explain.d.mts.map +1 -0
  45. package/dist/core/commands/explain.mjs +255 -0
  46. package/dist/core/commands/explain.mjs.map +1 -0
  47. package/dist/core/commands/explore.cjs +30 -0
  48. package/dist/core/commands/explore.d.mts +2 -0
  49. package/dist/core/commands/explore.mjs +31 -0
  50. package/dist/core/commands/explore.mjs.map +1 -0
  51. package/dist/core/commands/index.cjs +36 -0
  52. package/dist/core/commands/index.d.cts +21 -0
  53. package/dist/core/commands/index.d.cts.map +1 -0
  54. package/dist/core/commands/index.d.mts +24 -0
  55. package/dist/core/commands/index.d.mts.map +1 -0
  56. package/dist/core/commands/index.mjs +37 -0
  57. package/dist/core/commands/index.mjs.map +1 -0
  58. package/dist/core/commands/ls.cjs +57 -0
  59. package/dist/core/commands/ls.d.cts +21 -0
  60. package/dist/core/commands/ls.d.cts.map +1 -0
  61. package/dist/core/commands/ls.d.mts +21 -0
  62. package/dist/core/commands/ls.d.mts.map +1 -0
  63. package/dist/core/commands/ls.mjs +58 -0
  64. package/dist/core/commands/ls.mjs.map +1 -0
  65. package/dist/core/commands/mount.cjs +139 -0
  66. package/dist/core/commands/mount.d.cts +33 -0
  67. package/dist/core/commands/mount.d.cts.map +1 -0
  68. package/dist/core/commands/mount.d.mts +33 -0
  69. package/dist/core/commands/mount.d.mts.map +1 -0
  70. package/dist/core/commands/mount.mjs +140 -0
  71. package/dist/core/commands/mount.mjs.map +1 -0
  72. package/dist/core/commands/read.cjs +48 -0
  73. package/dist/core/commands/read.d.cts +17 -0
  74. package/dist/core/commands/read.d.cts.map +1 -0
  75. package/dist/core/commands/read.d.mts +17 -0
  76. package/dist/core/commands/read.d.mts.map +1 -0
  77. package/dist/core/commands/read.mjs +49 -0
  78. package/dist/core/commands/read.mjs.map +1 -0
  79. package/dist/core/commands/search.cjs +40 -0
  80. package/dist/core/commands/search.d.mts +2 -0
  81. package/dist/core/commands/search.mjs +41 -0
  82. package/dist/core/commands/search.mjs.map +1 -0
  83. package/dist/core/commands/serve.cjs +242 -0
  84. package/dist/core/commands/serve.d.mts +2 -0
  85. package/dist/core/commands/serve.mjs +242 -0
  86. package/dist/core/commands/serve.mjs.map +1 -0
  87. package/dist/core/commands/stat.cjs +53 -0
  88. package/dist/core/commands/stat.d.cts +17 -0
  89. package/dist/core/commands/stat.d.cts.map +1 -0
  90. package/dist/core/commands/stat.d.mts +17 -0
  91. package/dist/core/commands/stat.d.mts.map +1 -0
  92. package/dist/core/commands/stat.mjs +54 -0
  93. package/dist/core/commands/stat.mjs.map +1 -0
  94. package/dist/core/commands/types.cjs +13 -0
  95. package/dist/core/commands/types.d.cts +54 -0
  96. package/dist/core/commands/types.d.cts.map +1 -0
  97. package/dist/core/commands/types.d.mts +54 -0
  98. package/dist/core/commands/types.d.mts.map +1 -0
  99. package/dist/core/commands/types.mjs +14 -0
  100. package/dist/core/commands/types.mjs.map +1 -0
  101. package/dist/core/commands/write.cjs +70 -0
  102. package/dist/core/commands/write.d.cts +20 -0
  103. package/dist/core/commands/write.d.cts.map +1 -0
  104. package/dist/core/commands/write.d.mts +20 -0
  105. package/dist/core/commands/write.d.mts.map +1 -0
  106. package/dist/core/commands/write.mjs +71 -0
  107. package/dist/core/commands/write.mjs.map +1 -0
  108. package/dist/core/executor/index.cjs +196 -0
  109. package/dist/core/executor/index.d.cts +77 -0
  110. package/dist/core/executor/index.d.cts.map +1 -0
  111. package/dist/core/executor/index.d.mts +77 -0
  112. package/dist/core/executor/index.d.mts.map +1 -0
  113. package/dist/core/executor/index.mjs +195 -0
  114. package/dist/core/executor/index.mjs.map +1 -0
  115. package/dist/core/formatters/delete.cjs +37 -0
  116. package/dist/core/formatters/delete.d.cts +18 -0
  117. package/dist/core/formatters/delete.d.cts.map +1 -0
  118. package/dist/core/formatters/delete.d.mts +18 -0
  119. package/dist/core/formatters/delete.d.mts.map +1 -0
  120. package/dist/core/formatters/delete.mjs +37 -0
  121. package/dist/core/formatters/delete.mjs.map +1 -0
  122. package/dist/core/formatters/exec.cjs +60 -0
  123. package/dist/core/formatters/exec.d.cts +18 -0
  124. package/dist/core/formatters/exec.d.cts.map +1 -0
  125. package/dist/core/formatters/exec.d.mts +18 -0
  126. package/dist/core/formatters/exec.d.mts.map +1 -0
  127. package/dist/core/formatters/exec.mjs +60 -0
  128. package/dist/core/formatters/exec.mjs.map +1 -0
  129. package/dist/core/formatters/explain.cjs +97 -0
  130. package/dist/core/formatters/explain.d.cts +11 -0
  131. package/dist/core/formatters/explain.d.cts.map +1 -0
  132. package/dist/core/formatters/explain.d.mts +11 -0
  133. package/dist/core/formatters/explain.d.mts.map +1 -0
  134. package/dist/core/formatters/explain.mjs +96 -0
  135. package/dist/core/formatters/explain.mjs.map +1 -0
  136. package/dist/core/formatters/index.d.mts +9 -0
  137. package/dist/core/formatters/ls.cjs +179 -0
  138. package/dist/core/formatters/ls.d.cts +20 -0
  139. package/dist/core/formatters/ls.d.cts.map +1 -0
  140. package/dist/core/formatters/ls.d.mts +20 -0
  141. package/dist/core/formatters/ls.d.mts.map +1 -0
  142. package/dist/core/formatters/ls.mjs +179 -0
  143. package/dist/core/formatters/ls.mjs.map +1 -0
  144. package/dist/core/formatters/mount.cjs +55 -0
  145. package/dist/core/formatters/mount.d.cts +15 -0
  146. package/dist/core/formatters/mount.d.cts.map +1 -0
  147. package/dist/core/formatters/mount.d.mts +15 -0
  148. package/dist/core/formatters/mount.d.mts.map +1 -0
  149. package/dist/core/formatters/mount.mjs +55 -0
  150. package/dist/core/formatters/mount.mjs.map +1 -0
  151. package/dist/core/formatters/read.cjs +100 -0
  152. package/dist/core/formatters/read.d.cts +22 -0
  153. package/dist/core/formatters/read.d.cts.map +1 -0
  154. package/dist/core/formatters/read.d.mts +22 -0
  155. package/dist/core/formatters/read.d.mts.map +1 -0
  156. package/dist/core/formatters/read.mjs +100 -0
  157. package/dist/core/formatters/read.mjs.map +1 -0
  158. package/dist/core/formatters/search.cjs +44 -0
  159. package/dist/core/formatters/search.d.mts +1 -0
  160. package/dist/core/formatters/search.mjs +44 -0
  161. package/dist/core/formatters/search.mjs.map +1 -0
  162. package/dist/core/formatters/stat.cjs +155 -0
  163. package/dist/core/formatters/stat.d.cts +15 -0
  164. package/dist/core/formatters/stat.d.cts.map +1 -0
  165. package/dist/core/formatters/stat.d.mts +15 -0
  166. package/dist/core/formatters/stat.d.mts.map +1 -0
  167. package/dist/core/formatters/stat.mjs +155 -0
  168. package/dist/core/formatters/stat.mjs.map +1 -0
  169. package/dist/core/formatters/write.cjs +51 -0
  170. package/dist/core/formatters/write.d.cts +22 -0
  171. package/dist/core/formatters/write.d.cts.map +1 -0
  172. package/dist/core/formatters/write.d.mts +22 -0
  173. package/dist/core/formatters/write.d.mts.map +1 -0
  174. package/dist/core/formatters/write.mjs +51 -0
  175. package/dist/core/formatters/write.mjs.map +1 -0
  176. package/dist/core/helpers/exec-args.cjs +142 -0
  177. package/dist/core/helpers/exec-args.d.cts +46 -0
  178. package/dist/core/helpers/exec-args.d.cts.map +1 -0
  179. package/dist/core/helpers/exec-args.d.mts +46 -0
  180. package/dist/core/helpers/exec-args.d.mts.map +1 -0
  181. package/dist/core/helpers/exec-args.mjs +139 -0
  182. package/dist/core/helpers/exec-args.mjs.map +1 -0
  183. package/dist/core/helpers/stdin.cjs +41 -0
  184. package/dist/core/helpers/stdin.d.cts +15 -0
  185. package/dist/core/helpers/stdin.d.cts.map +1 -0
  186. package/dist/core/helpers/stdin.d.mts +15 -0
  187. package/dist/core/helpers/stdin.d.mts.map +1 -0
  188. package/dist/core/helpers/stdin.mjs +41 -0
  189. package/dist/core/helpers/stdin.mjs.map +1 -0
  190. package/dist/core/index.cjs +49 -0
  191. package/dist/core/index.d.cts +24 -0
  192. package/dist/core/index.d.mts +25 -0
  193. package/dist/core/index.mjs +24 -0
  194. package/dist/core/path-utils.cjs +1 -0
  195. package/dist/core/path-utils.mjs +3 -0
  196. package/dist/core/types.d.cts +24 -0
  197. package/dist/core/types.d.cts.map +1 -0
  198. package/dist/core/types.d.mts +24 -0
  199. package/dist/core/types.d.mts.map +1 -0
  200. package/dist/errors.cjs +0 -11
  201. package/dist/errors.mjs +1 -11
  202. package/dist/errors.mjs.map +1 -1
  203. package/dist/explorer/actions.cjs +113 -48
  204. package/dist/explorer/actions.mjs +113 -48
  205. package/dist/explorer/actions.mjs.map +1 -1
  206. package/dist/explorer/components/dialog.cjs +287 -10
  207. package/dist/explorer/components/dialog.mjs +287 -10
  208. package/dist/explorer/components/dialog.mjs.map +1 -1
  209. package/dist/explorer/components/file-list.mjs.map +1 -1
  210. package/dist/explorer/components/metadata-panel.cjs +121 -24
  211. package/dist/explorer/components/metadata-panel.mjs +121 -24
  212. package/dist/explorer/components/metadata-panel.mjs.map +1 -1
  213. package/dist/explorer/screen.cjs +72 -21
  214. package/dist/explorer/screen.d.cts +23 -0
  215. package/dist/explorer/screen.d.cts.map +1 -0
  216. package/dist/explorer/screen.d.mts +23 -0
  217. package/dist/explorer/screen.d.mts.map +1 -0
  218. package/dist/explorer/screen.mjs +73 -22
  219. package/dist/explorer/screen.mjs.map +1 -1
  220. package/dist/explorer/theme.cjs +4 -2
  221. package/dist/explorer/theme.mjs +4 -2
  222. package/dist/explorer/theme.mjs.map +1 -1
  223. package/dist/index.cjs +7 -1
  224. package/dist/index.d.cts +4 -1
  225. package/dist/index.d.mts +4 -1
  226. package/dist/index.mjs +4 -1
  227. package/dist/mcp/http-transport.cjs +68 -0
  228. package/dist/mcp/http-transport.mjs +68 -0
  229. package/dist/mcp/http-transport.mjs.map +1 -0
  230. package/dist/mcp/prompts.cjs +48 -0
  231. package/dist/mcp/prompts.mjs +48 -0
  232. package/dist/mcp/prompts.mjs.map +1 -0
  233. package/dist/mcp/resources.cjs +25 -0
  234. package/dist/mcp/resources.mjs +25 -0
  235. package/dist/mcp/resources.mjs.map +1 -0
  236. package/dist/mcp/server.cjs +30 -0
  237. package/dist/mcp/server.mjs +30 -0
  238. package/dist/mcp/server.mjs.map +1 -0
  239. package/dist/mcp/tools.cjs +196 -0
  240. package/dist/mcp/tools.mjs +196 -0
  241. package/dist/mcp/tools.mjs.map +1 -0
  242. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/index.d.cts +10 -0
  243. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/index.d.cts.map +1 -0
  244. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/index.d.mts +10 -0
  245. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/index.d.mts.map +1 -0
  246. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/types.d.cts +46 -0
  247. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/types.d.cts.map +1 -0
  248. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/types.d.mts +46 -0
  249. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/types.d.mts.map +1 -0
  250. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/urlpattern.cjs +902 -0
  251. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/urlpattern.mjs +902 -0
  252. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/urlpattern.mjs.map +1 -0
  253. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/index.cjs +6 -0
  254. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/index.mjs +8 -0
  255. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/index.mjs.map +1 -0
  256. package/dist/path-utils.cjs +2 -1
  257. package/dist/path-utils.d.cts +50 -0
  258. package/dist/path-utils.d.cts.map +1 -0
  259. package/dist/path-utils.d.mts +50 -0
  260. package/dist/path-utils.d.mts.map +1 -0
  261. package/dist/path-utils.mjs +1 -1
  262. package/dist/repl.cjs +485 -0
  263. package/dist/repl.d.cts +15 -0
  264. package/dist/repl.d.cts.map +1 -0
  265. package/dist/repl.d.mts +16 -0
  266. package/dist/repl.d.mts.map +1 -0
  267. package/dist/repl.mjs +485 -0
  268. package/dist/repl.mjs.map +1 -0
  269. package/dist/serve.cjs +146 -0
  270. package/dist/serve.d.cts +41 -0
  271. package/dist/serve.d.cts.map +1 -0
  272. package/dist/serve.d.mts +41 -0
  273. package/dist/serve.d.mts.map +1 -0
  274. package/dist/serve.mjs +146 -0
  275. package/dist/serve.mjs.map +1 -0
  276. package/dist/ui/header.cjs +1 -49
  277. package/dist/ui/header.mjs +1 -47
  278. package/dist/ui/header.mjs.map +1 -1
  279. package/dist/ui/index.cjs +2 -11
  280. package/dist/ui/index.mjs +2 -8
  281. package/dist/ui/index.mjs.map +1 -1
  282. package/dist/ui/terminal.cjs +1 -10
  283. package/dist/ui/terminal.mjs +1 -8
  284. package/dist/ui/terminal.mjs.map +1 -1
  285. package/package.json +32 -9
  286. package/dist/commands/exec.cjs +0 -46
  287. package/dist/commands/exec.mjs +0 -45
  288. package/dist/commands/exec.mjs.map +0 -1
  289. package/dist/commands/explain.cjs +0 -244
  290. package/dist/commands/explain.mjs +0 -242
  291. package/dist/commands/explain.mjs.map +0 -1
  292. package/dist/commands/index.cjs +0 -8
  293. package/dist/commands/index.mjs +0 -10
  294. package/dist/commands/ls.cjs +0 -143
  295. package/dist/commands/ls.mjs +0 -143
  296. package/dist/commands/ls.mjs.map +0 -1
  297. package/dist/commands/mount.mjs.map +0 -1
  298. package/dist/commands/read.cjs +0 -65
  299. package/dist/commands/read.mjs +0 -64
  300. package/dist/commands/read.mjs.map +0 -1
  301. package/dist/commands/serve.cjs +0 -144
  302. package/dist/commands/serve.mjs +0 -143
  303. package/dist/commands/serve.mjs.map +0 -1
  304. package/dist/commands/stat.cjs +0 -113
  305. package/dist/commands/stat.mjs +0 -112
  306. package/dist/commands/stat.mjs.map +0 -1
  307. package/dist/commands/write.cjs +0 -52
  308. package/dist/commands/write.mjs +0 -51
  309. package/dist/commands/write.mjs.map +0 -1
  310. package/dist/config/provider-factory.cjs +0 -93
  311. package/dist/config/provider-factory.mjs +0 -94
  312. package/dist/config/provider-factory.mjs.map +0 -1
  313. package/dist/config/uri-parser.cjs +0 -92
  314. package/dist/config/uri-parser.mjs +0 -92
  315. package/dist/config/uri-parser.mjs.map +0 -1
  316. package/dist/runtime.cjs +0 -96
  317. package/dist/runtime.mjs +0 -96
  318. package/dist/runtime.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain.d.mts","names":[],"sources":["../../../src/core/commands/explain.ts"],"mappings":";;;;;;;UAiBiB,aAAA;EACf,KAAA;EACA,WAAA;EACA,QAAA;AAAA;;;;UAoBe,WAAA;EACf,KAAA;AAAA;;;;iBAMc,oBAAA,CACd,OAAA,EAAS,qBAAA,GACR,aAAA,UAAuB,WAAA"}
@@ -0,0 +1,255 @@
1
+ import { formatExplainOutput, formatPathExplainOutput } from "../formatters/explain.mjs";
2
+ import { cliPathToCanonical } from "../../path-utils.mjs";
3
+ import "../path-utils.mjs";
4
+ import { resolveAFS } from "./types.mjs";
5
+ import { configMountListCommand } from "../../config/mount-commands.mjs";
6
+
7
+ //#region src/core/commands/explain.ts
8
+ /**
9
+ * Create explain command factory
10
+ */
11
+ function createExplainCommand(options) {
12
+ return {
13
+ command: "explain [topic]",
14
+ describe: "Explain AFS concepts or paths",
15
+ builder: { topic: {
16
+ type: "string",
17
+ description: "Topic (mount, path, uri) or AFS path (e.g., /src)"
18
+ } },
19
+ handler: async (argv) => {
20
+ const target = argv.topic;
21
+ if (!target) {
22
+ options.onResult({
23
+ command: "explain",
24
+ result: explainOverview(),
25
+ format: formatExplainOutput
26
+ });
27
+ return;
28
+ }
29
+ if (target.startsWith("/") || target.startsWith("@") || target.startsWith("$")) {
30
+ const result = await getPathExplanation(await resolveAFS(options), target, cliPathToCanonical(target));
31
+ options.onResult({
32
+ command: "explain",
33
+ result,
34
+ format: formatPathExplainOutput
35
+ });
36
+ } else {
37
+ const cwd = options.cwd ?? process.cwd();
38
+ let afs;
39
+ try {
40
+ afs = await resolveAFS(options);
41
+ } catch {}
42
+ const result = await getConceptExplanation(target.toLowerCase(), cwd, afs);
43
+ options.onResult({
44
+ command: "explain",
45
+ result,
46
+ format: formatExplainOutput
47
+ });
48
+ }
49
+ }
50
+ };
51
+ }
52
+ /**
53
+ * Get explanation for a path
54
+ */
55
+ async function getPathExplanation(afs, path, canonicalPath) {
56
+ try {
57
+ let entry;
58
+ try {
59
+ entry = (await afs.stat(canonicalPath)).data;
60
+ } catch {}
61
+ if (!entry) try {
62
+ entry = (await afs.read(canonicalPath)).data;
63
+ } catch {}
64
+ if (!entry) return {
65
+ path,
66
+ type: "unknown"
67
+ };
68
+ const metadata = entry.meta || {};
69
+ const entryType = metadata.kind === "afs:executable" ? "exec" : typeof metadata.childrenCount === "number" ? "directory" : "file";
70
+ const result = {
71
+ path: entry.path,
72
+ type: entryType,
73
+ description: metadata.description,
74
+ meta: {}
75
+ };
76
+ if (metadata.provider) result.meta.provider = String(metadata.provider);
77
+ if (metadata.permissions) {
78
+ const perms = metadata.permissions;
79
+ result.meta.permissions = Array.isArray(perms) ? perms.join(", ") : String(perms);
80
+ }
81
+ if (entryType === "exec") {
82
+ if (metadata.inputs) result.inputs = Array.isArray(metadata.inputs) ? metadata.inputs : [String(metadata.inputs)];
83
+ if (metadata.outputs) result.outputs = Array.isArray(metadata.outputs) ? metadata.outputs : [String(metadata.outputs)];
84
+ if (metadata.errors) result.errors = Array.isArray(metadata.errors) ? metadata.errors : [String(metadata.errors)];
85
+ if (metadata.sideEffects) result.sideEffects = Array.isArray(metadata.sideEffects) ? metadata.sideEffects : [String(metadata.sideEffects)];
86
+ }
87
+ if (Object.keys(result.meta).length === 0) delete result.meta;
88
+ return result;
89
+ } catch (err) {
90
+ return {
91
+ path,
92
+ type: "error",
93
+ description: err instanceof Error ? err.message : String(err)
94
+ };
95
+ }
96
+ }
97
+ /**
98
+ * Get explanation for a concept
99
+ */
100
+ async function getConceptExplanation(topic, cwd, afs) {
101
+ switch (topic) {
102
+ case "mount":
103
+ case "mounts": return explainMounts(cwd, afs);
104
+ case "path":
105
+ case "paths": return explainPaths();
106
+ case "uri":
107
+ case "provider":
108
+ case "providers": return explainUri();
109
+ default: return {
110
+ topic: "Unknown Topic",
111
+ explanation: `Unknown topic: ${topic}\n\nAvailable topics: overview, mount, path, uri`
112
+ };
113
+ }
114
+ }
115
+ function explainOverview() {
116
+ return {
117
+ topic: "AFS Overview",
118
+ explanation: `AFS (Abstract File System) is a virtual filesystem that unifies different data sources into a single namespace.
119
+
120
+ Core Concepts:
121
+ - mount: Mount a data source to a virtual path
122
+ - path: Virtual path, e.g., /src, /data
123
+ - uri: Data source address, e.g., fs://, git://, sqlite://
124
+
125
+ Data Flow:
126
+ User Path -> AFS -> /{mount} -> Provider -> Actual Data`,
127
+ examples: [
128
+ "afs mount add /src fs:///path/to/source",
129
+ "afs ls /src",
130
+ "afs read /src/file.txt"
131
+ ]
132
+ };
133
+ }
134
+ async function explainMounts(cwd, afs) {
135
+ const result = await configMountListCommand(cwd);
136
+ if (result.mounts.length === 0) {
137
+ if (afs) try {
138
+ const listResult = await afs.list("$afs:/");
139
+ if (listResult.data?.length) return {
140
+ topic: "Mounts",
141
+ explanation: `Runtime mounts (mounted via API):\n\n${listResult.data.map((entry) => ` ${entry.path} (runtime mount)`).join("\n")}`,
142
+ examples: listResult.data.slice(0, 3).map((entry) => `afs ls ${entry.path}`)
143
+ };
144
+ } catch {}
145
+ return {
146
+ topic: "Mounts",
147
+ explanation: `No mounts configured.
148
+
149
+ Use mount add to add a mount:
150
+ afs mount add <path> <uri>
151
+
152
+ path: Virtual path for accessing data in AFS
153
+ uri: Data source URI specifying the data origin`,
154
+ examples: ["afs mount add /src fs:///Users/me/project", "afs mount add /data sqlite:///data.db"]
155
+ };
156
+ }
157
+ return {
158
+ topic: "Mounts",
159
+ explanation: `Current mount configuration:
160
+
161
+ ${result.mounts.map((m) => ` ${m.path}${m.description ? ` - ${m.description}` : ""}`).join("\n")}
162
+
163
+ After mounting, data is accessed via the mount path:
164
+ path="/src" -> /src`,
165
+ examples: result.mounts.map((m) => `afs ls ${m.path}`)
166
+ };
167
+ }
168
+ function explainPaths() {
169
+ return {
170
+ topic: "Paths",
171
+ explanation: `AFS Path Structure:
172
+
173
+ / Root directory
174
+ /{mount} Mounted data source
175
+ /{mount}/{path} Files/nodes within a mount
176
+
177
+ Path Mapping:
178
+ config: path="/src" -> access: /src
179
+ config: path="/data" -> access: /data
180
+
181
+ Mounts are accessed directly at their configured path.`
182
+ };
183
+ }
184
+ function explainUri() {
185
+ return {
186
+ topic: "URI",
187
+ explanation: `AFS URI Schemes and Objects:
188
+
189
+ fs:// Local Filesystem Provider
190
+ Format: fs:///absolute/path or fs://./relative/path
191
+ Operations: list, read, write, delete
192
+
193
+ git:// Git Repository Provider
194
+ Format: git:///local/repo or git://github.com/user/repo?branch=main
195
+ Operations: list, read, exec (diff, create-branch, commit, merge)
196
+
197
+ sqlite:// SQLite Database Provider
198
+ Format: sqlite:///path/to/db.sqlite
199
+ Operations: list, read, exec (SQL queries)
200
+
201
+ json:// JSON Data Provider
202
+ Format: json:///path/to/data.json
203
+ Operations: list, read, write
204
+
205
+ toml:// TOML Data Provider
206
+ Format: toml:///path/to/config.toml
207
+ Operations: list, read, write
208
+
209
+ sandbox:// Sandboxed Script Execution Provider
210
+ Format: sandbox:///path/to/scripts
211
+ Operations: list, read, exec
212
+
213
+ github:// GitHub Issues/PRs Provider
214
+ Format: github://owner/repo
215
+ Operations: list, read, exec (create-issue, close-issue, etc.)
216
+
217
+ http:// HTTP Proxy Provider
218
+ Format: http://host:port/path
219
+ Operations: list, read
220
+
221
+ mcp:// MCP Server Provider
222
+ Format: mcp:///path/to/server
223
+ Operations: list, read, exec
224
+
225
+ s3:// AWS S3 Storage Provider
226
+ Format: s3://bucket-name
227
+ Operations: list, read, write, delete
228
+
229
+ gcs:// Google Cloud Storage Provider
230
+ Format: gcs://bucket-name
231
+ Operations: list, read, write, delete
232
+
233
+ ec2:// AWS EC2 Instances Provider
234
+ Format: ec2://region
235
+ Operations: list, read, exec (run-instances)
236
+
237
+ gce:// Google Compute Engine Provider
238
+ Format: gce://project/zone
239
+ Operations: list, read, exec
240
+
241
+ dns:// Cloud DNS Provider
242
+ Format: dns://provider (route53, clouddns)
243
+ Operations: list, read`,
244
+ examples: [
245
+ "afs mount add /src fs:///Users/me/project",
246
+ "afs mount add /repo git://github.com/user/repo",
247
+ "afs mount add /db sqlite:///data.sqlite",
248
+ "afs mount add /s3 s3://my-bucket"
249
+ ]
250
+ };
251
+ }
252
+
253
+ //#endregion
254
+ export { createExplainCommand };
255
+ //# sourceMappingURL=explain.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain.mjs","names":[],"sources":["../../../src/core/commands/explain.ts"],"sourcesContent":["/**\n * explain Command - Core Implementation\n *\n * Explains AFS paths or concepts.\n * Matches old version output format with topic/explanation/examples structure.\n */\n\nimport type { AFS } from \"@aigne/afs\";\nimport type { CommandModule } from \"yargs\";\nimport { configMountListCommand } from \"../../config/mount-commands.js\";\nimport { formatExplainOutput, formatPathExplainOutput } from \"../formatters/index.js\";\nimport { cliPathToCanonical } from \"../path-utils.js\";\nimport { type CommandFactoryOptions, resolveAFS } from \"./types.js\";\n\n/**\n * Result for concept explanations (mount, paths, uri, overview)\n */\nexport interface ExplainResult {\n topic: string;\n explanation: string;\n examples?: string[];\n}\n\n/**\n * Result for path explanations\n */\nexport interface PathExplainResult {\n path: string;\n type: string;\n description?: string;\n inputs?: string[];\n outputs?: string[];\n errors?: string[];\n sideEffects?: string[];\n meta?: Record<string, string>;\n}\n\n/**\n * Explain command arguments\n */\nexport interface ExplainArgs {\n topic?: string;\n}\n\n/**\n * Create explain command factory\n */\nexport function createExplainCommand(\n options: CommandFactoryOptions,\n): CommandModule<unknown, ExplainArgs> {\n return {\n command: \"explain [topic]\",\n describe: \"Explain AFS concepts or paths\",\n builder: {\n topic: {\n type: \"string\",\n description: \"Topic (mount, path, uri) or AFS path (e.g., /src)\",\n },\n },\n handler: async (argv) => {\n const target = argv.topic;\n\n // No target - explain overview\n if (!target) {\n options.onResult({\n command: \"explain\",\n result: explainOverview(),\n format: formatExplainOutput,\n });\n return;\n }\n\n // Check if it's a path (starts with /, @, or $)\n const isPath = target.startsWith(\"/\") || target.startsWith(\"@\") || target.startsWith(\"$\");\n\n if (isPath) {\n const afs = await resolveAFS(options);\n const canonicalPath = cliPathToCanonical(target);\n const result = await getPathExplanation(afs, target, canonicalPath);\n options.onResult({ command: \"explain\", result, format: formatPathExplainOutput });\n } else {\n const cwd = options.cwd ?? process.cwd();\n // Pass AFS instance for runtime mount info (DOC-2)\n let afs: AFS | undefined;\n try {\n afs = await resolveAFS(options);\n } catch {}\n const result = await getConceptExplanation(target.toLowerCase(), cwd, afs);\n options.onResult({\n command: \"explain\",\n result,\n format: formatExplainOutput,\n });\n }\n },\n };\n}\n\n/**\n * Get explanation for a path\n */\nasync function getPathExplanation(\n afs: AFS,\n path: string,\n canonicalPath: string,\n): Promise<PathExplainResult> {\n try {\n // Try stat first (lightweight metadata query), fallback to read\n let entry:\n | { path: string; meta?: Record<string, unknown> | null; content?: unknown }\n | undefined;\n\n try {\n const statResult = await afs.stat(canonicalPath);\n entry = statResult.data;\n } catch {}\n\n if (!entry) {\n try {\n const readResult = await afs.read(canonicalPath);\n entry = readResult.data;\n } catch {}\n }\n\n if (!entry) {\n return {\n path,\n type: \"unknown\",\n };\n }\n\n const metadata = entry.meta || {};\n // Determine type from childrenCount: if defined, it has children (directory-like); otherwise file-like\n const entryType =\n metadata.kind === \"afs:executable\"\n ? \"exec\"\n : typeof metadata.childrenCount === \"number\"\n ? \"directory\"\n : \"file\";\n\n const result: PathExplainResult = {\n path: entry.path,\n type: entryType,\n description: metadata.description as string | undefined,\n meta: {},\n };\n\n // Add metadata\n if (metadata.provider) {\n result.meta!.provider = String(metadata.provider);\n }\n if (metadata.permissions) {\n const perms = metadata.permissions;\n result.meta!.permissions = Array.isArray(perms) ? perms.join(\", \") : String(perms);\n }\n\n // For exec type, try to get schema info\n if (entryType === \"exec\") {\n if (metadata.inputs) {\n result.inputs = Array.isArray(metadata.inputs)\n ? (metadata.inputs as string[])\n : [String(metadata.inputs)];\n }\n if (metadata.outputs) {\n result.outputs = Array.isArray(metadata.outputs)\n ? (metadata.outputs as string[])\n : [String(metadata.outputs)];\n }\n if (metadata.errors) {\n result.errors = Array.isArray(metadata.errors)\n ? (metadata.errors as string[])\n : [String(metadata.errors)];\n }\n if (metadata.sideEffects) {\n result.sideEffects = Array.isArray(metadata.sideEffects)\n ? (metadata.sideEffects as string[])\n : [String(metadata.sideEffects)];\n }\n }\n\n // Clean up empty metadata\n if (Object.keys(result.meta!).length === 0) {\n delete result.meta;\n }\n\n return result;\n } catch (err) {\n return {\n path,\n type: \"error\",\n description: err instanceof Error ? err.message : String(err),\n };\n }\n}\n\n/**\n * Get explanation for a concept\n */\nasync function getConceptExplanation(\n topic: string,\n cwd: string,\n afs?: AFS,\n): Promise<ExplainResult> {\n switch (topic) {\n case \"mount\":\n case \"mounts\":\n return explainMounts(cwd, afs);\n case \"path\":\n case \"paths\":\n return explainPaths();\n case \"uri\":\n case \"provider\":\n case \"providers\":\n return explainUri();\n default:\n return {\n topic: \"Unknown Topic\",\n explanation: `Unknown topic: ${topic}\\n\\nAvailable topics: overview, mount, path, uri`,\n };\n }\n}\n\nfunction explainOverview(): ExplainResult {\n return {\n topic: \"AFS Overview\",\n explanation: `AFS (Abstract File System) is a virtual filesystem that unifies different data sources into a single namespace.\n\nCore Concepts:\n- mount: Mount a data source to a virtual path\n- path: Virtual path, e.g., /src, /data\n- uri: Data source address, e.g., fs://, git://, sqlite://\n\nData Flow:\n User Path -> AFS -> /{mount} -> Provider -> Actual Data`,\n examples: [\"afs mount add /src fs:///path/to/source\", \"afs ls /src\", \"afs read /src/file.txt\"],\n };\n}\n\nasync function explainMounts(cwd: string, afs?: AFS): Promise<ExplainResult> {\n const result = await configMountListCommand(cwd);\n\n if (result.mounts.length === 0) {\n // Try runtime mounts if no config mounts\n if (afs) {\n try {\n const listResult = await afs.list(\"$afs:/\");\n if (listResult.data?.length) {\n const runtimeMounts = listResult.data\n .map((entry) => ` ${entry.path} (runtime mount)`)\n .join(\"\\n\");\n\n return {\n topic: \"Mounts\",\n explanation: `Runtime mounts (mounted via API):\\n\\n${runtimeMounts}`,\n examples: listResult.data.slice(0, 3).map((entry) => `afs ls ${entry.path}`),\n };\n }\n } catch {}\n }\n\n return {\n topic: \"Mounts\",\n explanation: `No mounts configured.\n\nUse mount add to add a mount:\n afs mount add <path> <uri>\n\npath: Virtual path for accessing data in AFS\nuri: Data source URI specifying the data origin`,\n examples: [\n \"afs mount add /src fs:///Users/me/project\",\n \"afs mount add /data sqlite:///data.db\",\n ],\n };\n }\n\n const mountList = result.mounts\n .map((m) => ` ${m.path}${m.description ? ` - ${m.description}` : \"\"}`)\n .join(\"\\n\");\n\n return {\n topic: \"Mounts\",\n explanation: `Current mount configuration:\n\n${mountList}\n\nAfter mounting, data is accessed via the mount path:\n path=\"/src\" -> /src`,\n examples: result.mounts.map((m) => `afs ls ${m.path}`),\n };\n}\n\nfunction explainPaths(): ExplainResult {\n return {\n topic: \"Paths\",\n explanation: `AFS Path Structure:\n\n/ Root directory\n/{mount} Mounted data source\n/{mount}/{path} Files/nodes within a mount\n\nPath Mapping:\n config: path=\"/src\" -> access: /src\n config: path=\"/data\" -> access: /data\n\nMounts are accessed directly at their configured path.`,\n };\n}\n\nfunction explainUri(): ExplainResult {\n return {\n topic: \"URI\",\n explanation: `AFS URI Schemes and Objects:\n\nfs:// Local Filesystem Provider\n Format: fs:///absolute/path or fs://./relative/path\n Operations: list, read, write, delete\n\ngit:// Git Repository Provider\n Format: git:///local/repo or git://github.com/user/repo?branch=main\n Operations: list, read, exec (diff, create-branch, commit, merge)\n\nsqlite:// SQLite Database Provider\n Format: sqlite:///path/to/db.sqlite\n Operations: list, read, exec (SQL queries)\n\njson:// JSON Data Provider\n Format: json:///path/to/data.json\n Operations: list, read, write\n\ntoml:// TOML Data Provider\n Format: toml:///path/to/config.toml\n Operations: list, read, write\n\nsandbox:// Sandboxed Script Execution Provider\n Format: sandbox:///path/to/scripts\n Operations: list, read, exec\n\ngithub:// GitHub Issues/PRs Provider\n Format: github://owner/repo\n Operations: list, read, exec (create-issue, close-issue, etc.)\n\nhttp:// HTTP Proxy Provider\n Format: http://host:port/path\n Operations: list, read\n\nmcp:// MCP Server Provider\n Format: mcp:///path/to/server\n Operations: list, read, exec\n\ns3:// AWS S3 Storage Provider\n Format: s3://bucket-name\n Operations: list, read, write, delete\n\ngcs:// Google Cloud Storage Provider\n Format: gcs://bucket-name\n Operations: list, read, write, delete\n\nec2:// AWS EC2 Instances Provider\n Format: ec2://region\n Operations: list, read, exec (run-instances)\n\ngce:// Google Compute Engine Provider\n Format: gce://project/zone\n Operations: list, read, exec\n\ndns:// Cloud DNS Provider\n Format: dns://provider (route53, clouddns)\n Operations: list, read`,\n examples: [\n \"afs mount add /src fs:///Users/me/project\",\n \"afs mount add /repo git://github.com/user/repo\",\n \"afs mount add /db sqlite:///data.sqlite\",\n \"afs mount add /s3 s3://my-bucket\",\n ],\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ const require_types = require('./types.cjs');
2
+ const require_version = require('../../version.cjs');
3
+
4
+ //#region src/core/commands/explore.ts
5
+ /**
6
+ * Create explore command
7
+ */
8
+ function createExploreCommand(options) {
9
+ return {
10
+ command: "explore [path]",
11
+ describe: "Interactive TUI explorer",
12
+ builder: { path: {
13
+ type: "string",
14
+ default: "/",
15
+ description: "Starting path"
16
+ } },
17
+ handler: async (argv) => {
18
+ const afs = await require_types.resolveAFS(options);
19
+ const { createExplorerScreen } = await Promise.resolve().then(() => require("../../explorer/screen.cjs"));
20
+ await createExplorerScreen({
21
+ afs,
22
+ startPath: argv.path,
23
+ version: require_version.VERSION
24
+ });
25
+ }
26
+ };
27
+ }
28
+
29
+ //#endregion
30
+ exports.createExploreCommand = createExploreCommand;
@@ -0,0 +1,2 @@
1
+ import "./types.mjs";
2
+ import { CommandModule } from "yargs";
@@ -0,0 +1,31 @@
1
+ import { resolveAFS } from "./types.mjs";
2
+ import { VERSION } from "../../version.mjs";
3
+
4
+ //#region src/core/commands/explore.ts
5
+ /**
6
+ * Create explore command
7
+ */
8
+ function createExploreCommand(options) {
9
+ return {
10
+ command: "explore [path]",
11
+ describe: "Interactive TUI explorer",
12
+ builder: { path: {
13
+ type: "string",
14
+ default: "/",
15
+ description: "Starting path"
16
+ } },
17
+ handler: async (argv) => {
18
+ const afs = await resolveAFS(options);
19
+ const { createExplorerScreen } = await import("../../explorer/screen.mjs");
20
+ await createExplorerScreen({
21
+ afs,
22
+ startPath: argv.path,
23
+ version: VERSION
24
+ });
25
+ }
26
+ };
27
+ }
28
+
29
+ //#endregion
30
+ export { createExploreCommand };
31
+ //# sourceMappingURL=explore.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explore.mjs","names":[],"sources":["../../../src/core/commands/explore.ts"],"sourcesContent":["/**\n * AFS Explore Command\n *\n * Interactive TUI explorer for AFS\n */\n\nimport type { CommandModule } from \"yargs\";\nimport { VERSION } from \"../../version.js\";\nimport { type CommandFactoryOptions, resolveAFS } from \"./types.js\";\n\nexport interface ExploreArgs {\n path: string;\n}\n\n/**\n * Create explore command\n */\nexport function createExploreCommand(\n options: CommandFactoryOptions,\n): CommandModule<unknown, ExploreArgs> {\n return {\n command: \"explore [path]\",\n describe: \"Interactive TUI explorer\",\n builder: {\n path: { type: \"string\", default: \"/\", description: \"Starting path\" },\n },\n handler: async (argv) => {\n const afs = await resolveAFS(options);\n const { createExplorerScreen } = await import(\"../../explorer/screen.js\");\n await createExplorerScreen({ afs, startPath: argv.path, version: VERSION });\n },\n };\n}\n"],"mappings":";;;;;;;AAiBA,SAAgB,qBACd,SACqC;AACrC,QAAO;EACL,SAAS;EACT,UAAU;EACV,SAAS,EACP,MAAM;GAAE,MAAM;GAAU,SAAS;GAAK,aAAa;GAAiB,EACrE;EACD,SAAS,OAAO,SAAS;GACvB,MAAM,MAAM,MAAM,WAAW,QAAQ;GACrC,MAAM,EAAE,yBAAyB,MAAM,OAAO;AAC9C,SAAM,qBAAqB;IAAE;IAAK,WAAW,KAAK;IAAM,SAAS;IAAS,CAAC;;EAE9E"}
@@ -0,0 +1,36 @@
1
+ const require_types = require('./types.cjs');
2
+ const require_delete = require('./delete.cjs');
3
+ const require_exec_args = require('../helpers/exec-args.cjs');
4
+ const require_exec = require('./exec.cjs');
5
+ const require_explain = require('./explain.cjs');
6
+ const require_explore = require('./explore.cjs');
7
+ const require_ls = require('./ls.cjs');
8
+ const require_mount = require('./mount.cjs');
9
+ const require_read = require('./read.cjs');
10
+ const require_search = require('./search.cjs');
11
+ const require_serve = require('./serve.cjs');
12
+ const require_stat = require('./stat.cjs');
13
+ const require_write = require('./write.cjs');
14
+
15
+ //#region src/core/commands/index.ts
16
+ /**
17
+ * Array of all command factories
18
+ *
19
+ * Used by AFSCommandExecutor to register all commands.
20
+ */
21
+ const commandFactories = [
22
+ require_ls.createLsCommand,
23
+ require_read.createReadCommand,
24
+ require_write.createWriteCommand,
25
+ require_delete.createDeleteCommand,
26
+ require_stat.createStatCommand,
27
+ require_exec.createExecCommand,
28
+ require_explain.createExplainCommand,
29
+ require_search.createSearchCommand,
30
+ require_mount.createMountCommand,
31
+ require_serve.createServeCommand,
32
+ require_explore.createExploreCommand
33
+ ];
34
+
35
+ //#endregion
36
+ exports.commandFactories = commandFactories;
@@ -0,0 +1,21 @@
1
+ import { CommandFactory, CommandFactoryOptions, CommandOutput, FormatFunction } from "./types.cjs";
2
+ import { DeleteArgs, createDeleteCommand } from "./delete.cjs";
3
+ import { parseExecArgs, parseValueBySchema } from "../helpers/exec-args.cjs";
4
+ import { ExecArgs, createExecCommand } from "./exec.cjs";
5
+ import { ExplainArgs, createExplainCommand } from "./explain.cjs";
6
+ import { LsArgs, createLsCommand } from "./ls.cjs";
7
+ import { MountAddArgs, MountListArgs, MountRemoveArgs, createMountCommand } from "./mount.cjs";
8
+ import { ReadArgs, createReadCommand } from "./read.cjs";
9
+ import { StatArgs, createStatCommand } from "./stat.cjs";
10
+ import { WriteArgs, createWriteCommand } from "./write.cjs";
11
+
12
+ //#region src/core/commands/index.d.ts
13
+ /**
14
+ * Array of all command factories
15
+ *
16
+ * Used by AFSCommandExecutor to register all commands.
17
+ */
18
+ declare const commandFactories: CommandFactory[];
19
+ //#endregion
20
+ export { commandFactories };
21
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../../../src/core/commands/index.ts"],"mappings":";;;;;;;;;;;;;;;;;cAmDa,gBAAA,EAAkB,cAAA"}
@@ -0,0 +1,24 @@
1
+ import { CommandFactory, CommandFactoryOptions, CommandOutput, FormatFunction } from "./types.mjs";
2
+ import { DeleteArgs, createDeleteCommand } from "./delete.mjs";
3
+ import { parseExecArgs, parseValueBySchema } from "../helpers/exec-args.mjs";
4
+ import { ExecArgs, createExecCommand } from "./exec.mjs";
5
+ import { ExplainArgs, createExplainCommand } from "./explain.mjs";
6
+ import "./explore.mjs";
7
+ import { LsArgs, createLsCommand } from "./ls.mjs";
8
+ import { MountAddArgs, MountListArgs, MountRemoveArgs, createMountCommand } from "./mount.mjs";
9
+ import { ReadArgs, createReadCommand } from "./read.mjs";
10
+ import "./search.mjs";
11
+ import "./serve.mjs";
12
+ import { StatArgs, createStatCommand } from "./stat.mjs";
13
+ import { WriteArgs, createWriteCommand } from "./write.mjs";
14
+
15
+ //#region src/core/commands/index.d.ts
16
+ /**
17
+ * Array of all command factories
18
+ *
19
+ * Used by AFSCommandExecutor to register all commands.
20
+ */
21
+ declare const commandFactories: CommandFactory[];
22
+ //#endregion
23
+ export { commandFactories };
24
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/core/commands/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;cAmDa,gBAAA,EAAkB,cAAA"}
@@ -0,0 +1,37 @@
1
+ import { resolveAFS } from "./types.mjs";
2
+ import { createDeleteCommand } from "./delete.mjs";
3
+ import { parseExecArgs, parseValueBySchema } from "../helpers/exec-args.mjs";
4
+ import { createExecCommand } from "./exec.mjs";
5
+ import { createExplainCommand } from "./explain.mjs";
6
+ import { createExploreCommand } from "./explore.mjs";
7
+ import { createLsCommand } from "./ls.mjs";
8
+ import { createMountCommand } from "./mount.mjs";
9
+ import { createReadCommand } from "./read.mjs";
10
+ import { createSearchCommand } from "./search.mjs";
11
+ import { createServeCommand } from "./serve.mjs";
12
+ import { createStatCommand } from "./stat.mjs";
13
+ import { createWriteCommand } from "./write.mjs";
14
+
15
+ //#region src/core/commands/index.ts
16
+ /**
17
+ * Array of all command factories
18
+ *
19
+ * Used by AFSCommandExecutor to register all commands.
20
+ */
21
+ const commandFactories = [
22
+ createLsCommand,
23
+ createReadCommand,
24
+ createWriteCommand,
25
+ createDeleteCommand,
26
+ createStatCommand,
27
+ createExecCommand,
28
+ createExplainCommand,
29
+ createSearchCommand,
30
+ createMountCommand,
31
+ createServeCommand,
32
+ createExploreCommand
33
+ ];
34
+
35
+ //#endregion
36
+ export { commandFactories };
37
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/core/commands/index.ts"],"sourcesContent":["/**\n * CLI Core Commands\n *\n * Re-exports all command implementations and factories.\n */\n\n// Command factories and types\nexport { createDeleteCommand, type DeleteArgs } from \"./delete.js\";\nexport { createExecCommand, type ExecArgs, parseExecArgs, parseValueBySchema } from \"./exec.js\";\nexport { createExplainCommand, type ExplainArgs } from \"./explain.js\";\nexport { createExploreCommand, type ExploreArgs } from \"./explore.js\";\nexport { createLsCommand, type LsArgs } from \"./ls.js\";\nexport {\n createMountCommand,\n type MountAddArgs,\n type MountListArgs,\n type MountRemoveArgs,\n} from \"./mount.js\";\nexport { createReadCommand, type ReadArgs } from \"./read.js\";\nexport { createSearchCommand, type SearchArgs } from \"./search.js\";\nexport { createServeCommand, type ServeArgs, type ServeResult } from \"./serve.js\";\nexport { createStatCommand, type StatArgs } from \"./stat.js\";\n// Types and helpers\nexport type {\n CommandFactory,\n CommandFactoryOptions,\n CommandOutput,\n FormatFunction,\n} from \"./types.js\";\nexport { resolveAFS } from \"./types.js\";\nexport { createWriteCommand, type WriteArgs } from \"./write.js\";\n\n// Import factories for array export\nimport { createDeleteCommand } from \"./delete.js\";\nimport { createExecCommand } from \"./exec.js\";\nimport { createExplainCommand } from \"./explain.js\";\nimport { createExploreCommand } from \"./explore.js\";\nimport { createLsCommand } from \"./ls.js\";\nimport { createMountCommand } from \"./mount.js\";\nimport { createReadCommand } from \"./read.js\";\nimport { createSearchCommand } from \"./search.js\";\nimport { createServeCommand } from \"./serve.js\";\nimport { createStatCommand } from \"./stat.js\";\nimport type { CommandFactory } from \"./types.js\";\nimport { createWriteCommand } from \"./write.js\";\n\n/**\n * Array of all command factories\n *\n * Used by AFSCommandExecutor to register all commands.\n */\nexport const commandFactories: CommandFactory[] = [\n createLsCommand,\n createReadCommand,\n createWriteCommand,\n createDeleteCommand,\n createStatCommand,\n createExecCommand,\n createExplainCommand,\n createSearchCommand,\n createMountCommand,\n createServeCommand,\n createExploreCommand,\n];\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAmDA,MAAa,mBAAqC;CAChD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD"}
@@ -0,0 +1,57 @@
1
+ const require_ls = require('../formatters/ls.cjs');
2
+ const require_path_utils = require('../../path-utils.cjs');
3
+ require('../path-utils.cjs');
4
+ const require_types = require('./types.cjs');
5
+
6
+ //#region src/core/commands/ls.ts
7
+ /**
8
+ * Create ls command factory
9
+ */
10
+ function createLsCommand(options) {
11
+ return {
12
+ command: ["ls [path]", "list [path]"],
13
+ describe: "List directory contents",
14
+ builder: {
15
+ path: {
16
+ type: "string",
17
+ default: "/",
18
+ description: "Path to list"
19
+ },
20
+ depth: {
21
+ type: "number",
22
+ default: 1,
23
+ description: "Maximum depth to list"
24
+ },
25
+ limit: {
26
+ type: "number",
27
+ description: "Maximum number of entries to return"
28
+ },
29
+ "max-children": {
30
+ type: "number",
31
+ description: "Maximum children per directory"
32
+ },
33
+ pattern: {
34
+ type: "string",
35
+ description: "Glob pattern to filter entries"
36
+ }
37
+ },
38
+ handler: async (argv) => {
39
+ const afs = await require_types.resolveAFS(options);
40
+ const canonicalPath = require_path_utils.cliPathToCanonical(argv.path || "/");
41
+ const result = await afs.list(canonicalPath, {
42
+ maxDepth: argv.depth ?? 1,
43
+ limit: argv.limit,
44
+ maxChildren: argv.maxChildren,
45
+ pattern: argv.pattern
46
+ });
47
+ options.onResult({
48
+ command: "ls",
49
+ result,
50
+ format: require_ls.formatLsOutput
51
+ });
52
+ }
53
+ };
54
+ }
55
+
56
+ //#endregion
57
+ exports.createLsCommand = createLsCommand;
@@ -0,0 +1,21 @@
1
+ import { CommandFactoryOptions } from "./types.cjs";
2
+ import { CommandModule } from "yargs";
3
+
4
+ //#region src/core/commands/ls.d.ts
5
+ /**
6
+ * Ls command arguments
7
+ */
8
+ interface LsArgs {
9
+ path: string;
10
+ depth: number;
11
+ limit?: number;
12
+ maxChildren?: number;
13
+ pattern?: string;
14
+ }
15
+ /**
16
+ * Create ls command factory
17
+ */
18
+ declare function createLsCommand(options: CommandFactoryOptions): CommandModule<unknown, LsArgs>;
19
+ //#endregion
20
+ export { LsArgs, createLsCommand };
21
+ //# sourceMappingURL=ls.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ls.d.cts","names":[],"sources":["../../../src/core/commands/ls.ts"],"mappings":";;;;;;;UAeiB,MAAA;EACf,IAAA;EACA,KAAA;EACA,KAAA;EACA,WAAA;EACA,OAAA;AAAA;;;;iBAMc,eAAA,CAAgB,OAAA,EAAS,qBAAA,GAAwB,aAAA,UAAuB,MAAA"}
@@ -0,0 +1,21 @@
1
+ import { CommandFactoryOptions } from "./types.mjs";
2
+ import { CommandModule } from "yargs";
3
+
4
+ //#region src/core/commands/ls.d.ts
5
+ /**
6
+ * Ls command arguments
7
+ */
8
+ interface LsArgs {
9
+ path: string;
10
+ depth: number;
11
+ limit?: number;
12
+ maxChildren?: number;
13
+ pattern?: string;
14
+ }
15
+ /**
16
+ * Create ls command factory
17
+ */
18
+ declare function createLsCommand(options: CommandFactoryOptions): CommandModule<unknown, LsArgs>;
19
+ //#endregion
20
+ export { LsArgs, createLsCommand };
21
+ //# sourceMappingURL=ls.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ls.d.mts","names":[],"sources":["../../../src/core/commands/ls.ts"],"mappings":";;;;;;;UAeiB,MAAA;EACf,IAAA;EACA,KAAA;EACA,KAAA;EACA,WAAA;EACA,OAAA;AAAA;;;;iBAMc,eAAA,CAAgB,OAAA,EAAS,qBAAA,GAAwB,aAAA,UAAuB,MAAA"}
@@ -0,0 +1,58 @@
1
+ import { formatLsOutput } from "../formatters/ls.mjs";
2
+ import { cliPathToCanonical } from "../../path-utils.mjs";
3
+ import "../path-utils.mjs";
4
+ import { resolveAFS } from "./types.mjs";
5
+
6
+ //#region src/core/commands/ls.ts
7
+ /**
8
+ * Create ls command factory
9
+ */
10
+ function createLsCommand(options) {
11
+ return {
12
+ command: ["ls [path]", "list [path]"],
13
+ describe: "List directory contents",
14
+ builder: {
15
+ path: {
16
+ type: "string",
17
+ default: "/",
18
+ description: "Path to list"
19
+ },
20
+ depth: {
21
+ type: "number",
22
+ default: 1,
23
+ description: "Maximum depth to list"
24
+ },
25
+ limit: {
26
+ type: "number",
27
+ description: "Maximum number of entries to return"
28
+ },
29
+ "max-children": {
30
+ type: "number",
31
+ description: "Maximum children per directory"
32
+ },
33
+ pattern: {
34
+ type: "string",
35
+ description: "Glob pattern to filter entries"
36
+ }
37
+ },
38
+ handler: async (argv) => {
39
+ const afs = await resolveAFS(options);
40
+ const canonicalPath = cliPathToCanonical(argv.path || "/");
41
+ const result = await afs.list(canonicalPath, {
42
+ maxDepth: argv.depth ?? 1,
43
+ limit: argv.limit,
44
+ maxChildren: argv.maxChildren,
45
+ pattern: argv.pattern
46
+ });
47
+ options.onResult({
48
+ command: "ls",
49
+ result,
50
+ format: formatLsOutput
51
+ });
52
+ }
53
+ };
54
+ }
55
+
56
+ //#endregion
57
+ export { createLsCommand };
58
+ //# sourceMappingURL=ls.mjs.map