@counterfact-labs/cli 0.2.7 → 0.2.9

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 (145) hide show
  1. package/bundle/client-release.json +1 -1
  2. package/dist/adapters/analysis-results.js +87 -0
  3. package/dist/adapters/combined-results.js +27 -0
  4. package/dist/adapters/entry-files.js +5 -2
  5. package/dist/adapters/entry-packing.js +161 -0
  6. package/dist/adapters/entry-selection.js +13 -1
  7. package/dist/adapters/files.js +110 -5
  8. package/dist/adapters/git.js +10 -1
  9. package/dist/adapters/relay-plan.js +5 -7
  10. package/dist/adapters/release.js +4 -1
  11. package/dist/adapters/results.js +9 -2
  12. package/dist/adapters/selection.js +19 -9
  13. package/dist/adapters/settings.js +37 -6
  14. package/dist/adapters/source-relay-plan.js +7 -0
  15. package/dist/analysis-core/analysis/code-agents/skipped-files.js +1 -1
  16. package/dist/analysis-core/analysis/file-analysis-plan.js +1 -0
  17. package/dist/analysis-core/analysis/file-dependencies.js +1 -0
  18. package/dist/analysis-core/analysis/finding-activity-switch.js +1 -0
  19. package/dist/analysis-core/analysis/finding-identity.js +1 -0
  20. package/dist/analysis-core/analysis/finding-quality/policy.js +1 -0
  21. package/dist/analysis-core/analysis/folder-analysis-plan.js +1 -0
  22. package/dist/analysis-core/analysis/passes/full-file-passes.js +1 -0
  23. package/dist/analysis-core/analysis/project-architecture.js +1 -0
  24. package/dist/analysis-core/analysis/schemas.js +1 -1
  25. package/dist/analysis-core/chunks/2AASSZRO.js +35 -0
  26. package/dist/analysis-core/chunks/2YREYGOG.js +1 -0
  27. package/dist/analysis-core/chunks/33HRXJ5Q.js +1 -0
  28. package/dist/analysis-core/chunks/33IGHOYT.js +1 -0
  29. package/dist/analysis-core/chunks/4PT5C4IT.js +7 -0
  30. package/dist/analysis-core/chunks/4RXRAB5S.js +1 -0
  31. package/dist/analysis-core/chunks/4UDQBDDE.js +1 -0
  32. package/dist/analysis-core/chunks/{6RWEWBHK.js → 5B5UCWD3.js} +1 -1
  33. package/dist/analysis-core/chunks/6YCABS5T.js +1 -0
  34. package/dist/analysis-core/chunks/CQQ4TTXE.js +1 -0
  35. package/dist/analysis-core/chunks/CTLHKFPH.js +19 -0
  36. package/dist/analysis-core/chunks/F54DOWKN.js +6 -0
  37. package/dist/analysis-core/chunks/FRXOQ2M6.js +3 -0
  38. package/dist/analysis-core/chunks/HCPO6QPU.js +1 -0
  39. package/dist/analysis-core/chunks/HHFDNY6V.js +14 -0
  40. package/dist/analysis-core/chunks/{FBTOOUPL.js → HVQJKPQ4.js} +1 -1
  41. package/dist/analysis-core/chunks/INVTU73D.js +1 -0
  42. package/dist/analysis-core/chunks/JEWBPIQI.js +1 -0
  43. package/dist/analysis-core/chunks/JGK37AWN.js +1 -0
  44. package/dist/analysis-core/chunks/LFYTD7JF.js +1 -0
  45. package/dist/analysis-core/chunks/LMUXOKIM.js +1 -0
  46. package/dist/analysis-core/chunks/LOBIDUCA.js +1 -0
  47. package/dist/analysis-core/chunks/M5YWJY7P.js +1 -0
  48. package/dist/analysis-core/chunks/MGVIKA74.js +1 -0
  49. package/dist/analysis-core/chunks/MKYLK6DB.js +1 -0
  50. package/dist/analysis-core/chunks/MZOKZ3N6.js +1 -0
  51. package/dist/analysis-core/chunks/NXHVBJL4.js +1 -0
  52. package/dist/analysis-core/chunks/OKBK3JL3.js +1 -0
  53. package/dist/analysis-core/chunks/PBHHWFR6.js +1 -0
  54. package/dist/analysis-core/chunks/Q5WR6B2H.js +2 -0
  55. package/dist/analysis-core/chunks/QVXARKP7.js +1 -0
  56. package/dist/analysis-core/chunks/RQTNTIR4.js +1 -0
  57. package/dist/analysis-core/chunks/{RNTMH4MU.js → S27Y2TP5.js} +1 -1
  58. package/dist/analysis-core/chunks/SJESFYBA.js +10 -0
  59. package/dist/analysis-core/chunks/SP6XFHNH.js +1 -0
  60. package/dist/analysis-core/chunks/VDUFPTDD.js +1 -0
  61. package/dist/analysis-core/chunks/W24SFYZM.js +67 -0
  62. package/dist/analysis-core/chunks/YTHF2E2S.js +1 -0
  63. package/dist/analysis-core/chunks/YWL52FVW.js +2 -0
  64. package/dist/analysis-core/contracts/analysis-selection.js +1 -1
  65. package/dist/analysis-core/contracts/analysis-size.js +1 -0
  66. package/dist/analysis-core/contracts/execution-request.js +1 -0
  67. package/dist/analysis-core/contracts/intake-finding.js +1 -0
  68. package/dist/analysis-core/contracts/model-call-identity.js +1 -0
  69. package/dist/analysis-core/contracts/relay-analysis.js +1 -1
  70. package/dist/analysis-core/contracts/requests.js +1 -1
  71. package/dist/analysis-core/conventions/analysis-fit.js +1 -1
  72. package/dist/analysis-core/conventions/file-admission.js +1 -1
  73. package/dist/analysis-core/conventions/read-limits.js +1 -0
  74. package/dist/analysis-core/import/calls/modules.js +1 -1
  75. package/dist/analysis-core/import/entry-selection.js +1 -0
  76. package/dist/analysis-core/import/outside-loader-sources.js +1 -1
  77. package/dist/analysis-core/index.js +3 -3
  78. package/dist/analysis-core/requests/answer-formats.js +1 -1
  79. package/dist/analysis-core/requests/local-plan.js +1 -1
  80. package/dist/analysis-core/requests/planned-limits.js +1 -0
  81. package/dist/analysis-core/requests/registry.js +1 -1
  82. package/dist/analysis-core/requests/template-version.js +1 -1
  83. package/dist/analysis-core/requests/tools.js +1 -1
  84. package/dist/analysis-core/settings.js +1 -1
  85. package/dist/analysis-core/stages/engine-entry.js +1 -1
  86. package/dist/bundle/seal/engine.js +1 -1
  87. package/dist/cli/analysis-selection.js +47 -5
  88. package/dist/cli/api.js +1 -1
  89. package/dist/cli/commands/analyze.js +58 -15
  90. package/dist/cli/commands/skipped.js +65 -0
  91. package/dist/cli/context.js +2 -1
  92. package/dist/cli/finding-display.js +102 -7
  93. package/dist/cli/finding-settings.js +3 -1
  94. package/dist/cli/intake-payload.js +26 -2
  95. package/dist/cli/main.js +21 -7
  96. package/dist/cli/mcp-failure.js +6 -5
  97. package/dist/cli/mcp.js +134 -28
  98. package/dist/cli/relay-check.js +107 -23
  99. package/dist/cli/relay-failure.js +4 -4
  100. package/dist/cli/relay-preparation.js +50 -12
  101. package/dist/cli/result-check.js +31 -12
  102. package/dist/cli/saved-results.js +10 -0
  103. package/dist/cli/scope-choices.js +3 -3
  104. package/dist/cli/sign-in.js +2 -2
  105. package/dist/cli/skipped-files.js +22 -0
  106. package/dist/cli/summary.js +15 -1
  107. package/dist/contract/agent-choice.js +25 -2
  108. package/dist/contract/cli-api-messages.js +3 -0
  109. package/dist/contract/cli-refusals.js +31 -5
  110. package/dist/contract/cli-version.js +1 -1
  111. package/dist/contract/console-url.js +3 -0
  112. package/dist/contract/console.js +17 -38
  113. package/dist/contract/engine.js +1 -1
  114. package/dist/contract/messages.js +4 -3
  115. package/dist/contract/project-architecture.js +1 -0
  116. package/dist/contract/scope-choice.js +31 -11
  117. package/dist/contract/selection-offer.js +5 -8
  118. package/dist/gatekeeper/cli-api.js +70 -4
  119. package/dist/gatekeeper/console.js +19 -3
  120. package/dist/gatekeeper/model.js +5 -23
  121. package/dist/gatekeeper/trust/policy.js +2 -1
  122. package/package.json +4 -2
  123. package/dist/analysis-core/analysis/source-notes/types.js +0 -1
  124. package/dist/analysis-core/chunks/2PSNOSJ2.js +0 -1
  125. package/dist/analysis-core/chunks/2PZF54KH.js +0 -10
  126. package/dist/analysis-core/chunks/6B2HILSY.js +0 -1
  127. package/dist/analysis-core/chunks/6U2IR4XB.js +0 -1
  128. package/dist/analysis-core/chunks/7NEWZ74F.js +0 -1
  129. package/dist/analysis-core/chunks/CGCJN73D.js +0 -14
  130. package/dist/analysis-core/chunks/CWYVUGG4.js +0 -1
  131. package/dist/analysis-core/chunks/FSLWD2PE.js +0 -1
  132. package/dist/analysis-core/chunks/GOQVKWP3.js +0 -32
  133. package/dist/analysis-core/chunks/IHAVDX4L.js +0 -66
  134. package/dist/analysis-core/chunks/IVULXWQN.js +0 -21
  135. package/dist/analysis-core/chunks/K2GNDX3W.js +0 -1
  136. package/dist/analysis-core/chunks/K5FUABWW.js +0 -1
  137. package/dist/analysis-core/chunks/KGQYR62R.js +0 -7
  138. package/dist/analysis-core/chunks/KWECQJ6X.js +0 -1
  139. package/dist/analysis-core/chunks/PY5M22CL.js +0 -1
  140. package/dist/analysis-core/chunks/PYKAERZZ.js +0 -1
  141. package/dist/analysis-core/chunks/SKVEBOGA.js +0 -1
  142. package/dist/analysis-core/chunks/SLJ6CW7W.js +0 -1
  143. package/dist/analysis-core/chunks/UEORNVQB.js +0 -1
  144. package/dist/analysis-core/chunks/WYLIV2P2.js +0 -1
  145. package/dist/analysis-core/data/finding-types.js +0 -1
