@plumloom/cli 0.1.4 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/README.md +6 -0
  2. package/dist/actions/config.d.ts +16 -0
  3. package/dist/actions/config.d.ts.map +1 -0
  4. package/dist/actions/config.js +28 -0
  5. package/dist/actions/config.js.map +1 -0
  6. package/dist/actions/imports.d.ts +120 -0
  7. package/dist/actions/imports.d.ts.map +1 -0
  8. package/dist/actions/imports.js +404 -0
  9. package/dist/actions/imports.js.map +1 -0
  10. package/dist/actions/init.d.ts +47 -0
  11. package/dist/actions/init.d.ts.map +1 -0
  12. package/dist/actions/init.js +89 -0
  13. package/dist/actions/init.js.map +1 -0
  14. package/dist/actions/pack.d.ts +36 -0
  15. package/dist/actions/pack.d.ts.map +1 -0
  16. package/dist/actions/pack.js +271 -0
  17. package/dist/actions/pack.js.map +1 -0
  18. package/dist/actions/suite.d.ts +4 -0
  19. package/dist/actions/suite.d.ts.map +1 -1
  20. package/dist/actions/suite.js +19 -0
  21. package/dist/actions/suite.js.map +1 -1
  22. package/dist/api/api.d.ts +3 -0
  23. package/dist/api/api.d.ts.map +1 -1
  24. package/dist/api/api.js +9 -0
  25. package/dist/api/api.js.map +1 -1
  26. package/dist/api/client.d.ts +2 -2
  27. package/dist/api/client.d.ts.map +1 -1
  28. package/dist/api/external-import.d.ts +9 -0
  29. package/dist/api/external-import.d.ts.map +1 -0
  30. package/dist/api/external-import.js +2 -0
  31. package/dist/api/external-import.js.map +1 -0
  32. package/dist/commands/executor.d.ts +1 -0
  33. package/dist/commands/executor.d.ts.map +1 -1
  34. package/dist/commands/executor.js +126 -2
  35. package/dist/commands/executor.js.map +1 -1
  36. package/dist/commands/imports.d.ts +6 -0
  37. package/dist/commands/imports.d.ts.map +1 -0
  38. package/dist/commands/imports.js +132 -0
  39. package/dist/commands/imports.js.map +1 -0
  40. package/dist/commands/program.d.ts.map +1 -1
  41. package/dist/commands/program.js +2 -0
  42. package/dist/commands/program.js.map +1 -1
  43. package/dist/commands/types.d.ts +5 -0
  44. package/dist/commands/types.d.ts.map +1 -1
  45. package/dist/errors/autoeval-error.d.ts +1 -0
  46. package/dist/errors/autoeval-error.d.ts.map +1 -1
  47. package/dist/errors/autoeval-error.js +1 -1
  48. package/dist/errors/autoeval-error.js.map +1 -1
  49. package/dist/errors/hints.d.ts.map +1 -1
  50. package/dist/errors/hints.js +7 -0
  51. package/dist/errors/hints.js.map +1 -1
  52. package/dist/gate/decision.d.ts +1 -1
  53. package/dist/gate/decision.d.ts.map +1 -1
  54. package/dist/gate/decision.js +8 -8
  55. package/dist/gate/decision.js.map +1 -1
  56. package/dist/github/pr-comment.d.ts +55 -0
  57. package/dist/github/pr-comment.d.ts.map +1 -0
  58. package/dist/github/pr-comment.js +287 -0
  59. package/dist/github/pr-comment.js.map +1 -0
  60. package/dist/github/reliability-report.d.ts +16 -0
  61. package/dist/github/reliability-report.d.ts.map +1 -0
  62. package/dist/github/reliability-report.js +341 -0
  63. package/dist/github/reliability-report.js.map +1 -0
  64. package/dist/mcp/schemas.d.ts +32 -0
  65. package/dist/mcp/schemas.d.ts.map +1 -1
  66. package/dist/mcp/schemas.js +55 -0
  67. package/dist/mcp/schemas.js.map +1 -1
  68. package/dist/mcp/tools.d.ts +2 -0
  69. package/dist/mcp/tools.d.ts.map +1 -1
  70. package/dist/mcp/tools.js +146 -17
  71. package/dist/mcp/tools.js.map +1 -1
  72. package/dist/output/imports.d.ts +3 -0
  73. package/dist/output/imports.d.ts.map +1 -0
  74. package/dist/output/imports.js +280 -0
  75. package/dist/output/imports.js.map +1 -0
  76. package/dist/output/next-steps.d.ts +26 -0
  77. package/dist/output/next-steps.d.ts.map +1 -0
  78. package/dist/output/next-steps.js +54 -0
  79. package/dist/output/next-steps.js.map +1 -0
  80. package/dist/packs/data.d.ts +3 -0
  81. package/dist/packs/data.d.ts.map +1 -0
  82. package/dist/packs/data.js +102 -0
  83. package/dist/packs/data.js.map +1 -0
  84. package/dist/packs/registry.d.ts +37 -0
  85. package/dist/packs/registry.d.ts.map +1 -0
  86. package/dist/packs/registry.js +19 -0
  87. package/dist/packs/registry.js.map +1 -0
  88. package/dist/reliability/evidence.d.ts +44 -0
  89. package/dist/reliability/evidence.d.ts.map +1 -0
  90. package/dist/reliability/evidence.js +259 -0
  91. package/dist/reliability/evidence.js.map +1 -0
  92. package/dist/settings/resolve.d.ts +14 -0
  93. package/dist/settings/resolve.d.ts.map +1 -0
  94. package/dist/settings/resolve.js +18 -0
  95. package/dist/settings/resolve.js.map +1 -0
  96. package/dist/settings/settings.d.ts +47 -0
  97. package/dist/settings/settings.d.ts.map +1 -0
  98. package/dist/settings/settings.js +169 -0
  99. package/dist/settings/settings.js.map +1 -0
  100. package/package.json +1 -1
