@duyquangnvx/agent-cli 0.1.0 → 0.2.0

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 (63) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +11 -0
  3. package/dist/command-spec.d.ts +28 -0
  4. package/dist/command-spec.js +31 -0
  5. package/dist/command-spec.js.map +1 -0
  6. package/dist/confirm.d.ts +0 -1
  7. package/dist/confirm.js +4 -4
  8. package/dist/confirm.js.map +1 -1
  9. package/dist/define.d.ts +30 -6
  10. package/dist/define.js +2 -0
  11. package/dist/define.js.map +1 -1
  12. package/dist/execute.d.ts +12 -3
  13. package/dist/execute.js +10 -2
  14. package/dist/execute.js.map +1 -1
  15. package/dist/flags.d.ts +44 -6
  16. package/dist/flags.js +53 -16
  17. package/dist/flags.js.map +1 -1
  18. package/dist/global-install.d.ts +2 -0
  19. package/dist/global-install.js +5 -4
  20. package/dist/global-install.js.map +1 -1
  21. package/dist/help-json.d.ts +4 -4
  22. package/dist/help-json.js +26 -42
  23. package/dist/help-json.js.map +1 -1
  24. package/dist/help.d.ts +4 -5
  25. package/dist/help.js +15 -12
  26. package/dist/help.js.map +1 -1
  27. package/dist/index.d.ts +5 -4
  28. package/dist/index.js +1 -1
  29. package/dist/index.js.map +1 -1
  30. package/dist/input.d.ts +8 -8
  31. package/dist/input.js +9 -16
  32. package/dist/input.js.map +1 -1
  33. package/dist/list.d.ts +44 -0
  34. package/dist/list.js +126 -0
  35. package/dist/list.js.map +1 -0
  36. package/dist/output.d.ts +33 -0
  37. package/dist/output.js +65 -0
  38. package/dist/output.js.map +1 -0
  39. package/dist/parse-input.d.ts +18 -4
  40. package/dist/parse-input.js +82 -49
  41. package/dist/parse-input.js.map +1 -1
  42. package/dist/route.d.ts +25 -0
  43. package/dist/route.js +75 -0
  44. package/dist/route.js.map +1 -0
  45. package/dist/run-cli.d.ts +2 -6
  46. package/dist/run-cli.js +53 -179
  47. package/dist/run-cli.js.map +1 -1
  48. package/dist/suggest.d.ts +4 -0
  49. package/dist/suggest.js +19 -11
  50. package/dist/suggest.js.map +1 -1
  51. package/dist/tokenize.d.ts +20 -0
  52. package/dist/tokenize.js +79 -0
  53. package/dist/tokenize.js.map +1 -0
  54. package/dist/usage.d.ts +3 -11
  55. package/dist/usage.js +20 -55
  56. package/dist/usage.js.map +1 -1
  57. package/package.json +1 -4
  58. package/dist/fields.d.ts +0 -14
  59. package/dist/fields.js +0 -71
  60. package/dist/fields.js.map +0 -1
  61. package/dist/page.d.ts +0 -26
  62. package/dist/page.js +0 -49
  63. package/dist/page.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"run-cli.js","sourceRoot":"","sources":["../src/run-cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-cli.js","sourceRoot":"","sources":["../src/run-cli.ts"],"names":[],"mappings":"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"}
package/dist/suggest.d.ts CHANGED
@@ -1,2 +1,6 @@
1
+ /** The names closest to `word`, sorted, several when they tie, or none when nothing is close. */
2
+ export declare function closestNames(word: string, names: readonly string[]): string[];
3
+ /** The long flags closest to `flag`, sorted, or none for a short flag or when nothing is close. */
4
+ export declare function closestFlags(flag: string, flags: readonly string[]): string[];
1
5
  /** The one long flag closest to `flag`, or none when nothing is close or several tie. */
2
6
  export declare function closestFlag(flag: string, flags: readonly string[]): string | undefined;