@@ -1,66 +0,0 @@
1
- import{a as Gt,b as Xt,c as Qo}from"./N7U5N42V.js";import{a as ki}from"./6RWEWBHK.js";import{b as mi,c as D,l as wi}from"./CGCJN73D.js";import{a as gi}from"./QDYMR6KS.js";import{c as yi}from"./M6HYSTQD.js";import{a as bi}from"./VGYWI4X2.js";import{b as Ve}from"./57M4OQJM.js";import{a as Oi}from"./J4AXGE5W.js";import{a as A,d as Si}from"./4H23CSUM.js";import{a as Xo,b as Ht,c as Wo,d as Vo,e as zo,f as Jo,g as Ut,h as Ln,i as hi}from"./K2GNDX3W.js";import{a as Zr}from"./DZZBQDGO.js";import{A as Tn,B as gt,C as We,D as ai,E as ci,F as li,G as Bt,H as wt,I as kt,J as qt,K as Go,L as pi,M as Kt,N as di,O as Fe,P as me,Q as fi,R as Nn,T as ui,a as Oe,b as jt,c as ei,d as ti,e as fe,h as ni,i as Fn,j as oi,k as si,l as Ko,m as ri,n as ii,o as Xe,w as Ho,x as Dt,y as Uo,z as ue}from"./IVULXWQN.js";import{b as ht}from"./K5FUABWW.js";import{a as K}from"./326F4XNG.js";import{a as xi}from"./4F6ZIHXU.js";import{e as Xr,g as Wr,h as Vr,i as M}from"./SLJ6CW7W.js";import{d as Gr,e as xe}from"./6U2IR4XB.js";import{c as re}from"./MJGB25S5.js";import{A as qo,B as Ge,a as be,c as Rn,d as zr,f as An,m as Jr,n as Qr,p as V,q as Ae,r as de,s as Mn,t as Me,x as Nt,y as Yr}from"./KGQYR62R.js";import{a as Lt}from"./IBCFGUHI.js";import{a as hn,b as L,c as gn}from"./2PSNOSJ2.js";import{a as qe,e as nr}from"./KU5DINLW.js";import{Ab as Fr,Ba as kr,Bb as Tr,Cb as Nr,Da as Sr,Db as Lr,Fb as En,Gb as jr,H as Fo,Ha as ye,Hb as Ue,Ib as Dr,Ja as yr,Jb as Br,K as pr,Kb as $n,L as dr,Lb as qr,M as fr,Mb as Kr,Na as Lo,Nb as Do,O as To,Oa as jo,P as ur,Pb as Hr,Q as mr,Qb as mt,Rb as Pe,Sa as Ft,Ta as T,Ub as q,Vb as Re,Y as hr,Ya as xr,aa as _n,d as pt,eb as br,f as Ao,g as Mo,gb as ee,h as yn,i as dt,ib as Or,jb as vr,l as bn,lb as _r,m as lr,mb as Cr,n as On,nb as Er,ob as Ir,qa as W,qb as $r,rb as ut,sb as Cn,tb as Pr,ua as wr,ub as He,vb as Rr,wb as Tt,yb as Ar,z as Z,za as No,zb as Mr}from"./GOQVKWP3.js";import{b as In}from"./74FPPPIG.js";import{c as ar,d as cr}from"./5TATKWLG.js";import{a as vn}from"./2PZF54KH.js";import{b as Mt}from"./6B2HILSY.js";import{c as Sn,f as pe}from"./JKWTHRUR.js";import{b as se,c as le}from"./3GUKUEEJ.js";import{a as Pn}from"./PYKAERZZ.js";import{c as Bo,e as Ur}from"./KWECQJ6X.js";import{b as wn,c as or,d as sr,f as $e,g as kn,h as rr}from"./FSLWD2PE.js";import{e as gr}from"./YUY436SM.js";import{b as Ke,c as ft,d as xn,e as ir}from"./C6X5GDG4.js";var Hl={repos:void 0,codeAgents:void 0,modelReader:void 0,projectAgents:void 0,analysisFlags:void 0,findingCheck:void 0,findingQuality:void 0,findingHeadlines:void 0,findingHeadlineDiagnostics:void 0,sawCode:void 0,sourceNotes:void 0,inspectPlan:void 0,passCursor:void 0,passFindings:void 0,passRetries:void 0,passResults:void 0,codeChecks:void 0,newVerdicts:void 0,repoCursor:void 0,mapped:void 0,findingsRaw:void 0,warnings:void 0,scopeCheck:void 0,structuresRaw:void 0,loadModes:void 0,openStructures:void 0,structurePassFailed:void 0,structureScopeCheck:void 0,structureStats:void 0,splitCheckRan:void 0,splitPassFailed:void 0,structurePhase:void 0,shapeFindings:void 0,splitEstimateBase:void 0,splitCheckPriced:void 0,splitFindingsPriced:void 0,readPaths:void 0,rechecks:void 0,recheckedChangeIds:void 0},Ul=Object.freeze(Object.keys(Hl));function Yo(e,t){return Mt.parse(e.mapped?.[t])}function vi(e,t){return Mt.safeParse(e.mapped?.[t])}function te(e){return(e.mapped??[]).map((t,n)=>({repoKey:e.repos?.[n]?.key??`repo-${n}`,fragment:Yo(e,n)}))}function Te(e){return Object.fromEntries((e.repos??[]).map(t=>[t.key,new Set(Object.keys(t.files??{}))]))}function ne(e){return Object.fromEntries(Ul.filter(t=>Object.hasOwn(e,t)).map(t=>[t,e[t]]))}function _i(e){let t=e.replace(/\s/g," "),n=[],o=[],s=!0;for(let i=0;i<e.length;i++){let r=t[i];r===" "&&s||(n.push(r),o.push(i),s=r===" ")}return{text:n.join("").trimEnd(),offsets:o}}function*Ci(e,t){let n=_i(e),o=_i(t).text;if(!o)return;let s=c=>e.slice(0,n.offsets[c]).split(`
2
- `).length,i=n.text.indexOf(o);if(i>=0){for(let c=i;c>=0;c=n.text.indexOf(o,c+1))yield[{from:s(c),to:s(c+o.length-1)}];return}let r=o.split(/\s*(?:\.{3}|…)\s*/);if(!(r.length<2||r.some(c=>!c)))for(let c=n.text.indexOf(r[0]);c>=0;c=n.text.indexOf(r[0],c+1)){let a=c+r[0].length,l=[{from:s(c),to:s(a-1)}],p=!0;for(let d of r.slice(1)){let u=n.text.indexOf(d,a);if(u<0||/\n\s*\n|\n\s*#{1,6}\s|\n[^\s][^:\n]*:/.test(e.slice(n.offsets[a-1]+1,n.offsets[u]))){p=!1;break}a=u+d.length,l.push({from:s(u),to:s(a-1)})}p&&(yield l)}}function oe(e,t){for(let n of Ci(e,t))return n[0].from;return null}function Ei(e,t,n){if(!Number.isInteger(n)||n<1)return null;for(let o of Ci(e,t)){if(o[0].from===n)return o;if(o[0].from>n)break}return null}function he(e,t){let n=[],o=e.flatMap(c=>c.skipped).map(c=>({...c}));for(let c of e)for(let[a,l]of Object.entries(c.files)){let p=Object.hasOwn(t,a)?t[a]:void 0;p===l?n.push(...c.sources.filter(d=>d.sourcePath===a)):o.push({path:a,reason:p===void 0?"Source file was not read.":l.startsWith(p)?"Source file was truncated while reading.":"Source file changed after admission."})}let s=o.filter((c,a)=>o.findIndex(l=>l.path===c.path&&l.reason===c.reason)===a),i=new Set(s.map(({path:c})=>c)).size,r=i?[`${i} ${i===1?"file was":"files were"} skipped, so some findings may be missing.`]:[];return{sources:n,skipped:s,warnings:r}}function Zo(e,t,n,o){let s=t.filter(l=>Object.hasOwn(l.files,e.path)&&l.sources.some(p=>p.unitKey===n&&p.sourcePath===e.path)&&typeof o[e.path]=="string"&&l.files[e.path].startsWith(o[e.path]));if(!s.length)return!0;let{excerpt:i,line:r}=e,c=Object.hasOwn(o,e.path)?o[e.path]:void 0;if(!i||r===null||typeof c!="string")return!1;let a=Ei(c,i,r);return a?s.some(l=>{let p=l.files[e.path];return typeof p!="string"||!p.startsWith(c)?!1:l.sources.some(d=>d.unitKey!==n||d.sourcePath!==e.path?!1:d.kind==="prompt"?a.every(u=>u.from>=d.sourceLine&&u.to<=(d.sourceEndLine??d.sourceLine)):a.some(u=>u.from<=d.sourceLine&&u.to>=d.sourceLine))}):!1}var Gl={"too-large":"File is too large.",allowance:"File allowance reached.",total:"Import allowance reached.","scan-limit":"Scan allowance reached.","tool-limit":"Tool file limit reached.",missing:"Source file is missing.",unreadable:"Source file could not be read."};function Ii(e){let t={files:{},sources:[],skipped:[]},{agent:n,files:o,allowance:s}=e;if(!e.enabled||!n.codeInputsJson)return t;let i=new Set(s.skipped.map(({path:d})=>d)),r=s.paths.filter(d=>!i.has(d)),c=new Set(r),a=(d,u)=>{t.skipped.some(g=>g.path===d&&g.reason===u)||t.skipped.push({path:d,reason:u})};s.skipped.forEach(({path:d,reason:u})=>{let g=Gl[u];g&&a(d,g)});let l=(d,u)=>{let{sourcePath:g,sourceLine:h}=d;if(i.has(g))return!1;if(!c.has(g))return a(g,"File was not admitted for this agent."),!1;let f=Object.hasOwn(o,g)?o[g]:void 0;return typeof f!="string"?(a(g,"Source file is missing."),!1):!Number.isInteger(h)||h<1||h>f.split(`
3
- `).length?(a(g,"Source line is missing or stale."),!1):d.name.trim()?(t.files[g]=f,t.sources.some(m=>m.kind===u&&m.name===d.name&&m.sourcePath===g&&m.sourceLine===h)||t.sources.push({...d,unitKey:n.unitKey,kind:u}),!0):(a(g,"Source name is missing."),!1)},p=new Set((n.toolsJson??[]).map(({name:d})=>d));for(let d of n.codeInputsJson.tools){if(!p.has(d.name)||!l(d,"tool"))continue;let u=ti([d.name],r,o,r);u.length||a(d.sourcePath,`Tool implementation was not admitted or found: ${d.name}.`);for(let g of u){let h=ei([d.name],[g],o);h.length||a(g,"Tool implementation is missing."),h.forEach(f=>l(f,"tool"))}}if(n.codeInputsJson.contextInputs.forEach(d=>l(d,"context")),n.site){let{path:d,span:u}=n.site,g=Object.hasOwn(o,d)?o[d]:void 0;Number.isInteger(u.to)&&u.to>=u.from&&(typeof g!="string"||u.to<=g.split(`
4
- `).length)?l({name:n.unitKey,sourcePath:d,sourceLine:u.from,sourceEndLine:u.to},"prompt"):a(d,"Prompt source lines are missing or stale.")}return t}function jn(e){let t=e.qualityConfig?.switches.codeInputs?(e.codeEvidence??[]).filter(s=>s.enabled):[];if(!t.length)return{scopes:t,sources:[],files:[]};let n=t.flatMap(s=>he(s.inputs,s.files).sources),o=[...new Map(t.flatMap(s=>s.inputs.flatMap(i=>Object.entries(i.files).flatMap(([r,c])=>{let a=Object.hasOwn(s.files,r)?s.files[r]:void 0;return a!==void 0&&c.startsWith(a)?[{repo:s.repo,path:r,text:Re(a),truncated:a!==c}]:[]}))).map(s=>[JSON.stringify([s.repo,s.path,s.text]),s])).values()];return{scopes:t,sources:n,files:o}}var ve=A.chat,j=8,z=1,Dn=40,ge=6e4,we=16e3,yt=8e4,B=4e3,Xl=1536,es=8192,ts=1024;function Ne(e){return es+e*Xl+ts}function ze(e,t="legacy"){return t==="whole-file"?ge+yt+B*e+4e3*4:ge+(we+B)*e+4e3*2}function Tf(e,t,n,o,s="legacy"){if(!n||t===0)return null;let i=Math.ceil(t/j),r=1+z,c=Ne(t)+(es+ts)*(i-1),a={template:o};if(s==="whole-file"){let p=Math.floor(t/j),d=t%j,u=pe(ze(j,s))*p+(d?pe(ze(d,s)):0);return re(e,a,"Double-check findings",ve,u*r,c*r)}let l=ge*i+(we+B)*t;return re(e,a,"Double-check findings",ve,(pe(l)+4e3*i)*r,c*r)}function ie(e){return{multiPass:e.CF_MULTI_PASS!=="0",splitCheck:e.CF_SPLIT_CHECK!=="0",findingCheck:e.CF_FINDING_CHECK!=="0",sourceNotes:e.CF_SOURCE_NOTES!=="0"}}function Bn(e,t={}){let n=Number(e.CF_PASS_CONCURRENCY??(t.forLocal?4:3));return{enabled:e.CF_PARALLEL_PASSES!=="0",concurrency:t.passConcurrency??(Number.isSafeInteger(n)&&n>0?n:3)}}function J(e,t){let n=t.analysisFlags;return n?{...n,findingCheck:n.findingCheck??ie(e).findingCheck,sourceNotes:n.sourceNotes??!1}:{...ie(e),sourceNotes:!1}}var _e=8e5;function H(e,t,n,o,s,i,r){return{routeId:mi(t),templateId:t,answerFormatId:Vr(t,n,e),model:o,calls:s,maxInputBytes:i,maxInputTokens:2e5,maxOutputTokens:r??yi({model:o})}}function qn(e,t){let n=e.CF_FINDING_QUALITY==="1",o=n&&e.CF_FINDING_FULL_CONTEXT==="1",s=n&&e.CF_FINDING_PRECISION_RULES==="1",i=t?.check.name??(s?"check-findings-precision-v1":"check-findings");return{enabled:n,fullContext:o,precisionRules:s,prompts:{derive:t?.derive.name??"derive-findings-legacy",check:i==="check-findings-legacy"?"check-findings":i}}}function os(e){return qn({},e.prompts).prompts}function ns(e,t,{enabled:n,prompts:o}){return Wr(e,t,n?o[e]:void 0)}function Je(e,t,n){return ns(e,t,{enabled:n?.switches.enabled??!1,prompts:qn({},n?.prompts).prompts})}function $i(e,t,n,o){let s=ie(e),i=qn(e),{fullContext:r}=i,c=ns("derive",e,i),a=ns("check",e,i),l=r?"whole-file":"legacy";return{findings:n,derive:H(e,c,"findings",A.generate,t,o),check:s.findingCheck?H(e,a,"check",ve,Math.ceil(n/j)*(z+1),Math.max(o,ze(j,l)),Ne(j)):null}}function Pi(e){if(e&&typeof e=="object"){for(let t of Object.values(e))Pi(t);Object.freeze(e)}return e}function Qf(e,t,n={}){let{enabled:o,fullContext:s,precisionRules:i,prompts:r}=qn(e),c=S=>o&&e[S]==="1",a=c("CF_FINDING_SECOND_OPINION"),l=c("CF_FINDING_RANKING"),p=o&&e.CF_FINDING_SEMANTIC_MATCHING!=="0",d=n.codeInputs!==!1&&o&&e.CF_FINDING_CODE_INPUTS!=="0",u=[],g=e.CF_FINDING_RECALL_VARIANT,h=n.recall!==!1&&c("CF_FINDING_RECALL")&&(g==="request-18"||g==="two-sweeps")?g:"off";n.recall!==!1&&c("CF_FINDING_RECALL")&&h==="off"&&u.push("Recall was skipped: no supported variant was selected.");let f=null,m=null;if(n.recall===!1&&e.CF_FINDING_RECALL==="1"&&u.push("Recall isn't available in local checks yet, so CF_FINDING_RECALL has no effect."),n.codeInputs===!1&&e.CF_FINDING_CODE_INPUTS==="1"&&u.push("Code evidence isn't available in local checks yet, so CF_FINDING_CODE_INPUTS has no effect."),a&&n.secondOpinion===!1&&u.push("Second opinion was skipped: local analysis supports Anthropic only."),a&&n.secondOpinion!==!1){let S=e.CF_FINDING_SECOND_OPINION_MODEL??"",b=Object.hasOwn(Sn,S)?Sn[S]:void 0,y=Sn[ve];b&&b.provider===e.CF_FINDING_SECOND_OPINION_PROVIDER&&b.provider!==y.provider&&b.input<=y.input&&b.output<=y.output&&(b.input<y.input||b.output<y.output)?(f=S,m=b.provider):u.push("Second opinion was skipped: configure a priced, cheaper model from a different provider.")}return Pi({ruleVersion:o?"precision-v1":"legacy",switches:{enabled:o,fullContext:s,precisionRules:i,secondOpinion:a,ranking:l,semanticMatching:p,codeInputs:d,recall:h!=="off"},prompts:{derive:t.promptVersion(r.derive,e),check:t.promptVersion(r.check,e)},models:{derive:A.generate,check:ve,scope:A.mechanical,secondOpinion:f},caps:{coreBytes:ge,siteBytes:we,findingTextBytes:B,siteWindowLines:Dn,citedBatchBytes:s?8e4:0,passBytes:15e4,passContextBytes:6e4,maxPasses:4,passFindings:h==="request-18"?18:mt,totalFindings:24,deriveOutputTokens:Si,checkBatchSize:j,checkOutputTokens:Ne(j),checkMaxRetries:z,checkOverheadTokens:4e3,secondOpinionBatchSize:4,secondOpinionInputBytes:ze(4)+(s?8e4:0),secondOpinionOutputTokens:2048,secondOpinionMaxRetries:z},recallVariant:h,displayPolicyVersion:l?"support-v1":"legacy",meaningMatchingVersion:p?"meaning-v1":"legacy",codeInputScopeVersion:d?"owned-code-v1":"legacy",secondOpinionProvider:m,diagnostics:u})}function xt(e,t,n={}){let o=os(e);e.switches.enabled&&t.assertPromptVersions([{...e.prompts.derive,name:o.derive},{...e.prompts.check,name:o.check}],n)}function ke(e,t,n,o){return{tools:t,rethrow(s){n?.(s),le(s)},available:e!==null,settleStartedOnError:e?.settleStartedOnError,withRetry:s=>ke(e?bi(e,s):null,t,n,o),async execute(s,i={}){if(o&&(i={...i,signal:i.signal?AbortSignal.any([o,i.signal]):o}),i.signal?.throwIfAborted(),!e)throw new Error("model unavailable");return"execute"in e?e.execute(s,i):xi(e,t,s,i)}}}function F(e,t,n={},o={}){return e.execute(Xr(t,n,o.maxInputBytes),o)}async function Le(e){return e.requestTools?e.requestTools():ki(gi(await e.instructions()))}var Jt=2,Wl=10*6e4;function Kn(e,t,n){return new se("llm",`The model could not read part ${e+1} of ${t} of this agent after ${n} tries, so this analysis stopped. Nothing from this run is saved; starting a new analysis reads every part again.`)}async function Ri(e){let{data:t,plan:n,progress:o}=e,s=n.passes.length,i={...t.passResults};if(!t.passResults){for(let p=0;p<(t.passCursor??0);p++)i[p]={findings:t.passFindings?.[p],retries:0};t.passRetries&&(i[t.passCursor??0]={retries:t.passRetries})}await o.checkpoint({inspectPlan:n,passResults:i});let r={...t,inspectPlan:n,passResults:i},c=n.passes.map((p,d)=>d).filter(p=>i[p]?.findings===void 0);for(let p of c)if((i[p]?.retries??0)>Jt)throw Kn(p,s,i[p].retries);let a;if(await K(e.onePartPerStep?c.slice(0,1):c,e.concurrency,async p=>{if(!(o.elapsedMs()>=Wl||a))try{let d=i[p]?.retries??0;for(;!a;){o.assertHeld(),o.signal?.throwIfAborted();let u;try{u=await e.run(p,d)}catch(h){if(o.rethrow?.(h),le(h),e.forLocal)throw h instanceof se?h:new Error("A findings reading pass failed; no completed report was written.");d++,o.log({level:"warn",code:"analysis.pass_failed",counts:{part:p+1,parts:s,retries:d}});let f={retries:d};if(await o.checkpoint({},{index:p,result:f}),i[p]=f,d>Jt)throw Kn(p,s,d);if(e.onePartPerStep)break;await new Promise(m=>setTimeout(m,1e3));continue}let g={findings:u,retries:d};await o.checkpoint({},{index:p,result:g}),i[p]=g;break}}catch(d){a??=d}}),a)throw a;let l=n.passes.every((p,d)=>i[d]?.findings!==void 0);return{...r,...l?{passCursor:s,passRetries:0,passFindings:n.passes.map((p,d)=>i[d].findings)}:{}}}var Hn={critical:0,high:1,medium:2,low:3},Mi=e=>(e.line??0)>0,Un=e=>Mi(e)&&!!e.excerpt?.trim();function ss(e,t){let n=r=>{let c=$n(r);return[c.filter(Un).length,c.filter(Mi).length,Number(!!r.site&&Un({...r.site,excerpt:r.excerpt}))]},[o,s]=[n(e),n(t)],i=o.findIndex((r,c)=>r!==s[c]);return i>=0&&o[i]>s[i]}function rs(e,t){let n=Hr(t.map(o=>o.audience));return n===e.audience?e:{...e,audience:n}}function Ai(e,t,n={}){let o=[];if(n.semanticMatching)for(let s of e){let i=Br({previous:o.map((r,c)=>Do(r,String(c))),current:s.map((r,c)=>Do(r,String(c))),enabled:!0});for(let r of i.matches){let c=Number(r.previousId),a=s[Number(r.currentId)];o[c]=rs(ss(a,o[c])?a:o[c],[o[c],a])}for(let r of i.unmatchedCurrent)o.push(s[Number(r.id)])}else for(let s of e.flat()){let i=o.findIndex(r=>qr(r,s));i<0?o.push(s):o[i]=rs(ss(s,o[i])?s:o[i],[o[i],s])}return o.sort((s,i)=>Hn[s.severity]-Hn[i.severity]).slice(0,t)}function Vl(e,t){let n=Hn[e.severity]-Hn[t.severity];if(n)return n<0;let o=$n(e).filter(Un).length-$n(t).filter(Un).length;return o?o>0:ss(e,t)}function Fi(e,t={}){let n=t.deferCap?1/0:24;if(t.dedupe===!1)return e.length<2?e[0]??[]:Ai(e,n,t);let o=e.length<2?e[0]??[]:Ai(e,1/0,t),s=o.map((a,l)=>o.map((p,d)=>l===d||Kr(a,p))),i=new Set,r=new Map;for(let a=0;a<o.length;a++){if(i.has(a))continue;let l=[a];i.add(a);for(let d=0;d<l.length;d++)for(let u=0;u<o.length;u++)i.has(u)||!s[l[d]][u]||(i.add(u),l.push(u));if(!l.every(d=>l.every(u=>s[d][u]))){for(let d of l)r.set(d,o[d]);continue}let p=l.reduce((d,u)=>Vl(o[u],o[d])?u:d,a);r.set(a,rs(o[p],l.map(d=>o[d])))}let c=r.size===o.length?o:o.flatMap((a,l)=>r.has(l)?[r.get(l)]:[]);return e.length<2?c:c.slice(0,n)}var Ti=e=>e.CF_FINDING_DEDUPE!=="0";var zl=15*6e4;async function Ni(e,t){let n=new AbortController,o={...e,execute:(r,c={})=>e.execute(r,{...c,signal:c.signal?AbortSignal.any([c.signal,n.signal]):n.signal})},s,i=new Promise((r,c)=>{s=setTimeout(()=>{let a=new se("llm","The reading part's model call timed out.");c(a),n.abort(a)},zl)});try{return await Promise.race([Promise.resolve().then(()=>t(o)),i])}finally{clearTimeout(s)}}var Jl=A.generate;function Ql(e,t){let n=t.qualityConfig;return{template:Je("derive",e,n),inputs:{maxFindings:String(mt),graph:JSON.stringify(t.graph,null,2),pass:t.pass??null,codeSources:t.codeSources??[],files:Object.entries(t.files).map(([s,i])=>({path:s,text:Re(i)}))},answerFormat:"findings",model:n?.switches.enabled?n.models.derive:Jl,limits:{effort:"high"}}}async function Li(e,t,n){n.qualityConfig&&xt(n.qualityConfig,t.tools,e);let o=await F(t,Ql(e,n),e);return Gr(o)}function ji(e,t,n){return e.flatMap(o=>{let s=o.site?{path:o.site.path,line:o.site.line,excerpt:o.excerpt}:null,i=[...s?[s]:[],...o.otherSites??[]].filter(l=>t.has(l.path));if(!i.some(l=>n.has(l.path)))return[];let r=o.site&&i[0]===s?0:Math.max(0,i.findIndex(l=>(l.line??0)>0)),c=i[r],a=i.filter((l,p)=>p!==r);return[{...o,site:{path:c.path,line:c.line},excerpt:c.excerpt,otherSites:a}]})}function Qe(e){let t=[],n=[],o=new Set;for(let s of e)for(let[i,r]of Object.entries(s.files??{})){if(o.has(i)){n.push({repo:s.key,path:i});continue}o.add(i),t.push({repo:s.key,path:i,text:r})}return{all:t,shadowed:n}}function Qt(e){return Object.fromEntries(Qe(e).all.map(t=>[t.path,t.text]))}function Yl(e,t){return Object.keys(t).filter(n=>ye(n,{nested:!0})).sort().map(n=>{let o=n.split("/").slice(-2,-1)[0]??"skill",{name:s,description:i}=kt(e,`${o}.md`,t[n]);return{name:s,description:i??""}})}function Di(e,t,n,o,s,i,r){o=ee(e,o,s);let c=new Set(t.core),a=n===0?[...t.core,...t.passes[0].own]:t.passes[n].own,l=[...t.core,...t.passes[n].own,...t.passes.length>1?t.passes[n].context??[]:[]],p=Me(e,{paths:Object.keys(o),files:o,graph:s,repos:r}),d=Ge(l.map(h=>({repo:"",path:h,text:c.has(h)?de(o[h]):o[h]})),c,Ae(s),p),u=Object.fromEntries(d.map(h=>[h.path,h.text])),g=i?.enabled?he(i.inputs.map(h=>({...h,files:ee(e,h.files,s)})),u):void 0;return{files:u,...t.passes.length>1?{pass:{part:n+1,count:t.passes.length,own:a,context:t.passes[n].context??[],skills:Yl(e,o)}}:{},read:d.map(h=>h.path),own:a,...g?{codeSources:g.sources,codeSkipped:g.skipped}:{}}}function Bi(e){return e.find(t=>!t.notFoundAt)??e[0]??null}function Zl(e,t){return t.startsWith(`${e}#`)?t.slice(e.length+1):null}function ep(e,t){let n=[];for(let o of e?.nodes??[]){let s=o.kind==="agent"?t?Zl(t,o.id):o.id.slice(o.id.indexOf("#")+1):null;s!==null&&n.push({node:o,unitId:s})}return n}function tp(e,t,n){if(n==null)return e[0];let o=e.flatMap(r=>(r.node.files??[]).flatMap(c=>(c.role==="system prompt"||c.role==="knowledge")&&c.path===t&&c.span?[{c:r,span:c.span}]:[])),s=o.find(r=>r.span&&r.span.from<=n&&n<=r.span.to);if(s)return s.c;let i=null;for(let r of o)r.span&&r.span.to<n&&(!i||r.span.to>i.to)&&(i={c:r.c,to:r.span.to});return i?.c??e[0]}function qi(e,t){return!e.file||!e.excerpt?[]:[...new Set(t.flatMap(n=>n.sources.filter(o=>o.kind!=="prompt"&&o.sourcePath===e.file&&Object.hasOwn(n.files,e.file)&&Zo({path:e.file,line:e.line??null,excerpt:e.excerpt},[{...n,sources:[o]}],o.unitKey,n.files)).map(o=>o.unitKey)))]}function np(e,t,n,o){let s=qi(e,n);if(s.length)return{unitKey:s.length===1?s[0]:null,anchors:s,code:!0};let i=e.file?ep(t,e.repo??"").filter(r=>r.node.files?.some(c=>c.path===e.file)):[];return{unitKey:i.length?tp(i,e.file,e.line).unitId:o,anchors:s,code:!1}}function Gn(e,t,n,o){let s=e[0];if(!s)return!0;let i=n.map(p=>({...p,input:{...p.input,files:Object.fromEntries(Object.entries(p.input.files).filter(([d,u])=>typeof p.files[d]=="string"&&u.startsWith(p.files[d])))}})),r=p=>i.filter(d=>!p.repo||!d.repo||d.repo===p.repo),c=r(s),a=sp(s,t,c.map(p=>p.input),o,{savedRepoPaths:!0});if(!a.unitKey&&!a.code)return!0;let l=a.unitKey?[a.unitKey]:a.anchors;return e.every(p=>{let d=r(p).filter(g=>!s.repo||!g.repo||g.repo===s.repo),u=a.unitKey?[]:qi(p,d.map(g=>g.input));return l.every(g=>(!u.length||u.includes(g))&&d.filter(h=>h.unitKey===g).every(h=>Zo({path:p.file??"",line:p.line??null,excerpt:p.excerpt??null},[h.input],g,h.files)))})}function Ki(e,t,n=!1){let o=n?cr:ar,s=t?e.filter(i=>i.repoPath&&o(i.repoPath)===t):[];return{rows:s,unitRows:s.filter(i=>i.unitKey)}}function op(e,t,n={}){let{rows:o,unitRows:s}=Ki(e,t,n.savedRepoPaths);return Bi(s)?.id??o[0]?.id??(e.length===1?e[0].id:null)}function sp(e,t,n,o,s){let i=o?op(o,e.repo,s):null,r=o?.find(p=>p.id===i)?.unitKey??null,{unitRows:c}=Ki(o??[],e.repo,s.savedRepoPaths);if(o&&(!e.repo||!c.length))return{unitKey:r,anchors:[],code:!1,agentId:i};let a=np(e,t,n,r);if(!o)return{...a,agentId:null};let l=c.find(p=>p.unitKey===a.unitKey);return{...a,unitKey:a.code?a.unitKey:l?.unitKey??r,agentId:a.unitKey?l?.id??(a.code?null:i):null}}async function is(e,t){let n=Di(e,t.plan,t.index,t.files,t.reading,t.codeEvidence,t.repos),o=await Ni(t.llm,r=>Li(e,r,{graph:t.graph,...n,qualityConfig:t.qualityConfig})),s=ji(o,new Set(n.read),new Set(n.own));if(!t.codeEvidence?.enabled)return s;let i=t.codeEvidence.inputs.flatMap(r=>r.unitKey?[{repo:r.repo,unitKey:r.unitKey,input:r,files:n.files}]:[...new Set(r.sources.map(c=>c.unitKey))].map(c=>({repo:r.repo,unitKey:c,input:r,files:n.files})));return s.filter(r=>Gn([...r.site?[{...r.site,excerpt:r.excerpt}]:[],...r.otherSites??[]].map(c=>({repo:t.codeEvidence?.repoByPath?.[c.path]??null,file:c.path,line:c.line,excerpt:c.excerpt})),t.graph,i,t.codeEvidence?.agentRows))}function Xn(e,t,n=15e4,o,s,i){let{all:r,shadowed:c}=Qe(e),a=ee(i,Object.fromEntries(r.map(k=>[k.path,k.text])),t),l=r.map(k=>({...k,text:a[k.path]})),p=o??V(t),d={},u=[],g={},h=0,f=Me(i,{paths:l.map(k=>k.path),files:a,graph:t,repos:e});for(let k of Ge(l,p,Ae(t),f)){if(!p.has(k.path)&&h+k.text.length>n){u.push(k.path);continue}let w=p.has(k.path)?de(k.text):k.text;d[k.path]=w,(g[k.repo]??=[]).push(k.path),h+=w.length}let m=rp(d,p),S=[...m>n?[`The agent's core files (${Math.round(m/1e3)} KB) are larger than one reading pass, so they were read in full and nothing else was read`]:[],...[Mn(p,a)].filter(k=>!!k)],b=Nt(f,u.map(k=>({path:k,reason:"total"})));b&&S.push(b);let y=s?.enabled?he(s.inputs.map(k=>({...k,files:ee(i,k.files,t)})),d):void 0;return{files:d,skipped:u,readByRepo:g,shadowed:c,warnings:[...S,...y?.warnings??[]],...y?{codeSources:y.sources,codeSkipped:y.skipped}:{}}}var rp=(e,t)=>Object.entries(e).reduce((n,[o,s])=>n+(t.has(o)?s.length:0),0);import{posix as Gi}from"node:path";var ip=e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),ap=(e,t)=>new RegExp(`(?<![\\w-])${ip(t)}(?![\\w-])`).test(e);function Ye(e,t){return t.name!==null&&ap(e,t.name)||Oe(t.paths,[e],n=>n).length>0}function Hi(e,t){let n=e.map(c=>c.paths.map(a=>t[a]).join(`
5
- `)),o=(c,a)=>Ye(n[c],e[a]),s=e.map(()=>new Set);for(let c=0;c<e.length;c++)for(let a=c+1;a<e.length;a++)(o(c,a)||o(a,c))&&(s[c].add(a),s[a].add(c));let i=new Set,r=[];for(let c=0;c<e.length;c++){if(i.has(c))continue;let a=[],l=[c];i.add(c);for(let p=l.shift();p!==void 0;p=l.shift()){a.push(p);for(let d of s[p])i.has(d)||(i.add(d),l.push(d))}a.sort((p,d)=>p-d),r.push({bundles:a.map(p=>e[p]),bytes:a.reduce((p,d)=>p+e[d].bytes,0),adjacent:Object.fromEntries(a.map(p=>[e[p].key,[...s[p]].map(d=>e[d].key).sort()]))})}return r.sort((c,a)=>a.bytes-c.bytes||(c.bundles[0].key<a.bundles[0].key?-1:1))}function Ui(e){let t=new Map(e.bundles.map(i=>[i.key,i])),n=new Set,o=i=>e.adjacent[i.key].filter(r=>n.has(r)).length,s=[];for(;t.size>0;){let i=[...t.values()].sort((r,c)=>o(c)-o(r)||e.adjacent[c.key].length-e.adjacent[r.key].length||c.bytes-r.bytes||(r.key<c.key?-1:1))[0];t.delete(i.key),n.add(i.key),s.push(i)}return s}function Xi(e,t,n,o,s){if(e.length<2)return{passes:e};let i=new Set(e.flatMap(l=>l.own)),r=[...i].filter(l=>/\.md$/i.test(l)).sort(),c=l=>[...new Set([...Oe(r,[n[l]],p=>p),...Oe(r,[n[l]],p=>Gi.relative(Gi.dirname(l),p))])];return{passes:e.map(l=>{let p=new Set([...t,...l.own]),d=new Map,u=new Set;for(let m of l.own){let S=new Set;for(let y of o)if(Ye(n[m],y))for(let k of y.paths.filter(w=>ye(w,{nested:!0})))S.add(k);for(let y of c(m))S.add(y);for(let y of[...S].filter(k=>ye(k,{nested:!0})))for(let k of c(y))S.add(k);for(let y of S)u.add(y);let b=[...S];for(let y=0;y<b.length;y++){let k=b[y];for(let w of c(k))S.has(w)||(S.add(w),b.push(w))}for(let y of S)i.has(y)&&!p.has(y)&&d.set(y,(d.get(y)??0)+1)}let g=[...d.keys()].sort((m,S)=>Number(u.has(S))-Number(u.has(m))||d.get(S)-d.get(m)||(m<S?-1:1)),h=[],f=0;for(let m of g){let S=n[m].length;f+S<=s&&(h.push(m),f+=S)}return{own:l.own,context:h.sort()}})}}import{basename as Wi}from"node:path";function as(e,t,n,o){let s=[...n].sort();return{key:e,name:t,paths:s,bytes:s.reduce((i,r)=>i+o[r].length,0)}}function Vi(e,t){let n=V(t),o=new Set(Object.keys(e).filter(a=>!n.has(a))),s=[],i=a=>a.filter(l=>o.delete(l)),r=new Set(t.edges.filter(a=>a.kind==="delegates").map(a=>a.to));for(let a of t.nodes){if(!r.has(a.id)||!a.sourceRef)continue;let l=a.sourceRef.path.replace(/\.md$/i,"")+"/",p=(a.files??[]).filter(h=>h.role==="skill").map(h=>Fo(h.path,{nested:!0})?.folder).filter(h=>!!h),d=[...o].filter(h=>h.startsWith(l)||p.some(f=>h.startsWith(f+"/"))),u=(a.files??[]).filter(h=>h.role==="reference"||h.role==="skill").map(h=>h.path),g=i([...d,...u]);g.length&&s.push(as(l,Wi(l),g,e))}let c=new Map;for(let a of o){let l=Fo(a,{nested:!0})?.folder;l&&c.set(l,[...c.get(l)??[],a])}for(let[a,l]of c)s.push(as(a,Wi(a),i(l),e));for(let a of o)s.push(as(a,null,[a],e));return s.sort((a,l)=>a.key<l.key?-1:a.key>l.key?1:0)}var cp=(e,t)=>e.reduce((n,o)=>n+t[o].length,0);function zi(e,t,n,o){let s=n-t;return e<=n||s<=0?1:Math.min(o,Math.ceil((e-t)/s))}function lp(e,t,n){return e.bytes<=t?[e.bundles]:Ui(e).flatMap(o=>o.bytes<=t?[o]:o.paths.map(s=>({key:s,name:null,paths:[s],bytes:n[s].length}))).map(o=>[o])}function pp(e,t){let n=e.split("/").slice(0,-1);for(let o=n.length;o>0;o--){let s=n.slice(0,o).join("/"),i=t.find(r=>r.own.some(c=>c.startsWith(`${s}/`)));if(i)return i}}function Ji(e){e={...e,files:ee(e.settings,e.files,e.graph)};let{passMaxBytes:t,maxPasses:n,graph:o}=e,s=V(o),i=Object.keys(e.files).filter(x=>s.has(x)).sort(),r=Object.fromEntries(Object.entries(e.files).map(([x,E])=>[x,s.has(x)?de(E):E])),c=t-cp(i,r),a=Object.keys(r).filter(x=>!s.has(x)),l=Me(e.settings,{paths:Object.keys(r),graph:o,files:r,repos:e.repos}),p=Ae(o),d=qo(a.filter(x=>Yr(l,x)),r,p,l),u=new Set(d),g=new Set(o.nodes.flatMap(x=>(x.files??[]).map(E=>E.path))),h=Object.fromEntries(a.filter(x=>!u.has(x)).map(x=>[x,r[x]])),f=Vi(h,o),m=x=>x.name!==null||dt(x.paths[0])&&g.has(x.paths[0]),S=f.filter(x=>!m(x)).flatMap(x=>x.paths),b=[Mn(i,e.files)].filter(x=>!!x),y=[],k=[];if(c<=0){b.push("The agent's core files fill a whole reading pass, so nothing else was read");let x=Nt(l,a.map(E=>({path:E,reason:"total"})));return x&&b.push(x),{core:i,passes:[{own:[]}],skipped:[...a].sort(),warnings:b}}for(let x of d){let E=r[x].length,C=k.find($=>$.bytes+E<=c);!C&&E<=c&&k.length<n&&(C={own:[],bytes:0},k.push(C)),C?(C.own.push(x),C.bytes+=E):y.push(x)}let w=new Set(k);for(let x of Hi(f.filter(m),h)){let E=x.bytes>c,C;for(let $ of lp(x,c,r)){let R=$.reduce((U,Eo)=>U+Eo.bytes,0),P=$.flatMap(U=>U.paths),Y=(E&&C&&C.bytes+R<=c?C:void 0)??k.find(U=>(!E||w.has(U))&&U.bytes+R<=c);Y?(E&&(C=Y),Y.own.push(...P),Y.bytes+=R):R>c||k.length>=n?y.push(...P):(C={own:[...P],bytes:R},k.push(C))}}k.length===0&&k.push({own:[],bytes:0});let O=qo(S,r,p,l);for(let x of O){let E=R=>R.bytes+r[x].length<=c,C=pp(x,k),$=C&&E(C)?C:k.find(E);if(!$){y.push(x);continue}$.own.push(x),$.bytes+=r[x].length}let v=k.map(x=>({own:x.own.sort()})),_=Nt(l,y.map(x=>({path:x,reason:"total"})));_&&b.push(_);let I=Xi(v,i,e.files,f,e.contextMaxBytes??6e4);return{core:i,passes:I.passes,skipped:y.sort(),warnings:b}}function je(e){let t=(n,o)=>`${n}#${o}`;return{nodes:e.flatMap(({repoKey:n,fragment:o})=>o.nodes.map(s=>({id:t(n,s.id),sourceRef:s.sourceRef,files:s.files}))),edges:e.flatMap(({repoKey:n,fragment:o})=>o.edges.map(s=>({from:t(n,s.from),to:t(n,s.to),kind:s.kind,sourceRef:s.sourceRef})))}}import{createHash as Qi}from"node:crypto";function Yi(e){let t=e.findingQuality;if(!t?.config.switches.codeInputs||t.codeEvidence)return e;let n=[],o={};for(let[s,i]of(e.repos??[]).entries()){let r=i.files??{},c=Mt.safeParse(e.mapped?.[s]),a=c.success?c.data.nodes:[],l=e.projectAgents,p=l?.enabled?[...l.byRepo[i.key]??[],...l.codeByRepo?.[i.key]??[]]:[];for(let d of p){if(!d.codeInputsJson)continue;let u=d.codeInputsJson.admittedPaths!==void 0,g={paths:u?[...d.codeInputsJson.admittedPaths]:[],skipped:[]},h=[],f=k=>k.filter(w=>{let O=r[w.sourcePath],v=d.codeInputsJson?.sourceHashes?.[w.sourcePath];return u&&O!==void 0&&v&&Qi("sha256").update(O).digest("hex")===v?!0:(h.push({path:w.sourcePath,reason:u?v?"The source revision differs from the imported source.":"The imported source revision is unknown.":"The imported file admission is unknown."}),!1)}),m={tools:f(d.codeInputsJson.tools),contextInputs:f(d.codeInputsJson.contextInputs)},b=a.find(k=>k.id===d.unitKey)?.files.find(k=>k.role==="system prompt"&&k.span),y=Ii({agent:{...d,codeInputsJson:m,...b?.span?{site:{path:b.path,span:b.span}}:{}},files:r,allowance:g,enabled:!0});y.skipped.push(...h),n.push({repo:i.key,unitKey:d.unitKey,input:y})}for(let[d,u]of Object.entries(r))o[JSON.stringify([i.key,d])]=Qi("sha256").update(u).digest("hex")}return{...e,findingQuality:{...t,codeEvidence:n,sourceHashes:o}}}function Zi(e,t,n={}){let o=e.findingQuality;if(!o?.config.switches.codeInputs)return e;let s=(o.codeEvidence??[]).flatMap(r=>he([{...r.input,files:cs(e,r.repo,r.input.files,n)}],t[r.repo]??{}).skipped.map(c=>({...c,repo:r.repo}))),i=new Set(s.map(r=>JSON.stringify([r.repo,r.path]))).size;return{...e,findingQuality:{...o,readingSkipped:s},warnings:[...new Set([...e.warnings??[],...i?[`${i} ${i===1?"file was":"files were"} skipped, so some findings may be missing.`]:[]])]}}function ea(e){if(!e.findingQuality?.config.switches.codeInputs)return;let{all:t}=Qe(e.repos??[]);return{enabled:!0,inputs:(e.findingQuality.codeEvidence??[]).map(o=>({...o.input,repo:o.repo,unitKey:o.unitKey,files:Object.fromEntries(Object.entries(o.input.files).filter(([s])=>t.some(i=>i.repo===o.repo&&i.path===s))),sources:o.input.sources.filter(s=>t.some(i=>i.repo===o.repo&&i.path===s.sourcePath))})),agentRows:e.projectAgents?.agentRows,repoByPath:Object.fromEntries(t.map(o=>[o.path,o.repo]))}}function cs(e,t,n,o){let s=vi(e,(e.repos??[]).findIndex(i=>i.key===t));return ee(o,n,s.success?s.data:{nodes:[]})}function ls(e,t,n,o={}){return Object.fromEntries(Object.entries(n).map(([s,i])=>{let r=e.repos?.find(a=>a.key===s)?.files??{},c=cs(e,s,Object.fromEntries(i.map(a=>[a,r[a]??""])),o);return[s,Object.fromEntries(Object.entries(c).map(([a,l])=>[a,t.core.includes(a)?de(l):l]))]}))}function ta(e,t,n,o={}){if(!e.findingQuality?.config.switches.codeInputs)return;let s=ls(e,t,n,o);return e.findingQuality.codeEvidence?.map(i=>({repo:i.repo,unitKey:i.unitKey,enabled:!0,inputs:[{...i.input,files:cs(e,i.repo,i.input.files,o)}],files:s[i.repo]??{},agentRows:e.projectAgents?.agentRows}))}var ps=e=>e>1?24:mt,De=e=>ps(e.inspectPlan?.passes.length??1);function dp(e,t,n){let o=Xn(e,t,void 0,void 0,void 0,n),s=V(t),i=Object.keys(o.files);return{core:i.filter(r=>s.has(r)),passes:[{own:i.filter(r=>!s.has(r))}],skipped:o.skipped,warnings:o.warnings}}function ds(e,t,n,o){return n?Ji({files:Qt(e),graph:t,passMaxBytes:15e4,maxPasses:4,settings:o,repos:e}):dp(e,t,o)}function na(e){let t=e.skipped.length;if(t===0)return null;let n=e.passes.length>1?`${e.passes.length} reading passes`:"one pass";return`${t} file${t===1?" was":"s were"} not analyzed because the agent is larger than ${n} can read: ${e.skipped.join(", ")}`}async function oa(e,t){let{graph:n,llm:o}=t,s=Yi(t.data),i=s.findingQuality?.config,r=s.repos??[],{all:c,shadowed:a}=Qe(r),l=ea(s),p=Qt(r),d=je(t.fragments),u=s.inspectPlan??ds(r,d,J(e,s).multiPass,e),g=s.passCursor??0,h=u.passes.length,f=(s.passFindings??[]).map(xe),m={...s,inspectPlan:u},S=t.parallel??Bn(e);if(h>1&&t.checkpoint&&(S.enabled||s.passResults)){if(!(s.passResults&&u.passes.every((O,v)=>s.passResults?.[v]?.findings!==void 0)))return{done:!1,data:await Ri({data:s,plan:u,progress:{...t.progress,checkpoint:(v,_)=>t.progress.checkpoint(_?v:{...ne(m),...v},_)},concurrency:S.concurrency,onePartPerStep:!S.enabled,forLocal:t.forLocal,run:(v,_)=>is(e,{llm:o.withRetry(_),qualityConfig:i,graph:n,plan:u,index:v,files:p,reading:d,codeEvidence:l,repos:r})})};f=u.passes.map((O,v)=>xe(s.passResults[v].findings))}else if(g<h){let w;try{w=await is(e,{llm:o.withRetry(s.passRetries??0),qualityConfig:i,graph:n,plan:u,index:g,files:p,reading:d,codeEvidence:l,repos:r})}catch(O){if(o.rethrow(O),le(O),t.forLocal)throw O instanceof se?O:new Error("A findings reading pass failed; no completed report was written.");if(h<2)throw O;let v=s.passRetries??0;if(t.progress.log({level:"warn",code:"analysis.pass_failed",counts:{part:g+1,parts:h,retries:v}}),v<Jt)return{done:!1,data:{...m,passRetries:v+1}};throw Kn(g,h,v+1)}if(f=[...f,w],m={...m,passCursor:g+1,passRetries:0,passFindings:f},await t.checkpoint?.(ne(m)),h>1)return{done:!1,data:m}}let b=new Set([...u.core,...u.passes.flatMap(w=>w.own)]),y={},k=Me(e,{paths:c.map(w=>w.path),files:p,graph:d,repos:r});for(let w of Ge(c,V(d),Ae(d),k))b.has(w.path)&&(y[w.repo]??=[]).push(w.path);return m.findingQuality&&i?.switches.codeInputs&&(m=Zi(m,ls(m,u,y,e),e)),{done:!0,data:m,findings:Fi(f,{semanticMatching:i?.switches.semanticMatching,dedupe:Ti(e),deferCap:t.forLocal||wn(e)}),plan:u,readByRepo:y,shadowed:a}}var Yt="Findings could not be checked a second time; all findings were kept.";function bt(e,t){let n=new Set(t),o=new Map,s=new Set,i=new Set,r=new Set;for(let c of e){if(!n.has(c.id)){i.add(c.id);continue}if(s.has(c.id)){r.add(c.id),o.delete(c.id);continue}s.add(c.id),o.set(c.id,c)}return{byId:o,unknownIds:[...i],duplicateIds:[...r]}}function Ot(e,t){let n=bt(e,t);return n.unknownIds.length===0&&n.duplicateIds.length===0}function Ze(e,t,n,o={}){let s=e.map((y,k)=>`f${k+1}`),i=!Ot(t,s),r=i?"Verdict ids did not match; all findings were kept.":n?.failure,c=new Set(n?.sentIds??s),a=new Map(n?.skipped.map(y=>[y.id,y.reason])??[]),l=i?["verdict ids did not match"]:[],p=new Map(t.map(y=>[y.id,y])),d=[...n?.rejectedBatches??[],...i?[{ids:s,verdicts:t}]:[]],u=new Map,g=[],h=o.mode==="offline-simulation"&&o.shadow?.done?bt(o.shadow.verdicts,s).byId:new Map;for(let y of d)for(let k of y.verdicts)y.ids.includes(k.id)&&u.set(k.id,k);let f=e.map((y,k)=>{let w=s[k],O=i?void 0:p.get(w),v=p.get(w)??u.get(w),_=c.has(w)||v!==void 0,I=_?"":a.get(w)??"No model call was made before the check stopped.",x="keep",E;_?r?E=r:O?O.reason.trim()?!O.evidenceAgainst?.trim()||!O.evidenceFor?.trim()||O.verdict==="drop"&&/^[\s"'“”‘’]*none found[\s."'“”‘’]*$/i.test(O.evidenceAgainst)?(E="The model supplied no usable evidence for its decision; this finding was kept.",l.push(`${w}: ${E}`)):(x=O.verdict,E=O.reason,g.push(w)):(E="The model returned an empty reason; this finding was kept.",l.push(`${w}: ${E}`)):(E="The model returned no verdict for this finding in the accepted response; it was kept.",l.push(`${w}: ${E}`)):E=I;let C=h.get(w);return!r&&g.includes(w)&&C&&o.shadow?.coverage.answeredIds.includes(w)&&(C.verdict==="drop"&&C.decisive&&C.quotes.some($=>$.side==="against")?(x="drop",E=C.reason):C.verdict!==x&&(x="keep",E="The checks disagree without decisive contrary evidence; this finding was kept.")),{id:w,title:y.title,verdict:x,reason:E,sent:_,skipReason:I,modelVerdict:v?.verdict??"",modelReason:v?.reason??"",evidenceAgainst:v?.evidenceAgainst??"",evidenceFor:v?.evidenceFor??""}}),m=[],S=e.filter((y,k)=>{let w=f[k];return w.verdict!=="drop"?!0:(m.push({finding:y,reason:w.reason}),!1)}),b=r?[Yt]:m.length?[`${m.length} ${m.length===1?"finding was":"findings were"} removed after a second read: ${m.map(({finding:y})=>y.title.replace(/\s+/g," ").trim()).join("; ")}`]:[];return{kept:r?e:S,dropped:m,warnings:b,verdicts:f,...l.length?{diagnostics:l}:{},...d.length?{rejectedBatches:d}:{},...n?.recordAcceptance?{acceptedIds:g}:{}}}import{posix as vt}from"node:path";function Wn(e,t,n,o={}){let s=t.replace(/\[[^\]]*\]\([^)]*\)/g,"").replace(/\b[a-z][a-z\d+.-]*:\/\/[^\s)>]+|\/\/[^\s)>]+/gi,""),i=[...Array.from(t.matchAll(/\]\(\s*(?:<([^>]+)>|([^\s)]+))/g),c=>({value:c[1]??c[2],relative:!0})),...Array.from(t.matchAll(/^\s*\[[^\]]+\]:\s*(?:<([^>]+)>|([^\s]+))/gm),c=>({value:c[1]??c[2],relative:!0})),...Array.from(s.matchAll(/\bRead\s+(?:`([^`\n]+)`|"([^"\n]+)"|'([^'\n]+)'|([^\s<>`"']+\.[a-zA-Z0-9]+))/gi),c=>({value:c[1]??c[2]??c[3]??c[4],relative:!1}))],r=[];for(let c of i){let a;try{a=decodeURIComponent(c.value.split(/[?#]/)[0]).replace(/[.,;]+$/,"")}catch{continue}if(!a||/^(?:[a-z][a-z0-9+.-]*:|\/\/|\\)/i.test(a)||a.startsWith("/")&&!o.rootRelative)continue;let l=a.startsWith("/"),p=vt.normalize(l?a.slice(1):vt.join(vt.dirname(e),a)),u=(l||c.relative||a.startsWith(".")?[p]:[p,vt.normalize(a)]).filter(h=>h!==".."&&!h.startsWith("../")),g=u.find(h=>Object.hasOwn(n,h))??(o.includeMissing?u[0]:void 0);g&&!r.includes(g)&&r.push(g)}if(o.includeNamed)for(let c of Object.keys(n))[c,vt.relative(vt.dirname(e),c)].some(l=>l&&s.includes(l)&&new RegExp("(?:^|[^\\p{L}\\p{N}_./-])"+l.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+"(?=$|[^\\p{L}\\p{N}_./-]|\\.(?:\\s|$))","u").test(s))&&!r.includes(c)&&r.push(c);return r}function et(e,t,n,o=Dn,s=t){let i=e.split(`
6
- `),r=Math.max(0,Math.min(i.length-1,(t??1)-1)),c=t===null||i.length<=o*2+1,a=c?0:Math.max(0,r-o),l=c?i.length:Math.min(i.length,Math.max(r,(s??1)-1)+o+1),p=()=>i.slice(a,l).map((g,h)=>`${a+h+1} ${g}`).join(`
7
- `),d=p();for(;l-a>1&&Buffer.byteLength(p())>n;)r-a>l-r-1?a++:l--;let u=D(p(),n);return{text:u,truncated:u!==d||t!==null&&(t<1||t>i.length)}}function tt(e,t,n=0,o="legacy",s){let i=fp(e,t,n);return o==="whole-file"?gp(e,t,n,i,s):i}function fp(e,t,n){let o=[],s=[],i=[],r=ge,c=t.repos.flatMap(l=>{let p=t.fragments.filter(h=>h.repoKey===l.key),d=V(je(p)),u=new Map(p.flatMap(h=>h.fragment.nodes.flatMap(f=>f.files.map(m=>[m.path,m.role])))),g=h=>["system prompt","soul","knowledge"].indexOf(u.get(h)??"");return[...d].map(h=>({repo:l,path:h,rank:g(h)<0?3:g(h)}))}).sort((l,p)=>l.rank-p.rank||l.repo.key.localeCompare(p.repo.key)||l.path.localeCompare(p.path));for(let{repo:l,path:p}of c){let d=l.files?.[p],u=d===void 0?"":d.split(`
8
- `).map((f,m)=>`${m+1} ${f}`).join(`
9
- `),g=D(u,r),h=d===void 0||g!==u;i.push({repo:l.key,path:p,line:1,text:g,truncated:h}),r-=Buffer.byteLength(g),h&&o.push({kind:"core-incomplete",repo:l.key,path:p})}i.length===0&&o.push({kind:"no-core"});let a=e.flatMap((l,p)=>{let d=[...l.site?[{...l.site,repo:l.siteRepo}]:[],...l.otherSites];if(kn(l.category)&&d.length<$e(l.category))return s.push({id:`f${n+p+1}`,reason:`${l.category} requires ${$e(l.category)} cited sites; ${d.length} supplied.`}),[];let u=d.map(m=>{let S=t.repos.find(y=>y.key===m.repo),b=S?.files?.[m.path];return b===void 0?(o.push({kind:"site-unavailable",repo:m.repo??null,path:m.path,line:m.line}),{repo:m.repo??"",path:m.path,line:m.line??0,text:"",truncated:!0}):{repo:S.key,path:m.path,line:m.line??0,...et(b,m.line,Math.floor(we/d.length))}}),g=D(l.title,Math.floor(B/4)),h=l.category??"",f=D(l.cause,B-Buffer.byteLength(g)-Buffer.byteLength(h));return[{id:`f${n+p+1}`,title:g,body:f,category:h,sites:u,truncated:f!==l.cause||g!==l.title}]});return{coreFiles:i,findings:a,diagnostics:o,skipped:s}}var Se=e=>Buffer.byteLength(JSON.stringify(e)),Q=e=>JSON.stringify([e.repo,e.path]),fs=e=>[...new Map(e.map(t=>[Q(t),t])).values()],up=({repo:e,path:t})=>({repo:e,path:t});function us(e,t,n){if(Se(n(e))<=t)return e;let o=0,s=Buffer.byteLength(e);for(;o<s;){let i=Math.ceil((o+s)/2);Se(n(D(e,i)))<=t?o=i:s=i-1}return D(e,o)}function mp(e,t){let n=[];for(let s of e)Se([...n,s].map(i=>({...i,text:""})))<=ge?n.push(s):t.push({kind:"core-omitted",repo:s.repo,path:s.path});let o=[];for(let[s,i]of n.entries()){let r=n.slice(s+1).map(l=>({...l,text:""})),c=us(i.text,ge,l=>[...o,{...i,text:l},...r]),a=i.truncated||c!==i.text;a&&t.push({kind:"core-incomplete",repo:i.repo,path:i.path}),o.push({...i,text:c,truncated:a})}return o}function hp(e,t){let n=t.repos.find(s=>s.key===e.repo)?.files??{},o=n[e.path];return o===void 0?[]:Wn(e.path,o,n,{includeMissing:!0,includeNamed:!0,rootRelative:!0}).filter(s=>s!==e.path).sort().map(s=>({repo:e.repo,path:s}))}function gp(e,t,n,o,s){let i=[...o.diagnostics],r=mp(o.coreFiles,i),c=o.coreFiles.map(up),a=e.map(v=>{let _=[...v.site?[{repo:v.siteRepo??"",path:v.site.path}]:[],...v.otherSites.map(x=>({repo:x.repo??"",path:x.path}))],I=fs([...c,..._]);return fs([...I,...I.flatMap(x=>hp(x,t))])}),l=v=>t.repos.find(_=>_.key===v.repo)?.files?.[v.path],p=new Set(c.map(Q)),d=new Set(o.findings.map(v=>v.id)),g=fs(a.flatMap((v,_)=>d.has(`f${n+_+1}`)?v:[])).filter(v=>!p.has(Q(v))).flatMap(v=>{let _=l(v);return _===void 0?(i.push({kind:"linked-unavailable",repo:v.repo,path:v.path}),[]):[{...v,line:1,text:_.split(`
10
- `).map((I,x)=>`${x+1} ${I}`).join(`
11
- `),truncated:!1}]}),h=[],f=Se(g)<=yt;for(let[v,_]of g.entries()){let I=f?yt:Math.floor((yt-Se(h))/(g.length-v))-1;if(f||Se(_)<=I){h.push(_);continue}let x=o.findings.flatMap($=>$.sites.filter(R=>Q(R)===Q(_)).map(R=>({line:R.line||null,cap:Math.floor(we/$.sites.length)}))),E=$=>{let R=new Map;for(let P of x.length?x:[{line:null,cap:we}])for(let Y of et(l(_),P.line,Math.min(P.cap,$)).text.split(`
12
- `)){let U=/^(\d+) /.exec(Y);U&&Y.length>(R.get(Number(U[1]))?.length??0)&&R.set(Number(U[1]),Y)}return{..._,text:[...R].sort((P,Y)=>P[0]-Y[0]).map(([,P])=>P).join(`
13
- `),truncated:!0}},C=E(we);if(Se(C)>I){let $=Math.max(0,Math.floor((I-Se({..._,text:"",truncated:!0}))/6/Math.max(1,x.length)));C=E($)}Se(C)<=I&&h.push(C),i.push({kind:"whole-file-incomplete",repo:_.repo,path:_.path})}let m=new Map([...r,...h].map(v=>[Q(v),v])),S=v=>{let _=l(v);return _!==void 0&&(!Number.isInteger(v.line)||v.line<1||v.line>_.split(`
14
- `).length)},b=[...o.skipped??[]],y=o.findings.flatMap(v=>{let _=v.sites.map(C=>({...C,text:"",truncated:!m.has(Q(C))||m.get(Q(C)).truncated||S(C)})),I={...v,title:"",body:"",sites:_};if(Se(I)>B-2)return b.push({id:v.id,reason:"The cited paths exceed the serialized claim allowance."}),[];let x=us(v.title,B-2,C=>({...I,title:C})),E=us(v.body,B-2,C=>({...I,title:x,body:C}));return[{...v,title:x,body:E,sites:_,truncated:v.truncated||x!==v.title||E!==v.body}]}),k=r.length>0&&r.length===o.coreFiles.length&&r.every(v=>!v.truncated),w=e.map((v,_)=>{let I=`f${n+_+1}`,x=y.find(C=>C.id===I),E=o.findings.find(C=>C.id===I)?.sites.filter(S).map(Q)??[];return{fingerprint:q(v),requested:a[_],included:a[_].filter(C=>l(C)!==void 0&&m.has(Q(C))),missing:a[_].filter(C=>l(C)===void 0),truncated:a[_].filter(C=>l(C)!==void 0&&(!m.has(Q(C))||m.get(Q(C)).truncated||E.includes(Q(C)))),claimTruncated:x?.truncated??!0,coreComplete:k}}),O={coreFiles:r,citedFiles:h,findings:y,diagnostics:[...new Map(i.map(v=>[JSON.stringify(v),v])).values()],skipped:b,coverage:w};return O.serializedBytes=s.checkPayloadBytes(O),O}var wp="We couldn't see this agent's code, so this may already be handled there.";function sa(e){return Object.values(e).some(t=>[...t].some(n=>vn(n)!==null))}function ra(e,t){return e==="better_as_code"&&t===!1?wp:void 0}function _t(e){return e.sawCode??e.findingQuality?.sawCode}var ia={critical:0,high:1,medium:2,low:3},kp="No strong findings to show.",Sp=/^[\s"'“”‘’]*none found[\s."'“”‘’]*$/i,yp=/"([^"\n]*(?:\n[^"\n]*)*)"|“([^”]+)”|`([^`]+)`|‘([^’]+)’|'([^'\n]+)'/g;function Vn(e,t){return bt(e.map(n=>({...n,id:n.fingerprint})),t).byId}function Zt(e,t){return e.repo===t.repo&&e.path===t.path}function zn(e,t){let n=e.repos.filter(o=>o.key===t.repo);return n.length===1?n[0].files?.[t.path]:void 0}function la(e,t,n){return e===void 0||t===null||!Number.isInteger(t)||t<1||!n?.trim()?!1:oe(e.split(`
15
- `).slice(t-1).join(`
16
- `),n)===1}function xp(e){return[...e.site?[{repo:e.siteRepo??"",...e.site,excerpt:e.excerpt}]:[],...e.otherSites]}function aa(e,t){let n=zn(t,e),o=e.line>1?n.split(`
17
- `).slice(0,e.line-1).join(`
18
- `)+`
19
- `:"",s=n.replace(/\s+/g," "),i=e.excerpt.replace(/\s+/g," ").trim(),r=o.replace(/\s+/g," ").length,c=s.indexOf(i,r);if(c>=0)return{from:c,to:c+i.length};let a=i.split(/\s*(?:\.{3}|…)\s*/),l=s.indexOf(a[0],r),p=l;for(let d of a){let u=s.indexOf(d,p);if(u<0)return null;p=u+d.length}return l<0?null:{from:l,to:p}}function bp(e,t,n){if(!Zt(e,t))return!0;let o=aa(e,n),s=aa(t,n);return o!==null&&s!==null&&(o.to<=s.from||s.to<=o.from)}function Op(e,t,n,o){if(!kn(e.category))return"The finding has no supported evidence category.";if(!e.site||!e.siteRepo)return"The finding has no fetched primary site.";if(t.length<$e(e.category))return"The category's required quoted sites are missing.";if(!n)return"Evidence coverage was not recorded unambiguously.";if(n.claimTruncated)return"The claim was truncated in the check.";if(!n.coreComplete||n.missing.length||n.truncated.length)return"Required evidence was unavailable or truncated.";if(n.requested.length===0||n.requested.some(s=>!n.included.some(i=>Zt(s,i))||zn(o,s)===void 0))return"Required files were not included in the check.";for(let s of t){if(!n.requested.some(i=>Zt(i,s))||!n.included.some(i=>Zt(i,s)))return"A cited file was not included in the check.";if(!la(zn(o,s),s.line,s.excerpt))return"A cited quote could not be verified at its source line."}return $e(e.category)===2&&!t.some((s,i)=>t.slice(i+1).some(r=>bp(s,r,o)))?"The category needs distinct quoted sites.":null}function vp(e,t){let n=e.cause.replace(/\s+/g," ").trim();for(let i of t){let r=i.excerpt?.replace(/\s+/g," ").trim();r&&(n=n.replaceAll(r,""))}if(!n||n===e.title)return!1;let o=/\b(?:without|before|instead|different|wrong|repeatedly|twice|never|cannot|can't|unable to|fails? to|unapproved|unauthori[sz]ed)\b/i,s=/\b(?:send(?:s|ing)?|sent|delet(?:e[sd]?|ing)|appl(?:y|ies|ied|ying)|grant(?:s|ed|ing)?|revok(?:e[sd]?|ing)|return(?:s|ed|ing)?|rout(?:e[sd]?|ing)|run(?:s|ning)?|execut(?:e[sd]?|ing)|writ(?:e[sd]?|ing)|read(?:s|ing)?|retry|retries|retried|retrying|skip(?:s|ped|ping)?|omit(?:s|ted|ting)?|block(?:s|ed|ing)?|allow(?:s|ed|ing)?|charg(?:e[sd]?|ing)|pay(?:s|ing)?|paid|los(?:e[sd]?|ing)|receiv(?:e[sd]?|ing)|select(?:s|ed|ing)?|exclud(?:e[sd]?|ing)|includ(?:e[sd]?|ing)|schedul(?:e[sd]?|ing))\b/i;return o.test(n)&&s.test(n)}function _p(e,t,n,o){let s=[...e.matchAll(/(?:^|[\s(`*])([^\s"'“”‘’`() *]+):(\d+)(?:-\d+)?/g)].map(c=>{let a=c[1],l=n.included.filter(d=>d.path===a||`${d.repo}:${d.path}`===a),p=[...new Map(l.map(d=>[JSON.stringify([d.repo,d.path]),d])).values()];return{from:c.index,to:c.index+c[0].length,line:Number(c[2]),ref:p.length===1?p[0]:void 0}});if(s.length===0||s.some(c=>!c.ref))return!1;let i=new Map;for(let c of e.matchAll(yp)){let a=c.index,l=a+c[0].length;if(s.some(g=>g.from>=a&&g.to<=l))continue;let p=c.slice(1).find(g=>g!==void 0),d=s.flatMap((g,h)=>la(zn(o,g.ref),g.line,p)?[h]:[]);if(d.length!==1)return!1;let u=d[0];i.set(u,[...i.get(u)??[],p])}let r=!1;for(let c=0;c<s.length;c++){let a=s[c],{line:l,ref:p}=a,d=i.get(c)??[];if(d.length===0)return!1;t.some(u=>Zt(u,p)&&u.line===l&&d.some(g=>oe(g,u.excerpt??"")!==null))&&(r=!0)}return r}function ca(e,t,n,o){if(!e?.accepted)return"No accepted check verdict is available.";let s=e.verdict;return!s.sent||s.verdict!=="keep"||s.modelVerdict!=="keep"||!s.reason.trim()||s.reason!==s.modelReason?"The check kept the finding without an accepted supporting decision.":_p(s.evidenceFor,t,n,o)?Sp.test(s.evidenceAgainst)?null:"Contrary check evidence has not been resolved.":"The check supplied no verified supporting quote."}function pa(e){let t=e.findings.map(q),n=Vn(e.coverage,t),o=Vn(e.verdicts,t),s=new Set(e.shadowRequestedIds??(e.shadowVerdicts===void 0?[]:t)),i=Vn(e.shadowVerdicts??[],[...s]);return e.findings.map((r,c)=>{let a=t[c],l=xp(r),p=n.get(a),d=Op(r,l,p,e.sources),u=ra(r.category,e.sawCode)??d;!u&&!vp(r,l)&&(u="The finding does not explain a concrete behavioral consequence."),u||(u=ca(o.get(a),l,p,e.sources)),!u&&s.has(a)&&(u=ca(i.get(a),l,p,e.sources)),!u&&r.sourceNotes&&(r.sourceNotes.support!=="supported"||r.sourceNotes.counterEvidence.length>0)&&(u="Source notes contain uncertain support or unresolved contrary evidence.");let g=u?"not sure":"sure";return{fingerprint:a,support:d?"incomplete":"complete",confidence:g,weak:g!=="sure"||r.severity==="low",reason:u??(r.severity==="low"?"Verified support, but low impact.":"Verified quotes and an accepted keep support the stated consequence.")}})}function kh(e,t,n){let o=e.map(n??(a=>q(a))),s=Vn(t,o),i=e.map((a,l)=>{let p=o[l],d=s.get(p),u=d?.confidence==="sure",g=u&&d?.support==="complete"&&!d.weak&&a.severity!=="low";return{finding:a,fingerprint:p,sure:u,strong:g}}).sort((a,l)=>Number(l.strong)-Number(a.strong)||ia[a.finding.severity]-ia[l.finding.severity]||Number(l.sure)-Number(a.sure)||(a.fingerprint<l.fingerprint?-1:a.fingerprint>l.fingerprint?1:0)),r=i.filter(a=>a.strong).slice(0,3),c=new Set(r);return{ordered:i.map(a=>a.finding),defaultIds:r.map(a=>a.fingerprint),hiddenIds:i.filter(a=>!c.has(a)).map(a=>a.fingerprint),emptyMessage:!r.length&&i.length?kp:null}}import{createHash as Cp}from"node:crypto";var da=e=>Cp("sha256").update(JSON.stringify(e)).digest("hex"),Jn=e=>[...new Set(e)],Ep=e=>!e.trim()||/^[\s"'“”‘’]*none found[\s."'“”‘’]*$/i.test(e);function Ip(e,t,n){if(!(e>0)||!t.switches.enabled||!t.switches.secondOpinion||!t.models.secondOpinion||!t.secondOpinionProvider)return null;let o=Math.ceil(e/t.caps.secondOpinionBatchSize)*(1+t.caps.secondOpinionMaxRetries);return re(n,{template:"second-opinion"},"Shadow finding opinion",t.models.secondOpinion,(pe(t.caps.secondOpinionInputBytes)+t.caps.checkOverheadTokens)*o,t.caps.secondOpinionOutputTokens*o)}function $p(e){let t=[...e.skipped??[]],n=e.coreFiles.length>0&&e.coreFiles.every(i=>!i.truncated&&i.text.trim()),o=new Map(e.assessments?.map(i=>[i.fingerprint,i]));return{findings:e.findings.filter(i=>{let r=o.get(e.fingerprints?.[i.id]??""),c=e.coverage?.filter(f=>f.fingerprint===e.fingerprints?.[i.id]),a=e.citedFiles!==void 0,l=[...e.coreFiles,...e.citedFiles??[]],p=!a||c?.length===1&&c[0].coreComplete&&!c[0].claimTruncated&&!c[0].missing.length&&!c[0].truncated.length&&c[0].requested.every(f=>c[0].included.some(m=>m.repo===f.repo&&m.path===f.path)&&l.some(m=>m.repo===f.repo&&m.path===f.path&&!m.truncated)),d=n&&!i.truncated&&i.sites.length>0&&i.sites.every(f=>!f.truncated&&(a?l.some(m=>m.repo===f.repo&&m.path===f.path&&!m.truncated&&m.text.trim()):f.text.trim()))&&p&&r?.support!=="incomplete",u=e.disputedIds?.includes(i.id)??!1,g=r===void 0||r.weak||r.confidence==="not sure",h=d?!g&&!u?"Strong, uncontested finding needs no shadow check.":null:"Second opinion needs complete fetched evidence.";return h&&t.push({id:i.id,reason:h}),h===null}),skipped:t}}function Pp(e,t){return e.quote.trim()?t.some(n=>{if(n.repo!==e.repo||n.path!==e.path||n.truncated)return!1;let o=n.text.split(`
20
- `).map(a=>/^(\d+) (.*)$/.exec(a));if(o.some(a=>a===null))return!1;let s=o;if(s.some((a,l)=>l>0&&Number(a[1])!==Number(s[l-1][1])+1))return!1;let i=s.findIndex(a=>Number(a[1])===e.line);if(i<0)return!1;let r=s.slice(i).map(a=>a[2]).join(`
21
- `),c=r.indexOf(e.quote);return c>=0&&!r.slice(0,c).includes(`
22
- `)&&oe(r,e.quote)===1}):!1}function Rp(e,t,n){if(!e.reason.trim())return"The shadow model returned a blank reason.";if(!e.evidenceAgainst.trim()||!e.evidenceFor.trim())return"The shadow model omitted an evidence field.";let o=e.verdict==="drop"?"against":"for",s=o==="against"?e.evidenceAgainst:e.evidenceFor;if(Ep(s)||e.verdict==="drop"&&!e.decisive)return"The shadow verdict has no decisive evidence.";let i=e.quotes.filter(r=>r.side===o);return i.length===0||e.quotes.some(r=>!Pp(r,[...n,...t.sites]))||i.some(r=>!s.includes(r.quote))?"The shadow verdict lacks exact deciding quotes at the supplied file lines.":null}function Ap(e,t){return{template:"second-opinion",answerFormat:"opinion",model:t.models.secondOpinion,inputs:{checkTemplate:os(t).check,checkInput:e},limits:{maxTokens:t.caps.secondOpinionOutputTokens,thinking:"disabled"}}}async function ms(e,t,n,o){let{findings:s,skipped:i}=$p(t),{saved:r,...c}=t,a=da(c),l=da(sr(o)?n:{config:n,categories:or(o)}),p={shadowOnly:!0,done:!1,cursor:0,retries:0,inputHash:a,configHash:l,verdicts:[],diagnostics:e.tools.checkDiagnosticsText(t.diagnostics),coverage:{requestedIds:t.findings.map(O=>O.id),sentIds:[],answeredIds:[],missingIds:s.map(O=>O.id),failedIds:[],skipped:i},disagreements:[],batches:[],estimate:null},d=null;if(!n.switches.enabled||!n.switches.secondOpinion?d="Second opinion is off.":t.purpose!=="benchmark"||t.fictional!==!0?d="Second opinion is shadow-only for fictional benchmarks; customer calls are off.":(!n.models.secondOpinion||!n.secondOpinionProvider)&&(d=n.diagnostics.join(" ")||"Second opinion has no approved provider/model configuration."),d){let O=r?structuredClone(r):p;return{...O,done:!0,verdicts:[],disagreements:[],diagnostics:[...O.diagnostics,d]}}if(r&&(r.inputHash!==a||r.configHash!==l))return{...structuredClone(r),done:!0,verdicts:[],disagreements:[],diagnostics:[...r.diagnostics,"Second opinion snapshot changed or is missing; no replacement calls were made."]};let u=r?structuredClone(r):p;if(u.done)return u;if(u.cursor>=s.length)return{...u,done:!0};if(!e.available)return{...u,done:!0,diagnostics:[...u.diagnostics,"Second opinion provider is unavailable."]};if(!Ot(t.findings,Jn(t.findings.map(O=>O.id))))return{...u,done:!0,diagnostics:[...u.diagnostics,"Second opinion input contains duplicate ids."]};let g=s.slice(u.cursor,u.cursor+n.caps.secondOpinionBatchSize),h=g.map(O=>O.id),f={...t,findings:g,diagnostics:[]};try{xt(n,e.tools,o)}catch{return{...u,done:!0,diagnostics:[...u.diagnostics,"Second opinion prompt changed since its frozen snapshot."]}}let m=Ap(f,n),S=0,b=!1,y=n.caps.secondOpinionInputBytes,k;try{let O=await F(e,m,o,{maxInputBytes:y,onSend(v){S=v,b=!0,u.estimate=Ip(g.length,n,o),u.coverage.sentIds=Jn([...u.coverage.sentIds,...h])}});k=Jo.parse(O).verdicts}catch(O){if(!b){if(O instanceof wi)return{...u,done:!0,diagnostics:[...u.diagnostics,"Second opinion serialized evidence exceeds its priced input budget."]};throw O}M("second-opinion",O,_=>e.rethrow(_));let v=O instanceof Error?O.message:"Unreadable shadow response.";return u.batches.push({ids:h,attempt:u.retries+1,inputBytes:S,rawVerdicts:[],failure:v}),u.diagnostics.push(v),u.retries<n.caps.secondOpinionMaxRetries?{...u,retries:u.retries+1}:(u.coverage.failedIds=Jn([...u.coverage.failedIds,...h]),{...u,done:!0})}if(u.batches.push({ids:h,attempt:u.retries+1,inputBytes:S,rawVerdicts:k}),!Ot(k,h))u.diagnostics.push("Shadow verdict ids did not match this batch; every answer in the batch was rejected.");else for(let O of k){let v=g.find(x=>x.id===O.id),_=Rp(O,v,[...t.coreFiles,...t.citedFiles??[]]);if(_){u.diagnostics.push(`${O.id}: ${_}`);continue}u.verdicts.push(O);let I=t.originalVerdicts?.find(x=>x.id===O.id);I&&I.verdict!==O.verdict&&u.disagreements.push({id:O.id,original:I.verdict,shadow:O.verdict,reason:O.reason})}u.coverage.answeredIds=Jn(u.verdicts.map(O=>O.id)),u.coverage.missingIds=s.filter(O=>!u.coverage.answeredIds.includes(O.id)).map(O=>O.id);for(let O of h.filter(v=>!u.coverage.answeredIds.includes(v)))u.diagnostics.push(`${O}: No validated shadow verdict; the original finding is unchanged.`);let w=u.cursor+g.length;return{...u,cursor:w,retries:0,done:w>=s.length}}async function hs(e,t,n,o,s){if(s.qualityConfig?.switches.secondOpinion&&s.secondOpinion&&e?.qualityAudit){let i=s.qualityConfig,r=s.secondOpinion.saved??t.qualityAudit?.shadow,c=nt(e,e.qualityAudit.coverage,n,o,s),a={...tt(n,o,0,Qn(i),s.secondOpinion.llm.tools),purpose:s.secondOpinion.purpose,fictional:s.secondOpinion.fictional,coverage:c.coverage,originalVerdicts:t.verdicts,fingerprints:Object.fromEntries(n.map((p,d)=>[`f${d+1}`,q(p)])),assessments:c.assessments},l=await ms(s.secondOpinion.llm,{...a,...r?{saved:r}:{}},i,s.settings);for(;;){let p=nt(e,c.coverage,n,o,s,l);if(t={...t,qualityAudit:p},await s.onCheckpoint?.(t),l.done||s.secondOpinion.oneBatch)break;l=await ms(s.secondOpinion.llm,{...a,saved:l},i,s.settings)}}return t}function Qn(e){return e?.switches.fullContext?"whole-file":"legacy"}function Mp(e,t,n,o){return e.coverage?e.coverage:t.map((s,i)=>{let r=e.findings.find(u=>u.id===`f${o+i+1}`),c=[...s.site?[{repo:s.siteRepo??"",...s.site}]:[],...s.otherSites],a=[...new Map([...e.coreFiles,...c].map(u=>[JSON.stringify([u.repo,u.path]),{repo:u.repo,path:u.path}])).values()],l=[...e.coreFiles,...r?.sites??[]],p=u=>n.repos.find(g=>g.key===u.repo)?.files?.[u.path],d=u=>l.filter(g=>g.repo===u.repo&&g.path===u.path);return{fingerprint:q(s),requested:a,included:a.filter(u=>p(u)!==void 0&&d(u).length>0),missing:a.filter(u=>p(u)===void 0),truncated:a.filter(u=>{let g=p(u);return g!==void 0&&!d(u).some(h=>!h.truncated&&h.text===g.split(`
23
- `).map((f,m)=>`${m+1} ${f}`).join(`
24
- `))}),claimTruncated:r?.truncated??!0,coreComplete:e.coreFiles.length>0&&e.coreFiles.every(u=>!u.truncated)}})}function nt(e,t,n,o,s={},i){let c=[...s.qualityConfig?.switches.codeInputs?(s.codeEvidence??[]).flatMap(f=>{let m=o.repos.find(S=>S.key===f.repo)?.files??{};return he([f.input],m).skipped.map(S=>({repo:f.repo,path:S.path}))}):[],...s.qualityConfig?.switches.enabled?s.readingSkipped??[]:[]];t=t.map(f=>({...f,truncated:[...new Map([...f.truncated,...f.requested.filter(m=>c.some(S=>S.repo===m.repo&&S.path===m.path))].map(m=>[JSON.stringify([m.repo,m.path]),m])).values()]}));let a=new Set(e.acceptedIds),l=(e.verdicts??[]).map((f,m)=>({fingerprint:q(n[m]),accepted:a.has(f.id),verdict:f})),p=i?Ze(n,i.verdicts,{sentIds:i.coverage.sentIds,skipped:i.coverage.skipped,recordAcceptance:!0}):void 0,d=new Set(p?.acceptedIds),u=p?.verdicts?.map((f,m)=>({fingerprint:q(n[m]),accepted:d.has(f.id),verdict:f})),g=i?.coverage.sentIds.map(f=>n[Number(f.slice(1))-1]).filter(Boolean).map(q),h={coverage:t,verdicts:l,assessments:pa({findings:n,sources:o,coverage:t,verdicts:l,sawCode:s.sawCode,...i?{shadowVerdicts:u??[],shadowRequestedIds:g}:{}}),...i?{shadow:i}:{}};return e.qualityAudit=h,h}var en=class extends Error{sent;verdicts;constructor(t,n,o){super(t),this.sent=n,this.verdicts=o}};function Fp(e,t,n){let o=t?.switches.enabled;return{template:Je("check",n,t),answerFormat:"check",model:o?t.models.check:ve,inputs:{checkInput:e},limits:{maxTokens:o?Math.min(t.caps.checkOutputTokens,Ne(e.findings.length)):Ne(e.findings.length),effort:"medium"}}}async function Tp(e,t,n,o){if(t.findings.length===0)return[];let s=!1,i,r=n?.switches.enabled,c=Fp(t,n,o);try{r&&xt(n,e.tools,o);let a=await F(e,c,o,{maxInputBytes:ze(t.findings.length,Qn(n)),onSend(){s=!0}});if(i=a.verdicts,!Ot(i,t.findings.map(l=>l.id)))throw new Error("verdict ids did not match this batch");return a.verdicts}catch(a){throw M(c.template,a,l=>e.rethrow(l)),new en(a instanceof Error?a.message:"unreadable response",s,i)}}async function fa(e,t,n,o,s){if(o?.done)return o;let i=o?{...o,diagnostics:o.diagnostics??[],retries:o.retries??0}:{cursor:0,verdicts:[],diagnostics:[],retries:0,done:!1},r=s.qualityConfig,c=r?.switches.enabled,a=Qn(r),l=c?r.caps.checkBatchSize:j,p=o&&o.sentIds===void 0?tt(t.slice(0,i.cursor),n,0,a,e.tools):void 0,d=o?.sentIds??p?.findings.map(S=>S.id)??[],u=o?.skipped??p?.skipped??[],g=o?.rejectedBatches??[],h=o?.qualityAudit?.coverage??[],f=S=>c?nt(S,h,t,n,s):void 0;if(i.cursor>=t.length){let S=Ze(t,i.verdicts,{sentIds:d,skipped:u,rejectedBatches:g,...c?{recordAcceptance:!0}:{}}),b=f(S);return{...i,done:!0,sentIds:d,skipped:u,result:S,...b?{qualityAudit:b}:{}}}let m;try{let S=t.slice(i.cursor,i.cursor+l);if(m=tt(S,n,i.cursor,a,e.tools),c&&(h=[...new Map([...h,...Mp(m,S,n,i.cursor)].map(_=>[_.fingerprint,_])).values()]),u=[...new Map([...u,...m.skipped??[]].map(_=>[_.id,_])).values()],!e.available&&m.findings.length)throw new Error("model unavailable");let b=[...i.verdicts,...m.findings.length?await Tp(e.withRetry(i.retries),m,r,s.settings):[]];d=[...new Set([...d,...m.findings.map(_=>_.id)])];let y=Math.min(t.length,i.cursor+l),k=[...new Set([...i.diagnostics,...e.tools.checkDiagnosticsText(m.diagnostics)])],w=y>=t.length,O=w?Ze(t,b,{sentIds:d,skipped:u,rejectedBatches:g,...c?{recordAcceptance:!0}:{}}):void 0;O&&(k=[...new Set([...k,...O.diagnostics??[]])],O.diagnostics=k);let v=O?f(O):c?{coverage:h,verdicts:[],assessments:[]}:void 0;return{cursor:y,verdicts:b,diagnostics:k,retries:0,done:w,sentIds:d,skipped:u,rejectedBatches:g,...O?{result:O}:{},...v?{qualityAudit:v}:{}}}catch(S){M(Je("check",s.settings,r),S,O=>e.rethrow(O));let b=S instanceof Error?S.message:"unreadable response";S instanceof en&&S.verdicts&&m&&(g=[...g,{ids:m.findings.map(O=>O.id),verdicts:S.verdicts}]),S instanceof en&&S.sent?d=[...new Set([...d,...m?.findings.map(O=>O.id)??[]])]:u=[...u,...m?.findings.map(O=>({id:O.id,reason:`The model was not called: ${b}`}))??[]];let y=[...i.diagnostics,...e.tools.checkDiagnosticsText(m?.diagnostics??[]),b];if(e.available&&i.retries<(c?r.caps.checkMaxRetries:z))return{...i,sentIds:d,skipped:u,rejectedBatches:g,diagnostics:y,retries:i.retries+1,...c?{qualityAudit:{coverage:h,verdicts:[],assessments:[]}}:{}};let k=Ze(t,i.verdicts,{sentIds:d,skipped:u,rejectedBatches:g,failure:Yt,...c?{recordAcceptance:!0}:{}});k.diagnostics=y;let w=f(k);return{...i,sentIds:d,skipped:u,rejectedBatches:g,diagnostics:y,done:!0,result:k,...w?{qualityAudit:w}:{}}}}function Np(e){let t=e.findingCheck?.original??[];if(!e.sourceNotes?.done)return t;let n=new Map(e.sourceNotes.findings.map(o=>[q(o),o.sourceNotes]));return t.map(o=>n.has(q(o))?{...o,sourceNotes:n.get(q(o))}:o)}function ua(e){let t=e.findingQuality,n=e.findingCheck,o=n?.state?.result;if(!t?.config.switches.enabled||!n?.original||!o||!e.sourceNotes?.done)return e;let s=Np(e),i=nt({...o},t.coverage??[],s,{repos:e.repos??[],fragments:[]},{qualityConfig:t.config,codeEvidence:t.codeEvidence,readingSkipped:t.readingSkipped,sawCode:_t(e)},t.shadow);return{...e,findingQuality:{...t,...i}}}function ma(e,t,n){return!J(e,t).findingCheck||n.length===0?t:{...t,findingCheck:{original:n,state:{cursor:0,verdicts:[],diagnostics:[],retries:0,done:!1}}}}async function ha(e,t,n){let o=t.findingCheck;if(!o?.state||!o.original)return null;if(o.state.done)return{data:t,done:!0};let s=t.findingQuality?.config,i;try{let r=t.repos??[],c=te(t);i=await fa(n,o.original,{repos:r,fragments:c},o.state,{settings:e,qualityConfig:s,codeEvidence:t.findingQuality?.codeEvidence,readingSkipped:t.findingQuality?.readingSkipped,sawCode:_t(t)})}catch(r){M(Je("check",e,s),r,p=>n.rethrow(p)),le(r);let c=[...o.state.diagnostics??[],"unreadable source map"],a=Ze(o.original,o.state.verdicts,{sentIds:o.state.sentIds??[],skipped:o.state.skipped??[],rejectedBatches:o.state.rejectedBatches,failure:Yt,...s?.switches.enabled?{recordAcceptance:!0}:{}});a.diagnostics=c;let l=s?.switches.enabled?nt(a,o.state.qualityAudit?.coverage??[],o.original,{repos:t.repos??[],fragments:[]},{qualityConfig:s,codeEvidence:t.findingQuality?.codeEvidence,readingSkipped:t.findingQuality?.readingSkipped,sawCode:_t(t)}):void 0;i={...o.state,diagnostics:c,done:!0,result:a,...l?{qualityAudit:l}:{}}}return{done:i.done,data:{...t,findingCheck:{...o,state:i},...t.findingQuality&&i.qualityAudit?{findingQuality:{...t.findingQuality,...i.qualityAudit}}:{},...i.result?{findingsRaw:i.result.kept,warnings:[...t.warnings??[],...i.result.warnings]}:{}}}}import{createHash as Lp}from"node:crypto";function ga(e,t,n){let o=[e,t.prompt.path,t.prompt.symbol??"",n,t.link?.callExcerpt??""];return Lp("sha256").update(o.join("\0")).digest("hex")}var jp=200,Dp=6e3,Bp=1200,qp=[3,4,5],Yn=e=>qp.includes(e.score)&&e.prompt.chars>=jp,Kp=5;function Hp(e,t){let n=e.link,o=n?t[n.callPath]:void 0;if(!n||o===void 0)return null;let s=Math.max(0,n.callLine-1-Kp);return o.split(`
25
- `).slice(s).join(`
26
- `).slice(0,Bp)}function Up(e){let{path:t,line:n,symbol:o}=e.prompt;return o?`${t}:${n} (${o})`:`${t}:${n}`}function tn(e,t,n){let o=gt(n,t.manifest),s=Tn(t,o);return{candidate:t,fingerprint:ga(e,t,s),text:s.slice(0,Dp),usage:Hp(t,o),location:Up(t)}}var Xp=.03,wa=re({},{template:"judge-code-prompt"},"Check possible agents in code",A.mechanical,3e3,200).usd,gs=3,ka=e=>e.replace(/\s+/g," ").trim(),Zn=e=>Math.round(e*1e6);function Wp(e){return{template:"judge-code-prompt",answerFormat:"codeJudge",model:A.mechanical,inputs:e,limits:{effort:"medium",maxTokens:200}}}async function ya(e,t,n){let o=Zn(n),s=await K(t,gs,async i=>{if(!e.available)return{fingerprint:i.fingerprint,why:"unavailable"};if(o+Zn(wa)>Zn(Xp))return{fingerprint:i.fingerprint,why:"limit"};o+=Zn(wa);try{let r=await F(e,Wp({location:i.location,text:i.text,usage:i.usage,at:{path:i.candidate.prompt.path,line:i.candidate.prompt.line}}));return{fingerprint:i.fingerprint,isPrompt:r.isSystemPrompt,name:r.isSystemPrompt?ka(r.name).slice(0,40).trim():"",reason:ka(r.reason),model:A.mechanical}}catch(r){return M("judge-code-prompt",r,c=>e.rethrow(c)),{fingerprint:i.fingerprint,why:"unavailable"}}},e);return{verdicts:s.filter(i=>"isPrompt"in i),failed:s.filter(i=>"why"in i),spentUsd:o/1e6}}function Ct(e,t){return{...e.filenameReferences?{filenameReferences:e.filenameReferences}:{},agents:e.strong.map(n=>({candidate:n,confirmedBy:null})),possible:e.possible,rejected:[],unchecked:[],callsWithoutPrompt:e.callsWithoutPrompt,repoModelIds:e.repoModelIds,scanned:e.scanned,total:t.total,truncated:t.truncated,omitted:e.omitted??{strong:0,possible:0},notRead:e.notRead??[],notReadMore:e.notReadMore??0,...e.skippedFiles?{skippedFiles:e.skippedFiles}:{}}}function xa(e,t){let{candidates:n,files:o,repoKey:s,stored:i,flags:r}=t,c=r.scan&&r.model&&t.hasClient,a=[],l=[],p=[],d=Math.max(0,6-(t.alreadyDue??0)),u=Math.min(d,Math.max(0,Fe()-t.agentCountSoFar)),g=Kt(e)&&t.page?new Set(t.page.selected):null;for(let h of n){if(g&&!g.has(T(h.prompt))){p.push(h);continue}let f=c&&Yn(h)?tn(s,h,o):null;!f||!f.text||i.has(f.fingerprint)?p.push(h):a.length<u?a.push(f):a.length>=d?l.push({candidate:h,fingerprint:f.fingerprint}):p.push(h)}return{due:a,overCap:l,ineligible:p}}function ba(e,t,n){let o=new Map(t.map(r=>[r.fingerprint,r])),s=new Map(n.failed.map(r=>[r.fingerprint,r.why])),i={...Ct(e,n.scanInfo),possible:[]};for(let r of e.possible){let{fingerprint:c}=tn(n.repoKey,r,n.files),a=o.get(c),l=s.get(c);a?.isPrompt?i.agents.push({candidate:r,confirmedBy:{model:a.model,name:a.name}}):a?i.rejected.push({candidate:r,reason:a.reason,model:a.model}):l?i.unchecked.push({candidate:r,why:l}):i.possible.push(r)}return i}function Oa(e,t,n,o=""){let s=new Map;if(e?.enabled&&e.grouped){let c=new Map(Fr(e,t).flatMap(p=>p.keys.map(d=>[d,p.node.id]))),a=new Map,l=(p,d)=>JSON.stringify([Mr(p,t),d]);for(let p of e.byRepo[t]??[]){let d=p.codeInputsJson?.step;if(!(!p.groupKey||!d))for(let u of[d.at,d.prompt].filter(g=>g!==void 0)){let g=l(u.path,u.line),h=a.get(g)??new Set;h.add(c.get(p.unitKey)),a.set(g,h)}}for(let p of n.nodes){if(p.kind!=="agent"||c.has(p.id))continue;let d=p.files.filter(h=>h.role==="system prompt"&&h.span).map(h=>({path:h.path,line:h.span.from})),u=d.length?d:p.sourceRef?[{path:p.sourceRef.path,line:p.sourceRef.line??1}]:[],g=new Set(u.flatMap(h=>[...a.get(l(h.path,h.line))??[]]));g.size&&s.set(p.id,g.size===1?[...g][0]:null)}}let i={...n,nodes:n.nodes.filter(c=>!s.has(c.id)),edges:n.edges.flatMap(c=>{let a=s.has(c.from)?s.get(c.from):c.from,l=s.has(c.to)?s.get(c.to):c.to;return a&&l&&(a!==l||c.from===c.to)?[{...c,from:a,to:l}]:[]})},r=Tr(e,t,i,o);return{fragment:{...i,nodes:[...i.nodes,...r.nodes],edges:[...i.edges,...r.edges]},files:r.files,addedNodes:r.nodes}}var eo=e=>e.CF_CODE_PROMPT_LOADERS!=="0";var _a=40,to=10,va=/(agent|prompt|llm|model|chain|fix|plan|assist|bot|ai)/i,Vp=new Set(["agent","agents","prompt","prompts","system","instructions"]);function ks(e){return e.replace(/([a-z])([A-Z])/g,"$1 $2").split(/[^a-zA-Z]+/).map(t=>t.toLowerCase()).filter(t=>t.length>=4&&!Vp.has(t))}function zp(e){let t=e.filter(s=>dr(s.rel)&&pr.test(s.rel.slice(0,s.rel.lastIndexOf("/"))));if(t.length<2)return;let n=new Set(t.flatMap(s=>ks(s.rel.split("/").at(-1).replace(/\.[^.]+$/,"")))),o=s=>s.some(i=>[...n].some(r=>i.startsWith(r)||r.startsWith(i)));for(let s of e){let i=s.rel.split("/"),r=i.pop().replace(/\.[^.]+$/,"");s.promptRank=vn(s.rel)?o(ks(r))?0:o(i.flatMap(ks))?1:2:2}}function Jp(e,t,n){let o=n?Number(To(t.rel))-Number(To(e.rel)):0;if(o)return o;let s=(e.promptRank??2)-(t.promptRank??2);if(s)return s;let i=va.test(e.rel)?0:1,r=va.test(t.rel)?0:1;if(i!==r)return i-r;let c=e.rel.split("/").length,a=t.rel.split("/").length;return c!==a?c-a:e.entry.size!==t.entry.size?e.entry.size-t.entry.size:e.entry.path<t.entry.path?-1:e.entry.path>t.entry.path?1:0}function Ca(e,t,n="",o=!1){let s=[],i=[],r=new Map(t.map(u=>[u.path,u.size]));for(let u of t){let g=W(e,u,{purpose:"code-scan",route:"github",root:n,listing:r});g.admitted||i.push({path:u.path,reason:g.reason}),(g.admitted||g.reason==="too-large")&&s.push({entry:u,rel:ft(u.path,n),tooLarge:!g.admitted})}eo(e)&&zp(s),s.sort((u,g)=>Jp(u,g,bn(e)));let c=[],a=[],l=0,p=0,d=!1;for(let{entry:u,tooLarge:g}of s){if(g){l+=1,o&&a.push({path:u.path,reason:"too-large"});continue}if(c.length>=Z.codeScan.files||p+u.size>Z.codeScan.bytes){d=!0,i.push({path:u.path,reason:"scan-limit"}),o&&a.push({path:u.path,reason:"scan-limit"});continue}c.push(u),p+=u.size}return{plan:c,total:s.length,skippedLarge:l,truncated:d,refused:i,...o?{skippedFiles:a}:{}}}function no(e,t,n="",o=!1,s){return Qp(e,t,n,o,s).state}function Qp(e,t,n="",o=!1,s=ii(e,t.map(i=>i.path),n)){let i=bn(e),r=eo(e),c=s&&new Set(s),{plan:a,total:l,skippedLarge:p,truncated:d,skippedFiles:u,refused:g}=Ca(e,c?t.filter(f=>c.has(f.path)):t,n,o),h=br(e,a.map(f=>f.path),n);return{state:{plan:a,cursor:0,hits:[],total:l,skippedLarge:p,truncated:d,...u?{skippedFiles:u}:{},...i?{sdk:{layouts:!0}}:{},...vr(e)?{}:{promptFunctions:!1},...r?{}:{promptLoaders:!1},...lr(e)?{coverageLinks:!0}:{},...h.length?{documentedPaths:h}:{}},refused:g}}function nn(e){return e.cursor>=e.plan.length}async function Ea(e,t,n={batch:_a,parallel:to}){let o=e.plan.slice(e.cursor,e.cursor+n.batch),s=await K(o,n.parallel,t),i=e.sdk&&{...e.sdk,openaiAgents:e.sdk.openaiAgents===!0||o.some((l,p)=>s[p]!==null&&ur(l.path,s[p]))},r=o.map((l,p)=>s[p]===null?null:Or(l.path,s[p],{sdk:i,promptFunctions:e.promptFunctions!==!1,promptLoaders:e.promptLoaders!==!1,coverageLinks:e.coverageLinks===!0,documented:e.documentedPaths?.includes(l.path)===!0})),c=r.filter(l=>l!==null),a=e.skippedFiles&&[...e.skippedFiles,...o.filter((l,p)=>r[p]===null).map(({path:l})=>({path:l,reason:"unreadable"}))];return{...e,cursor:e.cursor+o.length,hits:[...e.hits,...c],...a?{skippedFiles:a}:{},...i?{sdk:i}:{}}}function Ia(e){return{...xr(e.hits),...e.skippedFiles?{skippedFiles:e.skippedFiles}:{}}}function Yg(e){return{scanned:e.hits.length,total:e.total,truncated:e.truncated,skippedLarge:e.skippedLarge}}function Ss(e,t,n,o){if(!fe(e))return null;let s=Jr(e,[...o.sizes.keys()],o.root,{},o.agentConfigurations??{});return ai(e,t.map(i=>{let r=T(i.prompt),c=o.modelOverrides?.includes(r);return{id:r,scope:s.ownerOf(i.prompt.path)??s.scopes[0],ownFiles:c?ue({...i,modelId:null},[],e):ue(i,n,e),toolCall:jt(i)}}),{...o,scopes:s})}function ot(e){return e.refused.filter(t=>t.reason!=="other-agent"&&t.reason!=="provider-transport")}var Yp=24;function Et(e,t,n,o=new Map,s={files:{}}){let i=t.agentInventory??t,r=s.page??t.agentPage?.context??{commit:"",scope:s.root??""},c=di(e,[...i.strong,...i.possible].map(h=>({id:T(h.prompt),path:h.prompt.path,bytes:n.get(h.prompt.path)??0,pool:h.tier,..."groupKey"in h&&typeof h.groupKey=="string"?{groupKey:h.groupKey}:{}})),{commit:r.commit,scope:r.scope},s.page?s.page.continuation:t.agentPage?.current,s.page?.pageSize,{strong:Z.codeAgent.importBytes,possible:Z.candidateFetch.check});if(c){let h=new Set(c.selected);t={...t,strong:i.strong.filter(f=>h.has(T(f.prompt))),possible:i.possible.filter(f=>h.has(T(f.prompt)))}}let a=Zp(e,t,n,o);if(c){let h=new Set([...a.strong,...a.window].map(f=>T(f.prompt)));for(let f of[...t.strong,...t.possible]){let m=T(f.prompt);if(h.has(m))continue;let S=f.prompt.path,b=n.has(S)?a.refused.find(y=>y.path===S)?.reason??a.notRead.find(y=>y.candidate===f)?.kind??(a.skipped.includes(f)?"prompt-over-limit":"confirmation-window"):"missing";c.refusals.push({id:m,reason:b})}c.partial||=c.refusals.length>0,a.page=c}if(!fe(e))return c&&(c.estimatedInputBytes=a.paths.reduce((h,f)=>h+(n.get(f)??0),0)),a;let l=Dt(o,s.replacementBytes),p=c?[...i.strong,...i.possible]:[...t.strong,...t.possible],d=Ss(e,p,t.repoModelIds,{...s,sizes:n,total:l,selectedIds:[...a.strong,...a.window].map(h=>T(h.prompt)),confirmationIds:a.window.map(h=>T(h.prompt))}),u=L(a.refused,...d.map(ot)),g=[...new Set(d.flatMap(h=>h.files.map(f=>f.path)))];return c&&(c.estimatedInputBytes=g.reduce((h,f)=>h+(n.get(f)??0),0)),{...a,paths:g,manifests:d,refused:u,skippedFiles:L(a.skippedFiles,...d.map(ot))}}var $a=(e,t,n,o=new Map)=>Et(e,t,n,o).paths;function Zp(e,t,n,o){let s=Dt(o);if(Kt(e))for(let m of t.strong)We(e,{ownPaths:[m.prompt.path]},{files:{},sizes:n,total:s});let i=[],r=[],c=[],a=[],l=[],p=[],d=0,u=m=>{p.length<10?p.push(m):d++},g=m=>{for(let S of m)i.includes(S)||i.push(S)};for(let m of t.strong){if(!Kt(e)&&r.length>=Fe())break;let S=n.get(m.prompt.path),b=W(e,{path:m.prompt.path,size:S},{purpose:"pointer",route:"github"});if(b.admitted||l.push({path:m.prompt.path,reason:b.reason}),!b.admitted&&b.reason!=="too-large"){c.push(m);continue}let y=S===void 0||!b.admitted;if(y||!s.chosen.has(m.prompt.path)&&S>s.left){c.push(m),a.push({path:m.prompt.path,reason:S===void 0?"missing":y?"too-large":"total"}),u({candidate:m,path:m.prompt.path,kind:y?"prompt-too-large":"prompt-over-limit"});continue}let k=ue(m,t.repoModelIds,e).map(({path:O})=>O),w=We(e,{ownPaths:k},{files:{},sizes:n,total:s});l.push(...w.refused),r.push(m),g(w.paths),a.push(...w.skipped),w.skipped.forEach(({path:O})=>u({candidate:m,path:O,kind:"extra"}))}let h=Z.candidateFetch.check,f=t.possible.filter(Yn).slice(0,Yp).filter(m=>{let S=ue(m,t.repoModelIds,e).map(({path:_})=>_),b=S.filter(_=>!s.chosen.has(_)),y=n.get(m.prompt.path),k=W(e,{path:m.prompt.path,size:y},{purpose:"pointer",route:"github"});if(k.admitted||l.push({path:m.prompt.path,reason:k.reason}),y===void 0||!k.admitted||!s.chosen.has(m.prompt.path)&&y>h)return!1;let w=new Set(s.chosen),O=We(e,{ownPaths:S},{files:{},sizes:n,total:{left:Math.min(h,s.left),chosen:s.chosen}});if(l.push(...O.refused),!O.paths.includes(m.prompt.path))return!1;let v=b.filter(_=>!w.has(_)&&O.paths.includes(_)).reduce((_,I)=>_+n.get(I),0);return h-=v,s.left-=v,g(O.paths),!0});return{paths:i,strong:r,window:f,notRead:p,notReadMore:d,skipped:c,skippedFiles:a,refused:L(l)}}var ed=10,td=2e5;function nd(e,t,n,o){let s=new Set(Et(e,t,n,o).window),i=[],r=0;for(let[c,a]of t.possible.entries())if(!(c>=ed&&!s.has(a))){if(r+=JSON.stringify(a).length+1,r>td)break;i.push(a)}return i}var Pa=1,Ra=2;function Aa(e,t,n,o=new Map){let s=Fe()+10,i=t.omitted??{strong:0,possible:0},r=Et(e,t,n,o);if(r.page){let d=t.agentInventory??{strong:t.strong,possible:t.possible};return{...t,agentInventory:d,agentPage:r.page,strong:r.strong,possible:r.window,callsWithoutPrompt:t.callsWithoutPrompt.slice(0,Pa),repoModelIds:t.repoModelIds.slice(0,Ra),omitted:{strong:d.strong.length-r.strong.length,possible:d.possible.length-r.window.length},skippedFiles:L(t.skippedFiles,r.skippedFiles),notRead:r.notRead,notReadMore:r.notReadMore}}let c=new Set(r.skipped),a=t.notRead!==void 0,l=t.strong.filter(d=>!c.has(d)),p=nd(e,t,n,o);return{...t,strong:l.slice(0,s),possible:p,callsWithoutPrompt:t.callsWithoutPrompt.slice(0,Pa),repoModelIds:t.repoModelIds.slice(0,Ra),omitted:{strong:i.strong+Math.max(0,l.length-s),possible:i.possible+Math.max(0,t.possible.length-p.length)},...!a||t.skippedFiles?{skippedFiles:L(t.skippedFiles,a?[]:r.skippedFiles)}:{},notRead:a?t.notRead:r.notRead,notReadMore:a?t.notReadMore??0:r.notReadMore}}var Ma=e=>e.includes("/")?e.slice(0,e.lastIndexOf("/")):"",Fa=e=>new Map(e.map(t=>[t.path,t.size])),od=(e,t,n=new Map)=>Aa(e,Ia(t),Fa(t.plan),n),Ta=e=>e.strong.length===0&&e.possible.length===0;function Na(e,t){let{paths:n,entries:o,root:s,scanFlag:i,modelReader:r,recordSkips:c=!1}=t,a=Xe(e,{phase:"start",paths:n,root:s,scanFlag:i});if(a.kind==="marker"){let l=a.scanIfBare,p=l?no(e,o,s,c,a.scanPaths):void 0;return p&&a.scanPaths&&(p.markerDecision=a,p.explicitMarkerScan=no(e,o,s,c,a.scanPathsIfExplicit??[])),{kind:"marker",markerPath:a.markerPath,scanNeeded:l,...p?{scan:p}:{}}}return a.kind==="off"||!a.scan?{kind:"none"}:{kind:"scan",...oo(e,{scan:no(e,o,s,c,a.scanPaths)},r)}}function La(e,t,n){return{scan:{...t,hits:[]},ranked:od(e,t,n.alreadyRead)}}async function ja(e,t,n,o){let s=await Ea(t,n,o.size);if(!nn(s))return{scan:s,selection:null};let{scan:i,ranked:r}=La(e,s,o);return{scan:i,selection:{ranked:r,paths:$a(e,r,Fa(s.plan),o.alreadyRead),refused:s.refused??[]}}}function oo(e,t,n=!1){let{scan:o}=t;return!o||!nn(o)||t.ranked?t:{...t,...La(e,o,{modelReader:n,alreadyRead:new Map})}}function Da(e,t,n,o){let s=new Map(n.map(a=>[a.path,a])),i=new Set(o),r=[],c=[];for(let a of t){let l=s.get(a);if(!l||i.has(a))continue;i.add(a);let p=W(e,l,{purpose:"pointer",route:"github"});p.admitted?r.push(l):c.push({path:a,reason:p.reason})}return{entries:r,refused:c}}function rt(e,t,n,o,s=1/0){let i=Da(e,n,o,new Set(t.filter(d=>d.readBytes===void 0).map(d=>d.path))),r=s,c=i.entries.filter(d=>d.size>r?(i.refused.push({path:d.path,reason:"total"}),!1):(r-=d.size,!0)),a=new Map(c.map(d=>[d.path,d])),l=new Set(t.map(d=>d.path));return{selected:[...t.map(d=>a.get(d.path)??d),...c.filter(d=>!l.has(d.path))],refused:i.refused}}var Ba=20;function Mw(e,t){return t==="hosted-import"?{...e,CF_IMPORT_CALLS:"0"}:e}function qa(e,t,n,o){t.requestedPaths.push(...n);let s=rt(e,t.selected,n,o);t.selected=s.selected,t.refused.push(...s.refused)}function Ka(e,t,n){let o=e.hosted;if(!o)return;let s=new Set(t),i=e.selected.filter(r=>s.has(r.path));n==="code"?o.codePaths&&(o.codePaths=[...new Set([...o.codePaths,...i.map(r=>r.path)])]):o.weakCodeFallback&&(e.conventionPaths=[...new Set([...e.conventionPaths,...i.map(r=>r.path)])],o.fallback={...o.fallback,selectedPaths:[...new Set([...o.fallback.selectedPaths,...i.map(r=>r.path)])],shaByPath:{...o.fallback.shaByPath,...Object.fromEntries(i.map(r=>[r.path,r.ref]))}})}function Fw(e,t){if(t.profile==="local-analysis"&&t.ranked?.agentPage){let n=t.ranked.agentInventory??t.ranked,o=new Set([...n.strong,...n.possible].flatMap(s=>ue(s,t.ranked.repoModelIds,e).map(i=>i.path)));t.conventionPaths=[...new Set([...t.conventionPaths,...t.selected.filter(s=>!o.has(s.path)).map(s=>s.path)])]}}function Ha(e,t){let n=new Set(e.conventionPaths);if(e.decision.kind==="settled"&&e.decision.scanPaths&&e.markerKind&&e.markerKind!=="bare")for(let s of e.selected)n.add(s.path);let o=new Map(t.map(s=>[s.path,s]));for(let s of e.selected)n.has(s.path)&&!o.has(s.path)&&o.set(s.path,s);e.selected=[...o.values()],e.cursor=0,e.hosted&&(e.hosted.codeMode=!0,e.hosted.needsExtraction=!1)}function Ua(e,t=Ct(e.ranked,e.scan)){return t.agents.length>0}function sd(e){return e.hosted?.weakCodeFallback&&!e.hosted.codeMode?e.hosted.fallback.selectedPaths:[]}function Tw(e,t){if(e.hosted&&(e.hosted.codePaths=t.map(s=>s.path)),!e.hosted?.weakCodeFallback||e.hosted.codeMode||Ua(e)){Ha(e,t);return}let n=new Map([...e.entries,...e.selected].map(s=>[s.path,s])),o=new Map(sd(e).map(s=>[s,n.get(s)]));for(let s of e.selected)o.has(s.path)||o.set(s.path,s);for(let s of t)o.has(s.path)||o.set(s.path,s);e.selected=[...o.values()],e.cursor=0}function Nw(e,t){let n=e.hosted;if(!n?.weakCodeFallback||!n.codePaths||e.markerKind&&e.markerKind!=="bare")return;let o=new Map([...e.entries,...e.selected].map(i=>[i.path,i]));Ua(e,t)?Ha(e,n.codePaths.map(i=>o.get(i))):(e.selected=n.fallback.selectedPaths.map(i=>o.get(i)),e.cursor=0,n.codeMode=!1,n.needsExtraction=n.fallback.needsExtraction);let s=new Set(e.selected.map(i=>i.path));e.files=Object.fromEntries(Object.entries(e.files).filter(([i])=>s.has(i)))}function rd(e,t){if(!On(e))return;let n=new Set(t.entries.map(i=>i.path)),o=Object.fromEntries(Object.entries(t.files).filter(([i])=>t.selected.some(r=>r.path===i&&r.readBytes===void 0))),s=new Set(hr(e,[...n],o));for(let[i,r]of Object.entries(t.files)){let c=W(e,{path:i,text:r},{...t.admission,purpose:"override",route:"github",root:t.root,listing:n,managedFiles:t.files});(!c.admitted||s.has(i))&&(delete t.files[i],t.refused.push({path:i,reason:c.admitted?"unreadable":c.reason}))}}function Lw(e,t,n){rd(e,t);let o=t.selected.filter(c=>t.files[c.path]!==void 0),s=new Set(o.filter(c=>c.readBytes===void 0).map(c=>c.path)),i=new Set(t.requestedPaths),r=L(t.selectionRefused.filter(c=>!i.has(c.path)),t.refused).filter(c=>!s.has(c.path));return{state:t,requestedReads:n,files:t.files,settled:o,refused:r,treeTruncated:t.treeTruncated}}function Ga(e,t,n,o,s,i){let r=t.ranked&&fe(e)?Et(e,t.ranked,o,s,{files:n,root:t.root,replacementBytes:i}):{paths:[],refused:[],manifests:[]};if(!On(e))return r;let c=new Map(s);for(let d of r.paths)o.has(d)&&c.set(d,Math.max(c.get(d)??0,o.get(d)));let a=Dt(c,i);for(let d of r.paths)a.chosen.add(d);let p=Nn(e,{files:n,listedPaths:t.entries.map(d=>d.path),root:t.root,fallbackName:"",skills:!0},{sizes:o,total:a}).agents.filter(d=>d.crewCall||d.layoutCall).flatMap(d=>d.manifest?[d.manifest]:[]);return{paths:[...new Set([...r.paths,...p.flatMap(d=>d.files.map(u=>u.path))])],refused:[...r.refused,...p.flatMap(ot)],manifests:[...r.manifests??[],...p]}}async function Xa(e,t,n){t.manifestReadPaths??=t.selected.slice(0,t.cursor).filter(m=>m.readBytes===void 0).map(m=>m.path);let o=new Set(t.selected.filter(m=>m.readBytes===void 0).map(m=>m.path)),s=Object.fromEntries(Object.entries(t.files).filter(([m])=>o.has(m))),i=new Map(t.entries.map(m=>[m.path,m.size])),r=new Map(Object.entries(t.files).map(([m,S])=>[m,Buffer.byteLength(S)]));for(let[m,S]of Object.entries(s))i.set(m,Buffer.byteLength(S));let c=Ga(e,t,s,i,r),a=new Set(t.manifestReadPaths),l=c.paths.filter(m=>s[m]===void 0&&!a.has(m)),p=new Map(t.selected.filter(m=>m.readBytes!==void 0).map(m=>[m.path,m]));t.requestedPaths.push(...l.filter(m=>p.has(m))),qa(e,t,l.filter(m=>!p.has(m)),t.entries);let d=new Set(l),u=new Map(t.entries.map(m=>[m.path,m])),g=t.selected.filter(m=>d.has(m.path)).map(m=>p.has(m.path)?u.get(m.path):m).slice(0,Ba);if(g.length){let m=await K(g,4,async w=>{let O=W(e,w,{...t.admission,purpose:"pointer",route:"github",root:t.root});return O.admitted?n(w):(t.refused.push({path:w.path,reason:O.reason}),null)});t.manifestReadPaths=[...t.manifestReadPaths,...g.map(w=>w.path)];let S=new Map(i);g.forEach((w,O)=>{m[O]!==null&&S.set(w.path,Buffer.byteLength(m[O]))});let b=new Map(g.filter((w,O)=>p.has(w.path)&&m[O]!==null).map(w=>[w.path,r.get(w.path)])),y=Ga(e,t,s,S,r,b),k=new Set(y.paths);g.forEach((w,O)=>{m[O]!==null&&(k.has(w.path)?(t.files[w.path]=m[O],t.selected=t.selected.map(v=>v.path===w.path?w:v)):t.refused.push(y.refused.find(v=>v.path===w.path)??{path:w.path,reason:"total"}))});return}let h=new Map((c.manifests??[]).map(m=>{let b=m.files.filter(y=>s[y.path]===void 0).map(y=>t.refused.find(k=>k.path===y.path)??{path:y.path,reason:"missing"});return[m.agentId,{...m,files:m.files.filter(y=>s[y.path]!==void 0),refused:[...m.refused,...b]}]})),f=m=>{let S=h.get(T(m.prompt));return S?{...m,manifest:S}:m};t.ranked&&(t.ranked={...t.ranked,strong:t.ranked.strong.map(f),possible:t.ranked.possible.map(f)}),Ka(t,[...h.values()].flatMap(m=>m.files.map(S=>S.path)),"code"),t.refused.push(...[...h.values()].flatMap(ot)),t.phase="done"}function Wa(e,t){return`${e}: no agent found \u2014 no convention files (looked for ${jo}) and no system prompt in code (scanned ${t.scanned} code files for prompt constants, prompt files and model calls)`}function it(e,t){switch(e.code){case"unreadable-crew":return`${e.path}: ${e.detail}`;case"duplicate-agent":return`${e.path} matches ${e.detail||"the root agent"}; the copy was left out.`;case"agent-cap":return e.detail;case"invalid-config":return"counterfact.json is present but not valid JSON; ignoring it";case"pointer-owned-by-subagent":return`${e.path} belongs to a sub-agent; ignored as the main prompt.`;case"pointer-missed":return`${t?`${t}: `:""}counterfact.json points at ${String(e.detail??e.path)}, which was not found; ignored`;case"pointer-guide":return`${t?`${t}: `:""}counterfact.json points at ${String(e.detail??e.path)}, which is a coding-assistant guide, not an agent prompt; ignored`;case"explicit-guide":return`${e.path} is a coding-assistant guide, not an agent prompt; ignored`;case"secret-file":return gr(e.path);case"claude-fallback":return`no dedicated prompt file found; used ${e.path??No} as the system prompt`;case"no-prompt":return`no system prompt found (looked for ${Lo}); left blank`;case"orphan-skill":return`${e.path} has no matching sub-agent file; it is not attached to an agent.`;case"frontmatter":return`${e.path}: ${e.detail}`}}function ae(e,t){switch(e.code){case"unreadable-crew":return`${t}: ${it(e)}`;case"duplicate-agent":case"agent-cap":return`${t}: ${it(e)}`;case"invalid-config":return`${t}: counterfact.json is not valid JSON; ignored`;case"pointer-owned-by-subagent":return`${t}: ${it(e)}`;case"pointer-guide":return it(e,t);case"explicit-guide":return`${t}: ${it(e)}`;case"pointer-missed":return null;case"secret-file":return null;case"claude-fallback":return`${t}: no system prompt file; using ${e.path??No}`;case"no-prompt":return e.detail==="no-conventions"?`${t}: no agent conventions found (looked for ${jo})`:`${t}: ${e.folderAgentsFound?"the root agent has ":""}no system prompt file (looked for ${Lo})`;case"orphan-skill":return`${t}: ${it(e)}`;case"frontmatter":return ye(e.path,{nested:!0})?null:`${t}: ${it(e)}`}}import{basename as id}from"node:path";function Va(e,t,n){return n?`Instructions in ${t.filter(s=>s.role==="soul"||s.role==="knowledge").map(s=>id(s.path)).join(" and ")}.`:e?`Instructions in ${e}.`:"No system prompt file found."}import{posix as sc}from"node:path";var so=e=>`${e.prompt.path}:${e.prompt.line}`,ad=(e,t,n)=>`${e} ${e===1?t:n}`;function ro(e,t,n,o){let s=Fe(),i=`${n.repoKey}: `,r=[],{kept:c}=me(e,t.agents),a=t.agents.length+t.omitted.strong;a>s&&r.push(fi({kind:"scan",found:a})),c.forEach(({candidate:u,confirmedBy:g},h)=>{g&&r.push(`${i}${o[h]}: included on ${g.model}'s reading of ${so(u)} \u2014 the code alone was not conclusive`)}),n.reportSkippedFiles!==!1&&r.push(...gn(hn(t),t.skippedFiles?0:t.notReadMore));let l=t.agents.length===0?t.callsWithoutPrompt[0]:void 0;l&&r.push(`${i}found model calls (${l.path}:${l.line}) but no system prompt they send \u2014 point counterfact.json "prompt" at it`);let p=[...t.rejected.map(u=>`${i}not an agent prompt, per ${u.model}: ${so(u.candidate)} \u2014 ${u.reason}`),...t.unchecked.map(u=>{let g=u.why==="limit"?`the per-analysis limit of ${6} checks was reached`:"the model check was unavailable; the code alone was not conclusive";return`${i}possible agent prompt not checked: ${so(u.candidate)} \u2014 ${g}`}),...t.possible.map(u=>`${i}possible agent prompt not included: ${so(u)}${u.prompt.symbol?` (${u.prompt.symbol})`:""} \u2014 nothing in the scanned code sends it to a model`)];r.push(...p.slice(0,10));let d=Math.max(0,p.length-10)+t.omitted.possible;return d>0&&r.push(`${i}${ad(d,"more possible agent prompt is","more possible agent prompts are")} not listed here`),t.truncated&&!t.skippedFiles?.some(({reason:u})=>u==="scan-limit")&&r.push(`${i}scanned ${t.scanned} of ${t.total} code files (the ${Z.codeScan.files}-file / ${Z.codeScan.bytes/1e6} MB budget); agents defined in the rest were not looked for`),r}import{basename as Qa}from"node:path";import{basename as cd}from"node:path";function Ee(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")||"agent"}function io(e,t,n){let o=new Set(t);return s=>{let i=`${e}${Ee(s)}`,r=i;if(o.has(r)){let c=2;for(;o.has(`${i}-${c}`);)c++;r=`${i}-${c}`,n(s,r)}return o.add(r),r}}function za(e,t){return e??(t?Ee(cd(t)):"agent")}var ld=new Set(["system","prompt","prompts","instruction","instructions"]);function Ja(e){let t=e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[^A-Za-z0-9]+/).filter(n=>n&&!ld.has(n.toLowerCase())).map(n=>n.toLowerCase());return t.length?t.join(" ").replace(/^./,n=>n.toUpperCase()):null}function Ya(e,t){let{prompt:n,link:o}=e;if(o?.kind==="L1"&&o.shortLabel)return o.shortLabel;let s=n.symbol?Ja(n.symbol):null;if(s)return s;if(o?.shortLabel)return o.shortLabel;let i=n.enclosing?Ja(n.enclosing):null;return i||t||`${Qa(n.path).replace(/\.[^.]*$/,"")}:${n.line}`}function Za(e,t,n){let o=t?`${Ee(Qa(t))}-`:"";return io(o,[],(s,i)=>{n.push(`${e}: two agents are named ${s}; the second is ${i}`)})}function ec(e,t,n,o){return t.map(s=>({...s,tools:s.manifest&&fe(e)?s.tools:Ho({ownPaths:n[s.unitKey]??[],toolCall:s.toolCall},o).tools}))}function ys(e,t){let n=o=>e.overrides?.[t]?.[o]||(t===0?e.primaryConfig?.[o]:null)||null;return{name:n("name"),model:n("model"),description:n("description")}}function pd(e,t){return e.some(({candidate:n})=>n.prompt.start!==t.start&&n.prompt.path===t.path&&n.prompt.span.from===t.span.from&&n.prompt.symbol===t.symbol)}function dd(e,t,n){if(!t.forImport&&!t.forLocal)return n;let o=n.candidate.prompt,s=r=>r.kind==="file"?null:r.symbol??`line ${r.span.from}`,i=pd(e.agents,o);return[...t.importCandidates??[],...e.agents].find(({candidate:r})=>r.prompt.path===o.path&&r.prompt.span.from===o.span.from&&s(r.prompt)===s(o)&&(!i||r.prompt.start===o.start))??n}function tc(e,t,n){let o=[];return{agents:t.agents.flatMap(i=>{let{candidate:r}=i;if(Ao(e,r.prompt.path,r.promptSource==="marker"))return[i];let c=r.alsoLoads?.find(l=>Ao(e,l)&&Object.hasOwn(n,l));if(!c)return[];let a=fr(c,n[c]);return o.push([T(r.prompt),T(a)]),[{...i,candidate:{...r,prompt:a,manifest:void 0,alsoLoads:[r.prompt.path,...(r.alsoLoads??[]).filter(l=>l!==c)]}}]}),aliases:o}}function on(e,t,n){return!!t&&tc(e,t,n).agents.length>0}function nc(e,t,n){let o=[],s=Za(n.repoKey,n.root,o),i=[...hn(t)],r=[],c=new Map(Object.entries(n.files).map(([S,b])=>[S,Buffer.byteLength(b)])),{agents:a,aliases:l}=tc(e,t,n.files),{kept:p}=me(e,a),d=fe(e),u=p.map(({candidate:S},b)=>d&&!ys(n,b).model?S.manifest:void 0),g=d&&u.some(S=>!S)?Ss(e,p.map(({candidate:S})=>S),t.repoModelIds,{files:n.files,sizes:c,root:n.root,agentConfigurations:n.agentConfigurations,modelOverrides:p.flatMap(({candidate:S},b)=>ys(n,b).model?[T(S.prompt)]:[])}):null,h=p.map(({candidate:S,confirmedBy:b},y)=>{let k=ys(n,y),{prompt:w,link:O}=S,v=k.name??Ya(S,b?.name??null),_=s(v),I=[],x=`${n.repoKey}: ${v}: `,E=k.model?null:Uo(S,t.repoModelIds),C=k.model?{value:k.model,from:"marker",path:null,line:null}:E?{...E,from:S.modelId?"call":"only-model-in-code"}:null;E&&!S.modelId&&I.push(`${x}model ${E.value} assumed from ${E.path}:${E.line} (the only model id in the code)`);let $=k.model?ue({...S,modelId:null},[],e):ue(S,t.repoModelIds,e),R=u[y]??g?.[y],P=gt(n.files,R),Y=R?R.files.map(G=>$.find(Kl=>Kl.path===G.path)??{path:G.path,role:G.roles.includes("config")?"config":"code",label:null,...G.spans.length===1?{span:G.spans[0]}:{}}):$,U=$.map(({path:G})=>G),Eo=[...U,...n.codingGuides??[]],Ie=dd(t,n,{candidate:S,confirmedBy:b}),Io=jt(S),mn=Ie.candidate===S?Io:jt(Ie.candidate),$o=R?.files.map(G=>G.path),Zs=R&&$o?{paths:$o,skipped:ot(R),...Ho({ownPaths:$o,toolCall:mn},P)}:null,Po=Zs??We(e,{ownPaths:U,toolCall:Io},{files:n.files,sizes:c,root:n.root,guides:n.forImport?void 0:n.codingGuides}),Ro=Zs??(n.forImport&&(Eo.length!==U.length||mn!==Io)?We(e,{ownPaths:U,toolCall:mn},{files:n.files,sizes:c,root:n.root,guides:n.codingGuides}):Po),er={paths:Ro.paths,skipped:Ro.skipped.filter(({reason:G})=>G!=="missing")};i.push(...Po.skipped.filter(({reason:G})=>G!=="missing")),n.forImport&&r.push(...er.skipped),I.push(...Po.toolWarnings.map(G=>`${x}${G}`)),o.push(...I);let tr=O?`${O.callPath}:${O.callLine}`:null,Bl=tr?`, sent from ${tr}`:"",ql=S.shape?` Answers in the shape of ${S.shape.name}.`:"";return{unitKey:_,name:v,description:k.description??`Instructions in ${w.path} (${w.symbol??`line ${w.span.from}`})${Bl}.${ql}`,model:C,prompt:Ie.candidate.prompt,instructionText:Tn(S,P),...Ie.candidate.prompt.filledAtRunTime?{filledAtRunTime:!0}:{},sentFrom:Ie.candidate.link?`${Ie.candidate.link.callPath}:${Ie.candidate.link.callLine}`:null,confirmedBy:Ie.confirmedBy?.model??null,toolCall:mn,ownFiles:Y,reading:er,tools:Ro.tools,warnings:I,...R?{manifest:R}:{}}}),f=new Map(p.map(({candidate:S},b)=>[T(S.prompt),h[b].unitKey]));for(let[S,b]of l){let y=f.get(b);y&&f.set(S,y)}for(let[S,{candidate:b}]of p.entries()){let y=(b.links??[]).flatMap(k=>{let w=f.get(k.to);return w?[{to:w,kind:k.kind}]:[]});y.length&&(h[S].links=y)}let m=L(i,r);return{agents:h,skippedFiles:m,warnings:[...o,...ro(e,{...t,agents:a},{...n,reportSkippedFiles:!1},h.map(({name:S})=>S)),...n.reportSkippedFiles!==!1?gn(m,t.skippedFiles?0:t.notReadMore):[]]}}function oc(e,t,n){let o=nc(e,t,{...n,modelReader:n.modelReader??!1}),s={};return{nodes:o.agents.map(r=>{let{unitKey:c,prompt:a}=r;return s[c]=r.instructionText,{id:c,label:r.name,kind:"agent",desc:r.description,meta:r.model?.value??null,sourceRef:{path:a.path,line:a.span.from},files:[...r.ownFiles],tools:r.tools.map(({tool:l})=>ut(l.name))}}),agents:o.agents,warnings:o.warnings,instructionSpans:s,...o.skippedFiles.length?{skippedFiles:o.skippedFiles}:{}}}function ao({repoKey:e,files:t,root:n,conventions:o,nodes:s,parentId:i,candidates:r,resolved:c}){let a=s.map(g=>({...g,files:[...g.files]})),l=[],p=[];for(let g of c.notes.filter(h=>h.code==="orphan-skill")){let h=ae(g,e);h&&p.push(h)}let d=i?a.find(g=>g.id===i):a[0];if(!d)return{nodes:a,edges:l,warnings:p};let u=io(n?`${d.id}-`:"",a.map(g=>g.id),(g,h)=>{p.push(`${e}: two sub-agents are named ${g}; the second is ${h}`)});for(let g of c.subagents){let{path:h}=g,f=g.files??g.skillPaths.map(y=>o.skillNames[y]?{role:"skill",path:y,label:o.skillNames[y]}:{role:"reference",path:y,label:o.skillRefNames[y]??null}),m=(g.files?[]:Oe(r,[h,...f.map(y=>y.path)].map(y=>t[y]??""),o.stripRoot)).map(y=>({role:"reference",path:y,label:null})),S="key"in g&&typeof g.key=="string"?g.key:void 0,b=S?a.find(y=>y.id===S):a.find(y=>y.id!==d.id&&y.sourceRef?.path===h);if(b){let y=new Set(b.files.map(k=>k.path));b.files.push(...[...f,...m].filter(k=>!y.has(k.path)))}else{for(let k of c.notes.filter(w=>w.code==="frontmatter"&&w.path===h)){let w=ae(k,e);w&&p.push(w)}b={id:S??u(g.name),label:g.name,kind:"agent",desc:g.description??`A sub-agent ${d.label} can hand work to.`,meta:g.model??null,sourceRef:{path:h,line:1},files:[...S&&f.some(k=>k.path===h&&k.role==="system prompt")?[]:[{role:"system prompt",path:h,label:null}],...f,...m],tools:(g.tools??[]).map(ut)},a.push(b)}l.push({from:d.id,to:b.id,kind:"delegates",label:null,sourceRef:{path:h,line:1}})}return{nodes:a,edges:l,warnings:p}}function ac(e,t,n){let o=fd(e,t,n),{input:s,conventions:i}=t,r=i.agents.filter(y=>y.layoutCall);if(!r.length||o.markerAgentsFound)return o;let c=new Set((o.codeAgents??[]).filter(y=>r.some(k=>{let w=k.layoutCall;return w.path!==y.toolCall.path?!1:w.callStart!==void 0&&y.toolCall.callStart!==void 0?w.callStart===y.toolCall.callStart:w.promptPath===y.prompt.path&&w.promptStart===y.prompt.start})).map(y=>y.unitKey)),a=n(s,{...i,agents:r,notes:[]}),l=[...new Map([...o.fragment.nodes.filter(y=>!c.has(y.id)),...a.fragment.nodes].map(y=>[y.id,y])).values()],p=me(e,l.filter(y=>y.kind==="agent")),d=new Set(p.kept.map(y=>y.id)),u=l.filter(y=>y.kind!=="agent"||d.has(y.id)),g=new Set(u.map(y=>y.id)),h=[...new Map([...o.fragment.edges,...a.fragment.edges].filter(y=>g.has(y.from)&&g.has(y.to)).map(y=>[JSON.stringify(y),y])).values()],{codeAgents:f,...m}=o,S=f?.filter(y=>!c.has(y.unitKey)&&g.has(y.unitKey)),b=p.leftOut.flatMap(y=>y.sourceRef?.path?[{path:y.sourceRef.path,reason:"allowance"}]:[]);return{...m,fragment:{...o.fragment,nodes:u,edges:h},warnings:[...new Set([...o.warnings,...a.warnings])],...S?.length?{codeAgents:S}:{},...b.length?{skippedFiles:[...o.skippedFiles??[],...b]}:{}}}function fd(e,{input:t,conventions:n},o){let s=t.code?.resolved;if(ri(e)&&(n.projection!=="code"||n.agents.some(qt))){let r=Object.keys(t.files),c=Xe(e,{phase:"start",paths:r,root:t.root,scanFlag:!0}),a=c.kind==="marker"?Xe(e,{phase:"read",pending:c,text:t.files[c.markerPath]??null}):c,l=a.kind==="settled"?a.scanPaths:void 0;if(l&&l.length<r.length){let p=new Set(l),d=ic(e,{input:{...t,code:{resolved:null}},conventions:n},o),u=rc(e,t,n,d,o),g=(s?.agents??[]).filter(w=>p.has(w.candidate.prompt.path)),h=[...u.fragment.nodes.filter(w=>w.kind==="agent").map(()=>({code:null})),...g.map(w=>({code:w}))],{kept:f,leftOut:m}=me(e,h),S=f.flatMap(w=>w.code?[w.code]:[]),b=m.flatMap(w=>w.code?[{path:w.code.candidate.prompt.path,reason:"allowance"}]:[]);if(!S.length)return b.length?{...u,skippedFiles:[...u.skippedFiles??[],...b]}:u;let y=xs(e,t,be(e,l,t.root,t.listedPaths),{agents:[],notes:[]},{...s,agents:S},{}),k=new Map((y.codeAgents??[]).map(w=>[w.unitKey,`code:${T(w.prompt)}`]));return{...u,fragment:{nodes:[...u.fragment.nodes,...y.fragment.nodes.map(w=>({...w,id:k.get(w.id)??w.id}))],edges:[...u.fragment.edges,...y.fragment.edges.map(w=>({...w,from:k.get(w.from)??w.from,to:k.get(w.to)??w.to}))],warnings:[]},warnings:[...new Set([...u.warnings,...y.warnings])],...y.codeAgents?{codeAgents:[...u.codeAgents??[],...y.codeAgents.map(w=>({...w,unitKey:k.get(w.unitKey)??w.unitKey,...w.links?{links:w.links.map(O=>({...O,to:k.get(O.to)??O.to}))}:{}}))]}:{},...y.skippedFiles?.length||b.length?{skippedFiles:[...u.skippedFiles??[],...y.skippedFiles??[],...b]}:{}}}}let i=ic(e,{input:t,conventions:n},o);return n.projection==="code"?rc(e,t,n,i,o):i}function rc(e,t,n,o,s){if(!o.codeAgents?.length||!n.agentScopes)return o;let i=new Set(o.codeAgents?.map(m=>m.prompt.path)),r=new Map(n.agentScopes.map(m=>[m.key,m])),c=n.agents.filter(m=>r.has(m.key)&&pi(e,m,r.get(m.key).folder,t.root??"")&&(!qt(m)||!i.has(m.prompt.path))),a=[...o.fragment.nodes.filter(m=>m.kind==="agent").map(()=>({agent:null})),...c.map(m=>({agent:m}))],{kept:l,leftOut:p}=me(e,a),d=l.flatMap(m=>m.agent?[m.agent]:[]),u=p.flatMap(m=>m.agent?.files[0]?[{path:m.agent.files[0].path,reason:"allowance"}]:[]),g=new Set(d.map(m=>m.key)),h=n.agentScopes.filter(m=>g.has(m.key)),f=s(t,{...n,agents:d,agentScopes:h,notes:h.flatMap(m=>m.notes)});return{...o,fragment:{nodes:[...o.fragment.nodes,...f.fragment.nodes],edges:[...o.fragment.edges,...f.fragment.edges],warnings:[]},warnings:[...new Set([...o.warnings,...f.warnings])],...u.length?{skippedFiles:[...o.skippedFiles??[],...u]}:{}}}function ic(e,{input:t,conventions:n},o){let s=t.code,{repoKey:i,files:r,root:c}=t,a=be(e,Object.keys(r),c,t.listedPaths),l=a.configPath?Fn(r[a.configPath]):null,p=l?.config??null,d=l?.invalid===!0,u=p?oi(p):"bare",g=[];p&&u==="bare"&&(p.prompt||p.agents?.length)&&(g=Ko(e,p,{repoKey:i,markerDir:sc.dirname(a.configPath).replace(/^\.$/,""),files:r}).warnings);let h;if(p&&u!=="bare"){let y=sc.dirname(a.configPath).replace(/^\.$/,""),k=Ko(e,p,{repoKey:i,markerDir:y,files:r});h=k.agents.length>0;let w=k.agents.filter(_=>ui(e,_.prompt.path,r,c)),O=k.agents.filter(_=>!w.includes(_)),v=w.flatMap(_=>{let I=ae({code:"pointer-owned-by-subagent",path:_.prompt.path},i);return I?[I]:[]});if(O.length>0){let _=xs(e,t,a,n,hd(O),{overrides:O.map(({name:I,model:x,description:E})=>({name:I,model:x,description:E})),configPath:a.configPath});return{..._,markerAgentsFound:h,markerWarnings:k.warnings,warnings:[...k.warnings,...v,...cc(e,t,a,O.length),..._.warnings]}}g=[...k.warnings,...v]}let{resolved:f}=s;if(!f||ud(e,a,n)||u!=="bare"){let y=o(t);return{fragment:y.fragment,warnings:[...new Set([...g,...y.warnings])],...h===void 0?{}:{markerAgentsFound:h}}}let m=on(e,f,r);if(m){let y=md(e,t,a,n,f,p,d);return{...y,warnings:[...new Set([...g,...y.warnings])]}}let S=Mo({agentConfiguration:n.agents.some(y=>y.prompt.kind==="fallback"),usage:"map",codeAgentsFound:m,otherDefinitions:Rn(a)},e),b=a.claudePath&&S==="prompt"||a.configPath||n.agents.some(y=>Go(y)||y.layoutCall)?o(t,n):{fragment:{nodes:[],edges:[],warnings:[]},warnings:[Wa(i,f),...n.notes.filter(y=>y.code==="orphan-skill").flatMap(y=>{let k=ae(y,i);return k?[k]:[]})]};return{fragment:b.fragment,warnings:[...b.warnings,...ro(e,f,{repoKey:i,modelReader:t.modelReader,reportSkippedFiles:t.reportSkippedFiles},[])]}}function ud(e,t,n){return n.projection==="code"?!1:zr(e,t)?!0:n.agents.some(o=>qt(o)&&Go(o))}function cc(e,t,n,o){let s=Mo({usage:"map",codeAgentsFound:o>0,otherDefinitions:Rn(n)},e);return n.claudePath&&s==="background"?[`${t.repoKey}: CLAUDE.md read as developer guidance, not an agent prompt, because agents were found in code`]:[]}function md(e,t,n,o,s,i,r){let{repoKey:c}=t,a=s.agents.length,l=xs(e,t,n,o,s,{primaryConfig:i,configPath:i?n.configPath:null}),p=r?ae({code:"invalid-config"},c):null,d=p?[p]:[];return Rn(n)||d.push(`${c}: no agent convention files; found ${a===1?"1 agent":`${a} agents`} defined in code \u2014 add counterfact.json to name them yourself`),d.push(...cc(e,t,n,a)),{...l,warnings:[...d,...l.warnings]}}function hd(e){return{agents:e.map(t=>({candidate:{promptSource:"marker",tier:"strong",score:0,prompt:t.prompt,link:null,sdk:!1,modelId:null},confirmedBy:null})),possible:[],rejected:[],unchecked:[],callsWithoutPrompt:[],repoModelIds:[],scanned:0,total:0,truncated:!1,omitted:{strong:0,possible:0},notRead:[],notReadMore:0}}function xs(e,{repoKey:t,files:n,root:o,modelReader:s,codingGuides:i,reportSkippedFiles:r,forImport:c,forLocal:a,code:l,agentConfigurations:p},d,u,g,h){let f=oc(e,g,{repoKey:t,root:o,files:n,modelReader:s,codingGuides:i,reportSkippedFiles:r,forImport:c,forLocal:a,agentConfigurations:p,...c&&l?.resolved?{importCandidates:l.resolved.agents}:{},overrides:h.overrides,primaryConfig:h.primaryConfig}),m=u.agents.find(x=>x.key===null)?.subagents??[],S=new Set(d.developerCompanionPaths),b;for(let x of f.nodes){let E=u.agents.find(P=>qt(P)&&P.prompt.path===x.sourceRef?.path);if(!E)continue;let C=E.files.filter(P=>S.has(P.path)),$=new Set(x.files.map(P=>P.path));x.files.push(...C.filter(P=>!$.has(P.path)));let R=C.find(P=>P.role==="mcp")?.path??null;R&&x.tools.push(...Cn(e,t,n,{toolsPath:null,toolsTsPath:null,cliPath:null,mcpPath:R},f.warnings)),E.key===null&&E.subagents.some(P=>S.has(P.path))&&(b=x.id)}let y=new Set(m.map(x=>x.path)),k=new Set([...m.flatMap(x=>x.skillPaths),...u.notes.filter(x=>x.code==="orphan-skill").map(x=>x.path)]),{stripRoot:w}=d,O=new Set(f.nodes.flatMap(x=>x.files.map(E=>E.path))),v=d.scoped.filter(x=>!O.has(x)&&!y.has(x)&&!k.has(x)&&x!==h.configPath&&dt(x)).sort();for(let x of f.nodes){let E=Oe(v,[f.instructionSpans[x.id]??""],w).map(C=>({role:"reference",label:null,path:C}));x.files.push(...E)}h.configPath&&f.nodes[0]&&f.nodes[0].files.push({role:"config",label:null,path:h.configPath});let _=k.size||b!==void 0?ao({repoKey:t,files:n,root:o,conventions:d,nodes:f.nodes,parentId:b,candidates:v,resolved:{subagents:m,notes:u.notes}}):{nodes:f.nodes,edges:[],warnings:[]},I=a?ec(e,f.agents,Object.fromEntries(_.nodes.map(({id:x,files:E})=>[x,E.map(({path:C})=>C)])),n):f.agents;return{fragment:{nodes:_.nodes,edges:_.edges,warnings:[]},codeAgents:I,warnings:[...f.warnings,..._.warnings],...f.skippedFiles?{skippedFiles:f.skippedFiles}:{}}}import{basename as gd}from"node:path";function lc(e){let t=e.replace(/^local:/,"");return t.slice(t.lastIndexOf("/")+1)||t}function pc(e,t,n,o={}){if(e.ranked&&e.scan){let{total:i,truncated:r}=e.scan;return{resolved:n?ba(e.ranked,n.verdicts,{repoKey:e.key,files:e.files??{},failed:n.failed,flags:t,scanInfo:{total:i,truncated:r}}):Ct(e.ranked,{total:i,truncated:r})}}let s=o.markerPolicy==="any-read"?!!e.markerPath:e.markerKind==="agents"||e.markerKind==="prompt";return t.scan&&s?{resolved:null}:void 0}function bs(e){let t=Ke(e.root);return t?gd(t):lc(e.repoKey)}function co(e,t,n=t.code&&(!t.code.resolved||on(e,t.code.resolved,t.files))?"":bs(t),o=t.code?.resolved?.filenameReferences){let s={...t,root:Ke(t.root)};pt(e)&&!s.agentConfigurations&&(s.agentConfigurations=An(e,s.listedPaths??Object.keys(s.files),s.root));let i=Nn(e,{files:s.files,root:s.root,fallbackName:n,skills:!0,listedPaths:s.listedPaths,agentConfigurations:s.agentConfigurations,filenameReferences:o,codeAgentsFound:on(e,s.code?.resolved,s.files)});return i.projection==="conventions"&&delete s.code,{input:s,conventions:i}}function dc(e,t,n,o,s={}){let i={repoKey:t.key,files:Lr(o.projectAgents,t.key,t.files??{}),...t.root?{root:t.root}:{},...pt(e)?{agentConfigurations:t.agentConfigurations??{}}:{},code:pc(t,n,s.checks),modelReader:o.modelReader??!1};return co(e,i)}function sn(e,t){let n={repoKey:t.repoKey,files:t.files,...t.root?{root:t.root}:{},...pt(e)?{agentConfigurations:t.agentConfigurations??{}}:{}};return co(e,n)}function at(e,t){return t.input.code?ac(e,t,(n,o)=>fc(e,o?{input:n,conventions:o}:co(e,n,bs(n),t.input.code?.resolved?.filenameReferences))):fc(e,t)}function fc(e,{input:{repoKey:t,files:n,root:o,listedPaths:s,agentConfigurations:i},conventions:r}){if(!r.agents.length)return{fragment:{nodes:[],edges:[],warnings:[]},warnings:r.notes.flatMap(h=>{let f=ae(h,t);return f?[f]:[]})};let c=r.notes.filter(h=>h.code!=="orphan-skill"&&h.code!=="frontmatter").flatMap(h=>{let f=ae(h,t);return f?[f]:[]}),{scopes:a,ownerOf:l}=Qr(e,r.scopePaths??Object.keys(n),o,{files:n,listedPaths:s,agentConfigurations:i}),p=new Map(a.map(h=>[h.folder,[]]));for(let h of Object.keys(n)){let f=l(h);f&&p.get(f.folder).push(h)}let d=r.agents.map(h=>{let f=r.agentScopes?.find(C=>C.key===h.key)??a.find(C=>C.key===h.key),m=Ke(f.folder),S=gt(n,h.manifest),b=be(e,p.get(f.folder).filter(C=>S[C]!==void 0),m),y=new Set(h.files.map(C=>C.path)),k=C=>C!==null&&y.has(C)?C:null,w=h.tools?.map(ut)??Cn(e,t,S,{toolsPath:k(b.toolsPath),toolsTsPath:k(b.toolsTsPath),cliPath:k(b.cliPath),mcpPath:k(b.mcpPath)},c),O=h.prompt.kind==="registry",v=h.prompt.kind==="none"||O?null:h.prompt.path,_=(h.prompt.kind==="registry"?h.prompt.path:b.configPath)??v??h.files[0]?.path??h.subagents[0]?.path,I={id:za(h.key,o),label:h.name,kind:"agent",desc:h.description??Va(v,h.files,O),meta:h.model,sourceRef:h.layoutCall?{path:h.layoutCall.path,line:h.layoutCall.line??null}:{path:_,line:null},files:h.files,tools:w},x=new Set([...h.files.filter(C=>C.role!=="reference"||C.label!==null).map(C=>C.path),...h.subagents.flatMap(C=>[C.path,...C.skillPaths]),...r.notes.filter(C=>C.code==="orphan-skill").map(C=>C.path)]),E=b.scoped.filter(C=>!x.has(C)&&dt(C)).sort();return{resolved:h,root:m,conventions:b,agent:I,candidates:E}}),u=d.map(h=>h.agent),g=[];c.push(...r.notes.filter(h=>h.code==="orphan-skill").flatMap(h=>{let f=ae(h,t);return f?[f]:[]}));for(let{resolved:h,root:f,conventions:m,agent:S,candidates:b}of d){let y=ao({repoKey:t,files:n,root:f,conventions:m,nodes:u,parentId:S.id,candidates:b,resolved:{subagents:h.subagents,notes:r.notes.filter(k=>k.code==="frontmatter")}});u=y.nodes,g.push(...y.edges),c.push(...y.warnings)}return{fragment:{nodes:u,edges:g,warnings:[]},warnings:c}}async function uc(e,t){let n=t.admission.exclusions?.length?await t.listing():void 0,o=t.config?si(e,t.config,t.markerDir,{...t.admission,...n?{listing:new Set(n.map(l=>l.path))}:{}}):{paths:[],refused:[]},s=(l,p)=>t.refusalMode==="append"?[...l,...p]:L(l,p),i=s(t.priorRefused,o.refused),{kept:r}=me(e,o.paths),c=t.requestedMode==="kept-and-refused"?[...o.refused.map(l=>l.path),...r]:[];if(!r.length)return{refused:i,requestedPaths:c};let a=rt(e,t.selected,r,n??await t.listing(),Z.candidateFetch.pointers);return i=s(i,a.refused),{selected:a.selected,refused:i,requestedPaths:c}}async function lo(e,t,n,o=[]){if(o.some(s=>s.path===e.path&&s.reason==="secret-content"))return null;try{return await t(e)}catch(s){if(!(s instanceof _n)||s.reason!=="secret-content")throw s;return n.push({path:e.path,reason:s.reason}),null}}function po(e,t){return t.codeAgents??ni(e)}function JS(e,t,n,o,s,i=!1){let r=pt(e)?{agentConfigurations:An(e,t.map(p=>p.path),o)}:{},c=[],a=t.filter(p=>{let d=W(e,p,{purpose:"pointer",route:"github"});return d.admitted||c.push({path:p.path,reason:d.reason}),d.admitted}),l=Na(e,{paths:a.map(p=>p.path),entries:t,root:o,scanFlag:s.scan,modelReader:i});if(l.kind==="marker"){let{markerPath:p,scanNeeded:d,scan:u}=l,g=a.find(f=>f.path===p),h=n.some(f=>f.path===p);return{...r,markerPath:p,refused:c,scanNeeded:d,...u?{scan:u}:{},...g&&!h?{selected:[...n,g]}:{}}}return l.kind==="scan"?{...r,scanNeeded:!0,scan:l.scan,refused:c,...l.ranked?{ranked:l.ranked}:{}}:r}function mc(e){return!!(e.root&&e.ranked&&Ta(e.ranked)&&e.plumbing===void 0)}var Os=e=>(e.listAll??e.list).call(e);async function wd(e,t,n,o){let s=t.markerPath,i=(t.selected??[]).find(h=>h.path===s);if(!i)throw new Error(`counterfact.json ${s} is not in the selection`);let r={...t.files??{}},c=[],a=r[s]??await lo(i,h=>n.read(h),c,t.refused);a!==null&&(r[s]=a);let l=Xe(e,{phase:"read",pending:t.scan?.markerDecision??{kind:"marker",markerPath:s,scanIfBare:!!t.scanNeeded},text:a}),p=l.markerKind,{scan:d,...u}=t,g={...u,files:r,markerKind:p,...c.length?{refused:L(t.refused,c)}:{}};if(l.scan&&d&&!d.markerDecision)return oo(e,{...g,scan:d},o);if(p!=="bare"){let{config:h}=Fn(r[s]),f=await uc(e,{config:h,markerDir:Ma(s),selected:t.selected??[],admission:n.admission??{},modelReader:o,priorRefused:t.refused??[],refusalMode:"merge",requestedMode:"none",listing:()=>Os(n)});g.refused=f.refused,f.selected&&(g.selected=f.selected)}if(l.scan&&d?.markerDecision){let f={...p==="bare"?d:d.explicitMarkerScan};delete f.markerDecision,delete f.explicitMarkerScan;let m=new Set(l.scanPaths),S=f.plan.filter(b=>m.has(b.path));return oo(e,{...g,scan:{...f,plan:S,total:f.total-f.plan.length+S.length}},o)}return g}async function kd(e,t,n,o){let s=[],{scan:i,selection:r}=await ja(e,t.scan,a=>lo(a,l=>n.read(l),s,t.refused),{modelReader:o,alreadyRead:new Map});if(!r)return{...t,scan:i,...s.length?{refused:L(t.refused,s)}:{}};let c=rt(e,t.selected??[],r.paths,i.plan);return{...t,ranked:r.ranked,scan:i,selected:c.selected,refused:L(t.refused,s,r.refused,c.refused)}}async function Sd(e,t,n){let o=t.root,s=await Os(n),i=_r(t.files??{},s.map(p=>p.path),o),{selected:r,refused:c}=rt(e,[],i,s),a=await K(r,to,p=>lo(p,d=>n.read(d),c,t.refused)),l=Cr(o,Object.fromEntries(r.flatMap((p,d)=>a[d]===null?[]:[[p.path,a[d]]])),e);return{...t,plumbing:l,refused:L(t.refused,c)}}async function yd(e,t,n){let o=t.ranked?.manifestProgress,s=o?.entries??await Os(n),i={version:1,profile:"hosted-import",phase:"manifest",root:t.root??"",admission:n.admission,entries:s,selected:[...t.selected??[]],cursor:t.cursor??0,files:{...t.files},ranked:t.ranked,conventionPaths:[],selectionRefused:[],requestedPaths:[],refused:[...t.refused??[]],treeTruncated:!1,decision:{kind:"settled",markerPath:null,markerKind:null,scan:!1},...o?{manifestReadPaths:[...o.readPaths]}:{}};return await Xa(e,i,async r=>{try{return await n.read(r)}catch(c){if(!(c instanceof _n))throw c;return i.refused.push({path:r.path,reason:c.reason}),null}}),{...t,files:i.files,selected:i.selected,cursor:i.selected.length,ranked:{...i.ranked,manifestProgress:{entries:s,readPaths:i.manifestReadPaths??[],done:i.phase==="done"}},refused:L(i.refused)}}function hc(e,t){return!!(t.ranked&&fe(e)&&!t.ranked.manifestProgress?.done)}function QS(e,t){return mc(t)||hc(e,t)}async function YS(e,t,n,o=!1){if(n=wr(e,n),t.markerPath&&!t.markerKind)return wd(e,t,n,o);if(t.scan&&!nn(t.scan))return kd(e,t,n,o);let s=(t.cursor??0)>=(t.selected??[]).length;return s&&mc(t)?Sd(e,t,n):s&&hc(e,t)?yd(e,t,n):null}function ZS(e){return e.root&&e.plumbing?[`${e.key}: ${Er(e.root,e.plumbing)}`]:[]}function rn(e,t,n,o=!1,s,i="",r){let c=dc(e,t,n,{modelReader:o,projectAgents:s},{checks:r}),a=at(e,c),l=Oa(s,t.key,a.fragment,i),{fragment:p,warnings:d}=En(l.fragment,t.key);return{fragment:p,warnings:[...Nr(t.key,a.warnings,l.addedNodes),...d],...l.addedNodes.length?{virtualFiles:l.files}:{}}}var fo=e=>(e.ranked?.possible.length??0)>0;async function gc(e,t,n){let o=[];try{o=await t?.()??[]}catch(i){n.rethrow(i)}let s=new Set((e.repos??[]).filter(fo).flatMap(i=>i.ranked.possible.map(r=>tn(i.key,r,i.files??{}).fingerprint)));return o.filter(i=>s.has(i.fingerprint))}function xd(e,t,n,o){let s=new Set(n.map(r=>r.fingerprint)),i={due:[],overCap:[],ineligible:[]};for(let r of(t.repos??[]).filter(fo)){let c=xa(e,{candidates:r.ranked.possible,files:r.files??{},repoKey:r.key,stored:s,flags:o,modelReader:t.modelReader??!1,hasClient:!0,page:r.ranked.agentPage,agentCountSoFar:r.ranked.strong.length,alreadyDue:i.due.length});i.due.push(...c.due),i.overCap.push(...c.overCap),i.ineligible.push(...c.ineligible)}return i}function vs(e,t){let n=[...t];return e.filter(o=>{let s=n.indexOf(o);return s<0?!0:(n.splice(s,1),!1)})}function wc(e,t,n,o){let s=[...t.mapped??[]],i=[...t.warnings??[]];return(t.repos??[]).forEach((r,c)=>{if(!fo(r))return;let a=rn(e,r,n,t.modelReader??!1,t.projectAgents),l=rn(e,r,n,t.modelReader??!1,t.projectAgents,"",o);s[c]=l.fragment,i=[...vs(i,vs(a.warnings,l.warnings)),...vs(l.warnings,a.warnings)]}),{mapped:s,warnings:i}}async function kc(e,t,n){let o=po(e,t);if(t.codeChecks?.done||!(t.repos??[]).some(fo))return{data:t,pending:!1};if(!o.model){let g=await gc(t,n.load,n.llm);return{pending:!1,data:{...t,...wc(e,t,o,{verdicts:g,failed:[]}),codeChecks:{done:!0,total:0,cursor:0,spentUsd:0,verdicts:[],failed:[],stored:[]}}}}let s=t.codeChecks??{done:!1,total:0,cursor:0,spentUsd:0,verdicts:[],failed:[],stored:await gc(t,n.load,n.llm)},i=xd(e,t,s.stored,o),r=i.due.slice(s.cursor,s.cursor+gs),c=await ya(n.llm,r,s.spentUsd),a=s.cursor+r.length,l=i.due.length,p=[...s.verdicts,...c.verdicts],d=[...s.failed,...c.failed];if(a<l)return{pending:!0,data:{...t,codeChecks:{done:!1,total:l,cursor:a,spentUsd:c.spentUsd,verdicts:p,failed:d,stored:s.stored}}};let u=new Set(d.map(g=>g.fingerprint));for(let{fingerprint:g}of i.overCap)u.has(g)||d.push({fingerprint:g,why:"limit"});return{pending:a>s.cursor,data:{...t,...wc(e,t,o,{verdicts:[...s.stored,...p],failed:d}),newVerdicts:p,codeChecks:{done:!0,total:l,cursor:a,spentUsd:c.spentUsd,verdicts:[],failed:[],stored:[]}}}}var It=A.mechanical,_s=!1,Sc=200;function Cs(e){return e.length>Sc?`${e.slice(0,Sc)}\u2026`:e}function bd(e,t,n){if(!t.length)return null;let o=[...e.site?[{repo:e.siteRepo??null,file:e.site.path,line:e.site.line,excerpt:e.excerpt}]:[],...Es(e).map(s=>({repo:s.repo??e.siteRepo??null,file:s.path,line:s.line,excerpt:s.excerpt}))];return Gn(o,n,t.flatMap(s=>s.inputs.map(i=>({repo:s.repo,unitKey:s.unitKey,input:i,files:s.files}))),t[0].agentRows)?null:"Code quotes are outside one agent's admitted source locations."}function Es(e){return e.otherSites??[]}function Od(e,t){if(!rr(e.category,t))return`no usable category (${JSON.stringify(e.category??null)})`;if(!e.site)return"no quoted site in the agent's files";let n=1+Es(e).length;return $e(e.category)===2&&n<2?`${e.category} needs two quoted sites, found ${n}`:null}function yc(e,t,n){let o={title:t.title,category:t.category??null,reason:Cs(n)};e.push(o)}function vd(e,t,n){let o={title:t.title,category:t.category??null,reason:Cs(n)};e.push(o)}function _d(e,t){return{template:"scope-items",answerFormat:"structureScope",model:It,inputs:{scopeRuleId:t.scopeRuleId??"",items:e},limits:{...t.maxTokens===void 0?{}:{maxTokens:t.maxTokens}}}}async function xc(e,t,n){try{let o=await F(e,_d(t,n)),s=new Map(o.verdicts.map(i=>[i.index,i]));return o.verdicts.length!==t.length||s.size!==t.length||t.some((i,r)=>!s.has(r))?null:new Map([...s].map(([i,r])=>[i,{inScope:r.inScope,reason:Cs(r.reason)}]))}catch(o){return M("scope-items",o,s=>e.rethrow(s)),null}}function Cd(e){return{category:e.category??null,path:e.site?.path??"?",title:e.title,cause:e.cause,excerpt:e.excerpt??"",otherSites:Es(e).map(t=>({path:t.path,excerpt:t.excerpt??""}))}}function Ed(e,t,n=jn(t)){return{template:"scope-findings",answerFormat:"scope",model:t.qualityConfig?.switches.enabled?t.qualityConfig.models.scope:It,inputs:{codeSources:n.sources,codeFiles:n.files,items:e}}}async function Id(e,t,n,o,s){let i=[];for(let d=0;d<n.length;d+=j)i.push(n.slice(d,d+j));let r=e.CF_PARALLEL_SCOPE_CHECK==="0"?1:o.scopeConcurrency??4,c=await K(i,r,async(d,u)=>{let g=[],h=u+1;for(let f=0;f<=z;f++)try{let m=await F(t,Ed(d,o,s),e),S=bt(m.verdicts,d.map(b=>b.id));return S.unknownIds.length&&g.push(`Scope check batch ${h}: ignored ${S.unknownIds.length} unknown verdict ids.`),S.duplicateIds.length&&g.push(`Scope check batch ${h}: ignored duplicate verdict ids for ${S.duplicateIds.join(", ")}.`),{verdicts:S.byId,diagnostics:g,ran:!0}}catch(m){M("scope-findings",m,S=>t.rethrow(S)),f===z&&g.push(`Scope check batch ${h} failed after ${f+1} attempts; its findings were kept.`)}return{verdicts:new Map,diagnostics:g,ran:!1}},t),a=new Map,l=[];for(let d of c){for(let[u,g]of d.verdicts)a.set(u,g);l.push(...d.diagnostics)}let p=n.filter(d=>!a.has(d.id)).map(d=>d.id);for(let d of p)l.push(`${d}: no verdict from the scope check; finding kept.`);return{verdicts:a,diagnostics:l,missingIds:p,ran:c.some(d=>d.ran)}}async function bc(e,t,n,o={}){let s=[],i=[],r=[],c=jn(o);for(let[p,d]of n.entries()){let u=Od(d,e)??bd(d,c.scopes,o.graph);u?yc(s,d,u):r.push({id:`f${p+1}`,finding:d})}if(r.length===0)return{kept:[],dropped:s,ran:!0,flagged:i};let a=await Id(e,t,r.map(({id:p,finding:d})=>({id:p,...Cd(d)})),o,c),l=[];return r.forEach(({id:p,finding:d})=>{let u=a.verdicts.get(p);if(!u||u.inScope){l.push(d);return}_s?yc(s,d,u.reason):(vd(i,d,u.reason),l.push(d))}),{kept:l,dropped:s,ran:a.ran,flagged:i,...a.diagnostics.length?{diagnostics:a.diagnostics}:{},...a.missingIds.length?{missingIds:a.missingIds}:{}}}function Oc(e,t,n=new Set){if(!t)return 1;let o=e.reduce((i,r)=>i+r.size,0),s=$d(e,n);return zi(o,s,15e4,4)}function $d(e,t=new Set){return e.filter(n=>t.has(n.path)||yr(n.path)).reduce((n,o)=>n+o.size,0)}function Oy(e,t){return t>1?Math.min(e,6e4):0}function Uy(e,t,n){let o=ie(e).multiPass,s=n?ds(n.repos??[],je(te(n)),o,e).passes.length:Oc([...t],o),i=$i(e,s,ps(s),_e);return{findings:i.findings,calls:[i.derive,H(e,"scope-findings","scope",It,Math.ceil(i.findings/j)*(z+1),_e),...i.check?[i.check]:[]]}}function Is(e,t){return J(e,t).sourceNotes&&Array.isArray(t.findingsRaw)&&t.findingsRaw.length>0?"explaining_sources":"structuring"}var Gy=async(e,t)=>{t.progress.assertHeld(),t.progress.signal?.throwIfAborted();let{settings:n}=e,{state:o}=e,s=await Le(t),i=ke(t.model,s,t.progress.rethrow,t.progress.signal),r=await ha(n,o,i);if(r){let y=e.execution.secondOpinion;if(r.done&&y&&o.findingQuality?.config.switches.secondOpinion){if(!o.findingCheck?.state?.done)return{set:ne(r.data),clear:[],next:"inspecting"};let k=o.findingCheck,w=o.findingQuality,O=await hs(k.state.result,k.state,k.original,{repos:o.repos??[],fragments:te(o)},{settings:n,qualityConfig:w.config,codeEvidence:w.codeEvidence,readingSkipped:w.readingSkipped,sawCode:o.sawCode??w.sawCode,secondOpinion:{...y,oneBatch:!0,llm:ke(t.secondOpinionModel??null,s,t.progress.rethrow,t.progress.signal)},onCheckpoint:async _=>t.progress.checkpoint({findingCheck:{...k,state:_},..._.qualityAudit?{findingQuality:{...w,..._.qualityAudit}}:{}})}),v={...r.data,findingCheck:{...k,state:O},...O.qualityAudit?{findingQuality:{...w,...O.qualityAudit}}:{}};return{set:ne(v),clear:[],next:O.qualityAudit?.shadow?.done===!1?"inspecting":Is(n,v)}}return{set:ne(r.data),clear:[],next:r.done?Is(n,r.data):"inspecting"}}let c=await kc(n,o,{llm:i,load:t.context.loadCodeVerdicts});if(c.pending)return{set:ne(c.data),clear:[],next:"inspecting"};if(o=c.data,!t.model)throw new se("llm","llm gone mid-job");let a=te(o),l=Ue(a),p=await oa(n,{data:o,graph:l,fragments:a,llm:i,checkpoint:t.progress.checkpoint,progress:t.progress,forLocal:e.execution.forLocal,parallel:Bn(n,e.execution)});if(!p.done)return{set:ne(p.data),clear:[],next:"inspecting"};let d=Pe(p.findings,Te(o),De(p.data),n),u=await bc(n,i,d.findings,{graph:l,qualityConfig:p.data.findingQuality?.config,codeEvidence:ta(p.data,p.plan,p.readByRepo,n),scopeConcurrency:e.execution.scopeConcurrency}),g=u.dropped.length,h=u.flagged.length,f=[...d.warnings,...p.plan.warnings];g&&f.push(`${g} finding${g===1?"":"s"} removed as out of scope`),h&&f.push(`${h} finding${h===1?"":"s"} flagged by the scope check's model pass, but kept \u2014 that verdict is not enforced`),u.ran||f.push("the scope check did not run; findings were kept unchecked");let m=na(p.plan);m&&f.push(m),p.shadowed.length&&f.push(`${p.shadowed.length} file${p.shadowed.length===1?" was":"s were"} not analysed because another repository has a file at the same path: ${p.shadowed.map(y=>`${y.repo}:${y.path}`).join(", ")}`);let S=wn(n)?{sawCode:sa(p.readByRepo)}:{},b=ma(n,{...p.data,...S,...p.data.findingQuality?{findingQuality:{...p.data.findingQuality,...S}}:{},findingsRaw:u.kept,scopeCheck:{dropped:g,ran:u.ran,flagged:h,...u.diagnostics?.length?{diagnostics:u.diagnostics}:{}},readPaths:p.readByRepo,warnings:[...p.data.warnings??[],...f]},u.kept);return{set:ne(b),clear:[],next:b.findingCheck?.state&&!b.findingCheck.state.done?"inspecting":Is(n,b)}};var $t=A.explain,$s=4,uo=4e4,vc=15,Pt=4096,_c=6e4;function Cc(e,t,n){let o=Zr(e.site?{...e.site,repo:e.siteRepo??"",excerpt:e.excerpt}:null,e.otherSites).map((l,p)=>({index:p,repo:l.repo??"",path:l.path,line:l.line,excerpt:D(l.excerpt??"",B)})),s=[],i=[],r=(l,p)=>t.repos.find(d=>d.key===l)?.files?.[p],c=l=>{if(s.some(g=>g.repo===l.repo&&g.path===l.path&&g.text===l.text))return;let p=Math.max(0,uo-Buffer.byteLength(JSON.stringify([...s,{...l,text:"",truncated:!0}]))),d=D(l.text,p);for(;d&&Buffer.byteLength(JSON.stringify(d))-2>p;)d=D(d,Math.floor(Buffer.byteLength(d)*.9));if(!d){i.push(`Source notes omitted ${l.repo}:${l.path}: context limit`);return}let u=l.truncated||d!==l.text;s.push({...l,text:d,truncated:u}),u&&i.push(`Source notes context incomplete: ${l.repo}:${l.path}`)};for(let l of o){let p=r(l.repo,l.path);if(p===void 0){i.push(`Source notes file unavailable: ${l.repo}:${l.path}`);continue}let d=l.line===null?null:l.line+l.excerpt.split(`
27
- `).length-1;c({repo:l.repo,path:l.path,...et(p,l.line,uo,vc,d)})}let a=new Set;for(let l of o){let p=`${l.repo}
28
- ${l.path}`;if(a.has(p))continue;a.add(p);let d=r(l.repo,l.path);if(d===void 0)continue;let u=t.repos.find(g=>g.key===l.repo)?.files??{};for(let g of Wn(l.path,d,u))c({repo:l.repo,path:g,...et(u[g],null,uo)})}for(let l of tt([],t,0,"legacy",n).coreFiles)c(l);return{category:e.category??"",title:D(e.title,B/4),summary:D(e.summary??"",B/4),cause:D(e.cause,B/2),roles:Pn(e.category),sites:o,files:s,diagnostics:i}}var Ps=(e,t=140)=>{let n=e.trim().replace(/\s+/g," ");if(n.length<=t)return n;let o=n.slice(0,t-1),s=o.lastIndexOf(" ");return`${o.slice(0,s>t/2?s:o.length).trimEnd()}\u2026`};function Pd(e,t,n){let o=e.text.split(`
29
- `),s=o.findIndex(c=>c.startsWith(`${t} `));if(s<0)return!1;let r=o.slice(s).map(c=>c.replace(/^\d+ /,"")).join(`
30
- `).indexOf(n);return r>=0&&r<o[s].replace(/^\d+ /,"").length}function Ec(e,t){let n=Pn(t.category),o=new Set,s=e.sites.flatMap(a=>{let l=t.sites.find(d=>d.index===a.index),p=Ps(a.meaning);return!l||!Number.isInteger(a.index)||o.has(a.index)||!n.includes(a.role)||!p?[]:(o.add(a.index),[{index:a.index,role:a.role,meaning:p,keyPhrase:a.keyPhrase.trim()&&l.excerpt.includes(a.keyPhrase)?a.keyPhrase:""}])}),i=new Set,r=e.counterEvidence.flatMap(a=>{let l=Ps(a.meaning);if(!Number.isInteger(a.line)||a.line<1||!a.excerpt.trim()||!l)return[];if(!t.files.some(d=>d.repo===a.repo&&d.path===a.path&&Pd(d,a.line,a.excerpt)))return[];let p=JSON.stringify([a.repo,a.path,a.line,a.excerpt]);return i.has(p)?[]:(i.add(p),[{...a,meaning:l}])}).slice(0,2),c=Ps(e.supportNote,280);if(!c)throw new Error("Source notes have no support explanation");return Ur.parse({sites:s,support:e.support,supportNote:c,counterEvidence:r})}import{z as Rd}from"zod";function Ic(e,t,n){let o=Buffer.byteLength(JSON.stringify(e))+t.templateBytes("explain-sources")+Buffer.byteLength(JSON.stringify(Rd.toJSONSchema(Bo)));if(o>_c)throw new Error("Source notes input exceeds its priced limit");return re(n,{template:"explain-sources"},"Explain sources",$t,pe(o),Pt)}function Ad(e){return{template:"explain-sources",model:$t,answerFormat:"sourceNotes",inputs:{content:JSON.stringify(e)},limits:{maxTokens:Pt,thinking:"disabled"}}}async function Md(e,t,n,o){let s=Cc(n,o,t.tools);Ic(s,t.tools,e);let i=await F(t,Ad(s),e);return Ec(i,s)}async function $c(e,t,n,o,s){if(s?.done)return s;let i=s??{cursor:0,findings:n.map(l=>({...l,sourceNotes:null})),failures:0,done:!1},r=i.findings.slice(i.cursor,i.cursor+$s),c=await K(r,$s,async l=>{try{if(!t.available)throw new Error("Source notes model unavailable");return{finding:{...l,sourceNotes:await Md(e,t,l,o)},failed:!1}}catch(p){return M("explain-sources",p,d=>t.rethrow(d)),{finding:{...l,sourceNotes:null},failed:!0}}},t??void 0),a=Math.min(i.findings.length,i.cursor+r.length);return{cursor:a,findings:[...i.findings.slice(0,i.cursor),...c.map(l=>l.finding),...i.findings.slice(a)],failures:i.failures+c.filter(l=>l.failed).length,done:a>=i.findings.length}}async function Pc(e,t,n){if(!J(e,t).sourceNotes||t.sourceNotes?.done)return{data:t,done:!0};let o=[],s;try{let r=t.repos??[],c=Te(t);o=Pe(xe(t.findingsRaw??[]),c,De(t),e).findings;let a=te(t);if(t.sourceNotes&&(!Array.isArray(t.sourceNotes.findings)||!Number.isInteger(t.sourceNotes.cursor)))throw new Error("Unreadable source notes checkpoint");s=await $c(e,n,o,{repos:r,fragments:a},t.sourceNotes)}catch(r){M("explain-sources",r,u=>n.rethrow(u)),le(r);let c=t.sourceNotes,a=c&&Array.isArray(c.findings)&&Number.isInteger(c.cursor)&&c.cursor>=0&&c.cursor<=c.findings.length,l=a?c.findings:o,p=a?c.cursor:0,d=l.length||(Array.isArray(t.findingsRaw)?t.findingsRaw.length:0);s={cursor:d,findings:l.map((u,g)=>g<p?u:{...u,sourceNotes:null}),failures:(a?c.failures:0)+d-p,done:!0}}let i=[...t.warnings??[]];return s.done&&s.failures&&i.push(`Source notes unavailable for ${s.failures} finding${s.failures===1?"":"s"}; their quotes are shown without explanations.`),{done:s.done,data:{...t,sourceNotes:s,warnings:i,...s.findings.length||Array.isArray(t.findingsRaw)&&!t.findingsRaw.length?{findingsRaw:s.findings}:{}}}}function Nx(e,t){return ie(e).sourceNotes?[H(e,"explain-sources","sourceNotes",$t,t,_e,Pt)]:[]}var Lx=async(e,t)=>{t.progress.assertHeld(),t.progress.signal?.throwIfAborted();let n=await Le(t),o=await Pc(e.settings,e.state,ke(t.model,n,t.progress.rethrow,t.progress.signal));return{next:o.done?"structuring":"explaining_sources",clear:[],set:ne(o.done?ua(o.data):o.data)}};function Rc(e){let t=e.id.indexOf("#");return e.sourceRef?.repo??(t<0?null:e.id.slice(0,t))}var an=(e,t)=>JSON.stringify([e,t]),Ac=(e,t)=>e<t?-1:e>t?1:0;function Mc(e,t=[]){let n=e.nodes.filter(r=>r.kind==="agent");if(n.some(r=>r.files===void 0&&!r.sourceRef))return null;if(!n.length)return[];let o=new Map,s=(r,c,a)=>{let l=an(r,c),p=o.get(l);p||(p={repo:r,path:c,agents:new Set},o.set(l,p)),a.forEach(d=>p.agents.add(d))},i=new Map;for(let r of n){let c=Rc(r),a=Pr(r),l=an(c,a),p=i.get(l)??[];p.push(r.id),i.set(l,p);for(let d of r.files??[])s(c,d.path,[r.id]);r.sourceRef&&s(c,r.sourceRef.path,[r.id]),He(r)&&s(c,Ar(a,c),[r.id]);for(let d of r.sourcePaths??[])s(c,d,[r.id])}for(let r of e.nodes)r.kind==="tool"&&r.sourceRef&&s(Rc(r),r.sourceRef.path,[]);for(let r of t){let c=i.get(an(r.repo,r.unitKey))??[];for(let a of r.input.sources)s(r.repo,a.sourcePath,c)}return[...o.values()].map(r=>({...r,agents:[...r.agents].sort()})).sort((r,c)=>Ac(r.repo??"",c.repo??"")||Ac(r.path,c.path))}function Fc(e,t){if(e===null)return[];let n=new Set(e.map(s=>s.path)),o=new Set(e.map(s=>an(s.repo,s.path)));return t.flatMap((s,i)=>s.sitePath?(s.siteRepo===null?n.has(s.sitePath):o.has(an(s.siteRepo,s.sitePath)))?[]:[i]:[])}var Rt=e=>({paths:e.slice(0,2e3),omitted:Math.max(0,e.length-2e3)});function Fd(e){let t=e.map((i,r)=>({part:r+1,findings:[]})),n=Buffer.byteLength(JSON.stringify(t)),o=!1,s=0;return e.forEach((i,r)=>{let c=t[r].findings;for(let a of i){let l=Buffer.byteLength(JSON.stringify(a))+(c.length?1:0);n+l>15e4&&(o=!0),o?s+=1:(c.push(a),n+=l)}}),{rawFindings:t,rawFindingsOmitted:s}}function Tc(e){let t=new Map(Object.entries(e.readByRepo).map(([s,i])=>[s,new Set(i)])),n=new Set(Object.values(e.readByRepo).flat()),o=new Map;for(let s of e.loaded??[]){let i=s.repo===null?n.has(s.path):t.get(s.repo)?.has(s.path);for(let r of s.agents){let c=o.get(r);c||(c={loaded:new Set,notRead:new Set},o.set(r,c)),c.loaded.add(s.path),i||c.notRead.add(s.path)}}return{version:1,core:Rt(e.plan?.core??[]),parts:(e.plan?.passes??[]).map(s=>({own:Rt(s.own)})),skipped:Rt(e.plan?.skipped??[]),readByRepo:Object.fromEntries(Object.entries(e.readByRepo).map(([s,i])=>[s,Rt(i)])),agents:e.graph.nodes.filter(s=>s.kind==="agent").map(s=>({id:s.id,label:s.label??s.id,loaded:Rt([...o.get(s.id)?.loaded??[]]),notRead:Rt([...o.get(s.id)?.notRead??[]])})),...Fd(e.passFindings)}}function Nc(e){return e.CF_RECALL_SIGNALS!=="0"}import{createHash as Td}from"node:crypto";function cn(e,t){return e==="finding"?Dr(t):Td("sha256").update(Ve(t)).digest("hex")}function Lc(e,t,n,o){let s=cn(e,t);return jc({target:e,index:n,fingerprint:s},o)}function jc(e,t){let n={status:"rejected",reason:"attachment_mismatch"};if(!Number.isInteger(e.index)||e.index<0)return n;let o=t.filter(i=>i.target===e.target&&i.index===e.index);if(!o.length)return{status:"absent"};if(o.length!==1||o[0].fingerprint!==e.fingerprint)return n;let s=Lt(o[0]);return s?{status:"accepted",wording:s}:n}function Rs(e,t){let n=new Map(t.map(c=>[c.key,c])),o=e.evidence.flatMap(c=>{let a=n.get(c.key);if(!a)return[];let l=e.positions.filter(d=>d.key===c.key),p=l.length===1&&l[0].target===c.kind?l[0]:null;return[{key:c.key,pair:a,position:p}]}),s=o.flatMap(({pair:c,position:a})=>a?[{target:a.target,index:a.index,fingerprint:a.fingerprint,headline:c.headline,ifLeft:c.ifLeft}]:[]),i=[],r=[];for(let{key:c,position:a}of o){let l=a?jc(a,s):null;if(!a||l?.status!=="accepted"){r.push({key:c,reason:"attachment_mismatch"});continue}i.push({target:a.target,index:a.index,fingerprint:a.fingerprint,...l.wording})}return{rows:i,rejected:r}}function Dc(e,t,n,o){let s=[],i=new Set,r=0;for(let c of n){let a=`${c.target}:${c.index}`;if(i.has(a))continue;i.add(a);let l=c.target==="finding"?e[c.index]:void 0,p=c.target==="structure"?t[c.index]:void 0;if((l?Lc("finding",l,c.index,n):p?Lc("structure",p,c.index,n):null)?.status!=="accepted"){r++;continue}s.push(c)}return{rows:s,...o?{diagnostics:r?{...o,accepted:o.accepted-r,rejected:o.rejected+r,byReason:{...o.byReason,attachment_mismatch:(o.byReason.attachment_mismatch??0)+r}}:o}:{}}}function Bc({state:e,settings:t}){let n=e.repos??[],o=[],s=te(e).map(({repoKey:b,fragment:y},k)=>{let w=jr(y,n[k]?.files??{},b,t);return o.push(...w.warnings),{repoKey:b,fragment:w.fragment,files:w.nodes}}),i=Ue(s),{findings:r,warnings:c}=Pe(xe(e.findingsRaw??[]),Te(e),De(e),t),a=e.structuresRaw??[],l=ht(t)?e.findingHeadlines:void 0,p=l?.done?l.version===2?l.rows:l.rows.map(b=>({...b,target:"finding"})):[],d=Dc(r,a,p,ht(t)?l?.version===2?l.diagnostics:e.findingHeadlineDiagnostics:void 0),u=d.rows,g=e.readPaths??Object.fromEntries(n.map(b=>[b.key,Object.keys(b.files??{})])),h;if(Nc(t)){let b=Mc(i,e.findingQuality?.codeEvidence),y=e.inspectPlan?.passes.map((k,w)=>e.passResults?.[w]?.findings??e.passFindings?.[w]??[])??e.passFindings??[];h={log:Tc({plan:e.inspectPlan??null,readByRepo:g,loaded:b,graph:i,passFindings:y.filter(k=>Array.isArray(k))}),unreachedIndexes:b===null?null:Fc(b,r.map(k=>({siteRepo:k.siteRepo??null,sitePath:k.site?.path??null})))}}let f=0,m=0;for(let b of n)for(let y of Object.values(b.files??{}))f++,m+=y.length;let S=_t(e);return{graph:i,model:A.generate,analyzedShaByRepo:Object.fromEntries(n.map(b=>[b.key,b.headSha??""])),sourceStats:{files:f,bytes:m,...S===void 0?{}:{sawCode:S}},...h?{recall:h}:{},warnings:[...new Set([...e.warnings??[],...o,...c])],findings:r,...u.length?{findingHeadlines:u}:{},...d.diagnostics?{findingHeadlineDiagnostics:d.diagnostics}:{},structures:a,loadModes:e.loadModes??[],structurePassFailed:e.structurePassFailed??!1,splitCheckRan:e.splitCheckRan??!1,splitPassFailed:e.splitPassFailed??!1,sourceFilesByRepo:Object.fromEntries(n.map(b=>[b.key,b.files??{}])),readPaths:g,rechecks:e.rechecks??[],recheckedChangeIds:e.recheckedChangeIds??[],newVerdicts:e.newVerdicts??[],...e.findingQuality?{findingQuality:e.findingQuality}:{}}}import{createHash as Nd}from"node:crypto";function qc({repo:e,body:t}){let[n,...o]=t.evidence,s=t.split,i=r=>r.map(c=>({path:c.path??null,startLine:c.startLine,endLine:c.endLine}));return{kind:"structure",impact:t.kind,cause:t.cause,category:null,question:null,fixSummaries:[],site:n?{repo:e,path:n.path,line:n.line}:null,excerpt:n?.excerpt??null,otherSites:o.map(r=>({repo:e,path:r.path,line:r.line,excerpt:r.excerpt})),structure:{title:t.title,subKind:t.subKind,files:t.files.map(r=>({path:r.path,action:r.action,role:r.role,unit:r.unit,loadMode:r.loadMode,loadVia:r.loadVia,purpose:r.purpose})),segments:t.segments.map(r=>({path:r.path,startLine:r.startLine,endLine:r.endLine,to:r.to,disposition:r.disposition,into:r.into?{path:r.into.path,line:r.into.line}:null,reason:r.reason})),reorder:t.reorder?{path:t.reorder.path,startLine:t.reorder.startLine,endLine:t.reorder.endLine,steps:t.reorder.steps.map(r=>({from:r.from,reason:r.reason}))}:null,toolMoves:t.toolMoves.map(r=>({tool:r.tool,fromUnit:r.fromUnit,toUnit:r.toUnit,reason:r.reason})),split:s?{frontDoor:{job:s.frontDoor.job,skills:[...s.frontDoor.skills]},subAgents:s.subAgents.map(r=>({job:r.job,description:r.description,path:r.path,handoff:r.handoff??null,skills:r.skills.map(c=>({from:c.from,to:c.to})),tools:[...r.tools],movedKnowledge:i(r.movedKnowledge),neededKnowledge:i(r.neededKnowledge)}))}:null}}}function Kc(e,t=[]){return{evidence:[...e.map((n,o)=>({key:`f${o}`,kind:"finding",impact:n.kind,structure:null,cause:n.cause,category:n.category??null,question:n.question,site:n.site?{repo:n.siteRepo,path:n.site.path,line:n.site.line}:null,excerpt:n.excerpt,otherSites:n.otherSites.map(s=>({repo:s.repo,path:s.path,line:s.line,excerpt:s.excerpt})),fixSummaries:n.fixes.flatMap(s=>typeof s.summary=="string"&&s.summary.trim()?[s.summary]:[])})),...t.map((n,o)=>({key:`s${o}`,...qc(n)}))],positions:[...e.map((n,o)=>({key:`f${o}`,target:"finding",index:o,fingerprint:cn("finding",n)})),...t.map((n,o)=>({key:`s${o}`,target:"structure",index:o,fingerprint:cn("structure",n)}))]}}function Hc(e,t){return Nd("sha256").update(Ve({batch:e,requestIdentity:t})).digest("hex")}import{z as jd}from"zod";function As(e){let t=e.trim();return/[.!?…。!?][\u0022'\u201d\u2019)\]]*$/u.test(t)?t:`${t}.`}function Uc(e,t,n){return t.kind==="structure"?`${As(e)} ${As(t.structure.title)}`:Ld(e,t,n)}function Ld(e,t,n){let o=e.trim();if(!In(t.category))return o;let s=[...t.site?[t.site]:[],...t.otherSites],i=new Map;for(let l of s){let p=i.get(l.path)??new Set;p.add(l.repo),i.set(l.path,p)}let r=new Set,c=s.flatMap(l=>{let p=JSON.stringify([l.repo,l.path]);return r.has(p)?[]:(r.add(p),[i.get(l.path).size>1&&l.repo?`${l.repo}:${l.path}`:l.path])}),a=t.question?.trim()||n.trim();return`${As(o)} ${a}${c.length?` (${c.join(", ")})`:""}`}var Gc=e=>e.match(/\d+(?:[.,]\d+)*/g)??[];function ct(e,t,n=0){let o={};for(let{reason:s}of t)o[s]=(o[s]??0)+1;return{version:qe,rows:[...e],rejected:[...t],diagnostics:{requested:e.length+t.length,accepted:e.length,rejected:t.length,unexpectedRows:n,byReason:o}}}function Ms(e,t){let n=nr.safeParse(e);if(!n.success)return null;let o=n.data,s=new Set(t.map(r=>r.key));for(let r of[...o.rows,...o.rejected])if(!s.delete(r.key))return null;if(s.size)return null;let i=ct(o.rows,o.rejected,o.diagnostics.unexpectedRows);return i.diagnostics.requested===t.length&&Ve(i.diagnostics)===Ve(o.diagnostics)?o:null}function mo(e,t,n){let o={version:qe,rows:[],rejected:[],diagnostics:{requested:t.length,accepted:0,rejected:0,unexpectedRows:0,byReason:{}}},s=(p,d)=>{o.rejected.push({key:p,reason:d})},i=Xo.safeParse(e),r=new Map,c=new Set(t.map(p=>p.key)),a=i.success?i.data.rows:[];for(let p of a)r.set(p.key,(r.get(p.key)??0)+1),c.has(p.key)||o.diagnostics.unexpectedRows++;let l=new Map(a.map(p=>[p.key,p]));for(let p of t){let d=p.key,u=l.get(d);if(!i.success){s(d,"malformed_answer");continue}if(!u){s(d,"missing_row");continue}if(r.get(d)!==1){s(d,"duplicate_key");continue}if(u.headline===null&&u.ifLeft===null){s(d,"model_declined");continue}if(!u.headline?.trim()||!u.ifLeft?.trim()){s(d,"incomplete_pair");continue}let g=Lt(u);if(!g){s(d,"invalid_wording");continue}let h=new Set([p.excerpt??"",...p.otherSites.map(m=>m.excerpt)].flatMap(Gc));if([g.headline,g.ifLeft].some(m=>Gc(m).some(S=>!h.has(S)))){s(d,"unsupported_number");continue}if(In(p.category)){if(!p.site||!p.excerpt?.trim()||!p.otherSites.some(m=>m.excerpt.trim())){s(d,"insufficient_question_evidence");continue}if([p.site,...p.otherSites].some(m=>!m.path.trim())||!(p.question?.trim()||n.trim())){s(d,"invalid_source");continue}}if(p.kind==="structure"&&!p.structure.title.trim()){s(d,"invalid_source");continue}let f=Uc(g.headline,p,n);if(!Lt({...g,headline:f})){s(d,"invalid_wording");continue}o.rows.push({key:d,headline:f,ifLeft:g.ifLeft})}return ct(o.rows,o.rejected,o.diagnostics.unexpectedRows)}var ln=48e3;function Rb(e,t){return e?[re(t,{template:"finding-headlines"},"Finding headlines",Gt,pe(ln),Xt)]:[]}async function Xc(e,t,n){let o=Qo(t.evidence),s=e.tools.headlinePlan(o),i=Hc(t,{prompt:e.tools.promptVersion(o.template),model:o.model,limits:o.limits,maxInputBytes:ln,request:s.identity,compositionVersion:2,resultVersion:qe}),r=a=>{let l=Rs(t,a.rows);if(l.rejected.length){let p=new Set(l.rejected.map(d=>d.key));a=ct(a.rows.filter(d=>!p.has(d.key)),[...a.rejected,...l.rejected],a.diagnostics.unexpectedRows)}return{version:qe,inputHash:i,done:!0,rows:l.rows,rejected:a.rejected,diagnostics:a.diagnostics}},c=a=>r(ct([],t.evidence.map(l=>({key:l.key,reason:a}))));if(n?.done)return n.version===qe&&n.inputHash===i?n:c("stale_checkpoint");if(!t.evidence.length)return r(ct([],[]));if(!e.available)return c("model_unavailable");if(s.inputBytes>ln)return c("over_input_allowance");try{let a=await F(e,o,{},{maxInputBytes:ln}),l=s.relayValidated?Ms(a,t.evidence):mo(a,t.evidence,s.fallbackQuestion??"");return l?r(l):c("incompatible_relay_result")}catch(a){return e.rethrow(a),c(a instanceof Oi||a instanceof jd.ZodError?"malformed_answer":"provider_failure")}}function Qb(e){return ht(e)?[H(e,"finding-headlines","findingHeadlines",Gt,1,_e,Xt)]:[]}var Yb=async(e,t)=>{if(t.progress.assertHeld(),t.progress.signal?.throwIfAborted(),!ht(e.settings))return{next:"persisting",set:{},clear:[]};let n=await Le(t),o=ke(t.model,n,a=>{t.progress.signal?.throwIfAborted(),t.progress.assertHeld(),t.progress.rethrow?.(a)},t.progress.signal),{findings:s,structures:i}=Bc(e),r=Kc(s,i),c=await Xc(o,r,e.state.findingHeadlines);return t.progress.signal?.throwIfAborted(),t.progress.assertHeld(),await t.progress.checkpoint({findingHeadlines:c}),{next:"persisting",set:{findingHeadlines:c},clear:[]}};function ho(e){let t=e,n=t.expectedOutcome?.trim();return{motivation:t.motivation??[],outcomes:t.outcomes??(n?[{improvement:n,measurement:""}]:[])}}import{createHash as zd}from"node:crypto";import{basename as al}from"node:path";var Fs=["split_monolith","single_source","fold_patches","extract_subagent","merge_subagents","move_rule","move_tool","reorder"],Ts=["create","shrink","edit","delete"],Ns=["system prompt","soul","knowledge","skill","config","tools","mcp","template","reference","log","code"],Ls=["always","on_demand","never"],js=["move","fold_into","remove_duplicate","remove_superseded"],Ds=["pointer","handoff","reference_update"];var Bs=/^ {0,3}(`{3,}|~{3,})/,Wc=/^(#{1,6})\s+\S/,qs=/^(\s*)([-*+]|\d+[.)])\s+/,Ks=/^\s*\|/;function X(e){let t=e.split(`
31
- `);return t.length>1&&t[t.length-1]===""&&t.pop(),t}function ce(e,t){let n=X(t),o=[],s=(c,a,l,p=0)=>o.push({kind:c,start:a+1,end:l+1,level:p,text:n[a]}),i=0,r=mr(t,Bt(e)?void 0:"outline");if(r){let c=r.raw.length+1;s("frontmatter",0,c),i=c+1}for(;i<n.length;){let c=n[i];if(c.trim()===""){i++;continue}let a=Bs.exec(c);if(a){let u=i+1;for(;u<n.length;){let h=Bs.exec(n[u]);if(h&&h[1][0]===a[1][0]&&h[1].length>=a[1].length&&!n[u].slice(h[0].length).trim())break;u++}let g=Math.min(u,n.length-1);s("fence",i,g),i=g+1;continue}let l=Wc.exec(c);if(l){s("heading",i,i,l[1].length),i++;continue}if(Ks.test(c)){let u=i;for(;u+1<n.length&&Ks.test(n[u+1]);)u++;s("table",i,u),i=u+1;continue}let p=qs.exec(c);if(p){let u=p[1].length,g=i;for(;g+1<n.length&&n[g+1].trim()!==""&&!qs.test(n[g+1])&&n[g+1].length-n[g+1].trimStart().length>u;)g++;s("list_item",i,g,u),i=g+1;continue}let d=i;for(;d+1<n.length&&n[d+1].trim()!==""&&!Bs.test(n[d+1])&&!Wc.test(n[d+1])&&!Ks.test(n[d+1])&&!qs.test(n[d+1]);)d++;s("paragraph",i,d),i=d+1}return o}function Dd(e){return e.kind==="frontmatter"||e.kind==="fence"||e.kind==="table"||e.kind==="list_item"}function go(e,t,n){let o=t,s=n,i=!0;for(;i;){i=!1;for(let r of e){if(!Dd(r))continue;r.start<=s&&r.end>=o&&(r.start<o||r.end>s)&&(o=Math.min(o,r.start),s=Math.max(s,r.end),i=!0)}}return{start:o,end:s,snapped:o!==t||s!==n}}var Bd=e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),Vc=(e,t)=>new RegExp(`(^|[\\s\`'"(])${Bd(t)}($|[\\s\`'"),.:;])`).test(e);function qd(e,t){let n=e.segments.map((r,c)=>({...r,index:c})),o=n.filter(r=>(r.disposition==="move"||r.disposition==="remove_superseded")&&t.has(r.to)),s=new Set([...o.filter(r=>r.disposition==="move").map(r=>r.path),...t]),i=n.filter(r=>(r.disposition==="remove_duplicate"||r.disposition==="fold_into")&&(s.has(r.path)||t.has(r.to)));return[...o,...i].sort((r,c)=>r.index-c.index)}var Jc=(e,t,n)=>e.find(o=>o.path===t&&n>=o.startLine&&n<=o.endLine)??null;function Hs(e,t,n){let o=Jc(e,t,n);return o?o.disposition==="move"||o.disposition==="remove_superseded"?o.to:o.into?Hs(e,o.into.path,o.into.line):o.to:t}function lt(e){return e===""||e.includes(`
32
- `)||e.includes(": ")||e.endsWith(":")||/^[\s"'[\]{}#>|*&!%@`,]/.test(e)||/\s$/.test(e)?JSON.stringify(e):e}var Kd=e=>{let t=/^(#{1,6})\s+(.*)$/.exec(e);return t?t[2].trim():null};function zc(e,t,n,o,s){let i=()=>{t.lines.length&&t.lines[t.lines.length-1].trim()!==""&&(t.lines.push(""),t.prov.push("heading"))};if(n){let r=ce(e,t.lines.join(`
33
- `)).filter(a=>a.kind==="heading"),c=r.findIndex(a=>Kd(a.text)===n.trim());if(c>=0){let a=r[c],l=t.lines.length;for(let p=c+1;p<r.length;p++)if(r[p].level<=a.level){l=r[p].start-1;break}t.lines.splice(l,0,...o),t.prov.splice(l,0,...s);return}i(),t.lines.push(`## ${n}`,""),t.prov.push("heading","heading")}else i();t.lines.push(...o),t.prov.push(...s)}function Qc(e,t){let n=new Set(t.ticked),o=qd(t.body,n),{files:s}=t.body,i=[],r=[],c=[],a=new Map,l=f=>X(t.contents[f]??""),p=f=>({lines:l(f),prov:l(f).map((m,S)=>`${f}:${S+1}`),created:!1});for(let f of[...new Set(o.map(m=>m.path))]){let m={lines:[],prov:[],created:!1};l(f).forEach((y,k)=>{Jc(o,f,k+1)||(m.lines.push(y),m.prov.push(`${f}:${k+1}`))});let S=s.find(y=>y.path===f),b=m.lines.filter(y=>y.trim()!=="").length;if(S?.action==="delete"&&b===0){c.push(f);continue}S?.action==="delete"&&i.push(`${f} keeps ${b} lines this time, so it is shrunk, not deleted`),a.set(f,m)}for(let f of o){if(f.disposition==="move")continue;let m=f.disposition==="remove_duplicate"?`duplicate_of ${f.into?.path??f.to}`:f.disposition==="remove_superseded"?`superseded_by ${f.childRef??""}`:`folded_into ${f.into?.path}:${f.into?.line}`;r.push({quote:l(f.path).slice(f.startLine-1,f.endLine).join(`
34
- `),sourcePath:f.path,sourceLine:f.startLine,reason:m,ref:f.childRef??""})}for(let f of s){if(!n.has(f.path)||f.action==="delete"||f.action==="shrink")continue;let m=a.get(f.path)??(t.contents[f.path]!=null?p(f.path):{lines:[],prov:[],created:!0});if(m.created&&f.frontmatter){let S=["---",`name: ${lt(f.frontmatter.name)}`,`description: ${lt(f.frontmatter.description)}`,...f.frontmatter.tools.length?[`tools: ${wt(e,f.frontmatter.tools)}`]:[],"---"];m.lines.push(...S),m.prov.push(...S.map(()=>"frontmatter"))}for(let S of o.filter(b=>b.to===f.path&&b.disposition==="move")){let b=l(S.path).slice(S.startLine-1,S.endLine);zc(e,m,S.heading,b,b.map((y,k)=>`${S.path}:${S.startLine+k}`))}a.set(f.path,m)}let d=new Set;for(let f of o)f.into&&(f.disposition==="fold_into"||f.disposition==="move")&&d.add(Hs(o,f.into.path,f.into.line));let u=t.body.reorder;u&&d.add(Hs(o,u.path,u.startLine));for(let f of t.childSites)d.add(f.host);for(let f of d)!a.has(f)&&t.contents[f]!=null&&a.set(f,p(f));let g=[];t.body.additions.forEach((f,m)=>{if(!a.has(f.path)&&t.contents[f.path]!=null&&a.set(f.path,p(f.path)),!a.has(f.path)){i.push(`no host found for the addition to ${f.path} (addition:${m})`);return}if(!(f.kind==="pointer"&&!t.ticked.some(S=>Vc(f.text,S)))){if(f.kind==="reference_update"){g.push(m),d.add(f.path);return}zc(e,a.get(f.path),f.heading,[f.text],[`addition:${m}`])}});let h=[...d].filter(f=>a.has(f)).sort();return{outputs:[...a.entries()].sort(([f],[m])=>f.localeCompare(m)).map(([f,m])=>({path:f,content:`${m.lines.join(`
35
- `)}
36
- `,provenance:m.prov,created:m.created})),deletes:c.sort(),removals:r,modelHosts:h,pendingAdditions:g,warnings:i}}function wo(e){let t=new Set(e.subKind==="single_source"?e.segments?.filter(n=>n.disposition==="remove_duplicate").map(n=>n.path):[]);return e.files.filter(n=>n.action==="create"||n.action==="edit"||n.action==="shrink"&&t.has(n.path)).map(n=>n.path).sort()}import{basename as Yc}from"node:path";var Hd=/(read|open|cat|file)/i;function Ud(e){return e.some(t=>Hd.test(`${t.name} ${t.description??""}`))}function Zc(e,t){if(!e)return[];let n=e.files.find(i=>i.role==="tools"),o=[];if(n)try{o=Ft(t[n.path]).tools.map(i=>({name:i.name,description:i.description??null}))}catch{o=[]}let s=new Map(o.map(i=>[i.name,i]));for(let i of e.tools)i.source!=="mcp"&&(s.has(i.label)||s.set(i.label,{name:i.label}));return[...s.values()]}function Us(e){return Ud(e)?"on_demand":"never"}function el(e,t){return t.existing?t.existing.mode:e.role==="skill"?ye(e.path,{nested:!0})?"on_demand":"never":e.role==="log"?"never":e.role!=="template"&&e.role!=="reference"?"always":t.prompt?.frontmatter?Us(t.prompt.frontmatter.tools.map(n=>({name:n}))):Us(Zc(t.node,t.files))}var Gd=/sent from (\S+:\d+)\.?\s*$/;function tl(e,t){let{repoKey:n,root:o,files:s,fragment:i}=t,r=[],c=new Set(i.edges.filter(h=>h.kind==="delegates").map(h=>h.to)),a=new Map;for(let h of i.nodes)for(let f of h.files)a.set(f.path,[...a.get(f.path)??[],{nodeId:h.id,label:h.label,role:f.role,skill:f.label,inCode:f.span!==void 0}]);let l=h=>(i.nodes.find(f=>f.id===h)?.files??[]).filter(f=>["system prompt","soul","knowledge","skill"].includes(f.role)).map(f=>f.path),p=(h,f,m=()=>!0)=>{for(let S of l(h)){let y=(s[S]??"").split(`
37
- `).findIndex(k=>k.includes(f)&&m(k));if(y>=0)return`${S}:${y+1}`}return null},d=h=>ft(h,o)??h,u=new Map,g=[];for(let h of Object.keys(s).filter(f=>xn(f,o)).sort()){let f=a.get(h)?.[0]??null,m=f?`${n}#${f.nodeId}`:null,S={repo:n,path:h,unit:m,role:f?.role??null};if(!f){g.push({...S,mode:"never",via:"not a convention, not referenced",evidence:""});continue}switch(f.role){case"system prompt":{let b="convention";if(c.has(f.nodeId))b="sub-agent file; its parent sees only the frontmatter description";else if(f.inCode){let y=i.nodes.find(w=>w.id===f.nodeId)?.desc??"",k=Gd.exec(y)?.[1];b=k?`system prompt in code, sent from ${k}`:"system prompt in code"}g.push({...S,mode:"always",via:b,evidence:""});break}case"code":g.push({...S,mode:"never",via:"code that sends the prompt; the model never reads it",evidence:""});break;case"soul":case"knowledge":{let b=Yc(h),y=p(f.nodeId,b,k=>/\b(not|never)\b.*\b(loaded|read)\b/i.test(k));g.push(y?{...S,mode:"never",via:"a line in the files says it is not loaded",evidence:y}:{...S,mode:"always",via:"Counterfact's runner appends it (src/lib/run/execute.ts:242-243)",evidence:""});break}case"tools":case"mcp":case"config":{let b=!0;try{f.role==="tools"?Ft(s[h]):JSON.parse(s[h])}catch{b=!1}g.push(b?{...S,mode:"always",via:f.role==="config"?"config":"tool definitions",evidence:""}:{...S,mode:"unknown",via:"unreadable config",evidence:""});break}case"skill":{let b=kt(e,Yc(h),s[h]),y=b.description??null;r.push(...(b.warnings??[]).map(k=>`${n}: ${h}: ${k}`)),g.push({...S,mode:"on_demand",via:y?`skill trigger \u2014 description: ${y}`:"skill trigger",evidence:"",evidenceKind:"skill-frontmatter"});break}default:{let b=p(f.nodeId,d(h))??(f.skill?`skill ${f.skill}`:""),y=i.nodes.find(k=>k.id===f.nodeId)??null;if(Us(Zc(y,s))==="on_demand")g.push({...S,mode:"on_demand",via:"named by a file the unit loads",evidence:b});else{let k=u.get(f.nodeId)??{label:f.label,paths:[]};k.paths.push(h),u.set(f.nodeId,k),g.push({...S,mode:"never",via:"pointer, but no file-reading tool",evidence:b})}}}}for(let{label:h,paths:f}of u.values()){let m=f.length;r.push(`${n}: ${m} reference file${m===1?"":"s"} can only be reached by a pointer, and ${h} has no file-reading tool, so it can't open them; for example: ${f.slice(0,5).join(", ")}`)}return{entries:g,warnings:r}}function ko(e,t,n){return e.find(o=>o.repo===t&&o.path===n)??null}var Xd="<!-- counterfact: proposed file -->";function At(e,t){return e.startsWith(`${t}#`)?e.slice(t.length+1):null}function nl(e,t,n){if(Bt(e))return li(t,n);if(!t.startsWith(`---
38
- `)){let a=n([]);return a.length?`---
39
- tools: ${a.join(", ")}
40
- ---
41
- ${t}`:t}let o=t.indexOf(`
42
- ---`,3),s=t.slice(4,o).split(`
43
- `),i=s.findIndex(a=>/^tools\s*:/i.test(a)),r=i>=0?s[i].replace(/^tools\s*:\s*/i,"").replace(/^\[|\]$/g,"").split(",").map(a=>a.trim()).filter(Boolean):[],c=n(r);return i>=0?c.length?s[i]=`tools: ${c.join(", ")}`:s.splice(i,1):c.length&&s.push(`tools: ${c.join(", ")}`),`---
44
- ${s.join(`
45
- `)}${t.slice(o)}`}function ol(e,t){let n=JSON.parse(e);return Array.isArray(n)?`${JSON.stringify(t(n),null,2)}
46
- `:`${JSON.stringify({...n,tools:t(n.tools??[])},null,2)}
47
- `}function Wd(e,t){let n=e.nodes.find(o=>o.id===t);return n?n.files.find(o=>o.role==="tools")?.path??n.files.find(o=>o.role==="system prompt")?.path??null:null}function rl(e,t,n,o,s,i=[]){let r={...t};for(let c of n.files)if(c.action==="delete"&&delete r[c.path],c.action==="create"){let a=c.frontmatter?`---
48
- name: ${lt(c.frontmatter.name)}
49
- description: ${lt(c.frontmatter.description)}
50
- ${c.frontmatter.tools.length?`tools: ${wt(e,c.frontmatter.tools)}
51
- `:""}---
52
- `:"";r[c.path]=`${a}${Xd}
53
- `}for(let c of n.additions)c.kind==="reference_update"||r[c.path]==null||(r[c.path]=`${r[c.path].replace(/\n?$/,`
54
- `)}${c.text}
55
- `);for(let c of n.toolMoves){let a=Vd(e,r,{tool:c.tool,fromPath:c.fromPath??dn(o,n,c.fromUnit,s),toPath:c.toPath??dn(o,n,c.toUnit,s)});a&&i.push(a)}return r}function dn(e,t,n,o){let s=At(n,o);return s?Wd(e,s):t.files.find(i=>i.unit===n&&i.role==="system prompt")?.path??null}function Vd(e,t,n){let{tool:o,fromPath:s,toPath:i}=n;if(Bt(e)){for(let r of[s,i])if(r&&t[r]!=null&&!r.endsWith(".json")&&ci(t[r]).error)return`${r}: tools could not be read; moving ${o} was skipped.`}return s&&t[s]!=null&&(t[s]=s.endsWith(".json")?ol(t[s],r=>r.filter(c=>c.name!==o)):nl(e,t[s],r=>r.filter(c=>c!==o))),i&&t[i]!=null&&(t[i]=i.endsWith(".json")?ol(t[i],r=>r.some(c=>c.name===o)?r:[...r,{...n.object??{},name:o}]):nl(e,t[i],r=>r.includes(o)?r:[...r,o])),null}function il(e,t){let n=at(e,sn(e,t));return En(n.fragment,t.repoKey).fragment}var sl=e=>e.files.map(t=>t.path).sort().join(`
56
- `),pn=(e,t)=>e.nodes.find(n=>n.files.some(o=>o.path===t))??null;function So(e,t,n,o){let s=m=>`${o}#${m}`,i=new Map(e.nodes.map(m=>[m.id,m])),r=new Map(t.nodes.map(m=>[m.id,m])),c=[];for(let[m,S]of r)i.has(m)?sl(i.get(m))!==sl(S)&&c.push({id:s(m),change:"edited",label:S.label}):c.push({id:s(m),change:"added",label:S.label});for(let[m,S]of i)r.has(m)||c.push({id:s(m),change:"removed",label:S.label});let a=m=>`${m.from}>${m.to}>${m.kind}`,l=new Map(e.edges.map(m=>[a(m),m])),p=new Map(t.edges.map(m=>[a(m),m])),d=[...[...p].filter(([m])=>!l.has(m)).map(([,m])=>({from:s(m.from),to:s(m.to),kind:m.kind,change:"added",detail:null})),...[...l].filter(([m])=>!p.has(m)).map(([,m])=>({from:s(m.from),to:s(m.to),kind:m.kind,change:"removed",detail:null}))],u=(m,S)=>{let b=S?pn(t,m)??pn(e,m):pn(e,m)??pn(t,m);return b?s(b.id):""},g=n.files.map(m=>{let S=n.segments.filter(O=>O.disposition==="move"&&O.to===m.path&&O.path!==m.path),b=n.segments.filter(O=>O.path===m.path),y=u(m.path,m.action!=="delete"),k,w={};if(m.action==="delete")k="removed";else if(m.action==="create"){let O=[...new Set(S.map(I=>I.path))],v=O.length===1&&n.files.some(I=>I.path===O[0]&&I.action==="delete"),_=O.length===1?u(O[0],!1):"";v&&_&&_!==y?(k="moved",w={fromNode:_,fromPath:O[0]}):k="added"}else S.length?k="grown":n.reorder?.path===m.path?k="reordered":b.length||m.action==="shrink"?k="shrunk":k="grown";return{path:m.path,role:m.role,node:y,change:k,...w,segments:S.length}});if(n.split){let m=new Set([...n.segments.map(S=>S.path),...(n.additions??[]).map(S=>S.path)]);for(let S of m){if(g.some(y=>y.path===S))continue;let b=pn(e,S);g.push({path:S,role:b.files.find(y=>y.path===S).role,node:s(b.id),change:n.segments.some(y=>y.path===S)?"shrunk":"grown",segments:0})}}n.reorder&&!g.some(m=>m.path===n.reorder.path)&&g.push({path:n.reorder.path,role:"system prompt",node:u(n.reorder.path,!0),change:"reordered",segments:0});let h=m=>{if(At(m,o))return m;let b=n.files.find(y=>y.unit===m);return b?u(b.path,!0):m},f=n.toolMoves.map(m=>({label:m.tool,fromNode:h(m.fromUnit),toNode:h(m.toUnit)}));return{nodes:c,edges:d,files:g,tools:f}}var cl=["ordering","reliability","coverage","cost","safety","correctness"],fn=["low","medium","high","critical"];function Gs(e,t=[]){let n=e.split?[...t,...Object.keys(e.sourceHashes??{}),...(e.additions??[]).map(o=>o.path),...e.split.subAgents.flatMap(o=>o.skills.map(s=>s.from))]:[];return[...new Set([...e.segments.map(o=>o.path),...e.files.filter(o=>e.subKind==="single_source"||o.action==="shrink"||o.action==="delete").map(o=>o.path),...n])].sort()}var Be=(e,t)=>e.includes(t);function Jd(e){if(!Be(Fs,e.subKind))return`sub-kind "${e.subKind}" is not one of ${Fs.join(", ")}`;if(!Be(cl,e.kind))return`impact "${e.kind}" is not one of ${cl.join(", ")}`;if(e.reorders.length>1)return"more than one reorder";let t=[];for(let r of e.files){if(!Be(Ts,r.action))return`${r.path}: action "${r.action}" is not one of ${Ts.join(", ")}`;if(!Be(Ns,r.role))return`${r.path}: role "${r.role}" is not one of ${Ns.join(", ")}`;if(!Be(Ls,r.loadMode))return`${r.path}: load mode "${r.loadMode}" is not one of ${Ls.join(", ")}`;let c=r.fmName||r.fmDescription||r.fmTools.length?{name:r.fmName,description:r.fmDescription,tools:r.fmTools}:null;t.push({path:r.path.trim(),action:r.action,role:r.role,unit:r.unit,loadMode:r.loadMode,loadVia:r.loadVia||null,purpose:r.purpose,frontmatter:c})}let n=[];for(let r of e.segments){if(!Be(js,r.disposition))return`${r.path}:${r.startLine}-${r.endLine}: disposition "${r.disposition}" is not one of ${js.join(", ")}`;let c=r.intoPath?{path:r.intoPath.trim(),line:r.intoLine}:null,a=r.disposition==="remove_duplicate"||r.disposition==="fold_into",l=r.to.trim()||(a&&c?c.path:"");n.push({path:r.path.trim(),startLine:r.startLine,endLine:r.endLine,to:l,disposition:r.disposition,into:c,childRef:r.childRef||null,heading:r.heading||null,reason:r.reason})}let o=[];for(let r of e.additions){if(!Be(Ds,r.kind))return`addition to ${r.path}: kind "${r.kind}" is not one of ${Ds.join(", ")}`;o.push({path:r.path.trim(),text:r.text,kind:r.kind,heading:r.heading||null})}let s=e.reorders[0],i=Be(fn,e.severity)?e.severity:"medium";return{body:{...ho(e),subKind:e.subKind,kind:e.kind,severity:i,title:e.title.trim(),cause:e.cause,evidence:e.evidence.map(r=>({path:r.path.trim(),line:r.line,excerpt:r.excerpt})),files:t,segments:n,additions:o,reorder:s?{path:s.path.trim(),startLine:s.startLine,endLine:s.endLine,steps:s.order.map((r,c)=>({from:r,reason:s.reasons[c]||null}))}:null,toolMoves:e.toolMoves.map(r=>({...r,fromPath:null,toPath:null}))},children:e.children.map(r=>({ref:r.ref.trim(),how:r.how}))}}function Qd(e,t){let n=[],o=[],s=[],i=(r,c)=>{n.push(`proposal "${r}": ${c} \u2014 dropped`),o.push({title:r,reason:c})};for(let r of t.raw){let c=Jd(r);if(typeof c=="string"){i(r.title,c);continue}let{body:a}=c,l=c.children,p=`proposal "${a.title}"`;if(a.files.length>Vo){i(a.title,`${a.files.length} files (cap ${Vo})`);continue}if(a.segments.length>zo){i(a.title,`${a.segments.length} segments (cap ${zo})`);continue}let d=Gs(a),u=new Set(a.files.filter(x=>x.action==="create").map(x=>x.path)),g=d.filter(x=>!u.has(x)),h=g.length>0?t.repos.find(x=>g.every(E=>x.files[E]!=null)):void 0;if(!h){i(a.title,`cites ${g[0]??d[0]??"no source file"}, which the analysis never read`);continue}let f=x=>h.files[x]!=null,S=[...a.files.map(x=>x.path),...a.segments.map(x=>x.path),...a.additions.map(x=>x.path),...a.reorder?[a.reorder.path]:[]].map(x=>yn(x)?`${x} is code \u2014 the structural pass moves instructions only`:xn(x,h.root)?u.has(x)?f(x)?`creates ${x}, which exists`:null:f(x)?null:`${x} is not a file the analysis read`:`${x} is outside the agent's root ${h.root}`).find(Boolean);if(S){i(a.title,S);continue}let b=[];for(let x of a.evidence.slice(0,4)){let E=f(x.path)?oe(h.files[x.path],x.excerpt):null;E==null?n.push(`${p}: evidence at ${x.path} is not a quote from the file \u2014 dropped`):b.push({...x,line:E})}a.evidence.length>4&&n.push(`${p}: ${a.evidence.length} evidence sites, kept the first 4`),a.evidence=b;let y=new Set(a.files.filter(x=>x.action!=="delete").map(x=>x.path)),k=null;for(let x of a.segments){let E=h.files[x.path];if(E==null){k=`segment ${x.path}:${x.startLine}-${x.endLine} is in a file that does not exist yet`;break}let C=X(E).length;if(x.startLine<1||x.endLine<x.startLine||x.endLine>C){k=`segment ${x.path}:${x.startLine}-${x.endLine} is outside the file`;break}let $=go(ce(e,E),x.startLine,x.endLine);if($.snapped&&(n.push(`${p}: segment ${x.path}:${x.startLine}-${x.endLine} cut an atomic block; widened to ${$.start}-${$.end}`),x.startLine=$.start,x.endLine=$.end),(x.disposition==="move"||x.disposition==="remove_superseded")&&!y.has(x.to)&&x.to!==x.path){k=`segment ${x.path}:${x.startLine}-${x.endLine} sends lines to ${x.to}, which is not a destination`;break}if((x.disposition==="fold_into"||x.disposition==="remove_duplicate")&&!x.into){k=`segment ${x.path}:${x.startLine}-${x.endLine} is ${x.disposition} with no target`;break}if(x.into&&!f(x.into.path)&&!u.has(x.into.path)){k=`segment ${x.path}:${x.startLine}-${x.endLine} folds into ${x.into.path}, which does not exist`;break}if(x.disposition==="move"&&x.into&&a.files.find(P=>P.path===x.to)?.role!=="log"){k=`segment ${x.path}:${x.startLine}-${x.endLine} names a fold target, which only a move into a log may do`;break}if(x.disposition==="remove_superseded"&&!(x.childRef&&l.some(P=>P.ref===x.childRef))){k=`segment ${x.path}:${x.startLine}-${x.endLine} is remove_superseded but names no child`;break}}if(!k){let x=[...a.segments].sort((E,C)=>E.path.localeCompare(C.path)||E.startLine-C.startLine);for(let E=1;E<x.length;E++)if(x[E].path===x[E-1].path&&x[E].startLine<=x[E-1].endLine){k=`overlapping segments in ${x[E].path}`;break}}if(!k){let x=a.segments.filter(C=>C.disposition!=="move"),E=a.segments.find(C=>C.into&&x.some($=>$.path===C.into.path&&C.into.line>=$.startLine&&C.into.line<=$.endLine));E&&(k=`segment ${E.path}:${E.startLine}-${E.endLine} folds into a line this proposal removes`)}if(k){i(a.title,k);continue}let w=new Set,O=wo(a),v=(x,E)=>E!=null&&a.segments.some(C=>C.path===x&&E>=C.startLine&&E<=C.endLine);if(l=l.filter(x=>{if(w.has(x.ref))return!1;w.add(x.ref);let E=/^f(\d+)$/.exec(x.ref),C=E?t.findings[Number(E[1])-1]:void 0;if(!C)return n.push(`${p}: child ${x.ref} is not a finding of this analysis \u2014 link dropped`),!1;let $=C.siteRepo===h.key;return $&&C.site&&v(C.site.path,C.site.line)||$&&C.otherSites.some(P=>v(P.path,P.line))||O.some(P=>x.how.includes(P))?!0:(n.push(`${p}: child ${x.ref} ("${C.title}") is not in a segment and its how names no destination \u2014 link dropped`),!1)}),l.length===0&&a.evidence.length<2){i(a.title,a.evidence.length===0?"no evidence quote is in the files":"no children and fewer than two evidence sites");continue}if(a.reorder){let x=a.reorder,E=ce(e,h.files[x.path]??"").filter($=>$.kind==="list_item"&&$.level===0&&/^\s*\d+[.)]/.test($.text)&&$.start>=x.startLine&&$.end<=x.endLine),C=x.steps.map($=>$.from).sort(($,R)=>$-R);if(C.length!==E.length||C.some(($,R)=>$!==R+1)){i(a.title,`reorder of ${x.path}:${x.startLine}-${x.endLine} is not a permutation of its ${E.length} steps`);continue}}let _=s.find(x=>Gs(x.body).some(E=>d.includes(E)));if(_){i(a.title,`shares ${Gs(_.body).find(x=>d.includes(x))} with "${_.body.title}"`);continue}let I=l.map(x=>t.findings[Number(x.ref.slice(1))-1].severity);a.severity=I.length?I.reduce((x,E)=>fn.indexOf(E)>fn.indexOf(x)?E:x):fn[Math.min(fn.indexOf(a.severity),1)],s.push({repo:h.key,body:a,children:l})}for(let r of s.splice(Ht))i(r.body.title,`over the cap of ${Ht} proposals`);return{kept:s,warnings:n,dropped:o}}var Yd=/\b(never|always|must|don't|do not)\b/i,Zd=/^\s*(?:[-*+]|\d+[.)])?\s*(run|use|open|check|ask|call|write|read|add|remove|keep|make|ensure|avoid|stop|send|create|delete|update|set|follow|wait|confirm|verify|prefer|push|merge|commit|deploy|test|review)\b/i;function ef(e){return Yd.test(e)||Zd.test(e)}function Xs(e,t){let n=[...e.segments.map(o=>o.path),...e.segments.flatMap(o=>o.into?[o.into.path]:[]),...e.files.map(o=>o.path),...e.additions.map(o=>o.path),...e.reorder?[e.reorder.path]:[],...e.toolMoves.flatMap(o=>[o.fromPath,o.toPath].filter(s=>!!s))];return[...new Set(n.filter(o=>t[o]!=null))].sort()}function tf(e,t){let n=ir("",t),o=ft(e.path,t)??e.path,s=o.startsWith(".claude/")?".claude/":"",i=Ee(e.frontmatter?.name||al(o).replace(/\.md$/i,""));switch(e.role){case"skill":return`${n}${s}skills/${i}/SKILL.md`;case"system prompt":return`${n}${s}agents/${i}.md`;case"template":return`${n}templates/${al(o)}`;default:return`${n}${o}, with a pointer from a file the agent always loads`}}function ll(e,t){let n=Qd(e,t),o=[...n.warnings],s=[...n.dropped],i=[],r=(c,a)=>{o.push(`proposal "${c}": ${a} \u2014 dropped`),s.push({title:c,reason:a})};for(let c of n.kept){let{body:a,repo:l}=c,p=t.repos.find(w=>w.key===l),d=Ke(p.root),u=t.fragments.find(w=>w.repoKey===l)?.fragment;if(!u){r(a.title,`no architecture graph for ${l}`);continue}let g=w=>`${l}#${w}`,h=w=>u.nodes.find(O=>O.id===At(w,l))??null;for(let w of a.toolMoves)w.fromPath=dn(u,a,w.fromUnit,l),w.toPath=dn(u,a,w.toUnit,l);let f=a.toolMoves.find(w=>!w.fromPath||!w.toPath);if(f){r(a.title,`cannot find the tool list of ${f.fromPath?f.toUnit:f.fromUnit}`);continue}let m=il(e,{repoKey:l,root:d,agentConfigurations:p.agentConfigurations,files:rl(e,p.files,a,u,l,o)}),S=null;for(let w of a.files){if(w.action==="delete"||w.loadMode==="never"||w.action!=="create"&&w.action!=="edit")continue;let O=m.nodes.find(_=>_.files.some(I=>I.path===w.path));if(!O){S=`The agent would not load ${w.path} \u2014 put it at ${tf(w,d)}.`;break}let v=At(w.unit,l);if(v&&O.id!==v){S=`${w.path} would attach to ${g(O.id)}, not ${w.unit}`;break}if(!v&&u.nodes.some(_=>_.id===O.id)&&w.role==="system prompt"){S=`${w.path} would not be a new sub-agent`;break}if(!v&&w.role==="system prompt"&&!m.edges.some(_=>_.kind==="delegates"&&_.to===O.id)){S=`${w.path} would not be a sub-agent anyone delegates to`;break}}if(!S)for(let w of a.toolMoves){let O=At(w.toUnit,l)??m.nodes.find(_=>_.files.some(I=>a.files.some(x=>x.unit===w.toUnit&&x.path===I.path)))?.id;if(!m.nodes.find(_=>_.id===O)?.tools.some(_=>_.label===w.tool)){S=`${w.tool} would not reach ${w.toUnit}`;break}}if(S){r(a.title,S);continue}for(let w of a.files){if(w.action==="delete"||w.action==="shrink")continue;let O=w.action==="create"?null:ko(t.loadModes,l,w.path),v=el(w,{existing:O,node:h(w.unit),files:p.files,prompt:a.files.find(_=>_.unit===w.unit&&_.role==="system prompt")});if(v!=="unknown"&&v!==w.loadMode){S=`declares ${w.path} ${w.loadMode}, but the conventions make it ${v}`;break}if(w.loadMode==="on_demand"&&w.role==="skill"&&w.action==="create"){let _=w.frontmatter?.description??"";if(!_||_.length>1024){S=`skill ${w.path} needs a description of at most 1024 characters to be triggered`;break}}if(w.loadMode==="on_demand"&&w.role!=="skill"&&!O){let _=I=>ko(t.loadModes,l,I)?.mode==="always"&&ko(t.loadModes,l,I)?.unit===w.unit||a.files.some(x=>x.path===I&&x.unit===w.unit&&x.loadMode==="always");if(!a.additions.some(I=>I.kind==="pointer"&&I.text.includes(w.path)&&_(I.path))){S=`${w.path} is read only on demand, but nothing the agent always loads points to it`;break}}}if(!S)for(let w of a.segments){let O=a.files.find(I=>I.path===w.to);if(w.disposition!=="move"||O?.loadMode!=="never"||w.into)continue;let _=(p.files[w.path]??"").split(`
57
- `).slice(w.startLine-1,w.endLine).findIndex(ef);if(_>=0){S=`moves a rule into a file the agent never reads (${w.path}:${w.startLine+_} \u2192 ${w.to})`;break}}if(S){r(a.title,S);continue}let y=Qc(e,{body:a,ticked:wo(a),contents:p.files,childSites:[]}).outputs.map(w=>({path:w.path,bytes:Buffer.byteLength(w.content,"utf8")})).find(w=>w.bytes>Wo);if(y){r(a.title,`would assemble ${y.path} at ${y.bytes} bytes (cap ${Wo})`);continue}let k=Object.fromEntries(Xs(a,p.files).map(w=>[w,zd("sha256").update(p.files[w]).digest("hex")]));i.push({...c,sourceHashes:k,delta:So(u,m,a,l)})}return{structures:i,warnings:o,dropped:s}}var nf=["low","medium","high","critical"];function yo(e){return e.map((t,n)=>`f${n+1}`)}function Ws(e,t){let n=yo(e),o=e.flatMap((i,r)=>[i.site,...i.otherSites??[]].some(c=>c&&Tt(c.path,t))?[]:[{...i,ref:n[r]}]),s=e.map(i=>({title:i.title,severity:nf.includes(i.severity)?i.severity:"medium",siteRepo:i.siteRepo,site:i.site,otherSites:(i.otherSites??[]).map(r=>({path:r.path,line:r.line}))}));return{items:o,candidates:s,refs:n}}var Vs=A.generate;function of(e,t){return{template:"derive-structure",model:Vs,answerFormat:"structures",limits:{effort:"high"},inputs:{maxStructures:String(Ht),openStructuresData:t.open,findingsData:t.findings,graph:JSON.stringify(t.graph,null,2),loadModesData:t.loadModes,files:Object.entries(t.files).map(([n,o])=>{let s=/\.mdx?$/i.test(n);return{path:n,text:Re(o),markdown:s,outline:s?ce(e,o).map(i=>({...i,text:i.text.slice(0,60)})):[]}})}}}async function pl(e,t,n){return(await F(t,of(e,n),e)).structures}async function xo(e,t,n,o={}){let s=o.enforce??_s;if(t.length===0)return{kept:[],dropped:[],flagged:[],ran:!0};let i=await xc(e,t.map(l=>({subKind:l.body.subKind,title:l.body.title,cause:l.body.cause,evidence:l.body.evidence,resolves:l.children.map(p=>n[Number(p.ref.slice(1))-1]?.title??p.ref)})),{scopeRuleId:o.scopeRuleId??"structure",maxTokens:o.maxTokens});if(!i)return{kept:t,dropped:[],flagged:[],ran:!1};let r=[],c=[],a=[];return t.forEach((l,p)=>{let d=i.get(p);if(d.inScope){r.push(l);return}let u={title:l.body.title,reason:d.reason};s?c.push(u):(a.push(u),r.push(l))}),{kept:r,dropped:c,flagged:a,ran:!0}}function sf(e,t,n,o=15e4){let s=new Set(t.flatMap(l=>[l.site?.path,...(l.otherSites??[]).map(p=>p.path)]).filter(l=>!!l)),i=l=>e.has(l)?0:s.has(l)?1:2,r=Object.keys(n).sort((l,p)=>i(l)-i(p)||n[l].length-n[p].length||(l<p?-1:1)),c={},a=0;for(let l of r)i(l)>0&&a+n[l].length>o||(c[l]=e.has(l)?de(n[l]):n[l],a+=c[l].length);return c}function dl(e,t,n,o,s={}){return o?sf(V(t),n,ee(s,Qt(e),t)):Xn(e,t,void 0,new Set,void 0,{...s,CF_READING_PRIORITY:"0"}).files}function fl(e){let t=yo(e);return e.flatMap((n,o)=>{if(n.category!=="contradiction"&&n.category!=="ambiguity")return[];let s=n.site?[{...n.site,repo:n.siteRepo,excerpt:n.excerpt}]:[];return s.push(...(n.otherSites??[]).map(i=>({...i,repo:i.repo??n.siteRepo}))),[{id:t[o],title:n.title,category:n.category,sites:s}]})}function ul(e,t,n){return t===void 0?[]:e.filter(o=>o.sites.length>0&&o.sites.every(s=>s.repo===t&&n.some(i=>i.path===s.path&&(!i.span||s.line!==null&&s.line>=i.span.from&&s.line<=i.span.to))))}import{posix as rf}from"node:path";function bo(e,t,n=1){let o=ce(e,t).filter(s=>s.kind==="heading");return o.map((s,i)=>({heading:s.text,startLine:s.start+n-1,endLine:(o.slice(i+1).find(r=>r.level<=s.level)?.start??X(t).length+1)+n-2,level:s.level}))}function ml(e,t,n=1){let o=bo(e,t,n);return o.length?[{startLine:n,endLine:o[1]?o[1].startLine-1:o[0].endLine},...o.filter(s=>/^#{1,6}\s+(Identity|Mission|Boundaries)\b/i.test(s.heading)).map(({startLine:s,endLine:i})=>({startLine:s,endLine:i}))]:[{startLine:n,endLine:n+X(t).length-1}]}function hl(e,t,n){let o=new Map;for(let s of t.files.filter(i=>i.role==="tools")){let i=n[s.path]??"",r=[];try{r=Ft(i).tools}catch{}let c=[...r,...Ir(i).tools,...$r(i).tools];for(let a of c)o.has(a.name)||o.set(a.name,{name:a.name,description:a.description?.trim()||"no description",declaredIn:s.path})}return t.tools.map(s=>o.get(s.label)??{name:s.label,description:"no description",declaredIn:t.files.find(i=>i.role==="mcp")?.path??""})}function zs(e){let t=new Set(e.edges.filter(n=>n.kind==="delegates").map(n=>n.to));return e.nodes.filter(n=>n.kind==="agent"&&!t.has(n.id))}function wl(e,t){let n=new Set([t]);for(let o of n)for(let s of e.edges)s.kind==="delegates"&&s.from===o&&n.add(s.to);return n}function kl(e,t){if(!zs(e).some(o=>o.id===t))return null;let n=wl(e,t);return{nodes:e.nodes.filter(o=>n.has(o.id)),edges:e.edges.filter(o=>n.has(o.from)&&n.has(o.to)),warnings:e.warnings}}function Sl(e,t){return zs(t.graph).map(n=>cf(e,{...t,unitId:n.id}))}function gl(e,t,n){let o=t.files.filter(s=>s.role==="skill");return o.map(s=>{if(!s.label)throw new Error(`The graph did not name the skill at ${s.path}.`);let i=s.label,r=t.files.filter(p=>p.role==="reference"&&(p.label===i||p.path.startsWith(rf.dirname(s.path)+"/"))).map(p=>p.path).sort(),c=[s.path,...r],a=c.map(p=>n[p]??"").join(`
58
- `),l=p=>p.filter(d=>Ye(a,{name:d,key:d,paths:[],bytes:0}));return{name:i,path:s.path,description:kt(e,s.path,n[s.path]??"").description?.trim()||"no description",bytes:c.reduce((p,d)=>p+Buffer.byteLength(n[d]??""),0),references:r,tools:l(t.tools.map(p=>p.label)),skills:l(o.flatMap(p=>p.label&&p.label!==i?[p.label]:[]))}}).sort((s,i)=>s.name.localeCompare(i.name))}function af(e,t,n){return t.files.filter(o=>o.role==="system prompt"||o.role==="soul").map(o=>{let s=n[o.path]??"",i=o.span?.from??1,r=o.span?.to??X(s).length,c=X(s).slice(i-1,r).join(`
59
- `);return{path:o.path,text:c,startLine:i,endLine:r,numberedText:Re(s).split(`
60
- `).slice(i-1,r).join(`
61
- `),sections:bo(e,c,i)}})}function cf(e,t){let{graph:n,files:o}=t,s=zs(n);if(!t.unitId&&s.length!==1)throw new Error("Select one top-level agent for the split inventory.");let i=t.unitId?s.find(l=>l.id===t.unitId):s[0];if(!i)throw new Error(`No top-level agent named ${t.unitId} is available.`);let r=wl(n,i.id),c=gl(e,i,o),a=af(e,i,o);return{agent:{id:i.id,name:i.label,description:i.desc,tools:i.tools.map(l=>l.label)},skills:c,tools:hl(e,i,o).map(l=>({...l,skills:c.filter(p=>p.tools.includes(l.name)).map(p=>p.name)})),subAgents:n.nodes.filter(l=>l.id!==i.id&&r.has(l.id)&&l.kind==="agent").map(l=>({id:l.id,name:l.label,description:l.desc,tools:l.tools.map(p=>p.label),skills:gl(e,l,o)})),prompt:a[0]??null,prompts:a,knowledge:i.files.filter(l=>l.role==="knowledge").map(l=>({path:l.path,sections:bo(e,o[l.path]??"")})),open:t.open.map(l=>({...l,frozen:[...l.frozen],declined:[...l.declined],files:[...l.files]})),findings:ul(t.findings??[],t.repoKey,n.nodes.filter(l=>r.has(l.id)).flatMap(l=>l.files))}}function Oo(e,t){return(t.repos??[]).flatMap((n,o)=>{let s=Yo(t,o);return Sl(e,{graph:s,files:n.files??{},open:t.openStructures??[],repoKey:n.key,findings:t.splitFindingsPriced?t.shapeFindings??[]:[]}).filter(i=>!He(i.agent)).map(i=>({repo:n,graph:s,inventory:i}))})}function yl(e){return e.findings.length>0||e.skills.length>=8||e.subAgents.length>=3||e.tools.length>=20}var Js=A.generate;function xl(e){return{template:"derive-shape",model:Js,answerFormat:"shape",limits:{effort:"high"},inputs:{inventoryData:e,maxSubAgents:String(Ut),minSkills:String(Ln)}}}function Rv(e,t){return e.tools.analysisRequest(xl(t))}function bl(e,t){return e.tools.validateShapeInput(t),F(e,xl(t))}function Ol(e,t,n){let o=n.nodes.filter(l=>l.kind==="agent"),s=new Set(n.edges.filter(l=>l.kind==="delegates").map(l=>l.to)),i=o.filter(l=>!s.has(l.id)),r=i[0];if(i.length!==1||r.id!==t.agent.id||r.label!==t.agent.name)return`${t.agent.name} would not remain the one original entry point.`;let c=new Map(e.frontDoor.skills.map(l=>[l,r.id])),a=new Set(t.subAgents.flatMap(l=>l.skills.map(p=>JSON.stringify([l.id,p.name,p.path]))));for(let l of e.subAgents){let p=o.filter(d=>d.label===l.name);if(p.length!==1||n.edges.filter(d=>d.kind==="delegates"&&d.from===r.id&&d.to===p[0].id).length!==1)return`sub-agent ${l.name} would not load once with a handoff from ${t.agent.name}.`;for(let d of l.skills)c.set(d,p[0].id)}for(let l of t.skills){let p=o.flatMap(u=>u.files.filter(g=>g.role==="skill"&&g.label===l.name&&!a.has(JSON.stringify([u.id,g.label,g.path]))).map(g=>({node:u.id,path:g.path}))),d=e.frontDoor.skills.includes(l.name);if(p.length!==1||p[0].node!==c.get(l.name)||(d?p[0].path!==l.path:p[0].path===l.path))return`skill ${l.name} would not load once on its intended owner at its ${d?"original":"new"} path.`}for(let l of t.subAgents){let p=o.find(d=>d.id===l.id&&d.label===l.name);if(!p||!s.has(p.id))return`existing sub-agent ${l.name} would no longer load.`;for(let d of l.skills)if(!p.files.some(u=>u.role==="skill"&&u.label===d.name&&u.path===d.path))return`existing skill ${d.name} would no longer load on ${l.name}.`}return null}function vl(e,t,n,o,s){let i=h=>({section:null,error:h}),{path:r,startLine:c,endLine:a}=t;if(!(n==="prompt"?o.prompts:o.knowledge).find(h=>h.path===r)||s[r]===void 0)return i(`${n} section ${r} is not an available ${n} file.`);let p=n==="prompt"?o.prompts.find(h=>h.path===r):null,d=p?.startLine??1,u=p?.endLine??X(s[r]).length;if(!Number.isInteger(c)||!Number.isInteger(a)||c<d||a<c||a>u)return i(`${n} section ${r}:${c}-${a} is outside its file or prompt span.`);let g=go(ce(e,s[r]),c,a);return g.start<d||g.end>u?i(`${n} section ${r} snaps outside its prompt span.`):p&&ml(e,p.text,p.startLine).some(h=>h.startLine<=g.end&&h.endLine>=g.start)?i(`prompt section ${r}:${g.start}-${g.end} would move the agent's identity.`):{section:{path:r,startLine:g.start,endLine:g.end},error:null}}var vo=(e,t)=>e.path===t.path&&e.startLine<=t.endLine&&t.startLine<=e.endLine,N=e=>({shape:null,warnings:[`Split check discarded: ${e}`]});function _l(e,t,n){if(t.decision==="keep")return{shape:null,warnings:[]};if(t.decision!=="split")return N(`unknown decision "${t.decision}".`);if(t.subAgents.length<1||t.subAgents.length>Ut)return N(`a split needs 1\u2013${Ut} sub-agents.`);let{inventory:o,files:s}=n,i=new Set(o.skills.map(f=>f.name)),r=new Set(o.tools.map(f=>f.name)),c=new Set,a=f=>i.has(f)?c.has(f)?`skill ${f} is placed twice.`:(c.add(f),null):`unknown skill ${f}.`;for(let f of t.frontDoor.skills){let m=a(f);if(m)return N(m)}let l=new Set(o.subAgents.map(f=>Ee(f.name))),p=new Set,d=[],u=new Set,g=[];for(let f of t.subAgents){if(f.skills.length<Ln&&f.promptSections.length===0)return N(`sub-agent ${f.name} needs at least one skill or one prompt section.`);for(let O of f.skills){let v=a(O);if(v)return N(v)}for(let O of f.tools)if(!r.has(O))return N(`unknown tool ${O} on ${f.name}.`);if(!f.handoff.trim())return N(`sub-agent ${f.name} has an empty handoff.`);if(!f.description.trim()||f.description.length>1024)return N(`sub-agent ${f.name} needs a description of 1\u20131024 characters.`);if(!/[a-z0-9]/i.test(f.name))return N(`sub-agent "${f.name}" needs a usable name.`);let m=Ee(f.name);if(l.has(m))return N(`the existing sub-agent ${m} already uses that name.`);let S=m,b=2;for(;p.has(S)||l.has(S);)S=`${m}-${b++}`;p.add(S);for(let O of f.resolves)if(!o.findings.some(v=>v.id===O))return N(`unknown finding ${O} on sub-agent ${S}.`);let y=[];for(let O of f.evidence){let v=s[O.path]===void 0?null:oe(s[O.path],O.excerpt);if(v===null)return N(`evidence quote was not found in ${O.path}: "${O.excerpt}".`);y.push({...O,line:v}),u.add(`${O.path}:${v}:${O.excerpt.replace(/\s+/g," ").trim()}`)}let k=[],w=[];for(let[O,v,_]of[["prompt",f.promptSections,k],["knowledge",f.knowledgeSections,w]])for(let I of v){let x=vl(e,I,O,o,s);if(x.error)return N(x.error);let E=x.section;if(O==="prompt"){if(d.some(C=>vo(E,C)))return N(`prompt section ${E.path}:${E.startLine}-${E.endLine} is placed twice.`);d.push(E)}else if(w.some(C=>vo(E,C)))return N(`knowledge section ${E.path}:${E.startLine}-${E.endLine} is listed twice on ${S}.`);_.push(E)}g.push({...f,name:S,skills:[...f.skills],tools:[...f.tools],resolves:[...new Set(f.resolves)],evidence:y,handoff:f.handoff.trim(),promptSections:k,knowledgeSections:w,movedKnowledge:[],neededKnowledge:[]})}for(let f of i)if(!c.has(f))return N(`skill ${f} is missing from the split.`);if(u.size<2)return N("a split needs at least two distinct evidence quotes.");for(let f of g)for(let m of f.knowledgeSections)(n.retainedKnowledge===void 0||n.retainedKnowledge.some(b=>vo(b,m))||g.some(b=>b!==f&&b.knowledgeSections.some(y=>vo(y,m)))?f.neededKnowledge:f.movedKnowledge).push(m);let h={...t,decision:"split",frontDoor:{...t.frontDoor,skills:[...t.frontDoor.skills]},subAgents:g};if(!n.afterGraph){let f=g[0].skills[0]?`moved skill ${g[0].skills[0]}`:`sub-agent ${g[0].name}`;return N(`cannot prove that ${f} would load without a loadability checker.`)}try{let f=Ol(h,o,n.afterGraph(h));return f?N(f):{shape:h,warnings:[]}}catch(f){return N(`loadability check failed: ${f instanceof Error?f.message:String(f)}.`)}}import{posix as Cl}from"node:path";function un(e,t,n){let o=n.scoped[0]??"",s=o.slice(0,o.length-n.stripRoot(o).length),i=n.scoped.some(a=>n.stripRoot(a).startsWith(`${kr}/`)),r=`${s}${Sr[i?0:1]}`,c=`${r}/${e}/skills/${t}`;return{agent:`${r}/${e}.md`,folder:c,skill:`${c}/SKILL.md`}}function _o(e,t,n,o){return e.subAgents.flatMap(s=>s.skills.flatMap(i=>{let r=t.skills.find(l=>l.name===i),c=Cl.dirname(r.path),a=un(s.name,Cl.basename(c),o).folder;return Object.keys(n).filter(l=>l.startsWith(`${c}/`)).sort().map(l=>({name:i,owner:s.name,from:l,to:a+l.slice(c.length),fromFolder:c,toFolder:a}))}))}import{posix as lf}from"node:path";var Qs=e=>e.replace(/(?<!\.)[.!]$/,""),pf=e=>[...e.matchAll(/\bmcp__[^\s`"'()[\]{},;:<>]+/g)].map(t=>Qs(t[0])),El=(e,t)=>Ye(e,{name:t,key:t,paths:[],bytes:0});function Il(e,t,n,o){if(e.CF_SPLIT_HELPER_TOOLS==="0")return[...t.tools];if(t.noTools)return[];let s=n.skills.filter(f=>t.skills.includes(f.name)),i=Object.keys(o).filter(f=>s.some(m=>f.startsWith(lf.dirname(m.path)+"/"))),r=[...t.promptSections,...t.movedKnowledge,...t.neededKnowledge],c=[...i.map(f=>o[f]),...r.map(f=>X(o[f.path]??"").slice(f.startLine-1,f.endLine).join(`
62
- `))].join(`
63
- `),a=new Set([...n.agent.tools,...n.tools.map(f=>f.name)].filter(f=>!/[*?]/.test(f))),l=pf(c);if(l.some(f=>!a.has(f))||t.tools.some(f=>!a.has(f)))return null;let p=new Set(l.map(f=>f.slice(0,f.lastIndexOf("__")+2))),d=f=>{if(a.has(f))return f;let m=[...a].filter(y=>y.endsWith(`__${f}`)),S=m.filter(y=>p.has(y.slice(0,y.lastIndexOf("__")+2))),b=m.length===1?m:S;return b.length===1?b[0]:null},u=new Set(l);for(let f of a)El(c,f)&&u.add(f);let g=new Set([...a].flatMap(f=>/^mcp__.+__(.+)$/.exec(f)?.[1]??[]));for(let f of g){if(!El(c,f))continue;let m=d(f);if(!m)return null;u.add(m)}let h=[...[...c.matchAll(/`([^`\n]+)`/g)].flatMap(f=>{let m=f[1];return a.has(m)?[m]:/^[\w*?./-]+(?:\([^)]*\))?$/.test(m)?[m.replace(/\([^)]*\)$/,"")]:[]}),...[...c.matchAll(/(?:[*?]+[\w-]+|[\w-]+[*?])[\w*?.-]*/g)].map(f=>f[0]),...[...c.matchAll(/\b[a-z][\w*?.-]*_[\w*?.-]+/gi)].map(f=>Qs(f[0])),...[...c.matchAll(/\b(?:call|invoke)\s+(?:the\s+)?(?:tool\s+)?`?([\w*?.-]+)/gi)].map(f=>Qs(f[1]))];for(let f of h){let m=d(f);if(!m)return null;u.add(m)}return t.tools.length?[...t.tools]:u.size?[...u].sort():null}function Co(e,t,n,o,s={}){let i={...o},r=be(e,Object.keys(o),s.root);for(let c of t.subAgents){let a=Il(e,c,n,o);i[un(c.name,"",r).agent]=["---",`name: ${c.name}`,`description: ${lt(c.description.replace(/\s+/g," "))}`,...a===null?[]:[`tools: ${a.length?wt(e,a):"[]"}`],"---",c.job].join(`
64
- `)}for(let c of _o(t,n,o,r))delete i[c.from],i[c.to]=o[c.from];return i}function df(e,t){return e.split?e.additions.some(n=>n.kind==="handoff"&&n.path===t)?"grown":e.segments.some(n=>n.path===t)||e.split.subAgents.some(n=>[...n.movedKnowledge,...n.neededKnowledge].some(o=>o.path===t))?"unchanged":null:null}function $l(e,t){return e.split?{...t,files:t.files.flatMap(n=>{if(n.change!=="shrunk"&&n.change!=="grown")return[n];let o=df(e,n.path);return o==="grown"?[{...n,change:o}]:o==="unchanged"?[]:[n]})}:t}import{createHash as uf}from"node:crypto";var Pl=e=>e.replace(/\s+/g," ").trim().replace(/[.!?]+$/,"").replace(/^./,t=>t.toLowerCase());function Rl(e,t){let n=e.frontDoor.name??t,o=e.subAgents.map(s=>Pl(ff(s)));return{title:o.length===0?`Keep ${n} together`:o.length===1?`Move ${n}'s ${o[0]} into its own helper`:`Split ${n} into a main agent and ${o.length} helpers: ${o.join(", ")}`,summary:`${n} keeps its main job: ${Pl(e.frontDoor.job)}.${o.length?` Each helper gets its own skills and rules, and ${n} hands work to it.`:""}`}}function ff(e){return(e.name.replace(/[-_]/g," ").replace(/\s+/g," ").trim()||e.job.trim()).replace(/^./,n=>n.toUpperCase())}function Al(e,t,n,o,s){if(!n.prompt)throw new Error("An original prompt is needed for each handoff.");let i=n.prompt,{files:r,root:c}=s,a=be(e,Object.keys(r),c),l=_o(t,n,r,a),p=k=>un(k,"",a).agent,d=n.agent.name.replace(/^./,k=>k.toUpperCase()),u=new Map;for(let k of t.subAgents)for(let w of k.resolves){let O=u.get(w)??[];O.push(`${k.name} in ${p(k.name)}`),u.set(w,O)}let g=t.subAgents.flatMap(k=>[...k.promptSections,...k.movedKnowledge].map(w=>({...w,to:p(k.name),disposition:"move",into:null,childRef:null,heading:null,reason:k.job}))),h={...ho(t),subKind:"extract_subagent",kind:"reliability",severity:"medium",...Rl({frontDoor:{...t.frontDoor,name:d},subAgents:t.subAgents},d),cause:t.reason,evidence:t.subAgents.flatMap(k=>k.evidence.map(w=>({...w}))),files:t.subAgents.map(k=>{let w=k.tools.filter(O=>!n.tools.find(v=>v.name===O).skills.some(v=>t.frontDoor.skills.includes(v)));return{path:p(k.name),action:"create",role:"system prompt",unit:`new:${k.name}`,loadMode:"always",loadVia:null,purpose:`${k.job}${w.length?` ${w.join(", ")}: only the sub-agent uses this.`:""}`,frontmatter:{name:k.name,description:k.description,tools:[...k.tools]}}}),segments:g,additions:t.subAgents.map(k=>({path:i.path,kind:"handoff",text:k.handoff,heading:null})),reorder:null,toolMoves:[],split:{...c?{root:c}:{},frontDoor:{name:d,job:t.frontDoor.job,skills:[...t.frontDoor.skills]},subAgents:t.subAgents.map(k=>({name:k.name,job:k.job,description:k.description,path:p(k.name),handoff:k.handoff,tools:[...k.tools],...k.noTools===void 0?{}:{noTools:k.noTools},resolves:[...k.resolves],skills:k.skills.map(w=>{let O=n.skills.find(_=>_.name===w),v=l.find(_=>_.from===O.path);if(!v)throw new Error(`The skill definition at ${O.path} is unavailable for its move.`);return{name:w,from:O.path,to:v.to}}),movedKnowledge:k.movedKnowledge.map(w=>({...w})),neededKnowledge:k.neededKnowledge.map(w=>({...w}))}))}},f=s.agentConfigurations?{agentConfigurations:s.agentConfigurations}:{},m=s.graphs?.before??at(e,sn(e,{repoKey:o,files:r,root:c,...f})).fragment,S=s.graphs?.after??at(e,sn(e,{repoKey:o,files:Co(e,t,n,r,{root:c}),root:c,...f})).fragment,b=$l(h,So(m,S,h,o));for(let k of l){let w=S.nodes.find(v=>v.files.some(_=>_.path===p(k.owner)));if(!w)throw new Error(`The sub-agent at ${p(k.owner)} is missing from the discovered graph.`);let O=m.nodes.flatMap(v=>v.files).find(v=>v.path===k.from)?.role??(yn(k.from)?"code":"reference");b.files.push({path:k.to,fromPath:k.from,role:O,node:`${o}#${w.id}`,fromNode:`${o}#${n.agent.id}`,change:"moved",segments:0})}let y=[...new Set([...Xs(h,r),...l.map(k=>k.from),...t.subAgents.flatMap(k=>k.neededKnowledge.map(w=>w.path))])].sort();return{repo:o,body:h,children:[...u].map(([k,w])=>({ref:k,how:`Isolating ${w.join(" and ")} gives each job its own rules.`})),delta:b,sourceHashes:Object.fromEntries(y.map(k=>[k,uf("sha256").update(r[k]).digest("hex")]))}}var mf=1e3,b_=hi+4e3;function Ml(e,t,n={}){return xo(e,t,[],{...n,scopeRuleId:"split",maxTokens:mf})}function Fl(e,t,n){return t>0?[H(e,"derive-shape","shape",Js,t,n)]:[]}async function Tl({state:e,settings:t},n,o,s){let i=[...e.warnings??[]],r=[...e.structuresRaw??[]],c=!1,a=!1;function l(p){return M("derive-shape",p,d=>o.rethrow(d)),n.progress.log({level:"warn",code:"analysis.shape_check_failed"}),{structures:[],warnings:["The split check failed; other results were kept and earlier splits were left unchanged."],failed:!0}}try{if(J(t,e).splitCheck&&e.splitCheckPriced){a=!0;let p=Oo(t,e).filter(({inventory:u})=>yl(u)),d=await K(p,4,async({repo:u,graph:g,inventory:h})=>{n.progress.assertHeld(),n.progress.signal?.throwIfAborted();try{let f=u.files??{},m=await bl(o,h),S=g,b=_l(t,m,{inventory:h,files:f,afterGraph(O){return S=rn(t,{...u,files:Co(t,O,h,f,{root:u.root})},po(t,e),e.modelReader??!1,e.projectAgents,s,{verdicts:e.newVerdicts??[],failed:[]}).fragment,kl(S,h.agent.id)??S}});if(!b.shape)return{structures:[],warnings:b.warnings,failed:b.warnings.length>0};let y=Al(t,b.shape,h,u.key,{files:f,root:u.root,graphs:{before:g,after:S}}),k=await Ml(o,[y]),w=k.ran?k.flagged.length?["The split proposal was flagged by the scope check, but kept because that verdict is not enforced."]:[]:["The split scope check did not run; the proposal was kept unchecked."];return k.ran||n.progress.log({level:"warn",code:"analysis.shape_check_failed"}),{structures:k.kept,warnings:w,failed:!k.ran}}catch(f){return l(f)}},o);for(let u of d)r.push(...u.structures),i.push(...u.warnings),c||=u.failed}}catch(p){i.push(...l(p).warnings),c=!0}return{next:"persisting",clear:[],set:{structuresRaw:r,warnings:i,splitCheckRan:a,splitPassFailed:c}}}var Ys=A.mechanical,Nl=20;function hf(e,t){if(!t)return null;for(let[n,o]of Object.entries(e).sort(([s],[i])=>s.localeCompare(i))){let s=oe(o,t);if(s!=null)return{path:n,line:s}}return null}function gf(e){return e.children.map(t=>{if(!t.excerpt?.trim())return{childId:t.id,kind:"keep",reason:"no_excerpt"};let n=e.filesByRepo[t.repo];if(!n)return{childId:t.id,kind:"keep",reason:"repo_not_analysed"};let o=hf(n,t.excerpt);if(!o)return{childId:t.id,kind:"gone"};let s=e.newFindings.find(i=>i.category===t.category&&i.repo===t.repo&&i.sites.some(r=>r.path===o.path&&r.line!=null&&Math.abs(r.line-o.line)<=Nl));return s?{childId:t.id,kind:"match",matchIndex:s.index,location:o}:{childId:t.id,kind:"ask",location:o}})}function wf(e,t){return e.split(`
65
- `).map((n,o)=>({text:n,line:o+1})).filter(n=>Math.abs(n.line-t)<=Nl).map(n=>`${n.line} ${n.text}`).join(`
66
- `)}function kf(e){return{template:"structure-recheck",model:Ys,answerFormat:"recheck",inputs:e}}async function Ll(e,t,n){let o=[],s=[],i=`C-${t.change.seq}`;for(let r of gf(t)){n?.assertHeld(),n?.signal?.throwIfAborted();let c=t.children.find(l=>l.id===r.childId),a={childId:c.id,changeId:t.change.id};if(r.kind==="match"){s.push({...a,outcome:"present",note:`Still present in ${r.location.path} after ${i}`,matchIndex:r.matchIndex,location:r.location});continue}if(r.kind==="keep"&&r.reason==="repo_not_analysed"){o.push(`F-${c.seq}'s repository was not analysed after ${i}; it stays open.`),s.push({...a,outcome:"not_checked",note:`Not re-checked after ${i} \u2014 its repository was not analysed`,matchIndex:null,location:null});continue}if(r.kind==="keep"){o.push(`F-${c.seq} has no excerpt to re-check after ${i}; it stays open.`),s.push({...a,outcome:"present",note:`Still present after ${i}`,matchIndex:null,location:null});continue}if(r.kind==="gone"){s.push({...a,outcome:"resolved",note:`Resolved by ${i}`,matchIndex:null,location:null});continue}try{let l=await F(e,kf({childId:c.id,seq:c.seq,title:c.title,cause:c.cause,path:r.location.path,line:r.location.line,window:wf(t.filesByRepo[c.repo][r.location.path],r.location.line)}));l.verdict==="resolved"?s.push({...a,outcome:"resolved",note:`Resolved by ${i}: ${l.reason.slice(0,200)}`,matchIndex:null,location:null}):s.push({...a,outcome:"present",note:`Still present in ${r.location.path} after ${i}`,matchIndex:null,location:r.location})}catch(l){M("structure-recheck",l,p=>e.rethrow(p)),n?.log({level:"warn",code:"analysis.structure_recheck_failed"}),o.push(`F-${c.seq} could not be re-checked after ${i}; it stays open.`),s.push({...a,outcome:"present",note:`Still present in ${r.location.path} after ${i}`,matchIndex:null,location:r.location})}}return{outcomes:s,warnings:o}}function jl(e,t){return e>0?[H({},"structure-recheck","recheck",Ys,e,t)]:[]}async function Dl(e,t,n,o){let s=Object.fromEntries((e.repos??[]).map(a=>[a.key,a.files??{}])),i={outcomes:[],changeIds:[],warnings:[]},r;try{r=await t.context.loadPendingRechecks?.()??[]}catch(a){return n.rethrow(a),t.progress.log({level:"warn",code:"analysis.structure_recheck_load_failed"}),i}let c=o.map((a,l)=>({index:l,category:a.category??null,repo:a.siteRepo,sites:[a.site,...a.otherSites].filter(p=>!!p)}));for(let a of r){if(t.progress.assertHeld(),t.progress.signal?.throwIfAborted(),!s[a.repo])continue;let l=await Ll(n,{change:a.change,children:a.children,filesByRepo:s,newFindings:c},t.progress);i.outcomes.push(...l.outcomes),i.warnings.push(...l.warnings),l.outcomes.some(p=>p.outcome==="not_checked")||i.changeIds.push(a.change.id)}return i}function uC(e,t,n={}){let o=_e,s=ie(e).splitCheck?n.structureState?Oo(e,n.structureState).length:t.length:0;return[H(e,"derive-structure","structures",Vs,1,o),H(e,"scope-items","structureScope",It,1+s,o),...jl(n.pendingRecheckChildren??0,o),...Fl(e,s,o)]}var mC=async(e,t)=>{if(t.progress.assertHeld(),t.progress.signal?.throwIfAborted(),!t.model)throw new se("llm","llm gone mid-job");let n=await Le(t),o=ke(t.model,n,t.progress.rethrow,t.progress.signal);if(e.state.structurePhase==="shape"){let k=e.execution.forLocal?"":n.modelReaderPrompt();return Tl(e,t,o,k)}let{state:s,settings:i}=e,r=s.repos??[],c=te(s),a=Ue(c),{findings:l}=Pe(xe(s.findingsRaw??[]),Te(s),De(s),i),p=Rr(a),d=c.map(({repoKey:k,fragment:w})=>{let O=w.nodes.filter(_=>!He(_)),v=new Set(O.map(_=>_.id));return{repoKey:k,fragment:{...w,nodes:O,edges:w.edges.filter(_=>v.has(_.from)&&v.has(_.to))}}}),u=r.map(k=>({...k,files:Object.fromEntries(Object.entries(k.files??{}).filter(([w])=>!Tt(w,p)))})),g=Ue(d),h=Ws(l,p),f=[...s.warnings??[]],m=c.flatMap(({repoKey:k,fragment:w},O)=>{let v=tl(i,{repoKey:k,root:r[O]?.root,files:r[O]?.files??{},fragment:w});return f.push(...v.warnings),v.entries}),S;try{let w=a.nodes.some(He)&&!g.nodes.some(x=>x.kind==="agent")?[]:await pl(i,o,{graph:g,files:dl(u,je(d),l,J(i,s).multiPass,i),findings:h.items,loadModes:m.filter(x=>!Tt(x.path,p)),open:s.openStructures??[]}),O=ll(i,{raw:w,findings:h.candidates,repos:u,fragments:d,loadModes:m});f.push(...O.warnings);let v=await xo(o,O.structures,l),_=v.dropped.length,I=v.flagged.length;_&&f.push(`${_} structural proposal${_===1?"":"s"} removed as out of scope`),I&&f.push(`${I} structural proposal${I===1?"":"s"} flagged by the scope check's model pass, but kept \u2014 that verdict is not enforced`),v.ran||f.push("the structural scope check did not run; proposals were kept unchecked"),S={structuresRaw:v.kept,structurePassFailed:!1,structureScopeCheck:{ran:v.ran},structureStats:{raw:w.length,flagged:I,droppedByValidation:O.dropped}}}catch(k){M("derive-structure",k,w=>o.rethrow(w)),t.progress.log({level:"warn",code:"analysis.structure_pass_failed"}),f.push("The structural pass failed; no structural proposals this time."),S={structuresRaw:[],structurePassFailed:!0}}let b=await Dl(s,t,o,l);f.push(...b.warnings);let y=J(i,s).splitCheck&&s.splitCheckPriced;return{next:y?"structuring":"persisting",clear:[],set:{...S,loadModes:m,warnings:f,rechecks:b.outcomes,recheckedChangeIds:b.changeIds,...y?{structurePhase:"shape"}:{},...y&&s.splitFindingsPriced?{shapeFindings:fl(l)}:{}}}};export{Et as a,io as b,za as c,on as d,Wa as e,ae as f,Va as g,pc as h,bs as i,co as j,at as k,_a as l,no as m,Qp as n,nn as o,Ea as p,Yg as q,Fa as r,od as s,ja as t,rt as u,Ba as v,Mw as w,qa as x,Ka as y,Fw as z,Ha as A,sd as B,Tw as C,Nw as D,rd as E,Lw as F,Xa as G,uc as H,Ul as I,Yo as J,vi as K,te as L,Te as M,ne as N,ie as O,J as P,lo as Q,po as R,JS as S,QS as T,YS as U,ZS as V,rn as W,Yi as X,jn as Y,j as Z,z as _,Tf as $,Je as aa,Qf as ba,$t as ca,Pt as da,_c as ea,Oc as fa,Oy as ga,Rb as ha,Oo as ia,ke as ja,Js as ka,Rv as la,mf as ma,b_ as na,kh as oa,Uy as pa,Gy as qa,Nx as ra,Lx as sa,Dc as ta,Bc as ua,Qb as va,Yb as wa,uC as xa,mC as ya};