@@ -0,0 +1,47 @@
1
+ import type { SupportedModel, Workspace } from '../domain/types.js';
2
+ import { AutoevalError } from '../errors/autoeval-error.js';
3
+ import type { BundledPack } from '../packs/registry.js';
4
+ import { type ModelRole } from '../quickstart/selection.js';
5
+ import type { AutoevalSettings } from '../settings/settings.js';
6
+ import type { ActionContext } from './context.js';
7
+ import type { SuiteSummary } from './suite.js';
8
+ export type ResolvedInitDefaults = {
9
+ workspaceId: string;
10
+ judgeModelId: string;
11
+ /** Present only for scenario packs, which grade a model under test. */
12
+ primaryModelId?: string;
13
+ };
14
+ export declare function settingsToPersist(current: AutoevalSettings, resolved: ResolvedInitDefaults): AutoevalSettings;
15
+ export type ActivationSelection = {
16
+ workspace: Workspace;
17
+ judge: SupportedModel;
18
+ primary?: SupportedModel;
19
+ };
20
+ export type ActivationResult = ActivationSelection & {
21
+ summary: SuiteSummary;
22
+ persistedDefaults: boolean;
23
+ };
24
+ export type RunActivationInput = {
25
+ pack: BundledPack;
26
+ settings: AutoevalSettings;
27
+ workspaceId?: string;
28
+ judgeModelId?: string;
29
+ primaryModelId?: string;
30
+ /** Used by `init --yes`; selects the first ordered candidate instead of prompting. */
31
+ assumeFirstChoice?: boolean;
32
+ chooseWorkspace?: (candidates: readonly Workspace[]) => Promise<Workspace>;
33
+ chooseModel?: (role: ModelRole, candidates: readonly SupportedModel[]) => Promise<SupportedModel>;
34
+ runPack: (selection: ActivationSelection) => Promise<SuiteSummary>;
35
+ /** Present for init only. Failure is fatal because persisted defaults are required. */
36
+ persistSettings?: (settings: AutoevalSettings) => Promise<void>;
37
+ signal?: AbortSignal;
38
+ };
39
+ /**
40
+ * Shared activation workflow used by `init` and `pack run`. The CLI supplies
41
+ * prompt and filesystem ports; workspace/model resolution, run sequencing,
42
+ * success determination, and required persistence remain reusable product logic.
43
+ */
44
+ export declare function runActivation(context: ActionContext, input: RunActivationInput): Promise<ActivationResult>;
45
+ /** Produces the non-zero error used after a failed activation summary is rendered. */
46
+ export declare function activationRunFailure(summary: SuiteSummary, code: string): AutoevalError;
47
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/actions/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAIL,KAAK,SAAS,EACf,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAGlD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,MAAM,MAAM,oBAAoB,GAAG;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,oBAAoB,GAC7B,gBAAgB,CAUlB;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,cAAc,CAAC;IACtB,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,mBAAmB,GAAG;IACnD,OAAO,EAAE,YAAY,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sFAAsF;IACtF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IAC3E,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,cAAc,EAAE,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAClG,OAAO,EAAE,CAAC,SAAS,EAAE,mBAAmB,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IACnE,uFAAuF;IACvF,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,CAAC;AAgDF;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,gBAAgB,CAAC,CAkC3B;AAED,sFAAsF;AACtF,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CASvF"}
@@ -0,0 +1,89 @@
1
+ import { AutoevalError } from '../errors/autoeval-error.js';
2
+ import { enabledModels, selectQuickstartModel, selectQuickstartWorkspace, } from '../quickstart/selection.js';
3
+ import { resolveModelIds, resolveWorkspaceId } from '../settings/resolve.js';
4
+ import { getModels } from './models.js';
5
+ import { packRequiresPrimaryModel } from './pack.js';
6
+ import { listWorkspaces } from './workspaces.js';
7
+ export function settingsToPersist(current, resolved) {
8
+ return {
9
+ ...current,
10
+ version: 1,
11
+ defaultWorkspaceId: resolved.workspaceId,
12
+ defaultJudgeModelId: resolved.judgeModelId,
13
+ ...(resolved.primaryModelId !== undefined
14
+ ? { defaultPrimaryModelId: resolved.primaryModelId }
15
+ : {}),
16
+ };
17
+ }
18
+ function workspaceRequired() {
19
+ return new AutoevalError('More than one workspace is available. Save one with "autoeval config set-workspace <workspace-id>", pass --workspace to init, or run in a terminal to choose.', { kind: 'usage', code: 'INIT_WORKSPACE_REQUIRED' });
20
+ }
21
+ function modelRequired() {
22
+ return new AutoevalError('More than one model is enabled and none matches the preference list. Save model defaults with "autoeval config", pass model IDs to init, or run in a terminal to choose; "autoeval models" lists IDs.', { kind: 'usage', code: 'INIT_MODEL_REQUIRED' });
23
+ }
24
+ async function resolveWorkspace(candidates, overrideId, input) {
25
+ const resolution = selectQuickstartWorkspace(candidates, overrideId);
26
+ if (resolution.kind === 'resolved')
27
+ return resolution.workspace;
28
+ if (input.assumeFirstChoice === true) {
29
+ const first = resolution.candidates[0];
30
+ if (first !== undefined)
31
+ return first;
32
+ }
33
+ if (input.chooseWorkspace === undefined)
34
+ throw workspaceRequired();
35
+ return input.chooseWorkspace(resolution.candidates);
36
+ }
37
+ async function resolveModel(candidates, role, overrideId, input, excludeModelId) {
38
+ const resolution = selectQuickstartModel(candidates, role, overrideId, excludeModelId);
39
+ if (resolution.kind === 'resolved')
40
+ return resolution.model;
41
+ if (input.assumeFirstChoice === true) {
42
+ const first = resolution.candidates[0];
43
+ if (first !== undefined)
44
+ return first;
45
+ }
46
+ if (input.chooseModel === undefined)
47
+ throw modelRequired();
48
+ return input.chooseModel(role, resolution.candidates);
49
+ }
50
+ /**
51
+ * Shared activation workflow used by `init` and `pack run`. The CLI supplies
52
+ * prompt and filesystem ports; workspace/model resolution, run sequencing,
53
+ * success determination, and required persistence remain reusable product logic.
54
+ */
55
+ export async function runActivation(context, input) {
56
+ const workspacePage = await listWorkspaces(context, {}, input.signal);
57
+ const workspace = await resolveWorkspace(workspacePage.items, resolveWorkspaceId(input.workspaceId, input.settings), input);
58
+ const models = enabledModels(await getModels(context, input.signal));
59
+ const resolvedModelIds = resolveModelIds(input, input.settings);
60
+ const judge = await resolveModel(models, 'judge', resolvedModelIds.judgeModelId, input);
61
+ const primary = packRequiresPrimaryModel(input.pack.context)
62
+ ? await resolveModel(models, 'primary', resolvedModelIds.primaryModelId, input, judge.id)
63
+ : undefined;
64
+ const selection = {
65
+ workspace,
66
+ judge,
67
+ ...(primary === undefined ? {} : { primary }),
68
+ };
69
+ const summary = await input.runPack(selection);
70
+ let persistedDefaults = false;
71
+ if (summary.failed === 0 && input.persistSettings !== undefined) {
72
+ await input.persistSettings(settingsToPersist(input.settings, {
73
+ workspaceId: workspace.id,
74
+ judgeModelId: judge.id,
75
+ ...(primary === undefined ? {} : { primaryModelId: primary.id }),
76
+ }));
77
+ persistedDefaults = true;
78
+ }
79
+ return { ...selection, summary, persistedDefaults };
80
+ }
81
+ /** Produces the non-zero error used after a failed activation summary is rendered. */
82
+ export function activationRunFailure(summary, code) {
83
+ const failed = summary.evals
84
+ .filter((entry) => entry.status !== 'completed')
85
+ .map((entry) => `${entry.inputFile} (${entry.status})`)
86
+ .join(', ');
87
+ return new AutoevalError(`${summary.failed} of ${summary.total} evaluation(s) did not finish: ${failed}.`, { kind: 'run_failed', code });
88
+ }
89
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/actions/init.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,yBAAyB,GAE1B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAG7E,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AASjD,MAAM,UAAU,iBAAiB,CAC/B,OAAyB,EACzB,QAA8B;IAE9B,OAAO;QACL,GAAG,OAAO;QACV,OAAO,EAAE,CAAC;QACV,kBAAkB,EAAE,QAAQ,CAAC,WAAW;QACxC,mBAAmB,EAAE,QAAQ,CAAC,YAAY;QAC1C,GAAG,CAAC,QAAQ,CAAC,cAAc,KAAK,SAAS;YACvC,CAAC,CAAC,EAAE,qBAAqB,EAAE,QAAQ,CAAC,cAAc,EAAE;YACpD,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AA6BD,SAAS,iBAAiB;IACxB,OAAO,IAAI,aAAa,CACtB,+JAA+J,EAC/J,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,yBAAyB,EAAE,CACnD,CAAC;AACJ,CAAC;AAED,SAAS,aAAa;IACpB,OAAO,IAAI,aAAa,CACtB,uMAAuM,EACvM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,qBAAqB,EAAE,CAC/C,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,UAAgC,EAChC,UAA8B,EAC9B,KAAyB;IAEzB,MAAM,UAAU,GAAG,yBAAyB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACrE,IAAI,UAAU,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,UAAU,CAAC,SAAS,CAAC;IAChE,IAAI,KAAK,CAAC,iBAAiB,KAAK,IAAI,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;IACxC,CAAC;IACD,IAAI,KAAK,CAAC,eAAe,KAAK,SAAS;QAAE,MAAM,iBAAiB,EAAE,CAAC;IACnE,OAAO,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AACtD,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,UAAqC,EACrC,IAAe,EACf,UAA8B,EAC9B,KAAyB,EACzB,cAAuB;IAEvB,MAAM,UAAU,GAAG,qBAAqB,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;IACvF,IAAI,UAAU,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAC5D,IAAI,KAAK,CAAC,iBAAiB,KAAK,IAAI,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;IACxC,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;QAAE,MAAM,aAAa,EAAE,CAAC;IAC3D,OAAO,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;AACxD,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAsB,EACtB,KAAyB;IAEzB,MAAM,aAAa,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACtE,MAAM,SAAS,GAAG,MAAM,gBAAgB,CACtC,aAAa,CAAC,KAAK,EACnB,kBAAkB,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,EACrD,KAAK,CACN,CAAC;IAEF,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACrE,MAAM,gBAAgB,GAAG,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IACxF,MAAM,OAAO,GAAG,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;QAC1D,CAAC,CAAC,MAAM,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,gBAAgB,CAAC,cAAc,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;QACzF,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,SAAS,GAAwB;QACrC,SAAS;QACT,KAAK;QACL,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;KAC9C,CAAC;IAEF,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC/C,IAAI,iBAAiB,GAAG,KAAK,CAAC;IAC9B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QAChE,MAAM,KAAK,CAAC,eAAe,CACzB,iBAAiB,CAAC,KAAK,CAAC,QAAQ,EAAE;YAChC,WAAW,EAAE,SAAS,CAAC,EAAE;YACzB,YAAY,EAAE,KAAK,CAAC,EAAE;YACtB,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;SACjE,CAAC,CACH,CAAC;QACF,iBAAiB,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,OAAO,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;AACtD,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,oBAAoB,CAAC,OAAqB,EAAE,IAAY;IACtE,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK;SACzB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC;SAC/C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC;SACtD,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO,IAAI,aAAa,CACtB,GAAG,OAAO,CAAC,MAAM,OAAO,OAAO,CAAC,KAAK,kCAAkC,MAAM,GAAG,EAChF,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAC7B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { EvaluationContextType } from '../domain/types.js';
2
+ import type { BundledPack } from '../packs/registry.js';
3
+ import { type SuiteManifest } from '../suite/manifest.js';
4
+ /** Pack installation planning and integrity-checked filesystem operations. */
5
+ export type PackFileToWrite = {
6
+ absolutePath: string;
7
+ contents: string;
8
+ };
9
+ export type PackInstallPlan = {
10
+ packName: string;
11
+ context: EvaluationContextType;
12
+ /** Absolute root selected by the caller, containing the per-pack directory. */
13
+ targetDirectory: string;
14
+ /** Absolute `<targetDirectory>/<packName>` directory the pack installs into. */
15
+ installDirectory: string;
16
+ /** Absolute path of the generated suite manifest. */
17
+ manifestPath: string;
18
+ /** Pack files plus the generated manifest, in write order. */
19
+ files: readonly PackFileToWrite[];
20
+ /** Absolute eval file paths referenced by the manifest, in manifest order. */
21
+ evalFileAbsolutePaths: readonly string[];
22
+ };
23
+ /** Scenario packs grade a model under test; other contexts need only a judge. */
24
+ export declare function packRequiresPrimaryModel(context: EvaluationContextType): boolean;
25
+ export declare function planPackInstall(pack: BundledPack, targetDirectory: string, options?: {
26
+ workspaceId?: string;
27
+ }): PackInstallPlan;
28
+ export type PackInstallResult = {
29
+ status: 'installed' | 'already-installed';
30
+ manifest: SuiteManifest;
31
+ };
32
+ /** Installs a fresh pack and refuses every pre-existing pack file. */
33
+ export declare function installPack(plan: PackInstallPlan): Promise<void>;
34
+ /** Installs a missing pack, or reuses it only when every existing file is trusted. */
35
+ export declare function ensurePackInstalled(plan: PackInstallPlan): Promise<PackInstallResult>;
36
+ //# sourceMappingURL=pack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack.d.ts","sourceRoot":"","sources":["../../src/actions/pack.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAEhE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE9E,8EAA8E;AAC9E,MAAM,MAAM,eAAe,GAAG;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,qBAAqB,CAAC;IAC/B,+EAA+E;IAC/E,eAAe,EAAE,MAAM,CAAC;IACxB,gFAAgF;IAChF,gBAAgB,EAAE,MAAM,CAAC;IACzB,qDAAqD;IACrD,YAAY,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,KAAK,EAAE,SAAS,eAAe,EAAE,CAAC;IAClC,8EAA8E;IAC9E,qBAAqB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C,CAAC;AAWF,iFAAiF;AACjF,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAEhF;AAoCD,wBAAgB,eAAe,CAC7B,IAAI,EAAE,WAAW,EACjB,eAAe,EAAE,MAAM,EACvB,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GACrC,eAAe,CA4BjB;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,WAAW,GAAG,mBAAmB,CAAC;IAC1C,QAAQ,EAAE,aAAa,CAAC;CACzB,CAAC;AA6MF,sEAAsE;AACtE,wBAAsB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAWtE;AAED,sFAAsF;AACtF,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAe3F"}
@@ -0,0 +1,271 @@
1
+ import { lstat, mkdir, readFile, rm, writeFile } from 'node:fs/promises';
2
+ import { isDeepStrictEqual } from 'node:util';
3
+ import { dirname, isAbsolute, relative, resolve, sep } from 'node:path';
4
+ import { stringify as stringifyYaml } from 'yaml';
5
+ import { AutoevalError } from '../errors/autoeval-error.js';
6
+ import { parseSuiteManifest } from '../suite/manifest.js';
7
+ const MANIFEST_FILENAME = 'autoeval.suite.yaml';
8
+ /**
9
+ * Synthetic placeholder workspace used only when no default is known yet. It is
10
+ * overridden at run time by `--workspace` or the resolved workspace, so a pack
11
+ * installed before a default is saved still runs once a workspace is resolved.
12
+ */
13
+ const SYNTHETIC_WORKSPACE_PLACEHOLDER = 'ffffffff-ffff-4fff-8fff-ffffffffffff';
14
+ /** Scenario packs grade a model under test; other contexts need only a judge. */
15
+ export function packRequiresPrimaryModel(context) {
16
+ return context === 'scenario';
17
+ }
18
+ /** A pack name must be a single, safe path segment (it becomes a directory). */
19
+ function assertSafePackName(name) {
20
+ if (name === '' || name.includes('/') || name.includes('\\') || name === '.' || name === '..') {
21
+ throw new AutoevalError(`Pack "${name}" has an unsafe name.`, {
22
+ kind: 'validation',
23
+ code: 'PACK_INVALID_PATH',
24
+ });
25
+ }
26
+ }
27
+ /**
28
+ * Resolves a pack-declared relative path under the install directory and
29
+ * confirms it does not escape it. Pack contents are treated as untrusted (a
30
+ * `..` or absolute entry must never write outside the install directory), even
31
+ * though the bundled packs are first-party today.
32
+ */
33
+ function resolveContainedPath(installDirectory, relativePath) {
34
+ if (relativePath === '' || isAbsolute(relativePath)) {
35
+ throw new AutoevalError(`Pack path "${relativePath}" must be a relative path.`, {
36
+ kind: 'validation',
37
+ code: 'PACK_INVALID_PATH',
38
+ });
39
+ }
40
+ const absolutePath = resolve(installDirectory, relativePath);
41
+ const rel = relative(installDirectory, absolutePath);
42
+ if (rel === '' || rel === '..' || rel.startsWith(`..${sep}`) || isAbsolute(rel)) {
43
+ throw new AutoevalError(`Pack path "${relativePath}" escapes the install directory.`, {
44
+ kind: 'validation',
45
+ code: 'PACK_INVALID_PATH',
46
+ });
47
+ }
48
+ return absolutePath;
49
+ }
50
+ export function planPackInstall(pack, targetDirectory, options = {}) {
51
+ assertSafePackName(pack.name);
52
+ const installDirectory = resolve(targetDirectory, pack.name);
53
+ const files = pack.files.map((file) => ({
54
+ absolutePath: resolveContainedPath(installDirectory, file.relativePath),
55
+ contents: file.contents,
56
+ }));
57
+ const manifestObject = {
58
+ workspace: options.workspaceId ?? SYNTHETIC_WORKSPACE_PLACEHOLDER,
59
+ ...(pack.gate === undefined ? {} : { gate: pack.gate }),
60
+ evals: [...pack.evals],
61
+ };
62
+ const manifestPath = resolveContainedPath(installDirectory, MANIFEST_FILENAME);
63
+ files.push({ absolutePath: manifestPath, contents: stringifyYaml(manifestObject) });
64
+ return {
65
+ packName: pack.name,
66
+ context: pack.context,
67
+ targetDirectory: resolve(targetDirectory),
68
+ installDirectory,
69
+ manifestPath,
70
+ files,
71
+ evalFileAbsolutePaths: pack.evals.map((evalPath) => resolveContainedPath(installDirectory, evalPath)),
72
+ };
73
+ }
74
+ function fileDisplayPath(plan, absolutePath) {
75
+ return relative(plan.targetDirectory, absolutePath) || '.';
76
+ }
77
+ function errorCode(error) {
78
+ return typeof error === 'object' && error !== null && 'code' in error
79
+ ? String(error.code)
80
+ : undefined;
81
+ }
82
+ async function assertNoSymlinkComponents(plan) {
83
+ let existingAncestor = plan.targetDirectory;
84
+ while (true) {
85
+ try {
86
+ const metadata = await lstat(existingAncestor);
87
+ if (metadata.isSymbolicLink()) {
88
+ throw new AutoevalError('A pack directory cannot be a symbolic link.', {
89
+ kind: 'validation',
90
+ code: 'PACK_INVALID_PATH',
91
+ });
92
+ }
93
+ if (!metadata.isDirectory()) {
94
+ throw new AutoevalError('A pack path component must be a directory.', {
95
+ kind: 'validation',
96
+ code: 'PACK_INVALID_PATH',
97
+ });
98
+ }
99
+ break;
100
+ }
101
+ catch (error) {
102
+ if (error instanceof AutoevalError)
103
+ throw error;
104
+ if (errorCode(error) !== 'ENOENT') {
105
+ throw new AutoevalError('A pack directory could not be inspected safely.', {
106
+ kind: 'usage',
107
+ code: 'PACK_WRITE_FAILED',
108
+ cause: error,
109
+ });
110
+ }
111
+ const parent = dirname(existingAncestor);
112
+ if (parent === existingAncestor)
113
+ break;
114
+ existingAncestor = parent;
115
+ }
116
+ }
117
+ const directories = new Set([plan.targetDirectory, plan.installDirectory]);
118
+ for (const file of plan.files)
119
+ directories.add(dirname(file.absolutePath));
120
+ for (const target of directories) {
121
+ const rel = relative(plan.targetDirectory, target);
122
+ const segments = rel === '' ? [] : rel.split(sep);
123
+ let current = plan.targetDirectory;
124
+ for (let index = -1; index < segments.length; index += 1) {
125
+ if (index >= 0)
126
+ current = resolve(current, segments[index] ?? '');
127
+ try {
128
+ const metadata = await lstat(current);
129
+ if (metadata.isSymbolicLink()) {
130
+ throw new AutoevalError('A pack directory cannot be a symbolic link.', {
131
+ kind: 'validation',
132
+ code: 'PACK_INVALID_PATH',
133
+ });
134
+ }
135
+ if (!metadata.isDirectory()) {
136
+ throw new AutoevalError('A pack path component must be a directory.', {
137
+ kind: 'validation',
138
+ code: 'PACK_INVALID_PATH',
139
+ });
140
+ }
141
+ }
142
+ catch (error) {
143
+ if (error instanceof AutoevalError)
144
+ throw error;
145
+ if (errorCode(error) === 'ENOENT')
146
+ break;
147
+ throw new AutoevalError('A pack directory could not be inspected safely.', {
148
+ kind: 'usage',
149
+ code: 'PACK_WRITE_FAILED',
150
+ cause: error,
151
+ });
152
+ }
153
+ }
154
+ }
155
+ }
156
+ async function readExistingFile(plan, file) {
157
+ try {
158
+ const metadata = await lstat(file.absolutePath);
159
+ if (metadata.isSymbolicLink()) {
160
+ throw new AutoevalError(`Existing pack path ${fileDisplayPath(plan, file.absolutePath)} cannot be a symbolic link.`, { kind: 'validation', code: 'PACK_FILES_MODIFIED' });
161
+ }
162
+ if (!metadata.isFile()) {
163
+ throw new AutoevalError(`Existing pack path ${fileDisplayPath(plan, file.absolutePath)} is not a regular file.`, { kind: 'validation', code: 'PACK_FILES_MODIFIED' });
164
+ }
165
+ const expectedBytes = Buffer.byteLength(file.contents, 'utf8');
166
+ if (metadata.size !== expectedBytes && file.absolutePath !== plan.manifestPath) {
167
+ return { file, contents: '' };
168
+ }
169
+ const contents = await readFile(file.absolutePath, 'utf8');
170
+ return { file, contents };
171
+ }
172
+ catch (error) {
173
+ if (error instanceof AutoevalError)
174
+ throw error;
175
+ if (errorCode(error) === 'ENOENT')
176
+ return undefined;
177
+ throw new AutoevalError(`Existing pack path ${fileDisplayPath(plan, file.absolutePath)} could not be inspected.`, { kind: 'usage', code: 'PACK_WRITE_FAILED', cause: error });
178
+ }
179
+ }
180
+ async function writePlanTransactionally(plan) {
181
+ const createdFiles = [];
182
+ const createdDirectories = [];
183
+ const rollback = async () => {
184
+ for (const filePath of createdFiles.reverse()) {
185
+ await rm(filePath, { force: true }).catch(() => undefined);
186
+ }
187
+ for (const directoryPath of createdDirectories.reverse()) {
188
+ await rm(directoryPath, { recursive: true, force: true }).catch(() => undefined);
189
+ }
190
+ };
191
+ try {
192
+ for (const file of plan.files) {
193
+ const firstCreatedDirectory = await mkdir(dirname(file.absolutePath), { recursive: true });
194
+ if (firstCreatedDirectory !== undefined)
195
+ createdDirectories.push(firstCreatedDirectory);
196
+ try {
197
+ await writeFile(file.absolutePath, file.contents, { encoding: 'utf8', flag: 'wx' });
198
+ createdFiles.push(file.absolutePath);
199
+ }
200
+ catch (error) {
201
+ if (errorCode(error) === 'EEXIST') {
202
+ throw new AutoevalError(`A pack file already exists at ${fileDisplayPath(plan, file.absolutePath)}. Remove it or choose a different --dir.`, { kind: 'usage', code: 'PACK_FILE_EXISTS', cause: error });
203
+ }
204
+ throw new AutoevalError(`A pack file could not be written at ${fileDisplayPath(plan, file.absolutePath)}.`, { kind: 'usage', code: 'PACK_WRITE_FAILED', cause: error });
205
+ }
206
+ }
207
+ }
208
+ catch (error) {
209
+ await rollback();
210
+ throw error;
211
+ }
212
+ }
213
+ function expectedManifest(plan) {
214
+ const manifestFile = plan.files.find((file) => file.absolutePath === plan.manifestPath);
215
+ if (manifestFile === undefined) {
216
+ throw new AutoevalError('The bundled pack does not contain its suite manifest.', {
217
+ kind: 'validation',
218
+ code: 'PACK_INVALID_PATH',
219
+ });
220
+ }
221
+ return parseSuiteManifest(manifestFile.contents, plan.manifestPath);
222
+ }
223
+ function assertTrustedExistingPack(plan, existingFiles) {
224
+ for (const existing of existingFiles) {
225
+ if (existing.file.absolutePath === plan.manifestPath)
226
+ continue;
227
+ if (existing.contents !== existing.file.contents) {
228
+ throw new AutoevalError(`Pack file ${fileDisplayPath(plan, existing.file.absolutePath)} differs from the bundled pack. Run it explicitly with "autoeval suite run --manifest ${fileDisplayPath(plan, plan.manifestPath)}" or remove the pack directory and reinstall it.`, { kind: 'validation', code: 'PACK_FILES_MODIFIED' });
229
+ }
230
+ }
231
+ const actualSource = existingFiles.find((existing) => existing.file.absolutePath === plan.manifestPath)?.contents;
232
+ if (actualSource === undefined) {
233
+ throw new AutoevalError('The installed pack is missing its suite manifest.', {
234
+ kind: 'validation',
235
+ code: 'PACK_FILES_MODIFIED',
236
+ });
237
+ }
238
+ const actual = parseSuiteManifest(actualSource, plan.manifestPath);
239
+ const expected = expectedManifest(plan);
240
+ const sameFiles = isDeepStrictEqual(actual.evalFiles, expected.evalFiles);
241
+ const samePolicies = isDeepStrictEqual(actual.entries.map((entry) => entry.gate), expected.entries.map((entry) => entry.gate));
242
+ if (!sameFiles || !samePolicies) {
243
+ throw new AutoevalError(`Pack manifest ${fileDisplayPath(plan, plan.manifestPath)} differs from the bundled pack. Run the adapted manifest with "autoeval suite run --manifest ${fileDisplayPath(plan, plan.manifestPath)}" or remove the pack directory and reinstall it.`, { kind: 'validation', code: 'PACK_FILES_MODIFIED' });
244
+ }
245
+ return actual;
246
+ }
247
+ /** Installs a fresh pack and refuses every pre-existing pack file. */
248
+ export async function installPack(plan) {
249
+ await assertNoSymlinkComponents(plan);
250
+ const existing = await Promise.all(plan.files.map((file) => readExistingFile(plan, file)));
251
+ const collision = existing.find((entry) => entry !== undefined);
252
+ if (collision !== undefined) {
253
+ throw new AutoevalError(`A pack file already exists at ${fileDisplayPath(plan, collision.file.absolutePath)}. Remove it or choose a different --dir.`, { kind: 'usage', code: 'PACK_FILE_EXISTS' });
254
+ }
255
+ await writePlanTransactionally(plan);
256
+ }
257
+ /** Installs a missing pack, or reuses it only when every existing file is trusted. */
258
+ export async function ensurePackInstalled(plan) {
259
+ await assertNoSymlinkComponents(plan);
260
+ const inspected = await Promise.all(plan.files.map((file) => readExistingFile(plan, file)));
261
+ const existing = inspected.filter((entry) => entry !== undefined);
262
+ if (existing.length === 0) {
263
+ await writePlanTransactionally(plan);
264
+ return { status: 'installed', manifest: expectedManifest(plan) };
265
+ }
266
+ if (existing.length !== plan.files.length) {
267
+ throw new AutoevalError('The pack directory contains only part of the bundled pack. Remove the directory and reinstall it.', { kind: 'validation', code: 'PACK_FILES_MODIFIED' });
268
+ }
269
+ return { status: 'already-installed', manifest: assertTrustedExistingPack(plan, existing) };
270
+ }
271
+ //# sourceMappingURL=pack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack.js","sourceRoot":"","sources":["../../src/actions/pack.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import type { JsonObject } from '../domain/common.js';
2
2
  import type { EvaluationContextType, EvaluationResults, RunStatus } from '../domain/types.js';
