@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.
- package/LICENSE +202 -0
- package/NOTICE +2 -0
- package/README.md +71 -0
- package/dist/actions/configured-runs.d.ts +25 -0
- package/dist/actions/configured-runs.d.ts.map +1 -0
- package/dist/actions/configured-runs.js +35 -0
- package/dist/actions/configured-runs.js.map +1 -0
- package/dist/actions/context.d.ts +5 -0
- package/dist/actions/context.d.ts.map +1 -0
- package/dist/actions/context.js +2 -0
- package/dist/actions/context.js.map +1 -0
- package/dist/actions/doctor.d.ts +46 -0
- package/dist/actions/doctor.d.ts.map +1 -0
- package/dist/actions/doctor.js +130 -0
- package/dist/actions/doctor.js.map +1 -0
- package/dist/actions/evaluations.d.ts +87 -0
- package/dist/actions/evaluations.d.ts.map +1 -0
- package/dist/actions/evaluations.js +307 -0
- package/dist/actions/evaluations.js.map +1 -0
- package/dist/actions/gate.d.ts +63 -0
- package/dist/actions/gate.d.ts.map +1 -0
- package/dist/actions/gate.js +272 -0
- package/dist/actions/gate.js.map +1 -0
- package/dist/actions/identity.d.ts +4 -0
- package/dist/actions/identity.d.ts.map +1 -0
- package/dist/actions/identity.js +4 -0
- package/dist/actions/identity.js.map +1 -0
- package/dist/actions/models.d.ts +4 -0
- package/dist/actions/models.d.ts.map +1 -0
- package/dist/actions/models.js +4 -0
- package/dist/actions/models.js.map +1 -0
- package/dist/actions/quality-standards.d.ts +30 -0
- package/dist/actions/quality-standards.d.ts.map +1 -0
- package/dist/actions/quality-standards.js +86 -0
- package/dist/actions/quality-standards.js.map +1 -0
- package/dist/actions/results.d.ts +12 -0
- package/dist/actions/results.d.ts.map +1 -0
- package/dist/actions/results.js +65 -0
- package/dist/actions/results.js.map +1 -0
- package/dist/actions/runs.d.ts +22 -0
- package/dist/actions/runs.d.ts.map +1 -0
- package/dist/actions/runs.js +59 -0
- package/dist/actions/runs.js.map +1 -0
- package/dist/actions/suite-gate.d.ts +24 -0
- package/dist/actions/suite-gate.d.ts.map +1 -0
- package/dist/actions/suite-gate.js +40 -0
- package/dist/actions/suite-gate.js.map +1 -0
- package/dist/actions/suite.d.ts +49 -0
- package/dist/actions/suite.d.ts.map +1 -0
- package/dist/actions/suite.js +68 -0
- package/dist/actions/suite.js.map +1 -0
- package/dist/actions/validation.d.ts +3 -0
- package/dist/actions/validation.d.ts.map +1 -0
- package/dist/actions/validation.js +26 -0
- package/dist/actions/validation.js.map +1 -0
- package/dist/actions/workspaces.d.ts +13 -0
- package/dist/actions/workspaces.d.ts.map +1 -0
- package/dist/actions/workspaces.js +18 -0
- package/dist/actions/workspaces.js.map +1 -0
- package/dist/api/api.d.ts +237 -0
- package/dist/api/api.d.ts.map +1 -0
- package/dist/api/api.js +396 -0
- package/dist/api/api.js.map +1 -0
- package/dist/api/client.d.ts +38 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +295 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/endpoints.d.ts +31 -0
- package/dist/api/endpoints.d.ts.map +1 -0
- package/dist/api/endpoints.js +32 -0
- package/dist/api/endpoints.js.map +1 -0
- package/dist/api/errors.d.ts +22 -0
- package/dist/api/errors.d.ts.map +1 -0
- package/dist/api/errors.js +84 -0
- package/dist/api/errors.js.map +1 -0
- package/dist/api/schemas.d.ts +169 -0
- package/dist/api/schemas.d.ts.map +1 -0
- package/dist/api/schemas.js +194 -0
- package/dist/api/schemas.js.map +1 -0
- package/dist/auth/credential-store.d.ts +9 -0
- package/dist/auth/credential-store.d.ts.map +1 -0
- package/dist/auth/credential-store.js +2 -0
- package/dist/auth/credential-store.js.map +1 -0
- package/dist/auth/credentials.d.ts +27 -0
- package/dist/auth/credentials.d.ts.map +1 -0
- package/dist/auth/credentials.js +81 -0
- package/dist/auth/credentials.js.map +1 -0
- package/dist/auth/keyring-store.d.ts +9 -0
- package/dist/auth/keyring-store.d.ts.map +1 -0
- package/dist/auth/keyring-store.js +57 -0
- package/dist/auth/keyring-store.js.map +1 -0
- package/dist/auth/login.d.ts +28 -0
- package/dist/auth/login.d.ts.map +1 -0
- package/dist/auth/login.js +27 -0
- package/dist/auth/login.js.map +1 -0
- package/dist/auth/password-prompt.d.ts +5 -0
- package/dist/auth/password-prompt.d.ts.map +1 -0
- package/dist/auth/password-prompt.js +10 -0
- package/dist/auth/password-prompt.js.map +1 -0
- package/dist/auth/redact.d.ts +3 -0
- package/dist/auth/redact.d.ts.map +1 -0
- package/dist/auth/redact.js +69 -0
- package/dist/auth/redact.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +4 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/executor.d.ts +36 -0
- package/dist/commands/executor.d.ts.map +1 -0
- package/dist/commands/executor.js +1218 -0
- package/dist/commands/executor.js.map +1 -0
- package/dist/commands/program.d.ts +21 -0
- package/dist/commands/program.d.ts.map +1 -0
- package/dist/commands/program.js +588 -0
- package/dist/commands/program.js.map +1 -0
- package/dist/commands/types.d.ts +139 -0
- package/dist/commands/types.d.ts.map +1 -0
- package/dist/commands/types.js +2 -0
- package/dist/commands/types.js.map +1 -0
- package/dist/config.d.ts +12 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +57 -0
- package/dist/config.js.map +1 -0
- package/dist/configured-run/file-inputs.d.ts +8 -0
- package/dist/configured-run/file-inputs.d.ts.map +1 -0
- package/dist/configured-run/file-inputs.js +160 -0
- package/dist/configured-run/file-inputs.js.map +1 -0
- package/dist/configured-run/validation.d.ts +103 -0
- package/dist/configured-run/validation.d.ts.map +1 -0
- package/dist/configured-run/validation.js +327 -0
- package/dist/configured-run/validation.js.map +1 -0
- package/dist/domain/common.d.ts +6 -0
- package/dist/domain/common.d.ts.map +1 -0
- package/dist/domain/common.js +10 -0
- package/dist/domain/common.js.map +1 -0
- package/dist/domain/types.d.ts +117 -0
- package/dist/domain/types.d.ts.map +1 -0
- package/dist/domain/types.js +2 -0
- package/dist/domain/types.js.map +1 -0
- package/dist/errors/autoeval-error.d.ts +13 -0
- package/dist/errors/autoeval-error.d.ts.map +1 -0
- package/dist/errors/autoeval-error.js +36 -0
- package/dist/errors/autoeval-error.js.map +1 -0
- package/dist/errors/hints.d.ts +3 -0
- package/dist/errors/hints.d.ts.map +1 -0
- package/dist/errors/hints.js +43 -0
- package/dist/errors/hints.js.map +1 -0
- package/dist/gate/decision.d.ts +97 -0
- package/dist/gate/decision.d.ts.map +1 -0
- package/dist/gate/decision.js +436 -0
- package/dist/gate/decision.js.map +1 -0
- package/dist/gate/policy.d.ts +31 -0
- package/dist/gate/policy.d.ts.map +1 -0
- package/dist/gate/policy.js +26 -0
- package/dist/gate/policy.js.map +1 -0
- package/dist/guide/eval-creation-backend.d.ts +20 -0
- package/dist/guide/eval-creation-backend.d.ts.map +1 -0
- package/dist/guide/eval-creation-backend.js +16 -0
- package/dist/guide/eval-creation-backend.js.map +1 -0
- package/dist/guide/eval-guide.d.ts +24 -0
- package/dist/guide/eval-guide.d.ts.map +1 -0
- package/dist/guide/eval-guide.js +219 -0
- package/dist/guide/eval-guide.js.map +1 -0
- package/dist/mcp/context.d.ts +21 -0
- package/dist/mcp/context.d.ts.map +1 -0
- package/dist/mcp/context.js +19 -0
- package/dist/mcp/context.js.map +1 -0
- package/dist/mcp/schemas.d.ts +206 -0
- package/dist/mcp/schemas.d.ts.map +1 -0
- package/dist/mcp/schemas.js +80 -0
- package/dist/mcp/schemas.js.map +1 -0
- package/dist/mcp/server.d.ts +5 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +10 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +42 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +287 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/mcp.d.ts +3 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +32 -0
- package/dist/mcp.js.map +1 -0
- package/dist/output/big-digits.d.ts +7 -0
- package/dist/output/big-digits.d.ts.map +1 -0
- package/dist/output/big-digits.js +43 -0
- package/dist/output/big-digits.js.map +1 -0
- package/dist/output/clipboard.d.ts +29 -0
- package/dist/output/clipboard.d.ts.map +1 -0
- package/dist/output/clipboard.js +82 -0
- package/dist/output/clipboard.js.map +1 -0
- package/dist/output/colors.d.ts +21 -0
- package/dist/output/colors.d.ts.map +1 -0
- package/dist/output/colors.js +21 -0
- package/dist/output/colors.js.map +1 -0
- package/dist/output/digest.d.ts +165 -0
- package/dist/output/digest.d.ts.map +1 -0
- package/dist/output/digest.js +771 -0
- package/dist/output/digest.js.map +1 -0
- package/dist/output/human.d.ts +95 -0
- package/dist/output/human.d.ts.map +1 -0
- package/dist/output/human.js +643 -0
- package/dist/output/human.js.map +1 -0
- package/dist/output/json.d.ts +2 -0
- package/dist/output/json.d.ts.map +1 -0
- package/dist/output/json.js +5 -0
- package/dist/output/json.js.map +1 -0
- package/dist/output/layout.d.ts +18 -0
- package/dist/output/layout.d.ts.map +1 -0
- package/dist/output/layout.js +64 -0
- package/dist/output/layout.js.map +1 -0
- package/dist/output/markdown.d.ts +16 -0
- package/dist/output/markdown.d.ts.map +1 -0
- package/dist/output/markdown.js +38 -0
- package/dist/output/markdown.js.map +1 -0
- package/dist/output/progress.d.ts +29 -0
- package/dist/output/progress.d.ts.map +1 -0
- package/dist/output/progress.js +136 -0
- package/dist/output/progress.js.map +1 -0
- package/dist/output/safe-text.d.ts +11 -0
- package/dist/output/safe-text.d.ts.map +1 -0
- package/dist/output/safe-text.js +44 -0
- package/dist/output/safe-text.js.map +1 -0
- package/dist/output/scorecard.d.ts +23 -0
- package/dist/output/scorecard.d.ts.map +1 -0
- package/dist/output/scorecard.js +506 -0
- package/dist/output/scorecard.js.map +1 -0
- package/dist/output/section.d.ts +15 -0
- package/dist/output/section.d.ts.map +1 -0
- package/dist/output/section.js +44 -0
- package/dist/output/section.js.map +1 -0
- package/dist/output/spinner.d.ts +24 -0
- package/dist/output/spinner.d.ts.map +1 -0
- package/dist/output/spinner.js +34 -0
- package/dist/output/spinner.js.map +1 -0
- package/dist/output/splash.d.ts +37 -0
- package/dist/output/splash.d.ts.map +1 -0
- package/dist/output/splash.js +169 -0
- package/dist/output/splash.js.map +1 -0
- package/dist/output/table.d.ts +33 -0
- package/dist/output/table.d.ts.map +1 -0
- package/dist/output/table.js +105 -0
- package/dist/output/table.js.map +1 -0
- package/dist/output/trend.d.ts +19 -0
- package/dist/output/trend.d.ts.map +1 -0
- package/dist/output/trend.js +38 -0
- package/dist/output/trend.js.map +1 -0
- package/dist/output/writer.d.ts +14 -0
- package/dist/output/writer.d.ts.map +1 -0
- package/dist/output/writer.js +33 -0
- package/dist/output/writer.js.map +1 -0
- package/dist/polling/clock.d.ts +9 -0
- package/dist/polling/clock.d.ts.map +1 -0
- package/dist/polling/clock.js +23 -0
- package/dist/polling/clock.js.map +1 -0
- package/dist/polling/wait-for-result.d.ts +16 -0
- package/dist/polling/wait-for-result.d.ts.map +1 -0
- package/dist/polling/wait-for-result.js +29 -0
- package/dist/polling/wait-for-result.js.map +1 -0
- package/dist/polling/wait-for-run.d.ts +14 -0
- package/dist/polling/wait-for-run.d.ts.map +1 -0
- package/dist/polling/wait-for-run.js +36 -0
- package/dist/polling/wait-for-run.js.map +1 -0
- package/dist/quickstart/prompt.d.ts +18 -0
- package/dist/quickstart/prompt.d.ts.map +1 -0
- package/dist/quickstart/prompt.js +37 -0
- package/dist/quickstart/prompt.js.map +1 -0
- package/dist/quickstart/sample.d.ts +28 -0
- package/dist/quickstart/sample.d.ts.map +1 -0
- package/dist/quickstart/sample.js +235 -0
- package/dist/quickstart/sample.js.map +1 -0
- package/dist/quickstart/selection.d.ts +53 -0
- package/dist/quickstart/selection.d.ts.map +1 -0
- package/dist/quickstart/selection.js +97 -0
- package/dist/quickstart/selection.js.map +1 -0
- package/dist/run.d.ts +28 -0
- package/dist/run.d.ts.map +1 -0
- package/dist/run.js +134 -0
- package/dist/run.js.map +1 -0
- package/dist/runtime/action-context.d.ts +19 -0
- package/dist/runtime/action-context.d.ts.map +1 -0
- package/dist/runtime/action-context.js +40 -0
- package/dist/runtime/action-context.js.map +1 -0
- package/dist/suite/execution.d.ts +46 -0
- package/dist/suite/execution.d.ts.map +1 -0
- package/dist/suite/execution.js +97 -0
- package/dist/suite/execution.js.map +1 -0
- package/dist/suite/manifest.d.ts +16 -0
- package/dist/suite/manifest.d.ts.map +1 -0
- package/dist/suite/manifest.js +92 -0
- package/dist/suite/manifest.js.map +1 -0
- package/dist/suite/reporting.d.ts +35 -0
- package/dist/suite/reporting.d.ts.map +1 -0
- package/dist/suite/reporting.js +131 -0
- package/dist/suite/reporting.js.map +1 -0
- package/dist/trace/deepseek-harness.d.ts +31 -0
- package/dist/trace/deepseek-harness.d.ts.map +1 -0
- package/dist/trace/deepseek-harness.js +412 -0
- package/dist/trace/deepseek-harness.js.map +1 -0
- package/dist/trace/import.d.ts +9 -0
- package/dist/trace/import.d.ts.map +1 -0
- package/dist/trace/import.js +45 -0
- package/dist/trace/import.js.map +1 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +3 -0
- package/dist/version.js.map +1 -0
- 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"}
|