@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,34 @@
|
|
|
1
|
+
import ora, {} from 'ora';
|
|
2
|
+
import { paint } from './colors.js';
|
|
3
|
+
import { safeTerminalText } from './safe-text.js';
|
|
4
|
+
export const NOOP_STATUS_INDICATOR = {
|
|
5
|
+
start: () => undefined,
|
|
6
|
+
stop: () => undefined,
|
|
7
|
+
};
|
|
8
|
+
export function createStatusIndicator(options) {
|
|
9
|
+
if (!options.enabled)
|
|
10
|
+
return NOOP_STATUS_INDICATOR;
|
|
11
|
+
const spinner = ora({
|
|
12
|
+
stream: options.stream,
|
|
13
|
+
spinner: options.unicode ? 'dots' : 'line',
|
|
14
|
+
isEnabled: true,
|
|
15
|
+
// Ora otherwise pauses stdin, which conflicts with the readline composer.
|
|
16
|
+
discardStdin: false,
|
|
17
|
+
...(options.color ? { color: 'cyan' } : {}),
|
|
18
|
+
});
|
|
19
|
+
return {
|
|
20
|
+
start: (label) => {
|
|
21
|
+
const text = safeTerminalText(label);
|
|
22
|
+
// The glyph and the label share one cyan voice; chalk is a no-op for
|
|
23
|
+
// pipes and NO_COLOR, so non-TTY callers keep plain text.
|
|
24
|
+
spinner.text = options.color ? paint.input(text) : text;
|
|
25
|
+
if (!spinner.isSpinning)
|
|
26
|
+
spinner.start();
|
|
27
|
+
},
|
|
28
|
+
stop: () => {
|
|
29
|
+
if (spinner.isSpinning)
|
|
30
|
+
spinner.stop();
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=spinner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/output/spinner.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,EAAE,EAAY,MAAM,KAAK,CAAC;AAEpC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAkBlD,MAAM,CAAC,MAAM,qBAAqB,GAAoB;IACpD,KAAK,EAAE,GAAG,EAAE,CAAC,SAAS;IACtB,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS;CACtB,CAAC;AASF,MAAM,UAAU,qBAAqB,CAAC,OAA+B;IACnE,IAAI,CAAC,OAAO,CAAC,OAAO;QAAE,OAAO,qBAAqB,CAAC;IAEnD,MAAM,OAAO,GAAQ,GAAG,CAAC;QACvB,MAAM,EAAE,OAAO,CAAC,MAAuC;QACvD,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;QAC1C,SAAS,EAAE,IAAI;QACf,0EAA0E;QAC1E,YAAY,EAAE,KAAK;QACnB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACrD,CAAC,CAAC;IAEH,OAAO;QACL,KAAK,EAAE,CAAC,KAAa,EAAQ,EAAE;YAC7B,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACrC,qEAAqE;YACrE,0DAA0D;YAC1D,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACxD,IAAI,CAAC,OAAO,CAAC,UAAU;gBAAE,OAAO,CAAC,KAAK,EAAE,CAAC;QAC3C,CAAC;QACD,IAAI,EAAE,GAAS,EAAE;YACf,IAAI,OAAO,CAAC,UAAU;gBAAE,OAAO,CAAC,IAAI,EAAE,CAAC;QACzC,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/** Terminal color capability, resolved from the environment before rendering. */
|
|
2
|
+
export type ColorMode = 'none' | 'basic' | 'truecolor';
|
|
3
|
+
export type SplashContext = {
|
|
4
|
+
version: string;
|
|
5
|
+
/** Authenticated principal, when already known without a network call. */
|
|
6
|
+
identity?: string;
|
|
7
|
+
/** Active workspace name, when already known without a network call. */
|
|
8
|
+
workspace?: string;
|
|
9
|
+
/** False when no CLI key resolved; the splash then points at `autoeval login`. */
|
|
10
|
+
signedIn: boolean;
|
|
11
|
+
colorMode: ColorMode;
|
|
12
|
+
unicode: boolean;
|
|
13
|
+
boltSize?: BoltSize;
|
|
14
|
+
};
|
|
15
|
+
export type SplashVisibilityInput = {
|
|
16
|
+
/** True when the invocation is an interactive session. */
|
|
17
|
+
interactive: boolean;
|
|
18
|
+
json: boolean;
|
|
19
|
+
stdinIsTTY: boolean;
|
|
20
|
+
stdoutIsTTY: boolean;
|
|
21
|
+
stderrIsTTY: boolean;
|
|
22
|
+
environment: Readonly<Record<string, string | undefined>>;
|
|
23
|
+
};
|
|
24
|
+
type BoltSize = 'current' | 'small';
|
|
25
|
+
/** Decide whether a human is watching an interactive session that may receive a splash. */
|
|
26
|
+
export declare function shouldShowSplash(input: SplashVisibilityInput): boolean;
|
|
27
|
+
/** Resolve color support from the environment; `NO_COLOR` and dumb terminals disable it. */
|
|
28
|
+
export declare function resolveColorMode(environment: Readonly<Record<string, string | undefined>>): ColorMode;
|
|
29
|
+
/** Unicode is only assumed when the locale advertises UTF-8 on a capable terminal. */
|
|
30
|
+
export declare function supportsUnicode(environment: Readonly<Record<string, string | undefined>>): boolean;
|
|
31
|
+
export declare function resolveBoltSize(environment: Readonly<Record<string, string | undefined>>, unicode: boolean): BoltSize;
|
|
32
|
+
/** Compact next-step card printed for a bare interactive invocation. */
|
|
33
|
+
export declare function renderWelcome(context: SplashContext): string;
|
|
34
|
+
/** Render the interactive welcome screen. Pure: all capabilities arrive through `context`. */
|
|
35
|
+
export declare function renderSplash(context: SplashContext): string;
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=splash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"splash.d.ts","sourceRoot":"","sources":["../../src/output/splash.ts"],"names":[],"mappings":"AAEA,iFAAiF;AACjF,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;AAEvD,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,0DAA0D;IAC1D,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;CAC3D,CAAC;AAoCF,KAAK,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;AAiCpC,2FAA2F;AAC3F,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAStE;AAED,4FAA4F;AAC5F,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GACxD,SAAS,CAOX;AAED,sFAAsF;AACtF,wBAAgB,eAAe,CAC7B,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GACxD,OAAO,CAMT;AAED,wBAAgB,eAAe,CAC7B,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EACzD,OAAO,EAAE,OAAO,GACf,QAAQ,CAKV;AAwFD,wEAAwE;AACxE,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAmB5D;AAED,8FAA8F;AAC9F,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAU3D"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { safeTerminalText } from './safe-text.js';
|
|
2
|
+
/** Brand palette: teal, plum, olive, charcoal. */
|
|
3
|
+
const PALETTE = {
|
|
4
|
+
teal: { hex: '#136D8C', basic: 36 },
|
|
5
|
+
tealBright: { hex: '#3EC8E8', basic: 96 },
|
|
6
|
+
tealMid: { hex: '#2DA5C4', basic: 36 },
|
|
7
|
+
tealDim: { hex: '#1A8AAF', basic: 36 },
|
|
8
|
+
plum: { hex: '#D45FB5', basic: 35 },
|
|
9
|
+
olive: { hex: '#C8D24A', basic: 33 },
|
|
10
|
+
gray: { hex: '#8A9BA3', basic: 37 },
|
|
11
|
+
charcoal: { hex: '#6B8A95', basic: 90 },
|
|
12
|
+
white: { hex: '#F5F5F5', basic: 37 },
|
|
13
|
+
faint: { hex: '#506A74', basic: 90 },
|
|
14
|
+
};
|
|
15
|
+
const WORDMARK_UNICODE = [
|
|
16
|
+
' █████╗ ██╗ ██╗████████╗ ██████╗ ███████╗██╗ ██╗ █████╗ ██╗ ',
|
|
17
|
+
'██╔══██╗██║ ██║╚══██╔══╝██╔═══██╗██╔════╝██║ ██║██╔══██╗██║ ',
|
|
18
|
+
'███████║██║ ██║ ██║ ██║ ██║█████╗ ██║ ██║███████║██║ ',
|
|
19
|
+
'██╔══██║██║ ██║ ██║ ██║ ██║██╔══╝ ╚██╗ ██╔╝██╔══██║██║ ',
|
|
20
|
+
'██║ ██║╚██████╔╝ ██║ ╚██████╔╝███████╗ ╚████╔╝ ██║ ██║███████╗',
|
|
21
|
+
'╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═════╝ ╚══════╝ ╚═══╝ ╚═╝ ╚═╝╚══════╝',
|
|
22
|
+
];
|
|
23
|
+
const WORDMARK_ASCII = [
|
|
24
|
+
String.raw ` _ _ _ _____ ___ _____ _ _ _ _`,
|
|
25
|
+
String.raw ` /_\| | | |_ _/ _ \| __\ \ / / /_\ | |`,
|
|
26
|
+
String.raw `/ _ \ |_| | | || (_) | _| \ V / / _ \| |__`,
|
|
27
|
+
String.raw `/_/ \_\___/ |_| \___/|___| \_/ /_/ \_\____|`,
|
|
28
|
+
];
|
|
29
|
+
const FIGLET_WIDTH = 70;
|
|
30
|
+
const BOLT_CURRENT = [' ██', ' ██', '██████', ' ██', ' ██', ' ██'];
|
|
31
|
+
const BOLT_SMALL = [' █', '█', '███', ' █', ' █', '█'];
|
|
32
|
+
const BOLT_ASCII = [' |', ' |', '|---', ' |', ' |', ' |'];
|
|
33
|
+
function paint(text, color, mode, bold = false) {
|
|
34
|
+
if (mode === 'none' || text === '')
|
|
35
|
+
return text;
|
|
36
|
+
const swatch = PALETTE[color];
|
|
37
|
+
const [red, green, blue] = hexToRgb(swatch.hex);
|
|
38
|
+
const colorCode = mode === 'truecolor' ? `\u001B[38;2;${red};${green};${blue}m` : `\u001B[${swatch.basic}m`;
|
|
39
|
+
const boldCode = bold ? '\u001B[1m' : '';
|
|
40
|
+
return `${boldCode}${colorCode}${text}\u001B[39m${bold ? '\u001B[22m' : ''}`;
|
|
41
|
+
}
|
|
42
|
+
function hexToRgb(hex) {
|
|
43
|
+
const normalized = hex.replace('#', '');
|
|
44
|
+
if (!/^[0-9A-Fa-f]{6}$/u.test(normalized)) {
|
|
45
|
+
throw new Error(`Invalid hex color: ${hex}`);
|
|
46
|
+
}
|
|
47
|
+
const red = Number.parseInt(normalized.slice(0, 2), 16);
|
|
48
|
+
const green = Number.parseInt(normalized.slice(2, 4), 16);
|
|
49
|
+
const blue = Number.parseInt(normalized.slice(4, 6), 16);
|
|
50
|
+
return [red, green, blue];
|
|
51
|
+
}
|
|
52
|
+
/** Decide whether a human is watching an interactive session that may receive a splash. */
|
|
53
|
+
export function shouldShowSplash(input) {
|
|
54
|
+
if (!input.interactive || input.json)
|
|
55
|
+
return false;
|
|
56
|
+
if (!input.stdinIsTTY || !input.stdoutIsTTY || !input.stderrIsTTY)
|
|
57
|
+
return false;
|
|
58
|
+
const environment = input.environment;
|
|
59
|
+
for (const name of ['CI', 'NO_SPLASH', 'AUTOEVAL_NO_SPLASH']) {
|
|
60
|
+
const value = environment[name];
|
|
61
|
+
if (value !== undefined && value !== '' && value !== '0' && value !== 'false')
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
/** Resolve color support from the environment; `NO_COLOR` and dumb terminals disable it. */
|
|
67
|
+
export function resolveColorMode(environment) {
|
|
68
|
+
if (environment.NO_COLOR !== undefined && environment.NO_COLOR !== '')
|
|
69
|
+
return 'none';
|
|
70
|
+
const term = environment.TERM ?? '';
|
|
71
|
+
if (term === '' || term === 'dumb')
|
|
72
|
+
return 'none';
|
|
73
|
+
const colorterm = environment.COLORTERM ?? '';
|
|
74
|
+
if (colorterm.includes('truecolor') || colorterm.includes('24bit'))
|
|
75
|
+
return 'truecolor';
|
|
76
|
+
return 'basic';
|
|
77
|
+
}
|
|
78
|
+
/** Unicode is only assumed when the locale advertises UTF-8 on a capable terminal. */
|
|
79
|
+
export function supportsUnicode(environment) {
|
|
80
|
+
if ((environment.TERM ?? '') === 'dumb')
|
|
81
|
+
return false;
|
|
82
|
+
const locale = `${environment.LC_ALL ?? ''} ${environment.LC_CTYPE ?? ''} ${environment.LANG ?? ''}`.toUpperCase();
|
|
83
|
+
return locale.includes('UTF-8') || locale.includes('UTF8');
|
|
84
|
+
}
|
|
85
|
+
export function resolveBoltSize(environment, unicode) {
|
|
86
|
+
if (!unicode)
|
|
87
|
+
return 'small';
|
|
88
|
+
const raw = (environment.AUTOEVAL_SPLASH_BOLT_SIZE ?? '').trim().toLowerCase();
|
|
89
|
+
if (raw === 'small')
|
|
90
|
+
return 'small';
|
|
91
|
+
return 'current';
|
|
92
|
+
}
|
|
93
|
+
function renderWordmark(context, version) {
|
|
94
|
+
const lines = context.unicode ? WORDMARK_UNICODE : WORDMARK_ASCII;
|
|
95
|
+
return lines.map((line, index) => {
|
|
96
|
+
const padded = line.padEnd(FIGLET_WIDTH);
|
|
97
|
+
if (index === 0)
|
|
98
|
+
return paint(padded, 'tealBright', context.colorMode);
|
|
99
|
+
if (index === 1) {
|
|
100
|
+
return `${paint(padded, 'tealBright', context.colorMode)} ${paint(`v${version}`, 'gray', context.colorMode)}`;
|
|
101
|
+
}
|
|
102
|
+
if (index <= 3)
|
|
103
|
+
return paint(padded, 'tealMid', context.colorMode);
|
|
104
|
+
return paint(padded, 'tealDim', context.colorMode);
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
function renderBoltBlock(context, version) {
|
|
108
|
+
const ruleChar = context.unicode ? '─' : '-';
|
|
109
|
+
const marker = context.unicode ? '▸' : '>';
|
|
110
|
+
const divider = context.unicode ? '·' : '-';
|
|
111
|
+
const boltSize = context.boltSize ?? (context.unicode ? 'current' : 'small');
|
|
112
|
+
const bolt = context.unicode ? (boltSize === 'small' ? BOLT_SMALL : BOLT_CURRENT) : BOLT_ASCII;
|
|
113
|
+
const right = [
|
|
114
|
+
`${paint(marker, 'olive', context.colorMode, true)} ${paint('Autoeval', 'white', context.colorMode, true)} ${paint(`${divider} v${version}`, 'gray', context.colorMode, true)}`,
|
|
115
|
+
paint('intelligent evaluation engine', 'faint', context.colorMode, true),
|
|
116
|
+
paint(ruleChar.repeat(28), 'faint', context.colorMode, true),
|
|
117
|
+
`${paint('Type', 'faint', context.colorMode, true)} ${paint('--help', 'olive', context.colorMode, true)} ${paint('to get started', 'faint', context.colorMode, true)}`,
|
|
118
|
+
`${paint('powered by', 'faint', context.colorMode, true)} ${paint('plumloom', 'plum', context.colorMode, true)}`,
|
|
119
|
+
];
|
|
120
|
+
const BOLT_COLUMN_WIDTH = 14;
|
|
121
|
+
return bolt
|
|
122
|
+
.map((segment, index) => {
|
|
123
|
+
const rightText = right[index] ?? '';
|
|
124
|
+
if (!rightText) {
|
|
125
|
+
return paint(segment, 'tealDim', context.colorMode);
|
|
126
|
+
}
|
|
127
|
+
// IMPORTANT:
|
|
128
|
+
// Pad the RAW string before applying ANSI color.
|
|
129
|
+
// Otherwise ANSI escape codes affect the calculated width.
|
|
130
|
+
// const left = segment.padEnd(BOLT_COLUMN_WIDTH, ' ');
|
|
131
|
+
return `${paint(segment, 'tealDim', context.colorMode)}${' '.repeat(BOLT_COLUMN_WIDTH - segment.length)}${rightText}`;
|
|
132
|
+
})
|
|
133
|
+
.join('\n');
|
|
134
|
+
}
|
|
135
|
+
const WELCOME_INDENT = ' '.repeat(14);
|
|
136
|
+
const WELCOME_COMMAND_WIDTH = 24;
|
|
137
|
+
function welcomeRow(command, description, mode) {
|
|
138
|
+
const padding = ' '.repeat(Math.max(1, WELCOME_COMMAND_WIDTH - command.length));
|
|
139
|
+
return `${WELCOME_INDENT}${paint(command, 'olive', mode)}${padding}${paint(description, 'faint', mode)}`;
|
|
140
|
+
}
|
|
141
|
+
/** Compact next-step card printed for a bare interactive invocation. */
|
|
142
|
+
export function renderWelcome(context) {
|
|
143
|
+
const mode = context.colorMode;
|
|
144
|
+
const lines = [];
|
|
145
|
+
if (context.signedIn) {
|
|
146
|
+
lines.push(`${WELCOME_INDENT}${paint('Signed in.', 'white', mode)}`);
|
|
147
|
+
lines.push('');
|
|
148
|
+
lines.push(welcomeRow('autoeval quickstart', 'run a sample evaluation', mode));
|
|
149
|
+
lines.push(welcomeRow('autoeval --help', 'see all commands', mode));
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
lines.push(`${WELCOME_INDENT}${paint('Not signed in.', 'white', mode)}`);
|
|
153
|
+
lines.push('');
|
|
154
|
+
lines.push(welcomeRow('autoeval login', 'sign in with your CLI key', mode));
|
|
155
|
+
lines.push(welcomeRow('autoeval quickstart', 'run a first evaluation end to end', mode));
|
|
156
|
+
lines.push('');
|
|
157
|
+
lines.push(welcomeRow('autoeval --help', 'see all commands', mode));
|
|
158
|
+
}
|
|
159
|
+
return `${lines.join('\n')}\n`;
|
|
160
|
+
}
|
|
161
|
+
/** Render the interactive welcome screen. Pure: all capabilities arrive through `context`. */
|
|
162
|
+
export function renderSplash(context) {
|
|
163
|
+
const version = safeTerminalText(context.version);
|
|
164
|
+
const wordmark = renderWordmark(context, version);
|
|
165
|
+
const boltBlock = renderBoltBlock(context, version);
|
|
166
|
+
const prompt = `${' '.repeat(14)}${paint('Run a command to evaluate with Autoeval.', 'charcoal', context.colorMode)}`;
|
|
167
|
+
return `${wordmark.join('\n')}\n\n${boltBlock}\n${prompt}\n\n`;
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=splash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"splash.js","sourceRoot":"","sources":["../../src/output/splash.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type SemanticTone } from './colors.js';
|
|
2
|
+
export type TableColumn = {
|
|
3
|
+
header: string;
|
|
4
|
+
/** Right-align the column values, for counts and numeric fields. */
|
|
5
|
+
align?: 'left' | 'right';
|
|
6
|
+
/** Keep the column at least this wide so later columns stay in a stable position. */
|
|
7
|
+
minWidth?: number;
|
|
8
|
+
/** Cap the column so one outlier cannot push later columns off screen. */
|
|
9
|
+
maxWidth?: number;
|
|
10
|
+
/**
|
|
11
|
+
* Never shrink or wrap this column. Used for UUID columns: an id must stay a
|
|
12
|
+
* single, complete, selectable token so it can be copied from the terminal.
|
|
13
|
+
*/
|
|
14
|
+
atomic?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Semantic colour for the column's values. Identifiers and metadata use
|
|
17
|
+
* `meta` so they recede; status columns colour per cell instead.
|
|
18
|
+
*/
|
|
19
|
+
tone?: SemanticTone;
|
|
20
|
+
/** Per-cell colour, used by status columns where the value decides the tone. */
|
|
21
|
+
toneOf?: (value: string) => SemanticTone | undefined;
|
|
22
|
+
};
|
|
23
|
+
export type TableOptions = {
|
|
24
|
+
/** Terminal columns available for the table; defaults to the current stdout width. */
|
|
25
|
+
width?: number;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Render an aligned text table. Values are sanitized for terminal output before
|
|
29
|
+
* measurement so that redaction cannot change column widths, and identifiers
|
|
30
|
+
* stay plain text so the terminal can select and copy them.
|
|
31
|
+
*/
|
|
32
|
+
export declare function formatTable(columns: readonly TableColumn[], rows: readonly string[][], options?: TableOptions): string;
|
|
33
|
+
//# sourceMappingURL=table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/output/table.ts"],"names":[],"mappings":"AAEA,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAGvD,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,qFAAqF;IACrF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,gFAAgF;IAChF,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,YAAY,GAAG,SAAS,CAAC;CACtD,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,sFAAsF;IACtF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAmEF;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,SAAS,WAAW,EAAE,EAC/B,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,EACzB,OAAO,GAAE,YAAiB,GACzB,MAAM,CAsDR"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import Table from 'cli-table3';
|
|
2
|
+
import { paint } from './colors.js';
|
|
3
|
+
import { safeTerminalText } from './safe-text.js';
|
|
4
|
+
const PADDING_RIGHT = 2;
|
|
5
|
+
const DEFAULT_WIDTH = 100;
|
|
6
|
+
const MIN_COLUMN_WIDTH = 8;
|
|
7
|
+
/** cli-table3 draws a full box by default; every border glyph is blanked here. */
|
|
8
|
+
const BORDERLESS = {
|
|
9
|
+
top: '',
|
|
10
|
+
'top-mid': '',
|
|
11
|
+
'top-left': '',
|
|
12
|
+
'top-right': '',
|
|
13
|
+
bottom: '',
|
|
14
|
+
'bottom-mid': '',
|
|
15
|
+
'bottom-left': '',
|
|
16
|
+
'bottom-right': '',
|
|
17
|
+
left: '',
|
|
18
|
+
'left-mid': '',
|
|
19
|
+
mid: '',
|
|
20
|
+
'mid-mid': '',
|
|
21
|
+
right: '',
|
|
22
|
+
'right-mid': '',
|
|
23
|
+
middle: '',
|
|
24
|
+
};
|
|
25
|
+
const ELLIPSIS = '…';
|
|
26
|
+
/** Values past `maxWidth` are truncated so one outlier cannot dominate. */
|
|
27
|
+
function truncate(value, maxWidth) {
|
|
28
|
+
if (maxWidth === undefined || value.length <= maxWidth)
|
|
29
|
+
return value;
|
|
30
|
+
if (maxWidth <= 1)
|
|
31
|
+
return ELLIPSIS.slice(0, maxWidth);
|
|
32
|
+
return `${value.slice(0, maxWidth - 1)}${ELLIPSIS}`;
|
|
33
|
+
}
|
|
34
|
+
function naturalWidth(column, values) {
|
|
35
|
+
const widest = Math.max(column.header.length, ...values.map((value) => value.length), 0);
|
|
36
|
+
return Math.max(widest, column.minWidth ?? 0);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Shrink the widest column (and then the next widest) until the table fits the
|
|
40
|
+
* terminal. cli-table3 wraps on word boundaries inside the resulting width, so
|
|
41
|
+
* a narrow terminal produces a readable stack instead of a broken grid.
|
|
42
|
+
*/
|
|
43
|
+
function fitWidths(widths, available, atomic, floors) {
|
|
44
|
+
const fitted = [...widths];
|
|
45
|
+
const overhead = fitted.length * PADDING_RIGHT;
|
|
46
|
+
let total = fitted.reduce((sum, value) => sum + value, 0) + overhead;
|
|
47
|
+
while (total > available) {
|
|
48
|
+
let widest = -1;
|
|
49
|
+
for (let index = 0; index < fitted.length; index += 1) {
|
|
50
|
+
if (atomic[index] === true)
|
|
51
|
+
continue;
|
|
52
|
+
if (widest === -1 || (fitted[index] ?? 0) > (fitted[widest] ?? 0))
|
|
53
|
+
widest = index;
|
|
54
|
+
}
|
|
55
|
+
if (widest === -1)
|
|
56
|
+
break;
|
|
57
|
+
if ((fitted[widest] ?? 0) <= Math.max(MIN_COLUMN_WIDTH, floors[widest] ?? 0))
|
|
58
|
+
break;
|
|
59
|
+
fitted[widest] = (fitted[widest] ?? 0) - 1;
|
|
60
|
+
total -= 1;
|
|
61
|
+
}
|
|
62
|
+
return fitted;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Render an aligned text table. Values are sanitized for terminal output before
|
|
66
|
+
* measurement so that redaction cannot change column widths, and identifiers
|
|
67
|
+
* stay plain text so the terminal can select and copy them.
|
|
68
|
+
*/
|
|
69
|
+
export function formatTable(columns, rows, options = {}) {
|
|
70
|
+
const safeRows = rows.map((row) => columns.map((column, index) => column.atomic === true
|
|
71
|
+
? safeTerminalText(row[index] ?? '')
|
|
72
|
+
: truncate(safeTerminalText(row[index] ?? ''), column.maxWidth)));
|
|
73
|
+
const available = options.width ?? process.stdout.columns ?? DEFAULT_WIDTH;
|
|
74
|
+
const widths = fitWidths(columns.map((column, index) => naturalWidth(column, safeRows.map((row) => row[index] ?? ''))), Math.max(available, MIN_COLUMN_WIDTH * columns.length), columns.map((column) => column.atomic === true), columns.map((column) => column.minWidth ?? 0));
|
|
75
|
+
const table = new Table({
|
|
76
|
+
head: columns.map((column) => paint.header(safeTerminalText(column.header))),
|
|
77
|
+
colWidths: widths.map((width) => width + PADDING_RIGHT),
|
|
78
|
+
colAligns: columns.map((column) => column.align ?? 'left'),
|
|
79
|
+
wordWrap: true,
|
|
80
|
+
wrapOnWordBoundary: true,
|
|
81
|
+
chars: { ...BORDERLESS },
|
|
82
|
+
style: {
|
|
83
|
+
'padding-left': 0,
|
|
84
|
+
'padding-right': PADDING_RIGHT,
|
|
85
|
+
head: [],
|
|
86
|
+
border: [],
|
|
87
|
+
compact: true,
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
// Colour is applied after measurement so redaction and wrapping stay
|
|
91
|
+
// width-accurate, and identifiers stay plain, selectable text.
|
|
92
|
+
for (const row of safeRows) {
|
|
93
|
+
table.push(row.map((value, index) => {
|
|
94
|
+
const column = columns[index];
|
|
95
|
+
const tone = column?.toneOf?.(value) ?? column?.tone;
|
|
96
|
+
return tone === undefined || value === '' ? value : paint[tone](value);
|
|
97
|
+
}));
|
|
98
|
+
}
|
|
99
|
+
return table
|
|
100
|
+
.toString()
|
|
101
|
+
.split('\n')
|
|
102
|
+
.map((line) => line.replace(/\s+$/u, ''))
|
|
103
|
+
.join('\n');
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/output/table.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Historical score trend rendering.
|
|
3
|
+
*
|
|
4
|
+
* A chart is only meaningful over a real series, so this is used exclusively
|
|
5
|
+
* for overall scores observed across runs of the same evaluation within the
|
|
6
|
+
* session. Nothing is interpolated or predicted: every plotted point is a score
|
|
7
|
+
* the backend actually returned.
|
|
8
|
+
*/
|
|
9
|
+
export type TrendPoint = {
|
|
10
|
+
/** Short label for the run the score came from. */
|
|
11
|
+
label: string;
|
|
12
|
+
score: number;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Returns an empty string when there is no series to plot, so callers can
|
|
16
|
+
* concatenate the result unconditionally.
|
|
17
|
+
*/
|
|
18
|
+
export declare function renderScoreTrend(points: readonly TrendPoint[], title?: string): string;
|
|
19
|
+
//# sourceMappingURL=trend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trend.d.ts","sourceRoot":"","sources":["../../src/output/trend.ts"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AAEH,MAAM,MAAM,UAAU,GAAG;IACvB,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAMF;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,EAAE,KAAK,SAAkB,GAAG,MAAM,CA2B/F"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { plot } from 'asciichart';
|
|
2
|
+
import { paint } from './colors.js';
|
|
3
|
+
import { safeTerminalText } from './safe-text.js';
|
|
4
|
+
const CHART_HEIGHT = 8;
|
|
5
|
+
const MIN_POINTS = 2;
|
|
6
|
+
const SCORE_MAX = 5;
|
|
7
|
+
/**
|
|
8
|
+
* Returns an empty string when there is no series to plot, so callers can
|
|
9
|
+
* concatenate the result unconditionally.
|
|
10
|
+
*/
|
|
11
|
+
export function renderScoreTrend(points, title = 'Overall score') {
|
|
12
|
+
if (points.length < MIN_POINTS)
|
|
13
|
+
return '';
|
|
14
|
+
const scores = points.map((point) => point.score);
|
|
15
|
+
const chart = plot(scores, {
|
|
16
|
+
height: CHART_HEIGHT,
|
|
17
|
+
min: 0,
|
|
18
|
+
max: SCORE_MAX,
|
|
19
|
+
format: (value) => paint.meta(value.toFixed(1).padStart(5)),
|
|
20
|
+
});
|
|
21
|
+
const first = points[0];
|
|
22
|
+
const last = points[points.length - 1];
|
|
23
|
+
const delta = last && first ? last.score - first.score : 0;
|
|
24
|
+
const rounded = Math.round(delta * 100) / 100;
|
|
25
|
+
const direction = rounded > 0
|
|
26
|
+
? paint.pass(`+${rounded}`)
|
|
27
|
+
: rounded < 0
|
|
28
|
+
? paint.fail(String(rounded))
|
|
29
|
+
: paint.meta('0');
|
|
30
|
+
return [
|
|
31
|
+
paint.header(`${safeTerminalText(title).toUpperCase()} OVER ${points.length} RUNS`),
|
|
32
|
+
chart,
|
|
33
|
+
`${paint.meta('Runs:')} ${points.map((point) => safeTerminalText(point.label)).join(paint.meta(' → '))}`,
|
|
34
|
+
`${paint.meta('Change:')} ${direction}`,
|
|
35
|
+
'',
|
|
36
|
+
].join('\n');
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=trend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trend.js","sourceRoot":"","sources":["../../src/output/trend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAiBlD,MAAM,YAAY,GAAG,CAAC,CAAC;AACvB,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,MAAM,SAAS,GAAG,CAAC,CAAC;AAEpB;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAA6B,EAAE,KAAK,GAAG,eAAe;IACrF,IAAI,MAAM,CAAC,MAAM,GAAG,UAAU;QAAE,OAAO,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;QACzB,MAAM,EAAE,YAAY;QACpB,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,SAAS;QACd,MAAM,EAAE,CAAC,KAAa,EAAU,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;KAC5E,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IAC9C,MAAM,SAAS,GACb,OAAO,GAAG,CAAC;QACT,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;QAC3B,CAAC,CAAC,OAAO,GAAG,CAAC;YACX,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAExB,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,SAAS,MAAM,CAAC,MAAM,OAAO,CAAC;QACnF,KAAK;QACL,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;QACxG,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,SAAS,EAAE;QACvC,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ApiDiagnostic } from '../api/client.js';
|
|
2
|
+
export interface OutputStream {
|
|
3
|
+
write(chunk: string): boolean;
|
|
4
|
+
isTTY?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare class OutputWriter {
|
|
7
|
+
#private;
|
|
8
|
+
constructor(stdout: OutputStream, stderr: OutputStream);
|
|
9
|
+
writeResult(input: unknown, human: string, isJson: boolean): void;
|
|
10
|
+
writeError(message: string, isJson: boolean, code?: string, hint?: string): void;
|
|
11
|
+
writeDiagnostic(diagnostic: ApiDiagnostic): void;
|
|
12
|
+
writeStructuredDiagnostic(diagnostic: unknown): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../src/output/writer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAItD,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,YAAY;;gBAIX,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY;IAKtD,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAIjE,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAchF,eAAe,CAAC,UAAU,EAAE,aAAa,GAAG,IAAI;IAIhD,yBAAyB,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;CAIrD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { redactUnknown } from '../auth/redact.js';
|
|
2
|
+
import { renderJson } from './json.js';
|
|
3
|
+
import { safeTerminalText } from './safe-text.js';
|
|
4
|
+
export class OutputWriter {
|
|
5
|
+
#stdout;
|
|
6
|
+
#stderr;
|
|
7
|
+
constructor(stdout, stderr) {
|
|
8
|
+
this.#stdout = stdout;
|
|
9
|
+
this.#stderr = stderr;
|
|
10
|
+
}
|
|
11
|
+
writeResult(input, human, isJson) {
|
|
12
|
+
this.#stdout.write(isJson ? renderJson(input) : human);
|
|
13
|
+
}
|
|
14
|
+
writeError(message, isJson, code, hint) {
|
|
15
|
+
const safeMessage = safeTerminalText(message);
|
|
16
|
+
const safeHint = hint === undefined ? undefined : safeTerminalText(hint);
|
|
17
|
+
if (isJson) {
|
|
18
|
+
this.#stderr.write(renderJson({
|
|
19
|
+
error: { message: safeMessage, code, ...(safeHint ? { hint: safeHint } : {}) },
|
|
20
|
+
}));
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
this.#stderr.write(`Error: ${safeMessage}\n${safeHint ? `Hint: ${safeHint}\n` : ''}`);
|
|
24
|
+
}
|
|
25
|
+
writeDiagnostic(diagnostic) {
|
|
26
|
+
this.writeStructuredDiagnostic(diagnostic);
|
|
27
|
+
}
|
|
28
|
+
writeStructuredDiagnostic(diagnostic) {
|
|
29
|
+
const line = `[debug] ${JSON.stringify(redactUnknown(diagnostic))}`;
|
|
30
|
+
this.#stderr.write(this.#stderr.isTTY === true ? `\u001B[2m${line}\u001B[22m\n` : `${line}\n`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/output/writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAOlD,MAAM,OAAO,YAAY;IACd,OAAO,CAAe;IACtB,OAAO,CAAe;IAE/B,YAAY,MAAoB,EAAE,MAAoB;QACpD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,WAAW,CAAC,KAAc,EAAE,KAAa,EAAE,MAAe;QACxD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACzD,CAAC;IAED,UAAU,CAAC,OAAe,EAAE,MAAe,EAAE,IAAa,EAAE,IAAa;QACvE,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACzE,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,OAAO,CAAC,KAAK,CAChB,UAAU,CAAC;gBACT,KAAK,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;aAC/E,CAAC,CACH,CAAC;YACF,OAAO;QACT,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,eAAe,CAAC,UAAyB;QACvC,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC;IAED,yBAAyB,CAAC,UAAmB;QAC3C,MAAM,IAAI,GAAG,WAAW,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACpE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,YAAY,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;IACjG,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface PollClock {
|
|
2
|
+
now(): number;
|
|
3
|
+
sleep(milliseconds: number, signal?: AbortSignal): Promise<void>;
|
|
4
|
+
}
|
|
5
|
+
export declare class SystemPollClock implements PollClock {
|
|
6
|
+
now(): number;
|
|
7
|
+
sleep(milliseconds: number, signal?: AbortSignal): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=clock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clock.d.ts","sourceRoot":"","sources":["../../src/polling/clock.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,GAAG,IAAI,MAAM,CAAC;IACd,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClE;AAED,qBAAa,eAAgB,YAAW,SAAS;IAC/C,GAAG,IAAI,MAAM;IAIb,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAoBjE"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export class SystemPollClock {
|
|
2
|
+
now() {
|
|
3
|
+
return Date.now();
|
|
4
|
+
}
|
|
5
|
+
sleep(milliseconds, signal) {
|
|
6
|
+
return new Promise((resolve, reject) => {
|
|
7
|
+
if (signal?.aborted) {
|
|
8
|
+
reject(signal.reason instanceof Error ? signal.reason : new Error('Polling was canceled.'));
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
const onAbort = () => {
|
|
12
|
+
clearTimeout(timeout);
|
|
13
|
+
reject(signal?.reason instanceof Error ? signal.reason : new Error('Polling was canceled.'));
|
|
14
|
+
};
|
|
15
|
+
const timeout = setTimeout(() => {
|
|
16
|
+
signal?.removeEventListener('abort', onAbort);
|
|
17
|
+
resolve();
|
|
18
|
+
}, milliseconds);
|
|
19
|
+
signal?.addEventListener('abort', onAbort, { once: true });
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=clock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clock.js","sourceRoot":"","sources":["../../src/polling/clock.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,eAAe;IAC1B,GAAG;QACD,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,YAAoB,EAAE,MAAoB;QAC9C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBACpB,MAAM,CAAC,MAAM,CAAC,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;gBAC5F,OAAO;YACT,CAAC;YAED,MAAM,OAAO,GAAG,GAAS,EAAE;gBACzB,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,MAAM,CACJ,MAAM,EAAE,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CACrF,CAAC;YACJ,CAAC,CAAC;YACF,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC9B,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC9C,OAAO,EAAE,CAAC;YACZ,CAAC,EAAE,YAAY,CAAC,CAAC;YACjB,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { PollClock } from './clock.js';
|
|
2
|
+
export declare function waitForResult<T>(input: {
|
|
3
|
+
load: () => Promise<T>;
|
|
4
|
+
clock: PollClock;
|
|
5
|
+
intervalMs: number;
|
|
6
|
+
timeoutMs: number;
|
|
7
|
+
/**
|
|
8
|
+
* Some endpoints answer 200 with an empty payload while scoring is still in
|
|
9
|
+
* flight. When this returns false the payload is polled again; the last one
|
|
10
|
+
* loaded is returned if the timeout arrives first, so a genuinely empty
|
|
11
|
+
* result is still shown rather than raised as a timeout.
|
|
12
|
+
*/
|
|
13
|
+
isReady?: (value: T) => boolean;
|
|
14
|
+
signal?: AbortSignal;
|
|
15
|
+
}): Promise<T>;
|
|
16
|
+
//# sourceMappingURL=wait-for-result.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait-for-result.d.ts","sourceRoot":"","sources":["../../src/polling/wait-for-result.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,wBAAsB,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE;IAC5C,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IACvB,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC;IAChC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,GAAG,OAAO,CAAC,CAAC,CAAC,CAuBb"}
|