@aigne/afs-cli 1.11.0-beta.6 → 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 (317) hide show
  1. package/dist/cli.cjs +27 -353
  2. package/dist/cli.d.cts +2 -1
  3. package/dist/cli.d.mts +2 -1
  4. package/dist/cli.mjs +28 -353
  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 +2 -2
  14. package/dist/config/loader.mjs +2 -2
  15. package/dist/{commands/mount.cjs → config/mount-commands.cjs} +13 -49
  16. package/dist/config/mount-commands.d.cts +20 -0
  17. package/dist/config/mount-commands.d.cts.map +1 -0
  18. package/dist/config/mount-commands.d.mts +20 -0
  19. package/dist/config/mount-commands.d.mts.map +1 -0
  20. package/dist/{commands/mount.mjs → config/mount-commands.mjs} +14 -49
  21. package/dist/config/mount-commands.mjs.map +1 -0
  22. package/dist/config/schema.cjs +9 -1
  23. package/dist/config/schema.mjs +9 -1
  24. package/dist/config/schema.mjs.map +1 -1
  25. package/dist/core/commands/delete.cjs +41 -0
  26. package/dist/core/commands/delete.d.cts +18 -0
  27. package/dist/core/commands/delete.d.cts.map +1 -0
  28. package/dist/core/commands/delete.d.mts +18 -0
  29. package/dist/core/commands/delete.d.mts.map +1 -0
  30. package/dist/core/commands/delete.mjs +42 -0
  31. package/dist/core/commands/delete.mjs.map +1 -0
  32. package/dist/core/commands/exec.cjs +95 -0
  33. package/dist/core/commands/exec.d.cts +26 -0
  34. package/dist/core/commands/exec.d.cts.map +1 -0
  35. package/dist/core/commands/exec.d.mts +26 -0
  36. package/dist/core/commands/exec.d.mts.map +1 -0
  37. package/dist/core/commands/exec.mjs +96 -0
  38. package/dist/core/commands/exec.mjs.map +1 -0
  39. package/dist/core/commands/explain.cjs +254 -0
  40. package/dist/core/commands/explain.d.cts +25 -0
  41. package/dist/core/commands/explain.d.cts.map +1 -0
  42. package/dist/core/commands/explain.d.mts +25 -0
  43. package/dist/core/commands/explain.d.mts.map +1 -0
  44. package/dist/core/commands/explain.mjs +255 -0
  45. package/dist/core/commands/explain.mjs.map +1 -0
  46. package/dist/core/commands/explore.cjs +30 -0
  47. package/dist/core/commands/explore.d.mts +2 -0
  48. package/dist/core/commands/explore.mjs +31 -0
  49. package/dist/core/commands/explore.mjs.map +1 -0
  50. package/dist/core/commands/index.cjs +36 -0
  51. package/dist/core/commands/index.d.cts +21 -0
  52. package/dist/core/commands/index.d.cts.map +1 -0
  53. package/dist/core/commands/index.d.mts +24 -0
  54. package/dist/core/commands/index.d.mts.map +1 -0
  55. package/dist/core/commands/index.mjs +37 -0
  56. package/dist/core/commands/index.mjs.map +1 -0
  57. package/dist/core/commands/ls.cjs +57 -0
  58. package/dist/core/commands/ls.d.cts +21 -0
  59. package/dist/core/commands/ls.d.cts.map +1 -0
  60. package/dist/core/commands/ls.d.mts +21 -0
  61. package/dist/core/commands/ls.d.mts.map +1 -0
  62. package/dist/core/commands/ls.mjs +58 -0
  63. package/dist/core/commands/ls.mjs.map +1 -0
  64. package/dist/core/commands/mount.cjs +139 -0
  65. package/dist/core/commands/mount.d.cts +33 -0
  66. package/dist/core/commands/mount.d.cts.map +1 -0
  67. package/dist/core/commands/mount.d.mts +33 -0
  68. package/dist/core/commands/mount.d.mts.map +1 -0
  69. package/dist/core/commands/mount.mjs +140 -0
  70. package/dist/core/commands/mount.mjs.map +1 -0
  71. package/dist/core/commands/read.cjs +48 -0
  72. package/dist/core/commands/read.d.cts +17 -0
  73. package/dist/core/commands/read.d.cts.map +1 -0
  74. package/dist/core/commands/read.d.mts +17 -0
  75. package/dist/core/commands/read.d.mts.map +1 -0
  76. package/dist/core/commands/read.mjs +49 -0
  77. package/dist/core/commands/read.mjs.map +1 -0
  78. package/dist/core/commands/search.cjs +40 -0
  79. package/dist/core/commands/search.d.mts +2 -0
  80. package/dist/core/commands/search.mjs +41 -0
  81. package/dist/core/commands/search.mjs.map +1 -0
  82. package/dist/core/commands/serve.cjs +242 -0
  83. package/dist/core/commands/serve.d.mts +2 -0
  84. package/dist/core/commands/serve.mjs +242 -0
  85. package/dist/core/commands/serve.mjs.map +1 -0
  86. package/dist/core/commands/stat.cjs +53 -0
  87. package/dist/core/commands/stat.d.cts +17 -0
  88. package/dist/core/commands/stat.d.cts.map +1 -0
  89. package/dist/core/commands/stat.d.mts +17 -0
  90. package/dist/core/commands/stat.d.mts.map +1 -0
  91. package/dist/core/commands/stat.mjs +54 -0
  92. package/dist/core/commands/stat.mjs.map +1 -0
  93. package/dist/core/commands/types.cjs +13 -0
  94. package/dist/core/commands/types.d.cts +54 -0
  95. package/dist/core/commands/types.d.cts.map +1 -0
  96. package/dist/core/commands/types.d.mts +54 -0
  97. package/dist/core/commands/types.d.mts.map +1 -0
  98. package/dist/core/commands/types.mjs +14 -0
  99. package/dist/core/commands/types.mjs.map +1 -0
  100. package/dist/core/commands/write.cjs +70 -0
  101. package/dist/core/commands/write.d.cts +20 -0
  102. package/dist/core/commands/write.d.cts.map +1 -0
  103. package/dist/core/commands/write.d.mts +20 -0
  104. package/dist/core/commands/write.d.mts.map +1 -0
  105. package/dist/core/commands/write.mjs +71 -0
  106. package/dist/core/commands/write.mjs.map +1 -0
  107. package/dist/core/executor/index.cjs +196 -0
  108. package/dist/core/executor/index.d.cts +77 -0
  109. package/dist/core/executor/index.d.cts.map +1 -0
  110. package/dist/core/executor/index.d.mts +77 -0
  111. package/dist/core/executor/index.d.mts.map +1 -0
  112. package/dist/core/executor/index.mjs +195 -0
  113. package/dist/core/executor/index.mjs.map +1 -0
  114. package/dist/core/formatters/delete.cjs +37 -0
  115. package/dist/core/formatters/delete.d.cts +18 -0
  116. package/dist/core/formatters/delete.d.cts.map +1 -0
  117. package/dist/core/formatters/delete.d.mts +18 -0
  118. package/dist/core/formatters/delete.d.mts.map +1 -0
  119. package/dist/core/formatters/delete.mjs +37 -0
  120. package/dist/core/formatters/delete.mjs.map +1 -0
  121. package/dist/core/formatters/exec.cjs +60 -0
  122. package/dist/core/formatters/exec.d.cts +18 -0
  123. package/dist/core/formatters/exec.d.cts.map +1 -0
  124. package/dist/core/formatters/exec.d.mts +18 -0
  125. package/dist/core/formatters/exec.d.mts.map +1 -0
  126. package/dist/core/formatters/exec.mjs +60 -0
  127. package/dist/core/formatters/exec.mjs.map +1 -0
  128. package/dist/core/formatters/explain.cjs +97 -0
  129. package/dist/core/formatters/explain.d.cts +11 -0
  130. package/dist/core/formatters/explain.d.cts.map +1 -0
  131. package/dist/core/formatters/explain.d.mts +11 -0
  132. package/dist/core/formatters/explain.d.mts.map +1 -0
  133. package/dist/core/formatters/explain.mjs +96 -0
  134. package/dist/core/formatters/explain.mjs.map +1 -0
  135. package/dist/core/formatters/index.d.mts +9 -0
  136. package/dist/core/formatters/ls.cjs +179 -0
  137. package/dist/core/formatters/ls.d.cts +20 -0
  138. package/dist/core/formatters/ls.d.cts.map +1 -0
  139. package/dist/core/formatters/ls.d.mts +20 -0
  140. package/dist/core/formatters/ls.d.mts.map +1 -0
  141. package/dist/core/formatters/ls.mjs +179 -0
  142. package/dist/core/formatters/ls.mjs.map +1 -0
  143. package/dist/core/formatters/mount.cjs +55 -0
  144. package/dist/core/formatters/mount.d.cts +15 -0
  145. package/dist/core/formatters/mount.d.cts.map +1 -0
  146. package/dist/core/formatters/mount.d.mts +15 -0
  147. package/dist/core/formatters/mount.d.mts.map +1 -0
  148. package/dist/core/formatters/mount.mjs +55 -0
  149. package/dist/core/formatters/mount.mjs.map +1 -0
  150. package/dist/core/formatters/read.cjs +100 -0
  151. package/dist/core/formatters/read.d.cts +22 -0
  152. package/dist/core/formatters/read.d.cts.map +1 -0
  153. package/dist/core/formatters/read.d.mts +22 -0
  154. package/dist/core/formatters/read.d.mts.map +1 -0
  155. package/dist/core/formatters/read.mjs +100 -0
  156. package/dist/core/formatters/read.mjs.map +1 -0
  157. package/dist/core/formatters/search.cjs +44 -0
  158. package/dist/core/formatters/search.d.mts +1 -0
  159. package/dist/core/formatters/search.mjs +44 -0
  160. package/dist/core/formatters/search.mjs.map +1 -0
  161. package/dist/core/formatters/stat.cjs +155 -0
  162. package/dist/core/formatters/stat.d.cts +15 -0
  163. package/dist/core/formatters/stat.d.cts.map +1 -0
  164. package/dist/core/formatters/stat.d.mts +15 -0
  165. package/dist/core/formatters/stat.d.mts.map +1 -0
  166. package/dist/core/formatters/stat.mjs +155 -0
  167. package/dist/core/formatters/stat.mjs.map +1 -0
  168. package/dist/core/formatters/write.cjs +51 -0
  169. package/dist/core/formatters/write.d.cts +22 -0
  170. package/dist/core/formatters/write.d.cts.map +1 -0
  171. package/dist/core/formatters/write.d.mts +22 -0
  172. package/dist/core/formatters/write.d.mts.map +1 -0
  173. package/dist/core/formatters/write.mjs +51 -0
  174. package/dist/core/formatters/write.mjs.map +1 -0
  175. package/dist/core/helpers/exec-args.cjs +142 -0
  176. package/dist/core/helpers/exec-args.d.cts +46 -0
  177. package/dist/core/helpers/exec-args.d.cts.map +1 -0
  178. package/dist/core/helpers/exec-args.d.mts +46 -0
  179. package/dist/core/helpers/exec-args.d.mts.map +1 -0
  180. package/dist/core/helpers/exec-args.mjs +139 -0
  181. package/dist/core/helpers/exec-args.mjs.map +1 -0
  182. package/dist/core/helpers/stdin.cjs +41 -0
  183. package/dist/core/helpers/stdin.d.cts +15 -0
  184. package/dist/core/helpers/stdin.d.cts.map +1 -0
  185. package/dist/core/helpers/stdin.d.mts +15 -0
  186. package/dist/core/helpers/stdin.d.mts.map +1 -0
  187. package/dist/core/helpers/stdin.mjs +41 -0
  188. package/dist/core/helpers/stdin.mjs.map +1 -0
  189. package/dist/core/index.cjs +49 -0
  190. package/dist/core/index.d.cts +24 -0
  191. package/dist/core/index.d.mts +25 -0
  192. package/dist/core/index.mjs +24 -0
  193. package/dist/core/path-utils.cjs +1 -0
  194. package/dist/core/path-utils.mjs +3 -0
  195. package/dist/core/types.d.cts +24 -0
  196. package/dist/core/types.d.cts.map +1 -0
  197. package/dist/core/types.d.mts +24 -0
  198. package/dist/core/types.d.mts.map +1 -0
  199. package/dist/errors.cjs +0 -11
  200. package/dist/errors.mjs +1 -11
  201. package/dist/errors.mjs.map +1 -1
  202. package/dist/explorer/actions.cjs +67 -32
  203. package/dist/explorer/actions.mjs +66 -32
  204. package/dist/explorer/actions.mjs.map +1 -1
  205. package/dist/explorer/components/dialog.cjs +170 -46
  206. package/dist/explorer/components/dialog.mjs +170 -46
  207. package/dist/explorer/components/dialog.mjs.map +1 -1
  208. package/dist/explorer/components/metadata-panel.cjs +86 -3
  209. package/dist/explorer/components/metadata-panel.mjs +86 -3
  210. package/dist/explorer/components/metadata-panel.mjs.map +1 -1
  211. package/dist/explorer/screen.cjs +63 -27
  212. package/dist/explorer/screen.d.cts +23 -0
  213. package/dist/explorer/screen.d.cts.map +1 -0
  214. package/dist/explorer/screen.d.mts +23 -0
  215. package/dist/explorer/screen.d.mts.map +1 -0
  216. package/dist/explorer/screen.mjs +63 -27
  217. package/dist/explorer/screen.mjs.map +1 -1
  218. package/dist/explorer/theme.cjs +1 -1
  219. package/dist/explorer/theme.mjs +1 -1
  220. package/dist/explorer/theme.mjs.map +1 -1
  221. package/dist/index.cjs +7 -1
  222. package/dist/index.d.cts +4 -1
  223. package/dist/index.d.mts +4 -1
  224. package/dist/index.mjs +4 -1
  225. package/dist/mcp/http-transport.cjs +68 -0
  226. package/dist/mcp/http-transport.mjs +68 -0
  227. package/dist/mcp/http-transport.mjs.map +1 -0
  228. package/dist/mcp/prompts.cjs +48 -0
  229. package/dist/mcp/prompts.mjs +48 -0
  230. package/dist/mcp/prompts.mjs.map +1 -0
  231. package/dist/mcp/resources.cjs +25 -0
  232. package/dist/mcp/resources.mjs +25 -0
  233. package/dist/mcp/resources.mjs.map +1 -0
  234. package/dist/mcp/server.cjs +30 -0
  235. package/dist/mcp/server.mjs +30 -0
  236. package/dist/mcp/server.mjs.map +1 -0
  237. package/dist/mcp/tools.cjs +196 -0
  238. package/dist/mcp/tools.mjs +196 -0
  239. package/dist/mcp/tools.mjs.map +1 -0
  240. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/index.d.cts +10 -0
  241. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/index.d.cts.map +1 -0
  242. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/index.d.mts +10 -0
  243. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/index.d.mts.map +1 -0
  244. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/types.d.cts +46 -0
  245. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/types.d.cts.map +1 -0
  246. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/types.d.mts +46 -0
  247. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/types.d.mts.map +1 -0
  248. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/urlpattern.cjs +902 -0
  249. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/urlpattern.mjs +902 -0
  250. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/urlpattern.mjs.map +1 -0
  251. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/index.cjs +6 -0
  252. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/index.mjs +8 -0
  253. package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/index.mjs.map +1 -0
  254. package/dist/path-utils.d.cts +50 -0
  255. package/dist/path-utils.d.cts.map +1 -0
  256. package/dist/path-utils.d.mts +50 -0
  257. package/dist/path-utils.d.mts.map +1 -0
  258. package/dist/repl.cjs +485 -0
  259. package/dist/repl.d.cts +15 -0
  260. package/dist/repl.d.cts.map +1 -0
  261. package/dist/repl.d.mts +16 -0
  262. package/dist/repl.d.mts.map +1 -0
  263. package/dist/repl.mjs +485 -0
  264. package/dist/repl.mjs.map +1 -0
  265. package/dist/serve.cjs +146 -0
  266. package/dist/serve.d.cts +41 -0
  267. package/dist/serve.d.cts.map +1 -0
  268. package/dist/serve.d.mts +41 -0
  269. package/dist/serve.d.mts.map +1 -0
  270. package/dist/serve.mjs +146 -0
  271. package/dist/serve.mjs.map +1 -0
  272. package/dist/ui/header.cjs +1 -40
  273. package/dist/ui/header.mjs +1 -39
  274. package/dist/ui/header.mjs.map +1 -1
  275. package/dist/ui/index.cjs +2 -9
  276. package/dist/ui/index.mjs +2 -7
  277. package/dist/ui/index.mjs.map +1 -1
  278. package/dist/ui/terminal.cjs +1 -10
  279. package/dist/ui/terminal.mjs +1 -8
  280. package/dist/ui/terminal.mjs.map +1 -1
  281. package/package.json +29 -16
  282. package/dist/commands/exec.cjs +0 -164
  283. package/dist/commands/exec.mjs +0 -160
  284. package/dist/commands/exec.mjs.map +0 -1
  285. package/dist/commands/explain.cjs +0 -244
  286. package/dist/commands/explain.mjs +0 -242
  287. package/dist/commands/explain.mjs.map +0 -1
  288. package/dist/commands/index.cjs +0 -8
  289. package/dist/commands/index.mjs +0 -10
  290. package/dist/commands/ls.cjs +0 -242
  291. package/dist/commands/ls.mjs +0 -242
  292. package/dist/commands/ls.mjs.map +0 -1
  293. package/dist/commands/mount.mjs.map +0 -1
  294. package/dist/commands/read.cjs +0 -264
  295. package/dist/commands/read.mjs +0 -263
  296. package/dist/commands/read.mjs.map +0 -1
  297. package/dist/commands/serve.cjs +0 -144
  298. package/dist/commands/serve.mjs +0 -143
  299. package/dist/commands/serve.mjs.map +0 -1
  300. package/dist/commands/stat.cjs +0 -195
  301. package/dist/commands/stat.mjs +0 -195
  302. package/dist/commands/stat.mjs.map +0 -1
  303. package/dist/commands/write.cjs +0 -85
  304. package/dist/commands/write.mjs +0 -85
  305. package/dist/commands/write.mjs.map +0 -1
  306. package/dist/config/provider-factory.cjs +0 -400
  307. package/dist/config/provider-factory.mjs +0 -401
  308. package/dist/config/provider-factory.mjs.map +0 -1
  309. package/dist/config/uri-parser.cjs +0 -285
  310. package/dist/config/uri-parser.mjs +0 -285
  311. package/dist/config/uri-parser.mjs.map +0 -1
  312. package/dist/runtime.cjs +0 -120
  313. package/dist/runtime.mjs +0 -120
  314. package/dist/runtime.mjs.map +0 -1
  315. package/dist/utils/meta.cjs +0 -51
  316. package/dist/utils/meta.mjs +0 -49
  317. package/dist/utils/meta.mjs.map +0 -1