3
3
  import { type ConfiguredRunModelOverrides, type ParsedConfiguredRunInput } from '../configured-run/validation.js';
4
4
  import type { PollClock } from '../polling/clock.js';
5
+ import { type RunStandardEvidence } from '../reliability/evidence.js';
5
6
  import { type SuiteEvalRecord, type SuiteItem } from '../suite/execution.js';
6
7
  import type { ActionContext } from './context.js';
7
8
  /** Per-eval identity and terminal execution state, preserved for the summary. */
@@ -14,6 +15,8 @@ export type SuiteEvalExecution = {
14
15
  elapsedMs: number;
15
16
  /** Terminal run-status payload, kept for the gate plane. */
16
17
  statusRaw: JsonObject;
18
+ /** Public-safe metadata from the exact methodology/configuration used by this run. */
19
+ standard?: RunStandardEvidence;
17
20
  };
18
21
  export type SuiteEvalEntry = SuiteEvalRecord<SuiteEvalExecution, EvaluationResults>;
19
22
  export type SuiteSummary = {
@@ -39,6 +42,7 @@ export type RunSuiteInput = {
39
42
  signal?: AbortSignal;
40
43
  onStatus?: (item: SuiteItem, status: RunStatus) => void;
41
44
  modelOverrides?: ConfiguredRunModelOverrides;
45
+ includeReliabilityEvidence?: boolean;
42
46
  };
43
47
  /**
44
48
  * Runs a suite in two planes: execution (bounded concurrency) and result
@@ -1 +1 @@
1
- {"version":3,"file":"suite.d.ts","sourceRoot":"","sources":["../../src/actions/suite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC9F,OAAO,EAGL,KAAK,2BAA2B,EAChC,KAAK,wBAAwB,EAC9B,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAoB,KAAK,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAE/F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAIlD,iFAAiF;AACjF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,qBAAqB,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,SAAS,EAAE,UAAU,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,eAAe,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;AAEpF,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,sFAAsF;IACtF,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACvE,KAAK,EAAE,SAAS,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,KAAK,IAAI,CAAC;IACxD,cAAc,CAAC,EAAE,2BAA2B,CAAC;CAC9C,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,YAAY,CAAC,CA+DvB"}
1
+ {"version":3,"file":"suite.d.ts","sourceRoot":"","sources":["../../src/actions/suite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE9F,OAAO,EAGL,KAAK,2BAA2B,EAChC,KAAK,wBAAwB,EAC9B,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAA8B,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAClG,OAAO,EAAoB,KAAK,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAE/F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAIlD,iFAAiF;AACjF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,qBAAqB,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,SAAS,EAAE,UAAU,CAAC;IACtB,sFAAsF;IACtF,QAAQ,CAAC,EAAE,mBAAmB,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,eAAe,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;AAEpF,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,sFAAsF;IACtF,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACvE,KAAK,EAAE,SAAS,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,KAAK,IAAI,CAAC;IACxD,cAAc,CAAC,EAAE,2BAA2B,CAAC;IAC7C,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,YAAY,CAAC,CAsFvB"}
@@ -1,4 +1,6 @@
1
+ import { jsonObjectSchema } from '../api/schemas.js';
1
2
  import { applyModelOverrides, requireModelOverridesForPublicPlaceholders, } from '../configured-run/validation.js';
3
+ import { extractRunStandardEvidence } from '../reliability/evidence.js';
2
4
  import { runTwoPlaneSuite } from '../suite/execution.js';
3
5
  import { runConfiguredEvaluation, validateConfiguredEvaluation } from './configured-runs.js';
4
6
  import { createEvaluation } from './evaluations.js';
@@ -37,6 +39,22 @@ export async function runSuite(context, input) {
37
39
  ? { onStatus: (status) => input.onStatus?.(item, status) }
38
40
  : {}),
39
41
  });
42
+ let standard;
43
+ if (input.includeReliabilityEvidence === true) {
44
+ let exactConfiguration;
45
+ try {
46
+ const response = await context.api.getEvaluationConfiguration(evaluation.evaluationId, execution.run.methodologyVersionId, execution.run.configVersionId, input.signal);
47
+ if (response.evaluation_id === evaluation.evaluationId &&
48
+ response.methodology_version_id === execution.run.methodologyVersionId &&
49
+ response.config_version_id === execution.run.configVersionId) {
50
+ exactConfiguration = jsonObjectSchema.parse(response);
51
+ }
52
+ }
53
+ catch {
54
+ // Reporting metadata is optional and must never alter execution or gate behavior.
55
+ }
56
+ standard = extractRunStandardEvidence(configuredRun, exactConfiguration);
57
+ }
40
58
  return {
41
59
  evaluationId: evaluation.evaluationId,
42
60
  evaluationName,
@@ -45,6 +63,7 @@ export async function runSuite(context, input) {
45
63
  state: execution.outcome.status.state,
46
64
  elapsedMs: execution.outcome.elapsedMs,
47
65
  statusRaw: execution.outcome.status.raw,
66
+ ...(standard === undefined ? {} : { standard }),
48
67
  };
49
68
  },
50
69
  fetchResults: (execution) => getResults(context, {
@@ -1 +1 @@
1
- {"version":3,"file":"suite.js","sourceRoot":"","sources":["../../src/actions/suite.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"suite.js","sourceRoot":"","sources":["../../src/actions/suite.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EACL,mBAAmB,EACnB,0CAA0C,GAG3C,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,0BAA0B,EAA4B,MAAM,4BAA4B,CAAC;AAClG,OAAO,EAAE,gBAAgB,EAAwC,MAAM,uBAAuB,CAAC;AAC/F,OAAO,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AAE7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AA6C1C;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,OAAsB,EACtB,KAAoB;IAEpB,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAwC;QAC1E,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,oBAAoB,EAAE,KAAK,CAAC,WAAW;QACvC,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,GAAG,CAAC,KAAK,CAAC,iBAAiB,KAAK,SAAS;YACvC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAAE,CAAC;QACnD,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,mBAAmB,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACrE,MAAM,aAAa,GAAG,mBAAmB,CAAC,mBAAmB,EAAE,KAAK,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;YAC3F,0CAA0C,CAAC,aAAa,CAAC,CAAC;YAC1D,MAAM,4BAA4B,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YACzE,MAAM,cAAc,GAClB,aAAa,CAAC,cAAc,IAAI,aAAa,CAAC,aAAa,CAAC,WAAW,CAAC;YAC1E,MAAM,UAAU,GAAG,MAAM,gBAAgB,CACvC,OAAO,EACP,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,cAAc,EAAE,EAClD,KAAK,CAAC,MAAM,CACb,CAAC;YACF,MAAM,SAAS,GAAG,MAAM,uBAAuB,CAAC,OAAO,EAAE;gBACvD,YAAY,EAAE,UAAU,CAAC,YAAY;gBACrC,aAAa;gBACb,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,cAAc,EAAE,KAAK,CAAC,cAAc;gBACpC,aAAa,EAAE,KAAK,CAAC,aAAa;gBAClC,YAAY,EAAE,IAAI;gBAClB,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjD,GAAG,CAAC,KAAK,CAAC,QAAQ;oBAChB,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAiB,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;oBACrE,CAAC,CAAC,EAAE,CAAC;aACR,CAAC,CAAC;YACH,IAAI,QAAyC,CAAC;YAC9C,IAAI,KAAK,CAAC,0BAA0B,KAAK,IAAI,EAAE,CAAC;gBAC9C,IAAI,kBAA0C,CAAC;gBAC/C,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAC3D,UAAU,CAAC,YAAY,EACvB,SAAS,CAAC,GAAG,CAAC,oBAAoB,EAClC,SAAS,CAAC,GAAG,CAAC,eAAe,EAC7B,KAAK,CAAC,MAAM,CACb,CAAC;oBACF,IACE,QAAQ,CAAC,aAAa,KAAK,UAAU,CAAC,YAAY;wBAClD,QAAQ,CAAC,sBAAsB,KAAK,SAAS,CAAC,GAAG,CAAC,oBAAoB;wBACtE,QAAQ,CAAC,iBAAiB,KAAK,SAAS,CAAC,GAAG,CAAC,eAAe,EAC5D,CAAC;wBACD,kBAAkB,GAAG,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBACxD,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,kFAAkF;gBACpF,CAAC;gBACD,QAAQ,GAAG,0BAA0B,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;YAC3E,CAAC;YACD,OAAO;gBACL,YAAY,EAAE,UAAU,CAAC,YAAY;gBACrC,cAAc;gBACd,WAAW,EAAE,aAAa,CAAC,aAAa,CAAC,WAAW;gBACpD,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,KAAK;gBAC1B,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;gBACrC,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,SAAS;gBACtC,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG;gBACvC,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;aAChD,CAAC;QACJ,CAAC;QACD,YAAY,EAAE,CAAC,SAAS,EAAE,EAAE,CAC1B,UAAU,CAAC,OAAO,EAAE;YAClB,YAAY,EAAE,SAAS,CAAC,YAAY;YACpC,KAAK,EAAE,SAAS,CAAC,KAAK;YACtB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,qBAAqB,EAAE,KAAK,CAAC,qBAAqB;YAClD,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;YAChD,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClD,CAAC;KACL,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM,CAAC;IAC/E,OAAO;QACL,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,KAAK,EAAE,KAAK,CAAC,MAAM;QACnB,SAAS;QACT,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS;QAChC,KAAK;KACN,CAAC;AACJ,CAAC"}
package/dist/api/api.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type { JsonObject } from '../domain/common.js';
2
+ import { type ExternalImportRequest } from './external-import.js';
2
3
  import type { EvaluationPage, EvaluationSummary, RunStatus, SupportedModel, UserIdentity, Workspace, WorkspacePage } from '../domain/types.js';
3
4
  import type { ApiClient } from './client.js';
4
5
  import { type ConfigVersionCreateResponse, type EvaluationCreateResponse, type EvaluationConfigurationResponse, type EvaluationDraftResponse, type EvaluationVersionsResponse, type MethodologyVersionCreateResponse, type RunCreateResponse } from './schemas.js';
@@ -13,6 +14,7 @@ export type CreateRunInput = {
13
14
  signal?: AbortSignal;
14
15
  };
15
16
  export interface AutoevalApi {
17
+ externalImport(request: ExternalImportRequest): Promise<unknown>;
16
18
  getCurrentUser(signal?: AbortSignal): Promise<UserIdentity>;
17
19
  listWorkspaces(input?: PageInput, signal?: AbortSignal): Promise<WorkspacePage>;
18
20
  createWorkspace(input: {
@@ -125,6 +127,7 @@ export interface AutoevalApi {
125
127
  export declare class AutoevalApiClient implements AutoevalApi {
126
128
  #private;
127
129
  constructor(client: ApiClient);
130
+ externalImport(request: ExternalImportRequest): Promise<unknown>;
128
131
  getCurrentUser(signal?: AbortSignal): Promise<UserIdentity>;
129
132
  listWorkspaces(input?: PageInput, signal?: AbortSignal): Promise<WorkspacePage>;
130
133
  createWorkspace(input: {