@counterfact-labs/cli 0.2.4 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/README.md +7 -1
  2. package/bundle/client-release.json +1 -1
  3. package/dist/adapters/anthropic.js +11 -2
  4. package/dist/adapters/completion.js +3 -0
  5. package/dist/adapters/durable-write.js +9 -2
  6. package/dist/adapters/files.js +25 -13
  7. package/dist/adapters/git-ignore.js +28 -14
  8. package/dist/adapters/git.js +1 -1
  9. package/dist/adapters/gitignore-output.js +41 -0
  10. package/dist/adapters/models.js +1 -6
  11. package/dist/adapters/output-paths.js +5 -2
  12. package/dist/adapters/public-instructions.js +1 -1
  13. package/dist/adapters/relay-plan.js +2 -5
  14. package/dist/adapters/release.js +2 -1
  15. package/dist/adapters/repository-files.js +164 -4
  16. package/dist/adapters/repository-root.js +18 -2
  17. package/dist/adapters/results.js +8 -4
  18. package/dist/adapters/settings.js +26 -1
  19. package/dist/adapters/snapshot.js +86 -15
  20. package/dist/analysis-core/analysis/finding-audience-switch.js +1 -0
  21. package/dist/analysis-core/analysis/schemas.js +1 -1
  22. package/dist/analysis-core/analysis/source-notes/types.js +1 -1
  23. package/dist/analysis-core/chunks/377MLK4M.js +21 -0
  24. package/dist/analysis-core/chunks/{D6AWHLRI.js → 3JWEFCTJ.js} +1 -1
  25. package/dist/analysis-core/chunks/{3227KXHF.js → 4H23CSUM.js} +1 -1
  26. package/dist/analysis-core/chunks/5DGPLXYB.js +1 -0
  27. package/dist/analysis-core/chunks/5TATKWLG.js +1 -0
  28. package/dist/analysis-core/chunks/{EH3QQ3T4.js → 6B2HILSY.js} +1 -1
  29. package/dist/analysis-core/chunks/6QY5BV5B.js +14 -0
  30. package/dist/analysis-core/chunks/6U2IR4XB.js +1 -0
  31. package/dist/analysis-core/chunks/A7WJJMRY.js +1 -0
  32. package/dist/analysis-core/chunks/C6X5GDG4.js +1 -0
  33. package/dist/analysis-core/chunks/DLPVYWHZ.js +1 -0
  34. package/dist/analysis-core/chunks/DZZBQDGO.js +1 -0
  35. package/dist/analysis-core/chunks/F3R4J3ND.js +1 -0
  36. package/dist/analysis-core/chunks/FOKDE64Y.js +1 -0
  37. package/dist/analysis-core/chunks/K2GNDX3W.js +1 -0
  38. package/dist/analysis-core/chunks/KTNA2KTN.js +7 -0
  39. package/dist/analysis-core/chunks/KWECQJ6X.js +1 -0
  40. package/dist/analysis-core/chunks/{SL27GMEN.js → M6HYSTQD.js} +1 -1
  41. package/dist/analysis-core/chunks/{ZAA44GPI.js → N7U5N42V.js} +1 -1
  42. package/dist/analysis-core/chunks/NIOS7U6C.js +41 -0
  43. package/dist/analysis-core/chunks/{QMIXCT62.js → OPMA32A6.js} +1 -1
  44. package/dist/analysis-core/chunks/PECX3OXB.js +1 -0
  45. package/dist/analysis-core/chunks/QFY6A3MS.js +66 -0
  46. package/dist/analysis-core/chunks/SKVEBOGA.js +1 -0
  47. package/dist/analysis-core/chunks/{T66VDFXF.js → STI4JE7L.js} +1 -1
  48. package/dist/analysis-core/chunks/SVMEWGD3.js +1 -0
  49. package/dist/analysis-core/chunks/X7WZAA7S.js +1 -0
  50. package/dist/analysis-core/chunks/YDBO7P4X.js +1 -0
  51. package/dist/analysis-core/chunks/YUY436SM.js +1 -0
  52. package/dist/analysis-core/chunks/ZTOVBAG7.js +1 -0
  53. package/dist/analysis-core/contracts/file-safety.js +1 -0
  54. package/dist/analysis-core/contracts/relay-analysis.js +1 -0
  55. package/dist/analysis-core/contracts/requests.js +1 -1
  56. package/dist/analysis-core/conventions/analysis-fit.js +1 -1
  57. package/dist/analysis-core/conventions/file-admission.js +1 -1
  58. package/dist/analysis-core/data/finding-types.js +1 -1
  59. package/dist/analysis-core/findings/sites.js +1 -0
  60. package/dist/analysis-core/github/repo-key.js +1 -1
  61. package/dist/analysis-core/import/outside-loader-sources.js +1 -1
  62. package/dist/analysis-core/index.js +3 -3
  63. package/dist/analysis-core/llm/output-limit.js +1 -1
  64. package/dist/analysis-core/llm/types.js +1 -0
  65. package/dist/analysis-core/requests/answer-formats.js +1 -1
  66. package/dist/analysis-core/requests/headline-request.js +1 -1
  67. package/dist/analysis-core/requests/local-plan.js +1 -1
  68. package/dist/analysis-core/requests/registry.js +1 -1
  69. package/dist/analysis-core/requests/template-version.js +1 -1
  70. package/dist/analysis-core/requests/tools.js +1 -1
  71. package/dist/analysis-core/settings.js +1 -1
  72. package/dist/analysis-core/stages/engine-entry.js +1 -0
  73. package/dist/analysis-core/stages/execution-ports.js +1 -0
  74. package/dist/bundle/seal/deserialise.js +9 -1
  75. package/dist/bundle/seal/engine.js +76 -0
  76. package/dist/bundle/seal/freeze.js +9 -0
  77. package/dist/bundle/seal/metadata.js +3 -0
  78. package/dist/bundle/seal/open-engine.js +26 -0
  79. package/dist/bundle/seal/open.js +2 -8
  80. package/dist/cli/agent-folder.js +3 -3
  81. package/dist/cli/commands/analyze.js +39 -6
  82. package/dist/cli/commands/balance.js +6 -3
  83. package/dist/cli/commands/finding.js +9 -3
  84. package/dist/cli/context.js +6 -1
  85. package/dist/cli/finding-display.js +39 -0
  86. package/dist/cli/finding-lookup.js +92 -0
  87. package/dist/cli/finding-settings.js +5 -0
  88. package/dist/cli/fix-requests.js +42 -0
  89. package/dist/cli/intake-payload.js +19 -11
  90. package/dist/cli/main.js +9 -4
  91. package/dist/cli/mcp-failure.js +8 -0
  92. package/dist/cli/mcp.js +125 -37
  93. package/dist/cli/relay-check.js +47 -14
  94. package/dist/cli/relay-preparation.js +28 -5
  95. package/dist/cli/result-check.js +68 -0
  96. package/dist/cli/sign-in.js +61 -2
  97. package/dist/cli/summary.js +10 -3
  98. package/dist/contract/agent-choice.js +15 -0
  99. package/dist/contract/agent-proposal.js +38 -0
  100. package/dist/contract/attestation.js +106 -0
  101. package/dist/contract/cli-api-messages.js +2 -0
  102. package/dist/contract/cli-refusals.js +69 -1
  103. package/dist/contract/cli-version.js +1 -1
  104. package/dist/contract/console.js +21 -16
  105. package/dist/contract/email-sign-in-messages.js +4 -0
  106. package/dist/contract/engine.js +44 -0
  107. package/dist/contract/findings.js +28 -0
  108. package/dist/contract/fix-requests.js +30 -0
  109. package/dist/contract/messages.js +6 -94
  110. package/dist/contract/public-report.js +1 -0
  111. package/dist/contract/runtime-environment.js +12 -1
  112. package/dist/core/analysis/run-to-end.js +7 -52
  113. package/dist/gatekeeper/attestation.js +1 -1
  114. package/dist/gatekeeper/channel-binding.js +15 -0
  115. package/dist/gatekeeper/cli-api.js +28 -9
  116. package/dist/gatekeeper/connection-exchange.js +17 -12
  117. package/dist/gatekeeper/console.js +31 -17
  118. package/dist/gatekeeper/model.js +2 -1
  119. package/dist/gatekeeper/production-attestation.js +23 -17
  120. package/dist/gatekeeper/trust/policy.js +4 -1
  121. package/dist/gatekeeper/trust/schema.js +4 -0
  122. package/dist/transport/kms.js +25 -0
  123. package/package.json +4 -3
  124. package/dist/adapters/quality.js +0 -6
  125. package/dist/adapters/report.js +0 -29
  126. package/dist/analysis-core/analysis/analysis-flags.js +0 -1
  127. package/dist/analysis-core/analysis/finding-quality/config.js +0 -1
  128. package/dist/analysis-core/analysis/finding-quality/policy.js +0 -1
  129. package/dist/analysis-core/analysis/headlines/attachment.js +0 -1
  130. package/dist/analysis-core/analysis/headlines/input.js +0 -1
  131. package/dist/analysis-core/chunks/3CKW5JIF.js +0 -1
  132. package/dist/analysis-core/chunks/6YCABS5T.js +0 -1
  133. package/dist/analysis-core/chunks/7OYIBWX3.js +0 -1
  134. package/dist/analysis-core/chunks/DRGDIIFA.js +0 -1
  135. package/dist/analysis-core/chunks/FTODBFQW.js +0 -1
  136. package/dist/analysis-core/chunks/HPIAEQHE.js +0 -37
  137. package/dist/analysis-core/chunks/IVDDV6CU.js +0 -14
  138. package/dist/analysis-core/chunks/JF4GYMOZ.js +0 -1
  139. package/dist/analysis-core/chunks/K5OTWBTT.js +0 -22
  140. package/dist/analysis-core/chunks/MXXNED6N.js +0 -7
  141. package/dist/analysis-core/chunks/NCWEOJVJ.js +0 -6
  142. package/dist/analysis-core/chunks/O652FQQH.js +0 -1
  143. package/dist/analysis-core/chunks/OFBJNHC6.js +0 -1
  144. package/dist/analysis-core/chunks/QV2EOS7U.js +0 -1
  145. package/dist/analysis-core/chunks/STZOC7LN.js +0 -1
  146. package/dist/analysis-core/chunks/T2SAP7OV.js +0 -60
  147. package/dist/analysis-core/chunks/T5TREZCQ.js +0 -1
  148. package/dist/analysis-core/chunks/TDNTU4TF.js +0 -1
  149. package/dist/analysis-core/chunks/U5HOEVPE.js +0 -1
  150. package/dist/analysis-core/chunks/UEWL3GMQ.js +0 -1
  151. package/dist/analysis-core/chunks/V7BFUTM7.js +0 -1
  152. package/dist/core/analysis/finding-quality/config.js +0 -4
  153. package/dist/core/analysis/structural-run.js +0 -16