package/dist/suggest.js CHANGED
@@ -1,6 +1,6 @@
1
1
  const MAX_DISTANCE = 3;
2
2
  const MIN_SIMILARITY = 0.4;
3
- // Optimal string alignment distance, the measure commander uses for its own suggestions.
3
+ // Optimal string alignment distance.
4
4
  function distance(a, b) {
5
5
  const width = b.length + 1;
6
6
  const d = Array.from({ length: (a.length + 1) * width }, (_, k) => {
@@ -25,17 +25,25 @@ function isClose(word, candidate) {
25
25
  const edits = distance(word, candidate);
26
26
  return candidate.length > 1 && edits < MAX_DISTANCE && (length - edits) / length > MIN_SIMILARITY;
27
27
  }
28
- /** The one long flag closest to `flag`, or none when nothing is close or several tie. */
29
- export function closestFlag(flag, flags) {
28
+ /** The names closest to `word`, sorted, several when they tie, or none when nothing is close. */
29
+ export function closestNames(word, names) {
30
+ const close = [...new Set(names)].filter((candidate) => isClose(word, candidate));
31
+ const best = Math.min(...close.map((candidate) => distance(word, candidate)));
32
+ return close
33
+ .filter((candidate) => distance(word, candidate) === best)
34
+ .sort((a, b) => a.localeCompare(b));
35
+ }
36
+ /** The long flags closest to `flag`, sorted, or none for a short flag or when nothing is close. */
37
+ export function closestFlags(flag, flags) {
30
38
  if (!flag.startsWith("--")) {
31
- return undefined;
39
+ return [];
32
40
  }
33
- const word = flag.slice(2);
34
- const close = [...new Set(flags)]
35
- .map((candidate) => candidate.slice(2))
36
- .filter((candidate) => isClose(word, candidate));
37
- const best = Math.min(...close.map((candidate) => distance(word, candidate)));
38
- const closest = close.filter((candidate) => distance(word, candidate) === best);
39
- return closest.length === 1 ? `--${closest[0]}` : undefined;
41
+ const names = flags.map((candidate) => candidate.slice(2));
42
+ return closestNames(flag.slice(2), names).map((name) => `--${name}`);
43
+ }
44
+ /** The one long flag closest to `flag`, or none when nothing is close or several tie. */
45
+ export function closestFlag(flag, flags) {
46
+ const closest = closestFlags(flag, flags);
47
+ return closest.length === 1 ? closest[0] : undefined;
40
48
  }
41
49
  //# sourceMappingURL=suggest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"suggest.js","sourceRoot":"","sources":["../src/suggest.ts"],"names":[],"mappings":"AAAA,MAAM,YAAY,GAAG,CAAC,CAAC;AACvB,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,yFAAyF;AACzF,SAAS,QAAQ,CAAC,CAAS,EAAE,CAAS;IACpC,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3B,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAChE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QAChC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACpB,iEAAiE;QACjE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,CAAC,CAAS,EAAE,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACnF,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACpF,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9E,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,OAAO,CAAC,IAAY,EAAE,SAAiB;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACxC,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,GAAG,YAAY,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,MAAM,GAAG,cAAc,CAAC;AACpG,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,KAAwB;IAChE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;SAC9B,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACtC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC;IAChF,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9D,CAAC"}
1
+ {"version":3,"file":"suggest.js","sourceRoot":"","sources":["../src/suggest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /** What a flag takes after it: nothing, the next word unless it is a flag, or the next word. */
2
+ export type Takes = "nothing" | "optional value" | "value";
3
+ export interface KnownFlag {
4
+ /** The flag as the caller types it, such as `--limit` or `--no-install`. */
5
+ readonly flag: string;
6
+ readonly takes: Takes;
7
+ }
8
+ export interface Operand {
9
+ readonly value: string;
10
+ readonly afterUnknownOption: boolean;
11
+ }
12
+ export interface Words {
13
+ readonly operands: readonly Operand[];
14
+ /** Each unknown option word as typed, `=value` included. */
15
+ readonly unknownOptions: readonly string[];
16
+ /** The last value of each known flag passed; `true` for a switch or a flag given no value. */
17
+ readonly values: ReadonlyMap<string, string | true>;
18
+ }
19
+ /** Splits a Command's words into operands, unknown options and the values of known flags. */
20
+ export declare function tokenize(words: readonly string[], known: readonly KnownFlag[]): Words;
@@ -0,0 +1,79 @@
1
+ import { parseArgs } from "node:util";
2
+ const NEGATIVE_NUMBER = /^-(\d+|\d*\.\d+)(e[+-]?\d+)?$/;
3
+ function isOptionLike(word) {
4
+ return word !== undefined && word.length > 1 && word[0] === "-" && !NEGATIVE_NUMBER.test(word);
5
+ }
6
+ // A flag taking an optional value is declared a switch, so that parseArgs never swallows the next
7
+ // flag as its value; the value is then picked here from the word after it.
8
+ function parseArgsOptions(known) {
9
+ return Object.fromEntries(known.map(({ flag, takes }) => [
10
+ flag.slice(2),
11
+ { type: takes === "value" ? "string" : "boolean" },
12
+ ]));
13
+ }
14
+ function flagItem(token, { flag, takes }, words) {
15
+ if (takes !== "optional value" || token.inlineValue === true) {
16
+ return { kind: "flag", flag, value: token.value ?? true };
17
+ }
18
+ const took = token.index + 1;
19
+ const next = words[took];
20
+ return next === undefined || isOptionLike(next)
21
+ ? { kind: "flag", flag, value: true }
22
+ : { kind: "flag", flag, value: next, took };
23
+ }
24
+ function itemOf(token, words, byFlag) {
25
+ const word = words[token.index] ?? "";
26
+ if (token.kind === "option-terminator") {
27
+ return { kind: "end" };
28
+ }
29
+ if (token.kind === "positional" || NEGATIVE_NUMBER.test(word)) {
30
+ return { kind: "operand", value: word };
31
+ }
32
+ const flag = byFlag.get(token.rawName);
33
+ return flag === undefined || (flag.takes === "nothing" && token.inlineValue === true)
34
+ ? { kind: "unknown option", word }
35
+ : flagItem(token, flag, words);
36
+ }
37
+ /** Splits a Command's words into operands, unknown options and the values of known flags. */
38
+ export function tokenize(words, known) {
39
+ const byFlag = new Map(known.map((flag) => [flag.flag, flag]));
40
+ const { tokens } = parseArgs({
41
+ args: [...words],
42
+ options: parseArgsOptions(known),
43
+ strict: false,
44
+ allowPositionals: true,
45
+ tokens: true,
46
+ });
47
+ const operands = [];
48
+ const unknownOptions = [];
49
+ const values = new Map();
50
+ // A short group such as `-abc` yields one token per letter, all at the same index.
51
+ const done = new Set();
52
+ let literal = false;
53
+ let afterUnknownOption = false;
54
+ for (const token of tokens) {
55
+ if (done.has(token.index)) {
56
+ continue;
57
+ }
58
+ done.add(token.index);
59
+ const item = itemOf(token, words, byFlag);
60
+ if (item.kind === "end") {
61
+ literal = true;
62
+ }
63
+ else if (item.kind === "operand") {
64
+ operands.push({ value: item.value, afterUnknownOption: !literal && afterUnknownOption });
65
+ afterUnknownOption = false;
66
+ }
67
+ else if (item.kind === "unknown option") {
68
+ unknownOptions.push(item.word);
69
+ afterUnknownOption = true;
70
+ }
71
+ else {
72
+ values.set(item.flag, item.value);
73
+ if (item.took !== undefined)
74
+ done.add(item.took);
75
+ }
76
+ }
77
+ return { operands, unknownOptions, values };
78
+ }
79
+ //# sourceMappingURL=tokenize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenize.js","sourceRoot":"","sources":["../src/tokenize.ts"],"names":[],"mappings":"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"}
package/dist/usage.d.ts CHANGED
@@ -1,13 +1,5 @@
1
- import type { Command as Commander, CommanderError } from "commander";
2
1
  import { UsageError } from "./errors.js";
3
2
  import { type Invocation } from "./invocation.js";
4
- export declare function commandLine(cmd: Commander): string;
5
- /** Commander stopped parsing at `command`: help, version or a usage error. */
6
- export declare class ParseStop extends Error {
7
- readonly reason: CommanderError;
8
- readonly command: Commander;
9
- constructor(reason: CommanderError, command: Commander);
10
- }
11
- export declare function stopAt(cmd: Commander): Commander;
12
- export declare function unknownOptionError(line: string, invocation: Invocation, flag: string, suggestions: readonly string[]): UsageError;
13
- export declare function usageErrorOf({ reason, command }: ParseStop, invocation: Invocation): UsageError;
3
+ export declare function unknownOptionError(commandLine: string, invocation: Invocation, flag: string, suggestions: readonly string[]): UsageError;
4
+ export declare function unknownCommandError(commandLine: string, name: string, suggestions: readonly string[]): UsageError;
5
+ export declare function invalidInputError(commandLine: string, problem: string): UsageError;
package/dist/usage.js CHANGED
@@ -1,72 +1,37 @@
1
1
  import { UsageError } from "./errors.js";
2
2
  import { commandLineRenaming } from "./invocation.js";
3
- export function commandLine(cmd) {
4
- return cmd.parent === null ? cmd.name() : `${commandLine(cmd.parent)} ${cmd.name()}`;
5
- }
6
- /** Commander stopped parsing at `command`: help, version or a usage error. */
7
- export class ParseStop extends Error {
8
- reason;
9
- command;
10
- constructor(reason, command) {
11
- super(reason.message);
12
- this.name = "ParseStop";
13
- this.reason = reason;
14
- this.command = command;
15
- }
16
- }
17
- // Commander's error carries no reference to the command that raised it, so each command throws
18
- // its own ParseStop. Must be called after `.command()` creates `cmd`, which copies the parent's.
19
- export function stopAt(cmd) {
20
- return cmd.exitOverride((reason) => {
21
- throw new ParseStop(reason, cmd);
22
- });
23
- }
24
- function problemOf(reason) {
25
- return (reason.message.split("\n")[0] ?? "").replace(/^error: /, "");
26
- }
27
- // Commander appends "(Did you mean X?)" or "(Did you mean one of X, Y?)" to unknown names.
28
- function suggestionsOf(reason) {
29
- const match = /\(Did you mean (?:one of )?(.+)\?\)/.exec(reason.message);
30
- return match?.[1] === undefined ? [] : match[1].split(", ");
31
- }
32
- function unknownError({ code, problem, line, corrections, listed }) {
3
+ function unknownError({ code, problem, commandLine, corrections, listed }) {
33
4
  return new UsageError({
34
5
  code,
35
- message: `${problem} for \`${line}\``,
6
+ message: `${problem} for \`${commandLine}\``,
36
7
  hint: corrections.length === 0
37
- ? `run \`${line} --help\` to see the ${listed}`
8
+ ? `run \`${commandLine} --help\` to see the ${listed}`
38
9
  : `did you mean ${corrections.map((correction) => `\`${correction}\``).join(" or ")}?`,
39
10
  });
40
11
  }
41
- export function unknownOptionError(line, invocation, flag, suggestions) {
12
+ export function unknownOptionError(commandLine, invocation, flag, suggestions) {
42
13
  return unknownError({
43
14
  code: "UNKNOWN_OPTION",
44
15
  problem: `unknown option '${flag}'`,
45
- line,
16
+ commandLine,
46
17
  corrections: suggestions.map((name) => commandLineRenaming(invocation, new Map([[flag, name]]))),
47
18
  listed: "options",
48
19
  });
49
20
  }
50
- export function usageErrorOf({ reason, command }, invocation) {
51
- const line = commandLine(command);
52
- const suggestions = suggestionsOf(reason);
53
- switch (reason.code) {
54
- case "commander.unknownCommand":
55
- return unknownError({
56
- code: "UNKNOWN_COMMAND",
57
- problem: problemOf(reason),
58
- line,
59
- corrections: suggestions.map((name) => `${line} ${name}`),
60
- listed: "commands",
61
- });
62
- case "commander.unknownOption":
63
- return unknownOptionError(line, invocation, /'(.+)'/.exec(problemOf(reason))?.[1] ?? "", suggestions);
64
- default:
65
- return new UsageError({
66
- code: "INVALID_INPUT",
67
- message: problemOf(reason),
68
- hint: `run \`${line} --help\` to see the expected input`,
69
- });
70
- }
21
+ export function unknownCommandError(commandLine, name, suggestions) {
22
+ return unknownError({
23
+ code: "UNKNOWN_COMMAND",
24
+ problem: `unknown command '${name}'`,
25
+ commandLine,
26
+ corrections: suggestions.map((suggestion) => `${commandLine} ${suggestion}`),
27
+ listed: "commands",
28
+ });
29
+ }
30
+ export function invalidInputError(commandLine, problem) {
31
+ return new UsageError({
32
+ code: "INVALID_INPUT",
33
+ message: problem,
34
+ hint: `run \`${commandLine} --help\` to see the expected input`,
35
+ });
71
36
  }
72
37
  //# sourceMappingURL=usage.js.map
package/dist/usage.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"usage.js","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAmB,MAAM,iBAAiB,CAAC;AAEvE,MAAM,UAAU,WAAW,CAAC,GAAc;IACxC,OAAO,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;AACvF,CAAC;AAED,8EAA8E;AAC9E,MAAM,OAAO,SAAU,SAAQ,KAAK;IACzB,MAAM,CAAiB;IACvB,OAAO,CAAY;IAE5B,YAAY,MAAsB,EAAE,OAAkB;QACpD,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,+FAA+F;AAC/F,iGAAiG;AACjG,MAAM,UAAU,MAAM,CAAC,GAAc;IACnC,OAAO,GAAG,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE;QACjC,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAAC,MAAsB;IACvC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,2FAA2F;AAC3F,SAAS,aAAa,CAAC,MAAsB;IAC3C,MAAM,KAAK,GAAG,qCAAqC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzE,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC9D,CAAC;AAUD,SAAS,YAAY,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAW;IACzE,OAAO,IAAI,UAAU,CAAC;QACpB,IAAI;QACJ,OAAO,EAAE,GAAG,OAAO,UAAU,IAAI,IAAI;QACrC,IAAI,EACF,WAAW,CAAC,MAAM,KAAK,CAAC;YACtB,CAAC,CAAC,SAAS,IAAI,wBAAwB,MAAM,EAAE;YAC/C,CAAC,CAAC,gBAAgB,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG;KAC3F,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,IAAY,EACZ,UAAsB,EACtB,IAAY,EACZ,WAA8B;IAE9B,OAAO,YAAY,CAAC;QAClB,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,mBAAmB,IAAI,GAAG;QACnC,IAAI;QACJ,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACpC,mBAAmB,CAAC,UAAU,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CACzD;QACD,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,EAAa,EAAE,UAAsB;IACjF,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAC1C,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,0BAA0B;YAC7B,OAAO,YAAY,CAAC;gBAClB,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC;gBAC1B,IAAI;gBACJ,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;gBACzD,MAAM,EAAE,UAAU;aACnB,CAAC,CAAC;QACL,KAAK,yBAAyB;YAC5B,OAAO,kBAAkB,CACvB,IAAI,EACJ,UAAU,EACV,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAC3C,WAAW,CACZ,CAAC;QACJ;YACE,OAAO,IAAI,UAAU,CAAC;gBACpB,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC;gBAC1B,IAAI,EAAE,SAAS,IAAI,qCAAqC;aACzD,CAAC,CAAC;IACP,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"usage.js","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAmB,MAAM,iBAAiB,CAAC;AAUvE,SAAS,YAAY,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAW;IAChF,OAAO,IAAI,UAAU,CAAC;QACpB,IAAI;QACJ,OAAO,EAAE,GAAG,OAAO,UAAU,WAAW,IAAI;QAC5C,IAAI,EACF,WAAW,CAAC,MAAM,KAAK,CAAC;YACtB,CAAC,CAAC,SAAS,WAAW,wBAAwB,MAAM,EAAE;YACtD,CAAC,CAAC,gBAAgB,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG;KAC3F,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,WAAmB,EACnB,UAAsB,EACtB,IAAY,EACZ,WAA8B;IAE9B,OAAO,YAAY,CAAC;QAClB,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,mBAAmB,IAAI,GAAG;QACnC,WAAW;QACX,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACpC,mBAAmB,CAAC,UAAU,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CACzD;QACD,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,WAAmB,EACnB,IAAY,EACZ,WAA8B;IAE9B,OAAO,YAAY,CAAC;QAClB,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,oBAAoB,IAAI,GAAG;QACpC,WAAW;QACX,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,GAAG,WAAW,IAAI,UAAU,EAAE,CAAC;QAC5E,MAAM,EAAE,UAAU;KACnB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,WAAmB,EAAE,OAAe;IACpE,OAAO,IAAI,UAAU,CAAC;QACpB,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,SAAS,WAAW,qCAAqC;KAChE,CAAC,CAAC;AACL,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@duyquangnvx/agent-cli",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Runtime for agent-first command-line tools: owns parsing, output, errors and exit codes.",
5
5
  "type": "module",
6
6
  "engines": {
@@ -16,9 +16,6 @@
16
16
  "dist",
17
17
  "CHANGELOG.md"
18
18
  ],
19
- "dependencies": {
20
- "commander": "15.0.0"
21
- },
22
19
  "peerDependencies": {
23
20
  "zod": "^4.6.0"
24
21
  },
package/dist/fields.d.ts DELETED
@@ -1,14 +0,0 @@
1
- import type { Command } from "./define.js";
2
- import type { InputField } from "./input.js";
3
- export declare const FIELDS_OPTION = "--fields";
4
- type Row = Readonly<Record<string, unknown>>;
5
- /** The fields a list Command's rows have, or undefined for a Command that is not a list. */
6
- export declare function rowFieldsOf(command: Command): readonly string[] | undefined;
7
- export declare function fieldsDescription(rowFields: readonly string[]): string;
8
- export declare function fieldsOption(rowFields: readonly string[]): InputField;
9
- /** The fields the caller asked for, in their order, or undefined when they gave no `--fields`. */
10
- export declare function selectedFields(raw: string | boolean | undefined, rowFields: readonly string[], commandLine: string): readonly string[] | undefined;
11
- export declare function projected(rows: readonly unknown[], fields: readonly string[]): Row[];
12
- /** Selected rows as text: a header line of the field names, then one tab-separated line per row. */
13
- export declare function renderRows(rows: readonly Row[], fields: readonly string[]): string;
14
- export {};
package/dist/fields.js DELETED
@@ -1,71 +0,0 @@
1
- import { UsageError } from "./errors.js";
2
- import { rowSchemaOf } from "./page.js";
3
- const SEPARATOR = ",";
4
- const COLUMN_SEPARATOR = "\t";
5
- const UNSAFE_IN_COLUMN = /[\t\n\r]/;
6
- export const FIELDS_OPTION = "--fields";
7
- /** The fields a list Command's rows have, or undefined for a Command that is not a list. */
8
- export function rowFieldsOf(command) {
9
- const row = rowSchemaOf(command.output);
10
- return row === undefined ? undefined : Object.keys(row.shape);
11
- }
12
- export function fieldsDescription(rowFields) {
13
- return `print only these comma-separated fields of each row (any of: ${rowFields.join(", ")})`;
14
- }
15
- export function fieldsOption(rowFields) {
16
- return {
17
- key: "fields",
18
- type: "string",
19
- required: false,
20
- defaultValue: undefined,
21
- description: fieldsDescription(rowFields),
22
- choices: undefined,
23
- label: FIELDS_OPTION,
24
- usage: `${FIELDS_OPTION} <a,b>`,
25
- };
26
- }
27
- function quoted(names) {
28
- return names.map((name) => `'${name}'`).join(", ");
29
- }
30
- /** The fields the caller asked for, in their order, or undefined when they gave no `--fields`. */
31
- export function selectedFields(raw, rowFields, commandLine) {
32
- if (raw === undefined) {
33
- return undefined;
34
- }
35
- const hint = `pass ${FIELDS_OPTION} with any of: ${rowFields.join(", ")}`;
36
- const names = typeof raw === "string" ? raw.split(SEPARATOR).filter((name) => name !== "") : [];
37
- if (names.length === 0) {
38
- throw new UsageError({
39
- code: "INVALID_INPUT",
40
- message: `${FIELDS_OPTION}: missing value for \`${commandLine}\``,
41
- hint,
42
- });
43
- }
44
- const unknown = names.filter((name) => !rowFields.includes(name));
45
- if (unknown.length > 0) {
46
- throw new UsageError({
47
- code: "UNKNOWN_FIELD",
48
- message: `unknown field ${quoted(unknown)} for \`${commandLine}\``,
49
- hint,
50
- });
51
- }
52
- return names;
53
- }
54
- function fieldOf(row, field) {
55
- return typeof row === "object" && row !== null ? row[field] : undefined;
56
- }
57
- export function projected(rows, fields) {
58
- return rows.map((row) => Object.fromEntries(fields.map((field) => [field, fieldOf(row, field)])));
59
- }
60
- function cell(value) {
61
- if (value === undefined || value === null) {
62
- return "";
63
- }
64
- return typeof value === "string" && !UNSAFE_IN_COLUMN.test(value) ? value : JSON.stringify(value);
65
- }
66
- /** Selected rows as text: a header line of the field names, then one tab-separated line per row. */
67
- export function renderRows(rows, fields) {
68
- const lines = [fields, ...rows.map((row) => fields.map((field) => cell(row[field])))];
69
- return `${lines.map((line) => line.join(COLUMN_SEPARATOR)).join("\n")}\n`;
70
- }
71
- //# sourceMappingURL=fields.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fields.js","sourceRoot":"","sources":["../src/fields.ts"],"names":[],"mappings":"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"}
package/dist/page.d.ts DELETED
@@ -1,26 +0,0 @@
1
- import * as z from "zod";
2
- import { type Invocation } from "./invocation.js";
3
- export declare const pageOptions: z.ZodObject<{
4
- limit: z.ZodDefault<z.ZodNumber>;
5
- cursor: z.ZodOptional<z.ZodNumber>;
6
- }, z.core.$strip>;
7
- export type PageInput = z.output<typeof pageOptions>;
8
- /** The output schema of a list Command: the printed page of `row`s. It earns the Command `--fields`. */
9
- export declare function pageOf<Row extends z.ZodObject>(row: Row): z.ZodObject<{
10
- items: z.ZodArray<Row>;
11
- next: z.ZodOptional<z.ZodString>;
12
- }>;
13
- export declare function rowSchemaOf(output: z.ZodType | undefined): z.ZodObject | undefined;
14
- export declare class Page<Item> {
15
- readonly items: readonly Item[];
16
- readonly nextCursor: number | undefined;
17
- constructor(items: readonly Item[], nextCursor: number | undefined);
18
- }
19
- export declare function paginate<Item>(items: readonly Item[], { limit, cursor }: PageInput): Page<Item>;
20
- export interface PrintedPage {
21
- readonly items: readonly unknown[];
22
- readonly next?: string;
23
- }
24
- export declare function printedPage(page: Page<unknown>, invocation: Invocation): PrintedPage;
25
- /** The line that ends a rendered page, so the caller always knows whether and how to get more. */
26
- export declare function pageFooter({ items, next }: PrintedPage): string;
package/dist/page.js DELETED
@@ -1,49 +0,0 @@
1
- import * as z from "zod";
2
- import { commandLineWith } from "./invocation.js";
3
- const DEFAULT_PAGE_LIMIT = 20;
4
- const CURSOR_FLAG = "--cursor";
5
- export const pageOptions = z.object({
6
- limit: z.number().int().positive().default(DEFAULT_PAGE_LIMIT).describe("how many to show"),
7
- cursor: z
8
- .number()
9
- .int()
10
- .nonnegative()
11
- .optional()
12
- .describe("where to start, as given by the previous page"),
13
- });
14
- const rowSchemas = new WeakMap();
15
- /** The output schema of a list Command: the printed page of `row`s. It earns the Command `--fields`. */
16
- export function pageOf(row) {
17
- const page = z.object({ items: z.array(row), next: z.string().optional() });
18
- rowSchemas.set(page, row);
19
- return page;
20
- }
21
- export function rowSchemaOf(output) {
22
- return output === undefined ? undefined : rowSchemas.get(output);
23
- }
24
- export class Page {
25
- items;
26
- nextCursor;
27
- constructor(items, nextCursor) {
28
- this.items = items;
29
- this.nextCursor = nextCursor;
30
- }
31
- }
32
- export function paginate(items, { limit, cursor = 0 }) {
33
- const end = cursor + limit;
34
- return new Page(items.slice(cursor, end), end < items.length ? end : undefined);
35
- }
36
- export function printedPage(page, invocation) {
37
- return page.nextCursor === undefined
38
- ? { items: page.items }
39
- : {
40
- items: page.items,
41
- next: commandLineWith(invocation, CURSOR_FLAG, String(page.nextCursor)),
42
- };
43
- }
44
- /** The line that ends a rendered page, so the caller always knows whether and how to get more. */
45
- export function pageFooter({ items, next }) {
46
- const more = next === undefined ? "no more pages" : `next page: \`${next}\``;
47
- return `${items.length} shown; ${more}\n`;
48
- }
49
- //# sourceMappingURL=page.js.map
package/dist/page.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"page.js","sourceRoot":"","sources":["../src/page.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAE,eAAe,EAAmB,MAAM,iBAAiB,CAAC;AAEnE,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAC9B,MAAM,WAAW,GAAG,UAAU,CAAC;AAE/B,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAC3F,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,EAAE;SACL,WAAW,EAAE;SACb,QAAQ,EAAE;SACV,QAAQ,CAAC,+CAA+C,CAAC;CAC7D,CAAC,CAAC;AAIH,MAAM,UAAU,GAAG,IAAI,OAAO,EAA0B,CAAC;AAEzD,wGAAwG;AACxG,MAAM,UAAU,MAAM,CACpB,GAAQ;IAER,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC5E,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC1B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAA6B;IACvD,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,OAAO,IAAI;IACN,KAAK,CAAkB;IACvB,UAAU,CAAqB;IAExC,YAAY,KAAsB,EAAE,UAA8B;QAChE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,UAAU,QAAQ,CACtB,KAAsB,EACtB,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,EAAa;IAEhC,MAAM,GAAG,GAAG,MAAM,GAAG,KAAK,CAAC;IAC3B,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAClF,CAAC;AAOD,MAAM,UAAU,WAAW,CAAC,IAAmB,EAAE,UAAsB;IACrE,OAAO,IAAI,CAAC,UAAU,KAAK,SAAS;QAClC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;QACvB,CAAC,CAAC;YACE,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,eAAe,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SACxE,CAAC;AACR,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAe;IACrD,MAAM,IAAI,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,gBAAgB,IAAI,IAAI,CAAC;IAC7E,OAAO,GAAG,KAAK,CAAC,MAAM,WAAW,IAAI,IAAI,CAAC;AAC5C,CAAC"}