@tangle-network/agent-eval 0.173.3 → 0.174.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/CHANGELOG.md +31 -0
- package/dist/{proposal-findings-bko3GGy-.js → abort-signal-CtzAM_sJ.js} +11 -11
- package/dist/abort-signal-CtzAM_sJ.js.map +1 -0
- package/dist/adapters/http.d.ts +2 -2
- package/dist/agent-profile-_xPxqVJt.d.ts +488 -0
- package/dist/agent-profile-_xPxqVJt.d.ts.map +1 -0
- package/dist/analyst/index.d.ts +7 -9
- package/dist/analyst/index.d.ts.map +1 -1
- package/dist/analyst/index.js +8 -8
- package/dist/{benchmark-C4wk_Sjr.js → benchmark-DQKzykkO.js} +2 -2
- package/dist/{benchmark-C4wk_Sjr.js.map → benchmark-DQKzykkO.js.map} +1 -1
- package/dist/{benchmark-command-BY9oscke.js → benchmark-command-mZIlR-ra.js} +13 -13
- package/dist/{benchmark-command-BY9oscke.js.map → benchmark-command-mZIlR-ra.js.map} +1 -1
- package/dist/benchmarks/index.d.ts +3 -4
- package/dist/benchmarks/index.d.ts.map +1 -1
- package/dist/benchmarks/index.js +3 -3
- package/dist/campaign/index.d.ts +5 -9
- package/dist/campaign/index.js +7 -7
- package/dist/{campaign-B3kPMU8S.js → campaign-BzMSCejE.js} +8 -8
- package/dist/{campaign-B3kPMU8S.js.map → campaign-BzMSCejE.js.map} +1 -1
- package/dist/cli.js +1 -1
- package/dist/{client-DlqdbM7n.d.ts → client-vyYQg3bm.d.ts} +2 -2
- package/dist/{client-DlqdbM7n.d.ts.map → client-vyYQg3bm.d.ts.map} +1 -1
- package/dist/contract/index.d.ts +9 -10
- package/dist/contract/index.js +8 -8
- package/dist/{default-registry-B0bKikCb.js → default-registry-CrAp0pYq.js} +4 -4
- package/dist/{default-registry-B0bKikCb.js.map → default-registry-CrAp0pYq.js.map} +1 -1
- package/dist/{default-registry-BKwc8bN5.d.ts → default-registry-FfNzaUHV.d.ts} +3 -3
- package/dist/{default-registry-BKwc8bN5.d.ts.map → default-registry-FfNzaUHV.d.ts.map} +1 -1
- package/dist/{define-agent-eval-CY6qdlGV.d.ts → define-agent-eval-V1jQyCDR.d.ts} +102 -11
- package/dist/define-agent-eval-V1jQyCDR.d.ts.map +1 -0
- package/dist/{define-agent-eval-8h3lXXee.js → define-agent-eval-ox5McL6e.js} +331 -144
- package/dist/define-agent-eval-ox5McL6e.js.map +1 -0
- package/dist/{dspy-rlm-engine-CF0t2ITD.js → dspy-rlm-engine-Caz2pl4L.js} +3 -3
- package/dist/{dspy-rlm-engine-CF0t2ITD.js.map → dspy-rlm-engine-Caz2pl4L.js.map} +1 -1
- package/dist/{engine-DhFir3Ys.d.ts → engine-CvW_I72-.d.ts} +2 -2
- package/dist/{engine-DhFir3Ys.d.ts.map → engine-CvW_I72-.d.ts.map} +1 -1
- package/dist/experiment/index.d.ts +1 -4
- package/dist/experiment/index.d.ts.map +1 -1
- package/dist/{external-optimizer-process-BwITA9Jp.js → external-optimizer-process-CxnFL1hd.js} +2 -2
- package/dist/{external-optimizer-process-BwITA9Jp.js.map → external-optimizer-process-CxnFL1hd.js.map} +1 -1
- package/dist/{external-optimizer-subprocess-wBWeoG6A.js → external-optimizer-subprocess-CQi27uEI.js} +2 -2
- package/dist/{external-optimizer-subprocess-wBWeoG6A.js.map → external-optimizer-subprocess-CQi27uEI.js.map} +1 -1
- package/dist/fuzz.js +1 -1
- package/dist/fuzz.js.map +1 -1
- package/dist/hosted/index.d.ts +1 -1
- package/dist/{index-BQqOjerE.d.ts → index-BTrx5s8m.d.ts} +8 -9
- package/dist/index-BTrx5s8m.d.ts.map +1 -0
- package/dist/{index-D0Db5X-4.d.ts → index-Bn-nlnSV.d.ts} +4 -4
- package/dist/{index-D0Db5X-4.d.ts.map → index-Bn-nlnSV.d.ts.map} +1 -1
- package/dist/index-DKXuBPXf.d.ts +3840 -0
- package/dist/index-DKXuBPXf.d.ts.map +1 -0
- package/dist/index.d.ts +11 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -10
- package/dist/{kind-factory-gP6lDySe.js → kind-factory-BLvL-E44.js} +2 -2
- package/dist/{kind-factory-gP6lDySe.js.map → kind-factory-BLvL-E44.js.map} +1 -1
- package/dist/{llm-judge-BfqMFo4h.js → llm-judge-DmNaBrXB.js} +2541 -2435
- package/dist/llm-judge-DmNaBrXB.js.map +1 -0
- package/dist/{matrix-DGu8KhSs.d.ts → matrix-CJtXz1ky.d.ts} +2 -2
- package/dist/{matrix-DGu8KhSs.d.ts.map → matrix-CJtXz1ky.d.ts.map} +1 -1
- package/dist/multishot/golden/index.d.ts +1 -1
- package/dist/multishot/index.d.ts +2 -2
- package/dist/openapi.json +1 -1
- package/dist/{produced-state-D91uDvQw.js → produced-state-B8mw6zj9.js} +2 -2
- package/dist/{produced-state-D91uDvQw.js.map → produced-state-B8mw6zj9.js.map} +1 -1
- package/dist/rl.d.ts +1 -1
- package/dist/rl.d.ts.map +1 -1
- package/dist/rl.js.map +1 -1
- package/dist/{semantic-concept-judge-Dok7_35a.js → semantic-concept-judge-E3s_fEjB.js} +3 -3
- package/dist/{semantic-concept-judge-Dok7_35a.js.map → semantic-concept-judge-E3s_fEjB.js.map} +1 -1
- package/dist/{skillopt-optimization-method-DDw3v3gA.js → skillopt-optimization-method-f7399oGb.js} +5 -5
- package/dist/{skillopt-optimization-method-DDw3v3gA.js.map → skillopt-optimization-method-f7399oGb.js.map} +1 -1
- package/dist/statistical-heldout-Cqb73yE9.d.ts +1127 -0
- package/dist/statistical-heldout-Cqb73yE9.d.ts.map +1 -0
- package/dist/{store-otlp-Dow0pk_5.js → store-otlp-DV_H2HDu.js} +2 -2
- package/dist/{store-otlp-Dow0pk_5.js.map → store-otlp-DV_H2HDu.js.map} +1 -1
- package/dist/{store-tool-spans-CCZNsihA.d.ts → store-tool-spans-4o55ABER.d.ts} +3 -3
- package/dist/{store-tool-spans-CCZNsihA.d.ts.map → store-tool-spans-4o55ABER.d.ts.map} +1 -1
- package/dist/{store-tool-spans-CeNj_m2L.js → store-tool-spans-B9tjys_h.js} +3 -3
- package/dist/{store-tool-spans-CeNj_m2L.js.map → store-tool-spans-B9tjys_h.js.map} +1 -1
- package/dist/{task-failure-attributes-CZjZeBsY.js → task-failure-attributes-CUy9mkIY.js} +2 -2
- package/dist/{task-failure-attributes-CZjZeBsY.js.map → task-failure-attributes-CUy9mkIY.js.map} +1 -1
- package/dist/{tool-groups-Cp4Xdzrp.d.ts → tool-groups-DAe1t6zb.d.ts} +2 -2
- package/dist/tool-groups-DAe1t6zb.d.ts.map +1 -0
- package/dist/trace-repair/index.d.ts +1 -1
- package/dist/traces.d.ts +2 -2
- package/dist/traces.js +4 -4
- package/dist/{types-Ba5UQyVD.d.ts → types-BJz2CPTM.d.ts} +2 -2
- package/dist/{types-Ba5UQyVD.d.ts.map → types-BJz2CPTM.d.ts.map} +1 -1
- package/dist/{types-CiWITkGo.js → types-DQ0e2E7y.js} +2 -2
- package/dist/types-DQ0e2E7y.js.map +1 -0
- package/dist/{types-BDV4PiMR.d.ts → types-Dd1ejaeI.d.ts} +2 -2
- package/dist/{types-BDV4PiMR.d.ts.map → types-Dd1ejaeI.d.ts.map} +1 -1
- package/docs/campaign-proposers.md +42 -0
- package/package.json +1 -1
- package/dist/agent-profile-B9_GGsG8.d.ts +0 -84
- package/dist/agent-profile-B9_GGsG8.d.ts.map +0 -1
- package/dist/backend-integrity-CeuTgqsd.d.ts +0 -280
- package/dist/backend-integrity-CeuTgqsd.d.ts.map +0 -1
- package/dist/benchmark-BjLGkfnN.d.ts +0 -236
- package/dist/benchmark-BjLGkfnN.d.ts.map +0 -1
- package/dist/define-agent-eval-8h3lXXee.js.map +0 -1
- package/dist/define-agent-eval-CY6qdlGV.d.ts.map +0 -1
- package/dist/external-optimizer-contracts-CQCpyrIL.d.ts +0 -172
- package/dist/external-optimizer-contracts-CQCpyrIL.d.ts.map +0 -1
- package/dist/heldout-gate-Df5hsqmm.d.ts +0 -453
- package/dist/heldout-gate-Df5hsqmm.d.ts.map +0 -1
- package/dist/index-BQqOjerE.d.ts.map +0 -1
- package/dist/index-CFDffsKz.d.ts +0 -1135
- package/dist/index-CFDffsKz.d.ts.map +0 -1
- package/dist/llm-judge-BfqMFo4h.js.map +0 -1
- package/dist/power-preflight-Ptse_Kq7.d.ts +0 -117
- package/dist/power-preflight-Ptse_Kq7.d.ts.map +0 -1
- package/dist/pre-registration-BoI4ucR3.d.ts +0 -592
- package/dist/pre-registration-BoI4ucR3.d.ts.map +0 -1
- package/dist/promotion-policy-CvMda3kU.d.ts +0 -134
- package/dist/promotion-policy-CvMda3kU.d.ts.map +0 -1
- package/dist/proposal-findings-bko3GGy-.js.map +0 -1
- package/dist/provenance-CRY67X50.d.ts +0 -1995
- package/dist/provenance-CRY67X50.d.ts.map +0 -1
- package/dist/statistical-heldout-DTyB_6-1.d.ts +0 -295
- package/dist/statistical-heldout-DTyB_6-1.d.ts.map +0 -1
- package/dist/tool-groups-Cp4Xdzrp.d.ts.map +0 -1
- package/dist/types-CiWITkGo.js.map +0 -1
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
import { d as PairedBootstrapResult, i as PairedMcNemarEvidence, r as PairedDecisionStatistic, t as PairedDecisionMethod } from "./paired-promotion-decision-CGzg0cI_.js";
|
|
2
|
-
import { R as Scenario, h as GateContext, p as Gate, v as GateResult } from "./types-Ba5UQyVD.js";
|
|
3
|
-
import { i as Direction } from "./power-preflight-Ptse_Kq7.js";
|
|
4
|
-
//#region src/campaign/gates/promotion-policy.d.ts
|
|
5
|
-
/** Where an objective's per-cell scalar comes from. `composite` reads the
|
|
6
|
-
* judge's composite; `dimension` reads a named per-dimension score. */
|
|
7
|
-
type ObjectiveSource = {
|
|
8
|
-
kind: 'composite';
|
|
9
|
-
} | {
|
|
10
|
-
kind: 'dimension';
|
|
11
|
-
dimension: string;
|
|
12
|
-
};
|
|
13
|
-
interface PromotionObjective {
|
|
14
|
-
/** Stable label used in reports + `contributingGates`. */
|
|
15
|
-
name: string;
|
|
16
|
-
source: ObjectiveSource;
|
|
17
|
-
/** 'maximize' (quality dims) or 'minimize' (error/risk/length dims). Orients
|
|
18
|
-
* the paired delta so a positive bootstrap always means "candidate better". */
|
|
19
|
-
direction: Direction;
|
|
20
|
-
/** The good-direction paired-delta CI lower bound must EXCEED this to count
|
|
21
|
-
* as a significant gain on this axis. Interpreted in the judge's native
|
|
22
|
-
* scale. Default 0 (⇒ "confidently better"). */
|
|
23
|
-
gainThreshold?: number;
|
|
24
|
-
/** A floor breach (regression) is declared when the good-direction CI lower
|
|
25
|
-
* bound is below −floorTolerance, or when the exact small-sample test proves
|
|
26
|
-
* a drop past it. When omitted it auto-scales off observed magnitudes
|
|
27
|
-
* (0.05 on [0,1], 5 on 0-100), matching `dimensionRegressions`. */
|
|
28
|
-
floorTolerance?: number;
|
|
29
|
-
}
|
|
30
|
-
/** Per-axis verdict from the good-direction paired bootstrap. */
|
|
31
|
-
type AxisVerdict = 'improved' | 'regressed' | 'flat' | 'few_runs';
|
|
32
|
-
interface AxisEvidence {
|
|
33
|
-
name: string;
|
|
34
|
-
source: ObjectiveSource;
|
|
35
|
-
direction: Direction;
|
|
36
|
-
/** Paired bootstrap on the GOOD-DIRECTION delta (oriented by `direction`):
|
|
37
|
-
* a positive value means the candidate is better on this axis.
|
|
38
|
-
*
|
|
39
|
-
* DIAGNOSTIC on a pass/fail axis: there the verdict is decided on Tango's
|
|
40
|
-
* score interval instead, because a percentile bootstrap over a three-atom
|
|
41
|
-
* delta lattice is not a valid interval at the nonzero margin `floorTolerance`
|
|
42
|
-
* and `gainThreshold` create. `ci` carries the interval that decided. */
|
|
43
|
-
bootstrap: PairedBootstrapResult;
|
|
44
|
-
/** Which paired statistic `bootstrap.low`/`.high` bracket. `'mean'` unless the
|
|
45
|
-
* caller asked for the median — on a pass/fail axis the median and its whole
|
|
46
|
-
* CI are pinned at 0 by tie domination and can see neither a gain nor a
|
|
47
|
-
* regression. `bootstrap.median` still carries the median point estimate. */
|
|
48
|
-
bootstrapStatistic: 'median' | 'mean';
|
|
49
|
-
/** The interval the axis verdict was actually decided on, good-direction and
|
|
50
|
-
* in the axis's native units. */
|
|
51
|
-
ci: {
|
|
52
|
-
low: number;
|
|
53
|
-
high: number;
|
|
54
|
-
};
|
|
55
|
-
/** Which estimator produced `ci`. */
|
|
56
|
-
decisionStatistic: PairedDecisionStatistic;
|
|
57
|
-
/** McNemar's exact evidence on a pass/fail axis; null otherwise. */
|
|
58
|
-
mcnemar: PairedMcNemarEvidence | null;
|
|
59
|
-
/** `ci` has zero width — no evidence in either direction, so the axis is
|
|
60
|
-
* neither improved nor regressed however the point estimate sits. */
|
|
61
|
-
indeterminate: boolean;
|
|
62
|
-
/** Paired observations contributing to this axis. */
|
|
63
|
-
n: number;
|
|
64
|
-
minimumRequired: number;
|
|
65
|
-
decisionMethod: PairedDecisionMethod;
|
|
66
|
-
gainThreshold: number;
|
|
67
|
-
floorTolerance: number;
|
|
68
|
-
verdict: AxisVerdict;
|
|
69
|
-
}
|
|
70
|
-
interface EvidenceVector {
|
|
71
|
-
/** One entry per objective — NOTHING averaged across axes. */
|
|
72
|
-
axes: AxisEvidence[];
|
|
73
|
-
/** Smallest paired n across axes that produced observations — the binding
|
|
74
|
-
* evidence-sufficiency constraint. 0 when no axis produced observations. */
|
|
75
|
-
minN: number;
|
|
76
|
-
/** Aggregate per-side cost from the gate context (a constraint input, not a
|
|
77
|
-
* CI axis — see the module header). */
|
|
78
|
-
cost: {
|
|
79
|
-
candidate: number;
|
|
80
|
-
baseline: number;
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
/** A promotion strategy: a pure function from the evidence vector to a verdict.
|
|
84
|
-
* Many policies can run over the same `EvidenceVector` and disagree — that's
|
|
85
|
-
* the point (competing strategies, shared evidence). */
|
|
86
|
-
type PromotionPolicy = (ev: EvidenceVector) => GateResult;
|
|
87
|
-
interface BuildEvidenceVectorOptions {
|
|
88
|
-
/** Minimum paired observations before an axis can claim significance; below
|
|
89
|
-
* it the axis is `few_runs`. The exact small-sample test may require more
|
|
90
|
-
* observations at the selected confidence. */
|
|
91
|
-
minProductiveRuns?: number;
|
|
92
|
-
/** Confidence level for every axis bootstrap. Default 0.95. */
|
|
93
|
-
confidence?: number;
|
|
94
|
-
/** Bootstrap resamples. Default 2000. */
|
|
95
|
-
resamples?: number;
|
|
96
|
-
/** Fixed bootstrap seed for a deterministic, reproducible verdict. Default 1337. */
|
|
97
|
-
seed?: number;
|
|
98
|
-
/** Paired statistic every axis CI is computed on. Default `'mean'` — see
|
|
99
|
-
* {@link DECISION_PAIRED_DELTA_STATISTIC} for why the median is not. */
|
|
100
|
-
statistic?: 'mean' | 'median';
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* The Evidence Bus. For each objective, pair candidate vs baseline by full
|
|
104
|
-
* cellId and bootstrap a CI on the good-direction paired delta. Reuses the
|
|
105
|
-
* exact `pairHoldout` + `pairedBootstrap` machinery the held-out gate uses, so
|
|
106
|
-
* a single source of truth governs pairing granularity + scale handling.
|
|
107
|
-
*/
|
|
108
|
-
declare function buildEvidenceVector<TArtifact, TScenario extends Scenario>(ctx: GateContext<TArtifact, TScenario>, objectives: PromotionObjective[], opts?: BuildEvidenceVectorOptions): EvidenceVector;
|
|
109
|
-
/**
|
|
110
|
-
* The default strategy: symmetric multi-objective Pareto significance. Ship iff
|
|
111
|
-
* the candidate weakly dominates the baseline at the confidence level — no axis
|
|
112
|
-
* credibly worse AND ≥1 axis credibly better. Floor breach on any axis → hold
|
|
113
|
-
* (anti-Goodhart, dominates everything). Insufficient evidence on any axis →
|
|
114
|
-
* need_more_work. Statistically equivalent → hold (never ship noise).
|
|
115
|
-
*/
|
|
116
|
-
declare const paretoPolicy: PromotionPolicy;
|
|
117
|
-
interface ParetoSignificanceGateOptions extends BuildEvidenceVectorOptions {
|
|
118
|
-
/** The objective vector. Every axis is both a gain source and a safety floor. */
|
|
119
|
-
objectives: PromotionObjective[];
|
|
120
|
-
/** Strategy applied to the evidence vector. Default `paretoPolicy`. Override
|
|
121
|
-
* to run a stricter/looser strategy over the SAME bus (competing policies). */
|
|
122
|
-
policy?: PromotionPolicy;
|
|
123
|
-
/** Override the gate name in reports. */
|
|
124
|
-
name?: string;
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Wrap the bus + a policy as a `Gate`. Plugs into the existing
|
|
128
|
-
* `runImprovementLoop({ gate })` slot and composes via `composeGate`; default
|
|
129
|
-
* loop behavior is unchanged because consumers opt in by passing this gate.
|
|
130
|
-
*/
|
|
131
|
-
declare function paretoSignificanceGate<TArtifact = unknown, TScenario extends Scenario = Scenario>(options: ParetoSignificanceGateOptions): Gate<TArtifact, TScenario>;
|
|
132
|
-
//#endregion
|
|
133
|
-
export { ObjectiveSource as a, PromotionPolicy as c, paretoSignificanceGate as d, EvidenceVector as i, buildEvidenceVector as l, AxisVerdict as n, ParetoSignificanceGateOptions as o, BuildEvidenceVectorOptions as r, PromotionObjective as s, AxisEvidence as t, paretoPolicy as u };
|
|
134
|
-
//# sourceMappingURL=promotion-policy-CvMda3kU.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"promotion-policy-CvMda3kU.d.ts","names":[],"sources":["../src/campaign/gates/promotion-policy.ts"],"mappings":";;;;;;KA0CY;EAAoB;;EAAwB;EAAmB;;UAE1D;;EAEf;EACA,QAAQ;;;EAGR,WAAW;;;;EAIX;;;;;EAKA;;;KAIU;UAEK;EACf;EACA,QAAQ;EACR,WAAW;;;;;;;;EAQX,WAAW;;;;;EAKX;;;EAGA;IAAM;IAAa;;;EAEnB,mBAAmB;;EAEnB,SAAS;;;EAGT;;EAEA;EACA;EACA,gBAAgB;EAChB;EACA;EACA,SAAS;;UAGM;;EAEf,MAAM;;;EAGN;;;EAGA;IAAQ;IAAmB;;;;;;KAMjB,mBAAmB,IAAI,mBAAmB;UAErC;;;;EAIf;;EAEA;;EAEA;;EAEA;;;EAGA;;;;;;;;iBASc,oBAAoB,WAAW,kBAAkB,UAC/D,KAAK,YAAY,WAAW,YAC5B,YAAY,sBACZ,OAAM,6BACL;;;;;;;;cAwIU,cAAc;UAiFV,sCAAsC;;EAErD,YAAY;;;EAGZ,SAAS;;EAET;;;;;;;iBAQc,uBAAuB,qBAAqB,kBAAkB,WAAW,UACvF,SAAS,gCACR,KAAK,WAAW"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"proposal-findings-bko3GGy-.js","names":[],"sources":["../src/abort-signal.ts","../src/analyst/proposal-findings.ts"],"sourcesContent":["/** Combine active cancellation sources without wrapping a single source. */\nexport function combineAbortSignals(\n ...signals: Array<AbortSignal | undefined>\n): AbortSignal | undefined {\n const active = [\n ...new Set(signals.filter((signal): signal is AbortSignal => signal !== undefined)),\n ]\n if (active.length === 0) return undefined\n if (active.length === 1) return active[0]\n return AbortSignal.any(active)\n}\n","import { z } from 'zod'\nimport type { ProposalFinding } from './types'\n\nconst ProposalFindingSchema = z\n .object({\n schema_version: z.literal('1.0.0'),\n finding_id: z.string().min(1),\n analyst_id: z.string().min(1),\n produced_at: z.string().min(1),\n severity: z.enum(['critical', 'high', 'medium', 'low', 'info']),\n area: z.string().min(1),\n claim: z.string().min(1),\n rationale: z.string().optional(),\n evidence_refs: z.array(\n z\n .object({\n kind: z.enum(['span', 'event', 'artifact', 'finding', 'metric']),\n uri: z.string().min(1),\n excerpt: z.string().optional(),\n })\n .strict(),\n ),\n recommended_action: z.string().optional(),\n validation_plan: z.string().optional(),\n confidence: z.number().min(0).max(1),\n subject: z.string().optional(),\n derived_from_judge: z.boolean().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n proposal_origin: z.enum(['search', 'production']),\n })\n .strict() satisfies z.ZodType<ProposalFinding>\n\n/** True when a finding names a source candidate generation may learn from. */\nexport function isProposalFinding(finding: unknown): finding is ProposalFinding {\n return ProposalFindingSchema.safeParse(finding).success\n}\n\n/**\n * Reject findings whose source has not been explicitly admitted for candidate\n * generation. Search feedback and observed production behavior are allowed;\n * final evaluation data has no allowed origin.\n */\nexport function assertProposalFindings(\n findings: unknown,\n context = 'proposal findings',\n): ReadonlyArray<ProposalFinding> {\n if (!Array.isArray(findings)) {\n throw new TypeError(`${context}: expected an array`)\n }\n const rejected = findings.flatMap((finding, index) =>\n isProposalFinding(finding) ? [] : [findingLabel(finding, index)],\n )\n if (rejected.length > 0) {\n throw new Error(\n `${context}: every finding must match AnalystFinding and declare ` +\n `proposal_origin as search or production. ` +\n `Rejected findings: [${rejected.join(', ')}].`,\n )\n }\n return findings as ReadonlyArray<ProposalFinding>\n}\n\nfunction findingLabel(finding: unknown, index: number): string {\n if (typeof finding !== 'object' || finding === null) return `index ${index}`\n const id = (finding as { finding_id?: unknown }).finding_id\n return typeof id === 'string' && id.length > 0 ? id : `index ${index}`\n}\n"],"mappings":";;;AACA,SAAgB,oBACd,GAAG,SACsB;CACzB,MAAM,SAAS,CACb,GAAG,IAAI,IAAI,QAAQ,QAAQ,WAAkC,WAAW,KAAA,CAAS,CAAC,CACpF;CACA,IAAI,OAAO,WAAW,GAAG,OAAO,KAAA;CAChC,IAAI,OAAO,WAAW,GAAG,OAAO,OAAO;CACvC,OAAO,YAAY,IAAI,MAAM;AAC/B;;;ACPA,MAAM,wBAAwB,EAC3B,OAAO;CACN,gBAAgB,EAAE,QAAQ,OAAO;CACjC,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;CAC5B,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;CAC5B,aAAa,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;CAC7B,UAAU,EAAE,KAAK;EAAC;EAAY;EAAQ;EAAU;EAAO;CAAM,CAAC;CAC9D,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;CACtB,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;CACvB,WAAW,EAAE,OAAO,CAAC,CAAC,SAAS;CAC/B,eAAe,EAAE,MACf,EACG,OAAO;EACN,MAAM,EAAE,KAAK;GAAC;GAAQ;GAAS;GAAY;GAAW;EAAQ,CAAC;EAC/D,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;EACrB,SAAS,EAAE,OAAO,CAAC,CAAC,SAAS;CAC/B,CAAC,CAAC,CACD,OAAO,CACZ;CACA,oBAAoB,EAAE,OAAO,CAAC,CAAC,SAAS;CACxC,iBAAiB,EAAE,OAAO,CAAC,CAAC,SAAS;CACrC,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;CACnC,SAAS,EAAE,OAAO,CAAC,CAAC,SAAS;CAC7B,oBAAoB,EAAE,QAAQ,CAAC,CAAC,SAAS;CACzC,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS;CACrD,iBAAiB,EAAE,KAAK,CAAC,UAAU,YAAY,CAAC;AAClD,CAAC,CAAC,CACD,OAAO;;AAGV,SAAgB,kBAAkB,SAA8C;CAC9E,OAAO,sBAAsB,UAAU,OAAO,CAAC,CAAC;AAClD;;;;;;AAOA,SAAgB,uBACd,UACA,UAAU,qBACsB;CAChC,IAAI,CAAC,MAAM,QAAQ,QAAQ,GACzB,MAAM,IAAI,UAAU,GAAG,QAAQ,oBAAoB;CAErD,MAAM,WAAW,SAAS,SAAS,SAAS,UAC1C,kBAAkB,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,SAAS,KAAK,CAAC,CACjE;CACA,IAAI,SAAS,SAAS,GACpB,MAAM,IAAI,MACR,GAAG,QAAQ,qHAEc,SAAS,KAAK,IAAI,EAAE,GAC/C;CAEF,OAAO;AACT;AAEA,SAAS,aAAa,SAAkB,OAAuB;CAC7D,IAAI,OAAO,YAAY,YAAY,YAAY,MAAM,OAAO,SAAS;CACrE,MAAM,KAAM,QAAqC;CACjD,OAAO,OAAO,OAAO,YAAY,GAAG,SAAS,IAAI,KAAK,SAAS;AACjE"}
|