@aigne/cli 1.74.0-beta.1 → 1.74.0-beta.3

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 (128) hide show
  1. package/README.md +153 -14
  2. package/dist/commands/aigne.cjs +3 -4
  3. package/dist/commands/aigne.mjs +3 -4
  4. package/dist/commands/aigne.mjs.map +1 -1
  5. package/dist/commands/app/agent.cjs +2 -27
  6. package/dist/commands/app/agent.mjs +2 -26
  7. package/dist/commands/app/agent.mjs.map +1 -1
  8. package/dist/commands/create.cjs +1 -1
  9. package/dist/commands/create.mjs +1 -1
  10. package/dist/commands/eval.cjs +42 -3
  11. package/dist/commands/eval.mjs +43 -4
  12. package/dist/commands/eval.mjs.map +1 -1
  13. package/dist/commands/explain.cjs +340 -0
  14. package/dist/commands/explain.mjs +340 -0
  15. package/dist/commands/explain.mjs.map +1 -0
  16. package/dist/commands/hub.cjs +111 -14
  17. package/dist/commands/hub.mjs +111 -14
  18. package/dist/commands/hub.mjs.map +1 -1
  19. package/dist/commands/observe.cjs +44 -1
  20. package/dist/commands/observe.mjs +44 -1
  21. package/dist/commands/observe.mjs.map +1 -1
  22. package/dist/commands/run-skill.cjs +29 -13
  23. package/dist/commands/run-skill.mjs +29 -13
  24. package/dist/commands/run-skill.mjs.map +1 -1
  25. package/dist/commands/run.cjs +5 -4
  26. package/dist/commands/run.mjs +5 -4
  27. package/dist/commands/run.mjs.map +1 -1
  28. package/dist/commands/serve-mcp.cjs +49 -4
  29. package/dist/commands/serve-mcp.mjs +49 -3
  30. package/dist/commands/serve-mcp.mjs.map +1 -1
  31. package/dist/commands/shell.cjs +106 -0
  32. package/dist/commands/shell.mjs +105 -0
  33. package/dist/commands/shell.mjs.map +1 -0
  34. package/dist/shell/repl.cjs +544 -0
  35. package/dist/shell/repl.mjs +543 -0
  36. package/dist/shell/repl.mjs.map +1 -0
  37. package/dist/shell/tools/ask-user.cjs +191 -0
  38. package/dist/shell/tools/ask-user.mjs +187 -0
  39. package/dist/shell/tools/ask-user.mjs.map +1 -0
  40. package/dist/shell/tools/index.cjs +2 -0
  41. package/dist/shell/tools/index.mjs +4 -0
  42. package/dist/shell/tools/render.cjs +189 -0
  43. package/dist/shell/tools/render.mjs +186 -0
  44. package/dist/shell/tools/render.mjs.map +1 -0
  45. package/dist/tracer/terminal.cjs +120 -133
  46. package/dist/tracer/terminal.mjs +121 -134
  47. package/dist/tracer/terminal.mjs.map +1 -1
  48. package/dist/ui/utils/terminal-select.cjs +73 -0
  49. package/dist/ui/utils/terminal-select.mjs +72 -0
  50. package/dist/ui/utils/terminal-select.mjs.map +1 -0
  51. package/dist/utils/agent-v1.cjs +2 -2
  52. package/dist/utils/agent-v1.mjs +2 -2
  53. package/dist/utils/aigne-hub/credential.cjs +3 -3
  54. package/dist/utils/aigne-hub/credential.mjs +3 -3
  55. package/dist/utils/aigne-hub/model.cjs +2 -2
  56. package/dist/utils/aigne-hub/model.mjs +1 -1
  57. package/dist/utils/ascii-logo.cjs +12 -13
  58. package/dist/utils/ascii-logo.d.cts.map +1 -1
  59. package/dist/utils/ascii-logo.d.mts.map +1 -1
  60. package/dist/utils/ascii-logo.mjs +12 -13
  61. package/dist/utils/ascii-logo.mjs.map +1 -1
  62. package/dist/utils/evaluation/evaluator.cjs +1 -1
  63. package/dist/utils/evaluation/evaluator.mjs +1 -1
  64. package/dist/utils/evaluation/reporter.cjs +78 -1
  65. package/dist/utils/evaluation/reporter.mjs +76 -1
  66. package/dist/utils/evaluation/reporter.mjs.map +1 -1
  67. package/dist/utils/exit-codes.cjs +73 -0
  68. package/dist/utils/exit-codes.d.cts +52 -0
  69. package/dist/utils/exit-codes.d.cts.map +1 -0
  70. package/dist/utils/exit-codes.d.mts +52 -0
  71. package/dist/utils/exit-codes.d.mts.map +1 -0
  72. package/dist/utils/exit-codes.mjs +71 -0
  73. package/dist/utils/exit-codes.mjs.map +1 -0
  74. package/dist/utils/output.cjs +61 -0
  75. package/dist/utils/output.d.cts +43 -0
  76. package/dist/utils/output.d.cts.map +1 -0
  77. package/dist/utils/output.d.mts +43 -0
  78. package/dist/utils/output.d.mts.map +1 -0
  79. package/dist/utils/output.mjs +56 -0
  80. package/dist/utils/output.mjs.map +1 -0
  81. package/dist/utils/run-chat-loop.cjs +1 -1
  82. package/dist/utils/run-chat-loop.mjs +1 -1
  83. package/dist/utils/run-with-aigne.cjs +10 -3
  84. package/dist/utils/run-with-aigne.d.cts.map +1 -1
  85. package/dist/utils/run-with-aigne.d.mts.map +1 -1
  86. package/dist/utils/run-with-aigne.mjs +10 -3
  87. package/dist/utils/run-with-aigne.mjs.map +1 -1
  88. package/dist/utils/serve-mcp.cjs +1 -1
  89. package/dist/utils/serve-mcp.mjs +1 -1
  90. package/dist/utils/view.cjs +34 -0
  91. package/dist/utils/view.d.cts +47 -0
  92. package/dist/utils/view.d.cts.map +1 -0
  93. package/dist/utils/view.d.mts +47 -0
  94. package/dist/utils/view.d.mts.map +1 -0
  95. package/dist/utils/view.mjs +33 -0
  96. package/dist/utils/view.mjs.map +1 -0
  97. package/dist/utils/yargs.cjs +27 -5
  98. package/dist/utils/yargs.d.cts +13 -0
  99. package/dist/utils/yargs.d.cts.map +1 -1
  100. package/dist/utils/yargs.d.mts +14 -1
  101. package/dist/utils/yargs.d.mts.map +1 -1
  102. package/dist/utils/yargs.mjs +32 -10
  103. package/dist/utils/yargs.mjs.map +1 -1
  104. package/package.json +25 -21
  105. package/dist/commands/app/app.cjs +0 -92
  106. package/dist/commands/app/app.mjs +0 -90
  107. package/dist/commands/app/app.mjs.map +0 -1
  108. package/dist/commands/app/cli.cjs +0 -6
  109. package/dist/commands/app/cli.d.cts +0 -1
  110. package/dist/commands/app/cli.d.mts +0 -1
  111. package/dist/commands/app/cli.mjs +0 -8
  112. package/dist/commands/app/cli.mjs.map +0 -1
  113. package/dist/commands/app/upgrade.cjs +0 -243
  114. package/dist/commands/app/upgrade.mjs +0 -240
  115. package/dist/commands/app/upgrade.mjs.map +0 -1
  116. package/dist/commands/app.cjs +0 -53
  117. package/dist/commands/app.mjs +0 -53
  118. package/dist/commands/app.mjs.map +0 -1
  119. package/dist/commands/deploy.cjs +0 -237
  120. package/dist/commands/deploy.mjs +0 -237
  121. package/dist/commands/deploy.mjs.map +0 -1
  122. package/dist/utils/listr.cjs +0 -226
  123. package/dist/utils/listr.d.cts +0 -71
  124. package/dist/utils/listr.d.cts.map +0 -1
  125. package/dist/utils/listr.d.mts +0 -71
  126. package/dist/utils/listr.d.mts.map +0 -1
  127. package/dist/utils/listr.mjs +0 -222
  128. package/dist/utils/listr.mjs.map +0 -1