@@ -0,0 +1,66 @@
1
+ import{a as bi}from"./OPMA32A6.js";import{a as zt,b as Jt,c as es}from"./N7U5N42V.js";import{b as wi,c as D,l as xi}from"./6QY5BV5B.js";import{a as zo,b as Wt,c as Jo,d as Qo,e as Yo,f as Zo,g as Vt,h as Kn,i as Si}from"./K2GNDX3W.js";import{a as yi}from"./QDYMR6KS.js";import{a as _i}from"./4F6ZIHXU.js";import{c as vi}from"./M6HYSTQD.js";import{a as A,d as Oi}from"./4H23CSUM.js";import{a as Ci}from"./VGYWI4X2.js";import{b as Ve}from"./57M4OQJM.js";import{a as Ei}from"./J4AXGE5W.js";import{b as V,c as Me,d as fe,e as jn,f as Fe,j as Bt,k as oi,p as Uo,q as Xe}from"./FOKDE64Y.js";import{a as Kt}from"./IBCFGUHI.js";import{a as si}from"./DZZBQDGO.js";import{A as mi,B as Vo,C as Xt,D as hi,E as Te,F as he,G as gi,H as Bn,J as ki,a as Oe,b as qt,c as ri,d as ii,e as ue,g as Go,h as Ht,i as Xo,j as me,k as Dn,l as gt,m as We,n as ai,o as ci,p as li,q as Ut,r as kt,s as wt,t as Gt,u as Wo,v as di,w as yt,x as pi,y as fi,z as ui}from"./377MLK4M.js";import{a as q}from"./326F4XNG.js";import{a as St}from"./ZTOVBAG7.js";import{a as te,c as ht,d as Nn,f as Ln,l as ei,m as ti,n as ni}from"./KTNA2KTN.js";import{a as Sn,b as L,c as yn}from"./2PSNOSJ2.js";import{a as qe,e as ir}from"./KU5DINLW.js";import{A as Z,Aa as Do,Ab as jr,Bb as Dr,C as mr,Ca as Or,Cb as Br,Db as Kr,Ea as vr,Eb as qr,Gb as An,Hb as Hr,I as jo,Ia as xe,Ib as Ge,Jb as Ur,Ka as _r,Kb as Gr,L as hr,Lb as Fn,M as gr,Mb as Xr,N as kr,Nb as Wr,Oa as Bo,Ob as qo,P as Lt,Pa as Ko,Q as wr,Qb as Vr,R as Sr,Rb as mt,Sb as Re,Ta as jt,Ua as T,Vb as K,Wb as Ae,Z as yr,_a as Cr,ba as Pn,d as pt,f as Lo,fb as Er,g as Nt,h as vn,hb as ee,i as ft,jb as Ir,kb as $r,l as Cn,m as En,mb as Pr,n as In,nb as Rr,o as $n,ob as Ar,pb as Mr,ra as W,rb as Fr,sb as ut,tb as Rn,ub as Tr,va as br,vb as Ue,wb as Nr,xb as Dt,zb as Lr}from"./NIOS7U6C.js";import{b as Mn}from"./74FPPPIG.js";import{c as fr,d as ur}from"./5TATKWLG.js";import{a as Tn}from"./PYKAERZZ.js";import{e as xr}from"./YUY436SM.js";import{a as dr,b as He,c as Pe,d as _n,e as pr}from"./C6X5GDG4.js";import{e as Qr,g as Yr,h as Zr,i as M}from"./5DGPLXYB.js";import{d as Jr,e as be}from"./6U2IR4XB.js";import{c as ie}from"./MJGB25S5.js";import{b as Tt}from"./6B2HILSY.js";import{c as On,f as pe}from"./JKWTHRUR.js";import{b as re,c as de}from"./3GUKUEEJ.js";import{c as Ho,e as zr}from"./KWECQJ6X.js";import{b as xn,c as ar,d as cr,f as $e,g as bn,h as lr}from"./FSLWD2PE.js";var Jl={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},Ql=Object.freeze(Object.keys(Jl));function ts(e,t){return Tt.parse(e.mapped?.[t])}function Ii(e,t){return Tt.safeParse(e.mapped?.[t])}function ne(e){return(e.mapped??[]).map((t,n)=>({repoKey:e.repos?.[n]?.key??`repo-${n}`,fragment:ts(e,n)}))}function Ne(e){return Object.fromEntries((e.repos??[]).map(t=>[t.key,new Set(Object.keys(t.files??{}))]))}function oe(e){return Object.fromEntries(Ql.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*Pi(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)}],d=!0;for(let p of r.slice(1)){let u=n.text.indexOf(p,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]))){d=!1;break}a=u+p.length,l.push({from:s(u),to:s(a-1)})}d&&(yield l)}}function se(e,t){for(let n of Pi(e,t))return n[0].from;return null}function Ri(e,t,n){if(!Number.isInteger(n)||n<1)return null;for(let o of Pi(e,t)){if(o[0].from===n)return o;if(o[0].from>n)break}return null}function ge(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 d=Object.hasOwn(t,a)?t[a]:void 0;d===l?n.push(...c.sources.filter(p=>p.sourcePath===a)):o.push({path:a,reason:d===void 0?"Source file was not read.":l.startsWith(d)?"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 ns(e,t,n,o){let s=t.filter(l=>Object.hasOwn(l.files,e.path)&&l.sources.some(d=>d.unitKey===n&&d.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=Ri(c,i,r);return a?s.some(l=>{let d=l.files[e.path];return typeof d!="string"||!d.startsWith(c)?!1:l.sources.some(p=>p.unitKey!==n||p.sourcePath!==e.path?!1:p.kind==="prompt"?a.every(u=>u.from>=p.sourceLine&&u.to<=(p.sourceEndLine??p.sourceLine)):a.some(u=>u.from<=p.sourceLine&&u.to>=p.sourceLine))}):!1}var Yl={"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 Ai(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:p})=>p)),r=s.paths.filter(p=>!i.has(p)),c=new Set(r),a=(p,u)=>{t.skipped.some(g=>g.path===p&&g.reason===u)||t.skipped.push({path:p,reason:u})};s.skipped.forEach(({path:p,reason:u})=>{let g=Yl[u];g&&a(p,g)});let l=(p,u)=>{let{sourcePath:g,sourceLine:h}=p;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):p.name.trim()?(t.files[g]=f,t.sources.some(m=>m.kind===u&&m.name===p.name&&m.sourcePath===g&&m.sourceLine===h)||t.sources.push({...p,unitKey:n.unitKey,kind:u}),!0):(a(g,"Source name is missing."),!1)},d=new Set((n.toolsJson??[]).map(({name:p})=>p));for(let p of n.codeInputsJson.tools){if(!d.has(p.name)||!l(p,"tool"))continue;let u=ii([p.name],r,o,r);u.length||a(p.sourcePath,`Tool implementation was not admitted or found: ${p.name}.`);for(let g of u){let h=ri([p.name],[g],o);h.length||a(g,"Tool implementation is missing."),h.forEach(f=>l(f,"tool"))}}if(n.codeInputsJson.contextInputs.forEach(p=>l(p,"context")),n.site){let{path:p,span:u}=n.site,g=Object.hasOwn(o,p)?o[p]:void 0;Number.isInteger(u.to)&&u.to>=u.from&&(typeof g!="string"||u.to<=g.split(`
4
+ `).length)?l({name:n.unitKey,sourcePath:p,sourceLine:u.from,sourceEndLine:u.to},"prompt"):a(p,"Prompt source lines are missing or stale.")}return t}function qn(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=>ge(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:Ae(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,Hn=40,ke=6e4,we=16e3,bt=8e4,B=4e3,Zl=1536,os=8192,ss=1024;function Le(e){return os+e*Zl+ss}function ze(e,t="legacy"){return t==="whole-file"?ke+bt+B*e+4e3*4:ke+(we+B)*e+4e3*2}function qf(e,t,n,o,s="legacy"){if(!n||t===0)return null;let i=Math.ceil(t/j),r=1+z,c=Le(t)+(os+ss)*(i-1),a={template:o};if(s==="whole-file"){let d=Math.floor(t/j),p=t%j,u=pe(ze(j,s))*d+(p?pe(ze(p,s)):0);return ie(e,a,"Double-check findings",ve,u*r,c*r)}let l=ke*i+(we+B)*t;return ie(e,a,"Double-check findings",ve,(pe(l)+4e3*i)*r,c*r)}function ae(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 Un(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??ae(e).findingCheck,sourceNotes:n.sourceNotes??!1}:{...ae(e),sourceNotes:!1}}var _e=8e5;function H(e,t,n,o,s,i,r){return{routeId:wi(t),templateId:t,answerFormatId:Zr(t,n,e),model:o,calls:s,maxInputBytes:i,maxInputTokens:2e5,maxOutputTokens:r??vi({model:o})}}function Gn(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 is(e){return Gn({},e.prompts).prompts}function rs(e,t,{enabled:n,prompts:o}){return Yr(e,t,n?o[e]:void 0)}function Je(e,t,n){return rs(e,t,{enabled:n?.switches.enabled??!1,prompts:Gn({},n?.prompts).prompts})}function Mi(e,t,n,o){let s=ae(e),i=Gn(e),{fullContext:r}=i,c=rs("derive",e,i),a=rs("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)),Le(j)):null}}function Fi(e){if(e&&typeof e=="object"){for(let t of Object.values(e))Fi(t);Object.freeze(e)}return e}function su(e,t,n={}){let{enabled:o,fullContext:s,precisionRules:i,prompts:r}=Gn(e),c=S=>o&&e[S]==="1",a=c("CF_FINDING_SECOND_OPINION"),l=c("CF_FINDING_RANKING"),d=o&&e.CF_FINDING_SEMANTIC_MATCHING!=="0",p=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(On,S)?On[S]:void 0,y=On[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 Fi({ruleVersion:o?"precision-v1":"legacy",switches:{enabled:o,fullContext:s,precisionRules:i,secondOpinion:a,ranking:l,semanticMatching:d,codeInputs:p,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:ke,siteBytes:we,findingTextBytes:B,siteWindowLines:Hn,citedBatchBytes:s?8e4:0,passBytes:15e4,passContextBytes:6e4,maxPasses:4,passFindings:h==="request-18"?18:mt,totalFindings:24,deriveOutputTokens:Oi,checkBatchSize:j,checkOutputTokens:Le(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:d?"meaning-v1":"legacy",codeInputScopeVersion:p?"owned-code-v1":"legacy",secondOpinionProvider:m,diagnostics:u})}function Ot(e,t,n={}){let o=is(e);e.switches.enabled&&t.assertPromptVersions([{...e.prompts.derive,name:o.derive},{...e.prompts.check,name:o.check}],n)}function Se(e,t,n,o){return{tools:t,rethrow(s){n?.(s),de(s)},available:e!==null,settleStartedOnError:e?.settleStartedOnError,withRetry:s=>Se(e?Ci(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):_i(e,t,s,i)}}}function F(e,t,n={},o={}){return e.execute(Qr(t,n,o.maxInputBytes),o)}async function je(e){return e.requestTools?e.requestTools():bi(yi(await e.instructions()))}var en=2,ed=10*6e4;function Xn(e,t,n){return new re("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 Ti(e){let{data:t,plan:n,progress:o}=e,s=n.passes.length,i={...t.passResults};if(!t.passResults){for(let d=0;d<(t.passCursor??0);d++)i[d]={findings:t.passFindings?.[d],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((d,p)=>p).filter(d=>i[d]?.findings===void 0);for(let d of c)if((i[d]?.retries??0)>en)throw Xn(d,s,i[d].retries);let a;if(await q(e.onePartPerStep?c.slice(0,1):c,e.concurrency,async d=>{if(!(o.elapsedMs()>=ed||a))try{let p=i[d]?.retries??0;for(;!a;){o.assertHeld(),o.signal?.throwIfAborted();let u;try{u=await e.run(d,p)}catch(h){if(o.rethrow?.(h),de(h),e.forLocal)throw h instanceof re?h:new Error("A findings reading pass failed; no completed report was written.");p++,o.log({level:"warn",code:"analysis.pass_failed",counts:{part:d+1,parts:s,retries:p}});let f={retries:p};if(await o.checkpoint({},{index:d,result:f}),i[d]=f,p>en)throw Xn(d,s,p);if(e.onePartPerStep)break;await new Promise(m=>setTimeout(m,1e3));continue}let g={findings:u,retries:p};await o.checkpoint({},{index:d,result:g}),i[d]=g;break}}catch(p){a??=p}}),a)throw a;let l=n.passes.every((d,p)=>i[p]?.findings!==void 0);return{...r,...l?{passCursor:s,passRetries:0,passFindings:n.passes.map((d,p)=>i[p].findings)}:{}}}var Wn={critical:0,high:1,medium:2,low:3},Li=e=>(e.line??0)>0,Vn=e=>Li(e)&&!!e.excerpt?.trim();function as(e,t){let n=r=>{let c=Fn(r);return[c.filter(Vn).length,c.filter(Li).length,Number(!!r.site&&Vn({...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 cs(e,t){let n=Vr(t.map(o=>o.audience));return n===e.audience?e:{...e,audience:n}}function Ni(e,t,n={}){let o=[];if(n.semanticMatching)for(let s of e){let i=Gr({previous:o.map((r,c)=>qo(r,String(c))),current:s.map((r,c)=>qo(r,String(c))),enabled:!0});for(let r of i.matches){let c=Number(r.previousId),a=s[Number(r.currentId)];o[c]=cs(as(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=>Xr(r,s));i<0?o.push(s):o[i]=cs(as(s,o[i])?s:o[i],[o[i],s])}return o.sort((s,i)=>Wn[s.severity]-Wn[i.severity]).slice(0,t)}function td(e,t){let n=Wn[e.severity]-Wn[t.severity];if(n)return n<0;let o=Fn(e).filter(Vn).length-Fn(t).filter(Vn).length;return o?o>0:as(e,t)}function ji(e,t={}){let n=t.deferCap?1/0:24;if(t.dedupe===!1)return e.length<2?e[0]??[]:Ni(e,n,t);let o=e.length<2?e[0]??[]:Ni(e,1/0,t),s=o.map((a,l)=>o.map((d,p)=>l===p||Wr(a,d))),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 p=0;p<l.length;p++)for(let u=0;u<o.length;u++)i.has(u)||!s[l[p]][u]||(i.add(u),l.push(u));if(!l.every(p=>l.every(u=>s[p][u]))){for(let p of l)r.set(p,o[p]);continue}let d=l.reduce((p,u)=>td(o[u],o[p])?u:p,a);r.set(a,cs(o[d],l.map(p=>o[p])))}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 Di=e=>e.CF_FINDING_DEDUPE!=="0";var nd=15*6e4;async function Bi(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 re("llm","The reading part's model call timed out.");c(a),n.abort(a)},nd)});try{return await Promise.race([Promise.resolve().then(()=>t(o)),i])}finally{clearTimeout(s)}}var od=A.generate;function sd(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:Ae(i)}))},answerFormat:"findings",model:n?.switches.enabled?n.models.derive:od,limits:{effort:"high"}}}async function Ki(e,t,n){n.qualityConfig&&Ot(n.qualityConfig,t.tools,e);let o=await F(t,sd(e,n),e);return Jr(o)}function qi(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,d)=>d!==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 tn(e){return Object.fromEntries(Qe(e).all.map(t=>[t.path,t.text]))}function rd(e,t){return Object.keys(t).filter(n=>xe(n,{nested:!0})).sort().map(n=>{let o=n.split("/").slice(-2,-1)[0]??"skill",{name:s,description:i}=wt(e,`${o}.md`,t[n]);return{name:s,description:i??""}})}function Hi(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??[]:[]],d=Fe(e,{paths:Object.keys(o),files:o,graph:s,repos:r}),p=Xe(l.map(h=>({repo:"",path:h,text:c.has(h)?fe(o[h]):o[h]})),c,Me(s),d),u=Object.fromEntries(p.map(h=>[h.path,h.text])),g=i?.enabled?ge(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:rd(e,o)}}:{},read:p.map(h=>h.path),own:a,...g?{codeSources:g.sources,codeSkipped:g.skipped}:{}}}function Ui(e){return e.find(t=>!t.notFoundAt)??e[0]??null}function id(e,t){return t.startsWith(`${e}#`)?t.slice(e.length+1):null}function ad(e,t){let n=[];for(let o of e?.nodes??[]){let s=o.kind==="agent"?t?id(t,o.id):o.id.slice(o.id.indexOf("#")+1):null;s!==null&&n.push({node:o,unitId:s})}return n}function cd(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 Gi(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)&&ns({path:e.file,line:e.line??null,excerpt:e.excerpt},[{...n,sources:[o]}],o.unitKey,n.files)).map(o=>o.unitKey)))]}function ld(e,t,n,o){let s=Gi(e,n);if(s.length)return{unitKey:s.length===1?s[0]:null,anchors:s,code:!0};let i=e.file?ad(t,e.repo??"").filter(r=>r.node.files?.some(c=>c.path===e.file)):[];return{unitKey:i.length?cd(i,e.file,e.line).unitId:o,anchors:s,code:!1}}function zn(e,t,n,o){let s=e[0];if(!s)return!0;let i=n.map(d=>({...d,input:{...d.input,files:Object.fromEntries(Object.entries(d.input.files).filter(([p,u])=>typeof d.files[p]=="string"&&u.startsWith(d.files[p])))}})),r=d=>i.filter(p=>!d.repo||!p.repo||p.repo===d.repo),c=r(s),a=pd(s,t,c.map(d=>d.input),o,{savedRepoPaths:!0});if(!a.unitKey&&!a.code)return!0;let l=a.unitKey?[a.unitKey]:a.anchors;return e.every(d=>{let p=r(d).filter(g=>!s.repo||!g.repo||g.repo===s.repo),u=a.unitKey?[]:Gi(d,p.map(g=>g.input));return l.every(g=>(!u.length||u.includes(g))&&p.filter(h=>h.unitKey===g).every(h=>ns({path:d.file??"",line:d.line??null,excerpt:d.excerpt??null},[h.input],g,h.files)))})}function Xi(e,t,n=!1){let o=n?ur:fr,s=t?e.filter(i=>i.repoPath&&o(i.repoPath)===t):[];return{rows:s,unitRows:s.filter(i=>i.unitKey)}}function dd(e,t,n={}){let{rows:o,unitRows:s}=Xi(e,t,n.savedRepoPaths);return Ui(s)?.id??o[0]?.id??(e.length===1?e[0].id:null)}function pd(e,t,n,o,s){let i=o?dd(o,e.repo,s):null,r=o?.find(d=>d.id===i)?.unitKey??null,{unitRows:c}=Xi(o??[],e.repo,s.savedRepoPaths);if(o&&(!e.repo||!c.length))return{unitKey:r,anchors:[],code:!1,agentId:i};let a=ld(e,t,n,r);if(!o)return{...a,agentId:null};let l=c.find(d=>d.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 ls(e,t){let n=Hi(e,t.plan,t.index,t.files,t.reading,t.codeEvidence,t.repos),o=await Bi(t.llm,r=>Ki(e,r,{graph:t.graph,...n,qualityConfig:t.qualityConfig})),s=qi(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=>zn([...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 Jn(e,t,n=15e4,o,s,i){let{all:r,shadowed:c}=Qe(e),a=ee(i,Object.fromEntries(r.map(w=>[w.path,w.text])),t),l=r.map(w=>({...w,text:a[w.path]})),d=o??V(t),p={},u=[],g={},h=0,f=Fe(i,{paths:l.map(w=>w.path),files:a,graph:t,repos:e});for(let w of Xe(l,d,Me(t),f)){if(!d.has(w.path)&&h+w.text.length>n){u.push(w.path);continue}let k=d.has(w.path)?fe(w.text):w.text;p[w.path]=k,(g[w.repo]??=[]).push(w.path),h+=k.length}let m=fd(p,d),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`]:[],...[jn(d,a)].filter(w=>!!w)],b=Bt(f,u.map(w=>({path:w,reason:"total"})));b&&S.push(b);let y=s?.enabled?ge(s.inputs.map(w=>({...w,files:ee(i,w.files,t)})),p):void 0;return{files:p,skipped:u,readByRepo:g,shadowed:c,warnings:[...S,...y?.warnings??[]],...y?{codeSources:y.sources,codeSkipped:y.skipped}:{}}}var fd=(e,t)=>Object.entries(e).reduce((n,[o,s])=>n+(t.has(o)?s.length:0),0);import{posix as zi}from"node:path";var ud=e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),md=(e,t)=>new RegExp(`(?<![\\w-])${ud(t)}(?![\\w-])`).test(e);function Ye(e,t){return t.name!==null&&md(e,t.name)||Oe(t.paths,[e],n=>n).length>0}function Wi(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 d=l.shift();d!==void 0;d=l.shift()){a.push(d);for(let p of s[d])i.has(p)||(i.add(p),l.push(p))}a.sort((d,p)=>d-p),r.push({bundles:a.map(d=>e[d]),bytes:a.reduce((d,p)=>d+e[p].bytes,0),adjacent:Object.fromEntries(a.map(d=>[e[d].key,[...s[d]].map(p=>e[p].key).sort()]))})}return r.sort((c,a)=>a.bytes-c.bytes||(c.bundles[0].key<a.bundles[0].key?-1:1))}function Vi(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 Ji(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]],d=>d),...Oe(r,[n[l]],d=>zi.relative(zi.dirname(l),d))])];return{passes:e.map(l=>{let d=new Set([...t,...l.own]),p=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 w of y.paths.filter(k=>xe(k,{nested:!0})))S.add(w);for(let y of c(m))S.add(y);for(let y of[...S].filter(w=>xe(w,{nested:!0})))for(let w of c(y))S.add(w);for(let y of S)u.add(y);let b=[...S];for(let y=0;y<b.length;y++){let w=b[y];for(let k of c(w))S.has(k)||(S.add(k),b.push(k))}for(let y of S)i.has(y)&&!d.has(y)&&p.set(y,(p.get(y)??0)+1)}let g=[...p.keys()].sort((m,S)=>Number(u.has(S))-Number(u.has(m))||p.get(S)-p.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 Qi}from"node:path";function ds(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 Yi(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,"")+"/",d=(a.files??[]).filter(h=>h.role==="skill").map(h=>jo(h.path,{nested:!0})?.folder).filter(h=>!!h),p=[...o].filter(h=>h.startsWith(l)||d.some(f=>h.startsWith(f+"/"))),u=(a.files??[]).filter(h=>h.role==="reference"||h.role==="skill").map(h=>h.path),g=i([...p,...u]);g.length&&s.push(ds(l,Qi(l),g,e))}let c=new Map;for(let a of o){let l=jo(a,{nested:!0})?.folder;l&&c.set(l,[...c.get(l)??[],a])}for(let[a,l]of c)s.push(ds(a,Qi(a),i(l),e));for(let a of o)s.push(ds(a,null,[a],e));return s.sort((a,l)=>a.key<l.key?-1:a.key>l.key?1:0)}var hd=(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 gd(e,t,n){return e.bytes<=t?[e.bundles]:Vi(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 kd(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 ea(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)?fe(E):E])),c=t-hd(i,r),a=Object.keys(r).filter(x=>!s.has(x)),l=Fe(e.settings,{paths:Object.keys(r),graph:o,files:r,repos:e.repos}),d=Me(o),p=Uo(a.filter(x=>oi(l,x)),r,d,l),u=new Set(p),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=Yi(h,o),m=x=>x.name!==null||ft(x.paths[0])&&g.has(x.paths[0]),S=f.filter(x=>!m(x)).flatMap(x=>x.paths),b=[jn(i,e.files)].filter(x=>!!x),y=[],w=[];if(c<=0){b.push("The agent's core files fill a whole reading pass, so nothing else was read");let x=Bt(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 p){let E=r[x].length,C=w.find($=>$.bytes+E<=c);!C&&E<=c&&w.length<n&&(C={own:[],bytes:0},w.push(C)),C?(C.own.push(x),C.bytes+=E):y.push(x)}let k=new Set(w);for(let x of Wi(f.filter(m),h)){let E=x.bytes>c,C;for(let $ of gd(x,c,r)){let R=$.reduce((U,Ao)=>U+Ao.bytes,0),P=$.flatMap(U=>U.paths),Y=(E&&C&&C.bytes+R<=c?C:void 0)??w.find(U=>(!E||k.has(U))&&U.bytes+R<=c);Y?(E&&(C=Y),Y.own.push(...P),Y.bytes+=R):R>c||w.length>=n?y.push(...P):(C={own:[...P],bytes:R},w.push(C))}}w.length===0&&w.push({own:[],bytes:0});let O=Uo(S,r,d,l);for(let x of O){let E=R=>R.bytes+r[x].length<=c,C=kd(x,w),$=C&&E(C)?C:w.find(E);if(!$){y.push(x);continue}$.own.push(x),$.bytes+=r[x].length}let v=w.map(x=>({own:x.own.sort()})),_=Bt(l,y.map(x=>({path:x,reason:"total"})));_&&b.push(_);let I=Ji(v,i,e.files,f,e.contextMaxBytes??6e4);return{core:i,passes:I.passes,skipped:y.sort(),warnings:b}}function De(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 ta}from"node:crypto";function na(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=Tt.safeParse(e.mapped?.[s]),a=c.success?c.data.nodes:[],l=e.projectAgents,d=l?.enabled?[...l.byRepo[i.key]??[],...l.codeByRepo?.[i.key]??[]]:[];for(let p of d){if(!p.codeInputsJson)continue;let u=p.codeInputsJson.admittedPaths!==void 0,g={paths:u?[...p.codeInputsJson.admittedPaths]:[],skipped:[]},h=[],f=w=>w.filter(k=>{let O=r[k.sourcePath],v=p.codeInputsJson?.sourceHashes?.[k.sourcePath];return u&&O!==void 0&&v&&ta("sha256").update(O).digest("hex")===v?!0:(h.push({path:k.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(p.codeInputsJson.tools),contextInputs:f(p.codeInputsJson.contextInputs)},b=a.find(w=>w.id===p.unitKey)?.files.find(w=>w.role==="system prompt"&&w.span),y=Ai({agent:{...p,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:p.unitKey,input:y})}for(let[p,u]of Object.entries(r))o[JSON.stringify([i.key,p])]=ta("sha256").update(u).digest("hex")}return{...e,findingQuality:{...t,codeEvidence:n,sourceHashes:o}}}function oa(e,t,n={}){let o=e.findingQuality;if(!o?.config.switches.codeInputs)return e;let s=(o.codeEvidence??[]).flatMap(r=>ge([{...r.input,files:ps(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 sa(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 ps(e,t,n,o){let s=Ii(e,(e.repos??[]).findIndex(i=>i.key===t));return ee(o,n,s.success?s.data:{nodes:[]})}function fs(e,t,n,o={}){return Object.fromEntries(Object.entries(n).map(([s,i])=>{let r=e.repos?.find(a=>a.key===s)?.files??{},c=ps(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)?fe(l):l]))]}))}function ra(e,t,n,o={}){if(!e.findingQuality?.config.switches.codeInputs)return;let s=fs(e,t,n,o);return e.findingQuality.codeEvidence?.map(i=>({repo:i.repo,unitKey:i.unitKey,enabled:!0,inputs:[{...i.input,files:ps(e,i.repo,i.input.files,o)}],files:s[i.repo]??{},agentRows:e.projectAgents?.agentRows}))}var us=e=>e>1?24:mt,Be=e=>us(e.inspectPlan?.passes.length??1);function wd(e,t,n){let o=Jn(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 ms(e,t,n,o){return n?ea({files:tn(e),graph:t,passMaxBytes:15e4,maxPasses:4,settings:o,repos:e}):wd(e,t,o)}function ia(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 aa(e,t){let{graph:n,llm:o}=t,s=na(t.data),i=s.findingQuality?.config,r=s.repos??[],{all:c,shadowed:a}=Qe(r),l=sa(s),d=tn(r),p=De(t.fragments),u=s.inspectPlan??ms(r,p,J(e,s).multiPass,e),g=s.passCursor??0,h=u.passes.length,f=(s.passFindings??[]).map(be),m={...s,inspectPlan:u},S=t.parallel??Un(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 Ti({data:s,plan:u,progress:{...t.progress,checkpoint:(v,_)=>t.progress.checkpoint(_?v:{...oe(m),...v},_)},concurrency:S.concurrency,onePartPerStep:!S.enabled,forLocal:t.forLocal,run:(v,_)=>ls(e,{llm:o.withRetry(_),qualityConfig:i,graph:n,plan:u,index:v,files:d,reading:p,codeEvidence:l,repos:r})})};f=u.passes.map((O,v)=>be(s.passResults[v].findings))}else if(g<h){let k;try{k=await ls(e,{llm:o.withRetry(s.passRetries??0),qualityConfig:i,graph:n,plan:u,index:g,files:d,reading:p,codeEvidence:l,repos:r})}catch(O){if(o.rethrow(O),de(O),t.forLocal)throw O instanceof re?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<en)return{done:!1,data:{...m,passRetries:v+1}};throw Xn(g,h,v+1)}if(f=[...f,k],m={...m,passCursor:g+1,passRetries:0,passFindings:f},await t.checkpoint?.(oe(m)),h>1)return{done:!1,data:m}}let b=new Set([...u.core,...u.passes.flatMap(k=>k.own)]),y={},w=Fe(e,{paths:c.map(k=>k.path),files:d,graph:p,repos:r});for(let k of Xe(c,V(p),Me(p),w))b.has(k.path)&&(y[k.repo]??=[]).push(k.path);return m.findingQuality&&i?.switches.codeInputs&&(m=oa(m,fs(m,u,y,e),e)),{done:!0,data:m,findings:ji(f,{semanticMatching:i?.switches.semanticMatching,dedupe:Di(e),deferCap:t.forLocal||xn(e)}),plan:u,readByRepo:y,shadowed:a}}var nn="Findings could not be checked a second time; all findings were kept.";function vt(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 _t(e,t){let n=vt(e,t);return n.unknownIds.length===0&&n.duplicateIds.length===0}function Ze(e,t,n,o={}){let s=e.map((y,w)=>`f${w+1}`),i=!_t(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"]:[],d=new Map(t.map(y=>[y.id,y])),p=[...n?.rejectedBatches??[],...i?[{ids:s,verdicts:t}]:[]],u=new Map,g=[],h=o.mode==="offline-simulation"&&o.shadow?.done?vt(o.shadow.verdicts,s).byId:new Map;for(let y of p)for(let w of y.verdicts)y.ids.includes(w.id)&&u.set(w.id,w);let f=e.map((y,w)=>{let k=s[w],O=i?void 0:d.get(k),v=d.get(k)??u.get(k),_=c.has(k)||v!==void 0,I=_?"":a.get(k)??"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(`${k}: ${E}`)):(x=O.verdict,E=O.reason,g.push(k)):(E="The model returned an empty reason; this finding was kept.",l.push(`${k}: ${E}`)):(E="The model returned no verdict for this finding in the accepted response; it was kept.",l.push(`${k}: ${E}`)):E=I;let C=h.get(k);return!r&&g.includes(k)&&C&&o.shadow?.coverage.answeredIds.includes(k)&&(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:k,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,w)=>{let k=f[w];return k.verdict!=="drop"?!0:(m.push({finding:y,reason:k.reason}),!1)}),b=r?[nn]: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}:{},...p.length?{rejectedBatches:p}:{},...n?.recordAcceptance?{acceptedIds:g}:{}}}import{posix as Ct}from"node:path";function Qn(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("/"),d=Ct.normalize(l?a.slice(1):Ct.join(Ct.dirname(e),a)),u=(l||c.relative||a.startsWith(".")?[d]:[d,Ct.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,Ct.relative(Ct.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=Hn,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),d=()=>i.slice(a,l).map((g,h)=>`${a+h+1} ${g}`).join(`
7
+ `),p=d();for(;l-a>1&&Buffer.byteLength(d())>n;)r-a>l-r-1?a++:l--;let u=D(d(),n);return{text:u,truncated:u!==p||t!==null&&(t<1||t>i.length)}}function tt(e,t,n=0,o="legacy",s){let i=Sd(e,t,n);return o==="whole-file"?Od(e,t,n,i,s):i}function Sd(e,t,n){let o=[],s=[],i=[],r=ke,c=t.repos.flatMap(l=>{let d=t.fragments.filter(h=>h.repoKey===l.key),p=V(De(d)),u=new Map(d.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[...p].map(h=>({repo:l,path:h,rank:g(h)<0?3:g(h)}))}).sort((l,d)=>l.rank-d.rank||l.repo.key.localeCompare(d.repo.key)||l.path.localeCompare(d.path));for(let{repo:l,path:d}of c){let p=l.files?.[d],u=p===void 0?"":p.split(`
8
+ `).map((f,m)=>`${m+1} ${f}`).join(`
9
+ `),g=D(u,r),h=p===void 0||g!==u;i.push({repo:l.key,path:d,line:1,text:g,truncated:h}),r-=Buffer.byteLength(g),h&&o.push({kind:"core-incomplete",repo:l.key,path:d})}i.length===0&&o.push({kind:"no-core"});let a=e.flatMap((l,d)=>{let p=[...l.site?[{...l.site,repo:l.siteRepo}]:[],...l.otherSites];if(bn(l.category)&&p.length<$e(l.category))return s.push({id:`f${n+d+1}`,reason:`${l.category} requires ${$e(l.category)} cited sites; ${p.length} supplied.`}),[];let u=p.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/p.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+d+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 ye=e=>Buffer.byteLength(JSON.stringify(e)),Q=e=>JSON.stringify([e.repo,e.path]),hs=e=>[...new Map(e.map(t=>[Q(t),t])).values()],yd=({repo:e,path:t})=>({repo:e,path:t});function gs(e,t,n){if(ye(n(e))<=t)return e;let o=0,s=Buffer.byteLength(e);for(;o<s;){let i=Math.ceil((o+s)/2);ye(n(D(e,i)))<=t?o=i:s=i-1}return D(e,o)}function xd(e,t){let n=[];for(let s of e)ye([...n,s].map(i=>({...i,text:""})))<=ke?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=gs(i.text,ke,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 bd(e,t){let n=t.repos.find(s=>s.key===e.repo)?.files??{},o=n[e.path];return o===void 0?[]:Qn(e.path,o,n,{includeMissing:!0,includeNamed:!0,rootRelative:!0}).filter(s=>s!==e.path).sort().map(s=>({repo:e.repo,path:s}))}function Od(e,t,n,o,s){let i=[...o.diagnostics],r=xd(o.coreFiles,i),c=o.coreFiles.map(yd),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=hs([...c,..._]);return hs([...I,...I.flatMap(x=>bd(x,t))])}),l=v=>t.repos.find(_=>_.key===v.repo)?.files?.[v.path],d=new Set(c.map(Q)),p=new Set(o.findings.map(v=>v.id)),g=hs(a.flatMap((v,_)=>p.has(`f${n+_+1}`)?v:[])).filter(v=>!d.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=ye(g)<=bt;for(let[v,_]of g.entries()){let I=f?bt:Math.floor((bt-ye(h))/(g.length-v))-1;if(f||ye(_)<=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(ye(C)>I){let $=Math.max(0,Math.floor((I-ye({..._,text:"",truncated:!0}))/6/Math.max(1,x.length)));C=E($)}ye(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(ye(I)>B-2)return b.push({id:v.id,reason:"The cited paths exceed the serialized claim allowance."}),[];let x=gs(v.title,B-2,C=>({...I,title:C})),E=gs(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}]}),w=r.length>0&&r.length===o.coreFiles.length&&r.every(v=>!v.truncated),k=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:K(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:w}}),O={coreFiles:r,citedFiles:h,findings:y,diagnostics:[...new Map(i.map(v=>[JSON.stringify(v),v])).values()],skipped:b,coverage:k};return O.serializedBytes=s.checkPayloadBytes(O),O}var vd="We couldn't see this agent's code, so this may already be handled there.";function ca(e){return Object.values(e).some(t=>[...t].some(n=>$n(n)!==null))}function la(e,t){return e==="better_as_code"&&t===!1?vd:void 0}function Et(e){return e.sawCode??e.findingQuality?.sawCode}var da={critical:0,high:1,medium:2,low:3},_d="No strong findings to show.",Cd=/^[\s"'“”‘’]*none found[\s."'“”‘’]*$/i,Ed=/"([^"\n]*(?:\n[^"\n]*)*)"|“([^”]+)”|`([^`]+)`|‘([^’]+)’|'([^'\n]+)'/g;function Yn(e,t){return vt(e.map(n=>({...n,id:n.fingerprint})),t).byId}function on(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 ua(e,t,n){return e===void 0||t===null||!Number.isInteger(t)||t<1||!n?.trim()?!1:se(e.split(`
15
+ `).slice(t-1).join(`
16
+ `),n)===1}function Id(e){return[...e.site?[{repo:e.siteRepo??"",...e.site,excerpt:e.excerpt}]:[],...e.otherSites]}function pa(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),d=l;for(let p of a){let u=s.indexOf(p,d);if(u<0)return null;d=u+p.length}return l<0?null:{from:l,to:d}}function $d(e,t,n){if(!on(e,t))return!0;let o=pa(e,n),s=pa(t,n);return o!==null&&s!==null&&(o.to<=s.from||s.to<=o.from)}function Pd(e,t,n,o){if(!bn(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=>on(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=>on(i,s))||!n.included.some(i=>on(i,s)))return"A cited file was not included in the check.";if(!ua(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=>$d(s,r,o)))?"The category needs distinct quoted sites.":null}function Rd(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 Ad(e,t,n,o){let s=[...e.matchAll(/(?:^|[\s(`*])([^\s"'“”‘’`() *]+):(\d+)(?:-\d+)?/g)].map(c=>{let a=c[1],l=n.included.filter(p=>p.path===a||`${p.repo}:${p.path}`===a),d=[...new Map(l.map(p=>[JSON.stringify([p.repo,p.path]),p])).values()];return{from:c.index,to:c.index+c[0].length,line:Number(c[2]),ref:d.length===1?d[0]:void 0}});if(s.length===0||s.some(c=>!c.ref))return!1;let i=new Map;for(let c of e.matchAll(Ed)){let a=c.index,l=a+c[0].length;if(s.some(g=>g.from>=a&&g.to<=l))continue;let d=c.slice(1).find(g=>g!==void 0),p=s.flatMap((g,h)=>ua(Zn(o,g.ref),g.line,d)?[h]:[]);if(p.length!==1)return!1;let u=p[0];i.set(u,[...i.get(u)??[],d])}let r=!1;for(let c=0;c<s.length;c++){let a=s[c],{line:l,ref:d}=a,p=i.get(c)??[];if(p.length===0)return!1;t.some(u=>on(u,d)&&u.line===l&&p.some(g=>se(g,u.excerpt??"")!==null))&&(r=!0)}return r}function fa(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.":Ad(s.evidenceFor,t,n,o)?Cd.test(s.evidenceAgainst)?null:"Contrary check evidence has not been resolved.":"The check supplied no verified supporting quote."}function ma(e){let t=e.findings.map(K),n=Yn(e.coverage,t),o=Yn(e.verdicts,t),s=new Set(e.shadowRequestedIds??(e.shadowVerdicts===void 0?[]:t)),i=Yn(e.shadowVerdicts??[],[...s]);return e.findings.map((r,c)=>{let a=t[c],l=Id(r),d=n.get(a),p=Pd(r,l,d,e.sources),u=la(r.category,e.sawCode)??p;!u&&!Rd(r,l)&&(u="The finding does not explain a concrete behavioral consequence."),u||(u=fa(o.get(a),l,d,e.sources)),!u&&s.has(a)&&(u=fa(i.get(a),l,d,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:p?"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 _h(e,t,n){let o=e.map(n??(a=>K(a))),s=Yn(t,o),i=e.map((a,l)=>{let d=o[l],p=s.get(d),u=p?.confidence==="sure",g=u&&p?.support==="complete"&&!p.weak&&a.severity!=="low";return{finding:a,fingerprint:d,sure:u,strong:g}}).sort((a,l)=>Number(l.strong)-Number(a.strong)||da[a.finding.severity]-da[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?_d:null}}import{createHash as Md}from"node:crypto";var ha=e=>Md("sha256").update(JSON.stringify(e)).digest("hex"),eo=e=>[...new Set(e)],Fd=e=>!e.trim()||/^[\s"'“”‘’]*none found[\s."'“”‘’]*$/i.test(e);function Td(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 ie(n,{template:"second-opinion"},"Shadow finding opinion",t.models.secondOpinion,(pe(t.caps.secondOpinionInputBytes)+t.caps.checkOverheadTokens)*o,t.caps.secondOpinionOutputTokens*o)}function Nd(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??[]],d=!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)),p=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()))&&d&&r?.support!=="incomplete",u=e.disputedIds?.includes(i.id)??!1,g=r===void 0||r.weak||r.confidence==="not sure",h=p?!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 Ld(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
+ `)&&se(r,e.quote)===1}):!1}function jd(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(Fd(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=>!Ld(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 Dd(e,t){return{template:"second-opinion",answerFormat:"opinion",model:t.models.secondOpinion,inputs:{checkTemplate:is(t).check,checkInput:e},limits:{maxTokens:t.caps.secondOpinionOutputTokens,thinking:"disabled"}}}async function ks(e,t,n,o){let{findings:s,skipped:i}=Nd(t),{saved:r,...c}=t,a=ha(c),l=ha(cr(o)?n:{config:n,categories:ar(o)}),d={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},p=null;if(!n.switches.enabled||!n.switches.secondOpinion?p="Second opinion is off.":t.purpose!=="benchmark"||t.fictional!==!0?p="Second opinion is shadow-only for fictional benchmarks; customer calls are off.":(!n.models.secondOpinion||!n.secondOpinionProvider)&&(p=n.diagnostics.join(" ")||"Second opinion has no approved provider/model configuration."),p){let O=r?structuredClone(r):d;return{...O,done:!0,verdicts:[],disagreements:[],diagnostics:[...O.diagnostics,p]}}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):d;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(!_t(t.findings,eo(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{Ot(n,e.tools,o)}catch{return{...u,done:!0,diagnostics:[...u.diagnostics,"Second opinion prompt changed since its frozen snapshot."]}}let m=Dd(f,n),S=0,b=!1,y=n.caps.secondOpinionInputBytes,w;try{let O=await F(e,m,o,{maxInputBytes:y,onSend(v){S=v,b=!0,u.estimate=Td(g.length,n,o),u.coverage.sentIds=eo([...u.coverage.sentIds,...h])}});w=Zo.parse(O).verdicts}catch(O){if(!b){if(O instanceof xi)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=eo([...u.coverage.failedIds,...h]),{...u,done:!0})}if(u.batches.push({ids:h,attempt:u.retries+1,inputBytes:S,rawVerdicts:w}),!_t(w,h))u.diagnostics.push("Shadow verdict ids did not match this batch; every answer in the batch was rejected.");else for(let O of w){let v=g.find(x=>x.id===O.id),_=jd(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=eo(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 k=u.cursor+g.length;return{...u,cursor:k,retries:0,done:k>=s.length}}async function ws(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,to(i),s.secondOpinion.llm.tools),purpose:s.secondOpinion.purpose,fictional:s.secondOpinion.fictional,coverage:c.coverage,originalVerdicts:t.verdicts,fingerprints:Object.fromEntries(n.map((d,p)=>[`f${p+1}`,K(d)])),assessments:c.assessments},l=await ks(s.secondOpinion.llm,{...a,...r?{saved:r}:{}},i,s.settings);for(;;){let d=nt(e,c.coverage,n,o,s,l);if(t={...t,qualityAudit:d},await s.onCheckpoint?.(t),l.done||s.secondOpinion.oneBatch)break;l=await ks(s.secondOpinion.llm,{...a,saved:l},i,s.settings)}}return t}function to(e){return e?.switches.fullContext?"whole-file":"legacy"}function Bd(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??[]],d=u=>n.repos.find(g=>g.key===u.repo)?.files?.[u.path],p=u=>l.filter(g=>g.repo===u.repo&&g.path===u.path);return{fingerprint:K(s),requested:a,included:a.filter(u=>d(u)!==void 0&&p(u).length>0),missing:a.filter(u=>d(u)===void 0),truncated:a.filter(u=>{let g=d(u);return g!==void 0&&!p(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 ge([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:K(n[m]),accepted:a.has(f.id),verdict:f})),d=i?Ze(n,i.verdicts,{sentIds:i.coverage.sentIds,skipped:i.coverage.skipped,recordAcceptance:!0}):void 0,p=new Set(d?.acceptedIds),u=d?.verdicts?.map((f,m)=>({fingerprint:K(n[m]),accepted:p.has(f.id),verdict:f})),g=i?.coverage.sentIds.map(f=>n[Number(f.slice(1))-1]).filter(Boolean).map(K),h={coverage:t,verdicts:l,assessments:ma({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 sn=class extends Error{sent;verdicts;constructor(t,n,o){super(t),this.sent=n,this.verdicts=o}};function Kd(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,Le(e.findings.length)):Le(e.findings.length),effort:"medium"}}}async function qd(e,t,n,o){if(t.findings.length===0)return[];let s=!1,i,r=n?.switches.enabled,c=Kd(t,n,o);try{r&&Ot(n,e.tools,o);let a=await F(e,c,o,{maxInputBytes:ze(t.findings.length,to(n)),onSend(){s=!0}});if(i=a.verdicts,!_t(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 sn(a instanceof Error?a.message:"unreadable response",s,i)}}async function ga(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=to(r),l=c?r.caps.checkBatchSize:j,d=o&&o.sentIds===void 0?tt(t.slice(0,i.cursor),n,0,a,e.tools):void 0,p=o?.sentIds??d?.findings.map(S=>S.id)??[],u=o?.skipped??d?.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:p,skipped:u,rejectedBatches:g,...c?{recordAcceptance:!0}:{}}),b=f(S);return{...i,done:!0,sentIds:p,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,...Bd(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 qd(e.withRetry(i.retries),m,r,s.settings):[]];p=[...new Set([...p,...m.findings.map(_=>_.id)])];let y=Math.min(t.length,i.cursor+l),w=[...new Set([...i.diagnostics,...e.tools.checkDiagnosticsText(m.diagnostics)])],k=y>=t.length,O=k?Ze(t,b,{sentIds:p,skipped:u,rejectedBatches:g,...c?{recordAcceptance:!0}:{}}):void 0;O&&(w=[...new Set([...w,...O.diagnostics??[]])],O.diagnostics=w);let v=O?f(O):c?{coverage:h,verdicts:[],assessments:[]}:void 0;return{cursor:y,verdicts:b,diagnostics:w,retries:0,done:k,sentIds:p,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 sn&&S.verdicts&&m&&(g=[...g,{ids:m.findings.map(O=>O.id),verdicts:S.verdicts}]),S instanceof sn&&S.sent?p=[...new Set([...p,...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:p,skipped:u,rejectedBatches:g,diagnostics:y,retries:i.retries+1,...c?{qualityAudit:{coverage:h,verdicts:[],assessments:[]}}:{}};let w=Ze(t,i.verdicts,{sentIds:p,skipped:u,rejectedBatches:g,failure:nn,...c?{recordAcceptance:!0}:{}});w.diagnostics=y;let k=f(w);return{...i,sentIds:p,skipped:u,rejectedBatches:g,diagnostics:y,done:!0,result:w,...k?{qualityAudit:k}:{}}}}function Hd(e){let t=e.findingCheck?.original??[];if(!e.sourceNotes?.done)return t;let n=new Map(e.sourceNotes.findings.map(o=>[K(o),o.sourceNotes]));return t.map(o=>n.has(K(o))?{...o,sourceNotes:n.get(K(o))}:o)}function ka(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=Hd(e),i=nt({...o},t.coverage??[],s,{repos:e.repos??[],fragments:[]},{qualityConfig:t.config,codeEvidence:t.codeEvidence,readingSkipped:t.readingSkipped,sawCode:Et(e)},t.shadow);return{...e,findingQuality:{...t,...i}}}function wa(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 Sa(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=ne(t);i=await ga(n,o.original,{repos:r,fragments:c},o.state,{settings:e,qualityConfig:s,codeEvidence:t.findingQuality?.codeEvidence,readingSkipped:t.findingQuality?.readingSkipped,sawCode:Et(t)})}catch(r){M(Je("check",e,s),r,d=>n.rethrow(d)),de(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:nn,...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:Et(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 Ud}from"node:crypto";function ya(e,t,n){let o=[e,t.prompt.path,t.prompt.symbol??"",n,t.link?.callExcerpt??""];return Ud("sha256").update(o.join("\0")).digest("hex")}var Gd=200,Xd=6e3,Wd=1200,Vd=[3,4,5],no=e=>Vd.includes(e.score)&&e.prompt.chars>=Gd,zd=5;function Jd(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-zd);return o.split(`
25
+ `).slice(s).join(`
26
+ `).slice(0,Wd)}function Qd(e){let{path:t,line:n,symbol:o}=e.prompt;return o?`${t}:${n} (${o})`:`${t}:${n}`}function rn(e,t,n){let o=gt(n,t.manifest),s=Dn(t,o);return{candidate:t,fingerprint:ya(e,t,s),text:s.slice(0,Xd),usage:Jd(t,o),location:Qd(t)}}var Zd=.03,xa=ie({},{template:"judge-code-prompt"},"Check possible agents in code",A.mechanical,3e3,200).usd,Ss=3,ba=e=>e.replace(/\s+/g," ").trim(),oo=e=>Math.round(e*1e6);function ep(e){return{template:"judge-code-prompt",answerFormat:"codeJudge",model:A.mechanical,inputs:e,limits:{effort:"medium",maxTokens:200}}}async function va(e,t,n){let o=oo(n),s=await q(t,Ss,async i=>{if(!e.available)return{fingerprint:i.fingerprint,why:"unavailable"};if(o+oo(xa)>oo(Zd))return{fingerprint:i.fingerprint,why:"limit"};o+=oo(xa);try{let r=await F(e,ep({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?ba(r.name).slice(0,40).trim():"",reason:ba(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 It(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 _a(e,t){let{candidates:n,files:o,repoKey:s,stored:i,flags:r}=t,c=r.scan&&r.model&&t.hasClient,a=[],l=[],d=[],p=Math.max(0,6-(t.alreadyDue??0)),u=Math.min(p,Math.max(0,Te()-t.agentCountSoFar)),g=Xt(e)&&t.page?new Set(t.page.selected):null;for(let h of n){if(g&&!g.has(T(h.prompt))){d.push(h);continue}let f=c&&no(h)?rn(s,h,o):null;!f||!f.text||i.has(f.fingerprint)?d.push(h):a.length<u?a.push(f):a.length>=p?l.push({candidate:h,fingerprint:f.fingerprint}):d.push(h)}return{due:a,overCap:l,ineligible:d}}function Ca(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={...It(e,n.scanInfo),possible:[]};for(let r of e.possible){let{fingerprint:c}=rn(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 Ea(e,t,n,o=""){let s=new Map;if(e?.enabled&&e.grouped){let c=new Map(Dr(e,t).flatMap(d=>d.keys.map(p=>[p,d.node.id]))),a=new Map,l=(d,p)=>JSON.stringify([jr(d,t),p]);for(let d of e.byRepo[t]??[]){let p=d.codeInputsJson?.step;if(!(!d.groupKey||!p))for(let u of[p.at,p.prompt].filter(g=>g!==void 0)){let g=l(u.path,u.line),h=a.get(g)??new Set;h.add(c.get(d.unitKey)),a.set(g,h)}}for(let d of n.nodes){if(d.kind!=="agent"||c.has(d.id))continue;let p=d.files.filter(h=>h.role==="system prompt"&&h.span).map(h=>({path:h.path,line:h.span.from})),u=p.length?p:d.sourceRef?[{path:d.sourceRef.path,line:d.sourceRef.line??1}]:[],g=new Set(u.flatMap(h=>[...a.get(l(h.path,h.line))??[]]));g.size&&s.set(d.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=Br(e,t,i,o);return{fragment:{...i,nodes:[...i.nodes,...r.nodes],edges:[...i.edges,...r.edges]},files:r.files,addedNodes:r.nodes}}var so=e=>e.CF_CODE_PROMPT_LOADERS!=="0";var $a=40,ro=10,Ia=/(agent|prompt|llm|model|chain|fix|plan|assist|bot|ai)/i,tp=new Set(["agent","agents","prompt","prompts","system","instructions"]);function xs(e){return e.replace(/([a-z])([A-Z])/g,"$1 $2").split(/[^a-zA-Z]+/).map(t=>t.toLowerCase()).filter(t=>t.length>=4&&!tp.has(t))}function np(e){let t=e.filter(s=>gr(s.rel)&&hr.test(s.rel.slice(0,s.rel.lastIndexOf("/"))));if(t.length<2)return;let n=new Set(t.flatMap(s=>xs(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=$n(s.rel)?o(xs(r))?0:o(i.flatMap(xs))?1:2:2}}function op(e,t,n){let o=n?Number(Lt(t.rel))-Number(Lt(e.rel)):0;if(o)return o;let s=(e.promptRank??2)-(t.promptRank??2);if(s)return s;let i=Ia.test(e.rel)?0:1,r=Ia.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 Pa(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:Pe(u.path,n),tooLarge:!g.admitted})}so(e)&&np(s),s.sort((u,g)=>op(u,g,Cn(e)));let c=[],a=[],l=0,d=0,p=!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||d+u.size>Z.codeScan.bytes){p=!0,i.push({path:u.path,reason:"scan-limit"}),o&&a.push({path:u.path,reason:"scan-limit"});continue}c.push(u),d+=u.size}return{plan:c,total:s.length,skippedLarge:l,truncated:p,refused:i,...o?{skippedFiles:a}:{}}}function bs(e){return En(e,"CF_IMPORT_SCOPED_SCAN")}function io(e,t,n,o="bare"){let s=t.filter(l=>mr(e,l,n)),i=bs(e);if(!i&&!s.length)return;if(!i&&(o==="agents"||o==="prompt"))return[];let r=i?ei(e,t,n).filter(l=>!l.convention&&(!l.markerPath||l.scope.key===null&&o!=="agents"&&o!=="prompt")).flatMap(l=>l.paths):Aa(e,t,n,o)?t:[];if(!r.length&&!s.length)return r;let c=dr(n),a=new Set([...r,...s]);for(let l of t){let d=Pe(l,c);d!==null&&!d.includes("/")&&Lt(l)&&a.add(l)}return[...a]}function Ra(e,{paths:t,root:n,scanFlag:o,marker:s}){let i={scan:!1,markerToRead:null};if(!o)return i;let r=te(e,t,n);if(r.configPath&&s===null)return{scan:!1,markerToRead:r.configPath};let c=io(e,t,n,s);return c?{scan:c.length>0,markerToRead:null,scanPaths:c}:{scan:Aa(e,t,n,s),markerToRead:null}}function Aa(e,t,n,o){let s=te(e,t,n);return Nt({usage:"scan",codeAgentsFound:!1,otherDefinitions:ht(s)},e)!=="prompt"&&!Nn(e,s)&&o!=="agents"&&o!=="prompt"}function ot(e,t){if(t.phase==="read"){let r=pi(t.text??"");if(t.pending.scanPaths){let c=yt(t.text??"").config,a=t.pending.markerPath.split("/").slice(0,-1).join("/"),l=new Set(c?ui(e,c,a):[]),d=r==="bare"?t.pending.scanPaths:(t.pending.scanPathsIfExplicit??[]).filter(p=>!l.has(p));return{kind:"settled",markerPath:t.pending.markerPath,markerKind:r,scan:d.length>0,scanPaths:d}}return{kind:"settled",markerPath:t.pending.markerPath,markerKind:r,scan:t.pending.scanIfBare&&r==="bare"}}let{paths:n,root:o,scanFlag:s}=t,i=Ra(e,{paths:n,root:o,scanFlag:s,marker:null});if(!s)return{kind:"off"};if(i.markerToRead){let r=Ra(e,{paths:n,root:o,scanFlag:s,marker:"bare"});return{kind:"marker",markerPath:i.markerToRead,scanIfBare:r.scan,...r.scanPaths?{scanPaths:r.scanPaths,scanPathsIfExplicit:io(e,n,o,"agents")}:{}}}return{kind:"settled",markerPath:null,markerKind:null,scan:i.scan,...i.scanPaths?{scanPaths:i.scanPaths}:{}}}function ao(e,t,n="",o=!1,s){return sp(e,t,n,o,s).state}function sp(e,t,n="",o=!1,s=io(e,t.map(i=>i.path),n)){let i=Cn(e),r=so(e),c=s&&new Set(s),{plan:a,total:l,skippedLarge:d,truncated:p,skippedFiles:u,refused:g}=Pa(e,c?t.filter(f=>c.has(f.path)):t,n,o),h=Er(e,a.map(f=>f.path),n);return{state:{plan:a,cursor:0,hits:[],total:l,skippedLarge:d,truncated:p,...u?{skippedFiles:u}:{},...i?{sdk:{layouts:!0}}:{},...$r(e)?{}:{promptFunctions:!1},...r?{}:{promptLoaders:!1},...En(e)?{coverageLinks:!0}:{},...h.length?{documentedPaths:h}:{}},refused:g}}function an(e){return e.cursor>=e.plan.length}async function Ma(e,t,n={batch:$a,parallel:ro}){let o=e.plan.slice(e.cursor,e.cursor+n.batch),s=await q(o,n.parallel,t),i=e.sdk&&{...e.sdk,openaiAgents:e.sdk.openaiAgents===!0||o.some((l,d)=>s[d]!==null&&wr(l.path,s[d]))},r=o.map((l,d)=>s[d]===null?null:Ir(l.path,s[d],{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,d)=>r[d]===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 Fa(e){return{...Cr(e.hits),...e.skippedFiles?{skippedFiles:e.skippedFiles}:{}}}function mk(e){return{scanned:e.hits.length,total:e.total,truncated:e.truncated,skippedLarge:e.skippedLarge}}function Os(e,t,n,o){if(!ue(e))return null;let s=ti(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?me({...i,modelId:null},[],e):me(i,n,e),toolCall:qt(i)}}),{...o,scopes:s})}function st(e){return e.refused.filter(t=>t.reason!=="other-agent"&&t.reason!=="provider-transport")}var rp=24;function $t(e,t,n,o=new Map,s={files:{}}){let i=t.agentInventory??t,r=s.page??t.agentPage?.context??{commit:"",scope:s.root??""},c=hi(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=ip(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(!ue(e))return c&&(c.estimatedInputBytes=a.paths.reduce((h,f)=>h+(n.get(f)??0),0)),a;let l=Ht(o,s.replacementBytes),d=c?[...i.strong,...i.possible]:[...t.strong,...t.possible],p=Os(e,d,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,...p.map(st)),g=[...new Set(p.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:p,refused:u,skippedFiles:L(a.skippedFiles,...p.map(st))}}var Ta=(e,t,n,o=new Map)=>$t(e,t,n,o).paths;function ip(e,t,n,o){let s=Ht(o);if(Xt(e))for(let m of t.strong)We(e,{ownPaths:[m.prompt.path]},{files:{},sizes:n,total:s});let i=[],r=[],c=[],a=[],l=[],d=[],p=0,u=m=>{d.length<10?d.push(m):p++},g=m=>{for(let S of m)i.includes(S)||i.push(S)};for(let m of t.strong){if(!Xt(e)&&r.length>=Te())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 w=me(m,t.repoModelIds,e).map(({path:O})=>O),k=We(e,{ownPaths:w},{files:{},sizes:n,total:s});l.push(...k.refused),r.push(m),g(k.paths),a.push(...k.skipped),k.skipped.forEach(({path:O})=>u({candidate:m,path:O,kind:"extra"}))}let h=Z.candidateFetch.check,f=t.possible.filter(no).slice(0,rp).filter(m=>{let S=me(m,t.repoModelIds,e).map(({path:_})=>_),b=S.filter(_=>!s.chosen.has(_)),y=n.get(m.prompt.path),w=W(e,{path:m.prompt.path,size:y},{purpose:"pointer",route:"github"});if(w.admitted||l.push({path:m.prompt.path,reason:w.reason}),y===void 0||!w.admitted||!s.chosen.has(m.prompt.path)&&y>h)return!1;let k=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(_=>!k.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:d,notReadMore:p,skipped:c,skippedFiles:a,refused:L(l)}}var ap=10,cp=2e5;function lp(e,t,n,o){let s=new Set($t(e,t,n,o).window),i=[],r=0;for(let[c,a]of t.possible.entries())if(!(c>=ap&&!s.has(a))){if(r+=JSON.stringify(a).length+1,r>cp)break;i.push(a)}return i}var Na=1,La=2;function ja(e,t,n,o=new Map){let s=Te()+10,i=t.omitted??{strong:0,possible:0},r=$t(e,t,n,o);if(r.page){let p=t.agentInventory??{strong:t.strong,possible:t.possible};return{...t,agentInventory:p,agentPage:r.page,strong:r.strong,possible:r.window,callsWithoutPrompt:t.callsWithoutPrompt.slice(0,Na),repoModelIds:t.repoModelIds.slice(0,La),omitted:{strong:p.strong.length-r.strong.length,possible:p.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(p=>!c.has(p)),d=lp(e,t,n,o);return{...t,strong:l.slice(0,s),possible:d,callsWithoutPrompt:t.callsWithoutPrompt.slice(0,Na),repoModelIds:t.repoModelIds.slice(0,La),omitted:{strong:i.strong+Math.max(0,l.length-s),possible:i.possible+Math.max(0,t.possible.length-d.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 Da=e=>e.includes("/")?e.slice(0,e.lastIndexOf("/")):"",Ba=e=>new Map(e.map(t=>[t.path,t.size])),dp=(e,t,n=new Map)=>ja(e,Fa(t),Ba(t.plan),n),Ka=e=>e.strong.length===0&&e.possible.length===0;function qa(e,t){let{paths:n,entries:o,root:s,scanFlag:i,modelReader:r,recordSkips:c=!1}=t,a=ot(e,{phase:"start",paths:n,root:s,scanFlag:i});if(a.kind==="marker"){let l=a.scanIfBare,d=l?ao(e,o,s,c,a.scanPaths):void 0;return d&&a.scanPaths&&(d.markerDecision=a,d.explicitMarkerScan=ao(e,o,s,c,a.scanPathsIfExplicit??[])),{kind:"marker",markerPath:a.markerPath,scanNeeded:l,...d?{scan:d}:{}}}return a.kind==="off"||!a.scan?{kind:"none"}:{kind:"scan",...co(e,{scan:ao(e,o,s,c,a.scanPaths)},r)}}function Ha(e,t,n){return{scan:{...t,hits:[]},ranked:dp(e,t,n.alreadyRead)}}async function Ua(e,t,n,o){let s=await Ma(t,n,o.size);if(!an(s))return{scan:s,selection:null};let{scan:i,ranked:r}=Ha(e,s,o);return{scan:i,selection:{ranked:r,paths:Ta(e,r,Ba(s.plan),o.alreadyRead),refused:s.refused??[]}}}function co(e,t,n=!1){let{scan:o}=t;return!o||!an(o)||t.ranked?t:{...t,...Ha(e,o,{modelReader:n,alreadyRead:new Map})}}function Ga(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 d=W(e,l,{purpose:"pointer",route:"github"});d.admitted?r.push(l):c.push({path:a,reason:d.reason})}return{entries:r,refused:c}}function it(e,t,n,o,s=1/0){let i=Ga(e,n,o,new Set(t.filter(p=>p.readBytes===void 0).map(p=>p.path))),r=s,c=i.entries.filter(p=>p.size>r?(i.refused.push({path:p.path,reason:"total"}),!1):(r-=p.size,!0)),a=new Map(c.map(p=>[p.path,p])),l=new Set(t.map(p=>p.path));return{selected:[...t.map(p=>a.get(p.path)??p),...c.filter(p=>!l.has(p.path))],refused:i.refused}}var Xa=20;function zk(e,t){return t==="hosted-import"?{...e,CF_IMPORT_CALLS:"0"}:e}function Wa(e,t,n,o){t.requestedPaths.push(...n);let s=it(e,t.selected,n,o);t.selected=s.selected,t.refused.push(...s.refused)}function Va(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 Jk(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=>me(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 za(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 Ja(e,t=It(e.ranked,e.scan)){return t.agents.length>0}function pp(e){return e.hosted?.weakCodeFallback&&!e.hosted.codeMode?e.hosted.fallback.selectedPaths:[]}function Qk(e,t){if(e.hosted&&(e.hosted.codePaths=t.map(s=>s.path)),!e.hosted?.weakCodeFallback||e.hosted.codeMode||Ja(e)){za(e,t);return}let n=new Map([...e.entries,...e.selected].map(s=>[s.path,s])),o=new Map(pp(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 Yk(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]));Ja(e,t)?za(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 fp(e,t){if(!In(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(yr(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 Zk(e,t,n){fp(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 Qa(e,t,n,o,s,i){let r=t.ranked&&ue(e)?$t(e,t.ranked,o,s,{files:n,root:t.root,replacementBytes:i}):{paths:[],refused:[],manifests:[]};if(!In(e))return r;let c=new Map(s);for(let p of r.paths)o.has(p)&&c.set(p,Math.max(c.get(p)??0,o.get(p)));let a=Ht(c,i);for(let p of r.paths)a.chosen.add(p);let d=Bn(e,{files:n,listedPaths:t.entries.map(p=>p.path),root:t.root,fallbackName:"",skills:!0},{sizes:o,total:a}).agents.filter(p=>p.crewCall||p.layoutCall).flatMap(p=>p.manifest?[p.manifest]:[]);return{paths:[...new Set([...r.paths,...d.flatMap(p=>p.files.map(u=>u.path))])],refused:[...r.refused,...d.flatMap(st)],manifests:[...r.manifests??[],...d]}}async function Ya(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=Qa(e,t,s,i,r),a=new Set(t.manifestReadPaths),l=c.paths.filter(m=>s[m]===void 0&&!a.has(m)),d=new Map(t.selected.filter(m=>m.readBytes!==void 0).map(m=>[m.path,m]));t.requestedPaths.push(...l.filter(m=>d.has(m))),Wa(e,t,l.filter(m=>!d.has(m)),t.entries);let p=new Set(l),u=new Map(t.entries.map(m=>[m.path,m])),g=t.selected.filter(m=>p.has(m.path)).map(m=>d.has(m.path)?u.get(m.path):m).slice(0,Xa);if(g.length){let m=await q(g,4,async k=>{let O=W(e,k,{...t.admission,purpose:"pointer",route:"github",root:t.root});return O.admitted?n(k):(t.refused.push({path:k.path,reason:O.reason}),null)});t.manifestReadPaths=[...t.manifestReadPaths,...g.map(k=>k.path)];let S=new Map(i);g.forEach((k,O)=>{m[O]!==null&&S.set(k.path,Buffer.byteLength(m[O]))});let b=new Map(g.filter((k,O)=>d.has(k.path)&&m[O]!==null).map(k=>[k.path,r.get(k.path)])),y=Qa(e,t,s,S,r,b),w=new Set(y.paths);g.forEach((k,O)=>{m[O]!==null&&(w.has(k.path)?(t.files[k.path]=m[O],t.selected=t.selected.map(v=>v.path===k.path?k:v)):t.refused.push(y.refused.find(v=>v.path===k.path)??{path:k.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(w=>w.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)}),Va(t,[...h.values()].flatMap(m=>m.files.map(S=>S.path)),"code"),t.refused.push(...[...h.values()].flatMap(st)),t.phase="done"}function Za(e,t){return`${e}: no agent found \u2014 no convention files (looked for ${Ko}) and no system prompt in code (scanned ${t.scanned} code files for prompt constants, prompt files and model calls)`}function at(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 xr(e.path);case"claude-fallback":return`no dedicated prompt file found; used ${e.path??Do} as the system prompt`;case"no-prompt":return`no system prompt found (looked for ${Bo}); 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 ce(e,t){switch(e.code){case"unreadable-crew":return`${t}: ${at(e)}`;case"duplicate-agent":case"agent-cap":return`${t}: ${at(e)}`;case"invalid-config":return`${t}: counterfact.json is not valid JSON; ignored`;case"pointer-owned-by-subagent":return`${t}: ${at(e)}`;case"pointer-guide":return at(e,t);case"explicit-guide":return`${t}: ${at(e)}`;case"pointer-missed":return null;case"secret-file":return null;case"claude-fallback":return`${t}: no system prompt file; using ${e.path??Do}`;case"no-prompt":return e.detail==="no-conventions"?`${t}: no agent conventions found (looked for ${Ko})`:`${t}: ${e.folderAgentsFound?"the root agent has ":""}no system prompt file (looked for ${Bo})`;case"orphan-skill":return`${t}: ${at(e)}`;case"frontmatter":return xe(e.path,{nested:!0})?null:`${t}: ${at(e)}`}}import{basename as up}from"node:path";function ec(e,t,n){return n?`Instructions in ${t.filter(s=>s.role==="soul"||s.role==="knowledge").map(s=>up(s.path)).join(" and ")}.`:e?`Instructions in ${e}.`:"No system prompt file found."}import{posix as dc}from"node:path";var lo=e=>`${e.prompt.path}:${e.prompt.line}`,mp=(e,t,n)=>`${e} ${e===1?t:n}`;function po(e,t,n,o){let s=Te(),i=`${n.repoKey}: `,r=[],{kept:c}=he(e,t.agents),a=t.agents.length+t.omitted.strong;a>s&&r.push(gi({kind:"scan",found:a})),c.forEach(({candidate:u,confirmedBy:g},h)=>{g&&r.push(`${i}${o[h]}: included on ${g.model}'s reading of ${lo(u)} \u2014 the code alone was not conclusive`)}),n.reportSkippedFiles!==!1&&r.push(...yn(Sn(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 d=[...t.rejected.map(u=>`${i}not an agent prompt, per ${u.model}: ${lo(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: ${lo(u.candidate)} \u2014 ${g}`}),...t.possible.map(u=>`${i}possible agent prompt not included: ${lo(u)}${u.prompt.symbol?` (${u.prompt.symbol})`:""} \u2014 nothing in the scanned code sends it to a model`)];r.push(...d.slice(0,10));let p=Math.max(0,d.length-10)+t.omitted.possible;return p>0&&r.push(`${i}${mp(p,"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 oc}from"node:path";import{basename as hp}from"node:path";function Ee(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")||"agent"}function fo(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 tc(e,t){return e??(t?Ee(hp(t)):"agent")}var gp=new Set(["system","prompt","prompts","instruction","instructions"]);function nc(e){let t=e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[^A-Za-z0-9]+/).filter(n=>n&&!gp.has(n.toLowerCase())).map(n=>n.toLowerCase());return t.length?t.join(" ").replace(/^./,n=>n.toUpperCase()):null}function sc(e,t){let{prompt:n,link:o}=e;if(o?.kind==="L1"&&o.shortLabel)return o.shortLabel;let s=n.symbol?nc(n.symbol):null;if(s)return s;if(o?.shortLabel)return o.shortLabel;let i=n.enclosing?nc(n.enclosing):null;return i||t||`${oc(n.path).replace(/\.[^.]*$/,"")}:${n.line}`}function rc(e,t,n){let o=t?`${Ee(oc(t))}-`:"";return fo(o,[],(s,i)=>{n.push(`${e}: two agents are named ${s}; the second is ${i}`)})}function ic(e,t,n,o){return t.map(s=>({...s,tools:s.manifest&&ue(e)?s.tools:Go({ownPaths:n[s.unitKey]??[],toolCall:s.toolCall},o).tools}))}function vs(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 kp(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 wp(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=kp(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 ac(e,t,n){let o=[];return{agents:t.agents.flatMap(i=>{let{candidate:r}=i;if(Lo(e,r.prompt.path,r.promptSource==="marker"))return[i];let c=r.alsoLoads?.find(l=>Lo(e,l)&&Object.hasOwn(n,l));if(!c)return[];let a=kr(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 cn(e,t,n){return!!t&&ac(e,t,n).agents.length>0}function cc(e,t,n){let o=[],s=rc(n.repoKey,n.root,o),i=[...Sn(t)],r=[],c=new Map(Object.entries(n.files).map(([S,b])=>[S,Buffer.byteLength(b)])),{agents:a,aliases:l}=ac(e,t,n.files),{kept:d}=he(e,a),p=ue(e),u=d.map(({candidate:S},b)=>p&&!vs(n,b).model?S.manifest:void 0),g=p&&u.some(S=>!S)?Os(e,d.map(({candidate:S})=>S),t.repoModelIds,{files:n.files,sizes:c,root:n.root,agentConfigurations:n.agentConfigurations,modelOverrides:d.flatMap(({candidate:S},b)=>vs(n,b).model?[T(S.prompt)]:[])}):null,h=d.map(({candidate:S,confirmedBy:b},y)=>{let w=vs(n,y),{prompt:k,link:O}=S,v=w.name??sc(S,b?.name??null),_=s(v),I=[],x=`${n.repoKey}: ${v}: `,E=w.model?null:Xo(S,t.repoModelIds),C=w.model?{value:w.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 $=w.model?me({...S,modelId:null},[],e):me(S,t.repoModelIds,e),R=u[y]??g?.[y],P=gt(n.files,R),Y=R?R.files.map(G=>$.find(zl=>zl.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),Ao=[...U,...n.codingGuides??[]],Ie=wp(t,n,{candidate:S,confirmedBy:b}),Mo=qt(S),wn=Ie.candidate===S?Mo:qt(Ie.candidate),Fo=R?.files.map(G=>G.path),or=R&&Fo?{paths:Fo,skipped:st(R),...Go({ownPaths:Fo,toolCall:wn},P)}:null,To=or??We(e,{ownPaths:U,toolCall:Mo},{files:n.files,sizes:c,root:n.root,guides:n.forImport?void 0:n.codingGuides}),No=or??(n.forImport&&(Ao.length!==U.length||wn!==Mo)?We(e,{ownPaths:U,toolCall:wn},{files:n.files,sizes:c,root:n.root,guides:n.codingGuides}):To),sr={paths:No.paths,skipped:No.skipped.filter(({reason:G})=>G!=="missing")};i.push(...To.skipped.filter(({reason:G})=>G!=="missing")),n.forImport&&r.push(...sr.skipped),I.push(...To.toolWarnings.map(G=>`${x}${G}`)),o.push(...I);let rr=O?`${O.callPath}:${O.callLine}`:null,Wl=rr?`, sent from ${rr}`:"",Vl=S.shape?` Answers in the shape of ${S.shape.name}.`:"";return{unitKey:_,name:v,description:w.description??`Instructions in ${k.path} (${k.symbol??`line ${k.span.from}`})${Wl}.${Vl}`,model:C,prompt:Ie.candidate.prompt,instructionText:Dn(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:wn,ownFiles:Y,reading:sr,tools:No.tools,warnings:I,...R?{manifest:R}:{}}}),f=new Map(d.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 d.entries()){let y=(b.links??[]).flatMap(w=>{let k=f.get(w.to);return k?[{to:k,kind:w.kind}]:[]});y.length&&(h[S].links=y)}let m=L(i,r);return{agents:h,skippedFiles:m,warnings:[...o,...po(e,{...t,agents:a},{...n,reportSkippedFiles:!1},h.map(({name:S})=>S)),...n.reportSkippedFiles!==!1?yn(m,t.skippedFiles?0:t.notReadMore):[]]}}function lc(e,t,n){let o=cc(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 uo({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=[],d=[];for(let g of c.notes.filter(h=>h.code==="orphan-skill")){let h=ce(g,e);h&&d.push(h)}let p=i?a.find(g=>g.id===i):a[0];if(!p)return{nodes:a,edges:l,warnings:d};let u=fo(n?`${p.id}-`:"",a.map(g=>g.id),(g,h)=>{d.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!==p.id&&y.sourceRef?.path===h);if(b){let y=new Set(b.files.map(w=>w.path));b.files.push(...[...f,...m].filter(w=>!y.has(w.path)))}else{for(let w of c.notes.filter(k=>k.code==="frontmatter"&&k.path===h)){let k=ce(w,e);k&&d.push(k)}b={id:S??u(g.name),label:g.name,kind:"agent",desc:g.description??`A sub-agent ${p.label} can hand work to.`,meta:g.model??null,sourceRef:{path:h,line:1},files:[...S&&f.some(w=>w.path===h&&w.role==="system prompt")?[]:[{role:"system prompt",path:h,label:null}],...f,...m],tools:(g.tools??[]).map(ut)},a.push(b)}l.push({from:p.id,to:b.id,kind:"delegates",label:null,sourceRef:{path:h,line:1}})}return{nodes:a,edges:l,warnings:d}}function uc(e,t,n){let o=Sp(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(w=>{let k=w.layoutCall;return k.path!==y.toolCall.path?!1:k.callStart!==void 0&&y.toolCall.callStart!==void 0?k.callStart===y.toolCall.callStart:k.promptPath===y.prompt.path&&k.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()],d=he(e,l.filter(y=>y.kind==="agent")),p=new Set(d.kept.map(y=>y.id)),u=l.filter(y=>y.kind!=="agent"||p.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=d.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 Sp(e,{input:t,conventions:n},o){let s=t.code?.resolved;if(bs(e)&&(n.projection!=="code"||n.agents.some(Gt))){let r=Object.keys(t.files),c=ot(e,{phase:"start",paths:r,root:t.root,scanFlag:!0}),a=c.kind==="marker"?ot(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 d=new Set(l),p=fc(e,{input:{...t,code:{resolved:null}},conventions:n},o),u=pc(e,t,n,p,o),g=(s?.agents??[]).filter(k=>d.has(k.candidate.prompt.path)),h=[...u.fragment.nodes.filter(k=>k.kind==="agent").map(()=>({code:null})),...g.map(k=>({code:k}))],{kept:f,leftOut:m}=he(e,h),S=f.flatMap(k=>k.code?[k.code]:[]),b=m.flatMap(k=>k.code?[{path:k.code.candidate.prompt.path,reason:"allowance"}]:[]);if(!S.length)return b.length?{...u,skippedFiles:[...u.skippedFiles??[],...b]}:u;let y=_s(e,t,te(e,l,t.root,t.listedPaths),{agents:[],notes:[]},{...s,agents:S},{}),w=new Map((y.codeAgents??[]).map(k=>[k.unitKey,`code:${T(k.prompt)}`]));return{...u,fragment:{nodes:[...u.fragment.nodes,...y.fragment.nodes.map(k=>({...k,id:w.get(k.id)??k.id}))],edges:[...u.fragment.edges,...y.fragment.edges.map(k=>({...k,from:w.get(k.from)??k.from,to:w.get(k.to)??k.to}))],warnings:[]},warnings:[...new Set([...u.warnings,...y.warnings])],...y.codeAgents?{codeAgents:[...u.codeAgents??[],...y.codeAgents.map(k=>({...k,unitKey:w.get(k.unitKey)??k.unitKey,...k.links?{links:k.links.map(O=>({...O,to:w.get(O.to)??O.to}))}:{}}))]}:{},...y.skippedFiles?.length||b.length?{skippedFiles:[...u.skippedFiles??[],...y.skippedFiles??[],...b]}:{}}}}let i=fc(e,{input:t,conventions:n},o);return n.projection==="code"?pc(e,t,n,i,o):i}function pc(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)&&di(e,m,r.get(m.key).folder,t.root??"")&&(!Gt(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:d}=he(e,a),p=l.flatMap(m=>m.agent?[m.agent]:[]),u=d.flatMap(m=>m.agent?.files[0]?[{path:m.agent.files[0].path,reason:"allowance"}]:[]),g=new Set(p.map(m=>m.key)),h=n.agentScopes.filter(m=>g.has(m.key)),f=s(t,{...n,agents:p,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 fc(e,{input:t,conventions:n},o){let s=t.code,{repoKey:i,files:r,root:c}=t,a=te(e,Object.keys(r),c,t.listedPaths),l=a.configPath?yt(r[a.configPath]):null,d=l?.config??null,p=l?.invalid===!0,u=d?fi(d):"bare",g=[];d&&u==="bare"&&(d.prompt||d.agents?.length)&&(g=Vo(e,d,{repoKey:i,markerDir:dc.dirname(a.configPath).replace(/^\.$/,""),files:r}).warnings);let h;if(d&&u!=="bare"){let y=dc.dirname(a.configPath).replace(/^\.$/,""),w=Vo(e,d,{repoKey:i,markerDir:y,files:r});h=w.agents.length>0;let k=w.agents.filter(_=>ki(e,_.prompt.path,r,c)),O=w.agents.filter(_=>!k.includes(_)),v=k.flatMap(_=>{let I=ce({code:"pointer-owned-by-subagent",path:_.prompt.path},i);return I?[I]:[]});if(O.length>0){let _=_s(e,t,a,n,bp(O),{overrides:O.map(({name:I,model:x,description:E})=>({name:I,model:x,description:E})),configPath:a.configPath});return{..._,markerAgentsFound:h,markerWarnings:w.warnings,warnings:[...w.warnings,...v,...mc(e,t,a,O.length),..._.warnings]}}g=[...w.warnings,...v]}let{resolved:f}=s;if(!f||yp(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=cn(e,f,r);if(m){let y=xp(e,t,a,n,f,d,p);return{...y,warnings:[...new Set([...g,...y.warnings])]}}let S=Nt({agentConfiguration:n.agents.some(y=>y.prompt.kind==="fallback"),usage:"map",codeAgentsFound:m,otherDefinitions:ht(a)},e),b=a.claudePath&&S==="prompt"||a.configPath||n.agents.some(y=>Wo(y)||y.layoutCall)?o(t,n):{fragment:{nodes:[],edges:[],warnings:[]},warnings:[Za(i,f),...n.notes.filter(y=>y.code==="orphan-skill").flatMap(y=>{let w=ce(y,i);return w?[w]:[]})]};return{fragment:b.fragment,warnings:[...b.warnings,...po(e,f,{repoKey:i,modelReader:t.modelReader,reportSkippedFiles:t.reportSkippedFiles},[])]}}function yp(e,t,n){return n.projection==="code"?!1:Nn(e,t)?!0:n.agents.some(o=>Gt(o)&&Wo(o))}function mc(e,t,n,o){let s=Nt({usage:"map",codeAgentsFound:o>0,otherDefinitions:ht(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 xp(e,t,n,o,s,i,r){let{repoKey:c}=t,a=s.agents.length,l=_s(e,t,n,o,s,{primaryConfig:i,configPath:i?n.configPath:null}),d=r?ce({code:"invalid-config"},c):null,p=d?[d]:[];return ht(n)||p.push(`${c}: no agent convention files; found ${a===1?"1 agent":`${a} agents`} defined in code \u2014 add counterfact.json to name them yourself`),p.push(...mc(e,t,n,a)),{...l,warnings:[...p,...l.warnings]}}function bp(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 _s(e,{repoKey:t,files:n,root:o,modelReader:s,codingGuides:i,reportSkippedFiles:r,forImport:c,forLocal:a,code:l,agentConfigurations:d},p,u,g,h){let f=lc(e,g,{repoKey:t,root:o,files:n,modelReader:s,codingGuides:i,reportSkippedFiles:r,forImport:c,forLocal:a,agentConfigurations:d,...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(p.developerCompanionPaths),b;for(let x of f.nodes){let E=u.agents.find(P=>Gt(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(...Rn(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)),w=new Set([...m.flatMap(x=>x.skillPaths),...u.notes.filter(x=>x.code==="orphan-skill").map(x=>x.path)]),{stripRoot:k}=p,O=new Set(f.nodes.flatMap(x=>x.files.map(E=>E.path))),v=p.scoped.filter(x=>!O.has(x)&&!y.has(x)&&!w.has(x)&&x!==h.configPath&&ft(x)).sort();for(let x of f.nodes){let E=Oe(v,[f.instructionSpans[x.id]??""],k).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 _=w.size||b!==void 0?uo({repoKey:t,files:n,root:o,conventions:p,nodes:f.nodes,parentId:b,candidates:v,resolved:{subagents:m,notes:u.notes}}):{nodes:f.nodes,edges:[],warnings:[]},I=a?ic(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 Op}from"node:path";function hc(e){let t=e.replace(/^local:/,"");return t.slice(t.lastIndexOf("/")+1)||t}function gc(e,t,n,o={}){if(e.ranked&&e.scan){let{total:i,truncated:r}=e.scan;return{resolved:n?Ca(e.ranked,n.verdicts,{repoKey:e.key,files:e.files??{},failed:n.failed,flags:t,scanInfo:{total:i,truncated:r}}):It(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 Cs(e){let t=He(e.root);return t?Op(t):hc(e.repoKey)}function mo(e,t,n=t.code&&(!t.code.resolved||cn(e,t.code.resolved,t.files))?"":Cs(t),o=t.code?.resolved?.filenameReferences){let s={...t,root:He(t.root)};pt(e)&&!s.agentConfigurations&&(s.agentConfigurations=Ln(e,s.listedPaths??Object.keys(s.files),s.root));let i=Bn(e,{files:s.files,root:s.root,fallbackName:n,skills:!0,listedPaths:s.listedPaths,agentConfigurations:s.agentConfigurations,filenameReferences:o,codeAgentsFound:cn(e,s.code?.resolved,s.files)});return i.projection==="conventions"&&delete s.code,{input:s,conventions:i}}function kc(e,t,n,o,s={}){let i={repoKey:t.key,files:qr(o.projectAgents,t.key,t.files??{}),...t.root?{root:t.root}:{},...pt(e)?{agentConfigurations:t.agentConfigurations??{}}:{},code:gc(t,n,s.checks),modelReader:o.modelReader??!1};return mo(e,i)}function ln(e,t){let n={repoKey:t.repoKey,files:t.files,...t.root?{root:t.root}:{},...pt(e)?{agentConfigurations:t.agentConfigurations??{}}:{}};return mo(e,n)}function ct(e,t){return t.input.code?uc(e,t,(n,o)=>wc(e,o?{input:n,conventions:o}:mo(e,n,Cs(n),t.input.code?.resolved?.filenameReferences))):wc(e,t)}function wc(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=ce(h,t);return f?[f]:[]})};let c=r.notes.filter(h=>h.code!=="orphan-skill"&&h.code!=="frontmatter").flatMap(h=>{let f=ce(h,t);return f?[f]:[]}),{scopes:a,ownerOf:l}=ni(e,r.scopePaths??Object.keys(n),o,{files:n,listedPaths:s,agentConfigurations:i}),d=new Map(a.map(h=>[h.folder,[]]));for(let h of Object.keys(n)){let f=l(h);f&&d.get(f.folder).push(h)}let p=r.agents.map(h=>{let f=r.agentScopes?.find(C=>C.key===h.key)??a.find(C=>C.key===h.key),m=He(f.folder),S=gt(n,h.manifest),b=te(e,d.get(f.folder).filter(C=>S[C]!==void 0),m),y=new Set(h.files.map(C=>C.path)),w=C=>C!==null&&y.has(C)?C:null,k=h.tools?.map(ut)??Rn(e,t,S,{toolsPath:w(b.toolsPath),toolsTsPath:w(b.toolsTsPath),cliPath:w(b.cliPath),mcpPath:w(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:tc(h.key,o),label:h.name,kind:"agent",desc:h.description??ec(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:k},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)&&ft(C)).sort();return{resolved:h,root:m,conventions:b,agent:I,candidates:E}}),u=p.map(h=>h.agent),g=[];c.push(...r.notes.filter(h=>h.code==="orphan-skill").flatMap(h=>{let f=ce(h,t);return f?[f]:[]}));for(let{resolved:h,root:f,conventions:m,agent:S,candidates:b}of p){let y=uo({repoKey:t,files:n,root:f,conventions:m,nodes:u,parentId:S.id,candidates:b,resolved:{subagents:h.subagents,notes:r.notes.filter(w=>w.code==="frontmatter")}});u=y.nodes,g.push(...y.edges),c.push(...y.warnings)}return{fragment:{nodes:u,edges:g,warnings:[]},warnings:c}}function Sc(e){let t=e.CF_CODE_AGENTS!=="0";return{scan:t,model:t&&e.CF_CODE_AGENTS_MODEL!=="0"}}async function yc(e,t){let n=t.admission.exclusions?.length?await t.listing():void 0,o=t.config?mi(e,t.config,t.markerDir,{...t.admission,...n?{listing:new Set(n.map(l=>l.path))}:{}}):{paths:[],refused:[]},s=(l,d)=>t.refusalMode==="append"?[...l,...d]:L(l,d),i=s(t.priorRefused,o.refused),{kept:r}=he(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=it(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 ho(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 Pn)||s.reason!=="secret-content")throw s;return n.push({path:e.path,reason:s.reason}),null}}function go(e,t){return t.codeAgents??Sc(e)}function uy(e,t,n,o,s,i=!1){let r=pt(e)?{agentConfigurations:Ln(e,t.map(d=>d.path),o)}:{},c=[],a=t.filter(d=>{let p=W(e,d,{purpose:"pointer",route:"github"});return p.admitted||c.push({path:d.path,reason:p.reason}),p.admitted}),l=qa(e,{paths:a.map(d=>d.path),entries:t,root:o,scanFlag:s.scan,modelReader:i});if(l.kind==="marker"){let{markerPath:d,scanNeeded:p,scan:u}=l,g=a.find(f=>f.path===d),h=n.some(f=>f.path===d);return{...r,markerPath:d,refused:c,scanNeeded:p,...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 xc(e){return!!(e.root&&e.ranked&&Ka(e.ranked)&&e.plumbing===void 0)}var Es=e=>(e.listAll??e.list).call(e);async function vp(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 ho(i,h=>n.read(h),c,t.refused);a!==null&&(r[s]=a);let l=ot(e,{phase:"read",pending:t.scan?.markerDecision??{kind:"marker",markerPath:s,scanIfBare:!!t.scanNeeded},text:a}),d=l.markerKind,{scan:p,...u}=t,g={...u,files:r,markerKind:d,...c.length?{refused:L(t.refused,c)}:{}};if(l.scan&&p&&!p.markerDecision)return co(e,{...g,scan:p},o);if(d!=="bare"){let{config:h}=yt(r[s]),f=await yc(e,{config:h,markerDir:Da(s),selected:t.selected??[],admission:n.admission??{},modelReader:o,priorRefused:t.refused??[],refusalMode:"merge",requestedMode:"none",listing:()=>Es(n)});g.refused=f.refused,f.selected&&(g.selected=f.selected)}if(l.scan&&p?.markerDecision){let f={...d==="bare"?p:p.explicitMarkerScan};delete f.markerDecision,delete f.explicitMarkerScan;let m=new Set(l.scanPaths),S=f.plan.filter(b=>m.has(b.path));return co(e,{...g,scan:{...f,plan:S,total:f.total-f.plan.length+S.length}},o)}return g}async function _p(e,t,n,o){let s=[],{scan:i,selection:r}=await Ua(e,t.scan,a=>ho(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=it(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 Cp(e,t,n){let o=t.root,s=await Es(n),i=Pr(t.files??{},s.map(d=>d.path),o),{selected:r,refused:c}=it(e,[],i,s),a=await q(r,ro,d=>ho(d,p=>n.read(p),c,t.refused)),l=Rr(o,Object.fromEntries(r.flatMap((d,p)=>a[p]===null?[]:[[d.path,a[p]]])),e);return{...t,plumbing:l,refused:L(t.refused,c)}}async function Ep(e,t,n){let o=t.ranked?.manifestProgress,s=o?.entries??await Es(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 Ya(e,i,async r=>{try{return await n.read(r)}catch(c){if(!(c instanceof Pn))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 bc(e,t){return!!(t.ranked&&ue(e)&&!t.ranked.manifestProgress?.done)}function my(e,t){return xc(t)||bc(e,t)}async function hy(e,t,n,o=!1){if(n=br(e,n),t.markerPath&&!t.markerKind)return vp(e,t,n,o);if(t.scan&&!an(t.scan))return _p(e,t,n,o);let s=(t.cursor??0)>=(t.selected??[]).length;return s&&xc(t)?Cp(e,t,n):s&&bc(e,t)?Ep(e,t,n):null}function gy(e){return e.root&&e.plumbing?[`${e.key}: ${Ar(e.root,e.plumbing)}`]:[]}function dn(e,t,n,o=!1,s,i="",r){let c=kc(e,t,n,{modelReader:o,projectAgents:s},{checks:r}),a=ct(e,c),l=Ea(s,t.key,a.fragment,i),{fragment:d,warnings:p}=An(l.fragment,t.key);return{fragment:d,warnings:[...Kr(t.key,a.warnings,l.addedNodes),...p],...l.addedNodes.length?{virtualFiles:l.files}:{}}}var ko=e=>(e.ranked?.possible.length??0)>0;async function Oc(e,t,n){let o=[];try{o=await t?.()??[]}catch(i){n.rethrow(i)}let s=new Set((e.repos??[]).filter(ko).flatMap(i=>i.ranked.possible.map(r=>rn(i.key,r,i.files??{}).fingerprint)));return o.filter(i=>s.has(i.fingerprint))}function Ip(e,t,n,o){let s=new Set(n.map(r=>r.fingerprint)),i={due:[],overCap:[],ineligible:[]};for(let r of(t.repos??[]).filter(ko)){let c=_a(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 Is(e,t){let n=[...t];return e.filter(o=>{let s=n.indexOf(o);return s<0?!0:(n.splice(s,1),!1)})}function vc(e,t,n,o){let s=[...t.mapped??[]],i=[...t.warnings??[]];return(t.repos??[]).forEach((r,c)=>{if(!ko(r))return;let a=dn(e,r,n,t.modelReader??!1,t.projectAgents),l=dn(e,r,n,t.modelReader??!1,t.projectAgents,"",o);s[c]=l.fragment,i=[...Is(i,Is(a.warnings,l.warnings)),...Is(l.warnings,a.warnings)]}),{mapped:s,warnings:i}}async function _c(e,t,n){let o=go(e,t);if(t.codeChecks?.done||!(t.repos??[]).some(ko))return{data:t,pending:!1};if(!o.model){let g=await Oc(t,n.load,n.llm);return{pending:!1,data:{...t,...vc(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 Oc(t,n.load,n.llm)},i=Ip(e,t,s.stored,o),r=i.due.slice(s.cursor,s.cursor+Ss),c=await va(n.llm,r,s.spentUsd),a=s.cursor+r.length,l=i.due.length,d=[...s.verdicts,...c.verdicts],p=[...s.failed,...c.failed];if(a<l)return{pending:!0,data:{...t,codeChecks:{done:!1,total:l,cursor:a,spentUsd:c.spentUsd,verdicts:d,failed:p,stored:s.stored}}};let u=new Set(p.map(g=>g.fingerprint));for(let{fingerprint:g}of i.overCap)u.has(g)||p.push({fingerprint:g,why:"limit"});return{pending:a>s.cursor,data:{...t,...vc(e,t,o,{verdicts:[...s.stored,...d],failed:p}),newVerdicts:d,codeChecks:{done:!0,total:l,cursor:a,spentUsd:c.spentUsd,verdicts:[],failed:[],stored:[]}}}}var Pt=A.mechanical,$s=!1,Cc=200;function Ps(e){return e.length>Cc?`${e.slice(0,Cc)}\u2026`:e}function $p(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}]:[],...Rs(e).map(s=>({repo:s.repo??e.siteRepo??null,file:s.path,line:s.line,excerpt:s.excerpt}))];return zn(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 Rs(e){return e.otherSites??[]}function Pp(e,t){if(!lr(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+Rs(e).length;return $e(e.category)===2&&n<2?`${e.category} needs two quoted sites, found ${n}`:null}function Ec(e,t,n){let o={title:t.title,category:t.category??null,reason:Ps(n)};e.push(o)}function Rp(e,t,n){let o={title:t.title,category:t.category??null,reason:Ps(n)};e.push(o)}function Ap(e,t){return{template:"scope-items",answerFormat:"structureScope",model:Pt,inputs:{scopeRuleId:t.scopeRuleId??"",items:e},limits:{...t.maxTokens===void 0?{}:{maxTokens:t.maxTokens}}}}async function Ic(e,t,n){try{let o=await F(e,Ap(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:Ps(r.reason)}]))}catch(o){return M("scope-items",o,s=>e.rethrow(s)),null}}function Mp(e){return{category:e.category??null,path:e.site?.path??"?",title:e.title,cause:e.cause,excerpt:e.excerpt??"",otherSites:Rs(e).map(t=>({path:t.path,excerpt:t.excerpt??""}))}}function Fp(e,t,n=qn(t)){return{template:"scope-findings",answerFormat:"scope",model:t.qualityConfig?.switches.enabled?t.qualityConfig.models.scope:Pt,inputs:{codeSources:n.sources,codeFiles:n.files,items:e}}}async function Tp(e,t,n,o,s){let i=[];for(let p=0;p<n.length;p+=j)i.push(n.slice(p,p+j));let r=e.CF_PARALLEL_SCOPE_CHECK==="0"?1:o.scopeConcurrency??4,c=await q(i,r,async(p,u)=>{let g=[],h=u+1;for(let f=0;f<=z;f++)try{let m=await F(t,Fp(p,o,s),e),S=vt(m.verdicts,p.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 p of c){for(let[u,g]of p.verdicts)a.set(u,g);l.push(...p.diagnostics)}let d=n.filter(p=>!a.has(p.id)).map(p=>p.id);for(let p of d)l.push(`${p}: no verdict from the scope check; finding kept.`);return{verdicts:a,diagnostics:l,missingIds:d,ran:c.some(p=>p.ran)}}async function $c(e,t,n,o={}){let s=[],i=[],r=[],c=qn(o);for(let[d,p]of n.entries()){let u=Pp(p,e)??$p(p,c.scopes,o.graph);u?Ec(s,p,u):r.push({id:`f${d+1}`,finding:p})}if(r.length===0)return{kept:[],dropped:s,ran:!0,flagged:i};let a=await Tp(e,t,r.map(({id:d,finding:p})=>({id:d,...Mp(p)})),o,c),l=[];return r.forEach(({id:d,finding:p})=>{let u=a.verdicts.get(d);if(!u||u.inScope){l.push(p);return}$s?Ec(s,p,u.reason):(Rp(i,p,u.reason),l.push(p))}),{kept:l,dropped:s,ran:a.ran,flagged:i,...a.diagnostics.length?{diagnostics:a.diagnostics}:{},...a.missingIds.length?{missingIds:a.missingIds}:{}}}function Pc(e,t,n=new Set){if(!t)return 1;let o=e.reduce((i,r)=>i+r.size,0),s=Np(e,n);return Zi(o,s,15e4,4)}function Np(e,t=new Set){return e.filter(n=>t.has(n.path)||_r(n.path)).reduce((n,o)=>n+o.size,0)}function By(e,t){return t>1?Math.min(e,6e4):0}function ax(e,t,n){let o=ae(e).multiPass,s=n?ms(n.repos??[],De(ne(n)),o,e).passes.length:Pc([...t],o),i=Mi(e,s,us(s),_e);return{findings:i.findings,calls:[i.derive,H(e,"scope-findings","scope",Pt,Math.ceil(i.findings/j)*(z+1),_e),...i.check?[i.check]:[]]}}function As(e,t){return J(e,t).sourceNotes&&Array.isArray(t.findingsRaw)&&t.findingsRaw.length>0?"explaining_sources":"structuring"}var cx=async(e,t)=>{t.progress.assertHeld(),t.progress.signal?.throwIfAborted();let{settings:n}=e,{state:o}=e,s=await je(t),i=Se(t.model,s,t.progress.rethrow,t.progress.signal),r=await Sa(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:oe(r.data),clear:[],next:"inspecting"};let w=o.findingCheck,k=o.findingQuality,O=await ws(w.state.result,w.state,w.original,{repos:o.repos??[],fragments:ne(o)},{settings:n,qualityConfig:k.config,codeEvidence:k.codeEvidence,readingSkipped:k.readingSkipped,sawCode:o.sawCode??k.sawCode,secondOpinion:{...y,oneBatch:!0,llm:Se(t.secondOpinionModel??null,s,t.progress.rethrow,t.progress.signal)},onCheckpoint:async _=>t.progress.checkpoint({findingCheck:{...w,state:_},..._.qualityAudit?{findingQuality:{...k,..._.qualityAudit}}:{}})}),v={...r.data,findingCheck:{...w,state:O},...O.qualityAudit?{findingQuality:{...k,...O.qualityAudit}}:{}};return{set:oe(v),clear:[],next:O.qualityAudit?.shadow?.done===!1?"inspecting":As(n,v)}}return{set:oe(r.data),clear:[],next:r.done?As(n,r.data):"inspecting"}}let c=await _c(n,o,{llm:i,load:t.context.loadCodeVerdicts});if(c.pending)return{set:oe(c.data),clear:[],next:"inspecting"};if(o=c.data,!t.model)throw new re("llm","llm gone mid-job");let a=ne(o),l=Ge(a),d=await aa(n,{data:o,graph:l,fragments:a,llm:i,checkpoint:t.progress.checkpoint,progress:t.progress,forLocal:e.execution.forLocal,parallel:Un(n,e.execution)});if(!d.done)return{set:oe(d.data),clear:[],next:"inspecting"};let p=Re(d.findings,Ne(o),Be(d.data),n),u=await $c(n,i,p.findings,{graph:l,qualityConfig:d.data.findingQuality?.config,codeEvidence:ra(d.data,d.plan,d.readByRepo,n),scopeConcurrency:e.execution.scopeConcurrency}),g=u.dropped.length,h=u.flagged.length,f=[...p.warnings,...d.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=ia(d.plan);m&&f.push(m),d.shadowed.length&&f.push(`${d.shadowed.length} file${d.shadowed.length===1?" was":"s were"} not analysed because another repository has a file at the same path: ${d.shadowed.map(y=>`${y.repo}:${y.path}`).join(", ")}`);let S=xn(n)?{sawCode:ca(d.readByRepo)}:{},b=wa(n,{...d.data,...S,...d.data.findingQuality?{findingQuality:{...d.data.findingQuality,...S}}:{},findingsRaw:u.kept,scopeCheck:{dropped:g,ran:u.ran,flagged:h,...u.diagnostics?.length?{diagnostics:u.diagnostics}:{}},readPaths:d.readByRepo,warnings:[...d.data.warnings??[],...f]},u.kept);return{set:oe(b),clear:[],next:b.findingCheck?.state&&!b.findingCheck.state.done?"inspecting":As(n,b)}};var Rt=A.explain,Ms=4,wo=4e4,Rc=15,At=4096,Ac=6e4;function Mc(e,t,n){let o=si(e.site?{...e.site,repo:e.siteRepo??"",excerpt:e.excerpt}:null,e.otherSites).map((l,d)=>({index:d,repo:l.repo??"",path:l.path,line:l.line,excerpt:D(l.excerpt??"",B)})),s=[],i=[],r=(l,d)=>t.repos.find(p=>p.key===l)?.files?.[d],c=l=>{if(s.some(g=>g.repo===l.repo&&g.path===l.path&&g.text===l.text))return;let d=Math.max(0,wo-Buffer.byteLength(JSON.stringify([...s,{...l,text:"",truncated:!0}]))),p=D(l.text,d);for(;p&&Buffer.byteLength(JSON.stringify(p))-2>d;)p=D(p,Math.floor(Buffer.byteLength(p)*.9));if(!p){i.push(`Source notes omitted ${l.repo}:${l.path}: context limit`);return}let u=l.truncated||p!==l.text;s.push({...l,text:p,truncated:u}),u&&i.push(`Source notes context incomplete: ${l.repo}:${l.path}`)};for(let l of o){let d=r(l.repo,l.path);if(d===void 0){i.push(`Source notes file unavailable: ${l.repo}:${l.path}`);continue}let p=l.line===null?null:l.line+l.excerpt.split(`
27
+ `).length-1;c({repo:l.repo,path:l.path,...et(d,l.line,wo,Rc,p)})}let a=new Set;for(let l of o){let d=`${l.repo}
28
+ ${l.path}`;if(a.has(d))continue;a.add(d);let p=r(l.repo,l.path);if(p===void 0)continue;let u=t.repos.find(g=>g.key===l.repo)?.files??{};for(let g of Qn(l.path,p,u))c({repo:l.repo,path:g,...et(u[g],null,wo)})}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:Tn(e.category),sites:o,files:s,diagnostics:i}}var Fs=(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 Lp(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 Fc(e,t){let n=Tn(t.category),o=new Set,s=e.sites.flatMap(a=>{let l=t.sites.find(p=>p.index===a.index),d=Fs(a.meaning);return!l||!Number.isInteger(a.index)||o.has(a.index)||!n.includes(a.role)||!d?[]:(o.add(a.index),[{index:a.index,role:a.role,meaning:d,keyPhrase:a.keyPhrase.trim()&&l.excerpt.includes(a.keyPhrase)?a.keyPhrase:""}])}),i=new Set,r=e.counterEvidence.flatMap(a=>{let l=Fs(a.meaning);if(!Number.isInteger(a.line)||a.line<1||!a.excerpt.trim()||!l)return[];if(!t.files.some(p=>p.repo===a.repo&&p.path===a.path&&Lp(p,a.line,a.excerpt)))return[];let d=JSON.stringify([a.repo,a.path,a.line,a.excerpt]);return i.has(d)?[]:(i.add(d),[{...a,meaning:l}])}).slice(0,2),c=Fs(e.supportNote,280);if(!c)throw new Error("Source notes have no support explanation");return zr.parse({sites:s,support:e.support,supportNote:c,counterEvidence:r})}import{z as jp}from"zod";function Tc(e,t,n){let o=Buffer.byteLength(JSON.stringify(e))+t.templateBytes("explain-sources")+Buffer.byteLength(JSON.stringify(jp.toJSONSchema(Ho)));if(o>Ac)throw new Error("Source notes input exceeds its priced limit");return ie(n,{template:"explain-sources"},"Explain sources",Rt,pe(o),At)}function Dp(e){return{template:"explain-sources",model:Rt,answerFormat:"sourceNotes",inputs:{content:JSON.stringify(e)},limits:{maxTokens:At,thinking:"disabled"}}}async function Bp(e,t,n,o){let s=Mc(n,o,t.tools);Tc(s,t.tools,e);let i=await F(t,Dp(s),e);return Fc(i,s)}async function Nc(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+Ms),c=await q(r,Ms,async l=>{try{if(!t.available)throw new Error("Source notes model unavailable");return{finding:{...l,sourceNotes:await Bp(e,t,l,o)},failed:!1}}catch(d){return M("explain-sources",d,p=>t.rethrow(p)),{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 Lc(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=Ne(t);o=Re(be(t.findingsRaw??[]),c,Be(t),e).findings;let a=ne(t);if(t.sourceNotes&&(!Array.isArray(t.sourceNotes.findings)||!Number.isInteger(t.sourceNotes.cursor)))throw new Error("Unreadable source notes checkpoint");s=await Nc(e,n,o,{repos:r,fragments:a},t.sourceNotes)}catch(r){M("explain-sources",r,u=>n.rethrow(u)),de(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,d=a?c.cursor:0,p=l.length||(Array.isArray(t.findingsRaw)?t.findingsRaw.length:0);s={cursor:p,findings:l.map((u,g)=>g<d?u:{...u,sourceNotes:null}),failures:(a?c.failures:0)+p-d,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 Zx(e,t){return ae(e).sourceNotes?[H(e,"explain-sources","sourceNotes",Rt,t,_e,At)]:[]}var eb=async(e,t)=>{t.progress.assertHeld(),t.progress.signal?.throwIfAborted();let n=await je(t),o=await Lc(e.settings,e.state,Se(t.model,n,t.progress.rethrow,t.progress.signal));return{next:o.done?"structuring":"explaining_sources",clear:[],set:oe(o.done?ka(o.data):o.data)}};function jc(e){let t=e.id.indexOf("#");return e.sourceRef?.repo??(t<0?null:e.id.slice(0,t))}var pn=(e,t)=>JSON.stringify([e,t]),Dc=(e,t)=>e<t?-1:e>t?1:0;function Bc(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=pn(r,c),d=o.get(l);d||(d={repo:r,path:c,agents:new Set},o.set(l,d)),a.forEach(p=>d.agents.add(p))},i=new Map;for(let r of n){let c=jc(r),a=Tr(r),l=pn(c,a),d=i.get(l)??[];d.push(r.id),i.set(l,d);for(let p of r.files??[])s(c,p.path,[r.id]);r.sourceRef&&s(c,r.sourceRef.path,[r.id]),Ue(r)&&s(c,Lr(a,c),[r.id]);for(let p of r.sourcePaths??[])s(c,p,[r.id])}for(let r of e.nodes)r.kind==="tool"&&r.sourceRef&&s(jc(r),r.sourceRef.path,[]);for(let r of t){let c=i.get(pn(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)=>Dc(r.repo??"",c.repo??"")||Dc(r.path,c.path))}function Kc(e,t){if(e===null)return[];let n=new Set(e.map(s=>s.path)),o=new Set(e.map(s=>pn(s.repo,s.path)));return t.flatMap((s,i)=>s.sitePath?(s.siteRepo===null?n.has(s.sitePath):o.has(pn(s.siteRepo,s.sitePath)))?[]:[i]:[])}var Mt=e=>({paths:e.slice(0,2e3),omitted:Math.max(0,e.length-2e3)});function Kp(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 qc(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:Mt(e.plan?.core??[]),parts:(e.plan?.passes??[]).map(s=>({own:Mt(s.own)})),skipped:Mt(e.plan?.skipped??[]),readByRepo:Object.fromEntries(Object.entries(e.readByRepo).map(([s,i])=>[s,Mt(i)])),agents:e.graph.nodes.filter(s=>s.kind==="agent").map(s=>({id:s.id,label:s.label??s.id,loaded:Mt([...o.get(s.id)?.loaded??[]]),notRead:Mt([...o.get(s.id)?.notRead??[]])})),...Kp(e.passFindings)}}function Hc(e){return e.CF_RECALL_SIGNALS!=="0"}import{createHash as qp}from"node:crypto";function fn(e,t){return e==="finding"?Ur(t):qp("sha256").update(Ve(t)).digest("hex")}function Uc(e,t,n,o){let s=fn(e,t);return Gc({target:e,index:n,fingerprint:s},o)}function Gc(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=Kt(o[0]);return s?{status:"accepted",wording:s}:n}function Ts(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(p=>p.key===c.key),d=l.length===1&&l[0].target===c.kind?l[0]:null;return[{key:c.key,pair:a,position:d}]}),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?Gc(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 Xc(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,d=c.target==="structure"?t[c.index]:void 0;if((l?Uc("finding",l,c.index,n):d?Uc("structure",d,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 Wc({state:e,settings:t}){let n=e.repos??[],o=[],s=ne(e).map(({repoKey:b,fragment:y},w)=>{let k=Hr(y,n[w]?.files??{},b,t);return o.push(...k.warnings),{repoKey:b,fragment:k.fragment,files:k.nodes}}),i=Ge(s),{findings:r,warnings:c}=Re(be(e.findingsRaw??[]),Ne(e),Be(e),t),a=e.structuresRaw??[],l=St(t)?e.findingHeadlines:void 0,d=l?.done?l.version===2?l.rows:l.rows.map(b=>({...b,target:"finding"})):[],p=Xc(r,a,d,St(t)?l?.version===2?l.diagnostics:e.findingHeadlineDiagnostics:void 0),u=p.rows,g=e.readPaths??Object.fromEntries(n.map(b=>[b.key,Object.keys(b.files??{})])),h;if(Hc(t)){let b=Bc(i,e.findingQuality?.codeEvidence),y=e.inspectPlan?.passes.map((w,k)=>e.passResults?.[k]?.findings??e.passFindings?.[k]??[])??e.passFindings??[];h={log:qc({plan:e.inspectPlan??null,readByRepo:g,loaded:b,graph:i,passFindings:y.filter(w=>Array.isArray(w))}),unreachedIndexes:b===null?null:Kc(b,r.map(w=>({siteRepo:w.siteRepo??null,sitePath:w.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=Et(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}:{},...p.diagnostics?{findingHeadlineDiagnostics:p.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 Hp}from"node:crypto";function Vc({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 zc(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}`,...Vc(n)}))],positions:[...e.map((n,o)=>({key:`f${o}`,target:"finding",index:o,fingerprint:fn("finding",n)})),...t.map((n,o)=>({key:`s${o}`,target:"structure",index:o,fingerprint:fn("structure",n)}))]}}function Jc(e,t){return Hp("sha256").update(Ve({batch:e,requestIdentity:t})).digest("hex")}import{z as Gp}from"zod";function Ns(e){let t=e.trim();return/[.!?…。!?][\u0022'\u201d\u2019)\]]*$/u.test(t)?t:`${t}.`}function Qc(e,t,n){return t.kind==="structure"?`${Ns(e)} ${Ns(t.structure.title)}`:Up(e,t,n)}function Up(e,t,n){let o=e.trim();if(!Mn(t.category))return o;let s=[...t.site?[t.site]:[],...t.otherSites],i=new Map;for(let l of s){let d=i.get(l.path)??new Set;d.add(l.repo),i.set(l.path,d)}let r=new Set,c=s.flatMap(l=>{let d=JSON.stringify([l.repo,l.path]);return r.has(d)?[]:(r.add(d),[i.get(l.path).size>1&&l.repo?`${l.repo}:${l.path}`:l.path])}),a=t.question?.trim()||n.trim();return`${Ns(o)} ${a}${c.length?` (${c.join(", ")})`:""}`}var Yc=e=>e.match(/\d+(?:[.,]\d+)*/g)??[];function lt(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 Ls(e,t){let n=ir.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=lt(o.rows,o.rejected,o.diagnostics.unexpectedRows);return i.diagnostics.requested===t.length&&Ve(i.diagnostics)===Ve(o.diagnostics)?o:null}function So(e,t,n){let o={version:qe,rows:[],rejected:[],diagnostics:{requested:t.length,accepted:0,rejected:0,unexpectedRows:0,byReason:{}}},s=(d,p)=>{o.rejected.push({key:d,reason:p})},i=zo.safeParse(e),r=new Map,c=new Set(t.map(d=>d.key)),a=i.success?i.data.rows:[];for(let d of a)r.set(d.key,(r.get(d.key)??0)+1),c.has(d.key)||o.diagnostics.unexpectedRows++;let l=new Map(a.map(d=>[d.key,d]));for(let d of t){let p=d.key,u=l.get(p);if(!i.success){s(p,"malformed_answer");continue}if(!u){s(p,"missing_row");continue}if(r.get(p)!==1){s(p,"duplicate_key");continue}if(u.headline===null&&u.ifLeft===null){s(p,"model_declined");continue}if(!u.headline?.trim()||!u.ifLeft?.trim()){s(p,"incomplete_pair");continue}let g=Kt(u);if(!g){s(p,"invalid_wording");continue}let h=new Set([d.excerpt??"",...d.otherSites.map(m=>m.excerpt)].flatMap(Yc));if([g.headline,g.ifLeft].some(m=>Yc(m).some(S=>!h.has(S)))){s(p,"unsupported_number");continue}if(Mn(d.category)){if(!d.site||!d.excerpt?.trim()||!d.otherSites.some(m=>m.excerpt.trim())){s(p,"insufficient_question_evidence");continue}if([d.site,...d.otherSites].some(m=>!m.path.trim())||!(d.question?.trim()||n.trim())){s(p,"invalid_source");continue}}if(d.kind==="structure"&&!d.structure.title.trim()){s(p,"invalid_source");continue}let f=Qc(g.headline,d,n);if(!Kt({...g,headline:f})){s(p,"invalid_wording");continue}o.rows.push({key:p,headline:f,ifLeft:g.ifLeft})}return lt(o.rows,o.rejected,o.diagnostics.unexpectedRows)}var un=48e3;function Vb(e,t){return e?[ie(t,{template:"finding-headlines"},"Finding headlines",zt,pe(un),Jt)]:[]}async function Zc(e,t,n){let o=es(t.evidence),s=e.tools.headlinePlan(o),i=Jc(t,{prompt:e.tools.promptVersion(o.template),model:o.model,limits:o.limits,maxInputBytes:un,request:s.identity,compositionVersion:2,resultVersion:qe}),r=a=>{let l=Ts(t,a.rows);if(l.rejected.length){let d=new Set(l.rejected.map(p=>p.key));a=lt(a.rows.filter(p=>!d.has(p.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(lt([],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(lt([],[]));if(!e.available)return c("model_unavailable");if(s.inputBytes>un)return c("over_input_allowance");try{let a=await F(e,o,{},{maxInputBytes:un}),l=s.relayValidated?Ls(a,t.evidence):So(a,t.evidence,s.fallbackQuestion??"");return l?r(l):c("incompatible_relay_result")}catch(a){return e.rethrow(a),c(a instanceof Ei||a instanceof Gp.ZodError?"malformed_answer":"provider_failure")}}function mO(e){return St(e)?[H(e,"finding-headlines","findingHeadlines",zt,1,_e,Jt)]:[]}var hO=async(e,t)=>{if(t.progress.assertHeld(),t.progress.signal?.throwIfAborted(),!St(e.settings))return{next:"persisting",set:{},clear:[]};let n=await je(t),o=Se(t.model,n,a=>{t.progress.signal?.throwIfAborted(),t.progress.assertHeld(),t.progress.rethrow?.(a)},t.progress.signal),{findings:s,structures:i}=Wc(e),r=zc(s,i),c=await Zc(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 yo(e){let t=e,n=t.expectedOutcome?.trim();return{motivation:t.motivation??[],outcomes:t.outcomes??(n?[{improvement:n,measurement:""}]:[])}}import{createHash as nf}from"node:crypto";import{basename as ml}from"node:path";var js=["split_monolith","single_source","fold_patches","extract_subagent","merge_subagents","move_rule","move_tool","reorder"],Ds=["create","shrink","edit","delete"],Bs=["system prompt","soul","knowledge","skill","config","tools","mcp","template","reference","log","code"],Ks=["always","on_demand","never"],qs=["move","fold_into","remove_duplicate","remove_superseded"],Hs=["pointer","handoff","reference_update"];var Us=/^ {0,3}(`{3,}|~{3,})/,el=/^(#{1,6})\s+\S/,Gs=/^(\s*)([-*+]|\d+[.)])\s+/,Xs=/^\s*\|/;function X(e){let t=e.split(`
31
+ `);return t.length>1&&t[t.length-1]===""&&t.pop(),t}function le(e,t){let n=X(t),o=[],s=(c,a,l,d=0)=>o.push({kind:c,start:a+1,end:l+1,level:d,text:n[a]}),i=0,r=Sr(t,Ut(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=Us.exec(c);if(a){let u=i+1;for(;u<n.length;){let h=Us.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=el.exec(c);if(l){s("heading",i,i,l[1].length),i++;continue}if(Xs.test(c)){let u=i;for(;u+1<n.length&&Xs.test(n[u+1]);)u++;s("table",i,u),i=u+1;continue}let d=Gs.exec(c);if(d){let u=d[1].length,g=i;for(;g+1<n.length&&n[g+1].trim()!==""&&!Gs.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 p=i;for(;p+1<n.length&&n[p+1].trim()!==""&&!Us.test(n[p+1])&&!el.test(n[p+1])&&!Xs.test(n[p+1])&&!Gs.test(n[p+1]);)p++;s("paragraph",i,p),i=p+1}return o}function Xp(e){return e.kind==="frontmatter"||e.kind==="fence"||e.kind==="table"||e.kind==="list_item"}function xo(e,t,n){let o=t,s=n,i=!0;for(;i;){i=!1;for(let r of e){if(!Xp(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 Wp=e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),tl=(e,t)=>new RegExp(`(^|[\\s\`'"(])${Wp(t)}($|[\\s\`'"),.:;])`).test(e);function Vp(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 ol=(e,t,n)=>e.find(o=>o.path===t&&n>=o.startLine&&n<=o.endLine)??null;function Ws(e,t,n){let o=ol(e,t,n);return o?o.disposition==="move"||o.disposition==="remove_superseded"?o.to:o.into?Ws(e,o.into.path,o.into.line):o.to:t}function dt(e){return e===""||e.includes(`
32
+ `)||e.includes(": ")||e.endsWith(":")||/^[\s"'[\]{}#>|*&!%@`,]/.test(e)||/\s$/.test(e)?JSON.stringify(e):e}var zp=e=>{let t=/^(#{1,6})\s+(.*)$/.exec(e);return t?t[2].trim():null};function nl(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=le(e,t.lines.join(`
33
+ `)).filter(a=>a.kind==="heading"),c=r.findIndex(a=>zp(a.text)===n.trim());if(c>=0){let a=r[c],l=t.lines.length;for(let d=c+1;d<r.length;d++)if(r[d].level<=a.level){l=r[d].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 sl(e,t){let n=new Set(t.ticked),o=Vp(t.body,n),{files:s}=t.body,i=[],r=[],c=[],a=new Map,l=f=>X(t.contents[f]??""),d=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,w)=>{ol(o,f,w+1)||(m.lines.push(y),m.prov.push(`${f}:${w+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?d(f.path):{lines:[],prov:[],created:!0});if(m.created&&f.frontmatter){let S=["---",`name: ${dt(f.frontmatter.name)}`,`description: ${dt(f.frontmatter.description)}`,...f.frontmatter.tools.length?[`tools: ${kt(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);nl(e,m,S.heading,b,b.map((y,w)=>`${S.path}:${S.startLine+w}`))}a.set(f.path,m)}let p=new Set;for(let f of o)f.into&&(f.disposition==="fold_into"||f.disposition==="move")&&p.add(Ws(o,f.into.path,f.into.line));let u=t.body.reorder;u&&p.add(Ws(o,u.path,u.startLine));for(let f of t.childSites)p.add(f.host);for(let f of p)!a.has(f)&&t.contents[f]!=null&&a.set(f,d(f));let g=[];t.body.additions.forEach((f,m)=>{if(!a.has(f.path)&&t.contents[f.path]!=null&&a.set(f.path,d(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=>tl(f.text,S)))){if(f.kind==="reference_update"){g.push(m),p.add(f.path);return}nl(e,a.get(f.path),f.heading,[f.text],[`addition:${m}`])}});let h=[...p].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 bo(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 rl}from"node:path";var Jp=/(read|open|cat|file)/i;function Qp(e){return e.some(t=>Jp.test(`${t.name} ${t.description??""}`))}function il(e,t){if(!e)return[];let n=e.files.find(i=>i.role==="tools"),o=[];if(n)try{o=jt(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 Vs(e){return Qp(e)?"on_demand":"never"}function al(e,t){return t.existing?t.existing.mode:e.role==="skill"?xe(e.path,{nested:!0})?"on_demand":"never":e.role==="log"?"never":e.role!=="template"&&e.role!=="reference"?"always":t.prompt?.frontmatter?Vs(t.prompt.frontmatter.tools.map(n=>({name:n}))):Vs(il(t.node,t.files))}var Yp=/sent from (\S+:\d+)\.?\s*$/;function cl(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),d=(h,f,m=()=>!0)=>{for(let S of l(h)){let y=(s[S]??"").split(`
37
+ `).findIndex(w=>w.includes(f)&&m(w));if(y>=0)return`${S}:${y+1}`}return null},p=h=>Pe(h,o)??h,u=new Map,g=[];for(let h of Object.keys(s).filter(f=>_n(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(k=>k.id===f.nodeId)?.desc??"",w=Yp.exec(y)?.[1];b=w?`system prompt in code, sent from ${w}`:"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=rl(h),y=d(f.nodeId,b,w=>/\b(not|never)\b.*\b(loaded|read)\b/i.test(w));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"?jt(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=wt(e,rl(h),s[h]),y=b.description??null;r.push(...(b.warnings??[]).map(w=>`${n}: ${h}: ${w}`)),g.push({...S,mode:"on_demand",via:y?`skill trigger \u2014 description: ${y}`:"skill trigger",evidence:"",evidenceKind:"skill-frontmatter"});break}default:{let b=d(f.nodeId,p(h))??(f.skill?`skill ${f.skill}`:""),y=i.nodes.find(w=>w.id===f.nodeId)??null;if(Vs(il(y,s))==="on_demand")g.push({...S,mode:"on_demand",via:"named by a file the unit loads",evidence:b});else{let w=u.get(f.nodeId)??{label:f.label,paths:[]};w.paths.push(h),u.set(f.nodeId,w),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 Oo(e,t,n){return e.find(o=>o.repo===t&&o.path===n)??null}var Zp="<!-- counterfact: proposed file -->";function Ft(e,t){return e.startsWith(`${t}#`)?e.slice(t.length+1):null}function ll(e,t,n){if(Ut(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 dl(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 ef(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 fl(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: ${dt(c.frontmatter.name)}
49
+ description: ${dt(c.frontmatter.description)}
50
+ ${c.frontmatter.tools.length?`tools: ${kt(e,c.frontmatter.tools)}
51
+ `:""}---
52
+ `:"";r[c.path]=`${a}${Zp}
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=tf(e,r,{tool:c.tool,fromPath:c.fromPath??hn(o,n,c.fromUnit,s),toPath:c.toPath??hn(o,n,c.toUnit,s)});a&&i.push(a)}return r}function hn(e,t,n,o){let s=Ft(n,o);return s?ef(e,s):t.files.find(i=>i.unit===n&&i.role==="system prompt")?.path??null}function tf(e,t,n){let{tool:o,fromPath:s,toPath:i}=n;if(Ut(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")?dl(t[s],r=>r.filter(c=>c.name!==o)):ll(e,t[s],r=>r.filter(c=>c!==o))),i&&t[i]!=null&&(t[i]=i.endsWith(".json")?dl(t[i],r=>r.some(c=>c.name===o)?r:[...r,{...n.object??{},name:o}]):ll(e,t[i],r=>r.includes(o)?r:[...r,o])),null}function ul(e,t){let n=ct(e,ln(e,t));return An(n.fragment,t.repoKey).fragment}var pl=e=>e.files.map(t=>t.path).sort().join(`
56
+ `),mn=(e,t)=>e.nodes.find(n=>n.files.some(o=>o.path===t))??null;function vo(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)?pl(i.get(m))!==pl(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])),d=new Map(t.edges.map(m=>[a(m),m])),p=[...[...d].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])=>!d.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?mn(t,m)??mn(e,m):mn(e,m)??mn(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"),w,k={};if(m.action==="delete")w="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?(w="moved",k={fromNode:_,fromPath:O[0]}):w="added"}else S.length?w="grown":n.reorder?.path===m.path?w="reordered":b.length||m.action==="shrink"?w="shrunk":w="grown";return{path:m.path,role:m.role,node:y,change:w,...k,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=mn(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(Ft(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:p,files:g,tools:f}}var hl=["ordering","reliability","coverage","cost","safety","correctness"],gn=["low","medium","high","critical"];function zs(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 Ke=(e,t)=>e.includes(t);function of(e){if(!Ke(js,e.subKind))return`sub-kind "${e.subKind}" is not one of ${js.join(", ")}`;if(!Ke(hl,e.kind))return`impact "${e.kind}" is not one of ${hl.join(", ")}`;if(e.reorders.length>1)return"more than one reorder";let t=[];for(let r of e.files){if(!Ke(Ds,r.action))return`${r.path}: action "${r.action}" is not one of ${Ds.join(", ")}`;if(!Ke(Bs,r.role))return`${r.path}: role "${r.role}" is not one of ${Bs.join(", ")}`;if(!Ke(Ks,r.loadMode))return`${r.path}: load mode "${r.loadMode}" is not one of ${Ks.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(!Ke(qs,r.disposition))return`${r.path}:${r.startLine}-${r.endLine}: disposition "${r.disposition}" is not one of ${qs.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(!Ke(Hs,r.kind))return`addition to ${r.path}: kind "${r.kind}" is not one of ${Hs.join(", ")}`;o.push({path:r.path.trim(),text:r.text,kind:r.kind,heading:r.heading||null})}let s=e.reorders[0],i=Ke(gn,e.severity)?e.severity:"medium";return{body:{...yo(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 sf(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=of(r);if(typeof c=="string"){i(r.title,c);continue}let{body:a}=c,l=c.children,d=`proposal "${a.title}"`;if(a.files.length>Qo){i(a.title,`${a.files.length} files (cap ${Qo})`);continue}if(a.segments.length>Yo){i(a.title,`${a.segments.length} segments (cap ${Yo})`);continue}let p=zs(a),u=new Set(a.files.filter(x=>x.action==="create").map(x=>x.path)),g=p.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]??p[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=>vn(x)?`${x} is code \u2014 the structural pass moves instructions only`:_n(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)?se(h.files[x.path],x.excerpt):null;E==null?n.push(`${d}: evidence at ${x.path} is not a quote from the file \u2014 dropped`):b.push({...x,line:E})}a.evidence.length>4&&n.push(`${d}: ${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)),w=null;for(let x of a.segments){let E=h.files[x.path];if(E==null){w=`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){w=`segment ${x.path}:${x.startLine}-${x.endLine} is outside the file`;break}let $=xo(le(e,E),x.startLine,x.endLine);if($.snapped&&(n.push(`${d}: 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){w=`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){w=`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)){w=`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"){w=`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))){w=`segment ${x.path}:${x.startLine}-${x.endLine} is remove_superseded but names no child`;break}}if(!w){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){w=`overlapping segments in ${x[E].path}`;break}}if(!w){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&&(w=`segment ${E.path}:${E.startLine}-${E.endLine} folds into a line this proposal removes`)}if(w){i(a.title,w);continue}let k=new Set,O=bo(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(k.has(x.ref))return!1;k.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(`${d}: 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(`${d}: 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=le(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=>zs(x.body).some(E=>p.includes(E)));if(_){i(a.title,`shares ${zs(_.body).find(x=>p.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)=>gn.indexOf(E)>gn.indexOf(x)?E:x):gn[Math.min(gn.indexOf(a.severity),1)],s.push({repo:h.key,body:a,children:l})}for(let r of s.splice(Wt))i(r.body.title,`over the cap of ${Wt} proposals`);return{kept:s,warnings:n,dropped:o}}var rf=/\b(never|always|must|don't|do not)\b/i,af=/^\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 cf(e){return rf.test(e)||af.test(e)}function Js(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 lf(e,t){let n=pr("",t),o=Pe(e.path,t)??e.path,s=o.startsWith(".claude/")?".claude/":"",i=Ee(e.frontmatter?.name||ml(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/${ml(o)}`;default:return`${n}${o}, with a pointer from a file the agent always loads`}}function gl(e,t){let n=sf(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,d=t.repos.find(k=>k.key===l),p=He(d.root),u=t.fragments.find(k=>k.repoKey===l)?.fragment;if(!u){r(a.title,`no architecture graph for ${l}`);continue}let g=k=>`${l}#${k}`,h=k=>u.nodes.find(O=>O.id===Ft(k,l))??null;for(let k of a.toolMoves)k.fromPath=hn(u,a,k.fromUnit,l),k.toPath=hn(u,a,k.toUnit,l);let f=a.toolMoves.find(k=>!k.fromPath||!k.toPath);if(f){r(a.title,`cannot find the tool list of ${f.fromPath?f.toUnit:f.fromUnit}`);continue}let m=ul(e,{repoKey:l,root:p,agentConfigurations:d.agentConfigurations,files:fl(e,d.files,a,u,l,o)}),S=null;for(let k of a.files){if(k.action==="delete"||k.loadMode==="never"||k.action!=="create"&&k.action!=="edit")continue;let O=m.nodes.find(_=>_.files.some(I=>I.path===k.path));if(!O){S=`The agent would not load ${k.path} \u2014 put it at ${lf(k,p)}.`;break}let v=Ft(k.unit,l);if(v&&O.id!==v){S=`${k.path} would attach to ${g(O.id)}, not ${k.unit}`;break}if(!v&&u.nodes.some(_=>_.id===O.id)&&k.role==="system prompt"){S=`${k.path} would not be a new sub-agent`;break}if(!v&&k.role==="system prompt"&&!m.edges.some(_=>_.kind==="delegates"&&_.to===O.id)){S=`${k.path} would not be a sub-agent anyone delegates to`;break}}if(!S)for(let k of a.toolMoves){let O=Ft(k.toUnit,l)??m.nodes.find(_=>_.files.some(I=>a.files.some(x=>x.unit===k.toUnit&&x.path===I.path)))?.id;if(!m.nodes.find(_=>_.id===O)?.tools.some(_=>_.label===k.tool)){S=`${k.tool} would not reach ${k.toUnit}`;break}}if(S){r(a.title,S);continue}for(let k of a.files){if(k.action==="delete"||k.action==="shrink")continue;let O=k.action==="create"?null:Oo(t.loadModes,l,k.path),v=al(k,{existing:O,node:h(k.unit),files:d.files,prompt:a.files.find(_=>_.unit===k.unit&&_.role==="system prompt")});if(v!=="unknown"&&v!==k.loadMode){S=`declares ${k.path} ${k.loadMode}, but the conventions make it ${v}`;break}if(k.loadMode==="on_demand"&&k.role==="skill"&&k.action==="create"){let _=k.frontmatter?.description??"";if(!_||_.length>1024){S=`skill ${k.path} needs a description of at most 1024 characters to be triggered`;break}}if(k.loadMode==="on_demand"&&k.role!=="skill"&&!O){let _=I=>Oo(t.loadModes,l,I)?.mode==="always"&&Oo(t.loadModes,l,I)?.unit===k.unit||a.files.some(x=>x.path===I&&x.unit===k.unit&&x.loadMode==="always");if(!a.additions.some(I=>I.kind==="pointer"&&I.text.includes(k.path)&&_(I.path))){S=`${k.path} is read only on demand, but nothing the agent always loads points to it`;break}}}if(!S)for(let k of a.segments){let O=a.files.find(I=>I.path===k.to);if(k.disposition!=="move"||O?.loadMode!=="never"||k.into)continue;let _=(d.files[k.path]??"").split(`
57
+ `).slice(k.startLine-1,k.endLine).findIndex(cf);if(_>=0){S=`moves a rule into a file the agent never reads (${k.path}:${k.startLine+_} \u2192 ${k.to})`;break}}if(S){r(a.title,S);continue}let y=sl(e,{body:a,ticked:bo(a),contents:d.files,childSites:[]}).outputs.map(k=>({path:k.path,bytes:Buffer.byteLength(k.content,"utf8")})).find(k=>k.bytes>Jo);if(y){r(a.title,`would assemble ${y.path} at ${y.bytes} bytes (cap ${Jo})`);continue}let w=Object.fromEntries(Js(a,d.files).map(k=>[k,nf("sha256").update(d.files[k]).digest("hex")]));i.push({...c,sourceHashes:w,delta:vo(u,m,a,l)})}return{structures:i,warnings:o,dropped:s}}var df=["low","medium","high","critical"];function _o(e){return e.map((t,n)=>`f${n+1}`)}function Qs(e,t){let n=_o(e),o=e.flatMap((i,r)=>[i.site,...i.otherSites??[]].some(c=>c&&Dt(c.path,t))?[]:[{...i,ref:n[r]}]),s=e.map(i=>({title:i.title,severity:df.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 Ys=A.generate;function pf(e,t){return{template:"derive-structure",model:Ys,answerFormat:"structures",limits:{effort:"high"},inputs:{maxStructures:String(Wt),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:Ae(o),markdown:s,outline:s?le(e,o).map(i=>({...i,text:i.text.slice(0,60)})):[]}})}}}async function kl(e,t,n){return(await F(t,pf(e,n),e)).structures}async function Co(e,t,n,o={}){let s=o.enforce??$s;if(t.length===0)return{kept:[],dropped:[],flagged:[],ran:!0};let i=await Ic(e,t.map(l=>({subKind:l.body.subKind,title:l.body.title,cause:l.body.cause,evidence:l.body.evidence,resolves:l.children.map(d=>n[Number(d.ref.slice(1))-1]?.title??d.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,d)=>{let p=i.get(d);if(p.inScope){r.push(l);return}let u={title:l.body.title,reason:p.reason};s?c.push(u):(a.push(u),r.push(l))}),{kept:r,dropped:c,flagged:a,ran:!0}}function ff(e,t,n,o=15e4){let s=new Set(t.flatMap(l=>[l.site?.path,...(l.otherSites??[]).map(d=>d.path)]).filter(l=>!!l)),i=l=>e.has(l)?0:s.has(l)?1:2,r=Object.keys(n).sort((l,d)=>i(l)-i(d)||n[l].length-n[d].length||(l<d?-1:1)),c={},a=0;for(let l of r)i(l)>0&&a+n[l].length>o||(c[l]=e.has(l)?fe(n[l]):n[l],a+=c[l].length);return c}function wl(e,t,n,o,s={}){return o?ff(V(t),n,ee(s,tn(e),t)):Jn(e,t,void 0,new Set,void 0,{...s,CF_READING_PRIORITY:"0"}).files}function Sl(e){let t=_o(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 yl(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 uf}from"node:path";function Eo(e,t,n=1){let o=le(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 xl(e,t,n=1){let o=Eo(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 bl(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=jt(i).tools}catch{}let c=[...r,...Mr(i).tools,...Fr(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 vl(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 _l(e,t){if(!Zs(e).some(o=>o.id===t))return null;let n=vl(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 Cl(e,t){return Zs(t.graph).map(n=>hf(e,{...t,unitId:n.id}))}function Ol(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(d=>d.role==="reference"&&(d.label===i||d.path.startsWith(uf.dirname(s.path)+"/"))).map(d=>d.path).sort(),c=[s.path,...r],a=c.map(d=>n[d]??"").join(`
58
+ `),l=d=>d.filter(p=>Ye(a,{name:p,key:p,paths:[],bytes:0}));return{name:i,path:s.path,description:wt(e,s.path,n[s.path]??"").description?.trim()||"no description",bytes:c.reduce((d,p)=>d+Buffer.byteLength(n[p]??""),0),references:r,tools:l(t.tools.map(d=>d.label)),skills:l(o.flatMap(d=>d.label&&d.label!==i?[d.label]:[]))}}).sort((s,i)=>s.name.localeCompare(i.name))}function mf(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:Ae(s).split(`
60
+ `).slice(i-1,r).join(`
61
+ `),sections:Eo(e,c,i)}})}function hf(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=vl(n,i.id),c=Ol(e,i,o),a=mf(e,i,o);return{agent:{id:i.id,name:i.label,description:i.desc,tools:i.tools.map(l=>l.label)},skills:c,tools:bl(e,i,o).map(l=>({...l,skills:c.filter(d=>d.tools.includes(l.name)).map(d=>d.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(d=>d.label),skills:Ol(e,l,o)})),prompt:a[0]??null,prompts:a,knowledge:i.files.filter(l=>l.role==="knowledge").map(l=>({path:l.path,sections:Eo(e,o[l.path]??"")})),open:t.open.map(l=>({...l,frozen:[...l.frozen],declined:[...l.declined],files:[...l.files]})),findings:yl(t.findings??[],t.repoKey,n.nodes.filter(l=>r.has(l.id)).flatMap(l=>l.files))}}function Io(e,t){return(t.repos??[]).flatMap((n,o)=>{let s=ts(t,o);return Cl(e,{graph:s,files:n.files??{},open:t.openStructures??[],repoKey:n.key,findings:t.splitFindingsPriced?t.shapeFindings??[]:[]}).filter(i=>!Ue(i.agent)).map(i=>({repo:n,graph:s,inventory:i}))})}function El(e){return e.findings.length>0||e.skills.length>=8||e.subAgents.length>=3||e.tools.length>=20}var er=A.generate;function Il(e){return{template:"derive-shape",model:er,answerFormat:"shape",limits:{effort:"high"},inputs:{inventoryData:e,maxSubAgents:String(Vt),minSkills:String(Kn)}}}function Vv(e,t){return e.tools.analysisRequest(Il(t))}function $l(e,t){return e.tools.validateShapeInput(t),F(e,Il(t))}function Pl(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(d=>JSON.stringify([l.id,d.name,d.path]))));for(let l of e.subAgents){let d=o.filter(p=>p.label===l.name);if(d.length!==1||n.edges.filter(p=>p.kind==="delegates"&&p.from===r.id&&p.to===d[0].id).length!==1)return`sub-agent ${l.name} would not load once with a handoff from ${t.agent.name}.`;for(let p of l.skills)c.set(p,d[0].id)}for(let l of t.skills){let d=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}))),p=e.frontDoor.skills.includes(l.name);if(d.length!==1||d[0].node!==c.get(l.name)||(p?d[0].path!==l.path:d[0].path===l.path))return`skill ${l.name} would not load once on its intended owner at its ${p?"original":"new"} path.`}for(let l of t.subAgents){let d=o.find(p=>p.id===l.id&&p.label===l.name);if(!d||!s.has(d.id))return`existing sub-agent ${l.name} would no longer load.`;for(let p of l.skills)if(!d.files.some(u=>u.role==="skill"&&u.label===p.name&&u.path===p.path))return`existing skill ${p.name} would no longer load on ${l.name}.`}return null}function Rl(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 d=n==="prompt"?o.prompts.find(h=>h.path===r):null,p=d?.startLine??1,u=d?.endLine??X(s[r]).length;if(!Number.isInteger(c)||!Number.isInteger(a)||c<p||a<c||a>u)return i(`${n} section ${r}:${c}-${a} is outside its file or prompt span.`);let g=xo(le(e,s[r]),c,a);return g.start<p||g.end>u?i(`${n} section ${r} snaps outside its prompt span.`):d&&xl(e,d.text,d.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 $o=(e,t)=>e.path===t.path&&e.startLine<=t.endLine&&t.startLine<=e.endLine,N=e=>({shape:null,warnings:[`Split check discarded: ${e}`]});function Al(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>Vt)return N(`a split needs 1\u2013${Vt} 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))),d=new Set,p=[],u=new Set,g=[];for(let f of t.subAgents){if(f.skills.length<Kn&&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(;d.has(S)||l.has(S);)S=`${m}-${b++}`;d.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:se(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 w=[],k=[];for(let[O,v,_]of[["prompt",f.promptSections,w],["knowledge",f.knowledgeSections,k]])for(let I of v){let x=Rl(e,I,O,o,s);if(x.error)return N(x.error);let E=x.section;if(O==="prompt"){if(p.some(C=>$o(E,C)))return N(`prompt section ${E.path}:${E.startLine}-${E.endLine} is placed twice.`);p.push(E)}else if(k.some(C=>$o(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:w,knowledgeSections:k,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=>$o(b,m))||g.some(b=>b!==f&&b.knowledgeSections.some(y=>$o(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=Pl(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 Ml}from"node:path";function kn(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(`${Or}/`)),r=`${s}${vr[i?0:1]}`,c=`${r}/${e}/skills/${t}`;return{agent:`${r}/${e}.md`,folder:c,skill:`${c}/SKILL.md`}}function Po(e,t,n,o){return e.subAgents.flatMap(s=>s.skills.flatMap(i=>{let r=t.skills.find(l=>l.name===i),c=Ml.dirname(r.path),a=kn(s.name,Ml.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 gf}from"node:path";var tr=e=>e.replace(/(?<!\.)[.!]$/,""),kf=e=>[...e.matchAll(/\bmcp__[^\s`"'()[\]{},;:<>]+/g)].map(t=>tr(t[0])),Fl=(e,t)=>Ye(e,{name:t,key:t,paths:[],bytes:0});function Tl(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(gf.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=kf(c);if(l.some(f=>!a.has(f))||t.tools.some(f=>!a.has(f)))return null;let d=new Set(l.map(f=>f.slice(0,f.lastIndexOf("__")+2))),p=f=>{if(a.has(f))return f;let m=[...a].filter(y=>y.endsWith(`__${f}`)),S=m.filter(y=>d.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)Fl(c,f)&&u.add(f);let g=new Set([...a].flatMap(f=>/^mcp__.+__(.+)$/.exec(f)?.[1]??[]));for(let f of g){if(!Fl(c,f))continue;let m=p(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=>tr(f[0])),...[...c.matchAll(/\b(?:call|invoke)\s+(?:the\s+)?(?:tool\s+)?`?([\w*?.-]+)/gi)].map(f=>tr(f[1]))];for(let f of h){let m=p(f);if(!m)return null;u.add(m)}return t.tools.length?[...t.tools]:u.size?[...u].sort():null}function Ro(e,t,n,o,s={}){let i={...o},r=te(e,Object.keys(o),s.root);for(let c of t.subAgents){let a=Tl(e,c,n,o);i[kn(c.name,"",r).agent]=["---",`name: ${c.name}`,`description: ${dt(c.description.replace(/\s+/g," "))}`,...a===null?[]:[`tools: ${a.length?kt(e,a):"[]"}`],"---",c.job].join(`
64
+ `)}for(let c of Po(t,n,o,r))delete i[c.from],i[c.to]=o[c.from];return i}function wf(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 Nl(e,t){return e.split?{...t,files:t.files.flatMap(n=>{if(n.change!=="shrunk"&&n.change!=="grown")return[n];let o=wf(e,n.path);return o==="grown"?[{...n,change:o}]:o==="unchanged"?[]:[n]})}:t}import{createHash as yf}from"node:crypto";var Ll=e=>e.replace(/\s+/g," ").trim().replace(/[.!?]+$/,"").replace(/^./,t=>t.toLowerCase());function jl(e,t){let n=e.frontDoor.name??t,o=e.subAgents.map(s=>Ll(Sf(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: ${Ll(e.frontDoor.job)}.${o.length?` Each helper gets its own skills and rules, and ${n} hands work to it.`:""}`}}function Sf(e){return(e.name.replace(/[-_]/g," ").replace(/\s+/g," ").trim()||e.job.trim()).replace(/^./,n=>n.toUpperCase())}function Dl(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=te(e,Object.keys(r),c),l=Po(t,n,r,a),d=w=>kn(w,"",a).agent,p=n.agent.name.replace(/^./,w=>w.toUpperCase()),u=new Map;for(let w of t.subAgents)for(let k of w.resolves){let O=u.get(k)??[];O.push(`${w.name} in ${d(w.name)}`),u.set(k,O)}let g=t.subAgents.flatMap(w=>[...w.promptSections,...w.movedKnowledge].map(k=>({...k,to:d(w.name),disposition:"move",into:null,childRef:null,heading:null,reason:w.job}))),h={...yo(t),subKind:"extract_subagent",kind:"reliability",severity:"medium",...jl({frontDoor:{...t.frontDoor,name:p},subAgents:t.subAgents},p),cause:t.reason,evidence:t.subAgents.flatMap(w=>w.evidence.map(k=>({...k}))),files:t.subAgents.map(w=>{let k=w.tools.filter(O=>!n.tools.find(v=>v.name===O).skills.some(v=>t.frontDoor.skills.includes(v)));return{path:d(w.name),action:"create",role:"system prompt",unit:`new:${w.name}`,loadMode:"always",loadVia:null,purpose:`${w.job}${k.length?` ${k.join(", ")}: only the sub-agent uses this.`:""}`,frontmatter:{name:w.name,description:w.description,tools:[...w.tools]}}}),segments:g,additions:t.subAgents.map(w=>({path:i.path,kind:"handoff",text:w.handoff,heading:null})),reorder:null,toolMoves:[],split:{...c?{root:c}:{},frontDoor:{name:p,job:t.frontDoor.job,skills:[...t.frontDoor.skills]},subAgents:t.subAgents.map(w=>({name:w.name,job:w.job,description:w.description,path:d(w.name),handoff:w.handoff,tools:[...w.tools],...w.noTools===void 0?{}:{noTools:w.noTools},resolves:[...w.resolves],skills:w.skills.map(k=>{let O=n.skills.find(_=>_.name===k),v=l.find(_=>_.from===O.path);if(!v)throw new Error(`The skill definition at ${O.path} is unavailable for its move.`);return{name:k,from:O.path,to:v.to}}),movedKnowledge:w.movedKnowledge.map(k=>({...k})),neededKnowledge:w.neededKnowledge.map(k=>({...k}))}))}},f=s.agentConfigurations?{agentConfigurations:s.agentConfigurations}:{},m=s.graphs?.before??ct(e,ln(e,{repoKey:o,files:r,root:c,...f})).fragment,S=s.graphs?.after??ct(e,ln(e,{repoKey:o,files:Ro(e,t,n,r,{root:c}),root:c,...f})).fragment,b=Nl(h,vo(m,S,h,o));for(let w of l){let k=S.nodes.find(v=>v.files.some(_=>_.path===d(w.owner)));if(!k)throw new Error(`The sub-agent at ${d(w.owner)} is missing from the discovered graph.`);let O=m.nodes.flatMap(v=>v.files).find(v=>v.path===w.from)?.role??(vn(w.from)?"code":"reference");b.files.push({path:w.to,fromPath:w.from,role:O,node:`${o}#${k.id}`,fromNode:`${o}#${n.agent.id}`,change:"moved",segments:0})}let y=[...new Set([...Js(h,r),...l.map(w=>w.from),...t.subAgents.flatMap(w=>w.neededKnowledge.map(k=>k.path))])].sort();return{repo:o,body:h,children:[...u].map(([w,k])=>({ref:w,how:`Isolating ${k.join(" and ")} gives each job its own rules.`})),delta:b,sourceHashes:Object.fromEntries(y.map(w=>[w,yf("sha256").update(r[w]).digest("hex")]))}}var xf=1e3,D_=Si+4e3;function Bl(e,t,n={}){return Co(e,t,[],{...n,scopeRuleId:"split",maxTokens:xf})}function Kl(e,t,n){return t>0?[H(e,"derive-shape","shape",er,t,n)]:[]}async function ql({state:e,settings:t},n,o,s){let i=[...e.warnings??[]],r=[...e.structuresRaw??[]],c=!1,a=!1;function l(d){return M("derive-shape",d,p=>o.rethrow(p)),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 d=Io(t,e).filter(({inventory:u})=>El(u)),p=await q(d,4,async({repo:u,graph:g,inventory:h})=>{n.progress.assertHeld(),n.progress.signal?.throwIfAborted();try{let f=u.files??{},m=await $l(o,h),S=g,b=Al(t,m,{inventory:h,files:f,afterGraph(O){return S=dn(t,{...u,files:Ro(t,O,h,f,{root:u.root})},go(t,e),e.modelReader??!1,e.projectAgents,s,{verdicts:e.newVerdicts??[],failed:[]}).fragment,_l(S,h.agent.id)??S}});if(!b.shape)return{structures:[],warnings:b.warnings,failed:b.warnings.length>0};let y=Dl(t,b.shape,h,u.key,{files:f,root:u.root,graphs:{before:g,after:S}}),w=await Bl(o,[y]),k=w.ran?w.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 w.ran||n.progress.log({level:"warn",code:"analysis.shape_check_failed"}),{structures:w.kept,warnings:k,failed:!w.ran}}catch(f){return l(f)}},o);for(let u of p)r.push(...u.structures),i.push(...u.warnings),c||=u.failed}}catch(d){i.push(...l(d).warnings),c=!0}return{next:"persisting",clear:[],set:{structuresRaw:r,warnings:i,splitCheckRan:a,splitPassFailed:c}}}var nr=A.mechanical,Hl=20;function bf(e,t){if(!t)return null;for(let[n,o]of Object.entries(e).sort(([s],[i])=>s.localeCompare(i))){let s=se(o,t);if(s!=null)return{path:n,line:s}}return null}function Of(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=bf(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)<=Hl));return s?{childId:t.id,kind:"match",matchIndex:s.index,location:o}:{childId:t.id,kind:"ask",location:o}})}function vf(e,t){return e.split(`
65
+ `).map((n,o)=>({text:n,line:o+1})).filter(n=>Math.abs(n.line-t)<=Hl).map(n=>`${n.line} ${n.text}`).join(`
66
+ `)}function _f(e){return{template:"structure-recheck",model:nr,answerFormat:"recheck",inputs:e}}async function Ul(e,t,n){let o=[],s=[],i=`C-${t.change.seq}`;for(let r of Of(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,_f({childId:c.id,seq:c.seq,title:c.title,cause:c.cause,path:r.location.path,line:r.location.line,window:vf(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,d=>e.rethrow(d)),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 Gl(e,t){return e>0?[H({},"structure-recheck","recheck",nr,e,t)]:[]}async function Xl(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(d=>!!d)}));for(let a of r){if(t.progress.assertHeld(),t.progress.signal?.throwIfAborted(),!s[a.repo])continue;let l=await Ul(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(d=>d.outcome==="not_checked")||i.changeIds.push(a.change.id)}return i}function PC(e,t,n={}){let o=_e,s=ae(e).splitCheck?n.structureState?Io(e,n.structureState).length:t.length:0;return[H(e,"derive-structure","structures",Ys,1,o),H(e,"scope-items","structureScope",Pt,1+s,o),...Gl(n.pendingRecheckChildren??0,o),...Kl(e,s,o)]}var RC=async(e,t)=>{if(t.progress.assertHeld(),t.progress.signal?.throwIfAborted(),!t.model)throw new re("llm","llm gone mid-job");let n=await je(t),o=Se(t.model,n,t.progress.rethrow,t.progress.signal);if(e.state.structurePhase==="shape"){let w=e.execution.forLocal?"":n.modelReaderPrompt();return ql(e,t,o,w)}let{state:s,settings:i}=e,r=s.repos??[],c=ne(s),a=Ge(c),{findings:l}=Re(be(s.findingsRaw??[]),Ne(s),Be(s),i),d=Nr(a),p=c.map(({repoKey:w,fragment:k})=>{let O=k.nodes.filter(_=>!Ue(_)),v=new Set(O.map(_=>_.id));return{repoKey:w,fragment:{...k,nodes:O,edges:k.edges.filter(_=>v.has(_.from)&&v.has(_.to))}}}),u=r.map(w=>({...w,files:Object.fromEntries(Object.entries(w.files??{}).filter(([k])=>!Dt(k,d)))})),g=Ge(p),h=Qs(l,d),f=[...s.warnings??[]],m=c.flatMap(({repoKey:w,fragment:k},O)=>{let v=cl(i,{repoKey:w,root:r[O]?.root,files:r[O]?.files??{},fragment:k});return f.push(...v.warnings),v.entries}),S;try{let k=a.nodes.some(Ue)&&!g.nodes.some(x=>x.kind==="agent")?[]:await kl(i,o,{graph:g,files:wl(u,De(p),l,J(i,s).multiPass,i),findings:h.items,loadModes:m.filter(x=>!Dt(x.path,d)),open:s.openStructures??[]}),O=gl(i,{raw:k,findings:h.candidates,repos:u,fragments:p,loadModes:m});f.push(...O.warnings);let v=await Co(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:k.length,flagged:I,droppedByValidation:O.dropped}}}catch(w){M("derive-structure",w,k=>o.rethrow(k)),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 Xl(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:Sl(l)}:{}}}};export{$t as a,fo as b,tc as c,cn as d,Za as e,ce as f,ec as g,bs as h,Ra as i,ot as j,gc as k,Cs as l,mo as m,ct as n,Sc as o,$a as p,ao as q,sp as r,an as s,Ma as t,mk as u,Ba as v,dp as w,Ua as x,it as y,Xa as z,zk as A,Wa as B,Va as C,Jk as D,za as E,pp as F,Qk as G,Yk as H,fp as I,Zk as J,Ya as K,yc as L,Ql as M,ts as N,Ii as O,ne as P,Ne as Q,oe as R,ae as S,J as T,ho as U,go as V,uy as W,my as X,hy as Y,gy as Z,dn as _,na as $,qn as aa,j as ba,z as ca,qf as da,Je as ea,su as fa,Rt as ga,At as ha,Ac as ia,Pc as ja,By as ka,Vb as la,Io as ma,Se as na,er as oa,Vv as pa,xf as qa,D_ as ra,_h as sa,ax as ta,cx as ua,Zx as va,eb as wa,Xc as xa,Wc as ya,mO as za,hO as Aa,PC as Ba,RC as Ca};
@@ -0,0 +1 @@
1
+ import{z as e}from"zod";import{z as a}from"zod";var t=a.enum(["ready","needs_review","blocked"]);var d=e.enum(["users","team"]),i=e.enum(["high","medium","low"]),n=e.enum(["added","edited","removed"]),l=e.enum(["invokes","delegates","reads","writes","emits"]),r=e.object({nodes:e.array(e.object({id:e.string().min(1),change:n,label:e.string().nullable()})),edges:e.array(e.object({from:e.string().min(1),to:e.string().min(1),kind:l,change:n,detail:e.string().nullable()}))}),u=e.object({summary:e.string().nullable(),impact:e.string().nullable(),confidence:i.nullable(),objective:e.string().nullable(),status:t.nullable(),blockedBy:e.string().nullable(),alsoFixes:e.array(e.string()).default([]),delta:r.nullable()});export{t as a,d as b,i as c,n as d,l as e,r as f,u as g};
@@ -1 +1 @@
1
- import{a as p}from"./E7TFIHC5.js";import{c as a}from"./V7BFUTM7.js";import{createHash as f}from"node:crypto";function c(e){function r(t){if(!("includes"in e)||!Object.hasOwn(e.includes,t))throw new Error(`Unknown template: ${t}`);return e.includes[t]}function s(t){return"templateText"in e?Buffer.byteLength(e.templateText(t)):r(t).expandedSize}function i(t,n={}){return{name:t,hash:"templateText"in e?f("sha256").update(p(e.templateText(t),{promptAgreement:a(n)})).digest("hex"):r(t).expandedFingerprint}}function m(t,n={}){for(let o of t)if(i(o.name,n).hash!==o.hash)throw new Error("Counterfact's instructions changed since this analysis started. Start a new analysis.")}return{templateBytes:s,promptVersion:i,assertPromptVersions:m}}export{c as a};
1
+ import{a as p}from"./E7TFIHC5.js";import{d as a}from"./ZTOVBAG7.js";import{createHash as f}from"node:crypto";function c(e){function r(t){if(!("includes"in e)||!Object.hasOwn(e.includes,t))throw new Error(`Unknown template: ${t}`);return e.includes[t]}function s(t){return"templateText"in e?Buffer.byteLength(e.templateText(t)):r(t).expandedSize}function i(t,n={}){return{name:t,hash:"templateText"in e?f("sha256").update(p(e.templateText(t),{promptAgreement:a(n)})).digest("hex"):r(t).expandedFingerprint}}function m(t,n={}){for(let o of t)if(i(o.name,n).hash!==o.hash)throw new Error("Counterfact's instructions changed since this analysis started. Start a new analysis.")}return{templateBytes:s,promptVersion:i,assertPromptVersions:m}}export{c as a};
@@ -0,0 +1 @@
1
+ import{f as D,l as G,m as I,n as L}from"./FOKDE64Y.js";import{f as B,n as g}from"./KTNA2KTN.js";import{V as v,aa as C,d as M,ea as E,i as O,l as k,ra as c}from"./NIOS7U6C.js";import{c as p,e as R}from"./C6X5GDG4.js";function $(a,d,t={},l={}){let{root:r}=t,f=d.map(o=>o.path),w=M(a)?B(a,f,r):void 0,h=d.filter(o=>{let e=c(a,o,{...t,purpose:"source",route:"github"});return e.admitted||e.reason==="wrong-type"||e.reason==="too-large"}),i=k(a)?g(a,h.map(o=>o.path),r,{files:l.files,listedPaths:f,agentConfigurations:w}):void 0,P=new Set([...i?.pluginDeclarations?.map(o=>o.path)??[],...v(a,i?.files.map(o=>o.path)??[])]),S=i??(l.measureAnalysisSize?g(a,h.map(o=>o.path),r,{listedPaths:f,agentConfigurations:w}):void 0),T=new Map(S?.files.map(o=>[o.path,o])),U=l.measureAnalysisSize?new Map(d.map(o=>[o.path,o.size])):void 0,u=i?{files:i.files.map(o=>({...o,path:p(o.path,r)})),ownerOf:o=>{let e=i.ownerOf(R(o,r));return e?{...e,folder:e.key===null?"":p(e.folder,r)}:null}}:void 0,j=new Set(i?.ignoredPaths),s=D(a,{paths:h.map(o=>p(o.path,r)),scopes:u});return{descriptions:d.flatMap(o=>{if(j.has(o.path))return[];let e=p(o.path,r),b=e===null?{size:o.size}:G(s,e,o.size),n=c(a,{...o,size:b.size},{...t,purpose:"source",route:"github",scopes:u}),A=e===null?99:L(a,e,u),F=e!==null&&!P.has(o.path)&&!I(s,e)&&(O(o.path)||E(a,e,u)||A===0)?"instruction":"code",z={};if(l.measureAnalysisSize){let q=n.admitted||n.reason==="too-large",y=c(a,o,{...t,purpose:"code-scan",route:"github",listing:U}),m=T.get(o.path),H=m&&(n.admitted||["too-large","wrong-type","empty"].includes(n.reason))&&c(a,{path:o.path},{...t,purpose:C(m.role),route:"github"}).admitted;z.countsTowardAnalysisSize=q||y.admitted||y.reason==="too-large"||!!H,z.analysisPool=m?.role==="skill"||m?.role==="reference"?"instruction":F}return[{entry:o,readEntry:{...o,...b},rel:e,score:A,pool:F,...z,admission:n,...s.enabled&&e!==null?{tier:s.tierOf(e)}:{}}]}),priority:s,declarations:P,discovery:S}}export{$ as a};