@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.
Files changed (125) hide show
  1. package/dist/args.d.ts +4 -0
  2. package/dist/args.d.ts.map +1 -1
  3. package/dist/args.js +16 -0
  4. package/dist/args.js.map +1 -1
  5. package/dist/assets/dql-notebook/assets/{AgentLogPage-BPz-UWFh.js → AgentLogPage-Jbyb4so-.js} +1 -1
  6. package/dist/assets/dql-notebook/assets/{AiBuildDialog-BEl53WA_.js → AiBuildDialog-Du07X1qO.js} +1 -1
  7. package/dist/assets/dql-notebook/assets/{AiBuildResult-B4yfGTTZ.js → AiBuildResult-xKtGthWv.js} +1 -1
  8. package/dist/assets/dql-notebook/assets/{AiSidePanel-CSZAAvuD.js → AiSidePanel-CE_L04dK.js} +1 -1
  9. package/dist/assets/dql-notebook/assets/AnalyticsHome-CiUE10uF.js +6 -0
  10. package/dist/assets/dql-notebook/assets/{AppsView-DQOwU9Cg.js → AppsView-DlNaTuwD.js} +30 -35
  11. package/dist/assets/dql-notebook/assets/AskObservabilityPage-DracZPI9.js +1 -0
  12. package/dist/assets/dql-notebook/assets/AskTracePage-CSMoMw9a.js +8 -0
  13. package/dist/assets/dql-notebook/assets/{BlockStudio-B4ap0GdY.js → BlockStudio-DQS5Hcq9.js} +9 -14
  14. package/dist/assets/dql-notebook/assets/BusinessArtifactView-CqV4i9l_.js +1 -0
  15. package/dist/assets/dql-notebook/assets/{DbtFirstModelingPage-D72byb2g.js → DbtFirstModelingPage-JKhB_Y2H.js} +3 -3
  16. package/dist/assets/dql-notebook/assets/{GitPage-lQb1uXH2.js → GitPage-DjaNp0o3.js} +1 -1
  17. package/dist/assets/dql-notebook/assets/{GlobalAiRail-CVECf6Xj.js → GlobalAiRail-CsV3zlc8.js} +1 -1
  18. package/dist/assets/dql-notebook/assets/{GovernedContextPage-trOyMCY6.js → GovernedContextPage-uXUHUOIJ.js} +3 -3
  19. package/dist/assets/dql-notebook/assets/{HelpDocsPage-D8hLS5lE.js → HelpDocsPage-Hbh9IeYB.js} +1 -1
  20. package/dist/assets/dql-notebook/assets/{HomePage-eIkfBIep.js → HomePage-CRRl-R_v.js} +1 -1
  21. package/dist/assets/dql-notebook/assets/LineageDAG-OMUP2sbl.js +1 -0
  22. package/dist/assets/dql-notebook/assets/LineageDetailView-C964BLuV.js +1 -0
  23. package/dist/assets/dql-notebook/assets/LineageDrawer-CzY0nfpD.js +1 -0
  24. package/dist/assets/dql-notebook/assets/{LineagePathBreadcrumb-CviIf8PN.js → LineagePathBreadcrumb-0Gi-Fm1B.js} +1 -1
  25. package/dist/assets/dql-notebook/assets/MiniLineageGraph-wn0wLc9m.js +1 -0
  26. package/dist/assets/dql-notebook/assets/{NewBlockModal-DbCQg-pj.js → NewBlockModal-kMAzk91d.js} +1 -1
  27. package/dist/assets/dql-notebook/assets/{NewNotebookModal-5Vp6XiuK.js → NewNotebookModal-D_cWd_6M.js} +1 -1
  28. package/dist/assets/dql-notebook/assets/{NotebookEditor-DjqJS44s.js → NotebookEditor-Bax0lxaz.js} +25 -30
  29. package/dist/assets/dql-notebook/assets/{ReadinessPage-BHGrC5ho.js → ReadinessPage-DEUIXQQY.js} +1 -1
  30. package/dist/assets/dql-notebook/assets/{SetupOnboarding-BfS9Tdx-.js → SetupOnboarding-CyE-Ex41.js} +1 -1
  31. package/dist/assets/dql-notebook/assets/{SkillsPage-BFH21wSj.js → SkillsPage-QgvKGPxE.js} +1 -1
  32. package/dist/assets/dql-notebook/assets/{TrustBadge-zm6g_SxZ.js → TrustBadge-D5CGp0cu.js} +1 -1
  33. package/dist/assets/dql-notebook/assets/UnifiedAgentRunPanel-BjsTE6yf.js +89 -0
  34. package/dist/assets/dql-notebook/assets/{answer-to-notebook-DPhxIEzF.js → answer-to-notebook-tACdCsTV.js} +1 -1
  35. package/dist/assets/dql-notebook/assets/{arrow-left-DNEb86Xc.js → arrow-left-CF6wxXU5.js} +1 -1
  36. package/dist/assets/dql-notebook/assets/{arrow-right-DpPWbwaD.js → arrow-right-C7G3M_S8.js} +1 -1
  37. package/dist/assets/dql-notebook/assets/{book-open-text-D7s5jo4X.js → book-open-text-DDBO8G7L.js} +1 -1
  38. package/dist/assets/dql-notebook/assets/chevron-left-DxajrX2v.js +6 -0
  39. package/dist/assets/dql-notebook/assets/{circle-x-Db3dXKg7.js → circle-x-HBvXjnT6.js} +1 -1
  40. package/dist/assets/dql-notebook/assets/clock-3-CJIdsPLt.js +6 -0
  41. package/dist/assets/dql-notebook/assets/dagre.esm-B6nvU4OB.js +1 -0
  42. package/dist/assets/dql-notebook/assets/{external-link-BxwXitO_.js → external-link-WciAU8Bu.js} +1 -1
  43. package/dist/assets/dql-notebook/assets/{grip-vertical-Dt4lkWRi.js → grip-vertical-DVu7ok6x.js} +1 -1
  44. package/dist/assets/dql-notebook/assets/index-B_kaoARS.css +1 -0
  45. package/dist/assets/dql-notebook/assets/{index-DKo-bwNw.js → index-D3wnucQC.js} +133 -128
  46. package/dist/assets/dql-notebook/assets/{link-2-Dfo2P6wi.js → link-2-C6uQx50X.js} +1 -1
  47. package/dist/assets/dql-notebook/assets/{list-tree-DiTmIWAL.js → list-tree-DapsIuQB.js} +1 -1
  48. package/dist/assets/dql-notebook/assets/{minimize-2-CMTAkPzL.js → minimize-2-BlVoipnT.js} +1 -1
  49. package/dist/assets/dql-notebook/assets/{panel-right-open-DwYr7FW4.js → panel-right-open-DcnKWxfx.js} +1 -1
  50. package/dist/assets/dql-notebook/assets/{play-BXhHYQ4x.js → play-CNuRuaAs.js} +1 -1
  51. package/dist/assets/dql-notebook/assets/{rotate-ccw-BNi6F8pl.js → rotate-ccw-B2p953Zh.js} +1 -1
  52. package/dist/assets/dql-notebook/assets/{semantic-fields-CNOGysAy.js → semantic-fields-2fWgkTJc.js} +1 -1
  53. package/dist/assets/dql-notebook/assets/{sliders-horizontal-Ec5MUMUW.js → sliders-horizontal-DwRTu1w4.js} +1 -1
  54. package/dist/assets/dql-notebook/assets/{star-B9leDkp_.js → star-Cbaj4F3i.js} +1 -1
  55. package/dist/assets/dql-notebook/assets/style-NlN9F6JE.js +23 -0
  56. package/dist/assets/dql-notebook/assets/{triangle-alert-BefTYCzx.js → triangle-alert-BPHvH1wA.js} +1 -1
  57. package/dist/assets/dql-notebook/assets/{upload-SPiOM2tQ.js → upload-DIqK0KE1.js} +1 -1
  58. package/dist/assets/dql-notebook/assets/{usePersistedAgentThreadId-C4foXeiQ.js → usePersistedAgentThreadId-DpQXOEDw.js} +1 -1
  59. package/dist/assets/dql-notebook/assets/{user-round-comGmyw-.js → user-round-DukNupB_.js} +1 -1
  60. package/dist/assets/dql-notebook/assets/{wand-sparkles-BffR4dF8.js → wand-sparkles-CAwLX0b9.js} +1 -1
  61. package/dist/assets/dql-notebook/assets/{workflow-ChmPTEzH.js → workflow-bOT-NqdO.js} +1 -1
  62. package/dist/assets/dql-notebook/assets/{wrench-DovaG_ze.js → wrench-1m0_kcza.js} +1 -1
  63. package/dist/assets/dql-notebook/assets/{x-nRx91AgW.js → x-fp82BETM.js} +1 -1
  64. package/dist/assets/dql-notebook/index.html +2 -2
  65. package/dist/commands/agent-eval-cassette.d.ts +97 -6
  66. package/dist/commands/agent-eval-cassette.d.ts.map +1 -1
  67. package/dist/commands/agent-eval-cassette.js +165 -22
  68. package/dist/commands/agent-eval-cassette.js.map +1 -1
  69. package/dist/commands/agent-eval-runtime.d.ts +23 -2
  70. package/dist/commands/agent-eval-runtime.d.ts.map +1 -1
  71. package/dist/commands/agent-eval-runtime.js +19 -2
  72. package/dist/commands/agent-eval-runtime.js.map +1 -1
  73. package/dist/commands/agent-trace.d.ts +3 -0
  74. package/dist/commands/agent-trace.d.ts.map +1 -0
  75. package/dist/commands/agent-trace.js +169 -0
  76. package/dist/commands/agent-trace.js.map +1 -0
  77. package/dist/commands/agent.d.ts +37 -5
  78. package/dist/commands/agent.d.ts.map +1 -1
  79. package/dist/commands/agent.js +534 -84
  80. package/dist/commands/agent.js.map +1 -1
  81. package/dist/commands/compile.d.ts +13 -1
  82. package/dist/commands/compile.d.ts.map +1 -1
  83. package/dist/commands/compile.js +36 -4
  84. package/dist/commands/compile.js.map +1 -1
  85. package/dist/commands/notebook.d.ts +2 -0
  86. package/dist/commands/notebook.d.ts.map +1 -1
  87. package/dist/commands/notebook.js +4 -0
  88. package/dist/commands/notebook.js.map +1 -1
  89. package/dist/commands/sync.d.ts.map +1 -1
  90. package/dist/commands/sync.js +11 -3
  91. package/dist/commands/sync.js.map +1 -1
  92. package/dist/index.js +2 -0
  93. package/dist/index.js.map +1 -1
  94. package/dist/llm/providers/dql-agent-provider.d.ts +29 -2
  95. package/dist/llm/providers/dql-agent-provider.d.ts.map +1 -1
  96. package/dist/llm/providers/dql-agent-provider.js +1008 -144
  97. package/dist/llm/providers/dql-agent-provider.js.map +1 -1
  98. package/dist/llm/types.d.ts +48 -1
  99. package/dist/llm/types.d.ts.map +1 -1
  100. package/dist/local-runtime.d.ts +271 -33
  101. package/dist/local-runtime.d.ts.map +1 -1
  102. package/dist/local-runtime.js +3658 -546
  103. package/dist/local-runtime.js.map +1 -1
  104. package/dist/package.json +10 -10
  105. package/dist/providers/oauth/claude-oauth.d.ts.map +1 -1
  106. package/dist/providers/oauth/claude-oauth.js +52 -18
  107. package/dist/providers/oauth/claude-oauth.js.map +1 -1
  108. package/dist/providers/oauth/codex-oauth.d.ts.map +1 -1
  109. package/dist/providers/oauth/codex-oauth.js +72 -44
  110. package/dist/providers/oauth/codex-oauth.js.map +1 -1
  111. package/dist/providers/subscription-cli.d.ts +20 -0
  112. package/dist/providers/subscription-cli.d.ts.map +1 -1
  113. package/dist/providers/subscription-cli.js +69 -11
  114. package/dist/providers/subscription-cli.js.map +1 -1
  115. package/package.json +10 -10
  116. package/dist/assets/dql-notebook/assets/AnalyticsHome-D5P6Ujwi.js +0 -6
  117. package/dist/assets/dql-notebook/assets/BusinessArtifactView-BIfNI-0S.js +0 -1
  118. package/dist/assets/dql-notebook/assets/LineageDAG-CSqcbDrE.js +0 -1
  119. package/dist/assets/dql-notebook/assets/LineageDetailView-DJZZjZu-.js +0 -1
  120. package/dist/assets/dql-notebook/assets/LineageDrawer-BcIipIc3.js +0 -1
  121. package/dist/assets/dql-notebook/assets/MiniLineageGraph-vH_MY_Ju.js +0 -1
  122. package/dist/assets/dql-notebook/assets/UnifiedAgentRunPanel--oxmjlgr.js +0 -88
  123. package/dist/assets/dql-notebook/assets/dagre.esm-C7pppQ1a.js +0 -23
  124. package/dist/assets/dql-notebook/assets/index-B3shyZsg.css +0 -1
  125. /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,b8 as Ye,c as le,r as R,t as q,u as Ht,a as Ot,b9 as Ze,L as qt,f as Ut,l as Vt,S as Ge,d as Qt,e as Yt}from"./index-DKo-bwNw.js";import{T as Zt}from"./TrustBadge-zm6g_SxZ.js";import{R as Gt,G as Xt}from"./AiBuildResult-B4yfGTTZ.js";import{W as Kt}from"./wrench-DovaG_ze.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()}/**
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.
@@ -1,4 +1,4 @@
1
- import{c as a}from"./index-DKo-bwNw.js";/**
1
+ import{c as a}from"./index-D3wnucQC.js";/**
2
2
  * @license lucide-react v0.563.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as a}from"./index-DKo-bwNw.js";/**
1
+ import{c as a}from"./index-D3wnucQC.js";/**
2
2
  * @license lucide-react v0.563.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as e}from"./index-DKo-bwNw.js";/**
1
+ import{c as e}from"./index-D3wnucQC.js";/**
2
2
  * @license lucide-react v0.563.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c}from"./index-DKo-bwNw.js";/**
1
+ import{c}from"./index-D3wnucQC.js";/**
2
2
  * @license lucide-react v0.563.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as o}from"./index-DKo-bwNw.js";/**
1
+ import{c as o}from"./index-D3wnucQC.js";/**
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-DKo-bwNw.js"></script>
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-B3shyZsg.css">
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
- /** Non-secret provenance, so a stale cassette is identifiable by eye. */
13
- recordedAt: string;
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 cassetteKey(input: {
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
- }): string;
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
- constructor(key: string, operation: string);
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":"AAgBA,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,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,UAAU,GAAG,qBAAqB,CAAC;IAC9C,yEAAyE;IACzE,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAChC;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE;IACjC,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;CACjG,GAAG,MAAM,CAWT;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;CAGf;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;gBACT,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAQ3C;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,YAAY,GACjB,aAAa,CAiEf;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
+ {"version":3,"file":"agent-eval-cassette.d.ts","sourceRoot":"","sources":["../../src/commands/agent-eval-cassette.ts"],"names":[],"mappings":"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"}
@@ -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 cassetteKey(input) {
27
- const canonical = JSON.stringify({
28
- p: input.providerName,
29
- o: input.operation,
30
- m: input.messages.map((message) => ({ r: message.role, c: message.content })),
31
- t: [...(input.toolNames ?? [])].sort(),
32
- e: input.options?.reasoningEffort ?? null,
33
- x: input.options?.maxTokens ?? null,
34
- z: input.options?.temperature ?? null,
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
- return createHash('sha256').update(canonical).digest('hex').slice(0, 32);
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
- constructor(key, operation) {
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 key = cassetteKey({ providerName: provider.name, operation: 'generate', messages, options });
97
- const hit = store.get(key);
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 key = cassetteKey({
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
- const hit = store.get(key);
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":"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"}
@@ -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;IAC/D,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;;;;;;;;;OASG;IACH,eAAe,EAAE,OAAO,CAAC;CAC1B;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,CAU/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,CAgBjE;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"}
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
- case 'blocked': return 'clarify';
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),