@duckcodeailabs/dql-cli 1.14.1 → 1.14.3-rc.1
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/dist/args.d.ts +4 -0
- package/dist/args.d.ts.map +1 -1
- package/dist/args.js +16 -0
- package/dist/args.js.map +1 -1
- package/dist/assets/dql-notebook/assets/{AgentLogPage-BPz-UWFh.js → AgentLogPage-Jbyb4so-.js} +1 -1
- package/dist/assets/dql-notebook/assets/{AiBuildDialog-BEl53WA_.js → AiBuildDialog-Du07X1qO.js} +1 -1
- package/dist/assets/dql-notebook/assets/{AiBuildResult-B4yfGTTZ.js → AiBuildResult-xKtGthWv.js} +1 -1
- package/dist/assets/dql-notebook/assets/{AiSidePanel-CSZAAvuD.js → AiSidePanel-CE_L04dK.js} +1 -1
- package/dist/assets/dql-notebook/assets/AnalyticsHome-CiUE10uF.js +6 -0
- package/dist/assets/dql-notebook/assets/{AppsView-DQOwU9Cg.js → AppsView-DlNaTuwD.js} +30 -35
- package/dist/assets/dql-notebook/assets/AskObservabilityPage-DracZPI9.js +1 -0
- package/dist/assets/dql-notebook/assets/AskTracePage-CSMoMw9a.js +8 -0
- package/dist/assets/dql-notebook/assets/{BlockStudio-B4ap0GdY.js → BlockStudio-DQS5Hcq9.js} +9 -14
- package/dist/assets/dql-notebook/assets/BusinessArtifactView-CqV4i9l_.js +1 -0
- package/dist/assets/dql-notebook/assets/{DbtFirstModelingPage-D72byb2g.js → DbtFirstModelingPage-JKhB_Y2H.js} +3 -3
- package/dist/assets/dql-notebook/assets/{GitPage-lQb1uXH2.js → GitPage-DjaNp0o3.js} +1 -1
- package/dist/assets/dql-notebook/assets/{GlobalAiRail-CVECf6Xj.js → GlobalAiRail-CsV3zlc8.js} +1 -1
- package/dist/assets/dql-notebook/assets/{GovernedContextPage-trOyMCY6.js → GovernedContextPage-uXUHUOIJ.js} +3 -3
- package/dist/assets/dql-notebook/assets/{HelpDocsPage-D8hLS5lE.js → HelpDocsPage-Hbh9IeYB.js} +1 -1
- package/dist/assets/dql-notebook/assets/{HomePage-eIkfBIep.js → HomePage-CRRl-R_v.js} +1 -1
- package/dist/assets/dql-notebook/assets/LineageDAG-OMUP2sbl.js +1 -0
- package/dist/assets/dql-notebook/assets/LineageDetailView-C964BLuV.js +1 -0
- package/dist/assets/dql-notebook/assets/LineageDrawer-CzY0nfpD.js +1 -0
- package/dist/assets/dql-notebook/assets/{LineagePathBreadcrumb-CviIf8PN.js → LineagePathBreadcrumb-0Gi-Fm1B.js} +1 -1
- package/dist/assets/dql-notebook/assets/MiniLineageGraph-wn0wLc9m.js +1 -0
- package/dist/assets/dql-notebook/assets/{NewBlockModal-DbCQg-pj.js → NewBlockModal-kMAzk91d.js} +1 -1
- package/dist/assets/dql-notebook/assets/{NewNotebookModal-5Vp6XiuK.js → NewNotebookModal-D_cWd_6M.js} +1 -1
- package/dist/assets/dql-notebook/assets/{NotebookEditor-DjqJS44s.js → NotebookEditor-Bax0lxaz.js} +25 -30
- package/dist/assets/dql-notebook/assets/{ReadinessPage-BHGrC5ho.js → ReadinessPage-DEUIXQQY.js} +1 -1
- package/dist/assets/dql-notebook/assets/{SetupOnboarding-BfS9Tdx-.js → SetupOnboarding-CyE-Ex41.js} +1 -1
- package/dist/assets/dql-notebook/assets/{SkillsPage-BFH21wSj.js → SkillsPage-QgvKGPxE.js} +1 -1
- package/dist/assets/dql-notebook/assets/{TrustBadge-zm6g_SxZ.js → TrustBadge-D5CGp0cu.js} +1 -1
- package/dist/assets/dql-notebook/assets/UnifiedAgentRunPanel-BjsTE6yf.js +89 -0
- package/dist/assets/dql-notebook/assets/{answer-to-notebook-DPhxIEzF.js → answer-to-notebook-tACdCsTV.js} +1 -1
- package/dist/assets/dql-notebook/assets/{arrow-left-DNEb86Xc.js → arrow-left-CF6wxXU5.js} +1 -1
- package/dist/assets/dql-notebook/assets/{arrow-right-DpPWbwaD.js → arrow-right-C7G3M_S8.js} +1 -1
- package/dist/assets/dql-notebook/assets/{book-open-text-D7s5jo4X.js → book-open-text-DDBO8G7L.js} +1 -1
- package/dist/assets/dql-notebook/assets/chevron-left-DxajrX2v.js +6 -0
- package/dist/assets/dql-notebook/assets/{circle-x-Db3dXKg7.js → circle-x-HBvXjnT6.js} +1 -1
- package/dist/assets/dql-notebook/assets/clock-3-CJIdsPLt.js +6 -0
- package/dist/assets/dql-notebook/assets/dagre.esm-B6nvU4OB.js +1 -0
- package/dist/assets/dql-notebook/assets/{external-link-BxwXitO_.js → external-link-WciAU8Bu.js} +1 -1
- package/dist/assets/dql-notebook/assets/{grip-vertical-Dt4lkWRi.js → grip-vertical-DVu7ok6x.js} +1 -1
- package/dist/assets/dql-notebook/assets/index-B_kaoARS.css +1 -0
- package/dist/assets/dql-notebook/assets/{index-DKo-bwNw.js → index-D3wnucQC.js} +133 -128
- package/dist/assets/dql-notebook/assets/{link-2-Dfo2P6wi.js → link-2-C6uQx50X.js} +1 -1
- package/dist/assets/dql-notebook/assets/{list-tree-DiTmIWAL.js → list-tree-DapsIuQB.js} +1 -1
- package/dist/assets/dql-notebook/assets/{minimize-2-CMTAkPzL.js → minimize-2-BlVoipnT.js} +1 -1
- package/dist/assets/dql-notebook/assets/{panel-right-open-DwYr7FW4.js → panel-right-open-DcnKWxfx.js} +1 -1
- package/dist/assets/dql-notebook/assets/{play-BXhHYQ4x.js → play-CNuRuaAs.js} +1 -1
- package/dist/assets/dql-notebook/assets/{rotate-ccw-BNi6F8pl.js → rotate-ccw-B2p953Zh.js} +1 -1
- package/dist/assets/dql-notebook/assets/{semantic-fields-CNOGysAy.js → semantic-fields-2fWgkTJc.js} +1 -1
- package/dist/assets/dql-notebook/assets/{sliders-horizontal-Ec5MUMUW.js → sliders-horizontal-DwRTu1w4.js} +1 -1
- package/dist/assets/dql-notebook/assets/{star-B9leDkp_.js → star-Cbaj4F3i.js} +1 -1
- package/dist/assets/dql-notebook/assets/style-NlN9F6JE.js +23 -0
- package/dist/assets/dql-notebook/assets/{triangle-alert-BefTYCzx.js → triangle-alert-BPHvH1wA.js} +1 -1
- package/dist/assets/dql-notebook/assets/{upload-SPiOM2tQ.js → upload-DIqK0KE1.js} +1 -1
- package/dist/assets/dql-notebook/assets/{usePersistedAgentThreadId-C4foXeiQ.js → usePersistedAgentThreadId-DpQXOEDw.js} +1 -1
- package/dist/assets/dql-notebook/assets/{user-round-comGmyw-.js → user-round-DukNupB_.js} +1 -1
- package/dist/assets/dql-notebook/assets/{wand-sparkles-BffR4dF8.js → wand-sparkles-CAwLX0b9.js} +1 -1
- package/dist/assets/dql-notebook/assets/{workflow-ChmPTEzH.js → workflow-bOT-NqdO.js} +1 -1
- package/dist/assets/dql-notebook/assets/{wrench-DovaG_ze.js → wrench-1m0_kcza.js} +1 -1
- package/dist/assets/dql-notebook/assets/{x-nRx91AgW.js → x-fp82BETM.js} +1 -1
- package/dist/assets/dql-notebook/index.html +2 -2
- package/dist/commands/agent-eval-cassette.d.ts +97 -6
- package/dist/commands/agent-eval-cassette.d.ts.map +1 -1
- package/dist/commands/agent-eval-cassette.js +165 -22
- package/dist/commands/agent-eval-cassette.js.map +1 -1
- package/dist/commands/agent-eval-runtime.d.ts +23 -2
- package/dist/commands/agent-eval-runtime.d.ts.map +1 -1
- package/dist/commands/agent-eval-runtime.js +19 -2
- package/dist/commands/agent-eval-runtime.js.map +1 -1
- package/dist/commands/agent-trace.d.ts +3 -0
- package/dist/commands/agent-trace.d.ts.map +1 -0
- package/dist/commands/agent-trace.js +169 -0
- package/dist/commands/agent-trace.js.map +1 -0
- package/dist/commands/agent.d.ts +37 -5
- package/dist/commands/agent.d.ts.map +1 -1
- package/dist/commands/agent.js +534 -84
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/compile.d.ts +13 -1
- package/dist/commands/compile.d.ts.map +1 -1
- package/dist/commands/compile.js +36 -4
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/notebook.d.ts +2 -0
- package/dist/commands/notebook.d.ts.map +1 -1
- package/dist/commands/notebook.js +4 -0
- package/dist/commands/notebook.js.map +1 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +11 -3
- package/dist/commands/sync.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/llm/providers/dql-agent-provider.d.ts +29 -2
- package/dist/llm/providers/dql-agent-provider.d.ts.map +1 -1
- package/dist/llm/providers/dql-agent-provider.js +1008 -144
- package/dist/llm/providers/dql-agent-provider.js.map +1 -1
- package/dist/llm/types.d.ts +48 -1
- package/dist/llm/types.d.ts.map +1 -1
- package/dist/local-runtime.d.ts +271 -33
- package/dist/local-runtime.d.ts.map +1 -1
- package/dist/local-runtime.js +3658 -546
- package/dist/local-runtime.js.map +1 -1
- package/dist/package.json +10 -10
- package/dist/providers/oauth/claude-oauth.d.ts.map +1 -1
- package/dist/providers/oauth/claude-oauth.js +52 -18
- package/dist/providers/oauth/claude-oauth.js.map +1 -1
- package/dist/providers/oauth/codex-oauth.d.ts.map +1 -1
- package/dist/providers/oauth/codex-oauth.js +72 -44
- package/dist/providers/oauth/codex-oauth.js.map +1 -1
- package/dist/providers/subscription-cli.d.ts +20 -0
- package/dist/providers/subscription-cli.d.ts.map +1 -1
- package/dist/providers/subscription-cli.js +69 -11
- package/dist/providers/subscription-cli.js.map +1 -1
- package/package.json +10 -10
- package/dist/assets/dql-notebook/assets/AnalyticsHome-D5P6Ujwi.js +0 -6
- package/dist/assets/dql-notebook/assets/BusinessArtifactView-BIfNI-0S.js +0 -1
- package/dist/assets/dql-notebook/assets/LineageDAG-CSqcbDrE.js +0 -1
- package/dist/assets/dql-notebook/assets/LineageDetailView-DJZZjZu-.js +0 -1
- package/dist/assets/dql-notebook/assets/LineageDrawer-BcIipIc3.js +0 -1
- package/dist/assets/dql-notebook/assets/MiniLineageGraph-vH_MY_Ju.js +0 -1
- package/dist/assets/dql-notebook/assets/UnifiedAgentRunPanel--oxmjlgr.js +0 -88
- package/dist/assets/dql-notebook/assets/dagre.esm-C7pppQ1a.js +0 -23
- package/dist/assets/dql-notebook/assets/index-B3shyZsg.css +0 -1
- /package/dist/assets/dql-notebook/assets/{dagre-BZV40eAE.css → style-BZV40eAE.css} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{R as te,j as r,
|
|
1
|
+
import{R as te,j as r,ba as Ye,c as le,r as R,t as q,u as Ht,a as Ot,aL as Ze,L as qt,f as Ut,l as Vt,S as Ge,d as Qt,e as Yt}from"./index-D3wnucQC.js";import{T as Zt}from"./TrustBadge-D5CGp0cu.js";import{R as Gt,G as Xt}from"./AiBuildResult-xKtGthWv.js";import{W as Kt}from"./wrench-1m0_kcza.js";const Jt={value:"Value",block:"Certified block",term:"Business term",metric:"Metric",dimension:"Dimension",model:"dbt model",source:"Source table",consumer:"Used by"};function Xe(e){const t=(e??"").toLowerCase();return t==="certified"?"success":t==="deprecated"?"neutral":t.includes("review")||t==="draft"||t==="pending"?"warning":"neutral"}function Ct({walk:e,defaultOpen:t=!1,triggerLabel:n}){const[o,i]=te.useState(t),s=Math.min(e.steps.length,2),[l,c]=te.useState(s),a=()=>c(s),d=e.steps.slice(0,l),u=e.steps.length-l;return r.jsxs("div",{style:{border:"1px solid var(--border-subtle, rgba(127,127,127,0.25))",borderRadius:8,background:"var(--bg-1, transparent)",overflow:"hidden"},children:[r.jsxs("button",{type:"button","aria-expanded":o,onClick:()=>{i(f=>!f),o&&a()},style:{width:"100%",display:"flex",alignItems:"center",justifyContent:"space-between",gap:8,border:0,background:"transparent",color:"var(--text-secondary, inherit)",cursor:"pointer",padding:"8px 11px",font:"inherit",fontSize:12,fontWeight:700},children:[r.jsxs("span",{style:{display:"flex",alignItems:"center",gap:7},children:[r.jsx("span",{"aria-hidden":!0,style:{transform:o?"rotate(90deg)":"none",transition:"transform 120ms",display:"inline-block"},children:"▸"}),n??"Why?"]}),r.jsx("span",{style:{fontSize:11,color:"var(--text-tertiary, inherit)",fontWeight:600},children:o?"Hide derivation":"Show how this was derived"})]}),o&&r.jsxs("div",{style:{padding:"2px 11px 11px",display:"flex",flexDirection:"column",gap:10},children:[r.jsx("div",{style:{fontSize:12.5,lineHeight:1.5,color:"var(--text-primary, inherit)"},children:e.summary}),(e.trustLabel||e.freshness)&&r.jsxs("div",{style:{display:"flex",gap:6,flexWrap:"wrap",alignItems:"center"},children:[e.trustLabel&&r.jsx(Ye,{tone:Xe(e.trustLabel),children:Ke(e.trustLabel)}),e.freshness&&r.jsxs("span",{style:{fontSize:11,color:"var(--text-tertiary, inherit)"},children:["Fresh as of ",en(e.freshness)]})]}),r.jsx("ol",{style:{listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"column",gap:7},children:d.map((f,h)=>r.jsxs("li",{style:{display:"flex",gap:9,alignItems:"flex-start",paddingLeft:2},children:[r.jsx("span",{"aria-hidden":!0,style:{marginTop:3,width:7,height:7,borderRadius:999,flexShrink:0,background:"var(--accent, currentColor)",opacity:.7}}),r.jsxs("div",{style:{minWidth:0,display:"flex",flexDirection:"column",gap:2},children:[r.jsxs("div",{style:{display:"flex",gap:6,alignItems:"center",flexWrap:"wrap"},children:[r.jsx("span",{style:{fontSize:10,fontWeight:700,textTransform:"uppercase",letterSpacing:"0.04em",color:"var(--text-tertiary, inherit)"},children:Jt[f.kind]}),r.jsx("span",{style:{fontSize:12.5,fontWeight:700,color:"var(--text-primary, inherit)",overflowWrap:"anywhere"},children:f.name}),f.status&&r.jsx(Ye,{tone:Xe(f.status),children:Ke(f.status)})]}),(f.owner||f.detail)&&r.jsxs("div",{style:{fontSize:11.5,color:"var(--text-secondary, inherit)",lineHeight:1.45},children:[f.owner&&r.jsxs("span",{children:["Owner: ",f.owner,". "]}),f.detail]})]})]},`${f.kind}-${f.name}-${h}`))}),u>0&&r.jsxs("button",{type:"button",onClick:()=>c(f=>Math.min(e.steps.length,f+1)),style:{alignSelf:"flex-start",border:"1px solid var(--border-default, rgba(127,127,127,0.3))",borderRadius:6,background:"transparent",color:"var(--accent, inherit)",cursor:"pointer",padding:"4px 9px",fontSize:11,fontWeight:700},children:["Show next step (",u," more)"]}),e.caveats&&e.caveats.length>0&&r.jsxs("div",{style:{borderLeft:"3px solid var(--status-warning, #d29922)",background:"var(--status-warning-bg, rgba(210,153,34,0.08))",borderRadius:6,padding:"8px 10px",display:"flex",flexDirection:"column",gap:4},children:[r.jsx("span",{style:{fontSize:10,fontWeight:800,textTransform:"uppercase",letterSpacing:"0.04em",color:"var(--status-warning, inherit)"},children:"Caveats"}),e.caveats.map((f,h)=>r.jsx("span",{style:{fontSize:11.5,color:"var(--text-secondary, inherit)",lineHeight:1.45},children:f},h))]})]})]})}function Ke(e){return e.replace(/[_-]+/g," ").replace(/\b\w/g,t=>t.toUpperCase())}function en(e){const t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleDateString()}/**
|
|
2
2
|
* @license lucide-react v0.563.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
8
8
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
9
9
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600;700&family=Kalam:wght@400;700&family=Caveat:wght@400;600;700&display=swap" rel="stylesheet" />
|
|
10
|
-
<script type="module" crossorigin src="/assets/index-
|
|
10
|
+
<script type="module" crossorigin src="/assets/index-D3wnucQC.js"></script>
|
|
11
11
|
<link rel="modulepreload" crossorigin href="/assets/react-CRB3T2We.js">
|
|
12
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
12
|
+
<link rel="stylesheet" crossorigin href="/assets/index-B_kaoARS.css">
|
|
13
13
|
</head>
|
|
14
14
|
<body>
|
|
15
15
|
<div id="root"></div>
|
|
@@ -6,17 +6,97 @@ export interface CassetteToolCall {
|
|
|
6
6
|
name: string;
|
|
7
7
|
args: unknown;
|
|
8
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* How this response entered the cassette store. `providerName` is part of the
|
|
11
|
+
* dispatch fingerprint; it is not itself a claim that the response was
|
|
12
|
+
* recorded from that provider.
|
|
13
|
+
*/
|
|
14
|
+
export type CassetteProvenance = {
|
|
15
|
+
kind: 'recorded_provider';
|
|
16
|
+
replayClassification: 'recorded_provider';
|
|
17
|
+
providerQuality: 'eligible';
|
|
18
|
+
} | {
|
|
19
|
+
kind: 'migrated_legacy_deterministic_fixture';
|
|
20
|
+
sourceLegacyKey: string;
|
|
21
|
+
replayClassification: 'orchestration_replay_only';
|
|
22
|
+
providerQuality: 'excluded';
|
|
23
|
+
} | {
|
|
24
|
+
/**
|
|
25
|
+
* A deliberately authored response over the checked-in sanitized
|
|
26
|
+
* fixture. It exercises replay/orchestration only; it is never presented
|
|
27
|
+
* as a live-provider response or provider-quality evidence.
|
|
28
|
+
*/
|
|
29
|
+
kind: 'synthetic_deterministic_orchestration_fixture';
|
|
30
|
+
replayClassification: 'orchestration_replay_only';
|
|
31
|
+
providerQuality: 'excluded';
|
|
32
|
+
createdAt: string;
|
|
33
|
+
creationMethod: 'sanitized_fixture_sql';
|
|
34
|
+
source: 'current_scoped_runtime_dispatch';
|
|
35
|
+
};
|
|
9
36
|
export interface CassetteEntry {
|
|
10
37
|
key: string;
|
|
11
38
|
operation: 'generate' | 'generate_with_tools';
|
|
12
|
-
/**
|
|
13
|
-
|
|
39
|
+
/**
|
|
40
|
+
* Legacy timestamp for a response recorded from a provider or imported from
|
|
41
|
+
* an older cassette. Synthetic fixtures use `createdAt` instead so they do
|
|
42
|
+
* not imply a live provider recording.
|
|
43
|
+
*/
|
|
44
|
+
recordedAt?: string;
|
|
45
|
+
/** Creation timestamp for an explicitly synthetic deterministic fixture. */
|
|
46
|
+
createdAt?: string;
|
|
14
47
|
providerName: string;
|
|
15
48
|
/** The model's final text. */
|
|
16
49
|
text: string;
|
|
17
50
|
/** Tool calls the model made, in order (generate_with_tools only). */
|
|
18
51
|
toolCalls?: CassetteToolCall[];
|
|
52
|
+
/**
|
|
53
|
+
* Provenance is additive so historical entries remain readable. Entries
|
|
54
|
+
* without it are deliberately excluded from real-provider quality claims.
|
|
55
|
+
*/
|
|
56
|
+
provenance?: CassetteProvenance;
|
|
57
|
+
/**
|
|
58
|
+
* V2 stores only hashes and structural dispatch facts. It never stores a
|
|
59
|
+
* prompt, credentials, or retrieved business context beyond the model text
|
|
60
|
+
* that a cassette has always intentionally contained.
|
|
61
|
+
*/
|
|
62
|
+
fingerprintDiagnostics?: CassetteFingerprintDiagnosticsV2;
|
|
63
|
+
}
|
|
64
|
+
/** Eval-only canonicalization. Production dispatches never opt into this. */
|
|
65
|
+
export interface EvalCassetteCanonicalizationV2 {
|
|
66
|
+
version: 2;
|
|
67
|
+
/** Exact absolute project-root prefix supplied by the eval host. */
|
|
68
|
+
projectRoot: string;
|
|
69
|
+
}
|
|
70
|
+
export interface CassetteFingerprintDiagnosticsV2 {
|
|
71
|
+
version: 2;
|
|
72
|
+
messageCount: number;
|
|
73
|
+
messageRoles: AgentMessage['role'][];
|
|
74
|
+
preCanonicalHash: string;
|
|
75
|
+
postCanonicalHash: string;
|
|
76
|
+
appliedRuleClasses: string[];
|
|
77
|
+
}
|
|
78
|
+
export interface CassetteFingerprint {
|
|
79
|
+
key: string;
|
|
80
|
+
/** Exact legacy full-prompt hash, retained only for safe v1 replay migration. */
|
|
81
|
+
legacyKey?: string;
|
|
82
|
+
diagnostics?: CassetteFingerprintDiagnosticsV2;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* What a cassette directory can support in an eval report. A migrated or
|
|
86
|
+
* historical-unknown entry still supports deterministic orchestration replay;
|
|
87
|
+
* neither is allowed to stand in for a current provider-quality measurement.
|
|
88
|
+
*/
|
|
89
|
+
export interface CassetteEvidenceSummary {
|
|
90
|
+
totalEntries: number;
|
|
91
|
+
recordedProviderEntries: number;
|
|
92
|
+
migratedLegacyDeterministicFixtureEntries: number;
|
|
93
|
+
syntheticDeterministicOrchestrationFixtureEntries: number;
|
|
94
|
+
unknownProvenanceEntries: number;
|
|
95
|
+
orchestrationReplayEligible: boolean;
|
|
96
|
+
realProviderQualityEligible: boolean;
|
|
97
|
+
realProviderQualityExclusionReasons: string[];
|
|
19
98
|
}
|
|
99
|
+
export declare function evalCassetteCanonicalizationV2(projectRoot: string): EvalCassetteCanonicalizationV2;
|
|
20
100
|
/**
|
|
21
101
|
* Stable key for one provider dispatch.
|
|
22
102
|
*
|
|
@@ -25,7 +105,7 @@ export interface CassetteEntry {
|
|
|
25
105
|
* Tool NAMES are included but not their schemas — a description edit should not
|
|
26
106
|
* invalidate every cassette in the suite.
|
|
27
107
|
*/
|
|
28
|
-
export declare function
|
|
108
|
+
export declare function cassetteFingerprint(input: {
|
|
29
109
|
providerName: string;
|
|
30
110
|
operation: CassetteEntry['operation'];
|
|
31
111
|
messages: AgentMessage[];
|
|
@@ -35,7 +115,9 @@ export declare function cassetteKey(input: {
|
|
|
35
115
|
maxTokens?: unknown;
|
|
36
116
|
temperature?: unknown;
|
|
37
117
|
} | undefined;
|
|
38
|
-
|
|
118
|
+
canonicalization?: EvalCassetteCanonicalizationV2;
|
|
119
|
+
}): CassetteFingerprint;
|
|
120
|
+
export declare function cassetteKey(input: Parameters<typeof cassetteFingerprint>[0]): string;
|
|
39
121
|
export declare class CassetteStore {
|
|
40
122
|
private readonly dir;
|
|
41
123
|
private readonly loaded;
|
|
@@ -43,10 +125,19 @@ export declare class CassetteStore {
|
|
|
43
125
|
get(key: string): CassetteEntry | undefined;
|
|
44
126
|
put(entry: CassetteEntry): void;
|
|
45
127
|
size(): number;
|
|
128
|
+
entries(): CassetteEntry[];
|
|
129
|
+
/**
|
|
130
|
+
* A replay-only runtime with no configured provider still needs the identity
|
|
131
|
+
* that was used to derive cassette keys. Keep that identity in the cassette
|
|
132
|
+
* store rather than guessing a provider from user settings.
|
|
133
|
+
*/
|
|
134
|
+
providerNames(): string[];
|
|
46
135
|
}
|
|
136
|
+
export declare function cassetteEvidenceSummary(store: CassetteStore): CassetteEvidenceSummary;
|
|
47
137
|
export declare class CassetteMissError extends Error {
|
|
48
138
|
readonly key: string;
|
|
49
|
-
|
|
139
|
+
readonly fingerprintDiagnostics?: CassetteFingerprintDiagnosticsV2;
|
|
140
|
+
constructor(key: string, operation: string, fingerprintDiagnostics?: CassetteFingerprintDiagnosticsV2);
|
|
50
141
|
}
|
|
51
142
|
/**
|
|
52
143
|
* Wrap a provider so its dispatches are recorded or replayed.
|
|
@@ -57,7 +148,7 @@ export declare class CassetteMissError extends Error {
|
|
|
57
148
|
* the suite keeps catching a broken compiler or a wrong number, which a fully
|
|
58
149
|
* stubbed replay would sail straight past.
|
|
59
150
|
*/
|
|
60
|
-
export declare function withCassette(provider: AgentProvider, store: CassetteStore, mode: CassetteMode): AgentProvider;
|
|
151
|
+
export declare function withCassette(provider: AgentProvider, store: CassetteStore, mode: CassetteMode, canonicalization?: EvalCassetteCanonicalizationV2): AgentProvider;
|
|
61
152
|
/**
|
|
62
153
|
* Pick the cassette mode from the environment.
|
|
63
154
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-eval-cassette.d.ts","sourceRoot":"","sources":["../../src/commands/agent-eval-cassette.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-eval-cassette.d.ts","sourceRoot":"","sources":["../../src/commands/agent-eval-cassette.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,OAAO,EAAQ,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EAId,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAExD,8EAA8E;AAC9E,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAC1B;IACE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,oBAAoB,EAAE,mBAAmB,CAAC;IAC1C,eAAe,EAAE,UAAU,CAAC;CAC7B,GACD;IACE,IAAI,EAAE,uCAAuC,CAAC;IAC9C,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,2BAA2B,CAAC;IAClD,eAAe,EAAE,UAAU,CAAC;CAC7B,GACD;IACE;;;;OAIG;IACH,IAAI,EAAE,+CAA+C,CAAC;IACtD,oBAAoB,EAAE,2BAA2B,CAAC;IAClD,eAAe,EAAE,UAAU,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,uBAAuB,CAAC;IACxC,MAAM,EAAE,iCAAiC,CAAC;CAC3C,CAAC;AAEN,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,UAAU,GAAG,qBAAqB,CAAC;IAC9C;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC/B;;;OAGG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,gCAAgC,CAAC;CAC3D;AAED,6EAA6E;AAC7E,MAAM,WAAW,8BAA8B;IAC7C,OAAO,EAAE,CAAC,CAAC;IACX,oEAAoE;IACpE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gCAAgC;IAC/C,OAAO,EAAE,CAAC,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;IACrC,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,gCAAgC,CAAC;CAChD;AAED;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB,EAAE,MAAM,CAAC;IAChC,yCAAyC,EAAE,MAAM,CAAC;IAClD,iDAAiD,EAAE,MAAM,CAAC;IAC1D,wBAAwB,EAAE,MAAM,CAAC;IACjC,2BAA2B,EAAE,OAAO,CAAC;IACrC,2BAA2B,EAAE,OAAO,CAAC;IACrC,mCAAmC,EAAE,MAAM,EAAE,CAAC;CAC/C;AAkDD,wBAAgB,8BAA8B,CAAC,WAAW,EAAE,MAAM,GAAG,8BAA8B,CAElG;AA4BD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IACtC,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS,CAAC;IAChG,gBAAgB,CAAC,EAAE,8BAA8B,CAAC;CACnD,GAAG,mBAAmB,CA2BtB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAEpF;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;gBAE/C,GAAG,EAAE,MAAM;IAevB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI3C,GAAG,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAM/B,IAAI,IAAI,MAAM;IAId,OAAO,IAAI,aAAa,EAAE;IAI1B;;;;OAIG;IACH,aAAa,IAAI,MAAM,EAAE;CAO1B;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,aAAa,GAAG,uBAAuB,CA6BrF;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,sBAAsB,CAAC,EAAE,gCAAgC,CAAC;gBACvD,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,sBAAsB,CAAC,EAAE,gCAAgC;CAatG;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,YAAY,EAClB,gBAAgB,CAAC,EAAE,8BAA8B,GAChD,aAAa,CAmFf;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,YAAY,CAGhG;AAED,6CAA6C;AAC7C,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAG7E;AAED,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,CAAC"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Provider cassettes — record a suite once against a real model, replay it
|
|
3
|
-
* offline forever.
|
|
3
|
+
* offline forever. A deliberately-labelled deterministic migration can keep a
|
|
4
|
+
* legacy response usable for orchestration replay, but it is never evidence of
|
|
5
|
+
* current provider quality.
|
|
4
6
|
*
|
|
5
7
|
* A provider-backed eval is the only kind that measures the product users get:
|
|
6
8
|
* without one, `mayAssumeInterpretation` is false and every ambiguous question
|
|
@@ -15,6 +17,63 @@
|
|
|
15
17
|
import { createHash } from 'node:crypto';
|
|
16
18
|
import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from 'node:fs';
|
|
17
19
|
import { dirname, join } from 'node:path';
|
|
20
|
+
const EVAL_ORCHESTRATION_TRANSIENT_LABELS = [
|
|
21
|
+
'context_pack_id',
|
|
22
|
+
'run_id',
|
|
23
|
+
'snapshot_id',
|
|
24
|
+
'plan_id',
|
|
25
|
+
'reference_instant',
|
|
26
|
+
'generated_at',
|
|
27
|
+
'retrieved_at',
|
|
28
|
+
];
|
|
29
|
+
const EVAL_ORCHESTRATION_TRANSIENT_LABEL_PATTERN = EVAL_ORCHESTRATION_TRANSIENT_LABELS.join('|');
|
|
30
|
+
/**
|
|
31
|
+
* This is intentionally not a general UUID/date/path scrubber. The provider
|
|
32
|
+
* still sees and the fingerprint still binds every business date, user term,
|
|
33
|
+
* relation, column, qualified ID, join, lineage edge, SQL fragment, role, and
|
|
34
|
+
* option. Only producer-labelled orchestration values and the explicitly
|
|
35
|
+
* supplied eval project root are non-semantic enough to normalize.
|
|
36
|
+
*/
|
|
37
|
+
function canonicalizeEvalMessageContentV2(content, projectRoot) {
|
|
38
|
+
const applied = new Set();
|
|
39
|
+
const replacePlainLabel = (_whole, prefix, label) => {
|
|
40
|
+
applied.add(`producer_label:${label.toLowerCase()}`);
|
|
41
|
+
return `${prefix}<ORCHESTRATION_TRANSIENT>`;
|
|
42
|
+
};
|
|
43
|
+
const replaceJsonLabel = (_whole, prefix, label, suffix) => {
|
|
44
|
+
applied.add(`producer_label:${label.toLowerCase()}`);
|
|
45
|
+
return `${prefix}"<ORCHESTRATION_TRANSIENT>"${suffix}`;
|
|
46
|
+
};
|
|
47
|
+
let normalized = content
|
|
48
|
+
.replace(new RegExp(`^(\\s*)((?:${EVAL_ORCHESTRATION_TRANSIENT_LABEL_PATTERN}))\\s*:\\s*[^\\r\\n]*$`, 'gim'), (_whole, indent, label) => replacePlainLabel(_whole, `${indent}${label}: `, label))
|
|
49
|
+
.replace(new RegExp(`^(\\s*"((?:${EVAL_ORCHESTRATION_TRANSIENT_LABEL_PATTERN}))"\\s*:\\s*)"[^"\\r\\n]*"(\\s*,?\\s*)$`, 'gim'), (_whole, prefix, label, suffix) => replaceJsonLabel(_whole, prefix, label, suffix));
|
|
50
|
+
if (projectRoot && normalized.includes(projectRoot)) {
|
|
51
|
+
normalized = normalized.split(projectRoot).join('<PROJECT_ROOT>');
|
|
52
|
+
applied.add('project_root');
|
|
53
|
+
}
|
|
54
|
+
return { content: normalized, appliedRuleClasses: Array.from(applied).sort() };
|
|
55
|
+
}
|
|
56
|
+
export function evalCassetteCanonicalizationV2(projectRoot) {
|
|
57
|
+
return { version: 2, projectRoot };
|
|
58
|
+
}
|
|
59
|
+
function hashDispatch(value) {
|
|
60
|
+
return createHash('sha256').update(JSON.stringify(value)).digest('hex');
|
|
61
|
+
}
|
|
62
|
+
function canonicalDispatch(input, messages, version) {
|
|
63
|
+
return {
|
|
64
|
+
...(version ? { v: version } : {}),
|
|
65
|
+
p: input.providerName,
|
|
66
|
+
o: input.operation,
|
|
67
|
+
m: messages.map((message) => ({ r: message.role, c: message.content })),
|
|
68
|
+
// V1 intentionally treated a tool-set reorder as equivalent. V2 is
|
|
69
|
+
// narrower: canonicalization must not rewrite provider/tool dispatch
|
|
70
|
+
// semantics, including tool order.
|
|
71
|
+
t: version ? [...(input.toolNames ?? [])] : [...(input.toolNames ?? [])].sort(),
|
|
72
|
+
e: input.options?.reasoningEffort ?? null,
|
|
73
|
+
x: input.options?.maxTokens ?? null,
|
|
74
|
+
z: input.options?.temperature ?? null,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
18
77
|
/**
|
|
19
78
|
* Stable key for one provider dispatch.
|
|
20
79
|
*
|
|
@@ -23,17 +82,38 @@ import { dirname, join } from 'node:path';
|
|
|
23
82
|
* Tool NAMES are included but not their schemas — a description edit should not
|
|
24
83
|
* invalidate every cassette in the suite.
|
|
25
84
|
*/
|
|
26
|
-
export function
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
85
|
+
export function cassetteFingerprint(input) {
|
|
86
|
+
const legacyHash = hashDispatch(canonicalDispatch(input, input.messages));
|
|
87
|
+
if (!input.canonicalization)
|
|
88
|
+
return { key: legacyHash.slice(0, 32) };
|
|
89
|
+
const applied = new Set();
|
|
90
|
+
const messages = input.messages.map((message) => {
|
|
91
|
+
// A user may literally ask about an ID, date, or local path. Only
|
|
92
|
+
// producer-owned messages can contain the labelled orchestration fields
|
|
93
|
+
// that this eval-only canonicalizer is permitted to normalize.
|
|
94
|
+
if (message.role === 'user')
|
|
95
|
+
return message;
|
|
96
|
+
const normalized = canonicalizeEvalMessageContentV2(message.content, input.canonicalization.projectRoot);
|
|
97
|
+
for (const rule of normalized.appliedRuleClasses)
|
|
98
|
+
applied.add(rule);
|
|
99
|
+
return { ...message, content: normalized.content };
|
|
35
100
|
});
|
|
36
|
-
|
|
101
|
+
const postHash = hashDispatch(canonicalDispatch(input, messages, 2));
|
|
102
|
+
return {
|
|
103
|
+
key: postHash.slice(0, 32),
|
|
104
|
+
legacyKey: legacyHash.slice(0, 32),
|
|
105
|
+
diagnostics: {
|
|
106
|
+
version: 2,
|
|
107
|
+
messageCount: input.messages.length,
|
|
108
|
+
messageRoles: input.messages.map((message) => message.role),
|
|
109
|
+
preCanonicalHash: hashDispatch(canonicalDispatch(input, input.messages, 2)),
|
|
110
|
+
postCanonicalHash: postHash,
|
|
111
|
+
appliedRuleClasses: Array.from(applied).sort(),
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
export function cassetteKey(input) {
|
|
116
|
+
return cassetteFingerprint(input).key;
|
|
37
117
|
}
|
|
38
118
|
export class CassetteStore {
|
|
39
119
|
dir;
|
|
@@ -67,14 +147,59 @@ export class CassetteStore {
|
|
|
67
147
|
size() {
|
|
68
148
|
return this.loaded.size;
|
|
69
149
|
}
|
|
150
|
+
entries() {
|
|
151
|
+
return Array.from(this.loaded.values()).sort((left, right) => left.key.localeCompare(right.key));
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* A replay-only runtime with no configured provider still needs the identity
|
|
155
|
+
* that was used to derive cassette keys. Keep that identity in the cassette
|
|
156
|
+
* store rather than guessing a provider from user settings.
|
|
157
|
+
*/
|
|
158
|
+
providerNames() {
|
|
159
|
+
return Array.from(new Set(Array.from(this.loaded.values())
|
|
160
|
+
.map((entry) => entry.providerName.trim())
|
|
161
|
+
.filter(Boolean))).sort();
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
export function cassetteEvidenceSummary(store) {
|
|
165
|
+
const entries = store.entries();
|
|
166
|
+
const recordedProviderEntries = entries.filter((entry) => entry.provenance?.kind === 'recorded_provider').length;
|
|
167
|
+
const migratedLegacyDeterministicFixtureEntries = entries.filter((entry) => entry.provenance?.kind === 'migrated_legacy_deterministic_fixture').length;
|
|
168
|
+
const syntheticDeterministicOrchestrationFixtureEntries = entries.filter((entry) => entry.provenance?.kind === 'synthetic_deterministic_orchestration_fixture').length;
|
|
169
|
+
const unknownProvenanceEntries = entries.length
|
|
170
|
+
- recordedProviderEntries
|
|
171
|
+
- migratedLegacyDeterministicFixtureEntries
|
|
172
|
+
- syntheticDeterministicOrchestrationFixtureEntries;
|
|
173
|
+
const realProviderQualityExclusionReasons = [
|
|
174
|
+
...(migratedLegacyDeterministicFixtureEntries > 0 ? ['migrated_legacy_deterministic_fixture'] : []),
|
|
175
|
+
...(syntheticDeterministicOrchestrationFixtureEntries > 0 ? ['synthetic_deterministic_orchestration_fixture'] : []),
|
|
176
|
+
...(unknownProvenanceEntries > 0 ? ['unknown_cassette_provenance'] : []),
|
|
177
|
+
...(entries.length === 0 ? ['no_cassette_entries'] : []),
|
|
178
|
+
];
|
|
179
|
+
return {
|
|
180
|
+
totalEntries: entries.length,
|
|
181
|
+
recordedProviderEntries,
|
|
182
|
+
migratedLegacyDeterministicFixtureEntries,
|
|
183
|
+
syntheticDeterministicOrchestrationFixtureEntries,
|
|
184
|
+
unknownProvenanceEntries,
|
|
185
|
+
orchestrationReplayEligible: entries.length > 0,
|
|
186
|
+
realProviderQualityEligible: realProviderQualityExclusionReasons.length === 0,
|
|
187
|
+
realProviderQualityExclusionReasons,
|
|
188
|
+
};
|
|
70
189
|
}
|
|
71
190
|
export class CassetteMissError extends Error {
|
|
72
191
|
key;
|
|
73
|
-
|
|
192
|
+
fingerprintDiagnostics;
|
|
193
|
+
constructor(key, operation, fingerprintDiagnostics) {
|
|
194
|
+
const safeDiagnostics = fingerprintDiagnostics
|
|
195
|
+
? ` Safe V2 dispatch facts: messages=${fingerprintDiagnostics.messageCount}; roles=${fingerprintDiagnostics.messageRoles.join(',')}; pre=${fingerprintDiagnostics.preCanonicalHash}; post=${fingerprintDiagnostics.postCanonicalHash}; rules=${fingerprintDiagnostics.appliedRuleClasses.join(',') || 'none'}.`
|
|
196
|
+
: '';
|
|
74
197
|
super(`No cassette for ${operation} (${key}). CI replays recorded provider responses and never calls a live model; `
|
|
75
|
-
+ 're-record with --record against a real provider and commit the new cassettes.'
|
|
198
|
+
+ 're-record with --record against a real provider and commit the new cassettes.'
|
|
199
|
+
+ safeDiagnostics);
|
|
76
200
|
this.name = 'CassetteMissError';
|
|
77
201
|
this.key = key;
|
|
202
|
+
this.fingerprintDiagnostics = fingerprintDiagnostics;
|
|
78
203
|
}
|
|
79
204
|
}
|
|
80
205
|
/**
|
|
@@ -86,37 +211,49 @@ export class CassetteMissError extends Error {
|
|
|
86
211
|
* the suite keeps catching a broken compiler or a wrong number, which a fully
|
|
87
212
|
* stubbed replay would sail straight past.
|
|
88
213
|
*/
|
|
89
|
-
export function withCassette(provider, store, mode) {
|
|
214
|
+
export function withCassette(provider, store, mode, canonicalization) {
|
|
90
215
|
if (mode === 'live')
|
|
91
216
|
return provider;
|
|
92
217
|
const wrapped = {
|
|
93
218
|
name: provider.name,
|
|
94
219
|
available: () => (mode === 'replay' ? Promise.resolve(true) : provider.available()),
|
|
95
220
|
async generate(messages, options) {
|
|
96
|
-
const
|
|
97
|
-
|
|
221
|
+
const fingerprint = cassetteFingerprint({ providerName: provider.name, operation: 'generate', messages, options, canonicalization });
|
|
222
|
+
// V2 dispatch identity is deliberately exact. A V1 key can describe a
|
|
223
|
+
// different full runtime envelope (for example, direct runner versus
|
|
224
|
+
// runtime runner); silently falling back would replay a response for the
|
|
225
|
+
// wrong prompt. Migrations must create an explicitly labelled V2 entry.
|
|
226
|
+
const hit = store.get(fingerprint.key);
|
|
98
227
|
if (hit)
|
|
99
228
|
return hit.text;
|
|
100
229
|
if (mode === 'replay')
|
|
101
|
-
throw new CassetteMissError(key, 'generate');
|
|
230
|
+
throw new CassetteMissError(fingerprint.key, 'generate', fingerprint.diagnostics);
|
|
102
231
|
const text = await provider.generate(messages, options);
|
|
103
232
|
store.put({
|
|
104
|
-
key, operation: 'generate', text,
|
|
233
|
+
key: fingerprint.key, operation: 'generate', text,
|
|
105
234
|
providerName: provider.name, recordedAt: new Date().toISOString(),
|
|
235
|
+
provenance: {
|
|
236
|
+
kind: 'recorded_provider',
|
|
237
|
+
replayClassification: 'recorded_provider',
|
|
238
|
+
providerQuality: 'eligible',
|
|
239
|
+
},
|
|
240
|
+
...(fingerprint.diagnostics ? { fingerprintDiagnostics: fingerprint.diagnostics } : {}),
|
|
106
241
|
});
|
|
107
242
|
return text;
|
|
108
243
|
},
|
|
109
244
|
};
|
|
110
245
|
if (provider.generateWithTools) {
|
|
111
246
|
wrapped.generateWithTools = async (messages, tools, options) => {
|
|
112
|
-
const
|
|
247
|
+
const fingerprint = cassetteFingerprint({
|
|
113
248
|
providerName: provider.name,
|
|
114
249
|
operation: 'generate_with_tools',
|
|
115
250
|
messages,
|
|
116
251
|
toolNames: tools.map((tool) => tool.name),
|
|
117
252
|
options: options,
|
|
253
|
+
canonicalization,
|
|
118
254
|
});
|
|
119
|
-
|
|
255
|
+
// See `generate`: never alias a V2 tool-loop dispatch to a legacy key.
|
|
256
|
+
const hit = store.get(fingerprint.key);
|
|
120
257
|
if (hit) {
|
|
121
258
|
const byName = new Map(tools.map((tool) => [tool.name, tool]));
|
|
122
259
|
for (const call of hit.toolCalls ?? []) {
|
|
@@ -130,7 +267,7 @@ export function withCassette(provider, store, mode) {
|
|
|
130
267
|
return hit.text;
|
|
131
268
|
}
|
|
132
269
|
if (mode === 'replay')
|
|
133
|
-
throw new CassetteMissError(key, 'generate_with_tools');
|
|
270
|
+
throw new CassetteMissError(fingerprint.key, 'generate_with_tools', fingerprint.diagnostics);
|
|
134
271
|
const observed = [];
|
|
135
272
|
const recordingTools = tools.map((tool) => ({
|
|
136
273
|
...tool,
|
|
@@ -141,8 +278,14 @@ export function withCassette(provider, store, mode) {
|
|
|
141
278
|
}));
|
|
142
279
|
const text = await provider.generateWithTools(messages, recordingTools, options);
|
|
143
280
|
store.put({
|
|
144
|
-
key, operation: 'generate_with_tools', text, toolCalls: observed,
|
|
281
|
+
key: fingerprint.key, operation: 'generate_with_tools', text, toolCalls: observed,
|
|
145
282
|
providerName: provider.name, recordedAt: new Date().toISOString(),
|
|
283
|
+
provenance: {
|
|
284
|
+
kind: 'recorded_provider',
|
|
285
|
+
replayClassification: 'recorded_provider',
|
|
286
|
+
providerQuality: 'eligible',
|
|
287
|
+
},
|
|
288
|
+
...(fingerprint.diagnostics ? { fingerprintDiagnostics: fingerprint.diagnostics } : {}),
|
|
146
289
|
});
|
|
147
290
|
return text;
|
|
148
291
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-eval-cassette.js","sourceRoot":"","sources":["../../src/commands/agent-eval-cassette.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent-eval-cassette.js","sourceRoot":"","sources":["../../src/commands/agent-eval-cassette.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC1F,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAoH1C,MAAM,mCAAmC,GAAG;IAC1C,iBAAiB;IACjB,QAAQ;IACR,aAAa;IACb,SAAS;IACT,mBAAmB;IACnB,cAAc;IACd,cAAc;CACN,CAAC;AAEX,MAAM,0CAA0C,GAAG,mCAAmC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEjG;;;;;;GAMG;AACH,SAAS,gCAAgC,CAAC,OAAe,EAAE,WAAmB;IAI5E,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAE,MAAc,EAAE,KAAa,EAAU,EAAE;QAClF,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACrD,OAAO,GAAG,MAAM,2BAA2B,CAAC;IAC9C,CAAC,CAAC;IACF,MAAM,gBAAgB,GAAG,CAAC,MAAc,EAAE,MAAc,EAAE,KAAa,EAAE,MAAc,EAAU,EAAE;QACjG,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACrD,OAAO,GAAG,MAAM,8BAA8B,MAAM,EAAE,CAAC;IACzD,CAAC,CAAC;IACF,IAAI,UAAU,GAAG,OAAO;SACrB,OAAO,CACN,IAAI,MAAM,CAAC,cAAc,0CAA0C,wBAAwB,EAAE,KAAK,CAAC,EACnG,CAAC,MAAM,EAAE,MAAc,EAAE,KAAa,EAAE,EAAE,CAAC,iBAAiB,CAAC,MAAM,EAAE,GAAG,MAAM,GAAG,KAAK,IAAI,EAAE,KAAK,CAAC,CACnG;SACA,OAAO,CACN,IAAI,MAAM,CAAC,cAAc,0CAA0C,yCAAyC,EAAE,KAAK,CAAC,EACpH,CAAC,MAAM,EAAE,MAAc,EAAE,KAAa,EAAE,MAAc,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAC3G,CAAC;IACJ,IAAI,WAAW,IAAI,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACpD,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,WAAmB;IAChE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;AACrC,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,iBAAiB,CAAC,KAM1B,EAAE,QAAwB,EAAE,OAAW;IACtC,OAAO;QACL,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClC,CAAC,EAAE,KAAK,CAAC,YAAY;QACrB,CAAC,EAAE,KAAK,CAAC,SAAS;QAClB,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACvE,mEAAmE;QACnE,qEAAqE;QACrE,mCAAmC;QACnC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE;QAC/E,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,eAAe,IAAI,IAAI;QACzC,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,IAAI,IAAI;QACnC,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,WAAW,IAAI,IAAI;KACtC,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAOnC;IACC,MAAM,UAAU,GAAG,YAAY,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1E,IAAI,CAAC,KAAK,CAAC,gBAAgB;QAAE,OAAO,EAAE,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IAErE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9C,kEAAkE;QAClE,wEAAwE;QACxE,+DAA+D;QAC/D,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,OAAO,CAAC;QAC5C,MAAM,UAAU,GAAG,gCAAgC,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,gBAAiB,CAAC,WAAW,CAAC,CAAC;QAC1G,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,kBAAkB;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpE,OAAO,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,YAAY,CAAC,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;IACrE,OAAO;QACL,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QAC1B,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QAClC,WAAW,EAAE;YACX,OAAO,EAAE,CAAC;YACV,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;YACnC,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;YAC3D,gBAAgB,EAAE,YAAY,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAC3E,iBAAiB,EAAE,QAAQ;YAC3B,kBAAkB,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE;SAC/C;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAgD;IAC1E,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;AACxC,CAAC;AAED,MAAM,OAAO,aAAa;IACP,GAAG,CAAS;IACZ,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;IAE3D,YAAY,GAAW;QACrB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO;QAC7B,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,SAAS;YACtC,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAkB,CAAC;gBAClF,IAAI,KAAK,EAAE,GAAG;oBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACpD,CAAC;YAAC,MAAM,CAAC;gBACP,sEAAsE;gBACtE,mEAAmE;YACrE,CAAC;QACH,CAAC;IACH,CAAC;IAED,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,GAAG,CAAC,KAAoB;QACtB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAClC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrG,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAC1B,CAAC;IAED,OAAO;QACL,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACnG,CAAC;IAED;;;;OAIG;IACH,aAAa;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CACvB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;aAC7B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;aACzC,MAAM,CAAC,OAAO,CAAC,CACnB,CAAC,CAAC,IAAI,EAAE,CAAC;IACZ,CAAC;CACF;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAoB;IAC1D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,KAAK,mBAAmB,CAAC,CAAC,MAAM,CAAC;IACjH,MAAM,yCAAyC,GAAG,OAAO,CAAC,MAAM,CAC9D,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,KAAK,uCAAuC,CAC9E,CAAC,MAAM,CAAC;IACT,MAAM,iDAAiD,GAAG,OAAO,CAAC,MAAM,CACtE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,KAAK,+CAA+C,CACtF,CAAC,MAAM,CAAC;IACT,MAAM,wBAAwB,GAAG,OAAO,CAAC,MAAM;UAC3C,uBAAuB;UACvB,yCAAyC;UACzC,iDAAiD,CAAC;IACtD,MAAM,mCAAmC,GAAG;QAC1C,GAAG,CAAC,yCAAyC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnG,GAAG,CAAC,iDAAiD,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,+CAA+C,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnH,GAAG,CAAC,wBAAwB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACzD,CAAC;IACF,OAAO;QACL,YAAY,EAAE,OAAO,CAAC,MAAM;QAC5B,uBAAuB;QACvB,yCAAyC;QACzC,iDAAiD;QACjD,wBAAwB;QACxB,2BAA2B,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC;QAC/C,2BAA2B,EAAE,mCAAmC,CAAC,MAAM,KAAK,CAAC;QAC7E,mCAAmC;KACpC,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IACjC,GAAG,CAAS;IACZ,sBAAsB,CAAoC;IACnE,YAAY,GAAW,EAAE,SAAiB,EAAE,sBAAyD;QACnG,MAAM,eAAe,GAAG,sBAAsB;YAC5C,CAAC,CAAC,qCAAqC,sBAAsB,CAAC,YAAY,WAAW,sBAAsB,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,sBAAsB,CAAC,gBAAgB,UAAU,sBAAsB,CAAC,iBAAiB,WAAW,sBAAsB,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,GAAG;YAC/S,CAAC,CAAC,EAAE,CAAC;QACP,KAAK,CACH,mBAAmB,SAAS,KAAK,GAAG,0EAA0E;cAC5G,+EAA+E;cAC/E,eAAe,CAClB,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAChC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;IACvD,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAC1B,QAAuB,EACvB,KAAoB,EACpB,IAAkB,EAClB,gBAAiD;IAEjD,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,QAAQ,CAAC;IAErC,MAAM,OAAO,GAAkB;QAC7B,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QAEnF,KAAK,CAAC,QAAQ,CAAC,QAAwB,EAAE,OAA4B;YACnE,MAAM,WAAW,GAAG,mBAAmB,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;YACrI,sEAAsE;YACtE,qEAAqE;YACrE,yEAAyE;YACzE,wEAAwE;YACxE,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,GAAG;gBAAE,OAAO,GAAG,CAAC,IAAI,CAAC;YACzB,IAAI,IAAI,KAAK,QAAQ;gBAAE,MAAM,IAAI,iBAAiB,CAAC,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;YACzG,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACxD,KAAK,CAAC,GAAG,CAAC;gBACR,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI;gBACjD,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACjE,UAAU,EAAE;oBACV,IAAI,EAAE,mBAAmB;oBACzB,oBAAoB,EAAE,mBAAmB;oBACzC,eAAe,EAAE,UAAU;iBAC5B;gBACD,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,sBAAsB,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACxF,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;IAEF,IAAI,QAAQ,CAAC,iBAAiB,EAAE,CAAC;QAC/B,OAAO,CAAC,iBAAiB,GAAG,KAAK,EAC/B,QAAwB,EACxB,KAA4B,EAC5B,OAAiC,EAChB,EAAE;YACnB,MAAM,WAAW,GAAG,mBAAmB,CAAC;gBACtC,YAAY,EAAE,QAAQ,CAAC,IAAI;gBAC3B,SAAS,EAAE,qBAAqB;gBAChC,QAAQ;gBACR,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;gBACzC,OAAO,EAAE,OAAoD;gBAC7D,gBAAgB;aACjB,CAAC,CAAC;YACH,uEAAuE;YACvE,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,GAAG,EAAE,CAAC;gBACR,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC/D,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;oBACvC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACnC,sEAAsE;oBACtE,4DAA4D;oBAC5D,IAAI,CAAC,IAAI;wBAAE,SAAS;oBACpB,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;gBACnD,CAAC;gBACD,OAAO,GAAG,CAAC,IAAI,CAAC;YAClB,CAAC;YACD,IAAI,IAAI,KAAK,QAAQ;gBAAE,MAAM,IAAI,iBAAiB,CAAC,WAAW,CAAC,GAAG,EAAE,qBAAqB,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;YACpH,MAAM,QAAQ,GAAuB,EAAE,CAAC;YACxC,MAAM,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC1C,GAAG,IAAI;gBACP,GAAG,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;oBAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;oBACzC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACxB,CAAC;aACF,CAAC,CAAC,CAAC;YACJ,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,iBAAkB,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;YAClF,KAAK,CAAC,GAAG,CAAC;gBACR,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,qBAAqB,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ;gBACjF,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACjE,UAAU,EAAE;oBACV,IAAI,EAAE,mBAAmB;oBACzB,oBAAoB,EAAE,mBAAmB;oBACzC,eAAe,EAAE,UAAU;iBAC5B;gBACD,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,sBAAsB,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACxF,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,0BAA0B,CAAC,GAAuC;IAChF,MAAM,GAAG,GAAG,GAAG,CAAC,sBAAsB,CAAC;IACvC,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC7D,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,cAAc,CAAC,WAAmB,EAAE,SAAiB;IACnE,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAClF,OAAO,IAAI,CAAC,WAAW,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;AACnD,CAAC;AAED,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,CAAC"}
|
|
@@ -17,7 +17,7 @@ import type { AgentAnswer, AgentRun, AgentRunRoute, AgentRunStatus, AgentRunTrus
|
|
|
17
17
|
/** Eval-facing view of a run, shaped like the fields the scorer already reads. */
|
|
18
18
|
export interface RuntimeDrivenRun {
|
|
19
19
|
kind: 'certified' | 'uncertified' | 'no_answer';
|
|
20
|
-
route?: 'certified' | 'generated_sql' | 'research' | 'clarify';
|
|
20
|
+
route?: 'certified' | 'generated_sql' | 'research' | 'clarify' | 'blocked';
|
|
21
21
|
runRoute: AgentRunRoute;
|
|
22
22
|
status: AgentRunStatus;
|
|
23
23
|
trustState: AgentRunTrustState;
|
|
@@ -42,8 +42,29 @@ export interface RuntimeDrivenRun {
|
|
|
42
42
|
* ambiguous question then clarifies. That is correct behaviour, but it makes a
|
|
43
43
|
* clarification rate measured without a provider meaningless, so the harness
|
|
44
44
|
* has to be able to say so.
|
|
45
|
-
|
|
45
|
+
*/
|
|
46
46
|
meaningResolved: boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Count captured by the persisted router retrieval receipt. This is not a
|
|
49
|
+
* synthetic context-pack size: runtime runs do not return an AgentAnswer
|
|
50
|
+
* context pack through the transport projection.
|
|
51
|
+
*/
|
|
52
|
+
retrievalCandidateCount?: number;
|
|
53
|
+
/** Source-lane coverage retained by the router-owned cascade receipt. */
|
|
54
|
+
sourceCoverage?: NonNullable<AgentRun['diagnosticReceiptV3']>['sourceCoverage'];
|
|
55
|
+
/** Typed terminal authority, distinct from a user-facing clarification. */
|
|
56
|
+
terminalOutcome?: NonNullable<AgentRun['routeDecision']>['terminalOutcome'];
|
|
57
|
+
/** Provider/tool count recorded by persisted runtime telemetry. */
|
|
58
|
+
toolCallCount: number;
|
|
59
|
+
/**
|
|
60
|
+
* OBS-008: compact receipt evidence only. Evaluation never opens the trace
|
|
61
|
+
* store or treats a trace as answer authority.
|
|
62
|
+
*/
|
|
63
|
+
observability?: {
|
|
64
|
+
recordingStatus: NonNullable<AgentRun['traceReference']>['recordingStatus'];
|
|
65
|
+
storeSchemaVersion: 1;
|
|
66
|
+
traceFingerprint?: string;
|
|
67
|
+
};
|
|
47
68
|
}
|
|
48
69
|
/**
|
|
49
70
|
* Did this run decline to produce a usable answer?
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-eval-runtime.d.ts","sourceRoot":"","sources":["../../src/commands/agent-eval-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE1H,kFAAkF;AAClF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,GAAG,aAAa,GAAG,WAAW,CAAC;IAChD,KAAK,CAAC,EAAE,WAAW,GAAG,eAAe,GAAG,UAAU,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-eval-runtime.d.ts","sourceRoot":"","sources":["../../src/commands/agent-eval-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE1H,kFAAkF;AAClF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,GAAG,aAAa,GAAG,WAAW,CAAC;IAChD,KAAK,CAAC,EAAE,WAAW,GAAG,eAAe,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;IAC3E,QAAQ,EAAE,aAAa,CAAC;IACxB,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACjB,wBAAwB,EAAE,MAAM,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,cAAc,EAAE,OAAO,CAAC;IACxB;;;;;;;;;MASE;IACF,eAAe,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,yEAAyE;IACzE,cAAc,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAChF,2EAA2E;IAC3E,eAAe,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAC5E,mEAAmE;IACnE,aAAa,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,aAAa,CAAC,EAAE;QACd,eAAe,EAAE,WAAW,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;QAC5E,kBAAkB,EAAE,CAAC,CAAC;QACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,CAAC,GAAG,OAAO,CAKlF;AAED,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAa/E;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,GAAG,YAAY,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAI/G;AAYD,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,QAAQ,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAA;CAAE,CAe3F;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,QAAQ,GAAG,gBAAgB,CA8BjE;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,UAAU,CAAC;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,QAAQ,CAAC,CA8BtF;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,QAAQ,GAAG,WAAW,CAuB/D"}
|
|
@@ -19,8 +19,11 @@ export function evalRouteForRun(route) {
|
|
|
19
19
|
case 'semantic_answer': return 'certified';
|
|
20
20
|
case 'generated_answer': return 'generated_sql';
|
|
21
21
|
case 'research': return 'research';
|
|
22
|
-
case 'clarify':
|
|
23
|
-
|
|
22
|
+
case 'clarify': return 'clarify';
|
|
23
|
+
// A typed terminal modeling/policy gap is not a clarification. Collapsing
|
|
24
|
+
// it to `clarify` made eval reports claim the user had a choice when the
|
|
25
|
+
// persisted run explicitly recorded a blocked no-answer.
|
|
26
|
+
case 'blocked': return 'blocked';
|
|
24
27
|
default: return undefined;
|
|
25
28
|
}
|
|
26
29
|
}
|
|
@@ -65,6 +68,9 @@ export function runtimeRunOutputs(run) {
|
|
|
65
68
|
}
|
|
66
69
|
export function projectRuntimeRun(run) {
|
|
67
70
|
const refusalEvaluation = (run.evaluations ?? []).find((evaluation) => !evaluation.passed);
|
|
71
|
+
const sourceCoverage = run.diagnosticReceiptV3?.sourceCoverage
|
|
72
|
+
?? run.routeDecision?.analyticalCascadeDecision?.sourceCoverage;
|
|
73
|
+
const retrievalCandidateCount = run.routeDecision?.retrievalEvidence?.candidateCount;
|
|
68
74
|
return {
|
|
69
75
|
kind: evalKindForRun(run),
|
|
70
76
|
route: evalRouteForRun(run.route),
|
|
@@ -75,6 +81,17 @@ export function projectRuntimeRun(run) {
|
|
|
75
81
|
runId: run.id,
|
|
76
82
|
conversational: run.route === 'conversation' || run.answerKind === 'conversational',
|
|
77
83
|
meaningResolved: Boolean(run.routeDecision?.meaningResolution),
|
|
84
|
+
toolCallCount: run.telemetry?.toolCalls ?? 0,
|
|
85
|
+
...(typeof retrievalCandidateCount === 'number' ? { retrievalCandidateCount } : {}),
|
|
86
|
+
...(sourceCoverage ? { sourceCoverage } : {}),
|
|
87
|
+
...(run.routeDecision?.terminalOutcome ? { terminalOutcome: run.routeDecision.terminalOutcome } : {}),
|
|
88
|
+
...(run.traceReference ? {
|
|
89
|
+
observability: {
|
|
90
|
+
recordingStatus: run.traceReference.recordingStatus,
|
|
91
|
+
storeSchemaVersion: run.traceReference.storeSchemaVersion,
|
|
92
|
+
...(run.traceReference.traceFingerprint ? { traceFingerprint: run.traceReference.traceFingerprint } : {}),
|
|
93
|
+
},
|
|
94
|
+
} : {}),
|
|
78
95
|
...(run.answer ? { answer: run.answer } : {}),
|
|
79
96
|
...(refusalEvaluation?.id ? { refusalCode: refusalEvaluation.id } : {}),
|
|
80
97
|
...runtimeRunOutputs(run),
|