@@ -0,0 +1,33 @@
1
+ //#region src/utils/view.ts
2
+ /**
3
+ * Detect which view to use based on flags, environment, and context.
4
+ *
5
+ * Priority order:
6
+ * 1. Explicit flags (--view, --json, --agent)
7
+ * 2. Environment variable (ARCBLOCK_AGENT)
8
+ * 3. Non-TTY detection → force default (machine truth)
9
+ * 4. User config
10
+ * 5. TTY default → human
11
+ */
12
+ function detectView(options, config, context) {
13
+ if (options.view) return options.view;
14
+ if (options.json) return "json";
15
+ if (options.agent) return "llm";
16
+ if (context.isAgent) return "llm";
17
+ if (!context.isTTY) return "default";
18
+ if (config.defaultView) return config.defaultView;
19
+ return "human";
20
+ }
21
+ /**
22
+ * Create view context from current process environment.
23
+ */
24
+ function createViewContext() {
25
+ return {
26
+ isTTY: process.stdout.isTTY ?? false,
27
+ isAgent: process.env.ARCBLOCK_AGENT === "1"
28
+ };
29
+ }
30
+
31
+ //#endregion
32
+ export { createViewContext, detectView };
33
+ //# sourceMappingURL=view.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.mjs","names":[],"sources":["../../src/utils/view.ts"],"sourcesContent":["/**\n * CLI View System\n *\n * Implements the four-layer output architecture:\n * - Layer 1: Machine Truth (default for non-TTY)\n * - Layer 2: JSON (--json)\n * - Layer 3: LLM DSL (--view=llm or --agent)\n * - Layer 4: Human Interactive (default for TTY)\n */\n\nexport type ViewType = \"default\" | \"json\" | \"llm\" | \"human\";\n\nexport interface ViewOptions {\n /** Explicit --view flag value */\n view?: ViewType;\n /** --json flag */\n json?: boolean;\n /** --agent flag (equivalent to --view=llm) */\n agent?: boolean;\n}\n\nexport interface ViewConfig {\n /** User's default view preference from config file */\n defaultView?: ViewType;\n}\n\nexport interface ViewContext {\n /** Whether stdout is a TTY */\n isTTY: boolean;\n /** Whether ARCBLOCK_AGENT environment variable is set */\n isAgent: boolean;\n}\n\n/**\n * Detect which view to use based on flags, environment, and context.\n *\n * Priority order:\n * 1. Explicit flags (--view, --json, --agent)\n * 2. Environment variable (ARCBLOCK_AGENT)\n * 3. Non-TTY detection → force default (machine truth)\n * 4. User config\n * 5. TTY default → human\n */\nexport function detectView(\n options: ViewOptions,\n config: ViewConfig,\n context: ViewContext,\n): ViewType {\n // 1. Explicit flag highest priority\n if (options.view) return options.view;\n if (options.json) return \"json\";\n if (options.agent) return \"llm\";\n\n // 2. Environment variable (Agent runtime)\n if (context.isAgent) return \"llm\";\n\n // 3. Non-TTY (pipe) → auto-degrade to machine truth\n if (!context.isTTY) return \"default\";\n\n // 4. User config\n if (config.defaultView) return config.defaultView;\n\n // 5. TTY terminal default to human view (backward compatible)\n return \"human\";\n}\n\n/**\n * Create view context from current process environment.\n */\nexport function createViewContext(): ViewContext {\n return {\n isTTY: process.stdout.isTTY ?? false,\n isAgent: process.env.ARCBLOCK_AGENT === \"1\",\n };\n}\n"],"mappings":";;;;;;;;;;;AA2CA,SAAgB,WACd,SACA,QACA,SACU;AAEV,KAAI,QAAQ,KAAM,QAAO,QAAQ;AACjC,KAAI,QAAQ,KAAM,QAAO;AACzB,KAAI,QAAQ,MAAO,QAAO;AAG1B,KAAI,QAAQ,QAAS,QAAO;AAG5B,KAAI,CAAC,QAAQ,MAAO,QAAO;AAG3B,KAAI,OAAO,YAAa,QAAO,OAAO;AAGtC,QAAO;;;;;AAMT,SAAgB,oBAAiC;AAC/C,QAAO;EACL,OAAO,QAAQ,OAAO,SAAS;EAC/B,SAAS,QAAQ,IAAI,mBAAmB;EACzC"}
@@ -1,19 +1,20 @@
1
1
  const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
2
  let node_fs = require("node:fs");
3
3
  let _aigne_core_utils_logger = require("@aigne/core/utils/logger");
4
- let node_path = require("node:path");
5
4
  let node_fs_promises = require("node:fs/promises");
5
+ let node_path = require("node:path");
6
+ let zod = require("zod");
7
+ zod = require_rolldown_runtime.__toESM(zod);
6
8
  let _aigne_core = require("@aigne/core");
7
9
  let _aigne_core_utils_type_utils = require("@aigne/core/utils/type-utils");
8
10
  let _aigne_aigne_hub = require("@aigne/aigne-hub");
9
11
  let yaml = require("yaml");
10
- let zod = require("zod");
11
- zod = require_rolldown_runtime.__toESM(zod);
12
12
  let node_tty = require("node:tty");
13
13
  let node_util = require("node:util");
14
14
 
15
15
  //#region src/utils/yargs.ts
16
16
  const MODEL_OPTIONS_GROUP_NAME = "Model Options";