@@ -0,0 +1,97 @@
1
+
2
+ //#region src/core/formatters/explain.ts
3
+ /**
4
+ * Format concept explain output for different views
5
+ */
6
+ function formatExplainOutput(result, view) {
7
+ switch (view) {
8
+ case "json": return JSON.stringify(result, null, 2);
9
+ case "llm": return formatLlm(result);
10
+ default: return formatDefault(result);
11
+ }
12
+ }
13
+ function formatDefault(result) {
14
+ let output = `${result.topic}\n${"=".repeat(result.topic.length)}\n\n${result.explanation}`;
15
+ if (result.examples && result.examples.length > 0) output += `\n\nExamples:\n${result.examples.map((e) => ` $ ${e}`).join("\n")}`;
16
+ return output;
17
+ }
18
+ function formatLlm(result) {
19
+ const lines = [
20
+ `TOPIC ${result.topic}`,
21
+ "",
22
+ result.explanation
23
+ ];
24
+ if (result.examples && result.examples.length > 0) {
25
+ lines.push("", "EXAMPLES");
26
+ for (const example of result.examples) lines.push(`CMD ${example}`);
27
+ }
28
+ return lines.join("\n");
29
+ }
30
+ /**
31
+ * Format path explain output for different views
32
+ */
33
+ function formatPathExplainOutput(result, view) {
34
+ switch (view) {
35
+ case "json": return JSON.stringify(result, null, 2);
36
+ case "llm": return formatPathLlm(result);
37
+ default: return formatPathDefault(result);
38
+ }
39
+ }
40
+ function formatPathDefault(result) {
41
+ const lines = [];
42
+ lines.push(`PATH ${result.path}`);
43
+ lines.push("");
44
+ lines.push("TYPE");
45
+ lines.push(result.type);
46
+ if (result.description) {
47
+ lines.push("");
48
+ lines.push("DESCRIPTION");
49
+ lines.push(result.description);
50
+ }
51
+ if (result.inputs && result.inputs.length > 0) {
52
+ lines.push("");
53
+ lines.push("INPUTS");
54
+ for (const input of result.inputs) lines.push(`- ${input}`);
55
+ }
56
+ if (result.outputs && result.outputs.length > 0) {
57
+ lines.push("");
58
+ lines.push("OUTPUTS");
59
+ for (const output of result.outputs) lines.push(`- ${output}`);
60
+ }
61
+ if (result.errors && result.errors.length > 0) {
62
+ lines.push("");
63
+ lines.push("ERRORS");
64
+ for (const error of result.errors) lines.push(`- ${error}`);
65
+ }
66
+ if (result.sideEffects && result.sideEffects.length > 0) {
67
+ lines.push("");
68
+ lines.push("SIDE EFFECTS");
69
+ for (const effect of result.sideEffects) lines.push(`- ${effect}`);
70
+ } else {
71
+ lines.push("");
72
+ lines.push("SIDE EFFECTS");
73
+ lines.push("- none");
74
+ }
75
+ if (result.meta && Object.keys(result.meta).length > 0) {
76
+ lines.push("");
77
+ lines.push("METADATA");
78
+ for (const [key, value] of Object.entries(result.meta)) lines.push(`- ${key}: ${value}`);
79
+ }
80
+ return lines.join("\n");
81
+ }
82
+ function formatPathLlm(result) {
83
+ const lines = [];
84
+ lines.push(`PATH ${result.path}`);
85
+ lines.push(`TYPE ${result.type.toUpperCase()}`);
86
+ if (result.description) lines.push(`DESC ${result.description}`);
87
+ if (result.inputs && result.inputs.length > 0) lines.push(`INPUTS ${result.inputs.join(", ")}`);
88
+ if (result.outputs && result.outputs.length > 0) lines.push(`OUTPUTS ${result.outputs.join(", ")}`);
89
+ if (result.errors && result.errors.length > 0) lines.push(`ERRORS ${result.errors.join(", ")}`);
90
+ lines.push(`SIDE_EFFECTS ${result.sideEffects?.join(", ") || "none"}`);
91
+ if (result.meta) for (const [key, value] of Object.entries(result.meta)) lines.push(`${key.toUpperCase()} ${value}`);
92
+ return lines.join("\n");
93
+ }
94
+
95
+ //#endregion
96
+ exports.formatExplainOutput = formatExplainOutput;
97
+ exports.formatPathExplainOutput = formatPathExplainOutput;
@@ -0,0 +1,11 @@
1
+ import { ViewType } from "../types.cjs";
2
+ import { ExplainResult } from "../commands/explain.cjs";
3
+
4
+ //#region src/core/formatters/explain.d.ts
5
+ /**
6
+ * Format concept explain output for different views
7
+ */
8
+ declare function formatExplainOutput(result: ExplainResult, view: ViewType): string;
9
+ //#endregion
10
+ export { formatExplainOutput };
11
+ //# sourceMappingURL=explain.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain.d.cts","names":[],"sources":["../../../src/core/formatters/explain.ts"],"mappings":";;;;;;;iBAagB,mBAAA,CAAoB,MAAA,EAAQ,aAAA,EAAe,IAAA,EAAM,QAAA"}
@@ -0,0 +1,11 @@
1
+ import { ViewType } from "../types.mjs";
2
+ import { ExplainResult } from "../commands/explain.mjs";
3
+
4
+ //#region src/core/formatters/explain.d.ts
5
+ /**
6
+ * Format concept explain output for different views
7
+ */
8
+ declare function formatExplainOutput(result: ExplainResult, view: ViewType): string;
9
+ //#endregion
10
+ export { formatExplainOutput };
11
+ //# sourceMappingURL=explain.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain.d.mts","names":[],"sources":["../../../src/core/formatters/explain.ts"],"mappings":";;;;;;;iBAagB,mBAAA,CAAoB,MAAA,EAAQ,aAAA,EAAe,IAAA,EAAM,QAAA"}
@@ -0,0 +1,96 @@
1
+ //#region src/core/formatters/explain.ts
2
+ /**
3
+ * Format concept explain output for different views
4
+ */
5
+ function formatExplainOutput(result, view) {
6
+ switch (view) {
7
+ case "json": return JSON.stringify(result, null, 2);
8
+ case "llm": return formatLlm(result);
9
+ default: return formatDefault(result);
10
+ }
11
+ }
12
+ function formatDefault(result) {
13
+ let output = `${result.topic}\n${"=".repeat(result.topic.length)}\n\n${result.explanation}`;
14
+ if (result.examples && result.examples.length > 0) output += `\n\nExamples:\n${result.examples.map((e) => ` $ ${e}`).join("\n")}`;
15
+ return output;
16
+ }
17
+ function formatLlm(result) {
18
+ const lines = [
19
+ `TOPIC ${result.topic}`,
20
+ "",
21
+ result.explanation
22
+ ];
23
+ if (result.examples && result.examples.length > 0) {
24
+ lines.push("", "EXAMPLES");
25
+ for (const example of result.examples) lines.push(`CMD ${example}`);
26
+ }
27
+ return lines.join("\n");
28
+ }
29
+ /**
30
+ * Format path explain output for different views
31
+ */
32
+ function formatPathExplainOutput(result, view) {
33
+ switch (view) {
34
+ case "json": return JSON.stringify(result, null, 2);
35
+ case "llm": return formatPathLlm(result);
36
+ default: return formatPathDefault(result);
37
+ }
38
+ }
39
+ function formatPathDefault(result) {
40
+ const lines = [];
41
+ lines.push(`PATH ${result.path}`);
42
+ lines.push("");
43
+ lines.push("TYPE");
44
+ lines.push(result.type);
45
+ if (result.description) {
46
+ lines.push("");
47
+ lines.push("DESCRIPTION");
48
+ lines.push(result.description);
49
+ }
50
+ if (result.inputs && result.inputs.length > 0) {
51
+ lines.push("");
52
+ lines.push("INPUTS");
53
+ for (const input of result.inputs) lines.push(`- ${input}`);
54
+ }
55
+ if (result.outputs && result.outputs.length > 0) {
56
+ lines.push("");
57
+ lines.push("OUTPUTS");
58
+ for (const output of result.outputs) lines.push(`- ${output}`);
59
+ }
60
+ if (result.errors && result.errors.length > 0) {
61
+ lines.push("");
62
+ lines.push("ERRORS");
63
+ for (const error of result.errors) lines.push(`- ${error}`);
64
+ }
65
+ if (result.sideEffects && result.sideEffects.length > 0) {
66
+ lines.push("");
67
+ lines.push("SIDE EFFECTS");
68
+ for (const effect of result.sideEffects) lines.push(`- ${effect}`);
69
+ } else {
70
+ lines.push("");
71
+ lines.push("SIDE EFFECTS");
72
+ lines.push("- none");
73
+ }
74
+ if (result.meta && Object.keys(result.meta).length > 0) {
75
+ lines.push("");
76
+ lines.push("METADATA");
77
+ for (const [key, value] of Object.entries(result.meta)) lines.push(`- ${key}: ${value}`);
78
+ }
79
+ return lines.join("\n");
80
+ }
81
+ function formatPathLlm(result) {
82
+ const lines = [];
83
+ lines.push(`PATH ${result.path}`);
84
+ lines.push(`TYPE ${result.type.toUpperCase()}`);
85
+ if (result.description) lines.push(`DESC ${result.description}`);
86
+ if (result.inputs && result.inputs.length > 0) lines.push(`INPUTS ${result.inputs.join(", ")}`);
87
+ if (result.outputs && result.outputs.length > 0) lines.push(`OUTPUTS ${result.outputs.join(", ")}`);
88
+ if (result.errors && result.errors.length > 0) lines.push(`ERRORS ${result.errors.join(", ")}`);
89
+ lines.push(`SIDE_EFFECTS ${result.sideEffects?.join(", ") || "none"}`);
90
+ if (result.meta) for (const [key, value] of Object.entries(result.meta)) lines.push(`${key.toUpperCase()} ${value}`);
91
+ return lines.join("\n");
92
+ }
93
+
94
+ //#endregion
95
+ export { formatExplainOutput, formatPathExplainOutput };
96
+ //# sourceMappingURL=explain.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain.mjs","names":[],"sources":["../../../src/core/formatters/explain.ts"],"sourcesContent":["/**\n * explain Formatter - Core Implementation\n *\n * Formats explain output for concepts and paths.\n * Matches old version output format.\n */\n\nimport type { ExplainResult, PathExplainResult } from \"../commands/explain.js\";\nimport type { ViewType } from \"../types.js\";\n\n/**\n * Format concept explain output for different views\n */\nexport function formatExplainOutput(result: ExplainResult, view: ViewType): string {\n switch (view) {\n case \"json\":\n return JSON.stringify(result, null, 2);\n case \"llm\":\n return formatLlm(result);\n default:\n return formatDefault(result);\n }\n}\n\nfunction formatDefault(result: ExplainResult): string {\n let output = `${result.topic}\\n${\"=\".repeat(result.topic.length)}\\n\\n${result.explanation}`;\n\n if (result.examples && result.examples.length > 0) {\n output += `\\n\\nExamples:\\n${result.examples.map((e) => ` $ ${e}`).join(\"\\n\")}`;\n }\n\n return output;\n}\n\nfunction formatLlm(result: ExplainResult): string {\n const lines = [`TOPIC ${result.topic}`, \"\", result.explanation];\n\n if (result.examples && result.examples.length > 0) {\n lines.push(\"\", \"EXAMPLES\");\n for (const example of result.examples) {\n lines.push(`CMD ${example}`);\n }\n }\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Format path explain output for different views\n */\nexport function formatPathExplainOutput(result: PathExplainResult, view: ViewType): string {\n switch (view) {\n case \"json\":\n return JSON.stringify(result, null, 2);\n case \"llm\":\n return formatPathLlm(result);\n default:\n return formatPathDefault(result);\n }\n}\n\nfunction formatPathDefault(result: PathExplainResult): string {\n const lines: string[] = [];\n\n lines.push(`PATH ${result.path}`);\n lines.push(\"\");\n lines.push(\"TYPE\");\n lines.push(result.type);\n\n if (result.description) {\n lines.push(\"\");\n lines.push(\"DESCRIPTION\");\n lines.push(result.description);\n }\n\n if (result.inputs && result.inputs.length > 0) {\n lines.push(\"\");\n lines.push(\"INPUTS\");\n for (const input of result.inputs) {\n lines.push(`- ${input}`);\n }\n }\n\n if (result.outputs && result.outputs.length > 0) {\n lines.push(\"\");\n lines.push(\"OUTPUTS\");\n for (const output of result.outputs) {\n lines.push(`- ${output}`);\n }\n }\n\n if (result.errors && result.errors.length > 0) {\n lines.push(\"\");\n lines.push(\"ERRORS\");\n for (const error of result.errors) {\n lines.push(`- ${error}`);\n }\n }\n\n if (result.sideEffects && result.sideEffects.length > 0) {\n lines.push(\"\");\n lines.push(\"SIDE EFFECTS\");\n for (const effect of result.sideEffects) {\n lines.push(`- ${effect}`);\n }\n } else {\n lines.push(\"\");\n lines.push(\"SIDE EFFECTS\");\n lines.push(\"- none\");\n }\n\n if (result.meta && Object.keys(result.meta).length > 0) {\n lines.push(\"\");\n lines.push(\"METADATA\");\n for (const [key, value] of Object.entries(result.meta)) {\n lines.push(`- ${key}: ${value}`);\n }\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction formatPathLlm(result: PathExplainResult): string {\n const lines: string[] = [];\n\n lines.push(`PATH ${result.path}`);\n lines.push(`TYPE ${result.type.toUpperCase()}`);\n\n if (result.description) {\n lines.push(`DESC ${result.description}`);\n }\n\n if (result.inputs && result.inputs.length > 0) {\n lines.push(`INPUTS ${result.inputs.join(\", \")}`);\n }\n\n if (result.outputs && result.outputs.length > 0) {\n lines.push(`OUTPUTS ${result.outputs.join(\", \")}`);\n }\n\n if (result.errors && result.errors.length > 0) {\n lines.push(`ERRORS ${result.errors.join(\", \")}`);\n }\n\n lines.push(`SIDE_EFFECTS ${result.sideEffects?.join(\", \") || \"none\"}`);\n\n if (result.meta) {\n for (const [key, value] of Object.entries(result.meta)) {\n lines.push(`${key.toUpperCase()} ${value}`);\n }\n }\n\n return lines.join(\"\\n\");\n}\n"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { formatDeleteOutput } from "./delete.mjs";
2
+ import { formatExecOutput } from "./exec.mjs";
3
+ import { formatExplainOutput } from "./explain.mjs";
4
+ import { formatLsOutput } from "./ls.mjs";
5
+ import { formatMountListOutput } from "./mount.mjs";
6
+ import { formatReadOutput } from "./read.mjs";
7
+ import "./search.mjs";
8
+ import { formatStatOutput } from "./stat.mjs";
9
+ import { formatWriteOutput } from "./write.mjs";
@@ -0,0 +1,179 @@
1
+
2
+ //#region src/core/formatters/ls.ts
3
+ /**
4
+ * Check if a path is an actions path
5
+ */
6
+ function isActionsPath(path) {
7
+ return path.endsWith("/.actions") || path.includes("/.actions/");
8
+ }
9
+ /**
10
+ * Format ls output for different views
11
+ *
12
+ * @param result - AFS list result (native type)
13
+ * @param view - View type (default, json, llm, human)
14
+ * @param options - Format options
15
+ * @returns Formatted string (no ANSI colors)
16
+ */
17
+ function formatLsOutput(result, view, options) {
18
+ const isActions = options?.path && isActionsPath(options.path);
19
+ switch (view) {
20
+ case "json": return isActions ? formatActionsJson(result, options.path) : formatJson(result);
21
+ case "llm": return isActions ? formatActionsLlm(result, options.path) : formatLlm(result);
22
+ case "human": return isActions ? formatActionsHuman(result, options.path) : formatHuman(result);
23
+ default: return isActions ? formatActionsDefault(result) : formatDefault(result);
24
+ }
25
+ }
26
+ /**
27
+ * Default format: Machine truth, one path per line
28
+ */
29
+ function formatDefault(result) {
30
+ if (result.data.length === 0 && result.message) return `# ${result.message}`;
31
+ const lines = result.data.map((entry) => entry.path);
32
+ if (result.total !== void 0 && result.total > result.data.length) lines.push(`# Results truncated (${result.data.length} of ${result.total} shown)`);
33
+ return lines.join("\n");
34
+ }
35
+ /**
36
+ * JSON format: Structured output with meta field preserved
37
+ */
38
+ function formatJson(result) {
39
+ const entries = result.data.map((entry) => {
40
+ const output = { path: entry.path };
41
+ if (entry.meta && Object.keys(entry.meta).length > 0) output.meta = entry.meta;
42
+ return output;
43
+ });
44
+ return JSON.stringify({
45
+ entries,
46
+ total: result.total ?? entries.length
47
+ }, null, 2);
48
+ }
49
+ /**
50
+ * LLM format: Token-efficient, semantic facts
51
+ */
52
+ function formatLlm(result) {
53
+ const lines = [];
54
+ if (result.data.length === 0 && result.message) {
55
+ lines.push(`ERROR ${result.message}`);
56
+ return lines.join("\n");
57
+ }
58
+ for (const entry of result.data) {
59
+ const parts = [`ENTRY ${entry.path}`];
60
+ if (entry.meta?.kind) parts.push(`KIND=${entry.meta.kind}`);
61
+ if (entry.meta?.size !== void 0) parts.push(`SIZE=${entry.meta.size}`);
62
+ if (entry.meta?.childrenCount !== void 0) parts.push(`CHILDREN=${entry.meta.childrenCount}`);
63
+ lines.push(parts.join(" "));
64
+ }
65
+ lines.push(`TOTAL ${result.data.length}`);
66
+ if (result.total !== void 0 && result.total > result.data.length) lines.push("TRUNCATED true");
67
+ return lines.join("\n");
68
+ }
69
+ /**
70
+ * Human format: Tree structure (without colors)
71
+ */
72
+ function formatHuman(result) {
73
+ if (result.data.length === 0 && result.message) return result.message;
74
+ const root = {
75
+ name: "",
76
+ children: /* @__PURE__ */ new Map()
77
+ };
78
+ for (const entry of result.data) {
79
+ const parts = entry.path.split("/").filter(Boolean);
80
+ let current = root;
81
+ for (let i = 0; i < parts.length; i++) {
82
+ const part = parts[i];
83
+ if (!current.children.has(part)) current.children.set(part, {
84
+ name: part,
85
+ children: /* @__PURE__ */ new Map()
86
+ });
87
+ current = current.children.get(part);
88
+ if (i === parts.length - 1) current.entry = entry;
89
+ }
90
+ }
91
+ const lines = [];
92
+ renderTree(root, "", lines);
93
+ if (result.total !== void 0 && result.total > result.data.length) {
94
+ lines.push("");
95
+ lines.push(`(Results truncated - ${result.data.length} of ${result.total} entries shown)`);
96
+ }
97
+ return lines.join("\n");
98
+ }
99
+ function renderTree(node, prefix, lines) {
100
+ const children = Array.from(node.children.values());
101
+ for (let i = 0; i < children.length; i++) {
102
+ const child = children[i];
103
+ const isLast = i === children.length - 1;
104
+ const connector = isLast ? "└── " : "├── ";
105
+ const icon = typeof child.entry?.meta?.childrenCount === "number" || child.children.size > 0 ? "📁" : "📄";
106
+ const sizeStr = child.entry?.meta?.size !== void 0 ? ` ${formatSize(child.entry.meta.size)}` : "";
107
+ const kindStr = child.entry?.meta?.kind ? ` (${child.entry.meta.kind})` : "";
108
+ lines.push(`${prefix}${connector}${icon} ${child.name}${kindStr}${sizeStr}`);
109
+ renderTree(child, prefix + (isLast ? " " : "│ "), lines);
110
+ }
111
+ }
112
+ function formatSize(bytes) {
113
+ if (bytes < 1024) return `${bytes}B`;
114
+ if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`;
115
+ return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
116
+ }
117
+ function getActionName(entry) {
118
+ const parts = entry.path.split("/");
119
+ return parts[parts.length - 1] || entry.path;
120
+ }
121
+ function getActionDescription(entry) {
122
+ return entry.meta?.description;
123
+ }
124
+ function getNodePathFromActions(actionsPath) {
125
+ const idx = actionsPath.lastIndexOf("/.actions");
126
+ return idx > 0 ? actionsPath.substring(0, idx) : "/";
127
+ }
128
+ function formatActionsHuman(result, path) {
129
+ const lines = [];
130
+ const nodePath = getNodePathFromActions(path);
131
+ if (result.data.length === 0) {
132
+ lines.push(`No actions available for ${nodePath}`);
133
+ return lines.join("\n");
134
+ }
135
+ lines.push(`Available actions for ${nodePath}:`);
136
+ lines.push("");
137
+ const maxNameLen = Math.max(...result.data.map((e) => getActionName(e).length));
138
+ for (const entry of result.data) {
139
+ const name = getActionName(entry);
140
+ const desc = getActionDescription(entry) || "";
141
+ lines.push(` ${name.padEnd(maxNameLen + 2)}${desc}`);
142
+ }
143
+ return lines.join("\n");
144
+ }
145
+ function formatActionsLlm(result, path) {
146
+ const lines = [];
147
+ lines.push(`ACTIONS ${path}`);
148
+ if (result.data.length === 0) {
149
+ lines.push("ACTIONS_COUNT 0");
150
+ return lines.join("\n");
151
+ }
152
+ for (const entry of result.data) {
153
+ const name = getActionName(entry);
154
+ const desc = getActionDescription(entry);
155
+ const schema = entry.meta?.inputSchema;
156
+ const descPart = desc ? ` DESCRIPTION "${desc}"` : "";
157
+ const schemaPart = schema !== void 0 ? ` SCHEMA ${JSON.stringify(schema)}` : "";
158
+ lines.push(`ACTION ${name}${descPart}${schemaPart}`);
159
+ }
160
+ return lines.join("\n");
161
+ }
162
+ function formatActionsJson(result, path) {
163
+ const actions = result.data.map((entry) => ({
164
+ name: getActionName(entry),
165
+ description: getActionDescription(entry),
166
+ inputSchema: entry.meta?.inputSchema
167
+ }));
168
+ return JSON.stringify({
169
+ path,
170
+ data: actions
171
+ }, null, 2);
172
+ }
173
+ function formatActionsDefault(result) {
174
+ if (result.data.length === 0) return "";
175
+ return result.data.map((entry) => getActionName(entry)).join("\n");
176
+ }
177
+
178
+ //#endregion
179
+ exports.formatLsOutput = formatLsOutput;
@@ -0,0 +1,20 @@
1
+ import { ViewType } from "../types.cjs";
2
+ import { AFSListResult } from "@aigne/afs";
3
+
4
+ //#region src/core/formatters/ls.d.ts
5
+ interface FormatLsOptions {
6
+ /** The path being listed (used for special formatting of .actions paths) */
7
+ path?: string;
8
+ }
9
+ /**
10
+ * Format ls output for different views
11
+ *
12
+ * @param result - AFS list result (native type)
13
+ * @param view - View type (default, json, llm, human)
14
+ * @param options - Format options
15
+ * @returns Formatted string (no ANSI colors)
16
+ */
17
+ declare function formatLsOutput(result: AFSListResult, view: ViewType, options?: FormatLsOptions): string;
18
+ //#endregion
19
+ export { FormatLsOptions, formatLsOutput };
20
+ //# sourceMappingURL=ls.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ls.d.cts","names":[],"sources":["../../../src/core/formatters/ls.ts"],"mappings":";;;;UAUiB,eAAA;EAoBD;EAlBd,IAAA;AAAA;;;;;;;;;iBAkBc,cAAA,CACd,MAAA,EAAQ,aAAA,EACR,IAAA,EAAM,QAAA,EACN,OAAA,GAAU,eAAA"}
@@ -0,0 +1,20 @@
1
+ import { ViewType } from "../types.mjs";
2
+ import { AFSListResult } from "@aigne/afs";
3
+
4
+ //#region src/core/formatters/ls.d.ts
5
+ interface FormatLsOptions {
6
+ /** The path being listed (used for special formatting of .actions paths) */
7
+ path?: string;
8
+ }
9
+ /**
10
+ * Format ls output for different views
11
+ *
12
+ * @param result - AFS list result (native type)
13
+ * @param view - View type (default, json, llm, human)
14
+ * @param options - Format options
15
+ * @returns Formatted string (no ANSI colors)
16
+ */
17
+ declare function formatLsOutput(result: AFSListResult, view: ViewType, options?: FormatLsOptions): string;
18
+ //#endregion
19
+ export { FormatLsOptions, formatLsOutput };
20
+ //# sourceMappingURL=ls.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ls.d.mts","names":[],"sources":["../../../src/core/formatters/ls.ts"],"mappings":";;;;UAUiB,eAAA;EAoBD;EAlBd,IAAA;AAAA;;;;;;;;;iBAkBc,cAAA,CACd,MAAA,EAAQ,aAAA,EACR,IAAA,EAAM,QAAA,EACN,OAAA,GAAU,eAAA"}
@@ -0,0 +1,179 @@
1
+ //#region src/core/formatters/ls.ts
2
+ /**
3
+ * Check if a path is an actions path
4
+ */
5
+ function isActionsPath(path) {
6
+ return path.endsWith("/.actions") || path.includes("/.actions/");
7
+ }
8
+ /**
9
+ * Format ls output for different views
10
+ *
11
+ * @param result - AFS list result (native type)
12
+ * @param view - View type (default, json, llm, human)
13
+ * @param options - Format options
14
+ * @returns Formatted string (no ANSI colors)
15
+ */
16
+ function formatLsOutput(result, view, options) {
17
+ const isActions = options?.path && isActionsPath(options.path);
18
+ switch (view) {
19
+ case "json": return isActions ? formatActionsJson(result, options.path) : formatJson(result);
20
+ case "llm": return isActions ? formatActionsLlm(result, options.path) : formatLlm(result);
21
+ case "human": return isActions ? formatActionsHuman(result, options.path) : formatHuman(result);
22
+ default: return isActions ? formatActionsDefault(result) : formatDefault(result);
23
+ }
24
+ }
25
+ /**
26
+ * Default format: Machine truth, one path per line
27
+ */
28
+ function formatDefault(result) {
29
+ if (result.data.length === 0 && result.message) return `# ${result.message}`;
30
+ const lines = result.data.map((entry) => entry.path);
31
+ if (result.total !== void 0 && result.total > result.data.length) lines.push(`# Results truncated (${result.data.length} of ${result.total} shown)`);
32
+ return lines.join("\n");
33
+ }
34
+ /**
35
+ * JSON format: Structured output with meta field preserved
36
+ */
37
+ function formatJson(result) {
38
+ const entries = result.data.map((entry) => {
39
+ const output = { path: entry.path };
40
+ if (entry.meta && Object.keys(entry.meta).length > 0) output.meta = entry.meta;
41
+ return output;
42
+ });
43
+ return JSON.stringify({
44
+ entries,
45
+ total: result.total ?? entries.length
46
+ }, null, 2);
47
+ }
48
+ /**
49
+ * LLM format: Token-efficient, semantic facts
50
+ */
51
+ function formatLlm(result) {
52
+ const lines = [];
53
+ if (result.data.length === 0 && result.message) {
54
+ lines.push(`ERROR ${result.message}`);
55
+ return lines.join("\n");
56
+ }
57
+ for (const entry of result.data) {
58
+ const parts = [`ENTRY ${entry.path}`];
59
+ if (entry.meta?.kind) parts.push(`KIND=${entry.meta.kind}`);
60
+ if (entry.meta?.size !== void 0) parts.push(`SIZE=${entry.meta.size}`);
61
+ if (entry.meta?.childrenCount !== void 0) parts.push(`CHILDREN=${entry.meta.childrenCount}`);
62
+ lines.push(parts.join(" "));
63
+ }
64
+ lines.push(`TOTAL ${result.data.length}`);
65
+ if (result.total !== void 0 && result.total > result.data.length) lines.push("TRUNCATED true");
66
+ return lines.join("\n");
67
+ }
68
+ /**
69
+ * Human format: Tree structure (without colors)
70
+ */
71
+ function formatHuman(result) {
72
+ if (result.data.length === 0 && result.message) return result.message;
73
+ const root = {
74
+ name: "",
75
+ children: /* @__PURE__ */ new Map()
76
+ };
77
+ for (const entry of result.data) {
78
+ const parts = entry.path.split("/").filter(Boolean);
79
+ let current = root;
80
+ for (let i = 0; i < parts.length; i++) {
81
+ const part = parts[i];
82
+ if (!current.children.has(part)) current.children.set(part, {
83
+ name: part,
84
+ children: /* @__PURE__ */ new Map()
85
+ });
86
+ current = current.children.get(part);
87
+ if (i === parts.length - 1) current.entry = entry;
88
+ }
89
+ }
90
+ const lines = [];
91
+ renderTree(root, "", lines);
92
+ if (result.total !== void 0 && result.total > result.data.length) {
93
+ lines.push("");
94
+ lines.push(`(Results truncated - ${result.data.length} of ${result.total} entries shown)`);
95
+ }
96
+ return lines.join("\n");
97
+ }
98
+ function renderTree(node, prefix, lines) {
99
+ const children = Array.from(node.children.values());
100
+ for (let i = 0; i < children.length; i++) {
101
+ const child = children[i];
102
+ const isLast = i === children.length - 1;
103
+ const connector = isLast ? "└── " : "├── ";
104
+ const icon = typeof child.entry?.meta?.childrenCount === "number" || child.children.size > 0 ? "📁" : "📄";
105
+ const sizeStr = child.entry?.meta?.size !== void 0 ? ` ${formatSize(child.entry.meta.size)}` : "";
106
+ const kindStr = child.entry?.meta?.kind ? ` (${child.entry.meta.kind})` : "";
107
+ lines.push(`${prefix}${connector}${icon} ${child.name}${kindStr}${sizeStr}`);
108
+ renderTree(child, prefix + (isLast ? " " : "│ "), lines);
109
+ }
110
+ }
111
+ function formatSize(bytes) {
112
+ if (bytes < 1024) return `${bytes}B`;
113
+ if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`;
114
+ return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
115
+ }
116
+ function getActionName(entry) {
117
+ const parts = entry.path.split("/");
118
+ return parts[parts.length - 1] || entry.path;
119
+ }
120
+ function getActionDescription(entry) {
121
+ return entry.meta?.description;
122
+ }
123
+ function getNodePathFromActions(actionsPath) {
124
+ const idx = actionsPath.lastIndexOf("/.actions");
125
+ return idx > 0 ? actionsPath.substring(0, idx) : "/";
126
+ }
127
+ function formatActionsHuman(result, path) {
128
+ const lines = [];
129
+ const nodePath = getNodePathFromActions(path);
130
+ if (result.data.length === 0) {
131
+ lines.push(`No actions available for ${nodePath}`);
132
+ return lines.join("\n");
133
+ }
134
+ lines.push(`Available actions for ${nodePath}:`);
135
+ lines.push("");
136
+ const maxNameLen = Math.max(...result.data.map((e) => getActionName(e).length));
137
+ for (const entry of result.data) {
138
+ const name = getActionName(entry);
139
+ const desc = getActionDescription(entry) || "";
140
+ lines.push(` ${name.padEnd(maxNameLen + 2)}${desc}`);
141
+ }
142
+ return lines.join("\n");
143
+ }
144
+ function formatActionsLlm(result, path) {
145
+ const lines = [];
146
+ lines.push(`ACTIONS ${path}`);
147
+ if (result.data.length === 0) {
148
+ lines.push("ACTIONS_COUNT 0");
149
+ return lines.join("\n");
150
+ }
151
+ for (const entry of result.data) {
152
+ const name = getActionName(entry);
153
+ const desc = getActionDescription(entry);
154
+ const schema = entry.meta?.inputSchema;
155
+ const descPart = desc ? ` DESCRIPTION "${desc}"` : "";
156
+ const schemaPart = schema !== void 0 ? ` SCHEMA ${JSON.stringify(schema)}` : "";
157
+ lines.push(`ACTION ${name}${descPart}${schemaPart}`);
158
+ }
159
+ return lines.join("\n");
160
+ }
161
+ function formatActionsJson(result, path) {
162
+ const actions = result.data.map((entry) => ({
163
+ name: getActionName(entry),
164
+ description: getActionDescription(entry),
165
+ inputSchema: entry.meta?.inputSchema
166
+ }));
167
+ return JSON.stringify({
168
+ path,
169
+ data: actions
170
+ }, null, 2);
171
+ }
172
+ function formatActionsDefault(result) {
173
+ if (result.data.length === 0) return "";
174
+ return result.data.map((entry) => getActionName(entry)).join("\n");
175
+ }
176
+
177
+ //#endregion
178
+ export { formatLsOutput };
179
+ //# sourceMappingURL=ls.mjs.map