@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,506 @@
1
+ import { resultMetricScores, scenarioHeadline, scenarioMetricScores, scenarioModelScores, scenarioOutputs, scenarioReliability, scenarioTestCaseScores, sessionMetricScores, trajectoryMetricScores, } from './digest.js';
2
+ import { renderBigScore } from './big-digits.js';
3
+ import { paint } from './colors.js';
4
+ import { renderBadge, renderMetadata, renderRule } from './layout.js';
5
+ import { safeMultilineTerminalText, safeTerminalText } from './safe-text.js';
6
+ import { formatTable } from './table.js';
7
+ /**
8
+ * Result scorecard rendering.
9
+ *
10
+ * A result is a data summary, not an interpreter. The only verdict shown is
11
+ * the one the evaluation service returns in `outcome.achieved` (conversation / agent trace).
12
+ * Scenario results carry no outcome, so the scorecard displays scores only.
13
+ * Scores are on a 1–5 scale. Only values the payload actually contains are
14
+ * shown: no derived recommendation, and no delta on session or trajectory
15
+ * tables.
16
+ */
17
+ function round(value) {
18
+ return String(Math.round(value * 100) / 100);
19
+ }
20
+ /** Two decimals, rounded half up, so score columns line up on the decimal point. */
21
+ function fixed2(value) {
22
+ return (Math.round(value * 100) / 100).toFixed(2);
23
+ }
24
+ function asObject(value) {
25
+ return typeof value === 'object' && value !== null && !Array.isArray(value)
26
+ ? value
27
+ : undefined;
28
+ }
29
+ function num(value) {
30
+ return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
31
+ }
32
+ function agreementOf(input) {
33
+ const agreement = asObject(asObject(input)?.judge_agreement);
34
+ const pass = num(agreement?.pass) ?? num(agreement?.agreed);
35
+ const total = num(agreement?.total);
36
+ return pass === undefined || total === undefined ? undefined : `${pass}/${total}`;
37
+ }
38
+ function sessionSummary(input) {
39
+ const session = asObject(input);
40
+ const outcome = asObject(session?.outcome);
41
+ const overall = num(session?.overall);
42
+ const agreement = agreementOf(session);
43
+ return {
44
+ ...(outcome?.has_data === false || typeof outcome?.achieved !== 'boolean'
45
+ ? {}
46
+ : { achieved: outcome.achieved }),
47
+ ...(overall === undefined ? {} : { overall }),
48
+ ...(agreement === undefined ? {} : { agreement }),
49
+ };
50
+ }
51
+ /** Metric | Score table, used for session and trajectory payloads. */
52
+ function scoreTable(label, metrics, width) {
53
+ if (metrics.length === 0)
54
+ return paint.meta('No scored entries were returned');
55
+ return formatTable([
56
+ { header: label, minWidth: 24, maxWidth: 44 },
57
+ { header: 'SCORE', align: 'right', minWidth: 7, tone: 'input' },
58
+ ], [...metrics]
59
+ .sort((left, right) => left.score - right.score)
60
+ .map((metric) => [safeTerminalText(metric.name), round(metric.score)]), width === undefined ? {} : { width });
61
+ }
62
+ function subheading(title) {
63
+ return paint.header(title.toUpperCase());
64
+ }
65
+ /**
66
+ * Render a result payload as a scorecard: outcome badge, headline metadata, and
67
+ * a table per scored area. Returns plain stdout text so selection and copy keep
68
+ * working.
69
+ */
70
+ /**
71
+ * The overall score a payload reports, or the mean of the scores it contains
72
+ * when it reports none. Returns undefined when the payload carries no score at
73
+ * all, so callers never plot or compare an invented value.
74
+ */
75
+ export function resultOverallScore(results) {
76
+ const sessionPayload = results.contextType === 'conversation'
77
+ ? results.conversation
78
+ : results.contextType === 'agent_trace'
79
+ ? results.agentTrace
80
+ : undefined;
81
+ const models = results.contextType === 'scenario' ? scenarioModelScores(results.modelPerformance) : [];
82
+ const allMetrics = resultMetricScores(results);
83
+ const sessionOverall = sessionPayload === undefined ? undefined : sessionSummary(sessionPayload).overall;
84
+ return (sessionOverall ??
85
+ (models.length > 0
86
+ ? models.reduce((total, model) => total + model.mean, 0) / models.length
87
+ : allMetrics.length > 0
88
+ ? allMetrics.reduce((total, metric) => total + metric.score, 0) / allMetrics.length
89
+ : undefined));
90
+ }
91
+ /**
92
+ * How wide an interval has to be before the row is flagged: at ±1.0 on a 1–5
93
+ * scale the judge disagreed by a full scale point, so the mean stops being a
94
+ * useful summary of the runs behind it.
95
+ */
96
+ const WIDE_INTERVAL = 1;
97
+ const SCALE_MIN = 1;
98
+ const SCALE_MAX = 5;
99
+ const RESPONSE_PREVIEW_CHARS = 180;
100
+ const INPUT_PREVIEW_CHARS = 100;
101
+ function interval(ci95) {
102
+ return ci95 === undefined ? '' : `±${ci95.toFixed(2)}`;
103
+ }
104
+ function seconds(latencyMs) {
105
+ return `${Math.round(latencyMs / 100) / 10}s`;
106
+ }
107
+ function clip(value, maxChars) {
108
+ const collapsed = value.replace(/\s+/gu, ' ').trim();
109
+ if (collapsed.length <= maxChars)
110
+ return { shown: collapsed, remaining: 0 };
111
+ return {
112
+ shown: `${collapsed.slice(0, maxChars)}…`,
113
+ remaining: collapsed.length - maxChars,
114
+ };
115
+ }
116
+ /** ⚠ marks an interval too wide to summarise; the note marks a full-scale span. */
117
+ function metricFlag(metric) {
118
+ if (metric.ci95 === undefined || metric.ci95 < WIDE_INTERVAL)
119
+ return '';
120
+ const spansScale = metric.ci95Lower !== undefined &&
121
+ metric.ci95Upper !== undefined &&
122
+ metric.ci95Lower <= SCALE_MIN &&
123
+ metric.ci95Upper >= SCALE_MAX;
124
+ return spansScale ? '⚠ spans the scale' : '⚠';
125
+ }
126
+ /**
127
+ * Rubric fit: one row per scored metric, alphabetical, with `overall` pinned
128
+ * last because it aggregates the rows above it rather than sitting among them.
129
+ * Single-run payloads have no interval, so the CI columns are dropped instead
130
+ * of being filled with a blank.
131
+ */
132
+ function rubricFitTable(metrics, multiRun, width) {
133
+ if (metrics.length === 0)
134
+ return paint.meta('No scored metrics were returned');
135
+ const columns = [
136
+ { header: 'METRIC', minWidth: 24, maxWidth: 44 },
137
+ { header: 'MEAN', align: 'right', minWidth: 7, tone: 'input' },
138
+ ...(multiRun
139
+ ? [
140
+ { header: '95% CI', align: 'right', minWidth: 8, tone: 'meta' },
141
+ { header: '', minWidth: 18, tone: 'warn' },
142
+ ]
143
+ : []),
144
+ ];
145
+ return formatTable(columns, metrics.map((metric) => [
146
+ multiRun && metric.insufficientSamples
147
+ ? paint.meta(`${safeTerminalText(metric.metric)} (few samples)`)
148
+ : safeTerminalText(metric.metric),
149
+ fixed2(metric.mean),
150
+ ...(multiRun ? [interval(metric.ci95), metricFlag(metric)] : []),
151
+ ]), width === undefined ? {} : { width });
152
+ }
153
+ /** Test case | mean | 95% CI, in the order the backend indexed the cases. */
154
+ function testCaseTable(rows, multiRun, width) {
155
+ if (rows.length === 0)
156
+ return paint.meta('No scored test cases were returned');
157
+ const widest = Math.max(...rows.map((row) => Math.max(...row.scores.map((s) => s.ci95 ?? 0))));
158
+ const columns = [
159
+ { header: 'TEST CASE', minWidth: 24, maxWidth: 44 },
160
+ { header: 'MEAN', align: 'right', minWidth: 7, tone: 'input' },
161
+ ...(multiRun
162
+ ? [
163
+ { header: '95% CI', align: 'right', minWidth: 8, tone: 'meta' },
164
+ { header: '', minWidth: 10, tone: 'meta' },
165
+ ]
166
+ : []),
167
+ ];
168
+ return formatTable(columns, rows.map((row) => {
169
+ const mean = row.scores.reduce((total, score) => total + score.mean, 0) / row.scores.length;
170
+ const ci95 = Math.max(...row.scores.map((score) => score.ci95 ?? 0));
171
+ const insufficient = row.scores.some((score) => score.insufficientSamples);
172
+ const name = multiRun && insufficient
173
+ ? paint.meta(`${safeTerminalText(row.name)} (few samples)`)
174
+ : safeTerminalText(row.name);
175
+ // Nothing can be the widest when there is only one test case.
176
+ const marker = rows.length > 1 && widest > 0 && ci95 === widest ? '← widest' : '';
177
+ return [name, fixed2(mean), ...(multiRun ? [interval(ci95), marker] : [])];
178
+ }), width === undefined ? {} : { width });
179
+ }
180
+ function consistencyPart(reliability) {
181
+ if (reliability.achievedConsistency === undefined)
182
+ return undefined;
183
+ const target = reliability.targetConsistency === undefined
184
+ ? ''
185
+ : ` (target ${reliability.targetOperator ?? '<'}${reliability.targetConsistency.toFixed(2)})`;
186
+ return `CV ${reliability.achievedConsistency.toFixed(2)}${target}`;
187
+ }
188
+ function stopPart(reliability) {
189
+ if (reliability.stoppedAtRun === undefined)
190
+ return undefined;
191
+ const planned = reliability.runsPlanned === undefined ? '' : ` of ${reliability.runsPlanned}`;
192
+ return reliability.maxRunsReached
193
+ ? `stopped at run ${reliability.stoppedAtRun}${planned} (max)`
194
+ : `auto-stopped at run ${reliability.stoppedAtRun}${planned}`;
195
+ }
196
+ function confidencePart(headline, spans) {
197
+ if (headline.ci95Lower !== undefined && headline.ci95Upper !== undefined) {
198
+ return `95% CI ${spans ? 'spans ' : ''}${round(headline.ci95Lower)}–${round(headline.ci95Upper)}`;
199
+ }
200
+ return headline.ci95 === undefined ? undefined : `95% CI ${interval(headline.ci95)}`;
201
+ }
202
+ function joinParts(parts) {
203
+ const present = parts.filter((part) => part !== undefined && part !== '');
204
+ return present.length === 0 ? undefined : present.join(' · ');
205
+ }
206
+ /**
207
+ * The hero. Visual weight follows trust: a score that met its consistency
208
+ * target is rendered large, an unstable one is demoted below the warning that
209
+ * explains why a single number would mislead, and a single run gets neither
210
+ * treatment because it carries no reliability signal at all.
211
+ */
212
+ function heroLines(headline, reliability, multiRun) {
213
+ if (headline.mean === undefined)
214
+ return [paint.heading('Overall score not available')];
215
+ const score = round(headline.mean);
216
+ if (!multiRun) {
217
+ return [
218
+ '',
219
+ paint.heading(`${score} / 5 overall`),
220
+ paint.meta('Single run — no reliability signal. Scores can vary from run to run.'),
221
+ paint.meta('Run a multi-run evaluation to see confidence intervals and stability.'),
222
+ ];
223
+ }
224
+ if (reliability.stable === false) {
225
+ const runs = reliability.runsCompleted ?? headline.runs;
226
+ const detail = joinParts([
227
+ `overall ${score}`,
228
+ confidencePart(headline, true),
229
+ consistencyPart(reliability),
230
+ stopPart(reliability),
231
+ ]);
232
+ return [
233
+ '',
234
+ paint.warn(`⚠ Unreliable — score did not stabilize${runs === undefined ? '' : ` across ${runs} runs`}`),
235
+ ...(detail === undefined ? [] : [detail]),
236
+ paint.meta('A single number misleads here. The judge disagreed most on the flagged metrics.'),
237
+ paint.meta('Add runs or fix the prompt/judge, then re-run.'),
238
+ ];
239
+ }
240
+ const detail = joinParts([
241
+ confidencePart(headline, false),
242
+ consistencyPart(reliability),
243
+ stopPart(reliability),
244
+ ]);
245
+ return [
246
+ '',
247
+ ...renderBigScore(score, `/ 5 overall${reliability.stable === true ? ' · stable' : ''}`),
248
+ ...(detail === undefined ? [] : [paint.meta(detail)]),
249
+ ];
250
+ }
251
+ /**
252
+ * The single strongest run the payload contains, promoted into the default
253
+ * view: a score is easier to trust once the text behind it is visible.
254
+ *
255
+ * The "best of N" count is taken from the displayed test case's own runs,
256
+ * because `best_run` is per test case/model, not eval-wide.
257
+ */
258
+ function bestResponseLines(outputs, multiRun) {
259
+ let best;
260
+ for (const output of outputs) {
261
+ for (const response of output.responses) {
262
+ const score = response.overallScore;
263
+ if (score === undefined)
264
+ continue;
265
+ if (best === undefined || score > best.score)
266
+ best = { output, response, score };
267
+ }
268
+ }
269
+ if (best === undefined)
270
+ return [];
271
+ const { response } = best;
272
+ const runs = response.runCount;
273
+ const header = [
274
+ safeTerminalText(response.model),
275
+ multiRun && response.runNumber !== undefined ? `run ${response.runNumber}` : undefined,
276
+ `scored ${round(best.score)} / 5`,
277
+ multiRun && runs !== undefined ? `best of ${runs} for this test case` : undefined,
278
+ ]
279
+ .filter((part) => part !== undefined)
280
+ .join(' · ');
281
+ const lines = [subheading('Best response'), paint.heading(header)];
282
+ if (best.output.input !== undefined) {
283
+ lines.push(paint.meta(`"${clip(best.output.input, INPUT_PREVIEW_CHARS).shown}" →`));
284
+ }
285
+ if (response.response !== undefined) {
286
+ const { shown, remaining } = clip(response.response, RESPONSE_PREVIEW_CHARS);
287
+ lines.push(`"${shown}"${remaining > 0 ? paint.meta(` [+${remaining} chars]`) : ''}`);
288
+ }
289
+ if (response.metrics.length > 0) {
290
+ lines.push(paint.meta(response.metrics
291
+ .map((metric) => `${safeTerminalText(metric.metric)} ${round(metric.score)}`)
292
+ .join(' · ')));
293
+ }
294
+ const usage = [
295
+ response.tokens === undefined ? undefined : `${response.tokens} tokens`,
296
+ response.cost === undefined ? undefined : `$${response.cost.toFixed(4)}`,
297
+ response.latencyMs === undefined ? undefined : seconds(response.latencyMs),
298
+ ].filter((part) => part !== undefined);
299
+ if (usage.length > 0)
300
+ lines.push(paint.meta(`${usage.join(' · ')} (this run)`));
301
+ return lines;
302
+ }
303
+ /**
304
+ * Footer totals. These sum one run per test case — the best run — so they are
305
+ * labelled as such, and the time is summed model inference time rather than
306
+ * wall-clock evaluation time, which runs concurrently and includes judging.
307
+ */
308
+ function scenarioFooter(runs, multiRun, outputs) {
309
+ let tokens = 0;
310
+ let cost = 0;
311
+ let latencyMs = 0;
312
+ for (const output of outputs) {
313
+ for (const response of output.responses) {
314
+ tokens += response.tokens ?? 0;
315
+ cost += response.cost ?? 0;
316
+ latencyMs += response.latencyMs ?? 0;
317
+ }
318
+ }
319
+ const usage = [
320
+ tokens > 0 ? `${tokens} tokens` : undefined,
321
+ cost > 0 ? `$${cost.toFixed(4)}` : undefined,
322
+ latencyMs > 0 ? `${seconds(latencyMs)} model time` : undefined,
323
+ ].filter((part) => part !== undefined);
324
+ if (usage.length === 0) {
325
+ return runs === undefined || !multiRun ? [] : [paint.meta(`${runs} runs`)];
326
+ }
327
+ // A single run's only response already carries these exact usage figures.
328
+ // Repeating them here adds no information; the caller's command hint follows.
329
+ if (!multiRun)
330
+ return [];
331
+ return [
332
+ ...(runs === undefined ? [] : [paint.meta(`${runs} runs`)]),
333
+ paint.meta(`best run per test case: ${usage.join(' · ')}`),
334
+ ];
335
+ }
336
+ /**
337
+ * Scenario scorecard: a hero whose weight matches how much the score can be
338
+ * trusted, the rubric and test-case breakdowns behind it, and the best response
339
+ * the run produced. Every number is read from the payload.
340
+ */
341
+ function renderScenarioScorecard(results, width, options = {}) {
342
+ const headline = scenarioHeadline(results.modelPerformance, results.scenarioComparison);
343
+ const perModel = scenarioMetricScores(results.modelPerformance);
344
+ const primary = perModel.find((model) => model.isPrimary) ?? perModel[0];
345
+ const testCases = scenarioTestCaseScores(results.scenarioComparison);
346
+ const reliability = scenarioReliability(options.status);
347
+ const outputs = scenarioOutputs(results.modelResponses);
348
+ const multiRun = reliability.multiRun && (headline.runs ?? 2) > 1;
349
+ // `overall` aggregates the metrics above it, so it is appended last rather
350
+ // than sorted among them.
351
+ const metrics = [
352
+ ...(primary?.metrics ?? []),
353
+ ...(headline.mean === undefined
354
+ ? []
355
+ : [
356
+ {
357
+ metric: 'overall',
358
+ mean: headline.mean,
359
+ ...(headline.ci95 === undefined ? {} : { ci95: headline.ci95 }),
360
+ ...(headline.ci95Lower === undefined ? {} : { ci95Lower: headline.ci95Lower }),
361
+ ...(headline.ci95Upper === undefined ? {} : { ci95Upper: headline.ci95Upper }),
362
+ },
363
+ ]),
364
+ ];
365
+ const context = [
366
+ 'scenario',
367
+ headline.primaryModel === undefined
368
+ ? undefined
369
+ : `${safeTerminalText(headline.primaryModel)} (primary)`,
370
+ headline.testCases === undefined
371
+ ? undefined
372
+ : `${headline.testCases} test ${headline.testCases === 1 ? 'case' : 'cases'}`,
373
+ headline.runs === undefined
374
+ ? undefined
375
+ : `${headline.runs} ${headline.runs === 1 ? 'run' : 'runs'}`,
376
+ primary === undefined
377
+ ? undefined
378
+ : `${primary.metrics.length} ${primary.metrics.length === 1 ? 'metric' : 'metrics'}`,
379
+ ].filter((part) => part !== undefined);
380
+ const body = [
381
+ subheading('Rubric fit'),
382
+ rubricFitTable(metrics, multiRun, width),
383
+ '',
384
+ subheading('Test cases'),
385
+ testCaseTable(testCases, multiRun, width),
386
+ '',
387
+ ];
388
+ const responses = options.showOutputs
389
+ ? renderScenarioOutputs(results).replace(/\n+$/u, '').split('\n')
390
+ : bestResponseLines(outputs, multiRun);
391
+ if (responses.length > 0)
392
+ body.push(...responses, '');
393
+ body.push(...scenarioFooter(headline.runs, multiRun, outputs));
394
+ return [
395
+ ...heroLines(headline, reliability, multiRun),
396
+ renderRule(width).replace(/\n$/u, ''),
397
+ renderMetadata([['Context', context.join(paint.meta(' · '))]], width).replace(/\n$/u, ''),
398
+ '',
399
+ ...body,
400
+ '',
401
+ ].join('\n');
402
+ }
403
+ export function renderResultScorecard(results, width, options = {}) {
404
+ if (results.contextType === 'scenario') {
405
+ return renderScenarioScorecard(results, width, {
406
+ showOutputs: options.showOutputs === true,
407
+ ...(options.scenarioStatus === undefined ? {} : { status: options.scenarioStatus }),
408
+ });
409
+ }
410
+ const sessionPayload = results.contextType === 'conversation' ? results.conversation : results.agentTrace;
411
+ const session = sessionSummary(sessionPayload);
412
+ const sessionMetrics = sessionMetricScores(sessionPayload);
413
+ const trajectoryPayload = results.contextType === 'agent_trace' && results.trajectory?.has_trajectory !== false
414
+ ? results.trajectory
415
+ : undefined;
416
+ const trajectoryMetrics = trajectoryMetricScores(trajectoryPayload);
417
+ const trajectoryScore = num(asObject(trajectoryPayload)?.trajectory_score);
418
+ const trajectoryAgreement = agreementOf(trajectoryPayload);
419
+ const allMetrics = resultMetricScores(results);
420
+ const overall = resultOverallScore(results);
421
+ const verdict = session.achieved === undefined
422
+ ? undefined
423
+ : session.achieved
424
+ ? { label: 'Pass', tone: 'pass' }
425
+ : { label: 'Fail', tone: 'fail' };
426
+ const badge = verdict === undefined ? '' : `${renderBadge(verdict.tone, verdict.label)} `;
427
+ // When a score exists it leads the card as large block digits; the plain
428
+ // text line remains the fallback for payloads without an overall score.
429
+ const headline = `${badge}${paint.heading(overall === undefined ? 'Overall score not available' : 'Overall score')}`;
430
+ const bigScore = overall === undefined ? [] : ['', ...renderBigScore(round(overall), '/ 5 overall')];
431
+ const entries = [['Context', safeTerminalText(results.contextType)]];
432
+ if (session.agreement)
433
+ entries.push(['Judge agreement', session.agreement]);
434
+ entries.push(['Metrics scored', String(allMetrics.length)]);
435
+ const body = [
436
+ subheading('Session evaluation'),
437
+ scoreTable('METRIC', sessionMetrics, width),
438
+ ];
439
+ if (results.contextType === 'agent_trace') {
440
+ const trajectoryHeader = [];
441
+ if (trajectoryScore !== undefined) {
442
+ trajectoryHeader.push(['Trajectory score', `${round(trajectoryScore)} / 5`]);
443
+ }
444
+ if (trajectoryAgreement)
445
+ trajectoryHeader.push(['Judge agreement', trajectoryAgreement]);
446
+ body.push('', subheading('Trajectory evaluation'));
447
+ if (trajectoryPayload === undefined) {
448
+ body.push(paint.meta('No trajectory evaluation was returned'));
449
+ }
450
+ else {
451
+ if (trajectoryHeader.length > 0) {
452
+ body.push(renderMetadata(trajectoryHeader, width).replace(/\n$/u, ''), '');
453
+ }
454
+ body.push(scoreTable('DIMENSION', trajectoryMetrics, width));
455
+ }
456
+ }
457
+ return [
458
+ headline,
459
+ ...bigScore,
460
+ renderRule(width).replace(/\n$/u, ''),
461
+ renderMetadata(entries, width).replace(/\n$/u, ''),
462
+ '',
463
+ ...body,
464
+ '',
465
+ ].join('\n');
466
+ }
467
+ /**
468
+ * Per-test-case model outputs. Verbose by nature, so `autoeval results` keeps
469
+ * the scorecard to one screen and renders this only behind `--show-outputs`.
470
+ */
471
+ export function renderScenarioOutputs(results) {
472
+ const outputs = [...scenarioOutputs(results.modelResponses)].sort((left, right) => left.index - right.index);
473
+ if (outputs.length === 0)
474
+ return '';
475
+ const lines = [subheading('Best response — every test case'), ''];
476
+ for (const output of outputs) {
477
+ lines.push(paint.heading(safeTerminalText(output.name)));
478
+ if (output.input !== undefined) {
479
+ lines.push(paint.meta('Input'), safeMultilineTerminalText(output.input), '');
480
+ }
481
+ for (const response of output.responses) {
482
+ const score = response.overallScore === undefined ? '' : ` — ${round(response.overallScore)} / 5`;
483
+ lines.push(`${paint.input(safeTerminalText(response.model))}${score}`);
484
+ if (response.response !== undefined) {
485
+ lines.push(safeMultilineTerminalText(response.response));
486
+ }
487
+ if (response.metrics.length > 0) {
488
+ lines.push(paint.meta(response.metrics
489
+ .map((metric) => `${safeTerminalText(metric.metric)} ${round(metric.score)}`)
490
+ .join(' · ')));
491
+ }
492
+ const usage = [
493
+ response.tokens === undefined ? undefined : `${response.tokens} tokens`,
494
+ response.cost === undefined ? undefined : `$${response.cost.toFixed(4)}`,
495
+ response.latencyMs === undefined
496
+ ? undefined
497
+ : `${Math.round(response.latencyMs / 100) / 10}s`,
498
+ ].filter((part) => part !== undefined);
499
+ if (usage.length > 0)
500
+ lines.push(paint.meta(usage.join(' · ')));
501
+ lines.push('');
502
+ }
503
+ }
504
+ return `${lines.join('\n').replace(/\n+$/u, '')}\n`;
505
+ }
506
+ //# sourceMappingURL=scorecard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scorecard.js","sourceRoot":"","sources":["../../src/output/scorecard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Section focusing for rendered data blocks.
3
+ *
4
+ * A user who asks to see "the rubric" wants that field, not the whole
5
+ * configuration. The retrieved display is already a labelled, indented outline,
6
+ * so a focused view is a pure text operation: keep the labelled line and the
7
+ * block indented beneath it.
8
+ */
9
+ /**
10
+ * Returns only the labelled blocks whose label contains one of the keywords, or
11
+ * `undefined` when nothing matches so the caller can fall back to the full
12
+ * display.
13
+ */
14
+ export declare function focusDisplaySections(display: string, keywords: readonly string[]): string | undefined;
15
+ //# sourceMappingURL=section.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section.d.ts","sourceRoot":"","sources":["../../src/output/section.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,SAAS,MAAM,EAAE,GAC1B,MAAM,GAAG,SAAS,CAuBpB"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Section focusing for rendered data blocks.
3
+ *
4
+ * A user who asks to see "the rubric" wants that field, not the whole
5
+ * configuration. The retrieved display is already a labelled, indented outline,
6
+ * so a focused view is a pure text operation: keep the labelled line and the
7
+ * block indented beneath it.
8
+ */
9
+ const LABEL_PATTERN = /^(\s*)([^:]{1,60}):(.*)$/u;
10
+ function indentWidth(line) {
11
+ return /^\s*/u.exec(line)?.[0].length ?? 0;
12
+ }
13
+ /**
14
+ * Returns only the labelled blocks whose label contains one of the keywords, or
15
+ * `undefined` when nothing matches so the caller can fall back to the full
16
+ * display.
17
+ */
18
+ export function focusDisplaySections(display, keywords) {
19
+ if (keywords.length === 0)
20
+ return undefined;
21
+ const lines = display.split('\n');
22
+ const kept = [];
23
+ for (let index = 0; index < lines.length; index += 1) {
24
+ const line = lines[index] ?? '';
25
+ const label = LABEL_PATTERN.exec(line)?.[2]?.toLowerCase();
26
+ if (label === undefined)
27
+ continue;
28
+ if (!keywords.some((keyword) => label.includes(keyword)))
29
+ continue;
30
+ kept.push(line.trimEnd());
31
+ const baseIndent = indentWidth(line);
32
+ for (let next = index + 1; next < lines.length; next += 1) {
33
+ const child = lines[next] ?? '';
34
+ if (child.trim() === '')
35
+ break;
36
+ if (indentWidth(child) <= baseIndent)
37
+ break;
38
+ kept.push(child.trimEnd());
39
+ index = next;
40
+ }
41
+ }
42
+ return kept.length === 0 ? undefined : kept.join('\n');
43
+ }
44
+ //# sourceMappingURL=section.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section.js","sourceRoot":"","sources":["../../src/output/section.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,aAAa,GAAG,2BAA2B,CAAC;AAElD,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAe,EACf,QAA2B;IAE3B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;QAC3D,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAClC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAAE,SAAS;QAEnE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1B,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACrC,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;YAC1D,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAChC,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;gBAAE,MAAM;YAC/B,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,UAAU;gBAAE,MAAM;YAC5C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3B,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzD,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { OutputStream } from './writer.js';
2
+ /**
3
+ * Transient "the assistant is working" indicator.
4
+ *
5
+ * It is a status channel, not output: frames are written to stderr so stdout
6
+ * stays a clean, pipeable stream, nothing is emitted at all when the stream is
7
+ * not a TTY (CI, pipes, tests), and the indicator is always stopped and cleared
8
+ * before any rendered output is written.
9
+ */
10
+ export interface StatusIndicator {
11
+ /** Show (or relabel) the working indicator. */
12
+ start(label: string): void;
13
+ /** Erase the indicator. Safe to call when nothing is showing. */
14
+ stop(): void;
15
+ }
16
+ export declare const NOOP_STATUS_INDICATOR: StatusIndicator;
17
+ export type StatusIndicatorOptions = {
18
+ stream: OutputStream;
19
+ enabled: boolean;
20
+ unicode: boolean;
21
+ color: boolean;
22
+ };
23
+ export declare function createStatusIndicator(options: StatusIndicatorOptions): StatusIndicator;
24
+ //# sourceMappingURL=spinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/output/spinner.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B,+CAA+C;IAC/C,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,iEAAiE;IACjE,IAAI,IAAI,IAAI,CAAC;CACd;AAED,eAAO,MAAM,qBAAqB,EAAE,eAGnC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,eAAe,CAwBtF"}