@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.
- package/dist/cli.cjs +27 -353
- package/dist/cli.d.cts +2 -1
- package/dist/cli.d.mts +2 -1
- package/dist/cli.mjs +28 -353
- package/dist/cli.mjs.map +1 -1
- package/dist/config/afs-loader.cjs +123 -0
- package/dist/config/afs-loader.d.cts +14 -0
- package/dist/config/afs-loader.d.cts.map +1 -0
- package/dist/config/afs-loader.d.mts +14 -0
- package/dist/config/afs-loader.d.mts.map +1 -0
- package/dist/config/afs-loader.mjs +122 -0
- package/dist/config/afs-loader.mjs.map +1 -0
- package/dist/config/loader.cjs +2 -2
- package/dist/config/loader.mjs +2 -2
- package/dist/{commands/mount.cjs → config/mount-commands.cjs} +13 -49
- package/dist/config/mount-commands.d.cts +20 -0
- package/dist/config/mount-commands.d.cts.map +1 -0
- package/dist/config/mount-commands.d.mts +20 -0
- package/dist/config/mount-commands.d.mts.map +1 -0
- package/dist/{commands/mount.mjs → config/mount-commands.mjs} +14 -49
- package/dist/config/mount-commands.mjs.map +1 -0
- package/dist/config/schema.cjs +9 -1
- package/dist/config/schema.mjs +9 -1
- package/dist/config/schema.mjs.map +1 -1
- package/dist/core/commands/delete.cjs +41 -0
- package/dist/core/commands/delete.d.cts +18 -0
- package/dist/core/commands/delete.d.cts.map +1 -0
- package/dist/core/commands/delete.d.mts +18 -0
- package/dist/core/commands/delete.d.mts.map +1 -0
- package/dist/core/commands/delete.mjs +42 -0
- package/dist/core/commands/delete.mjs.map +1 -0
- package/dist/core/commands/exec.cjs +95 -0
- package/dist/core/commands/exec.d.cts +26 -0
- package/dist/core/commands/exec.d.cts.map +1 -0
- package/dist/core/commands/exec.d.mts +26 -0
- package/dist/core/commands/exec.d.mts.map +1 -0
- package/dist/core/commands/exec.mjs +96 -0
- package/dist/core/commands/exec.mjs.map +1 -0
- package/dist/core/commands/explain.cjs +254 -0
- package/dist/core/commands/explain.d.cts +25 -0
- package/dist/core/commands/explain.d.cts.map +1 -0
- package/dist/core/commands/explain.d.mts +25 -0
- package/dist/core/commands/explain.d.mts.map +1 -0
- package/dist/core/commands/explain.mjs +255 -0
- package/dist/core/commands/explain.mjs.map +1 -0
- package/dist/core/commands/explore.cjs +30 -0
- package/dist/core/commands/explore.d.mts +2 -0
- package/dist/core/commands/explore.mjs +31 -0
- package/dist/core/commands/explore.mjs.map +1 -0
- package/dist/core/commands/index.cjs +36 -0
- package/dist/core/commands/index.d.cts +21 -0
- package/dist/core/commands/index.d.cts.map +1 -0
- package/dist/core/commands/index.d.mts +24 -0
- package/dist/core/commands/index.d.mts.map +1 -0
- package/dist/core/commands/index.mjs +37 -0
- package/dist/core/commands/index.mjs.map +1 -0
- package/dist/core/commands/ls.cjs +57 -0
- package/dist/core/commands/ls.d.cts +21 -0
- package/dist/core/commands/ls.d.cts.map +1 -0
- package/dist/core/commands/ls.d.mts +21 -0
- package/dist/core/commands/ls.d.mts.map +1 -0
- package/dist/core/commands/ls.mjs +58 -0
- package/dist/core/commands/ls.mjs.map +1 -0
- package/dist/core/commands/mount.cjs +139 -0
- package/dist/core/commands/mount.d.cts +33 -0
- package/dist/core/commands/mount.d.cts.map +1 -0
- package/dist/core/commands/mount.d.mts +33 -0
- package/dist/core/commands/mount.d.mts.map +1 -0
- package/dist/core/commands/mount.mjs +140 -0
- package/dist/core/commands/mount.mjs.map +1 -0
- package/dist/core/commands/read.cjs +48 -0
- package/dist/core/commands/read.d.cts +17 -0
- package/dist/core/commands/read.d.cts.map +1 -0
- package/dist/core/commands/read.d.mts +17 -0
- package/dist/core/commands/read.d.mts.map +1 -0
- package/dist/core/commands/read.mjs +49 -0
- package/dist/core/commands/read.mjs.map +1 -0
- package/dist/core/commands/search.cjs +40 -0
- package/dist/core/commands/search.d.mts +2 -0
- package/dist/core/commands/search.mjs +41 -0
- package/dist/core/commands/search.mjs.map +1 -0
- package/dist/core/commands/serve.cjs +242 -0
- package/dist/core/commands/serve.d.mts +2 -0
- package/dist/core/commands/serve.mjs +242 -0
- package/dist/core/commands/serve.mjs.map +1 -0
- package/dist/core/commands/stat.cjs +53 -0
- package/dist/core/commands/stat.d.cts +17 -0
- package/dist/core/commands/stat.d.cts.map +1 -0
- package/dist/core/commands/stat.d.mts +17 -0
- package/dist/core/commands/stat.d.mts.map +1 -0
- package/dist/core/commands/stat.mjs +54 -0
- package/dist/core/commands/stat.mjs.map +1 -0
- package/dist/core/commands/types.cjs +13 -0
- package/dist/core/commands/types.d.cts +54 -0
- package/dist/core/commands/types.d.cts.map +1 -0
- package/dist/core/commands/types.d.mts +54 -0
- package/dist/core/commands/types.d.mts.map +1 -0
- package/dist/core/commands/types.mjs +14 -0
- package/dist/core/commands/types.mjs.map +1 -0
- package/dist/core/commands/write.cjs +70 -0
- package/dist/core/commands/write.d.cts +20 -0
- package/dist/core/commands/write.d.cts.map +1 -0
- package/dist/core/commands/write.d.mts +20 -0
- package/dist/core/commands/write.d.mts.map +1 -0
- package/dist/core/commands/write.mjs +71 -0
- package/dist/core/commands/write.mjs.map +1 -0
- package/dist/core/executor/index.cjs +196 -0
- package/dist/core/executor/index.d.cts +77 -0
- package/dist/core/executor/index.d.cts.map +1 -0
- package/dist/core/executor/index.d.mts +77 -0
- package/dist/core/executor/index.d.mts.map +1 -0
- package/dist/core/executor/index.mjs +195 -0
- package/dist/core/executor/index.mjs.map +1 -0
- package/dist/core/formatters/delete.cjs +37 -0
- package/dist/core/formatters/delete.d.cts +18 -0
- package/dist/core/formatters/delete.d.cts.map +1 -0
- package/dist/core/formatters/delete.d.mts +18 -0
- package/dist/core/formatters/delete.d.mts.map +1 -0
- package/dist/core/formatters/delete.mjs +37 -0
- package/dist/core/formatters/delete.mjs.map +1 -0
- package/dist/core/formatters/exec.cjs +60 -0
- package/dist/core/formatters/exec.d.cts +18 -0
- package/dist/core/formatters/exec.d.cts.map +1 -0
- package/dist/core/formatters/exec.d.mts +18 -0
- package/dist/core/formatters/exec.d.mts.map +1 -0
- package/dist/core/formatters/exec.mjs +60 -0
- package/dist/core/formatters/exec.mjs.map +1 -0
- package/dist/core/formatters/explain.cjs +97 -0
- package/dist/core/formatters/explain.d.cts +11 -0
- package/dist/core/formatters/explain.d.cts.map +1 -0
- package/dist/core/formatters/explain.d.mts +11 -0
- package/dist/core/formatters/explain.d.mts.map +1 -0
- package/dist/core/formatters/explain.mjs +96 -0
- package/dist/core/formatters/explain.mjs.map +1 -0
- package/dist/core/formatters/index.d.mts +9 -0
- package/dist/core/formatters/ls.cjs +179 -0
- package/dist/core/formatters/ls.d.cts +20 -0
- package/dist/core/formatters/ls.d.cts.map +1 -0
- package/dist/core/formatters/ls.d.mts +20 -0
- package/dist/core/formatters/ls.d.mts.map +1 -0
- package/dist/core/formatters/ls.mjs +179 -0
- package/dist/core/formatters/ls.mjs.map +1 -0
- package/dist/core/formatters/mount.cjs +55 -0
- package/dist/core/formatters/mount.d.cts +15 -0
- package/dist/core/formatters/mount.d.cts.map +1 -0
- package/dist/core/formatters/mount.d.mts +15 -0
- package/dist/core/formatters/mount.d.mts.map +1 -0
- package/dist/core/formatters/mount.mjs +55 -0
- package/dist/core/formatters/mount.mjs.map +1 -0
- package/dist/core/formatters/read.cjs +100 -0
- package/dist/core/formatters/read.d.cts +22 -0
- package/dist/core/formatters/read.d.cts.map +1 -0
- package/dist/core/formatters/read.d.mts +22 -0
- package/dist/core/formatters/read.d.mts.map +1 -0
- package/dist/core/formatters/read.mjs +100 -0
- package/dist/core/formatters/read.mjs.map +1 -0
- package/dist/core/formatters/search.cjs +44 -0
- package/dist/core/formatters/search.d.mts +1 -0
- package/dist/core/formatters/search.mjs +44 -0
- package/dist/core/formatters/search.mjs.map +1 -0
- package/dist/core/formatters/stat.cjs +155 -0
- package/dist/core/formatters/stat.d.cts +15 -0
- package/dist/core/formatters/stat.d.cts.map +1 -0
- package/dist/core/formatters/stat.d.mts +15 -0
- package/dist/core/formatters/stat.d.mts.map +1 -0
- package/dist/core/formatters/stat.mjs +155 -0
- package/dist/core/formatters/stat.mjs.map +1 -0
- package/dist/core/formatters/write.cjs +51 -0
- package/dist/core/formatters/write.d.cts +22 -0
- package/dist/core/formatters/write.d.cts.map +1 -0
- package/dist/core/formatters/write.d.mts +22 -0
- package/dist/core/formatters/write.d.mts.map +1 -0
- package/dist/core/formatters/write.mjs +51 -0
- package/dist/core/formatters/write.mjs.map +1 -0
- package/dist/core/helpers/exec-args.cjs +142 -0
- package/dist/core/helpers/exec-args.d.cts +46 -0
- package/dist/core/helpers/exec-args.d.cts.map +1 -0
- package/dist/core/helpers/exec-args.d.mts +46 -0
- package/dist/core/helpers/exec-args.d.mts.map +1 -0
- package/dist/core/helpers/exec-args.mjs +139 -0
- package/dist/core/helpers/exec-args.mjs.map +1 -0
- package/dist/core/helpers/stdin.cjs +41 -0
- package/dist/core/helpers/stdin.d.cts +15 -0
- package/dist/core/helpers/stdin.d.cts.map +1 -0
- package/dist/core/helpers/stdin.d.mts +15 -0
- package/dist/core/helpers/stdin.d.mts.map +1 -0
- package/dist/core/helpers/stdin.mjs +41 -0
- package/dist/core/helpers/stdin.mjs.map +1 -0
- package/dist/core/index.cjs +49 -0
- package/dist/core/index.d.cts +24 -0
- package/dist/core/index.d.mts +25 -0
- package/dist/core/index.mjs +24 -0
- package/dist/core/path-utils.cjs +1 -0
- package/dist/core/path-utils.mjs +3 -0
- package/dist/core/types.d.cts +24 -0
- package/dist/core/types.d.cts.map +1 -0
- package/dist/core/types.d.mts +24 -0
- package/dist/core/types.d.mts.map +1 -0
- package/dist/errors.cjs +0 -11
- package/dist/errors.mjs +1 -11
- package/dist/errors.mjs.map +1 -1
- package/dist/explorer/actions.cjs +67 -32
- package/dist/explorer/actions.mjs +66 -32
- package/dist/explorer/actions.mjs.map +1 -1
- package/dist/explorer/components/dialog.cjs +170 -46
- package/dist/explorer/components/dialog.mjs +170 -46
- package/dist/explorer/components/dialog.mjs.map +1 -1
- package/dist/explorer/components/metadata-panel.cjs +86 -3
- package/dist/explorer/components/metadata-panel.mjs +86 -3
- package/dist/explorer/components/metadata-panel.mjs.map +1 -1
- package/dist/explorer/screen.cjs +63 -27
- package/dist/explorer/screen.d.cts +23 -0
- package/dist/explorer/screen.d.cts.map +1 -0
- package/dist/explorer/screen.d.mts +23 -0
- package/dist/explorer/screen.d.mts.map +1 -0
- package/dist/explorer/screen.mjs +63 -27
- package/dist/explorer/screen.mjs.map +1 -1
- package/dist/explorer/theme.cjs +1 -1
- package/dist/explorer/theme.mjs +1 -1
- package/dist/explorer/theme.mjs.map +1 -1
- package/dist/index.cjs +7 -1
- package/dist/index.d.cts +4 -1
- package/dist/index.d.mts +4 -1
- package/dist/index.mjs +4 -1
- package/dist/mcp/http-transport.cjs +68 -0
- package/dist/mcp/http-transport.mjs +68 -0
- package/dist/mcp/http-transport.mjs.map +1 -0
- package/dist/mcp/prompts.cjs +48 -0
- package/dist/mcp/prompts.mjs +48 -0
- package/dist/mcp/prompts.mjs.map +1 -0
- package/dist/mcp/resources.cjs +25 -0
- package/dist/mcp/resources.mjs +25 -0
- package/dist/mcp/resources.mjs.map +1 -0
- package/dist/mcp/server.cjs +30 -0
- package/dist/mcp/server.mjs +30 -0
- package/dist/mcp/server.mjs.map +1 -0
- package/dist/mcp/tools.cjs +196 -0
- package/dist/mcp/tools.mjs +196 -0
- package/dist/mcp/tools.mjs.map +1 -0
- package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/index.d.cts +10 -0
- package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/index.d.cts.map +1 -0
- package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/index.d.mts +10 -0
- package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/index.d.mts.map +1 -0
- package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/types.d.cts +46 -0
- package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/types.d.cts.map +1 -0
- package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/types.d.mts +46 -0
- package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/types.d.mts.map +1 -0
- package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/urlpattern.cjs +902 -0
- package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/urlpattern.mjs +902 -0
- package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/dist/urlpattern.mjs.map +1 -0
- package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/index.cjs +6 -0
- package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/index.mjs +8 -0
- package/dist/node_modules/.pnpm/urlpattern-polyfill@10.1.0/node_modules/urlpattern-polyfill/index.mjs.map +1 -0
- package/dist/path-utils.d.cts +50 -0
- package/dist/path-utils.d.cts.map +1 -0
- package/dist/path-utils.d.mts +50 -0
- package/dist/path-utils.d.mts.map +1 -0
- package/dist/repl.cjs +485 -0
- package/dist/repl.d.cts +15 -0
- package/dist/repl.d.cts.map +1 -0
- package/dist/repl.d.mts +16 -0
- package/dist/repl.d.mts.map +1 -0
- package/dist/repl.mjs +485 -0
- package/dist/repl.mjs.map +1 -0
- package/dist/serve.cjs +146 -0
- package/dist/serve.d.cts +41 -0
- package/dist/serve.d.cts.map +1 -0
- package/dist/serve.d.mts +41 -0
- package/dist/serve.d.mts.map +1 -0
- package/dist/serve.mjs +146 -0
- package/dist/serve.mjs.map +1 -0
- package/dist/ui/header.cjs +1 -40
- package/dist/ui/header.mjs +1 -39
- package/dist/ui/header.mjs.map +1 -1
- package/dist/ui/index.cjs +2 -9
- package/dist/ui/index.mjs +2 -7
- package/dist/ui/index.mjs.map +1 -1
- package/dist/ui/terminal.cjs +1 -10
- package/dist/ui/terminal.mjs +1 -8
- package/dist/ui/terminal.mjs.map +1 -1
- package/package.json +29 -16
- package/dist/commands/exec.cjs +0 -164
- package/dist/commands/exec.mjs +0 -160
- package/dist/commands/exec.mjs.map +0 -1
- package/dist/commands/explain.cjs +0 -244
- package/dist/commands/explain.mjs +0 -242
- package/dist/commands/explain.mjs.map +0 -1
- package/dist/commands/index.cjs +0 -8
- package/dist/commands/index.mjs +0 -10
- package/dist/commands/ls.cjs +0 -242
- package/dist/commands/ls.mjs +0 -242
- package/dist/commands/ls.mjs.map +0 -1
- package/dist/commands/mount.mjs.map +0 -1
- package/dist/commands/read.cjs +0 -264
- package/dist/commands/read.mjs +0 -263
- package/dist/commands/read.mjs.map +0 -1
- package/dist/commands/serve.cjs +0 -144
- package/dist/commands/serve.mjs +0 -143
- package/dist/commands/serve.mjs.map +0 -1
- package/dist/commands/stat.cjs +0 -195
- package/dist/commands/stat.mjs +0 -195
- package/dist/commands/stat.mjs.map +0 -1
- package/dist/commands/write.cjs +0 -85
- package/dist/commands/write.mjs +0 -85
- package/dist/commands/write.mjs.map +0 -1
- package/dist/config/provider-factory.cjs +0 -400
- package/dist/config/provider-factory.mjs +0 -401
- package/dist/config/provider-factory.mjs.map +0 -1
- package/dist/config/uri-parser.cjs +0 -285
- package/dist/config/uri-parser.mjs +0 -285
- package/dist/config/uri-parser.mjs.map +0 -1
- package/dist/runtime.cjs +0 -120
- package/dist/runtime.mjs +0 -120
- package/dist/runtime.mjs.map +0 -1
- package/dist/utils/meta.cjs +0 -51
- package/dist/utils/meta.mjs +0 -49
- 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
|