17
+ const OUTPUT_OPTIONS_GROUP_NAME = "Output Options";
17
18
  const withRunAgentCommonOptions = (yargs) => yargs.option("interactive", {
18
19
  describe: "Run in interactive chat mode",
19
20
  type: "boolean",
@@ -54,11 +55,12 @@ const withRunAgentCommonOptions = (yargs) => yargs.option("interactive", {
54
55
  describe: "Input to the agent, use @<file> to read from a file",
55
56
  type: "string",
56
57
  array: true,
57
- alias: "i"
58
+ alias: ["m", "i"]
58
59
  }).option("input-file", {
59
60
  describe: "Input files to the agent",
60
61
  type: "string",
61
- array: true
62
+ array: true,
63
+ alias: "f"
62
64
  }).option("format", {
63
65
  describe: "Input format for the agent (available: text, json, yaml default: text)",
64
66
  type: "string",
@@ -88,6 +90,26 @@ const withRunAgentCommonOptions = (yargs) => yargs.option("interactive", {
88
90
  group: MODEL_OPTIONS_GROUP_NAME,
89
91
  describe: "Custom AIGNE Hub service URL. Used to fetch remote agent definitions or models.",
90
92
  type: "string"
93
+ }).option("json", {
94
+ group: OUTPUT_OPTIONS_GROUP_NAME,
95
+ describe: "Output in JSON format",
96
+ type: "boolean",
97
+ default: false
98
+ }).option("view", {
99
+ group: OUTPUT_OPTIONS_GROUP_NAME,
100
+ describe: "Output view type (human, json, llm, default)",
101
+ type: "string",
102
+ choices: [
103
+ "default",
104
+ "json",
105
+ "llm",
106
+ "human"
107
+ ]
108
+ }).option("agent", {
109
+ group: OUTPUT_OPTIONS_GROUP_NAME,
110
+ describe: "Agent mode - output in LLM-friendly format (equivalent to --view=llm)",
111
+ type: "boolean",
112
+ default: false
91
113
  });
92
114
  function formatModelsName(models) {
93
115
  return models.map((i) => {
@@ -1,3 +1,4 @@
1
+ import { ViewType } from "./view.cjs";
1
2
  import { Agent, Message } from "@aigne/core";
2
3
  import { LogLevel } from "@aigne/core/utils/logger";
3
4
  import { Argv } from "yargs";
@@ -37,6 +38,12 @@ declare const withRunAgentCommonOptions: (yargs: Argv) => Argv<{
37
38
  "log-level": LogLevel;
38
39
  } & {
39
40
  "aigne-hub-url": string | undefined;
41
+ } & {
42
+ json: boolean;
43
+ } & {
44
+ view: ViewType | undefined;
45
+ } & {
46
+ agent: boolean;
40
47
  }>;
41
48
  type _AgentRunCommonOptions = Partial<InferArgv<ReturnType<typeof withAgentInputSchema>>>;
42
49
  /** Convert literal string types like 'foo-bar' to 'FooBar' */
@@ -88,6 +95,12 @@ declare function withAgentInputSchema(yargs: Argv, options: Pick<Agent, "inputSc
88
95
  "log-level": LogLevel;
89
96
  } & {
90
97
  "aigne-hub-url": string | undefined;
98
+ } & {
99
+ json: boolean;
100
+ } & {
101
+ view: ViewType | undefined;
102
+ } & {
103
+ agent: boolean;
91
104
  }>;
92
105
  declare function parseAgentInput(i: Message & AgentRunCommonOptions, agent: Agent): Promise<any>;
93
106
  declare function stdinHasData(): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"yargs.d.cts","names":[],"sources":["../../src/utils/yargs.ts"],"mappings":";;;;;;KAoCY,SAAA,MAAe,CAAA,SAAU,IAAA,YAAA,CAAA;AAAA,cAIxB,yBAAA,GAAA,KAAA,EAAoC,IAAA,KAAI,IAAA;EAAA,WAAA;AAAA;EAAA;AAAA;EAAA,KAAA;AAAA;EAAA;AAAA;EAAA,WAAA;AAAA;EAAA;AAAA;EAAA;AAAA;EAAA;AAAA;EAAA,KAAA;AAAA;EAAA;AAAA;EAAA,MAAA;AAAA;EAAA,MAAA;AAAA;EAAA;AAAA;EAAA,KAAA;AAAA;EAAA;;;;KAiHhD,sBAAA,GAAyB,OAAA,CAAQ,SAAA,CAAU,UAAA,QAAkB,oBAAA;AAAA;AAAA,KAG7D,UAAA,oCAA8C,CAAA,YAE/C,CAAA,sCACK,UAAA,CAAW,CAAA,IAAK,UAAA,CAAW,CAAA,MAC9B,UAAA,CAAW,CAAA;AAAA;AAAA,KAGZ,SAAA,oCAA6C,CAAA,YAE9C,CAAA,sCACK,CAAA,GAAI,UAAA,CAAW,CAAA,MAClB,CAAA;AAAA;AAAA,KAGD,YAAA,WAAuB,WAAA,IAAe,CAAA,kBAAmB,OAAA,CAAQ,SAAA,CAAU,CAAA,SAAU,CAAA;AAAA,KAE9E,qBAAA,mBACI,sBAAA,IAA0B,YAAA,CAAa,GAAA,IAAO,sBAAA,CAAuB,GAAA;AAAA,iBAGrE,YAAA,CAAA,IAAA,EACR,OAAA,EAAA,IAAA;EAAA,KAAA;EAAA,QAAA;AAAA;EAAA,IAAA;EAAA,KAAA;EAAA,QAAA;AAAA;AAAA,iBA6BQ,oBAAA,CAAA,KAAA,EACP,IAAA,EAAA,OAAA,EACE,IAAA,CAAK,KAAA;EAAA,cAAA;AAAA,IAAqD,IAAA;EAAA,WAAA;AAAA;EAAA;AAAA;EAAA,KAAA;AAAA;EAAA;AAAA;EAAA,WAAA;AAAA;EAAA;AAAA;EAAA;AAAA;EAAA;AAAA;EAAA,KAAA;AAAA;EAAA;AAAA;EAAA,MAAA;AAAA;EAAA,MAAA;AAAA;EAAA;AAAA;EAAA,KAAA;AAAA;EAAA;;;;iBAuB/C,eAAA,CAAA,CAAA,EAAmB,OAAA,GAAU,qBAAA,EAAA,KAAA,EAA8B,KAAA,GAAK,OAAA;AAAA,iBAgFhE,YAAA,CAAA,GAAgB,OAAA"}
1
+ {"version":3,"file":"yargs.d.cts","names":[],"sources":["../../src/utils/yargs.ts"],"mappings":";;;;;;;KAqCY,SAAA,MAAe,CAAA,SAAU,IAAA,YAAA,CAAA;AAAA,cAKxB,yBAAA,GAAA,KAAA,EAAoC,IAAA,KAAI,IAAA;EAAA,WAAA;AAAA;EAAA;AAAA;EAAA,KAAA;AAAA;EAAA;AAAA;EAAA,WAAA;AAAA;EAAA;AAAA;EAAA;AAAA;EAAA;AAAA;EAAA,KAAA;AAAA;EAAA;AAAA;EAAA,MAAA;AAAA;EAAA,MAAA;AAAA;EAAA;AAAA;EAAA,KAAA;AAAA;EAAA;;;;;;;;;;KAqIhD,sBAAA,GAAyB,OAAA,CAAQ,SAAA,CAAU,UAAA,QAAkB,oBAAA;AAAA;AAAA,KAG7D,UAAA,oCAA8C,CAAA,YAE/C,CAAA,sCACK,UAAA,CAAW,CAAA,IAAK,UAAA,CAAW,CAAA,MAC9B,UAAA,CAAW,CAAA;AAAA;AAAA,KAGZ,SAAA,oCAA6C,CAAA,YAE9C,CAAA,sCACK,CAAA,GAAI,UAAA,CAAW,CAAA,MAClB,CAAA;AAAA;AAAA,KAGD,YAAA,WAAuB,WAAA,IAAe,CAAA,kBAAmB,OAAA,CAAQ,SAAA,CAAU,CAAA,SAAU,CAAA;AAAA,KAE9E,qBAAA,mBACI,sBAAA,IAA0B,YAAA,CAAa,GAAA,IAAO,sBAAA,CAAuB,GAAA;AAAA,iBAGrE,YAAA,CAAA,IAAA,EACR,OAAA,EAAA,IAAA;EAAA,KAAA;EAAA,QAAA;AAAA;EAAA,IAAA;EAAA,KAAA;EAAA,QAAA;AAAA;AAAA,iBA6BQ,oBAAA,CAAA,KAAA,EACP,IAAA,EAAA,OAAA,EACE,IAAA,CAAK,KAAA;EAAA,cAAA;AAAA,IAAqD,IAAA;EAAA,WAAA;AAAA;EAAA;AAAA;EAAA,KAAA;AAAA;EAAA;AAAA;EAAA,WAAA;AAAA;EAAA;AAAA;EAAA;AAAA;EAAA;AAAA;EAAA,KAAA;AAAA;EAAA;AAAA;EAAA,MAAA;AAAA;EAAA,MAAA;AAAA;EAAA;AAAA;EAAA,KAAA;AAAA;EAAA;;;;;;;;;;iBAuB/C,eAAA,CAAA,CAAA,EAAmB,OAAA,GAAU,qBAAA,EAAA,KAAA,EAA8B,KAAA,GAAK,OAAA;AAAA,iBAgFhE,YAAA,CAAA,GAAgB,OAAA"}
@@ -1,7 +1,8 @@
1
+ import { ViewType } from "./view.mjs";
1
2
  import { LogLevel } from "@aigne/core/utils/logger";
2
3
  import { Argv } from "yargs";
3
- import { Agent, Message } from "@aigne/core";
4
4
  import { ZodType } from "zod";
5
+ import { Agent, Message } from "@aigne/core";
5
6
 
6
7
  //#region src/utils/yargs.d.ts
7
8
  type InferArgv<T> = T extends Argv<infer U> ? U : never;
@@ -37,6 +38,12 @@ declare const withRunAgentCommonOptions: (yargs: Argv) => Argv<{
37
38
  "log-level": LogLevel;
38
39
  } & {
39
40
  "aigne-hub-url": string | undefined;
41
+ } & {
42
+ json: boolean;
43
+ } & {
44
+ view: ViewType | undefined;
45
+ } & {
46
+ agent: boolean;
40
47
  }>;
41
48
  type _AgentRunCommonOptions = Partial<InferArgv<ReturnType<typeof withAgentInputSchema>>>;
42
49
  /** Convert literal string types like 'foo-bar' to 'FooBar' */
@@ -88,6 +95,12 @@ declare function withAgentInputSchema(yargs: Argv, options: Pick<Agent, "inputSc
88
95
  "log-level": LogLevel;
89
96
  } & {
90
97
  "aigne-hub-url": string | undefined;
98
+ } & {
99
+ json: boolean;
100
+ } & {
101
+ view: ViewType | undefined;
102
+ } & {
103
+ agent: boolean;
91
104
  }>;
92
105
  declare function parseAgentInput(i: Message & AgentRunCommonOptions, agent: Agent): Promise<any>;
93
106
  declare function stdinHasData(): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"yargs.d.mts","names":[],"sources":["../../src/utils/yargs.ts"],"mappings":";;;;;;KAoCY,SAAA,MAAe,CAAA,SAAU,IAAA,YAAA,CAAA;AAAA,cAIxB,yBAAA,GAAA,KAAA,EAAoC,IAAA,KAAI,IAAA;EAAA,WAAA;AAAA;EAAA;AAAA;EAAA,KAAA;AAAA;EAAA;AAAA;EAAA,WAAA;AAAA;EAAA;AAAA;EAAA;AAAA;EAAA;AAAA;EAAA,KAAA;AAAA;EAAA;AAAA;EAAA,MAAA;AAAA;EAAA,MAAA;AAAA;EAAA;AAAA;EAAA,KAAA;AAAA;EAAA;;;;KAiHhD,sBAAA,GAAyB,OAAA,CAAQ,SAAA,CAAU,UAAA,QAAkB,oBAAA;AAAA;AAAA,KAG7D,UAAA,oCAA8C,CAAA,YAE/C,CAAA,sCACK,UAAA,CAAW,CAAA,IAAK,UAAA,CAAW,CAAA,MAC9B,UAAA,CAAW,CAAA;AAAA;AAAA,KAGZ,SAAA,oCAA6C,CAAA,YAE9C,CAAA,sCACK,CAAA,GAAI,UAAA,CAAW,CAAA,MAClB,CAAA;AAAA;AAAA,KAGD,YAAA,WAAuB,WAAA,IAAe,CAAA,kBAAmB,OAAA,CAAQ,SAAA,CAAU,CAAA,SAAU,CAAA;AAAA,KAE9E,qBAAA,mBACI,sBAAA,IAA0B,YAAA,CAAa,GAAA,IAAO,sBAAA,CAAuB,GAAA;AAAA,iBAGrE,YAAA,CAAA,IAAA,EACR,OAAA,EAAA,IAAA;EAAA,KAAA;EAAA,QAAA;AAAA;EAAA,IAAA;EAAA,KAAA;EAAA,QAAA;AAAA;AAAA,iBA6BQ,oBAAA,CAAA,KAAA,EACP,IAAA,EAAA,OAAA,EACE,IAAA,CAAK,KAAA;EAAA,cAAA;AAAA,IAAqD,IAAA;EAAA,WAAA;AAAA;EAAA;AAAA;EAAA,KAAA;AAAA;EAAA;AAAA;EAAA,WAAA;AAAA;EAAA;AAAA;EAAA;AAAA;EAAA;AAAA;EAAA,KAAA;AAAA;EAAA;AAAA;EAAA,MAAA;AAAA;EAAA,MAAA;AAAA;EAAA;AAAA;EAAA,KAAA;AAAA;EAAA;;;;iBAuB/C,eAAA,CAAA,CAAA,EAAmB,OAAA,GAAU,qBAAA,EAAA,KAAA,EAA8B,KAAA,GAAK,OAAA;AAAA,iBAgFhE,YAAA,CAAA,GAAgB,OAAA"}
1
+ {"version":3,"file":"yargs.d.mts","names":[],"sources":["../../src/utils/yargs.ts"],"mappings":";;;;;;;KAqCY,SAAA,MAAe,CAAA,SAAU,IAAA,YAAA,CAAA;AAAA,cAKxB,yBAAA,GAAA,KAAA,EAAoC,IAAA,KAAI,IAAA;EAAA,WAAA;AAAA;EAAA;AAAA;EAAA,KAAA;AAAA;EAAA;AAAA;EAAA,WAAA;AAAA;EAAA;AAAA;EAAA;AAAA;EAAA;AAAA;EAAA,KAAA;AAAA;EAAA;AAAA;EAAA,MAAA;AAAA;EAAA,MAAA;AAAA;EAAA;AAAA;EAAA,KAAA;AAAA;EAAA;;;;;;;;;;KAqIhD,sBAAA,GAAyB,OAAA,CAAQ,SAAA,CAAU,UAAA,QAAkB,oBAAA;AAAA;AAAA,KAG7D,UAAA,oCAA8C,CAAA,YAE/C,CAAA,sCACK,UAAA,CAAW,CAAA,IAAK,UAAA,CAAW,CAAA,MAC9B,UAAA,CAAW,CAAA;AAAA;AAAA,KAGZ,SAAA,oCAA6C,CAAA,YAE9C,CAAA,sCACK,CAAA,GAAI,UAAA,CAAW,CAAA,MAClB,CAAA;AAAA;AAAA,KAGD,YAAA,WAAuB,WAAA,IAAe,CAAA,kBAAmB,OAAA,CAAQ,SAAA,CAAU,CAAA,SAAU,CAAA;AAAA,KAE9E,qBAAA,mBACI,sBAAA,IAA0B,YAAA,CAAa,GAAA,IAAO,sBAAA,CAAuB,GAAA;AAAA,iBAGrE,YAAA,CAAA,IAAA,EACR,OAAA,EAAA,IAAA;EAAA,KAAA;EAAA,QAAA;AAAA;EAAA,IAAA;EAAA,KAAA;EAAA,QAAA;AAAA;AAAA,iBA6BQ,oBAAA,CAAA,KAAA,EACP,IAAA,EAAA,OAAA,EACE,IAAA,CAAK,KAAA;EAAA,cAAA;AAAA,IAAqD,IAAA;EAAA,WAAA;AAAA;EAAA;AAAA;EAAA,KAAA;AAAA;EAAA;AAAA;EAAA,WAAA;AAAA;EAAA;AAAA;EAAA;AAAA;EAAA;AAAA;EAAA,KAAA;AAAA;EAAA;AAAA;EAAA,MAAA;AAAA;EAAA,MAAA;AAAA;EAAA;AAAA;EAAA,KAAA;AAAA;EAAA;;;;;;;;;;iBAuB/C,eAAA,CAAA,CAAA,EAAmB,OAAA,GAAU,qBAAA,EAAA,KAAA,EAA8B,KAAA,GAAK,OAAA;AAAA,iBAgFhE,YAAA,CAAA,GAAgB,OAAA"}
@@ -1,17 +1,18 @@
1
1
  import { fstat } from "node:fs";
2
2
  import { LogLevel, getLevelFromEnv, logger } from "@aigne/core/utils/logger";
3
- import { basename, extname } from "node:path";
4
3
  import { readFile } from "node:fs/promises";
4
+ import { basename, extname } from "node:path";
5
+ import z, { ZodAny, ZodArray, ZodBoolean, ZodError, ZodNumber, ZodObject, ZodString, ZodType, ZodUnknown } from "zod";
5
6
  import { AIAgent, ChatModel, DEFAULT_OUTPUT_KEY, readAllString } from "@aigne/core";
6
7
  import { flat, pick, tryOrThrow } from "@aigne/core/utils/type-utils";
7
8
  import { availableImageModels, availableModels } from "@aigne/aigne-hub";
8
9
  import { parse } from "yaml";
9
- import z, { ZodAny, ZodArray, ZodBoolean, ZodError, ZodNumber, ZodObject, ZodString, ZodType, ZodUnknown } from "zod";
10
10
  import { isatty } from "node:tty";
11
11
  import { promisify } from "node:util";
12
12
 
13
13
  //#region src/utils/yargs.ts
14
14
  const MODEL_OPTIONS_GROUP_NAME = "Model Options";
15
+ const OUTPUT_OPTIONS_GROUP_NAME = "Output Options";
15
16
  const withRunAgentCommonOptions = (yargs) => yargs.option("interactive", {
16
17
  describe: "Run in interactive chat mode",
17
18
  type: "boolean",
@@ -52,11 +53,12 @@ const withRunAgentCommonOptions = (yargs) => yargs.option("interactive", {
52
53
  describe: "Input to the agent, use @<file> to read from a file",
53
54
  type: "string",
54
55
  array: true,
55
- alias: "i"
56
+ alias: ["m", "i"]
56
57
  }).option("input-file", {
57
58
  describe: "Input files to the agent",
58
59
  type: "string",
59
- array: true
60
+ array: true,
61
+ alias: "f"
60
62
  }).option("format", {
61
63
  describe: "Input format for the agent (available: text, json, yaml default: text)",
62
64
  type: "string",
@@ -86,6 +88,26 @@ const withRunAgentCommonOptions = (yargs) => yargs.option("interactive", {
86
88
  group: MODEL_OPTIONS_GROUP_NAME,
87
89
  describe: "Custom AIGNE Hub service URL. Used to fetch remote agent definitions or models.",
88
90
  type: "string"
91
+ }).option("json", {
92
+ group: OUTPUT_OPTIONS_GROUP_NAME,
93
+ describe: "Output in JSON format",
94
+ type: "boolean",
95
+ default: false
96
+ }).option("view", {
97
+ group: OUTPUT_OPTIONS_GROUP_NAME,
98
+ describe: "Output view type (human, json, llm, default)",
99
+ type: "string",
100
+ choices: [
101
+ "default",
102
+ "json",
103
+ "llm",
104
+ "human"
105
+ ]
106
+ }).option("agent", {
107
+ group: OUTPUT_OPTIONS_GROUP_NAME,
108
+ describe: "Agent mode - output in LLM-friendly format (equivalent to --view=llm)",
109
+ type: "boolean",
110
+ default: false
89
111
  });
90
112
  function formatModelsName(models) {
91
113
  return models.map((i) => {
@@ -160,17 +182,17 @@ async function parseAgentInput(i, agent) {
160
182
  }
161
183
  return input;
162
184
  }
163
- async function readFileAsInput(value, { format: format$1 } = {}) {
185
+ async function readFileAsInput(value, { format } = {}) {
164
186
  if (value.startsWith("@")) {
165
187
  const ext = extname(value);
166
188
  value = await readFile(value.slice(1), "utf8");
167
- if (!format$1) {
168
- if (ext === ".json") format$1 = "json";
169
- else if (ext === ".yaml" || ext === ".yml") format$1 = "yaml";
189
+ if (!format) {
190
+ if (ext === ".json") format = "json";
191
+ else if (ext === ".yaml" || ext === ".yml") format = "yaml";
170
192
  }
171
193
  }
172
- if (format$1 === "json") return JSON.parse(value);
173
- else if (format$1 === "yaml") return parse(value);
194
+ if (format === "json") return JSON.parse(value);
195
+ else if (format === "yaml") return parse(value);
174
196
  return value;
175
197
  }
176
198
  async function stdinHasData() {
@@ -1 +1 @@
1
- {"version":3,"file":"yargs.mjs","names":["format"],"sources":["../../src/utils/yargs.ts"],"sourcesContent":["import { fstat } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport { basename, extname } from \"node:path\";\nimport { isatty } from \"node:tty\";\nimport { promisify } from \"node:util\";\nimport {\n availableImageModels,\n availableModels,\n type LoadableImageModel,\n type LoadableModel,\n} from \"@aigne/aigne-hub\";\nimport {\n type Agent,\n AIAgent,\n ChatModel,\n DEFAULT_OUTPUT_KEY,\n type FileUnionContent,\n type Message,\n readAllString,\n} from \"@aigne/core\";\nimport { getLevelFromEnv, LogLevel, logger } from \"@aigne/core/utils/logger\";\nimport { flat, pick, tryOrThrow } from \"@aigne/core/utils/type-utils\";\nimport { parse } from \"yaml\";\nimport type { Argv } from \"yargs\";\nimport z, {\n ZodAny,\n ZodArray,\n ZodBoolean,\n ZodError,\n ZodNumber,\n ZodObject,\n ZodString,\n ZodType,\n ZodUnknown,\n} from \"zod\";\n\nexport type InferArgv<T> = T extends Argv<infer U> ? U : never;\n\nconst MODEL_OPTIONS_GROUP_NAME = \"Model Options\";\n\nexport const withRunAgentCommonOptions = (yargs: Argv) =>\n yargs\n .option(\"interactive\", {\n describe: \"Run in interactive chat mode\",\n type: \"boolean\",\n default: false,\n alias: [\"chat\"],\n })\n .option(\"session-id\", {\n describe: \"Session ID for chat-based agents to maintain context across interactions\",\n type: \"string\",\n })\n .option(\"model\", {\n group: MODEL_OPTIONS_GROUP_NAME,\n describe: `AI model to use in format 'provider[/model]' where model is optional. Examples: 'openai' or 'openai/gpt-4o-mini'. Available providers: ${formatModelsName(\n availableModels(),\n )} (default: openai)`,\n type: \"string\",\n })\n .option(\"image-model\", {\n group: MODEL_OPTIONS_GROUP_NAME,\n describe: `Image model to use in format 'provider[/model]' where model is optional. Examples: 'openai' or 'openai/gpt-image-1'. Available providers: ${formatModelsName(\n availableImageModels(),\n )} (default: openai)`,\n type: \"string\",\n })\n .option(\"temperature\", {\n group: MODEL_OPTIONS_GROUP_NAME,\n describe:\n \"Temperature for the model (controls randomness, higher values produce more random outputs). Range: 0.0-2.0\",\n type: \"number\",\n coerce: customZodError(\"--temperature\", (s) => z.coerce.number().min(0).max(2).parse(s)),\n })\n .option(\"top-p\", {\n group: MODEL_OPTIONS_GROUP_NAME,\n describe:\n \"Top P (nucleus sampling) parameter for the model (controls diversity). Range: 0.0-1.0\",\n type: \"number\",\n coerce: customZodError(\"--top-p\", (s) => z.coerce.number().min(0).max(1).parse(s)),\n })\n .option(\"presence-penalty\", {\n group: MODEL_OPTIONS_GROUP_NAME,\n describe:\n \"Presence penalty for the model (penalizes repeating the same tokens). Range: -2.0 to 2.0\",\n type: \"number\",\n coerce: customZodError(\"--presence-penalty\", (s) =>\n z.coerce.number().min(-2).max(2).parse(s),\n ),\n })\n .option(\"frequency-penalty\", {\n group: MODEL_OPTIONS_GROUP_NAME,\n describe:\n \"Frequency penalty for the model (penalizes frequency of token usage). Range: -2.0 to 2.0\",\n type: \"number\",\n coerce: customZodError(\"--frequency-penalty\", (s) =>\n z.coerce.number().min(-2).max(2).parse(s),\n ),\n })\n .option(\"input\", {\n describe: \"Input to the agent, use @<file> to read from a file\",\n type: \"string\",\n array: true,\n alias: \"i\",\n })\n .option(\"input-file\", {\n describe: \"Input files to the agent\",\n type: \"string\",\n array: true,\n })\n .option(\"format\", {\n describe: \"Input format for the agent (available: text, json, yaml default: text)\",\n type: \"string\",\n choices: [\"text\", \"json\", \"yaml\"],\n })\n .option(\"output\", {\n describe: \"Output file to save the result (default: stdout)\",\n type: \"string\",\n alias: \"o\",\n })\n .option(\"output-key\", {\n describe: \"Key in the result to save to the output file\",\n type: \"string\",\n default: DEFAULT_OUTPUT_KEY,\n })\n .option(\"force\", {\n describe:\n \"Truncate the output file if it exists, and create directory if the output path does not exists\",\n type: \"boolean\",\n default: false,\n })\n .option(\"log-level\", {\n describe: `Log level for detailed debugging information. Values: ${Object.values(LogLevel).join(\", \")}`,\n type: \"string\",\n default: getLevelFromEnv(logger.options.ns) || LogLevel.SILENT,\n coerce: customZodError(\"--log-level\", (s) => z.nativeEnum(LogLevel).parse(s)),\n })\n .option(\"aigne-hub-url\", {\n group: MODEL_OPTIONS_GROUP_NAME,\n describe: \"Custom AIGNE Hub service URL. Used to fetch remote agent definitions or models.\",\n type: \"string\",\n });\n\nfunction formatModelsName(models: (LoadableModel | LoadableImageModel)[]): string {\n return models\n .map((i) => {\n if (typeof i.name === \"string\") {\n return i.name.toLowerCase().replace(/ChatModel$/i, \"\");\n }\n return i.name.map((n) => n.toLowerCase().replace(/ChatModel$/i, \"\"));\n })\n .join(\", \");\n}\n\ntype _AgentRunCommonOptions = Partial<InferArgv<ReturnType<typeof withAgentInputSchema>>>;\n\n/** Convert literal string types like 'foo-bar' to 'FooBar' */\ntype PascalCase<S extends string> = string extends S\n ? string\n : S extends `${infer T}-${infer U}`\n ? `${Capitalize<T>}${PascalCase<U>}`\n : Capitalize<S>;\n\n/** Convert literal string types like 'foo-bar' to 'fooBar' */\ntype CamelCase<S extends string> = string extends S\n ? string\n : S extends `${infer T}-${infer U}`\n ? `${T}${PascalCase<U>}`\n : S;\n\n/** Convert literal string types like 'foo-bar' to 'fooBar', allowing all `PropertyKey` types */\ntype CamelCaseKey<K extends PropertyKey> = K extends string ? Exclude<CamelCase<K>, \"\"> : K;\n\nexport type AgentRunCommonOptions = {\n [key in keyof _AgentRunCommonOptions as CamelCaseKey<key>]: _AgentRunCommonOptions[key];\n};\n\nexport function inferZodType(\n type: ZodType,\n opts: { array?: boolean; optional?: boolean } = {},\n): {\n type: \"string\" | \"number\" | \"boolean\";\n array?: boolean;\n optional?: boolean;\n} {\n if (type instanceof ZodUnknown || type instanceof ZodAny) {\n return { type: \"string\", optional: true };\n }\n\n opts.optional ??= type.isNullable() || type.isOptional();\n\n if (\"innerType\" in type._def && type._def.innerType instanceof ZodType) {\n return inferZodType(type._def.innerType, opts);\n }\n\n if (type instanceof ZodArray) {\n return inferZodType(type.element, { ...opts, array: true });\n }\n\n return {\n ...opts,\n array: opts.array || undefined,\n optional: opts.optional || undefined,\n type: type instanceof ZodBoolean ? \"boolean\" : type instanceof ZodNumber ? \"number\" : \"string\",\n };\n}\n\nexport function withAgentInputSchema(\n yargs: Argv,\n options: Pick<Agent, \"inputSchema\"> & { optionalInputs?: string[] },\n) {\n const inputSchema: { [key: string]: ZodType } =\n options.inputSchema instanceof ZodObject ? options.inputSchema.shape : {};\n\n for (const [option, config] of Object.entries(inputSchema)) {\n const type = inferZodType(config);\n\n yargs.option(option, {\n group: \"Agent Parameters\",\n type: type.type,\n description: config.description,\n array: type.array,\n });\n\n if (!type.optional && !options.optionalInputs?.includes(option)) {\n yargs.demandOption(option);\n }\n }\n\n return withRunAgentCommonOptions(yargs);\n}\n\nexport async function parseAgentInput(i: Message & AgentRunCommonOptions, agent: Agent) {\n const inputSchema: { [key: string]: ZodType } =\n agent.inputSchema instanceof ZodObject ? agent.inputSchema.shape : {};\n\n const input = Object.fromEntries(\n await Promise.all(\n Object.entries(pick(i, Object.keys(inputSchema))).map(async ([key, val]) => {\n if (typeof val === \"string\" && val.startsWith(\"@\")) {\n const schema = inputSchema[key];\n\n val = await readFileAsInput(val, {\n format: schema instanceof ZodString ? \"raw\" : undefined,\n });\n }\n\n return [key, val];\n }),\n ),\n );\n\n if (agent instanceof AIAgent && agent.inputFileKey) {\n const files: FileUnionContent[] = [];\n for (const file of flat(i.inputFile, i[agent.inputFileKey] as string[]) ?? []) {\n const raw = await readFile(file.replace(/^@/, \"\"), \"base64\");\n const filename = basename(file);\n const mimeType = (await ChatModel.getMimeType(filename)) || \"application/octet-stream\";\n files.push({ type: \"file\", data: raw, filename, mimeType });\n }\n\n Object.assign(input, { [agent.inputFileKey]: files });\n }\n\n const rawInput =\n i.input ||\n (isatty(process.stdin.fd) || !(await stdinHasData())\n ? null\n : [await readAllString(process.stdin)].filter(Boolean));\n\n if (rawInput) {\n for (const raw of rawInput) {\n const parsed = raw.startsWith(\"@\") ? await readFileAsInput(raw, { format: i.format }) : raw;\n\n if (typeof parsed !== \"string\") {\n Object.assign(input, parsed);\n } else {\n const inputKey = agent instanceof AIAgent ? agent.inputKey : undefined;\n if (inputKey) {\n Object.assign(input, { [inputKey]: parsed });\n }\n }\n }\n }\n\n return input;\n}\n\nasync function readFileAsInput(\n value: string,\n { format }: { format?: \"raw\" | \"json\" | \"yaml\" | string } = {},\n): Promise<unknown> {\n if (value.startsWith(\"@\")) {\n const ext = extname(value);\n\n value = await readFile(value.slice(1), \"utf8\");\n\n if (!format) {\n if (ext === \".json\") format = \"json\";\n else if (ext === \".yaml\" || ext === \".yml\") format = \"yaml\";\n }\n }\n\n if (format === \"json\") {\n return JSON.parse(value);\n } else if (format === \"yaml\") {\n return parse(value);\n }\n\n return value;\n}\n\nexport async function stdinHasData(): Promise<boolean> {\n const stats = await promisify(fstat)(0);\n return stats.isFIFO() || stats.isFile();\n}\n\nfunction customZodError<T extends (...args: unknown[]) => unknown>(label: string, fn: T): T {\n return ((...args: Parameters<T>) =>\n tryOrThrow(\n () => fn(...args),\n (e) => new Error(`${label} ${e instanceof ZodError ? e.issues[0]?.message : e.message}`),\n )) as T;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"yargs.mjs","names":[],"sources":["../../src/utils/yargs.ts"],"sourcesContent":["import { fstat } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport { basename, extname } from \"node:path\";\nimport { isatty } from \"node:tty\";\nimport { promisify } from \"node:util\";\nimport {\n availableImageModels,\n availableModels,\n type LoadableImageModel,\n type LoadableModel,\n} from \"@aigne/aigne-hub\";\nimport {\n type Agent,\n AIAgent,\n ChatModel,\n DEFAULT_OUTPUT_KEY,\n type FileUnionContent,\n type Message,\n readAllString,\n} from \"@aigne/core\";\nimport { getLevelFromEnv, LogLevel, logger } from \"@aigne/core/utils/logger\";\nimport { flat, pick, tryOrThrow } from \"@aigne/core/utils/type-utils\";\nimport { parse } from \"yaml\";\nimport type { Argv } from \"yargs\";\nimport z, {\n ZodAny,\n ZodArray,\n ZodBoolean,\n ZodError,\n ZodNumber,\n ZodObject,\n ZodString,\n ZodType,\n ZodUnknown,\n} from \"zod\";\nimport type { ViewType } from \"./view.js\";\n\nexport type InferArgv<T> = T extends Argv<infer U> ? U : never;\n\nconst MODEL_OPTIONS_GROUP_NAME = \"Model Options\";\nconst OUTPUT_OPTIONS_GROUP_NAME = \"Output Options\";\n\nexport const withRunAgentCommonOptions = (yargs: Argv) =>\n yargs\n .option(\"interactive\", {\n describe: \"Run in interactive chat mode\",\n type: \"boolean\",\n default: false,\n alias: [\"chat\"],\n })\n .option(\"session-id\", {\n describe: \"Session ID for chat-based agents to maintain context across interactions\",\n type: \"string\",\n })\n .option(\"model\", {\n group: MODEL_OPTIONS_GROUP_NAME,\n describe: `AI model to use in format 'provider[/model]' where model is optional. Examples: 'openai' or 'openai/gpt-4o-mini'. Available providers: ${formatModelsName(\n availableModels(),\n )} (default: openai)`,\n type: \"string\",\n })\n .option(\"image-model\", {\n group: MODEL_OPTIONS_GROUP_NAME,\n describe: `Image model to use in format 'provider[/model]' where model is optional. Examples: 'openai' or 'openai/gpt-image-1'. Available providers: ${formatModelsName(\n availableImageModels(),\n )} (default: openai)`,\n type: \"string\",\n })\n .option(\"temperature\", {\n group: MODEL_OPTIONS_GROUP_NAME,\n describe:\n \"Temperature for the model (controls randomness, higher values produce more random outputs). Range: 0.0-2.0\",\n type: \"number\",\n coerce: customZodError(\"--temperature\", (s) => z.coerce.number().min(0).max(2).parse(s)),\n })\n .option(\"top-p\", {\n group: MODEL_OPTIONS_GROUP_NAME,\n describe:\n \"Top P (nucleus sampling) parameter for the model (controls diversity). Range: 0.0-1.0\",\n type: \"number\",\n coerce: customZodError(\"--top-p\", (s) => z.coerce.number().min(0).max(1).parse(s)),\n })\n .option(\"presence-penalty\", {\n group: MODEL_OPTIONS_GROUP_NAME,\n describe:\n \"Presence penalty for the model (penalizes repeating the same tokens). Range: -2.0 to 2.0\",\n type: \"number\",\n coerce: customZodError(\"--presence-penalty\", (s) =>\n z.coerce.number().min(-2).max(2).parse(s),\n ),\n })\n .option(\"frequency-penalty\", {\n group: MODEL_OPTIONS_GROUP_NAME,\n describe:\n \"Frequency penalty for the model (penalizes frequency of token usage). Range: -2.0 to 2.0\",\n type: \"number\",\n coerce: customZodError(\"--frequency-penalty\", (s) =>\n z.coerce.number().min(-2).max(2).parse(s),\n ),\n })\n .option(\"input\", {\n describe: \"Input to the agent, use @<file> to read from a file\",\n type: \"string\",\n array: true,\n // -m (message) is the primary alias, -i kept for backward compatibility\n alias: [\"m\", \"i\"],\n })\n .option(\"input-file\", {\n describe: \"Input files to the agent\",\n type: \"string\",\n array: true,\n alias: \"f\",\n })\n .option(\"format\", {\n describe: \"Input format for the agent (available: text, json, yaml default: text)\",\n type: \"string\",\n choices: [\"text\", \"json\", \"yaml\"],\n })\n .option(\"output\", {\n describe: \"Output file to save the result (default: stdout)\",\n type: \"string\",\n alias: \"o\",\n })\n .option(\"output-key\", {\n describe: \"Key in the result to save to the output file\",\n type: \"string\",\n default: DEFAULT_OUTPUT_KEY,\n })\n .option(\"force\", {\n describe:\n \"Truncate the output file if it exists, and create directory if the output path does not exists\",\n type: \"boolean\",\n default: false,\n })\n .option(\"log-level\", {\n describe: `Log level for detailed debugging information. Values: ${Object.values(LogLevel).join(\", \")}`,\n type: \"string\",\n default: getLevelFromEnv(logger.options.ns) || LogLevel.SILENT,\n coerce: customZodError(\"--log-level\", (s) => z.nativeEnum(LogLevel).parse(s)),\n })\n .option(\"aigne-hub-url\", {\n group: MODEL_OPTIONS_GROUP_NAME,\n describe: \"Custom AIGNE Hub service URL. Used to fetch remote agent definitions or models.\",\n type: \"string\",\n })\n .option(\"json\", {\n group: OUTPUT_OPTIONS_GROUP_NAME,\n describe: \"Output in JSON format\",\n type: \"boolean\",\n default: false,\n })\n .option(\"view\", {\n group: OUTPUT_OPTIONS_GROUP_NAME,\n describe: \"Output view type (human, json, llm, default)\",\n type: \"string\",\n choices: [\"default\", \"json\", \"llm\", \"human\"] as ViewType[],\n })\n .option(\"agent\", {\n group: OUTPUT_OPTIONS_GROUP_NAME,\n describe: \"Agent mode - output in LLM-friendly format (equivalent to --view=llm)\",\n type: \"boolean\",\n default: false,\n });\n\nfunction formatModelsName(models: (LoadableModel | LoadableImageModel)[]): string {\n return models\n .map((i) => {\n if (typeof i.name === \"string\") {\n return i.name.toLowerCase().replace(/ChatModel$/i, \"\");\n }\n return i.name.map((n) => n.toLowerCase().replace(/ChatModel$/i, \"\"));\n })\n .join(\", \");\n}\n\ntype _AgentRunCommonOptions = Partial<InferArgv<ReturnType<typeof withAgentInputSchema>>>;\n\n/** Convert literal string types like 'foo-bar' to 'FooBar' */\ntype PascalCase<S extends string> = string extends S\n ? string\n : S extends `${infer T}-${infer U}`\n ? `${Capitalize<T>}${PascalCase<U>}`\n : Capitalize<S>;\n\n/** Convert literal string types like 'foo-bar' to 'fooBar' */\ntype CamelCase<S extends string> = string extends S\n ? string\n : S extends `${infer T}-${infer U}`\n ? `${T}${PascalCase<U>}`\n : S;\n\n/** Convert literal string types like 'foo-bar' to 'fooBar', allowing all `PropertyKey` types */\ntype CamelCaseKey<K extends PropertyKey> = K extends string ? Exclude<CamelCase<K>, \"\"> : K;\n\nexport type AgentRunCommonOptions = {\n [key in keyof _AgentRunCommonOptions as CamelCaseKey<key>]: _AgentRunCommonOptions[key];\n};\n\nexport function inferZodType(\n type: ZodType,\n opts: { array?: boolean; optional?: boolean } = {},\n): {\n type: \"string\" | \"number\" | \"boolean\";\n array?: boolean;\n optional?: boolean;\n} {\n if (type instanceof ZodUnknown || type instanceof ZodAny) {\n return { type: \"string\", optional: true };\n }\n\n opts.optional ??= type.isNullable() || type.isOptional();\n\n if (\"innerType\" in type._def && type._def.innerType instanceof ZodType) {\n return inferZodType(type._def.innerType, opts);\n }\n\n if (type instanceof ZodArray) {\n return inferZodType(type.element, { ...opts, array: true });\n }\n\n return {\n ...opts,\n array: opts.array || undefined,\n optional: opts.optional || undefined,\n type: type instanceof ZodBoolean ? \"boolean\" : type instanceof ZodNumber ? \"number\" : \"string\",\n };\n}\n\nexport function withAgentInputSchema(\n yargs: Argv,\n options: Pick<Agent, \"inputSchema\"> & { optionalInputs?: string[] },\n) {\n const inputSchema: { [key: string]: ZodType } =\n options.inputSchema instanceof ZodObject ? options.inputSchema.shape : {};\n\n for (const [option, config] of Object.entries(inputSchema)) {\n const type = inferZodType(config);\n\n yargs.option(option, {\n group: \"Agent Parameters\",\n type: type.type,\n description: config.description,\n array: type.array,\n });\n\n if (!type.optional && !options.optionalInputs?.includes(option)) {\n yargs.demandOption(option);\n }\n }\n\n return withRunAgentCommonOptions(yargs);\n}\n\nexport async function parseAgentInput(i: Message & AgentRunCommonOptions, agent: Agent) {\n const inputSchema: { [key: string]: ZodType } =\n agent.inputSchema instanceof ZodObject ? agent.inputSchema.shape : {};\n\n const input = Object.fromEntries(\n await Promise.all(\n Object.entries(pick(i, Object.keys(inputSchema))).map(async ([key, val]) => {\n if (typeof val === \"string\" && val.startsWith(\"@\")) {\n const schema = inputSchema[key];\n\n val = await readFileAsInput(val, {\n format: schema instanceof ZodString ? \"raw\" : undefined,\n });\n }\n\n return [key, val];\n }),\n ),\n );\n\n if (agent instanceof AIAgent && agent.inputFileKey) {\n const files: FileUnionContent[] = [];\n for (const file of flat(i.inputFile, i[agent.inputFileKey] as string[]) ?? []) {\n const raw = await readFile(file.replace(/^@/, \"\"), \"base64\");\n const filename = basename(file);\n const mimeType = (await ChatModel.getMimeType(filename)) || \"application/octet-stream\";\n files.push({ type: \"file\", data: raw, filename, mimeType });\n }\n\n Object.assign(input, { [agent.inputFileKey]: files });\n }\n\n const rawInput =\n i.input ||\n (isatty(process.stdin.fd) || !(await stdinHasData())\n ? null\n : [await readAllString(process.stdin)].filter(Boolean));\n\n if (rawInput) {\n for (const raw of rawInput) {\n const parsed = raw.startsWith(\"@\") ? await readFileAsInput(raw, { format: i.format }) : raw;\n\n if (typeof parsed !== \"string\") {\n Object.assign(input, parsed);\n } else {\n const inputKey = agent instanceof AIAgent ? agent.inputKey : undefined;\n if (inputKey) {\n Object.assign(input, { [inputKey]: parsed });\n }\n }\n }\n }\n\n return input;\n}\n\nasync function readFileAsInput(\n value: string,\n { format }: { format?: \"raw\" | \"json\" | \"yaml\" | string } = {},\n): Promise<unknown> {\n if (value.startsWith(\"@\")) {\n const ext = extname(value);\n\n value = await readFile(value.slice(1), \"utf8\");\n\n if (!format) {\n if (ext === \".json\") format = \"json\";\n else if (ext === \".yaml\" || ext === \".yml\") format = \"yaml\";\n }\n }\n\n if (format === \"json\") {\n return JSON.parse(value);\n } else if (format === \"yaml\") {\n return parse(value);\n }\n\n return value;\n}\n\nexport async function stdinHasData(): Promise<boolean> {\n const stats = await promisify(fstat)(0);\n return stats.isFIFO() || stats.isFile();\n}\n\nfunction customZodError<T extends (...args: unknown[]) => unknown>(label: string, fn: T): T {\n return ((...args: Parameters<T>) =>\n tryOrThrow(\n () => fn(...args),\n (e) => new Error(`${label} ${e instanceof ZodError ? e.issues[0]?.message : e.message}`),\n )) as T;\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aigne/cli",
3
- "version": "1.74.0-beta.1",
3
+ "version": "1.74.0-beta.3",
4
4
  "description": "Your command center for agent development",
5
5
  "license": "Elastic-2.0",
6
6
  "publishConfig": {
@@ -41,10 +41,6 @@
41
41
  "require": "./dist/cli.cjs",
42
42
  "import": "./dist/cli.mjs"
43
43
  },
44
- "./commands/app/cli": {
45
- "require": "./dist/commands/app/cli.cjs",
46
- "import": "./dist/commands/app/cli.mjs"
47
- },
48
44
  "./constants": {
49
45
  "require": "./dist/constants.cjs",
50
46
  "import": "./dist/constants.mjs"
@@ -73,18 +69,22 @@
73
69
  "require": "./dist/utils/download.cjs",
74
70
  "import": "./dist/utils/download.mjs"
75
71
  },
72
+ "./utils/exit-codes": {
73
+ "require": "./dist/utils/exit-codes.cjs",
74
+ "import": "./dist/utils/exit-codes.mjs"
75
+ },
76
76
  "./utils/get-url-origin": {
77
77
  "require": "./dist/utils/get-url-origin.cjs",
78
78
  "import": "./dist/utils/get-url-origin.mjs"
79
79
  },
80
- "./utils/listr": {
81
- "require": "./dist/utils/listr.cjs",
82
- "import": "./dist/utils/listr.mjs"
83
- },
84
80
  "./utils/load-aigne": {
85
81
  "require": "./dist/utils/load-aigne.cjs",
86
82
  "import": "./dist/utils/load-aigne.mjs"
87
83
  },
84
+ "./utils/output": {
85
+ "require": "./dist/utils/output.cjs",
86
+ "import": "./dist/utils/output.mjs"
87
+ },
88
88
  "./utils/run-chat-loop": {
89
89
  "require": "./dist/utils/run-chat-loop.cjs",
90
90
  "import": "./dist/utils/run-chat-loop.mjs"
@@ -113,6 +113,10 @@
113
113
  "require": "./dist/utils/url.cjs",
114
114
  "import": "./dist/utils/url.mjs"
115
115
  },
116
+ "./utils/view": {
117
+ "require": "./dist/utils/view.cjs",
118
+ "import": "./dist/utils/view.mjs"
119
+ },
116
120
  "./utils/yargs": {
117
121
  "require": "./dist/utils/yargs.cjs",
118
122
  "import": "./dist/utils/yargs.mjs"
@@ -120,15 +124,15 @@
120
124
  "./*": "./*"
121
125
  },
122
126
  "dependencies": {
123
- "@aigne/afs": "^1.11.0-beta.1",
124
- "@aigne/afs-explorer": "^1.11.0-beta.1",
125
- "@aigne/afs-local-fs": "^1.11.0-beta.1",
127
+ "@aigne/afs": "=1.11.0-beta.1",
128
+ "@aigne/afs-explorer": "=1.11.0-beta.1",
129
+ "@aigne/afs-local-fs": "=1.11.0-beta.1",
126
130
  "@aigne/agentic-memory": "^1.1.7-beta",
127
131
  "@aigne/default-memory": "^1.4.1-beta",
128
132
  "@aigne/json-schema-to-zod": "^1.3.3",
129
133
  "@aigne/listr2": "^1.0.10",
130
134
  "@aigne/marked-terminal": "^7.3.2",
131
- "@aigne/observability-api": "^1.21.0-beta.4",
135
+ "@aigne/observability-api": "^1.21.0-beta.8",
132
136
  "@aigne/uuid": "^13.0.1",
133
137
  "@fast-csv/format": "^5.0.5",
134
138
  "@inquirer/core": "^10.2.2",
@@ -172,12 +176,12 @@
172
176
  "yoctocolors-cjs": "^2.1.3",
173
177
  "zod": "^3.25.67",
174
178
  "zod-to-json-schema": "^3.24.6",
175
- "@aigne/afs-history": "^1.74.0-beta.1",
176
- "@aigne/aigne-hub": "^1.74.0-beta.1",
177
- "@aigne/agent-library": "^1.74.0-beta.1",
178
- "@aigne/core": "^1.74.0-beta.1",
179
- "@aigne/openai": "^1.74.0-beta.1",
180
- "@aigne/secrets": "^1.74.0-beta.1"
179
+ "@aigne/afs-history": "^1.74.0-beta.3",
180
+ "@aigne/agent-library": "^1.74.0-beta.3",
181
+ "@aigne/core": "^1.74.0-beta.3",
182
+ "@aigne/openai": "^1.74.0-beta.3",
183
+ "@aigne/aigne-hub": "^1.74.0-beta.3",
184
+ "@aigne/secrets": "^1.74.0-beta.3"
181
185
  },
182
186
  "devDependencies": {
183
187
  "@inquirer/testing": "^2.1.50",
@@ -197,8 +201,8 @@
197
201
  "tsdown": "0.20.0-beta.3",
198
202
  "typescript": "^5.9.2",
199
203
  "@aigne/scripts": "^0.0.0",
200
- "@aigne/utils": "^1.74.0-beta.1",
201
- "@aigne/typescript-config": "^0.0.0"
204
+ "@aigne/typescript-config": "^0.0.0",
205
+ "@aigne/utils": "^1.74.0-beta.3"
202
206
  },
203
207
  "main": "./dist/index.cjs",
204
208
  "module": "./dist/index.mjs",
@@ -1,92 +0,0 @@
1
- const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
- const require_constants = require('../../constants.cjs');
3
- const require_upgrade = require('./upgrade.cjs');
4
- const require_utils_yargs = require('../../utils/yargs.cjs');
5
- const require_utils_string_utils = require('../../utils/string-utils.cjs');
6
- const require_agent = require('./agent.cjs');
7
- let _aigne_core_utils_logger = require("@aigne/core/utils/logger");
8
- let chalk = require("chalk");
9
- chalk = require_rolldown_runtime.__toESM(chalk);
10
- let yargs = require("yargs");
11
- yargs = require_rolldown_runtime.__toESM(yargs);
12
- let node_path = require("node:path");
13
- let _aigne_core_utils_type_utils = require("@aigne/core/utils/type-utils");
14
- let node_os = require("node:os");
15
- let yargs_helpers = require("yargs/helpers");
16
-
17
- //#region src/commands/app/app.ts
18
- async function runAppCLI({ appName = process.env.AIGNE_APP_NAME, appPackageName = process.env.AIGNE_APP_PACKAGE_NAME, appDescription = process.env.AIGNE_APP_DESCRIPTION, appUseBetaVersion = process.env.AIGNE_APP_USE_BETA_APPS === "1" ? true : void 0, ...options } = {}) {
19
- const [scriptName, ...argv] = options.argv || (0, yargs_helpers.hideBin)(process.argv);
20
- if (!appName || !appPackageName) throw new Error("AIGNE_APP_NAME or AIGNE_APP_PACKAGE_NAME is not defined");
21
- try {
22
- const options$1 = require_utils_yargs.withRunAgentCommonOptions((0, yargs.default)(argv).help(false).version(false).strict(false)).parseSync();
23
- _aigne_core_utils_logger.logger.level = options$1.logLevel;
24
- const dir = (0, node_path.join)((0, node_os.homedir)(), ".aigne", "registry.npmjs.org", appPackageName);
25
- const y = (0, yargs.default)().scriptName(`aigne ${scriptName}`).usage(`aigne ${scriptName}\n\n${appDescription || ""}`).command(require_upgrade.upgradeCommandModule({
26
- packageName: appPackageName,
27
- dir
28
- }));
29
- if (!isUpgradeCommand(argv)) {
30
- const { aigne, version } = await require_upgrade.loadApplication({
31
- packageName: appPackageName,
32
- beta: appUseBetaVersion,
33
- dir,
34
- install: true,
35
- modelOptions: (0, _aigne_core_utils_type_utils.pick)(options$1, require_constants.CHAT_MODEL_OPTIONS),
36
- imageModelOptions: { model: options$1.imageModel },
37
- skipModelLoading: (options$1.help || options$1.h || options$1.version || options$1.v) === true
38
- });
39
- if (aigne.cli?.chat) y.command({
40
- ...require_agent.agentCommandModule({
41
- aigne,
42
- agent: aigne.cli.chat,
43
- interactive: true
44
- }),
45
- command: "$0"
46
- });
47
- for (const cliAgent of aigne.cli?.agents ?? []) y.command(require_agent.cliAgentCommandModule({
48
- aigne,
49
- cliAgent
50
- }));
51
- y.option("model", {
52
- type: "string",
53
- description: "Model to use for the application, example: openai:gpt-4.1 or google:gemini-2.5-flash"
54
- }).command(require_agent.serveMcpCommandModule({
55
- aigne,
56
- name: appName
57
- }));
58
- y.version(`${appName} v${version}`);
59
- }
60
- await y.alias("v", "version").alias("h", "help").demandCommand().fail((message, error, yargs$2) => {
61
- if (!error) {
62
- yargs$2.showHelp();
63
- console.error(`\n${message}`);
64
- process.exit(1);
65
- }
66
- }).parseAsync(argv);
67
- process.exit(0);
68
- } catch (error) {
69
- if (error instanceof require_upgrade.NeedReinstallError || error instanceof require_upgrade.NeedReinstallBetaError) {
70
- _aigne_core_utils_logger.logger.warn(error.message);
71
- process.exit(error instanceof require_upgrade.NeedReinstallBetaError ? require_upgrade.NeedReinstallBetaError.code : require_upgrade.NeedReinstallError.code);
72
- }
73
- if (error.name !== "ExitPromptError") {
74
- console.log("");
75
- if (_aigne_core_utils_logger.logger.enabled(_aigne_core_utils_logger.LogLevel.ERROR)) console.error(chalk.default.red(error.stack));
76
- else console.error(`${chalk.default.red("Error:")} ${require_utils_string_utils.highlightUrl(error.message)}`);
77
- }
78
- process.exit(1);
79
- }
80
- }
81
- function isUpgradeCommand(argv) {
82
- const skipGlobalOptions = [
83
- "-v",
84
- "--version",
85
- "-h",
86
- "--help"
87
- ];
88
- return argv[0] === "upgrade" && !argv.some((arg) => skipGlobalOptions.includes(arg));
89
- }
90
-
91
- //#endregion
92
- exports.runAppCLI = runAppCLI;
@@ -1,90 +0,0 @@
1
- import { CHAT_MODEL_OPTIONS } from "../../constants.mjs";
2
- import { NeedReinstallBetaError, NeedReinstallError, loadApplication, upgradeCommandModule } from "./upgrade.mjs";
3
- import { withRunAgentCommonOptions } from "../../utils/yargs.mjs";
4
- import { highlightUrl } from "../../utils/string-utils.mjs";
5
- import { agentCommandModule, cliAgentCommandModule, serveMcpCommandModule } from "./agent.mjs";
6
- import { LogLevel, logger } from "@aigne/core/utils/logger";
7
- import chalk from "chalk";
8
- import yargs from "yargs";
9
- import { join } from "node:path";
10
- import { pick } from "@aigne/core/utils/type-utils";
11
- import { homedir } from "node:os";
12
- import { hideBin } from "yargs/helpers";
13
-
14
- //#region src/commands/app/app.ts
15
- async function runAppCLI({ appName = process.env.AIGNE_APP_NAME, appPackageName = process.env.AIGNE_APP_PACKAGE_NAME, appDescription = process.env.AIGNE_APP_DESCRIPTION, appUseBetaVersion = process.env.AIGNE_APP_USE_BETA_APPS === "1" ? true : void 0, ...options } = {}) {
16
- const [scriptName, ...argv] = options.argv || hideBin(process.argv);
17
- if (!appName || !appPackageName) throw new Error("AIGNE_APP_NAME or AIGNE_APP_PACKAGE_NAME is not defined");
18
- try {
19
- const options$1 = withRunAgentCommonOptions(yargs(argv).help(false).version(false).strict(false)).parseSync();
20
- logger.level = options$1.logLevel;
21
- const dir = join(homedir(), ".aigne", "registry.npmjs.org", appPackageName);
22
- const y = yargs().scriptName(`aigne ${scriptName}`).usage(`aigne ${scriptName}\n\n${appDescription || ""}`).command(upgradeCommandModule({
23
- packageName: appPackageName,
24
- dir
25
- }));
26
- if (!isUpgradeCommand(argv)) {
27
- const { aigne, version } = await loadApplication({
28
- packageName: appPackageName,
29
- beta: appUseBetaVersion,
30
- dir,
31
- install: true,
32
- modelOptions: pick(options$1, CHAT_MODEL_OPTIONS),
33
- imageModelOptions: { model: options$1.imageModel },
34
- skipModelLoading: (options$1.help || options$1.h || options$1.version || options$1.v) === true
35
- });
36
- if (aigne.cli?.chat) y.command({
37
- ...agentCommandModule({
38
- aigne,
39
- agent: aigne.cli.chat,
40
- interactive: true
41
- }),
42
- command: "$0"
43
- });
44
- for (const cliAgent of aigne.cli?.agents ?? []) y.command(cliAgentCommandModule({
45
- aigne,
46
- cliAgent
47
- }));
48
- y.option("model", {
49
- type: "string",
50
- description: "Model to use for the application, example: openai:gpt-4.1 or google:gemini-2.5-flash"
51
- }).command(serveMcpCommandModule({
52
- aigne,
53
- name: appName
54
- }));
55
- y.version(`${appName} v${version}`);
56
- }
57
- await y.alias("v", "version").alias("h", "help").demandCommand().fail((message, error, yargs$1) => {
58
- if (!error) {
59
- yargs$1.showHelp();
60
- console.error(`\n${message}`);
61
- process.exit(1);
62
- }
63
- }).parseAsync(argv);
64
- process.exit(0);
65
- } catch (error) {
66
- if (error instanceof NeedReinstallError || error instanceof NeedReinstallBetaError) {
67
- logger.warn(error.message);
68
- process.exit(error instanceof NeedReinstallBetaError ? NeedReinstallBetaError.code : NeedReinstallError.code);
69
- }
70
- if (error.name !== "ExitPromptError") {
71
- console.log("");
72
- if (logger.enabled(LogLevel.ERROR)) console.error(chalk.red(error.stack));
73
- else console.error(`${chalk.red("Error:")} ${highlightUrl(error.message)}`);
74
- }
75
- process.exit(1);
76
- }
77
- }
78
- function isUpgradeCommand(argv) {
79
- const skipGlobalOptions = [
80
- "-v",
81
- "--version",
82
- "-h",
83
- "--help"
84
- ];
85
- return argv[0] === "upgrade" && !argv.some((arg) => skipGlobalOptions.includes(arg));
86
- }
87
-
88
- //#endregion
89
- export { runAppCLI };
90
- //# sourceMappingURL=app.mjs.map