@plumloom/cli 0.1.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 (308) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +2 -0
  3. package/README.md +71 -0
  4. package/dist/actions/configured-runs.d.ts +25 -0
  5. package/dist/actions/configured-runs.d.ts.map +1 -0
  6. package/dist/actions/configured-runs.js +35 -0
  7. package/dist/actions/configured-runs.js.map +1 -0
  8. package/dist/actions/context.d.ts +5 -0
  9. package/dist/actions/context.d.ts.map +1 -0
  10. package/dist/actions/context.js +2 -0
  11. package/dist/actions/context.js.map +1 -0
  12. package/dist/actions/doctor.d.ts +46 -0
  13. package/dist/actions/doctor.d.ts.map +1 -0
  14. package/dist/actions/doctor.js +130 -0
  15. package/dist/actions/doctor.js.map +1 -0
  16. package/dist/actions/evaluations.d.ts +87 -0
  17. package/dist/actions/evaluations.d.ts.map +1 -0
  18. package/dist/actions/evaluations.js +307 -0
  19. package/dist/actions/evaluations.js.map +1 -0
  20. package/dist/actions/gate.d.ts +63 -0
  21. package/dist/actions/gate.d.ts.map +1 -0
  22. package/dist/actions/gate.js +272 -0
  23. package/dist/actions/gate.js.map +1 -0
  24. package/dist/actions/identity.d.ts +4 -0
  25. package/dist/actions/identity.d.ts.map +1 -0
  26. package/dist/actions/identity.js +4 -0
  27. package/dist/actions/identity.js.map +1 -0
  28. package/dist/actions/models.d.ts +4 -0
  29. package/dist/actions/models.d.ts.map +1 -0
  30. package/dist/actions/models.js +4 -0
  31. package/dist/actions/models.js.map +1 -0
  32. package/dist/actions/quality-standards.d.ts +30 -0
  33. package/dist/actions/quality-standards.d.ts.map +1 -0
  34. package/dist/actions/quality-standards.js +86 -0
  35. package/dist/actions/quality-standards.js.map +1 -0
  36. package/dist/actions/results.d.ts +12 -0
  37. package/dist/actions/results.d.ts.map +1 -0
  38. package/dist/actions/results.js +65 -0
  39. package/dist/actions/results.js.map +1 -0
  40. package/dist/actions/runs.d.ts +22 -0
  41. package/dist/actions/runs.d.ts.map +1 -0
  42. package/dist/actions/runs.js +59 -0
  43. package/dist/actions/runs.js.map +1 -0
  44. package/dist/actions/suite-gate.d.ts +24 -0
  45. package/dist/actions/suite-gate.d.ts.map +1 -0
  46. package/dist/actions/suite-gate.js +40 -0
  47. package/dist/actions/suite-gate.js.map +1 -0
  48. package/dist/actions/suite.d.ts +49 -0
  49. package/dist/actions/suite.d.ts.map +1 -0
  50. package/dist/actions/suite.js +68 -0
  51. package/dist/actions/suite.js.map +1 -0
  52. package/dist/actions/validation.d.ts +3 -0
  53. package/dist/actions/validation.d.ts.map +1 -0
  54. package/dist/actions/validation.js +26 -0
  55. package/dist/actions/validation.js.map +1 -0
  56. package/dist/actions/workspaces.d.ts +13 -0
  57. package/dist/actions/workspaces.d.ts.map +1 -0
  58. package/dist/actions/workspaces.js +18 -0
  59. package/dist/actions/workspaces.js.map +1 -0
  60. package/dist/api/api.d.ts +237 -0
  61. package/dist/api/api.d.ts.map +1 -0
  62. package/dist/api/api.js +396 -0
  63. package/dist/api/api.js.map +1 -0
  64. package/dist/api/client.d.ts +38 -0
  65. package/dist/api/client.d.ts.map +1 -0
  66. package/dist/api/client.js +295 -0
  67. package/dist/api/client.js.map +1 -0
  68. package/dist/api/endpoints.d.ts +31 -0
  69. package/dist/api/endpoints.d.ts.map +1 -0
  70. package/dist/api/endpoints.js +32 -0
  71. package/dist/api/endpoints.js.map +1 -0
  72. package/dist/api/errors.d.ts +22 -0
  73. package/dist/api/errors.d.ts.map +1 -0
  74. package/dist/api/errors.js +84 -0
  75. package/dist/api/errors.js.map +1 -0
  76. package/dist/api/schemas.d.ts +169 -0
  77. package/dist/api/schemas.d.ts.map +1 -0
  78. package/dist/api/schemas.js +194 -0
  79. package/dist/api/schemas.js.map +1 -0
  80. package/dist/auth/credential-store.d.ts +9 -0
  81. package/dist/auth/credential-store.d.ts.map +1 -0
  82. package/dist/auth/credential-store.js +2 -0
  83. package/dist/auth/credential-store.js.map +1 -0
  84. package/dist/auth/credentials.d.ts +27 -0
  85. package/dist/auth/credentials.d.ts.map +1 -0
  86. package/dist/auth/credentials.js +81 -0
  87. package/dist/auth/credentials.js.map +1 -0
  88. package/dist/auth/keyring-store.d.ts +9 -0
  89. package/dist/auth/keyring-store.d.ts.map +1 -0
  90. package/dist/auth/keyring-store.js +57 -0
  91. package/dist/auth/keyring-store.js.map +1 -0
  92. package/dist/auth/login.d.ts +28 -0
  93. package/dist/auth/login.d.ts.map +1 -0
  94. package/dist/auth/login.js +27 -0
  95. package/dist/auth/login.js.map +1 -0
  96. package/dist/auth/password-prompt.d.ts +5 -0
  97. package/dist/auth/password-prompt.d.ts.map +1 -0
  98. package/dist/auth/password-prompt.js +10 -0
  99. package/dist/auth/password-prompt.js.map +1 -0
  100. package/dist/auth/redact.d.ts +3 -0
  101. package/dist/auth/redact.d.ts.map +1 -0
  102. package/dist/auth/redact.js +69 -0
  103. package/dist/auth/redact.js.map +1 -0
  104. package/dist/cli.d.ts +3 -0
  105. package/dist/cli.d.ts.map +1 -0
  106. package/dist/cli.js +4 -0
  107. package/dist/cli.js.map +1 -0
  108. package/dist/commands/executor.d.ts +36 -0
  109. package/dist/commands/executor.d.ts.map +1 -0
  110. package/dist/commands/executor.js +1218 -0
  111. package/dist/commands/executor.js.map +1 -0
  112. package/dist/commands/program.d.ts +21 -0
  113. package/dist/commands/program.d.ts.map +1 -0
  114. package/dist/commands/program.js +588 -0
  115. package/dist/commands/program.js.map +1 -0
  116. package/dist/commands/types.d.ts +139 -0
  117. package/dist/commands/types.d.ts.map +1 -0
  118. package/dist/commands/types.js +2 -0
  119. package/dist/commands/types.js.map +1 -0
  120. package/dist/config.d.ts +12 -0
  121. package/dist/config.d.ts.map +1 -0
  122. package/dist/config.js +57 -0
  123. package/dist/config.js.map +1 -0
  124. package/dist/configured-run/file-inputs.d.ts +8 -0
  125. package/dist/configured-run/file-inputs.d.ts.map +1 -0
  126. package/dist/configured-run/file-inputs.js +160 -0
  127. package/dist/configured-run/file-inputs.js.map +1 -0
  128. package/dist/configured-run/validation.d.ts +103 -0
  129. package/dist/configured-run/validation.d.ts.map +1 -0
  130. package/dist/configured-run/validation.js +327 -0
  131. package/dist/configured-run/validation.js.map +1 -0
  132. package/dist/domain/common.d.ts +6 -0
  133. package/dist/domain/common.d.ts.map +1 -0
  134. package/dist/domain/common.js +10 -0
  135. package/dist/domain/common.js.map +1 -0
  136. package/dist/domain/types.d.ts +117 -0
  137. package/dist/domain/types.d.ts.map +1 -0
  138. package/dist/domain/types.js +2 -0
  139. package/dist/domain/types.js.map +1 -0
  140. package/dist/errors/autoeval-error.d.ts +13 -0
  141. package/dist/errors/autoeval-error.d.ts.map +1 -0
  142. package/dist/errors/autoeval-error.js +36 -0
  143. package/dist/errors/autoeval-error.js.map +1 -0
  144. package/dist/errors/hints.d.ts +3 -0
  145. package/dist/errors/hints.d.ts.map +1 -0
  146. package/dist/errors/hints.js +43 -0
  147. package/dist/errors/hints.js.map +1 -0
  148. package/dist/gate/decision.d.ts +97 -0
  149. package/dist/gate/decision.d.ts.map +1 -0
  150. package/dist/gate/decision.js +436 -0
  151. package/dist/gate/decision.js.map +1 -0
  152. package/dist/gate/policy.d.ts +31 -0
  153. package/dist/gate/policy.d.ts.map +1 -0
  154. package/dist/gate/policy.js +26 -0
  155. package/dist/gate/policy.js.map +1 -0
  156. package/dist/guide/eval-creation-backend.d.ts +20 -0
  157. package/dist/guide/eval-creation-backend.d.ts.map +1 -0
  158. package/dist/guide/eval-creation-backend.js +16 -0
  159. package/dist/guide/eval-creation-backend.js.map +1 -0
  160. package/dist/guide/eval-guide.d.ts +24 -0
  161. package/dist/guide/eval-guide.d.ts.map +1 -0
  162. package/dist/guide/eval-guide.js +219 -0
  163. package/dist/guide/eval-guide.js.map +1 -0
  164. package/dist/mcp/context.d.ts +21 -0
  165. package/dist/mcp/context.d.ts.map +1 -0
  166. package/dist/mcp/context.js +19 -0
  167. package/dist/mcp/context.js.map +1 -0
  168. package/dist/mcp/schemas.d.ts +206 -0
  169. package/dist/mcp/schemas.d.ts.map +1 -0
  170. package/dist/mcp/schemas.js +80 -0
  171. package/dist/mcp/schemas.js.map +1 -0
  172. package/dist/mcp/server.d.ts +5 -0
  173. package/dist/mcp/server.d.ts.map +1 -0
  174. package/dist/mcp/server.js +10 -0
  175. package/dist/mcp/server.js.map +1 -0
  176. package/dist/mcp/tools.d.ts +42 -0
  177. package/dist/mcp/tools.d.ts.map +1 -0
  178. package/dist/mcp/tools.js +287 -0
  179. package/dist/mcp/tools.js.map +1 -0
  180. package/dist/mcp.d.ts +3 -0
  181. package/dist/mcp.d.ts.map +1 -0
  182. package/dist/mcp.js +32 -0
  183. package/dist/mcp.js.map +1 -0
  184. package/dist/output/big-digits.d.ts +7 -0
  185. package/dist/output/big-digits.d.ts.map +1 -0
  186. package/dist/output/big-digits.js +43 -0
  187. package/dist/output/big-digits.js.map +1 -0
  188. package/dist/output/clipboard.d.ts +29 -0
  189. package/dist/output/clipboard.d.ts.map +1 -0
  190. package/dist/output/clipboard.js +82 -0
  191. package/dist/output/clipboard.js.map +1 -0
  192. package/dist/output/colors.d.ts +21 -0
  193. package/dist/output/colors.d.ts.map +1 -0
  194. package/dist/output/colors.js +21 -0
  195. package/dist/output/colors.js.map +1 -0
  196. package/dist/output/digest.d.ts +165 -0
  197. package/dist/output/digest.d.ts.map +1 -0
  198. package/dist/output/digest.js +771 -0
  199. package/dist/output/digest.js.map +1 -0
  200. package/dist/output/human.d.ts +95 -0
  201. package/dist/output/human.d.ts.map +1 -0
  202. package/dist/output/human.js +643 -0
  203. package/dist/output/human.js.map +1 -0
  204. package/dist/output/json.d.ts +2 -0
  205. package/dist/output/json.d.ts.map +1 -0
  206. package/dist/output/json.js +5 -0
  207. package/dist/output/json.js.map +1 -0
  208. package/dist/output/layout.d.ts +18 -0
  209. package/dist/output/layout.d.ts.map +1 -0
  210. package/dist/output/layout.js +64 -0
  211. package/dist/output/layout.js.map +1 -0
  212. package/dist/output/markdown.d.ts +16 -0
  213. package/dist/output/markdown.d.ts.map +1 -0
  214. package/dist/output/markdown.js +38 -0
  215. package/dist/output/markdown.js.map +1 -0
  216. package/dist/output/progress.d.ts +29 -0
  217. package/dist/output/progress.d.ts.map +1 -0
  218. package/dist/output/progress.js +136 -0
  219. package/dist/output/progress.js.map +1 -0
  220. package/dist/output/safe-text.d.ts +11 -0
  221. package/dist/output/safe-text.d.ts.map +1 -0
  222. package/dist/output/safe-text.js +44 -0
  223. package/dist/output/safe-text.js.map +1 -0
  224. package/dist/output/scorecard.d.ts +23 -0
  225. package/dist/output/scorecard.d.ts.map +1 -0
  226. package/dist/output/scorecard.js +506 -0
  227. package/dist/output/scorecard.js.map +1 -0
  228. package/dist/output/section.d.ts +15 -0
  229. package/dist/output/section.d.ts.map +1 -0
  230. package/dist/output/section.js +44 -0
  231. package/dist/output/section.js.map +1 -0
  232. package/dist/output/spinner.d.ts +24 -0
  233. package/dist/output/spinner.d.ts.map +1 -0
  234. package/dist/output/spinner.js +34 -0
  235. package/dist/output/spinner.js.map +1 -0
  236. package/dist/output/splash.d.ts +37 -0
  237. package/dist/output/splash.d.ts.map +1 -0
  238. package/dist/output/splash.js +169 -0
  239. package/dist/output/splash.js.map +1 -0
  240. package/dist/output/table.d.ts +33 -0
  241. package/dist/output/table.d.ts.map +1 -0
  242. package/dist/output/table.js +105 -0
  243. package/dist/output/table.js.map +1 -0
  244. package/dist/output/trend.d.ts +19 -0
  245. package/dist/output/trend.d.ts.map +1 -0
  246. package/dist/output/trend.js +38 -0
  247. package/dist/output/trend.js.map +1 -0
  248. package/dist/output/writer.d.ts +14 -0
  249. package/dist/output/writer.d.ts.map +1 -0
  250. package/dist/output/writer.js +33 -0
  251. package/dist/output/writer.js.map +1 -0
  252. package/dist/polling/clock.d.ts +9 -0
  253. package/dist/polling/clock.d.ts.map +1 -0
  254. package/dist/polling/clock.js +23 -0
  255. package/dist/polling/clock.js.map +1 -0
  256. package/dist/polling/wait-for-result.d.ts +16 -0
  257. package/dist/polling/wait-for-result.d.ts.map +1 -0
  258. package/dist/polling/wait-for-result.js +29 -0
  259. package/dist/polling/wait-for-result.js.map +1 -0
  260. package/dist/polling/wait-for-run.d.ts +14 -0
  261. package/dist/polling/wait-for-run.d.ts.map +1 -0
  262. package/dist/polling/wait-for-run.js +36 -0
  263. package/dist/polling/wait-for-run.js.map +1 -0
  264. package/dist/quickstart/prompt.d.ts +18 -0
  265. package/dist/quickstart/prompt.d.ts.map +1 -0
  266. package/dist/quickstart/prompt.js +37 -0
  267. package/dist/quickstart/prompt.js.map +1 -0
  268. package/dist/quickstart/sample.d.ts +28 -0
  269. package/dist/quickstart/sample.d.ts.map +1 -0
  270. package/dist/quickstart/sample.js +235 -0
  271. package/dist/quickstart/sample.js.map +1 -0
  272. package/dist/quickstart/selection.d.ts +53 -0
  273. package/dist/quickstart/selection.d.ts.map +1 -0
  274. package/dist/quickstart/selection.js +97 -0
  275. package/dist/quickstart/selection.js.map +1 -0
  276. package/dist/run.d.ts +28 -0
  277. package/dist/run.d.ts.map +1 -0
  278. package/dist/run.js +134 -0
  279. package/dist/run.js.map +1 -0
  280. package/dist/runtime/action-context.d.ts +19 -0
  281. package/dist/runtime/action-context.d.ts.map +1 -0
  282. package/dist/runtime/action-context.js +40 -0
  283. package/dist/runtime/action-context.js.map +1 -0
  284. package/dist/suite/execution.d.ts +46 -0
  285. package/dist/suite/execution.d.ts.map +1 -0
  286. package/dist/suite/execution.js +97 -0
  287. package/dist/suite/execution.js.map +1 -0
  288. package/dist/suite/manifest.d.ts +16 -0
  289. package/dist/suite/manifest.d.ts.map +1 -0
  290. package/dist/suite/manifest.js +92 -0
  291. package/dist/suite/manifest.js.map +1 -0
  292. package/dist/suite/reporting.d.ts +35 -0
  293. package/dist/suite/reporting.d.ts.map +1 -0
  294. package/dist/suite/reporting.js +131 -0
  295. package/dist/suite/reporting.js.map +1 -0
  296. package/dist/trace/deepseek-harness.d.ts +31 -0
  297. package/dist/trace/deepseek-harness.d.ts.map +1 -0
  298. package/dist/trace/deepseek-harness.js +412 -0
  299. package/dist/trace/deepseek-harness.js.map +1 -0
  300. package/dist/trace/import.d.ts +9 -0
  301. package/dist/trace/import.d.ts.map +1 -0
  302. package/dist/trace/import.js +45 -0
  303. package/dist/trace/import.js.map +1 -0
  304. package/dist/version.d.ts +3 -0
  305. package/dist/version.d.ts.map +1 -0
  306. package/dist/version.js +3 -0
  307. package/dist/version.js.map +1 -0
  308. package/package.json +82 -0
@@ -0,0 +1,588 @@
1
+ import { Command, Option } from 'commander';
2
+ import { safeMultilineTerminalText } from '../output/safe-text.js';
3
+ import { AutoevalError } from '../errors/autoeval-error.js';
4
+ import { CLI_VERSION } from '../version.js';
5
+ export function parseThresholdNumber(flag, value) {
6
+ const parsed = Number(value);
7
+ if (!Number.isFinite(parsed)) {
8
+ throw new AutoevalError(`${flag} must be a number, received "${value}".`, {
9
+ kind: 'usage',
10
+ code: 'INVALID_GATE_THRESHOLD',
11
+ });
12
+ }
13
+ if (flag === '--min-judge-agreement' && (parsed < 0 || parsed > 1)) {
14
+ throw new AutoevalError(`${flag} must be between 0 and 1.`, {
15
+ kind: 'usage',
16
+ code: 'INVALID_GATE_THRESHOLD',
17
+ });
18
+ }
19
+ return parsed;
20
+ }
21
+ /** Parse repeatable `--metric name=score` pairs for session release gating. */
22
+ export function parseMetricThresholds(values) {
23
+ const metrics = {};
24
+ for (const value of values) {
25
+ const separator = value.indexOf('=');
26
+ const name = separator === -1 ? '' : value.slice(0, separator).trim();
27
+ if (name === '') {
28
+ throw new AutoevalError(`--metric must use the form name=score, received "${value}".`, {
29
+ kind: 'usage',
30
+ code: 'INVALID_GATE_THRESHOLD',
31
+ });
32
+ }
33
+ metrics[name] = parseThresholdNumber('--metric', value.slice(separator + 1).trim());
34
+ }
35
+ return metrics;
36
+ }
37
+ function parsePositiveInteger(flag, value) {
38
+ const parsed = Number(value);
39
+ if (!Number.isInteger(parsed) || parsed <= 0) {
40
+ throw new AutoevalError(`${flag} must be a positive integer, received "${value}".`, {
41
+ kind: 'usage',
42
+ code: 'INVALID_SUITE_OPTION',
43
+ });
44
+ }
45
+ return parsed;
46
+ }
47
+ function parseNonNegativeInteger(flag, value) {
48
+ const parsed = Number(value);
49
+ if (!Number.isInteger(parsed) || parsed < 0) {
50
+ throw new AutoevalError(`${flag} must be a non-negative integer, received "${value}".`, {
51
+ kind: 'usage',
52
+ code: 'INVALID_SUITE_OPTION',
53
+ });
54
+ }
55
+ return parsed;
56
+ }
57
+ function parseEvaluationVersion(value) {
58
+ const parsed = Number(value);
59
+ if (!Number.isInteger(parsed) || parsed <= 0) {
60
+ throw new AutoevalError(`--version must be a positive integer, received "${value}".`, {
61
+ kind: 'usage',
62
+ code: 'INVALID_EVALUATION_VERSION',
63
+ });
64
+ }
65
+ return parsed;
66
+ }
67
+ /**
68
+ * Keep global flags ergonomic by accepting them before or after subcommands.
69
+ * Commander with positional options expects root flags before the command, so
70
+ * normalize trailing global flags into leading positions before parsing.
71
+ */
72
+ export function normalizeGlobalCliFlags(tokens) {
73
+ const leading = [];
74
+ const trailing = [];
75
+ let passthrough = false;
76
+ for (const token of tokens) {
77
+ if (passthrough) {
78
+ trailing.push(token);
79
+ continue;
80
+ }
81
+ if (token === '--') {
82
+ passthrough = true;
83
+ trailing.push(token);
84
+ continue;
85
+ }
86
+ if (token === '--json' || token === '--debug') {
87
+ if (!leading.includes(token))
88
+ leading.push(token);
89
+ continue;
90
+ }
91
+ trailing.push(token);
92
+ }
93
+ return [...leading, ...trailing];
94
+ }
95
+ function executionOptions(command) {
96
+ const options = command.optsWithGlobals();
97
+ return { json: options.json === true, debug: options.debug === true };
98
+ }
99
+ export function createProgram(executor, extensions = []) {
100
+ const program = new Command();
101
+ program
102
+ .name('autoeval')
103
+ .description('Deterministic terminal client for Plumloom Autoeval')
104
+ .version(CLI_VERSION)
105
+ .option('--json', 'emit machine-readable JSON')
106
+ .option('--debug', 'emit redacted request diagnostics to stderr')
107
+ .enablePositionalOptions()
108
+ .showHelpAfterError()
109
+ .showSuggestionAfterError()
110
+ // Root only: no subcommand declares variadic positionals, but scoping this
111
+ // here keeps future variadic subcommands unaffected.
112
+ .allowExcessArguments(false)
113
+ .exitOverride();
114
+ program.addHelpText('after', [
115
+ '',
116
+ 'Getting started:',
117
+ ' 1. autoeval login authenticate once (or set AUTOEVAL_API_KEY)',
118
+ ' 2. autoeval quickstart run a first evaluation end to end',
119
+ ' 3. autoeval run <evaluation-id> run and wait; prints the Run ID',
120
+ ' 4. autoeval results <evaluation-id> <run-id> read results for the Run ID from step 3',
121
+ '',
122
+ 'Tips:',
123
+ ' Add --json to any command for machine-readable output on stdout',
124
+ ' Add --debug to print redacted request diagnostics to stderr',
125
+ '',
126
+ 'Environment:',
127
+ ' AUTOEVAL_API_KEY CLI key used instead of the OS credential store',
128
+ ' AUTOEVAL_API_BASE_URL required Autoeval API origin (https, no path)',
129
+ '',
130
+ ].join('\n'));
131
+ // Non-interactive bare invocations still return an actionable usage error.
132
+ program.action((_options, command) => {
133
+ command.outputHelp();
134
+ throw new AutoevalError('Autoeval requires a command.', {
135
+ kind: 'usage',
136
+ code: 'NO_COMMAND',
137
+ });
138
+ });
139
+ program
140
+ .command('login')
141
+ .description('authenticate with a Plumloom CLI key')
142
+ .option('--key <key>', 'CLI key (pl_sk_...) for non-interactive login')
143
+ .action(async (options, command) => {
144
+ await executor.execute({ kind: 'login', ...(options.key !== undefined ? { key: options.key } : {}) }, executionOptions(command));
145
+ });
146
+ program
147
+ .command('logout')
148
+ .description('remove the locally stored CLI key')
149
+ .action(async (_options, command) => {
150
+ await executor.execute({ kind: 'logout' }, executionOptions(command));
151
+ });
152
+ program
153
+ .command('whoami')
154
+ .description('show the authenticated Plumloom identity')
155
+ .action(async (_options, command) => {
156
+ await executor.execute({ kind: 'whoami' }, executionOptions(command));
157
+ });
158
+ const workspace = program.command('workspace').description('workspace operations');
159
+ workspace
160
+ .command('list')
161
+ .description('list accessible workspaces')
162
+ .action(async (_options, command) => {
163
+ await executor.execute({ kind: 'workspace-list' }, executionOptions(command));
164
+ });
165
+ workspace
166
+ .command('create')
167
+ .description('create a new workspace')
168
+ .requiredOption('--name <name>', 'workspace name')
169
+ .option('--description <description>', 'workspace description')
170
+ .action(async (options, command) => {
171
+ await executor.execute({
172
+ kind: 'workspace-create',
173
+ name: options.name,
174
+ ...(options.description ? { description: options.description } : {}),
175
+ }, executionOptions(command));
176
+ });
177
+ const evaluation = program.command('eval').description('evaluation operations');
178
+ evaluation
179
+ .command('list')
180
+ .description('list evaluations in a workspace')
181
+ .requiredOption('--workspace <workspace-id>', 'workspace UUID')
182
+ .action(async (options, command) => {
183
+ await executor.execute({ kind: 'evaluation-list', workspaceId: options.workspace }, executionOptions(command));
184
+ });
185
+ evaluation
186
+ .command('create')
187
+ .description('create an evaluation draft in a workspace')
188
+ .requiredOption('--workspace <workspace-id>', 'workspace UUID')
189
+ .option('--name <evaluation-name>', 'evaluation name', 'Untitled')
190
+ .action(async (options, command) => {
191
+ await executor.execute({
192
+ kind: 'evaluation-create',
193
+ workspaceId: options.workspace,
194
+ ...(options.name ? { name: options.name } : {}),
195
+ }, executionOptions(command));
196
+ });
197
+ evaluation
198
+ .command('create-from')
199
+ .description('create an evaluation in a workspace from a configured-run file')
200
+ .requiredOption('--workspace <workspace-id>', 'workspace UUID')
201
+ .requiredOption('--input <json-file>', 'configured-run file, such as one from eval scaffold')
202
+ .option('--judge-model-id <uuid>', 'override the file judge model with an enabled model UUID')
203
+ .option('--primary-model-id <uuid>', 'override the file scenario primary model with an enabled model UUID')
204
+ .option('--run', 'run the evaluation immediately after creating it')
205
+ .action(async (options, command) => {
206
+ await executor.execute({
207
+ kind: 'evaluation-create-from',
208
+ workspaceId: options.workspace,
209
+ inputFiles: [options.input],
210
+ run: options.run === true,
211
+ ...(options.judgeModelId === undefined ? {} : { judgeModelId: options.judgeModelId }),
212
+ ...(options.primaryModelId === undefined
213
+ ? {}
214
+ : { primaryModelId: options.primaryModelId }),
215
+ }, executionOptions(command));
216
+ });
217
+ const trace = program
218
+ .command('trace')
219
+ .description('convert agent trajectories into agent_trace evaluation input');
220
+ trace
221
+ .command('import')
222
+ .description('convert a DeepSeek Harness session log into an agent_trace evaluation input file')
223
+ .requiredOption('--from <source>', 'trajectory source; only deepseek-harness is supported')
224
+ .requiredOption('--session <jsonl-file>', 'Harness session log written as raw JSONL lines')
225
+ .requiredOption('--template <json-file>', 'configured-run file supplying methodology and judge')
226
+ .requiredOption('--out <json-file>', 'new path to write the agent_trace evaluation input')
227
+ .option('--name <evaluation-name>', 'evaluation name for the imported trace')
228
+ .option('--service-name <service-name>', 'service.name resource attribute for the trace')
229
+ .option('--workspace <workspace-id>', 'workspace UUID, required with --run')
230
+ .option('--run', 'create and run the evaluation immediately after writing the file')
231
+ .action(async (options, command) => {
232
+ if (options.from !== 'deepseek-harness') {
233
+ throw new AutoevalError(`Unsupported trajectory source: ${options.from}. Use --from deepseek-harness.`, { kind: 'usage', code: 'UNSUPPORTED_TRACE_SOURCE' });
234
+ }
235
+ await executor.execute({
236
+ kind: 'trace-import',
237
+ source: 'deepseek-harness',
238
+ sessionFile: options.session,
239
+ templateFile: options.template,
240
+ outputFile: options.out,
241
+ ...(options.name ? { evaluationName: options.name } : {}),
242
+ ...(options.serviceName ? { serviceName: options.serviceName } : {}),
243
+ ...(options.workspace ? { workspaceId: options.workspace } : {}),
244
+ run: options.run === true,
245
+ }, executionOptions(command));
246
+ });
247
+ evaluation
248
+ .command('versions <evaluation-id>')
249
+ .description('list saved evaluation versions for an evaluation')
250
+ .action(async (evaluationId, _options, command) => {
251
+ await executor.execute({ kind: 'evaluation-versions', evaluationId }, executionOptions(command));
252
+ });
253
+ evaluation
254
+ .command('show <evaluation-id>')
255
+ .description("show the evaluation's configuration and version information (evaluation version plus methodology and config version IDs)")
256
+ .option('--version <number>', 'evaluation version number to inspect (a revision number such as 1, not an ID)')
257
+ .action(async (evaluationId, options, command) => {
258
+ await executor.execute({
259
+ kind: 'evaluation-show',
260
+ evaluationId,
261
+ ...(options.version === undefined
262
+ ? {}
263
+ : { version: parseEvaluationVersion(options.version) }),
264
+ }, executionOptions(command));
265
+ });
266
+ evaluation
267
+ .command('validate')
268
+ .description('validate evaluation input without creating or running an evaluation')
269
+ .requiredOption('--input <json-file>', 'path to JSON file with methodology and configuration')
270
+ .action(async (options, command) => {
271
+ await executor.execute({ kind: 'evaluation-validate', inputFile: options.input }, executionOptions(command));
272
+ });
273
+ evaluation
274
+ .command('run-configured')
275
+ .description('create methodology/config, run once, and wait for completion')
276
+ .requiredOption('--evaluation <evaluation-id>', 'evaluation UUID')
277
+ .requiredOption('--input <json-file>', 'path to JSON file with methodology and configuration')
278
+ .action(async (options, command) => {
279
+ await executor.execute({
280
+ kind: 'evaluation-run-configured',
281
+ evaluationId: options.evaluation,
282
+ inputFile: options.input,
283
+ }, executionOptions(command));
284
+ });
285
+ evaluation
286
+ .command('update-title')
287
+ .description('update evaluation title, sync evaltool list, and fetch refreshed workspace list')
288
+ .requiredOption('--workspace <workspace-id>', 'workspace UUID')
289
+ .requiredOption('--evaluation <evaluation-id>', 'evaluation UUID')
290
+ .requiredOption('--name <evaluation-name>', 'new evaluation title')
291
+ .requiredOption('--user-system-id <user-system-id>', 'user system ID for patch payload')
292
+ .option('--description <description>', 'evaluation description')
293
+ .option('--page <page>', 'result page number', '1')
294
+ .option('--size <size>', 'result page size', '50')
295
+ .action(async (options, command) => {
296
+ await executor.execute({
297
+ kind: 'evaluation-update-title',
298
+ workspaceId: options.workspace,
299
+ evaluationId: options.evaluation,
300
+ name: options.name,
301
+ userSystemId: options.userSystemId,
302
+ ...(options.description ? { description: options.description } : {}),
303
+ ...(options.page ? { page: Number(options.page) } : {}),
304
+ ...(options.size ? { size: Number(options.size) } : {}),
305
+ }, executionOptions(command));
306
+ });
307
+ const suite = program.command('suite').description('workspace-level evaluation suites');
308
+ suite
309
+ .command('run')
310
+ .description('create and run every evaluation listed in a suite manifest')
311
+ .requiredOption('--manifest <manifest-file>', 'suite manifest (YAML or JSON)')
312
+ .option('--workspace <workspace-id>', "override the manifest's workspace UUID")
313
+ .option('--judge-model-id <uuid>', 'override every eval judge model with an enabled model UUID')
314
+ .option('--primary-model-id <uuid>', 'override every scenario primary model with an enabled model UUID')
315
+ .option('--concurrency <count>', 'maximum number of evals to run at once')
316
+ .option('--stagger-ms <milliseconds>', 'delay between scheduling eval starts')
317
+ .action(async (options, command) => {
318
+ const concurrency = options.concurrency === undefined
319
+ ? undefined
320
+ : parsePositiveInteger('--concurrency', options.concurrency);
321
+ const staggerMs = options.staggerMs === undefined
322
+ ? undefined
323
+ : parseNonNegativeInteger('--stagger-ms', options.staggerMs);
324
+ await executor.execute({
325
+ kind: 'suite-run',
326
+ manifestFile: options.manifest,
327
+ ...(options.workspace === undefined ? {} : { workspaceId: options.workspace }),
328
+ ...(options.judgeModelId === undefined ? {} : { judgeModelId: options.judgeModelId }),
329
+ ...(options.primaryModelId === undefined
330
+ ? {}
331
+ : { primaryModelId: options.primaryModelId }),
332
+ ...(concurrency === undefined ? {} : { concurrency }),
333
+ ...(staggerMs === undefined ? {} : { staggerMs }),
334
+ }, executionOptions(command));
335
+ });
336
+ suite
337
+ .command('gate')
338
+ .description('run a suite manifest and decide whether the release is allowed')
339
+ .requiredOption('--manifest <manifest-file>', 'suite manifest (YAML or JSON)')
340
+ .option('--workspace <workspace-id>', "override the manifest's workspace UUID")
341
+ .option('--judge-model-id <uuid>', 'override every eval judge model with an enabled model UUID')
342
+ .option('--primary-model-id <uuid>', 'override every scenario primary model with an enabled model UUID')
343
+ .option('--concurrency <count>', 'maximum number of evals to run at once')
344
+ .option('--stagger-ms <milliseconds>', 'delay between scheduling eval starts')
345
+ .action(async (options, command) => {
346
+ const concurrency = options.concurrency === undefined
347
+ ? undefined
348
+ : parsePositiveInteger('--concurrency', options.concurrency);
349
+ const staggerMs = options.staggerMs === undefined
350
+ ? undefined
351
+ : parseNonNegativeInteger('--stagger-ms', options.staggerMs);
352
+ await executor.execute({
353
+ kind: 'suite-gate',
354
+ manifestFile: options.manifest,
355
+ ...(options.workspace === undefined ? {} : { workspaceId: options.workspace }),
356
+ ...(options.judgeModelId === undefined ? {} : { judgeModelId: options.judgeModelId }),
357
+ ...(options.primaryModelId === undefined
358
+ ? {}
359
+ : { primaryModelId: options.primaryModelId }),
360
+ ...(concurrency === undefined ? {} : { concurrency }),
361
+ ...(staggerMs === undefined ? {} : { staggerMs }),
362
+ }, executionOptions(command));
363
+ });
364
+ program
365
+ .command('doctor')
366
+ .description('run pre-flight checks on auth, workspace, models, and eval or manifest files')
367
+ .option('--workspace <workspace-id>', 'workspace UUID to verify access to')
368
+ .option('--manifest <manifest-file>', 'suite manifest to parse and check (YAML or JSON)')
369
+ .option('--input <json-file>', 'eval file to check; repeat for several files', (value, previous) => [...previous, value], [])
370
+ .action(async (options, command) => {
371
+ await executor.execute({
372
+ kind: 'doctor',
373
+ inputFiles: options.input ?? [],
374
+ ...(options.workspace === undefined ? {} : { workspaceId: options.workspace }),
375
+ ...(options.manifest === undefined ? {} : { manifestFile: options.manifest }),
376
+ }, executionOptions(command));
377
+ });
378
+ const qualityStandard = program.command('qs').description('quality standard operations');
379
+ qualityStandard
380
+ .command('create')
381
+ .description('create a quality standard from JSON input')
382
+ .option('--workspace <workspace-id>', 'workspace UUID to auto-associate after creation')
383
+ .requiredOption('--input <file>', 'path to JSON file with quality standard payload')
384
+ .action(async (options, command) => {
385
+ await executor.execute({
386
+ kind: 'quality-standard-create',
387
+ inputFile: options.input,
388
+ ...(options.workspace ? { workspaceId: options.workspace } : {}),
389
+ }, executionOptions(command));
390
+ });
391
+ qualityStandard
392
+ .command('update <qs-id>')
393
+ .description('update a quality standard from JSON input')
394
+ .requiredOption('--input <file>', 'path to JSON file with quality standard payload')
395
+ .action(async (qualityStandardId, options, command) => {
396
+ await executor.execute({
397
+ kind: 'quality-standard-update',
398
+ qualityStandardId,
399
+ inputFile: options.input,
400
+ }, executionOptions(command));
401
+ });
402
+ qualityStandard
403
+ .command('assign <qs-id>')
404
+ .description('associate a quality standard with a workspace')
405
+ .requiredOption('--workspace <workspace-id>', 'workspace UUID')
406
+ .action(async (qualityStandardId, options, command) => {
407
+ await executor.execute({
408
+ kind: 'quality-standard-assign',
409
+ workspaceId: options.workspace,
410
+ qualityStandardId,
411
+ }, executionOptions(command));
412
+ });
413
+ qualityStandard
414
+ .command('workspace')
415
+ .description('retrieve the quality standard assigned to a workspace')
416
+ .requiredOption('--workspace <workspace-id>', 'workspace UUID')
417
+ .action(async (options, command) => {
418
+ await executor.execute({ kind: 'quality-standard-workspace', workspaceId: options.workspace }, executionOptions(command));
419
+ });
420
+ qualityStandard
421
+ .command('show <qs-id>')
422
+ .description('retrieve a quality standard by ID')
423
+ .action(async (qualityStandardId, _options, command) => {
424
+ await executor.execute({ kind: 'quality-standard-show', qualityStandardId }, executionOptions(command));
425
+ });
426
+ program
427
+ .command('models')
428
+ .description('list models available through Plumloom')
429
+ .action(async (_options, command) => {
430
+ await executor.execute({ kind: 'models' }, executionOptions(command));
431
+ });
432
+ program
433
+ .command('quickstart')
434
+ .description('run a first evaluation end to end: resolves your workspace and judge model, runs the bundled agent trace sample, and prints the result')
435
+ .option('--workspace <workspace-id>', 'use this workspace instead of resolving one')
436
+ .option('--judge-model-id <model-id>', 'use this judge model instead of resolving one')
437
+ .option('--primary-model-id <model-id>', 'use this model under test instead of resolving one (scenario sample only)')
438
+ .addOption(new Option('--sample <kind>', 'which bundled sample to run: an agent trace, or a scenario that calls a model under test')
439
+ .choices(['trace', 'scenario'])
440
+ .default('trace'))
441
+ .option('--input <file>', 'run this evaluation file instead of the bundled sample')
442
+ .option('--yes', 'never prompt; fail if a choice is required', false)
443
+ .action(async (options, command) => {
444
+ await executor.execute({
445
+ kind: 'quickstart',
446
+ ...(options.workspace === undefined ? {} : { workspaceId: options.workspace }),
447
+ ...(options.judgeModelId === undefined ? {} : { judgeModelId: options.judgeModelId }),
448
+ ...(options.primaryModelId === undefined
449
+ ? {}
450
+ : { primaryModelId: options.primaryModelId }),
451
+ ...(options.input === undefined ? {} : { inputFile: options.input }),
452
+ sample: options.sample,
453
+ assumeYes: options.yes === true,
454
+ }, executionOptions(command));
455
+ });
456
+ program
457
+ .command('run <evaluation-id>')
458
+ .description('start an evaluation run, wait for a terminal state, and print the Run ID used by status and results')
459
+ .action(async (evaluationId, _options, command) => {
460
+ await executor.execute({ kind: 'run', evaluationId }, executionOptions(command));
461
+ });
462
+ program
463
+ .command('status <evaluation-id> <run-id>')
464
+ .description('show the status of an evaluation run for the Run ID printed when the run started')
465
+ .action(async (evaluationId, runId, _options, command) => {
466
+ await executor.execute({ kind: 'status', evaluationId, runId }, executionOptions(command));
467
+ });
468
+ program
469
+ .command('results <evaluation-id> <run-id>')
470
+ .description('retrieve results for the Run ID printed when the run started, using the evaluation context')
471
+ .option('-v, --show-outputs', 'also print each test case input and the model response')
472
+ .action(async (evaluationId, runId, options, command) => {
473
+ await executor.execute({
474
+ kind: 'results',
475
+ evaluationId,
476
+ runId,
477
+ ...(options.showOutputs === true ? { showOutputs: true } : {}),
478
+ }, executionOptions(command));
479
+ });
480
+ program
481
+ .command('gate <evaluation-id>')
482
+ .description('evaluate a run result and fail when it misses the configured thresholds')
483
+ .option('--min-overall <score>', 'minimum overall score')
484
+ .option('--min-scenario <score>', 'minimum score for every scenario and model')
485
+ .option('--min-judge-agreement <ratio>', 'minimum judge agreement ratio between 0 and 1')
486
+ .option('--metric <name=score...>', 'minimum per-metric score (conversation, agent trace); repeatable')
487
+ .option('--thresholds <json-file>', 'read thresholds from a JSON file; flags take precedence')
488
+ .action(async (evaluationId, options, command) => {
489
+ const thresholds = {
490
+ ...(options.minOverall !== undefined
491
+ ? { minOverall: parseThresholdNumber('--min-overall', options.minOverall) }
492
+ : {}),
493
+ ...(options.minScenario !== undefined
494
+ ? { minScenario: parseThresholdNumber('--min-scenario', options.minScenario) }
495
+ : {}),
496
+ ...(options.minJudgeAgreement !== undefined
497
+ ? {
498
+ minJudgeAgreement: parseThresholdNumber('--min-judge-agreement', options.minJudgeAgreement),
499
+ }
500
+ : {}),
501
+ ...(options.metric === undefined
502
+ ? {}
503
+ : { metrics: parseMetricThresholds(options.metric) }),
504
+ };
505
+ await executor.execute({
506
+ kind: 'gate',
507
+ evaluationId,
508
+ thresholds,
509
+ ...(options.thresholds !== undefined ? { thresholdsFile: options.thresholds } : {}),
510
+ }, executionOptions(command));
511
+ });
512
+ addCommandExamples(program);
513
+ for (const extend of extensions)
514
+ extend(program);
515
+ return program;
516
+ }
517
+ const COMMAND_EXAMPLES = {
518
+ login: ['autoeval login', 'AUTOEVAL_API_KEY=pl_sk_... autoeval whoami'],
519
+ whoami: ['autoeval whoami', 'autoeval --json whoami'],
520
+ 'workspace list': ['autoeval workspace list'],
521
+ 'workspace create': ['autoeval workspace create --name "Support quality"'],
522
+ 'eval list': ['autoeval eval list --workspace <workspace-id>'],
523
+ 'eval create': ['autoeval eval create --workspace <workspace-id> --name "Refund flow"'],
524
+ 'eval create-from': [
525
+ 'autoeval eval create-from --workspace <workspace-id> --input refunds.autoeval.json',
526
+ 'autoeval eval create-from --workspace <workspace-id> --input refunds.autoeval.json --run',
527
+ ],
528
+ 'suite run': ['autoeval suite run --manifest autoeval.suite.yaml'],
529
+ 'eval show': ['autoeval eval show <evaluation-id>'],
530
+ 'eval validate': ['autoeval eval validate --input examples/evals/scenario-basic.json'],
531
+ 'eval run-configured': [
532
+ 'autoeval eval run-configured --evaluation <evaluation-id> --input examples/evals/scenario-basic.json',
533
+ ],
534
+ 'qs create': ['autoeval qs create --input <file> --workspace <workspace-id>'],
535
+ qs: [
536
+ 'autoeval qs create --input <file> --workspace <workspace-id>',
537
+ 'autoeval qs show <qs-id>',
538
+ 'autoeval --json qs show <qs-id>',
539
+ 'autoeval qs update <qs-id> --input <file>',
540
+ 'autoeval qs assign <qs-id> --workspace <workspace-id>',
541
+ 'autoeval qs workspace --workspace <workspace-id>',
542
+ ],
543
+ 'qs show': ['autoeval qs show <qs-id>', 'autoeval --json qs show <qs-id>'],
544
+ 'qs update': ['autoeval qs update <qs-id> --input <file>'],
545
+ 'qs assign': ['autoeval qs assign <qs-id> --workspace <workspace-id>'],
546
+ 'qs workspace': ['autoeval qs workspace --workspace <workspace-id>'],
547
+ models: ['autoeval models', 'autoeval --json models'],
548
+ run: ['autoeval run <evaluation-id>'],
549
+ status: ['autoeval status <evaluation-id> <run-id>'],
550
+ gate: [
551
+ 'autoeval gate <evaluation-id> --min-overall 4.0',
552
+ 'autoeval --json gate <evaluation-id> --thresholds .autoeval/gate.json',
553
+ ],
554
+ results: ['autoeval results <evaluation-id> <run-id>', 'autoeval --json results <id> <run-id>'],
555
+ };
556
+ function addCommandExamples(program) {
557
+ const visit = (command, path) => {
558
+ const examples = COMMAND_EXAMPLES[path.join(' ')];
559
+ if (examples) {
560
+ command.addHelpText('after', `\nExamples:\n${examples.map((example) => ` ${example}`).join('\n')}\n`);
561
+ }
562
+ command.commands.forEach((subcommand) => visit(subcommand, [...path, subcommand.name()]));
563
+ };
564
+ program.commands.forEach((command) => visit(command, [command.name()]));
565
+ }
566
+ const MISSING_OPTION_HINTS = {
567
+ '--workspace': 'provide a workspace ID with --workspace <workspace-id>. Use `autoeval workspace list` to find one',
568
+ '--evaluation': 'provide an evaluation ID with --evaluation <evaluation-id>. Use `autoeval eval list --workspace <workspace-id>` to find one',
569
+ '--input': 'provide a JSON file with --input <path>. See examples/ for ready-made payloads',
570
+ '--name': 'provide a human-readable name with --name "My workspace"',
571
+ };
572
+ const MISSING_OPTION_PATTERN = /^error: required option '(--[^ '<]+)/;
573
+ export function missingOptionHint(message) {
574
+ const flag = MISSING_OPTION_PATTERN.exec(message)?.[1];
575
+ return flag === undefined ? undefined : MISSING_OPTION_HINTS[flag];
576
+ }
577
+ export function configureSafeProgramOutput(command, stdout, stderr) {
578
+ command.configureOutput({
579
+ writeOut: (message) => stdout.write(safeMultilineTerminalText(message)),
580
+ writeErr: (message) => {
581
+ const hint = missingOptionHint(message);
582
+ const text = hint === undefined ? message : `${message.trimEnd()}\nHint: ${hint}\n`;
583
+ stderr.write(safeMultilineTerminalText(text));
584
+ },
585
+ });
586
+ command.commands.forEach((subcommand) => configureSafeProgramOutput(subcommand, stdout, stderr));
587
+ }
588
+ //# sourceMappingURL=program.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/commands/program.ts"],"names":[],"mappings":"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"}