@counterfact-labs/cli 0.2.6 → 0.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/README.md +20 -0
  2. package/bundle/client-release.json +1 -1
  3. package/dist/adapters/analysis-results.js +87 -0
  4. package/dist/adapters/combined-results.js +27 -0
  5. package/dist/adapters/completion-lock.js +95 -0
  6. package/dist/adapters/completion.js +132 -17
  7. package/dist/adapters/entry-files.js +129 -0
  8. package/dist/adapters/entry-packing.js +161 -0
  9. package/dist/adapters/entry-selection.js +57 -0
  10. package/dist/adapters/files.js +111 -5
  11. package/dist/adapters/git.js +10 -1
  12. package/dist/adapters/relay-plan.js +5 -7
  13. package/dist/adapters/release.js +4 -1
  14. package/dist/adapters/results.js +18 -3
  15. package/dist/adapters/selection.js +114 -0
  16. package/dist/adapters/settings.js +62 -4
  17. package/dist/adapters/source-relay-plan.js +7 -0
  18. package/dist/analysis-core/analysis/code-agents/skipped-files.js +1 -1
  19. package/dist/analysis-core/analysis/file-analysis-plan.js +1 -0
  20. package/dist/analysis-core/analysis/file-dependencies.js +1 -0
  21. package/dist/analysis-core/analysis/finding-activity-switch.js +1 -0
  22. package/dist/analysis-core/analysis/finding-identity.js +1 -0
  23. package/dist/analysis-core/analysis/finding-quality/policy.js +1 -0
  24. package/dist/analysis-core/analysis/folder-analysis-plan.js +1 -0
  25. package/dist/analysis-core/analysis/passes/full-file-passes.js +1 -0
  26. package/dist/analysis-core/analysis/project-architecture.js +1 -0
  27. package/dist/analysis-core/analysis/schemas.js +1 -1
  28. package/dist/analysis-core/chunks/2AASSZRO.js +35 -0
  29. package/dist/analysis-core/chunks/2YREYGOG.js +1 -0
  30. package/dist/analysis-core/chunks/33HRXJ5Q.js +1 -0
  31. package/dist/analysis-core/chunks/33IGHOYT.js +1 -0
  32. package/dist/analysis-core/chunks/4PT5C4IT.js +7 -0
  33. package/dist/analysis-core/chunks/4RXRAB5S.js +1 -0
  34. package/dist/analysis-core/chunks/4UDQBDDE.js +1 -0
  35. package/dist/analysis-core/chunks/{OPMA32A6.js → 5B5UCWD3.js} +1 -1
  36. package/dist/analysis-core/chunks/6YCABS5T.js +1 -0
  37. package/dist/analysis-core/chunks/CQQ4TTXE.js +1 -0
  38. package/dist/analysis-core/chunks/CTLHKFPH.js +19 -0
  39. package/dist/analysis-core/chunks/F54DOWKN.js +6 -0
  40. package/dist/analysis-core/chunks/FRXOQ2M6.js +3 -0
  41. package/dist/analysis-core/chunks/HCPO6QPU.js +1 -0
  42. package/dist/analysis-core/chunks/HHFDNY6V.js +14 -0
  43. package/dist/analysis-core/chunks/{3JWEFCTJ.js → HVQJKPQ4.js} +1 -1
  44. package/dist/analysis-core/chunks/INVTU73D.js +1 -0
  45. package/dist/analysis-core/chunks/JEWBPIQI.js +1 -0
  46. package/dist/analysis-core/chunks/JGK37AWN.js +1 -0
  47. package/dist/analysis-core/chunks/LFYTD7JF.js +1 -0
  48. package/dist/analysis-core/chunks/LMUXOKIM.js +1 -0
  49. package/dist/analysis-core/chunks/LOBIDUCA.js +1 -0
  50. package/dist/analysis-core/chunks/M5YWJY7P.js +1 -0
  51. package/dist/analysis-core/chunks/MGVIKA74.js +1 -0
  52. package/dist/analysis-core/chunks/MKYLK6DB.js +1 -0
  53. package/dist/analysis-core/chunks/MZOKZ3N6.js +1 -0
  54. package/dist/analysis-core/chunks/NXHVBJL4.js +1 -0
  55. package/dist/analysis-core/chunks/OKBK3JL3.js +1 -0
  56. package/dist/analysis-core/chunks/PBHHWFR6.js +1 -0
  57. package/dist/analysis-core/chunks/Q5WR6B2H.js +2 -0
  58. package/dist/analysis-core/chunks/QVXARKP7.js +1 -0
  59. package/dist/analysis-core/chunks/RQTNTIR4.js +1 -0
  60. package/dist/analysis-core/chunks/RUVMFAST.js +1 -0
  61. package/dist/analysis-core/chunks/S27VIQMZ.js +1 -0
  62. package/dist/analysis-core/chunks/{YDBO7P4X.js → S27Y2TP5.js} +1 -1
  63. package/dist/analysis-core/chunks/SJESFYBA.js +10 -0
  64. package/dist/analysis-core/chunks/SP6XFHNH.js +1 -0
  65. package/dist/analysis-core/chunks/VDUFPTDD.js +1 -0
  66. package/dist/analysis-core/chunks/W24SFYZM.js +67 -0
  67. package/dist/analysis-core/chunks/YTHF2E2S.js +1 -0
  68. package/dist/analysis-core/chunks/YWL52FVW.js +2 -0
  69. package/dist/analysis-core/contracts/analysis-selection.js +1 -0
  70. package/dist/analysis-core/contracts/analysis-size.js +1 -0
  71. package/dist/analysis-core/contracts/execution-request.js +1 -0
  72. package/dist/analysis-core/contracts/intake-finding.js +1 -0
  73. package/dist/analysis-core/contracts/model-call-identity.js +1 -0
  74. package/dist/analysis-core/contracts/module-resolution.js +1 -0
  75. package/dist/analysis-core/contracts/relay-analysis.js +1 -1
  76. package/dist/analysis-core/contracts/requests.js +1 -1
  77. package/dist/analysis-core/contracts/selection-paths.js +1 -0
  78. package/dist/analysis-core/conventions/analysis-fit.js +1 -1
  79. package/dist/analysis-core/conventions/file-admission.js +1 -1
  80. package/dist/analysis-core/conventions/read-limits.js +1 -0
  81. package/dist/analysis-core/import/calls/modules.js +1 -0
  82. package/dist/analysis-core/import/entry-selection.js +1 -0
  83. package/dist/analysis-core/import/outside-loader-sources.js +1 -1
  84. package/dist/analysis-core/index.js +3 -3
  85. package/dist/analysis-core/requests/answer-formats.js +1 -1
  86. package/dist/analysis-core/requests/local-plan.js +1 -1
  87. package/dist/analysis-core/requests/planned-limits.js +1 -0
  88. package/dist/analysis-core/requests/registry.js +1 -1
  89. package/dist/analysis-core/requests/template-version.js +1 -1
  90. package/dist/analysis-core/requests/tools.js +1 -1
  91. package/dist/analysis-core/settings.js +1 -1
  92. package/dist/analysis-core/stages/engine-entry.js +1 -1
  93. package/dist/bundle/seal/engine.js +1 -1
  94. package/dist/cli/analysis-selection.js +133 -0
  95. package/dist/cli/api.js +1 -1
  96. package/dist/cli/commands/analyze.js +82 -14
  97. package/dist/cli/commands/skipped.js +65 -0
  98. package/dist/cli/completion-delivery.js +63 -0
  99. package/dist/cli/completion-recovery.js +68 -14
  100. package/dist/cli/context.js +4 -2
  101. package/dist/cli/finding-display.js +102 -7
  102. package/dist/cli/finding-settings.js +3 -1
  103. package/dist/cli/intake-payload.js +26 -2
  104. package/dist/cli/main.js +37 -11
  105. package/dist/cli/mcp-failure.js +6 -5
  106. package/dist/cli/mcp.js +191 -26
  107. package/dist/cli/prior-completion.js +35 -0
  108. package/dist/cli/relay-check.js +260 -110
  109. package/dist/cli/relay-failure.js +32 -0
  110. package/dist/cli/relay-preparation.js +72 -21
  111. package/dist/cli/result-check.js +31 -12
  112. package/dist/cli/results-upload.js +131 -0
  113. package/dist/cli/saved-results.js +10 -0
  114. package/dist/cli/scope-choices.js +57 -0
  115. package/dist/cli/sign-in.js +2 -2
  116. package/dist/cli/skipped-files.js +22 -0
  117. package/dist/cli/summary.js +15 -1
  118. package/dist/contract/agent-choice.js +25 -2
  119. package/dist/contract/cli-api-messages.js +3 -0
  120. package/dist/contract/cli-refusals.js +39 -5
  121. package/dist/contract/cli-version.js +1 -1
  122. package/dist/contract/console-url.js +3 -0
  123. package/dist/contract/console.js +24 -40
  124. package/dist/contract/engine.js +1 -1
  125. package/dist/contract/messages.js +4 -3
  126. package/dist/contract/project-architecture.js +1 -0
  127. package/dist/contract/scope-choice.js +98 -0
  128. package/dist/contract/selection-metadata.js +9 -0
  129. package/dist/contract/selection-offer.js +40 -0
  130. package/dist/gatekeeper/cli-api.js +70 -4
  131. package/dist/gatekeeper/console.js +55 -28
  132. package/dist/gatekeeper/model.js +5 -23
  133. package/dist/gatekeeper/trust/policy.js +2 -1
  134. package/package.json +5 -3
  135. package/dist/analysis-core/analysis/source-notes/types.js +0 -1
  136. package/dist/analysis-core/chunks/2PSNOSJ2.js +0 -1
  137. package/dist/analysis-core/chunks/377MLK4M.js +0 -21
  138. package/dist/analysis-core/chunks/5DGPLXYB.js +0 -1
  139. package/dist/analysis-core/chunks/6B2HILSY.js +0 -1
  140. package/dist/analysis-core/chunks/6QY5BV5B.js +0 -14
  141. package/dist/analysis-core/chunks/6U2IR4XB.js +0 -1
  142. package/dist/analysis-core/chunks/DLPVYWHZ.js +0 -1
  143. package/dist/analysis-core/chunks/FOKDE64Y.js +0 -1
  144. package/dist/analysis-core/chunks/FSLWD2PE.js +0 -1
  145. package/dist/analysis-core/chunks/K2GNDX3W.js +0 -1
  146. package/dist/analysis-core/chunks/KTNA2KTN.js +0 -7
  147. package/dist/analysis-core/chunks/KWECQJ6X.js +0 -1
  148. package/dist/analysis-core/chunks/NIOS7U6C.js +0 -41
  149. package/dist/analysis-core/chunks/PECX3OXB.js +0 -1
  150. package/dist/analysis-core/chunks/PYKAERZZ.js +0 -1
  151. package/dist/analysis-core/chunks/QFY6A3MS.js +0 -66
  152. package/dist/analysis-core/chunks/SKVEBOGA.js +0 -1
  153. package/dist/analysis-core/chunks/STI4JE7L.js +0 -1
  154. package/dist/analysis-core/chunks/SVMEWGD3.js +0 -1
  155. package/dist/analysis-core/chunks/X7WZAA7S.js +0 -1
  156. package/dist/analysis-core/chunks/ZTOVBAG7.js +0 -1
  157. package/dist/analysis-core/data/finding-types.js +0 -1
@@ -0,0 +1,67 @@
1
+ import{a as Vi}from"./5B5UCWD3.js";import{b as D,k as zi}from"./HHFDNY6V.js";import{a as rs,b as Zt,c as is,d as as,e as cs,f as ls,g as en,h as zn,i as Wi}from"./4RXRAB5S.js";import{a as tn,b as nn,c as ps}from"./N7U5N42V.js";import{a as Xi}from"./QDYMR6KS.js";import{a as Ji}from"./4F6ZIHXU.js";import{a as Qi}from"./VGYWI4X2.js";import{b as et}from"./57M4OQJM.js";import{a as Yi}from"./J4AXGE5W.js";import{a as zt}from"./IBCFGUHI.js";import{a as Fi}from"./DZZBQDGO.js";import{a as $e,b as Ki,c as qi,d as Qt,e as bt,f as vt,g as Yt,h as Hi,i as De,j as ke,k as Ui,l as Xn,n as Gi}from"./CTLHKFPH.js";import{D as os,E as Jt,F as ss,G as ge,H as Wn,I as xt,J as Ze,K as Bi,a as Vt,b as Mi,c as Ti,d as he,g as Un,h as Gn,i as Li,l as Ni,n as ns,o as ji,p as Di,q as Ye}from"./FRXOQ2M6.js";import{a as H}from"./326F4XNG.js";import{a as Qe,e as Ai}from"./KU5DINLW.js";import{a as On,b as j,c as Cn}from"./HCPO6QPU.js";import{a as $i,b as St,c as Hn,d as Ii,e as Wt,f as Je,g as Ri}from"./F54DOWKN.js";import{a as Xt,c as ts,d as Pi}from"./33IGHOYT.js";import{a as Ei}from"./LOBIDUCA.js";import{c as mt}from"./YTHF2E2S.js";import{A as Yo,B as Ve,a as Ce,c as Dn,d as wi,f as Bn,m as yi,n as Kn,p as Q,q as Ne,r as me,s as qn,t as je,x as Gt,y as Si}from"./4PT5C4IT.js";import{a as q,c as Ci,d as _i}from"./2YREYGOG.js";import{a as Ee}from"./M5YWJY7P.js";import{a as A,d as Oi}from"./4H23CSUM.js";import{a as bi,c as vi,e as F}from"./JEWBPIQI.js";import{a as es,e as xi,f as _e}from"./NXHVBJL4.js";import{c as le}from"./MJGB25S5.js";import{c as Zo}from"./QVXARKP7.js";import{$ as T,$a as pi,B as Xo,Ca as Mn,D as Er,Da as Yr,Ea as Xe,F as $r,Fb as J,Ga as ni,Ha as ve,Ia as oi,J as z,Ja as si,Ka as Te,Kb as ki,L as Ir,La as ri,M as Rr,Ma as wt,Na as Oe,P as zo,Q as Vo,Qa as V,Ra as Le,Sa as yt,Ta as Nn,U as Pr,Ua as ii,V as Ar,Va as ze,W as Fr,Wa as ai,Xa as Ut,Y as Jo,Z as Mr,Za as ci,_ as Bt,_a as li,ab as di,bb as fi,cb as ui,d as ht,da as Nr,db as mi,f as Go,g as Wo,h as yr,i as _n,ka as jr,l as In,lb as hi,ma as se,oa as Dr,pa as Br,pb as jn,qa as Kr,sa as qr,t as Dt,ta as Hr,ua as Ur,v as Cr,va as Gr,w as _r,xa as Wr,ya as Fn,za as kt}from"./2AASSZRO.js";import{b as Tn}from"./74FPPPIG.js";import{a as oe}from"./MKYLK6DB.js";import{c as Tr,d as Lr}from"./5TATKWLG.js";import{b as Ht}from"./OKBK3JL3.js";import{c as An,f as re}from"./JKWTHRUR.js";import{b as ce,c as fe}from"./3GUKUEEJ.js";import{m as wr}from"./MGVIKA74.js";import{e as gi}from"./YUY436SM.js";import{b as We,c as gt,d as Rn,e as Or}from"./C6X5GDG4.js";import{a as xr,b as $n,l as br,o as vr}from"./YWL52FVW.js";import{a as En,b as Sr}from"./SJESFYBA.js";import{a as ue,d as Zr,g as Ln,h as ei,i as ti,j as Qo}from"./Q5WR6B2H.js";import{b as Pn,c as Xr,d as zr,e as Vr,f as Kt,g as Jr,h as qt,i as Qr}from"./VDUFPTDD.js";var bp={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},vp=Object.freeze(Object.keys(bp));function ds(e,t){return Ht.parse(e.mapped?.[t])}function Zi(e,t){return Ht.safeParse(e.mapped?.[t])}function Y(e){return(e.mapped??[]).map((t,n)=>({repoKey:e.repos?.[n]?.key??`repo-${n}`,fragment:ds(e,n)}))}function Be(e){return Object.fromEntries((e.repos??[]).map(t=>[t.key,new Set(Object.keys(t.files??{}))]))}function ie(e){return Object.fromEntries(vp.filter(t=>Object.hasOwn(e,t)).map(t=>[t,e[t]]))}function ae(e,t){let n=[],o=e.flatMap(a=>a.skipped).map(a=>({...a}));for(let a of e)for(let[c,l]of Object.entries(a.files)){let d=Object.hasOwn(t,c)?t[c]:void 0;d===l?n.push(...a.sources.filter(p=>p.sourcePath===c)):o.push({path:c,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((a,c)=>o.findIndex(l=>l.path===a.path&&l.reason===a.reason)===c),r=new Set(s.map(({path:a})=>a)).size,i=r?[`${r} ${r===1?"file was":"files were"} skipped, so some findings may be missing.`]:[];return{sources:n,skipped:s,warnings:i}}function on(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:r,line:i}=e,a=Object.hasOwn(o,e.path)?o[e.path]:void 0;if(!r||i===null||typeof a!="string")return!1;let c=oi(a,r,i);return c?s.some(l=>{let d=l.files[e.path];return typeof d!="string"||!d.startsWith(a)?!1:l.sources.some(p=>p.unitKey!==n||p.sourcePath!==e.path?!1:p.kind==="prompt"?c.every(u=>u.from>=p.sourceLine&&u.to<=(p.sourceEndLine??p.sourceLine)):c.some(u=>u.from<=p.sourceLine&&u.to>=p.sourceLine))}):!1}var Op={"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 fs(e){let t={files:{},sources:[],skipped:[]},{agent:n,files:o,allowance:s}=e;if(!e.enabled||!n.codeInputsJson)return t;let r=new Set(s.skipped.map(({path:p})=>p)),i=s.paths.filter(p=>!r.has(p)),a=new Set(i),c=(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=Op[u];g&&c(p,g)});let l=(p,u)=>{let{sourcePath:g,sourceLine:h}=p;if(r.has(g))return!1;if(!a.has(g))return c(g,"File was not admitted for this agent."),!1;let f=Object.hasOwn(o,g)?o[g]:void 0;return typeof f!="string"?(c(g,"Source file is missing."),!1):!Number.isInteger(h)||h<1||h>f.split(`
2
+ `).length?(c(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):(c(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=Ti([p.name],i,o,i);u.length||c(p.sourcePath,`Tool implementation was not admitted or found: ${p.name}.`);for(let g of u){let h=Mi([p.name],[g],o);h.length||c(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(`
3
+ `).length)?l({name:n.unitKey,sourcePath:p,sourceLine:u.from,sourceEndLine:u.to},"prompt"):c(p,"Prompt source lines are missing or stale.")}return t}function Vn(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=>ae(s.inputs,s.files).sources),o=[...new Map(t.flatMap(s=>s.inputs.flatMap(r=>Object.entries(r.files).flatMap(([i,a])=>{let c=Object.hasOwn(s.files,i)?s.files[i]:void 0;return c!==void 0&&a.startsWith(c)?[{repo:s.repo,path:i,text:Le(c),truncated:c!==a}]:[]}))).map(s=>[JSON.stringify([s.repo,s.path,s.text]),s])).values()];return{scopes:t,sources:n,files:o}}var Ie=A.chat,B=8,Z=1,Jn=40,we=6e4,ye=16e3,Ct=8e4,K=4e3,Cp=1536,us=8192,ms=1024;function Ke(e){return us+e*Cp+ms}function tt(e,t="legacy"){return t==="whole-file"?we+Ct+K*e+4e3*4:we+(ye+K)*e+4e3*2}function yu(e,t,n,o,s="legacy"){if(!n||t===0)return null;let r=Math.ceil(t/B),i=1+Z,a=Ke(t)+(us+ms)*(r-1),c={template:o};if(s==="whole-file"){let d=Math.floor(t/B),p=t%B,u=re(tt(B,s))*d+(p?re(tt(p,s)):0);return le(e,c,"Double-check findings",Ie,u*i,a*i)}let l=we*r+(ye+K)*t;return le(e,c,"Double-check findings",Ie,(re(l)+4e3*r)*i,a*i)}function pe(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 Qn(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 ee(e,t){let n=t.analysisFlags;return n?{...n,findingCheck:n.findingCheck??pe(e).findingCheck,sourceNotes:n.sourceNotes??!1}:{...pe(e),sourceNotes:!1}}function Yn(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",r=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:r==="check-findings-legacy"?"check-findings":r}}}function gs(e){return Yn({},e.prompts).prompts}function hs(e,t,{enabled:n,prompts:o}){return vi(e,t,n?o[e]:void 0)}function nt(e,t,n){return hs(e,t,{enabled:n?.switches.enabled??!1,prompts:Yn({},n?.prompts).prompts})}function ea(e,t,n,o){let s=pe(e),r=Yn(e),{fullContext:i}=r,a=hs("derive",e,r),c=hs("check",e,r),l=i?"whole-file":"legacy";return{findings:n,derive:q(e,a,"findings",A.generate,t,o),check:s.findingCheck?q(e,c,"check",Ie,Math.ceil(n/B)*(Z+1),Math.max(o,tt(B,l)),Ke(B)):null}}function ta(e){if(e&&typeof e=="object"){for(let t of Object.values(e))ta(t);Object.freeze(e)}return e}function Pu(e,t,n={}){let{enabled:o,fullContext:s,precisionRules:r,prompts:i}=Yn(e),a=w=>o&&e[w]==="1",c=a("CF_FINDING_SECOND_OPINION"),l=a("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&&a("CF_FINDING_RECALL")&&(g==="request-18"||g==="two-sweeps")?g:"off";n.recall!==!1&&a("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."),c&&n.secondOpinion===!1&&u.push("Second opinion was skipped: local analysis supports Anthropic only."),c&&n.secondOpinion!==!1){let w=e.CF_FINDING_SECOND_OPINION_MODEL??"",v=Object.hasOwn(An,w)?An[w]:void 0,S=An[Ie];v&&v.provider===e.CF_FINDING_SECOND_OPINION_PROVIDER&&v.provider!==S.provider&&v.input<=S.input&&v.output<=S.output&&(v.input<S.input||v.output<S.output)?(f=w,m=v.provider):u.push("Second opinion was skipped: configure a priced, cheaper model from a different provider.")}return ta({ruleVersion:o?"precision-v1":"legacy",switches:{enabled:o,fullContext:s,precisionRules:r,secondOpinion:c,ranking:l,semanticMatching:d,codeInputs:p,recall:h!=="off"},prompts:{derive:t.promptVersion(i.derive,e),check:t.promptVersion(i.check,e)},models:{derive:A.generate,check:Ie,scope:A.mechanical,secondOpinion:f},caps:{coreBytes:we,siteBytes:ye,findingTextBytes:K,siteWindowLines:Jn,citedBatchBytes:s?8e4:0,passBytes:15e4,passContextBytes:6e4,maxPasses:4,passFindings:h==="request-18"?18:wt,totalFindings:24,deriveOutputTokens:Oi,checkBatchSize:B,checkOutputTokens:Ke(B),checkMaxRetries:Z,checkOverheadTokens:4e3,secondOpinionBatchSize:4,secondOpinionInputBytes:tt(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 _t(e,t,n={}){let o=gs(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),fe(s)},available:e!==null,settleStartedOnError:e?.settleStartedOnError,withRetry:s=>Se(e?Qi(e,s):null,t,n,o),async execute(s,r={}){if(o&&(r={...r,signal:r.signal?AbortSignal.any([o,r.signal]):o}),r.signal?.throwIfAborted(),!e)throw new Error("model unavailable");return"execute"in e?e.execute(s,r):Ji(e,t,s,r)}}}function M(e,t,n={},o={}){return e.execute(bi(t,n,o.maxInputBytes),o)}async function qe(e){return e.requestTools?e.requestTools():Vi(Xi(await e.instructions()))}var cn=2,_p=10*6e4;function Zn(e,t,n){return new ce("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 na(e){let{data:t,plan:n,progress:o}=e,s=n.passes.length,r={...t.passResults};if(!t.passResults){for(let d=0;d<(t.passCursor??0);d++)r[d]={findings:t.passFindings?.[d],retries:0};t.passRetries&&(r[t.passCursor??0]={retries:t.passRetries})}await o.checkpoint({inspectPlan:n,passResults:r});let i={...t,inspectPlan:n,passResults:r},a=n.passes.map((d,p)=>p).filter(d=>r[d]?.findings===void 0);for(let d of a)if((r[d]?.retries??0)>cn)throw Zn(d,s,r[d].retries);let c;if(await H(e.onePartPerStep?a.slice(0,1):a,e.concurrency,async d=>{let p=o.elapsedMs();try{if((typeof p=="number"?p:await p)>=_p||c)return;let u=r[d]?.retries??0;for(;!c;){o.assertHeld(),o.signal?.throwIfAborted();let g;try{g=await e.run(d,u)}catch(f){if(o.rethrow?.(f),fe(f),e.forLocal)throw f instanceof ce?f:new Error("A findings reading pass failed; no completed report was written.");u++,o.log({level:"warn",code:"analysis.pass_failed",counts:{part:d+1,parts:s,retries:u}});let m={retries:u};if(await o.checkpoint({},{index:d,result:m}),r[d]=m,u>cn)throw Zn(d,s,u);if(e.onePartPerStep)break;await new Promise(w=>setTimeout(w,1e3));continue}let h={findings:g,retries:u};await o.checkpoint({},{index:d,result:h}),r[d]=h;break}}catch(u){c??=u}}),c)throw c;let l=n.passes.every((d,p)=>r[p]?.findings!==void 0);return{...i,...l?{passCursor:s,passRetries:0,passFindings:n.passes.map((d,p)=>r[p].findings)}:{}}}var eo={critical:0,high:1,medium:2,low:3},sa=e=>(e.line??0)>0,to=e=>sa(e)&&!!e.excerpt?.trim();function ks(e,t){let n=i=>{let a=Ln(i);return[a.filter(to).length,a.filter(sa).length,Number(!!i.site&&to({...i.site,excerpt:i.excerpt}))]},[o,s]=[n(e),n(t)],r=o.findIndex((i,a)=>i!==s[a]);return r>=0&&o[r]>s[r]}function ws(e,t){let n=ni(t.map(r=>r.audience)),o=ri(t);if(o===void 0&&!Object.hasOwn(e,"activity"))return n===e.audience?e:{...e,audience:n};let s={...e};return delete s.activity,{...s,...n===void 0?{}:{audience:n},...o===void 0?{}:{activity:o}}}function oa(e,t,n={}){let o=[];if(n.semanticMatching)for(let s of e){let r=Zr({previous:o.map((i,a)=>Qo(i,String(a))),current:s.map((i,a)=>Qo(i,String(a))),enabled:!0});for(let i of r.matches){let a=Number(i.previousId),c=s[Number(i.currentId)];o[a]=ws(ks(c,o[a])?c:o[a],[o[a],c])}for(let i of r.unmatchedCurrent)o.push(s[Number(i.id)])}else for(let s of e.flat()){let r=o.findIndex(i=>ei(i,s));r<0?o.push(s):o[r]=ws(ks(s,o[r])?s:o[r],[o[r],s])}return o.sort((s,r)=>eo[s.severity]-eo[r.severity]).slice(0,t)}function Ep(e,t){let n=eo[e.severity]-eo[t.severity];if(n)return n<0;let o=Ln(e).filter(to).length-Ln(t).filter(to).length;return o?o>0:ks(e,t)}function ra(e,t={}){let n=t.deferCap?1/0:24;if(t.dedupe===!1)return e.length<2?e[0]??[]:oa(e,n,t);let o=e.length<2?e[0]??[]:oa(e,1/0,t),s=o.map((c,l)=>o.map((d,p)=>l===p||ti(c,d))),r=new Set,i=new Map;for(let c=0;c<o.length;c++){if(r.has(c))continue;let l=[c];r.add(c);for(let p=0;p<l.length;p++)for(let u=0;u<o.length;u++)r.has(u)||!s[l[p]][u]||(r.add(u),l.push(u));if(!l.every(p=>l.every(u=>s[p][u]))){for(let p of l)i.set(p,o[p]);continue}let d=l.reduce((p,u)=>Ep(o[u],o[p])?u:p,c);i.set(c,ws(o[d],l.map(p=>o[p])))}let a=i.size===o.length?o:o.flatMap((c,l)=>i.has(l)?[i.get(l)]:[]);return e.length<2?a:a.slice(0,n)}var ia=e=>e.CF_FINDING_DEDUPE!=="0";var $p=15*6e4;async function aa(e,t){let n=new AbortController,o={...e,execute:(i,a={})=>e.execute(i,{...a,signal:a.signal?AbortSignal.any([a.signal,n.signal]):n.signal})},s,r=new Promise((i,a)=>{s=setTimeout(()=>{let c=new ce("llm","The reading part's model call timed out.");a(c),n.abort(c)},$p)});try{return await Promise.race([Promise.resolve().then(()=>t(o)),r])}finally{clearTimeout(s)}}var Ip=A.generate;function Rp(e,t){let n=t.qualityConfig;return{template:nt("derive",e,n),inputs:{maxFindings:String(wt),graph:JSON.stringify(t.graph,null,2),pass:t.pass??null,codeSources:t.codeSources??[],files:Object.entries(t.files).map(([s,r])=>({path:s,text:Le(r)}))},answerFormat:"findings",model:n?.switches.enabled?n.models.derive:Ip,limits:{effort:"high"}}}async function ca(e,t,n){n.qualityConfig&&_t(n.qualityConfig,t.tools,e);let o=await M(t,Rp(e,n),e);return xi({...o,findings:si(o.findings,n.files,e,n.activitySnapshot,n.activitySnapshotComplete)})}function la(e,t,n){return e.flatMap(o=>{let s=o.site?{path:o.site.path,line:o.site.line,excerpt:o.excerpt}:null,r=[...s?[s]:[],...o.otherSites??[]].filter(l=>t.has(l.path));if(!r.some(l=>n.has(l.path)))return[];let i=o.site&&r[0]===s?0:Math.max(0,r.findIndex(l=>(l.line??0)>0)),a=r[i],c=r.filter((l,d)=>d!==i);return[{...o,site:{path:a.path,line:a.line},excerpt:a.excerpt,otherSites:c}]})}function Pe(e){let t=[],n=[],o=new Set;for(let s of e)for(let[r,i]of Object.entries(s.files??{})){if(o.has(r)){n.push({repo:s.key,path:r});continue}o.add(r),t.push({repo:s.key,path:r,text:i})}return{all:t,shadowed:n}}function Et(e){return Object.fromEntries(Pe(e).all.map(t=>[t.path,t.text]))}function $t(e,t){return Ei(e)===void 0?void 0:t}function Pp(e,t){return Object.keys(t).filter(n=>z(n,{nested:!0})).sort().map(n=>{let o=n.split("/").slice(-2,-1)[0]??"skill",{name:s,description:r}=vt(e,`${o}.md`,t[n]);return{name:s,description:r??""}})}function pa(e,t,n,o,s,r,i){let a=$t(e,o);if(a){let f=t.passes[n].own;return{files:Object.fromEntries(f.map(m=>[m,a[m]])),read:f,own:f,...t.passes.length>1?{pass:{part:n+1,count:t.passes.length,own:f,context:[],skills:[]}}:{}}}o=se(e,o,s);let c=new Set(t.core),l=n===0?[...t.core,...t.passes[0].own]:t.passes[n].own,d=[...t.core,...t.passes[n].own,...t.passes.length>1?t.passes[n].context??[]:[]],p=je(e,{paths:Object.keys(o),files:o,graph:s,repos:i}),u=Ve(d.map(f=>({repo:"",path:f,text:c.has(f)?me(o[f]):o[f]})),c,Ne(s),p),g=Object.fromEntries(u.map(f=>[f.path,f.text])),h=r?.enabled?ae(r.inputs.map(f=>({...f,files:se(e,f.files,s)})),g):void 0;return{files:g,...t.passes.length>1?{pass:{part:n+1,count:t.passes.length,own:l,context:t.passes[n].context??[],skills:Pp(e,o)}}:{},read:u.map(f=>f.path),own:l,...h?{codeSources:h.sources,codeSkipped:h.skipped}:{}}}function da(e){return e.find(t=>!t.notFoundAt)??e[0]??null}function Ap(e,t){return t.startsWith(`${e}#`)?t.slice(e.length+1):null}function Fp(e,t){let n=[];for(let o of e?.nodes??[]){let s=o.kind==="agent"?t?Ap(t,o.id):o.id.slice(o.id.indexOf("#")+1):null;s!==null&&n.push({node:o,unitId:s})}return n}function Mp(e,t,n){if(n==null)return e[0];let o=e.flatMap(i=>(i.node.files??[]).flatMap(a=>(a.role==="system prompt"||a.role==="knowledge")&&a.path===t&&a.span?[{c:i,span:a.span}]:[])),s=o.find(i=>i.span&&i.span.from<=n&&n<=i.span.to);if(s)return s.c;let r=null;for(let i of o)i.span&&i.span.to<n&&(!r||i.span.to>r.to)&&(r={c:i.c,to:i.span.to});return r?.c??e[0]}function fa(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)&&on({path:e.file,line:e.line??null,excerpt:e.excerpt},[{...n,sources:[o]}],o.unitKey,n.files)).map(o=>o.unitKey)))]}function Tp(e,t,n,o){let s=fa(e,n);if(s.length)return{unitKey:s.length===1?s[0]:null,anchors:s,code:!0};let r=e.file?Fp(t,e.repo??"").filter(i=>i.node.files?.some(a=>a.path===e.file)):[];return{unitKey:r.length?Mp(r,e.file,e.line).unitId:o,anchors:s,code:!1}}function no(e,t,n,o){let s=e[0];if(!s)return!0;let r=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])))}})),i=d=>r.filter(p=>!d.repo||!p.repo||p.repo===d.repo),a=i(s),c=Np(s,t,a.map(d=>d.input),o,{savedRepoPaths:!0});if(!c.unitKey&&!c.code)return!0;let l=c.unitKey?[c.unitKey]:c.anchors;return e.every(d=>{let p=i(d).filter(g=>!s.repo||!g.repo||g.repo===s.repo),u=c.unitKey?[]:fa(d,p.map(g=>g.input));return l.every(g=>(!u.length||u.includes(g))&&p.filter(h=>h.unitKey===g).every(h=>on({path:d.file??"",line:d.line??null,excerpt:d.excerpt??null},[h.input],g,h.files)))})}function ua(e,t,n=!1){let o=n?Lr:Tr,s=t?e.filter(r=>r.repoPath&&o(r.repoPath)===t):[];return{rows:s,unitRows:s.filter(r=>r.unitKey)}}function Lp(e,t,n={}){let{rows:o,unitRows:s}=ua(e,t,n.savedRepoPaths);return da(s)?.id??o[0]?.id??(e.length===1?e[0].id:null)}function Np(e,t,n,o,s){let r=o?Lp(o,e.repo,s):null,i=o?.find(d=>d.id===r)?.unitKey??null,{unitRows:a}=ua(o??[],e.repo,s.savedRepoPaths);if(o&&(!e.repo||!a.length))return{unitKey:i,anchors:[],code:!1,agentId:r};let c=Tp(e,t,n,i);if(!o)return{...c,agentId:null};let l=a.find(d=>d.unitKey===c.unitKey);return{...c,unitKey:c.code?c.unitKey:l?.unitKey??i,agentId:c.unitKey?l?.id??(c.code?null:r):null}}async function ys(e,t){let n=pa(e,t.plan,t.index,t.files,t.reading,t.codeEvidence,t.repos),o=await aa(t.llm,i=>ca(e,i,{graph:t.graph,...n,activitySnapshot:t.repos.length?t.repos.flatMap(a=>Object.values(a.files??{})):Object.values(t.files),activitySnapshotComplete:!t.plan.skipped.length&&!t.repos.some(a=>a.refused?.length),qualityConfig:t.qualityConfig})),s=la(o,new Set(n.read),new Set(n.own));if(!t.codeEvidence?.enabled)return s;let r=t.codeEvidence.inputs.flatMap(i=>i.unitKey?[{repo:i.repo,unitKey:i.unitKey,input:i,files:n.files}]:[...new Set(i.sources.map(a=>a.unitKey))].map(a=>({repo:i.repo,unitKey:a,input:i,files:n.files})));return s.filter(i=>no([...i.site?[{...i.site,excerpt:i.excerpt}]:[],...i.otherSites??[]].map(a=>({repo:t.codeEvidence?.repoByPath?.[a.path]??null,file:a.path,line:a.line,excerpt:a.excerpt})),t.graph,r,t.codeEvidence?.agentRows))}function oo(e,t,n=15e4,o,s,r){let{all:i,shadowed:a}=Pe(e),c=$t(r,Object.fromEntries(i.map(k=>[k.path,k.text])));if(c)return{files:c,skipped:[],readByRepo:Object.fromEntries(e.map(k=>[k.key,Object.keys(k.files??{})])),shadowed:a,warnings:[]};let l=se(r,Object.fromEntries(i.map(k=>[k.path,k.text])),t),d=i.map(k=>({...k,text:l[k.path]})),p=o??Q(t),u={},g=[],h={},f=0,m=je(r,{paths:d.map(k=>k.path),files:l,graph:t,repos:e});for(let k of Ve(d,p,Ne(t),m)){if(!p.has(k.path)&&f+k.text.length>n){g.push(k.path);continue}let b=p.has(k.path)?me(k.text):k.text;u[k.path]=b,(h[k.repo]??=[]).push(k.path),f+=b.length}let w=jp(u,p),v=[...w>n?[`The agent's core files (${Math.round(w/1e3)} KB) are larger than one reading pass, so they were read in full and nothing else was read`]:[],...[qn(p,l)].filter(k=>!!k)],S=Gt(m,g.map(k=>({path:k,reason:"total"})));S&&v.push(S);let y=s?.enabled?ae(s.inputs.map(k=>({...k,files:se(r,k.files,t)})),u):void 0;return{files:u,skipped:g,readByRepo:h,shadowed:a,warnings:[...v,...y?.warnings??[]],...y?{codeSources:y.sources,codeSkipped:y.skipped}:{}}}var jp=(e,t)=>Object.entries(e).reduce((n,[o,s])=>n+(t.has(o)?s.length:0),0);import{posix as ga}from"node:path";var Dp=e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),Bp=(e,t)=>new RegExp(`(?<![\\w-])${Dp(t)}(?![\\w-])`).test(e);function ot(e,t){return t.name!==null&&Bp(e,t.name)||$e(t.paths,[e],n=>n).length>0}function ma(e,t){let n=e.map(a=>a.paths.map(c=>t[c]).join(`
4
+ `)),o=(a,c)=>ot(n[a],e[c]),s=e.map(()=>new Set);for(let a=0;a<e.length;a++)for(let c=a+1;c<e.length;c++)(o(a,c)||o(c,a))&&(s[a].add(c),s[c].add(a));let r=new Set,i=[];for(let a=0;a<e.length;a++){if(r.has(a))continue;let c=[],l=[a];r.add(a);for(let d=l.shift();d!==void 0;d=l.shift()){c.push(d);for(let p of s[d])r.has(p)||(r.add(p),l.push(p))}c.sort((d,p)=>d-p),i.push({bundles:c.map(d=>e[d]),bytes:c.reduce((d,p)=>d+e[p].bytes,0),adjacent:Object.fromEntries(c.map(d=>[e[d].key,[...s[d]].map(p=>e[p].key).sort()]))})}return i.sort((a,c)=>c.bytes-a.bytes||(a.bundles[0].key<c.bundles[0].key?-1:1))}function ha(e){let t=new Map(e.bundles.map(r=>[r.key,r])),n=new Set,o=r=>e.adjacent[r.key].filter(i=>n.has(i)).length,s=[];for(;t.size>0;){let r=[...t.values()].sort((i,a)=>o(a)-o(i)||e.adjacent[a.key].length-e.adjacent[i.key].length||a.bytes-i.bytes||(i.key<a.key?-1:1))[0];t.delete(r.key),n.add(r.key),s.push(r)}return s}function ka(e,t,n,o,s){if(e.length<2)return{passes:e};let r=new Set(e.flatMap(l=>l.own)),i=[...r].filter(l=>/\.md$/i.test(l)).sort(),a=l=>[...new Set([...$e(i,[n[l]],d=>d),...$e(i,[n[l]],d=>ga.relative(ga.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 w=new Set;for(let S of o)if(ot(n[m],S))for(let y of S.paths.filter(k=>z(k,{nested:!0})))w.add(y);for(let S of a(m))w.add(S);for(let S of[...w].filter(y=>z(y,{nested:!0})))for(let y of a(S))w.add(y);for(let S of w)u.add(S);let v=[...w];for(let S=0;S<v.length;S++){let y=v[S];for(let k of a(y))w.has(k)||(w.add(k),v.push(k))}for(let S of w)r.has(S)&&!d.has(S)&&p.set(S,(p.get(S)??0)+1)}let g=[...p.keys()].sort((m,w)=>Number(u.has(w))-Number(u.has(m))||p.get(w)-p.get(m)||(m<w?-1:1)),h=[],f=0;for(let m of g){let w=n[m].length;f+w<=s&&(h.push(m),f+=w)}return{own:l.own,context:h.sort()}})}}import{basename as wa}from"node:path";function Ss(e,t,n,o){let s=[...n].sort();return{key:e,name:t,paths:s,bytes:s.reduce((r,i)=>r+o[i].length,0)}}function ya(e,t){let n=Q(t),o=new Set(Object.keys(e).filter(c=>!n.has(c))),s=[],r=c=>c.filter(l=>o.delete(l)),i=new Set(t.edges.filter(c=>c.kind==="delegates").map(c=>c.to));for(let c of t.nodes){if(!i.has(c.id)||!c.sourceRef)continue;let l=c.sourceRef.path.replace(/\.md$/i,"")+"/",d=(c.files??[]).filter(h=>h.role==="skill").map(h=>Dt(h.path,{nested:!0})?.folder).filter(h=>!!h),p=[...o].filter(h=>h.startsWith(l)||d.some(f=>h.startsWith(f+"/"))),u=(c.files??[]).filter(h=>h.role==="reference"||h.role==="skill").map(h=>h.path),g=r([...p,...u]);g.length&&s.push(Ss(l,wa(l),g,e))}let a=new Map;for(let c of o){let l=Dt(c,{nested:!0})?.folder;l&&a.set(l,[...a.get(l)??[],c])}for(let[c,l]of a)s.push(Ss(c,wa(c),r(l),e));for(let c of o)s.push(Ss(c,null,[c],e));return s.sort((c,l)=>c.key<l.key?-1:c.key>l.key?1:0)}var Kp=(e,t)=>e.reduce((n,o)=>n+t[o].length,0);function Sa(e,t,n,o){let s=n-t;return e<=n||s<=0?1:Math.min(o,Math.ceil((e-t)/s))}function qp(e,t,n){return e.bytes<=t?[e.bundles]:ha(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 Hp(e,t){let n=e.split("/").slice(0,-1);for(let o=n.length;o>0;o--){let s=n.slice(0,o).join("/"),r=t.find(i=>i.own.some(a=>a.startsWith(`${s}/`)));if(r)return r}}function xa(e){e={...e,files:se(e.settings,e.files,e.graph)};let{passMaxBytes:t,maxPasses:n,graph:o}=e,s=Q(o),r=Object.keys(e.files).filter(x=>s.has(x)).sort(),i=Object.fromEntries(Object.entries(e.files).map(([x,C])=>[x,s.has(x)?me(C):C])),a=t-Kp(r,i),c=Object.keys(i).filter(x=>!s.has(x)),l=je(e.settings,{paths:Object.keys(i),graph:o,files:i,repos:e.repos}),d=Ne(o),p=Yo(c.filter(x=>Si(l,x)),i,d,l),u=new Set(p),g=new Set(o.nodes.flatMap(x=>(x.files??[]).map(C=>C.path))),h=Object.fromEntries(c.filter(x=>!u.has(x)).map(x=>[x,i[x]])),f=ya(h,o),m=x=>x.name!==null||kt(x.paths[0])&&g.has(x.paths[0]),w=f.filter(x=>!m(x)).flatMap(x=>x.paths),v=[qn(r,e.files)].filter(x=>!!x),S=[],y=[];if(a<=0){v.push("The agent's core files fill a whole reading pass, so nothing else was read");let x=Gt(l,c.map(C=>({path:C,reason:"total"})));return x&&v.push(x),{core:r,passes:[{own:[]}],skipped:[...c].sort(),warnings:v}}for(let x of p){let C=i[x].length,E=y.find(I=>I.bytes+C<=a);!E&&C<=a&&y.length<n&&(E={own:[],bytes:0},y.push(E)),E?(E.own.push(x),E.bytes+=C):S.push(x)}let k=new Set(y);for(let x of ma(f.filter(m),h)){let C=x.bytes>a,E;for(let I of qp(x,a,i)){let R=I.reduce((U,Bo)=>U+Bo.bytes,0),P=I.flatMap(U=>U.paths),N=(C&&E&&E.bytes+R<=a?E:void 0)??y.find(U=>(!C||k.has(U))&&U.bytes+R<=a);N?(C&&(E=N),N.own.push(...P),N.bytes+=R):R>a||y.length>=n?S.push(...P):(E={own:[...P],bytes:R},y.push(E))}}y.length===0&&y.push({own:[],bytes:0});let b=Yo(w,i,d,l);for(let x of b){let C=R=>R.bytes+i[x].length<=a,E=Hp(x,y),I=E&&C(E)?E:y.find(C);if(!I){S.push(x);continue}I.own.push(x),I.bytes+=i[x].length}let O=y.map(x=>({own:x.own.sort()})),_=Gt(l,S.map(x=>({path:x,reason:"total"})));_&&v.push(_);let $=ka(O,r,e.files,f,e.contextMaxBytes??6e4);return{core:r,passes:$.passes,skipped:S.sort(),warnings:v}}function He(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 Ga}from"node:crypto";import{basename as rd}from"node:path";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}:{}}}import{createHash as Up}from"node:crypto";function ba(e,t,n){let o=[e,t.prompt.path,t.prompt.symbol??"",n,t.link?.callExcerpt??""];return Up("sha256").update(o.join("\0")).digest("hex")}var Gp=200,Wp=6e3,Xp=1200,zp=[3,4,5],so=e=>zp.includes(e.score)&&e.prompt.chars>=Gp,Vp=5;function Jp(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-Vp);return o.split(`
5
+ `).slice(s).join(`
6
+ `).slice(0,Xp)}function Qp(e){let{path:t,line:n,symbol:o}=e.prompt;return o?`${t}:${n} (${o})`:`${t}:${n}`}function ln(e,t,n){let o=xt(n,t.manifest),s=Wn(t,o);return{candidate:t,fingerprint:ba(e,t,s),text:s.slice(0,Wp),usage:Jp(t,o),location:Qp(t)}}function va(e,t){let{candidates:n,files:o,repoKey:s,stored:r,flags:i}=t,a=i.scan&&i.model&&t.hasClient,c=[],l=[],d=[],p=Math.max(0,6-(t.alreadyDue??0)),u=Math.min(p,Math.max(0,De()-t.agentCountSoFar)),g=Yt(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=a&&so(h)?ln(s,h,o):null;!f||!f.text||r.has(f.fingerprint)?d.push(h):c.length<u?c.push(f):c.length>=p?l.push({candidate:h,fingerprint:f.fingerprint}):d.push(h)}return{due:c,overCap:l,ineligible:d}}function Oa(e,t,n){let o=new Map(t.map(i=>[i.fingerprint,i])),s=new Map(n.failed.map(i=>[i.fingerprint,i.why])),r={...It(e,n.scanInfo),possible:[]};for(let i of e.possible){let{fingerprint:a}=ln(n.repoKey,i,n.files),c=o.get(a),l=s.get(a);c?.isPrompt?r.agents.push({candidate:i,confirmedBy:{model:c.model,name:c.name}}):c?r.rejected.push({candidate:i,reason:c.reason,model:c.model}):l?r.unchecked.push({candidate:i,why:l}):r.possible.push(i)}return r}var ro=e=>`${e.prompt.path}:${e.prompt.line}`,Yp=(e,t,n)=>`${e} ${e===1?t:n}`;function io(e,t,n,o){let s=De(),r=`${n.repoKey}: `,i=[],{kept:a}=ke(e,t.agents),c=t.agents.length+t.omitted.strong;c>s&&i.push(Ui({kind:"scan",found:c})),a.forEach(({candidate:u,confirmedBy:g},h)=>{g&&i.push(`${r}${o[h]}: included on ${g.model}'s reading of ${ro(u)} \u2014 the code alone was not conclusive`)}),n.reportSkippedFiles!==!1&&i.push(...Cn(On(t),t.skippedFiles?0:t.notReadMore));let l=t.agents.length===0?t.callsWithoutPrompt[0]:void 0;l&&i.push(`${r}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=>`${r}not an agent prompt, per ${u.model}: ${ro(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`${r}possible agent prompt not checked: ${ro(u.candidate)} \u2014 ${g}`}),...t.possible.map(u=>`${r}possible agent prompt not included: ${ro(u)}${u.prompt.symbol?` (${u.prompt.symbol})`:""} \u2014 nothing in the scanned code sends it to a model`)];i.push(...d.slice(0,10));let p=Math.max(0,d.length-10)+t.omitted.possible;return p>0&&i.push(`${r}${Yp(p,"more possible agent prompt is","more possible agent prompts are")} not listed here`),t.truncated&&!t.skippedFiles?.some(({reason:u})=>u==="scan-limit")&&i.push(`${r}scanned ${t.scanned} of ${t.total} code files (the ${oe.codeScan.files}-file / ${oe.codeScan.bytes/1e6} MB budget); agents defined in the rest were not looked for`),i}function bs(e,t,n,o){if(!he(e))return null;let s=yi(e,[...o.sizes.keys()],o.root,{},o.agentConfigurations??{});return Bi(e,t.map(r=>{let i=T(r.prompt),a=o.modelOverrides?.includes(i);return{id:i,scope:s.ownerOf(r.prompt.path)??s.scopes[0],ownFiles:a?ge({...r,modelId:null},[],e):ge(r,n,e),toolCall:Vt(r)}}),{...o,scopes:s})}function rt(e){return e.refused.filter(t=>t.reason!=="other-agent"&&t.reason!=="provider-transport")}var Zp=24;function Rt(e,t,n,o=new Map,s={files:{}}){let r=t.agentInventory??t,i=s.page??t.agentPage?.context??{commit:"",scope:s.root??""},a=Hi(e,[...r.strong,...r.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:i.commit,scope:i.scope},s.page?s.page.continuation:t.agentPage?.current,s.page?.pageSize,{strong:oe.codeAgent.importBytes,possible:oe.candidateFetch.check});if(a){let h=new Set(a.selected);t={...t,strong:r.strong.filter(f=>h.has(T(f.prompt))),possible:r.possible.filter(f=>h.has(T(f.prompt)))}}let c=ed(e,t,n,o);if(a){let h=new Set([...c.strong,...c.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 w=f.prompt.path,v=n.has(w)?c.refused.find(S=>S.path===w)?.reason??c.notRead.find(S=>S.candidate===f)?.kind??(c.skipped.includes(f)?"prompt-over-limit":"confirmation-window"):"missing";a.refusals.push({id:m,reason:v})}a.partial||=a.refusals.length>0,c.page=a}if(!he(e))return a&&(a.estimatedInputBytes=c.paths.reduce((h,f)=>h+(n.get(f)??0),0)),c;let l=Jt(o,s.replacementBytes),d=a?[...r.strong,...r.possible]:[...t.strong,...t.possible],p=bs(e,d,t.repoModelIds,{...s,sizes:n,total:l,selectedIds:[...c.strong,...c.window].map(h=>T(h.prompt)),confirmationIds:c.window.map(h=>T(h.prompt))}),u=j(c.refused,...p.map(rt)),g=[...new Set(p.flatMap(h=>h.files.map(f=>f.path)))];return a&&(a.estimatedInputBytes=g.reduce((h,f)=>h+(n.get(f)??0),0)),{...c,paths:g,manifests:p,refused:u,skippedFiles:j(c.skippedFiles,...p.map(rt))}}var Ca=(e,t,n,o=new Map)=>Rt(e,t,n,o).paths;function ed(e,t,n,o){let s=Jt(o);if(Yt(e))for(let m of t.strong)Ze(e,{ownPaths:[m.prompt.path]},{files:{},sizes:n,total:s});let r=[],i=[],a=[],c=[],l=[],d=[],p=0,u=m=>{d.length<10?d.push(m):p++},g=m=>{for(let w of m)r.includes(w)||r.push(w)};for(let m of t.strong){if(!Yt(e)&&i.length>=De())break;let w=n.get(m.prompt.path),v=J(e,{path:m.prompt.path,size:w},{purpose:"pointer",route:"github"});if(v.admitted||l.push({path:m.prompt.path,reason:v.reason}),!v.admitted&&v.reason!=="too-large"){a.push(m);continue}let S=w===void 0||!v.admitted;if(S||!s.chosen.has(m.prompt.path)&&w>s.left){a.push(m),c.push({path:m.prompt.path,reason:w===void 0?"missing":S?"too-large":"total"}),u({candidate:m,path:m.prompt.path,kind:S?"prompt-too-large":"prompt-over-limit"});continue}let y=ge(m,t.repoModelIds,e).map(({path:b})=>b),k=Ze(e,{ownPaths:y},{files:{},sizes:n,total:s});l.push(...k.refused),i.push(m),g(k.paths),c.push(...k.skipped),k.skipped.forEach(({path:b})=>u({candidate:m,path:b,kind:"extra"}))}let h=oe.candidateFetch.check,f=t.possible.filter(so).slice(0,Zp).filter(m=>{let w=ge(m,t.repoModelIds,e).map(({path:_})=>_),v=w.filter(_=>!s.chosen.has(_)),S=n.get(m.prompt.path),y=J(e,{path:m.prompt.path,size:S},{purpose:"pointer",route:"github"});if(y.admitted||l.push({path:m.prompt.path,reason:y.reason}),S===void 0||!y.admitted||!s.chosen.has(m.prompt.path)&&S>h)return!1;let k=new Set(s.chosen),b=Ze(e,{ownPaths:w},{files:{},sizes:n,total:{left:Math.min(h,s.left),chosen:s.chosen}});if(l.push(...b.refused),!b.paths.includes(m.prompt.path))return!1;let O=v.filter(_=>!k.has(_)&&b.paths.includes(_)).reduce((_,$)=>_+n.get($),0);return h-=O,s.left-=O,g(b.paths),!0});return{paths:r,strong:i,window:f,notRead:d,notReadMore:p,skipped:a,skippedFiles:c,refused:j(l)}}import{basename as $a}from"node:path";import{basename as td}from"node:path";function Ae(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")||"agent"}function ao(e,t,n){let o=new Set(t);return s=>{let r=`${e}${Ae(s)}`,i=r;if(o.has(i)){let a=2;for(;o.has(`${r}-${a}`);)a++;i=`${r}-${a}`,n(s,i)}return o.add(i),i}}function _a(e,t){return e??(t?Ae(td(t)):"agent")}var nd=new Set(["system","prompt","prompts","instruction","instructions"]);function Ea(e){let t=e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[^A-Za-z0-9]+/).filter(n=>n&&!nd.has(n.toLowerCase())).map(n=>n.toLowerCase());return t.length?t.join(" ").replace(/^./,n=>n.toUpperCase()):null}function Ia(e,t){let{prompt:n,link:o}=e;if(o?.kind==="L1"&&o.shortLabel)return o.shortLabel;let s=n.symbol?Ea(n.symbol):null;if(s)return s;if(o?.shortLabel)return o.shortLabel;let r=n.enclosing?Ea(n.enclosing):null;return r||t||`${$a(n.path).replace(/\.[^.]*$/,"")}:${n.line}`}function Ra(e,t,n){let o=t?`${Ae($a(t))}-`:"";return ao(o,[],(s,r)=>{n.push(`${e}: two agents are named ${s}; the second is ${r}`)})}function Pa(e,t,n,o){return t.map(s=>({...s,tools:s.manifest&&he(e)?s.tools:os({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 od(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 sd(e,t,n){if(!t.forImport&&!t.forLocal)return n;let o=n.candidate.prompt,s=i=>i.kind==="file"?null:i.symbol??`line ${i.span.from}`,r=od(e.agents,o);return[...t.importCandidates??[],...e.agents].find(({candidate:i})=>i.prompt.path===o.path&&i.prompt.span.from===o.span.from&&s(i.prompt)===s(o)&&(!r||i.prompt.start===o.start))??n}function Aa(e,t,n){let o=[];return{agents:t.agents.flatMap(r=>{let{candidate:i}=r;if(Go(e,i.prompt.path,i.promptSource==="marker"))return[r];let a=i.alsoLoads?.find(l=>Go(e,l)&&Object.hasOwn(n,l));if(!a)return[];let c=Fr(a,n[a]);return o.push([T(i.prompt),T(c)]),[{...r,candidate:{...i,prompt:c,manifest:void 0,alsoLoads:[i.prompt.path,...(i.alsoLoads??[]).filter(l=>l!==a)]}}]}),aliases:o}}function pn(e,t,n){return!!t&&Aa(e,t,n).agents.length>0}function Fa(e,t,n){let o=[],s=Ra(n.repoKey,n.root,o),r=[...On(t)],i=[],a=new Map(Object.entries(n.files).map(([w,v])=>[w,Buffer.byteLength(v)])),{agents:c,aliases:l}=Aa(e,t,n.files),{kept:d}=ke(e,c),p=he(e),u=d.map(({candidate:w},v)=>p&&!vs(n,v).model?w.manifest:void 0),g=p&&u.some(w=>!w)?bs(e,d.map(({candidate:w})=>w),t.repoModelIds,{files:n.files,sizes:a,root:n.root,agentConfigurations:n.agentConfigurations,modelOverrides:d.flatMap(({candidate:w},v)=>vs(n,v).model?[T(w.prompt)]:[])}):null,h=d.map(({candidate:w,confirmedBy:v},S)=>{let y=vs(n,S),{prompt:k,link:b}=w,O=y.name??Ia(w,v?.name??null),_=s(O),$=[],x=`${n.repoKey}: ${O}: `,C=y.model?null:ss(w,t.repoModelIds),E=y.model?{value:y.model,from:"marker",path:null,line:null}:C?{...C,from:w.modelId?"call":"only-model-in-code"}:null;C&&!w.modelId&&$.push(`${x}model ${C.value} assumed from ${C.path}:${C.line} (the only model id in the code)`);let I=y.model?ge({...w,modelId:null},[],e):ge(w,t.repoModelIds,e),R=u[S]??g?.[S],P=xt(n.files,R),N=R?R.files.map(G=>I.find(xp=>xp.path===G.path)??{path:G.path,role:G.roles.includes("config")?"config":"code",label:null,...G.spans.length===1?{span:G.spans[0]}:{}}):I,U=I.map(({path:G})=>G),Bo=[...U,...n.codingGuides??[]],Me=sd(t,n,{candidate:w,confirmedBy:v}),Ko=Vt(w),vn=Me.candidate===w?Ko:Vt(Me.candidate),qo=R?.files.map(G=>G.path),hr=R&&qo?{paths:qo,skipped:rt(R),...os({ownPaths:qo,toolCall:vn},P)}:null,Ho=hr??Ze(e,{ownPaths:U,toolCall:Ko},{files:n.files,sizes:a,root:n.root,guides:n.forImport?void 0:n.codingGuides}),Uo=hr??(n.forImport&&(Bo.length!==U.length||vn!==Ko)?Ze(e,{ownPaths:U,toolCall:vn},{files:n.files,sizes:a,root:n.root,guides:n.codingGuides}):Ho),gr={paths:Uo.paths,skipped:Uo.skipped.filter(({reason:G})=>G!=="missing")};r.push(...Ho.skipped.filter(({reason:G})=>G!=="missing")),n.forImport&&i.push(...gr.skipped),$.push(...Ho.toolWarnings.map(G=>`${x}${G}`)),o.push(...$);let kr=b?`${b.callPath}:${b.callLine}`:null,yp=kr?`, sent from ${kr}`:"",Sp=w.shape?` Answers in the shape of ${w.shape.name}.`:"";return{unitKey:_,name:O,description:y.description??`Instructions in ${k.path} (${k.symbol??`line ${k.span.from}`})${yp}.${Sp}`,model:E,prompt:Me.candidate.prompt,instructionText:Wn(w,P),...Me.candidate.prompt.filledAtRunTime?{filledAtRunTime:!0}:{},sentFrom:Me.candidate.link?`${Me.candidate.link.callPath}:${Me.candidate.link.callLine}`:null,confirmedBy:Me.confirmedBy?.model??null,toolCall:vn,ownFiles:N,reading:gr,tools:Uo.tools,warnings:$,...R?{manifest:R}:{}}}),f=new Map(d.map(({candidate:w},v)=>[T(w.prompt),h[v].unitKey]));for(let[w,v]of l){let S=f.get(v);S&&f.set(w,S)}for(let[w,{candidate:v}]of d.entries()){let S=(v.links??[]).flatMap(y=>{let k=f.get(y.to);return k?[{to:k,kind:y.kind}]:[]});S.length&&(h[w].links=S)}let m=j(r,i);return{agents:h,skippedFiles:m,warnings:[...o,...io(e,{...t,agents:c},{...n,reportSkippedFiles:!1},h.map(({name:w})=>w)),...n.reportSkippedFiles!==!1?Cn(m,t.skippedFiles?0:t.notReadMore):[]]}}function Ma(e){let t=e.replace(/^local:/,"");return t.slice(t.lastIndexOf("/")+1)||t}function Ta(e,t,n,o={}){if(e.ranked&&e.scan){let{total:r,truncated:i}=e.scan;return{resolved:n?Oa(e.ranked,n.verdicts,{repoKey:e.key,files:e.files??{},failed:n.failed,flags:t,scanInfo:{total:r,truncated:i}}):It(e.ranked,{total:r,truncated:i})}}let s=o.markerPolicy==="any-read"?!!e.markerPath:e.markerKind==="agents"||e.markerKind==="prompt";return t.scan&&s?{resolved:null}:void 0}function Os(e){let t=We(e.root);return t?rd(t):Ma(e.repoKey)}function co(e,t,n=t.code&&(!t.code.resolved||pn(e,t.code.resolved,t.files))?"":Os(t),o=t.code?.resolved?.filenameReferences){let s={...t,root:We(t.root)};ht(e)&&!s.agentConfigurations&&(s.agentConfigurations=Bn(e,s.listedPaths??Object.keys(s.files),s.root));let r=Xn(e,{files:s.files,root:s.root,fallbackName:n,skills:!0,listedPaths:s.listedPaths,agentConfigurations:s.agentConfigurations,filenameReferences:o,codeAgentsFound:pn(e,s.code?.resolved,s.files)});return r.projection==="conventions"&&delete s.code,{input:s,conventions:r}}function lo(e,t,n,o,s={}){let r={repoKey:t.key,files:ui(o.projectAgents,t.key,t.files??{}),...t.root?{root:t.root}:{},...ht(e)?{agentConfigurations:t.agentConfigurations??{}}:{},code:Ta(t,n,s.checks),modelReader:o.modelReader??!1};return co(e,r)}function dn(e,t){let n={repoKey:t.repoKey,files:t.files,...t.root?{root:t.root}:{},...ht(e)?{agentConfigurations:t.agentConfigurations??{}}:{}};return co(e,n)}function La(e,t){return`${e}: no agent found \u2014 no convention files (looked for ${Vo}) and no system prompt in code (scanned ${t.scanned} code files for prompt constants, prompt files and model calls)`}function it(e,t){switch(e.code){case"unreadable-crew":return`${e.path}: ${e.detail}`;case"duplicate-agent":return`${e.path} matches ${e.detail||"the root agent"}; the copy was left out.`;case"agent-cap":return e.detail;case"invalid-config":return"counterfact.json is present but not valid JSON; ignoring it";case"pointer-owned-by-subagent":return`${e.path} belongs to a sub-agent; ignored as the main prompt.`;case"pointer-missed":return`${t?`${t}: `:""}counterfact.json points at ${String(e.detail??e.path)}, which was not found; ignored`;case"pointer-guide":return`${t?`${t}: `:""}counterfact.json points at ${String(e.detail??e.path)}, which is a coding-assistant guide, not an agent prompt; ignored`;case"explicit-guide":return`${e.path} is a coding-assistant guide, not an agent prompt; ignored`;case"secret-file":return gi(e.path);case"claude-fallback":return`no dedicated prompt file found; used ${e.path??Xo} as the system prompt`;case"no-prompt":return`no system prompt found (looked for ${zo}); 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 de(e,t){switch(e.code){case"unreadable-crew":return`${t}: ${it(e)}`;case"duplicate-agent":case"agent-cap":return`${t}: ${it(e)}`;case"invalid-config":return`${t}: counterfact.json is not valid JSON; ignored`;case"pointer-owned-by-subagent":return`${t}: ${it(e)}`;case"pointer-guide":return it(e,t);case"explicit-guide":return`${t}: ${it(e)}`;case"pointer-missed":return null;case"secret-file":return null;case"claude-fallback":return`${t}: no system prompt file; using ${e.path??Xo}`;case"no-prompt":return e.detail==="no-conventions"?`${t}: no agent conventions found (looked for ${Vo})`:`${t}: ${e.folderAgentsFound?"the root agent has ":""}no system prompt file (looked for ${zo})`;case"orphan-skill":return`${t}: ${it(e)}`;case"frontmatter":return z(e.path,{nested:!0})?null:`${t}: ${it(e)}`}}import{basename as id}from"node:path";function Na(e,t,n){return n?`Instructions in ${t.filter(s=>s.role==="soul"||s.role==="knowledge").map(s=>id(s.path)).join(" and ")}.`:e?`Instructions in ${e}.`:"No system prompt file found."}import{posix as Da}from"node:path";function ja(e,t,n){let o=Fa(e,t,{...n,modelReader:n.modelReader??!1}),s={};return{nodes:o.agents.map(i=>{let{unitKey:a,prompt:c}=i;return s[a]=i.instructionText,{id:a,label:i.name,kind:"agent",desc:i.description,meta:i.model?.value??null,sourceRef:{path:c.path,line:c.span.from},files:[...i.ownFiles],tools:i.tools.map(({tool:l})=>yt(l.name))}}),agents:o.agents,warnings:o.warnings,instructionSpans:s,...o.skippedFiles.length?{skippedFiles:o.skippedFiles}:{}}}function po({repoKey:e,files:t,root:n,conventions:o,nodes:s,parentId:r,candidates:i,resolved:a}){let c=s.map(g=>({...g,files:[...g.files]})),l=[],d=[];for(let g of a.notes.filter(h=>h.code==="orphan-skill")){let h=de(g,e);h&&d.push(h)}let p=r?c.find(g=>g.id===r):c[0];if(!p)return{nodes:c,edges:l,warnings:d};let u=ao(n?`${p.id}-`:"",c.map(g=>g.id),(g,h)=>{d.push(`${e}: two sub-agents are named ${g}; the second is ${h}`)});for(let g of a.subagents){let{path:h}=g,f=g.files??g.skillPaths.map(S=>o.skillNames[S]?{role:"skill",path:S,label:o.skillNames[S]}:{role:"reference",path:S,label:o.skillRefNames[S]??null}),m=(g.files?[]:$e(i,[h,...f.map(S=>S.path)].map(S=>t[S]??""),o.stripRoot)).map(S=>({role:"reference",path:S,label:null})),w="key"in g&&typeof g.key=="string"?g.key:void 0,v=w?c.find(S=>S.id===w):c.find(S=>S.id!==p.id&&S.sourceRef?.path===h);if(v){let S=new Set(v.files.map(y=>y.path));v.files.push(...[...f,...m].filter(y=>!S.has(y.path)))}else{for(let y of a.notes.filter(k=>k.code==="frontmatter"&&k.path===h)){let k=de(y,e);k&&d.push(k)}v={id:w??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:[...w&&f.some(y=>y.path===h&&y.role==="system prompt")?[]:[{role:"system prompt",path:h,label:null}],...f,...m],tools:(g.tools??[]).map(yt)},c.push(v)}l.push({from:p.id,to:v.id,kind:"delegates",label:null,sourceRef:{path:h,line:1}})}return{nodes:c,edges:l,warnings:d}}function qa(e,t,n){let o=ad(e,t,n),{input:s,conventions:r}=t,i=r.agents.filter(S=>S.layoutCall);if(!i.length||o.markerAgentsFound)return o;let a=new Set((o.codeAgents??[]).filter(S=>i.some(y=>{let k=y.layoutCall;return k.path!==S.toolCall.path?!1:k.callStart!==void 0&&S.toolCall.callStart!==void 0?k.callStart===S.toolCall.callStart:k.promptPath===S.prompt.path&&k.promptStart===S.prompt.start})).map(S=>S.unitKey)),c=n(s,{...r,agents:i,notes:[]}),l=[...new Map([...o.fragment.nodes.filter(S=>!a.has(S.id)),...c.fragment.nodes].map(S=>[S.id,S])).values()],d=ke(e,l.filter(S=>S.kind==="agent")),p=new Set(d.kept.map(S=>S.id)),u=l.filter(S=>S.kind!=="agent"||p.has(S.id)),g=new Set(u.map(S=>S.id)),h=[...new Map([...o.fragment.edges,...c.fragment.edges].filter(S=>g.has(S.from)&&g.has(S.to)).map(S=>[JSON.stringify(S),S])).values()],{codeAgents:f,...m}=o,w=f?.filter(S=>!a.has(S.unitKey)&&g.has(S.unitKey)),v=d.leftOut.flatMap(S=>S.sourceRef?.path?[{path:S.sourceRef.path,reason:"allowance"}]:[]);return{...m,fragment:{...o.fragment,nodes:u,edges:h},warnings:[...new Set([...o.warnings,...c.warnings])],...w?.length?{codeAgents:w}:{},...v.length?{skippedFiles:[...o.skippedFiles??[],...v]}:{}}}function ad(e,{input:t,conventions:n},o){let s=t.code?.resolved;if(ji(e)&&(n.projection!=="code"||n.agents.some(Xt))){let i=Object.keys(t.files),a=Ye(e,{phase:"start",paths:i,root:t.root,scanFlag:!0}),c=a.kind==="marker"?Ye(e,{phase:"read",pending:a,text:t.files[a.markerPath]??null}):a,l=c.kind==="settled"?c.scanPaths:void 0;if(l&&l.length<i.length){let d=new Set(l),p=Ka(e,{input:{...t,code:{resolved:null}},conventions:n},o),u=Ba(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}=ke(e,h),w=f.flatMap(k=>k.code?[k.code]:[]),v=m.flatMap(k=>k.code?[{path:k.code.candidate.prompt.path,reason:"allowance"}]:[]);if(!w.length)return v.length?{...u,skippedFiles:[...u.skippedFiles??[],...v]}:u;let S=Cs(e,t,Ce(e,l,t.root,t.listedPaths),{agents:[],notes:[]},{...s,agents:w},{}),y=new Map((S.codeAgents??[]).map(k=>[k.unitKey,`code:${T(k.prompt)}`]));return{...u,fragment:{nodes:[...u.fragment.nodes,...S.fragment.nodes.map(k=>({...k,id:y.get(k.id)??k.id}))],edges:[...u.fragment.edges,...S.fragment.edges.map(k=>({...k,from:y.get(k.from)??k.from,to:y.get(k.to)??k.to}))],warnings:[]},warnings:[...new Set([...u.warnings,...S.warnings])],...S.codeAgents?{codeAgents:[...u.codeAgents??[],...S.codeAgents.map(k=>({...k,unitKey:y.get(k.unitKey)??k.unitKey,...k.links?{links:k.links.map(b=>({...b,to:y.get(b.to)??b.to}))}:{}}))]}:{},...S.skippedFiles?.length||v.length?{skippedFiles:[...u.skippedFiles??[],...S.skippedFiles??[],...v]}:{}}}}let r=Ka(e,{input:t,conventions:n},o);return n.projection==="code"?Ba(e,t,n,r,o):r}function Ba(e,t,n,o,s){if(!o.codeAgents?.length||!n.agentScopes)return o;let r=new Set(o.codeAgents?.map(m=>m.prompt.path)),i=new Map(n.agentScopes.map(m=>[m.key,m])),a=n.agents.filter(m=>i.has(m.key)&&Pi(e,m,i.get(m.key).folder,t.root??"")&&(!Xt(m)||!r.has(m.prompt.path))),c=[...o.fragment.nodes.filter(m=>m.kind==="agent").map(()=>({agent:null})),...a.map(m=>({agent:m}))],{kept:l,leftOut:d}=ke(e,c),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 Ka(e,{input:t,conventions:n},o){let s=t.code,{repoKey:r,files:i,root:a}=t,c=Ce(e,Object.keys(i),a,t.listedPaths),l=c.configPath?Gn(i[c.configPath]):null,d=l?.config??null,p=l?.invalid===!0,u=d?Li(d):"bare",g=[];d&&u==="bare"&&(d.prompt||d.agents?.length)&&(g=ns(e,d,{repoKey:r,markerDir:Da.dirname(c.configPath).replace(/^\.$/,""),files:i}).warnings);let h;if(d&&u!=="bare"){let S=Da.dirname(c.configPath).replace(/^\.$/,""),y=ns(e,d,{repoKey:r,markerDir:S,files:i});h=y.agents.length>0;let k=y.agents.filter(_=>Gi(e,_.prompt.path,i,a)),b=y.agents.filter(_=>!k.includes(_)),O=k.flatMap(_=>{let $=de({code:"pointer-owned-by-subagent",path:_.prompt.path},r);return $?[$]:[]});if(b.length>0){let _=Cs(e,t,c,n,pd(b),{overrides:b.map(({name:$,model:x,description:C})=>({name:$,model:x,description:C})),configPath:c.configPath});return{..._,markerAgentsFound:h,markerWarnings:y.warnings,warnings:[...y.warnings,...O,...Ha(e,t,c,b.length),..._.warnings]}}g=[...y.warnings,...O]}let{resolved:f}=s;if(!f||cd(e,c,n)||u!=="bare"){let S=o(t);return{fragment:S.fragment,warnings:[...new Set([...g,...S.warnings])],...h===void 0?{}:{markerAgentsFound:h}}}let m=pn(e,f,i);if(m){let S=ld(e,t,c,n,f,d,p);return{...S,warnings:[...new Set([...g,...S.warnings])]}}let w=Wo({agentConfiguration:n.agents.some(S=>S.prompt.kind==="fallback"),usage:"map",codeAgentsFound:m,otherDefinitions:Dn(c)},e),v=c.claudePath&&w==="prompt"||c.configPath||n.agents.some(S=>ts(S)||S.layoutCall)?o(t,n):{fragment:{nodes:[],edges:[],warnings:[]},warnings:[La(r,f),...n.notes.filter(S=>S.code==="orphan-skill").flatMap(S=>{let y=de(S,r);return y?[y]:[]})]};return{fragment:v.fragment,warnings:[...v.warnings,...io(e,f,{repoKey:r,modelReader:t.modelReader,reportSkippedFiles:t.reportSkippedFiles},[])]}}function cd(e,t,n){return n.projection==="code"?!1:wi(e,t)?!0:n.agents.some(o=>Xt(o)&&ts(o))}function Ha(e,t,n,o){let s=Wo({usage:"map",codeAgentsFound:o>0,otherDefinitions:Dn(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 ld(e,t,n,o,s,r,i){let{repoKey:a}=t,c=s.agents.length,l=Cs(e,t,n,o,s,{primaryConfig:r,configPath:r?n.configPath:null}),d=i?de({code:"invalid-config"},a):null,p=d?[d]:[];return Dn(n)||p.push(`${a}: no agent convention files; found ${c===1?"1 agent":`${c} agents`} defined in code \u2014 add counterfact.json to name them yourself`),p.push(...Ha(e,t,n,c)),{...l,warnings:[...p,...l.warnings]}}function pd(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 Cs(e,{repoKey:t,files:n,root:o,modelReader:s,codingGuides:r,reportSkippedFiles:i,forImport:a,forLocal:c,code:l,agentConfigurations:d},p,u,g,h){let f=ja(e,g,{repoKey:t,root:o,files:n,modelReader:s,codingGuides:r,reportSkippedFiles:i,forImport:a,forLocal:c,agentConfigurations:d,...a&&l?.resolved?{importCandidates:l.resolved.agents}:{},overrides:h.overrides,primaryConfig:h.primaryConfig}),m=u.agents.find(x=>x.key===null)?.subagents??[],w=new Set(p.developerCompanionPaths),v;for(let x of f.nodes){let C=u.agents.find(P=>Xt(P)&&P.prompt.path===x.sourceRef?.path);if(!C)continue;let E=C.files.filter(P=>w.has(P.path)),I=new Set(x.files.map(P=>P.path));x.files.push(...E.filter(P=>!I.has(P.path)));let R=E.find(P=>P.role==="mcp")?.path??null;R&&x.tools.push(...Nn(e,t,n,{toolsPath:null,toolsTsPath:null,cliPath:null,mcpPath:R},f.warnings)),C.key===null&&C.subagents.some(P=>w.has(P.path))&&(v=x.id)}let S=new Set(m.map(x=>x.path)),y=new Set([...m.flatMap(x=>x.skillPaths),...u.notes.filter(x=>x.code==="orphan-skill").map(x=>x.path)]),{stripRoot:k}=p,b=new Set(f.nodes.flatMap(x=>x.files.map(C=>C.path))),O=p.scoped.filter(x=>!b.has(x)&&!S.has(x)&&!y.has(x)&&x!==h.configPath&&kt(x)).sort();for(let x of f.nodes){let C=$e(O,[f.instructionSpans[x.id]??""],k).map(E=>({role:"reference",label:null,path:E}));x.files.push(...C)}h.configPath&&f.nodes[0]&&f.nodes[0].files.push({role:"config",label:null,path:h.configPath});let _=y.size||v!==void 0?po({repoKey:t,files:n,root:o,conventions:p,nodes:f.nodes,parentId:v,candidates:O,resolved:{subagents:m,notes:u.notes}}):{nodes:f.nodes,edges:[],warnings:[]},$=c?Pa(e,f.agents,Object.fromEntries(_.nodes.map(({id:x,files:C})=>[x,C.map(({path:E})=>E)])),n):f.agents;return{fragment:{nodes:_.nodes,edges:_.edges,warnings:[]},codeAgents:$,warnings:[...f.warnings,..._.warnings],...f.skippedFiles?{skippedFiles:f.skippedFiles}:{}}}function Fe(e,t){return t.input.code?qa(e,t,(n,o)=>Ua(e,o?{input:n,conventions:o}:co(e,n,Os(n),t.input.code?.resolved?.filenameReferences))):Ua(e,t)}function Ua(e,{input:{repoKey:t,files:n,root:o,listedPaths:s,agentConfigurations:r},conventions:i}){if(!i.agents.length)return{fragment:{nodes:[],edges:[],warnings:[]},warnings:i.notes.flatMap(h=>{let f=de(h,t);return f?[f]:[]})};let a=i.notes.filter(h=>h.code!=="orphan-skill"&&h.code!=="frontmatter").flatMap(h=>{let f=de(h,t);return f?[f]:[]}),{scopes:c,ownerOf:l}=Kn(e,i.scopePaths??Object.keys(n),o,{files:n,listedPaths:s,agentConfigurations:r}),d=new Map(c.map(h=>[h.folder,[]]));for(let h of Object.keys(n)){let f=l(h);f&&d.get(f.folder).push(h)}let p=i.agents.map(h=>{let f=i.agentScopes?.find(E=>E.key===h.key)??c.find(E=>E.key===h.key),m=We(f.folder),w=xt(n,h.manifest),v=Ce(e,d.get(f.folder).filter(E=>w[E]!==void 0),m),S=new Set(h.files.map(E=>E.path)),y=E=>E!==null&&S.has(E)?E:null,k=h.tools?.map(yt)??Nn(e,t,w,{toolsPath:y(v.toolsPath),toolsTsPath:y(v.toolsTsPath),cliPath:y(v.cliPath),mcpPath:y(v.mcpPath)},a),b=h.prompt.kind==="registry",O=h.prompt.kind==="none"||b?null:h.prompt.path,_=(h.prompt.kind==="registry"?h.prompt.path:v.configPath)??O??h.files[0]?.path??h.subagents[0]?.path,$={id:_a(h.key,o),label:h.name,kind:"agent",desc:h.description??Na(O,h.files,b),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(E=>E.role!=="reference"||E.label!==null).map(E=>E.path),...h.subagents.flatMap(E=>[E.path,...E.skillPaths]),...i.notes.filter(E=>E.code==="orphan-skill").map(E=>E.path)]),C=v.scoped.filter(E=>!x.has(E)&&kt(E)).sort();return{resolved:h,root:m,conventions:v,agent:$,candidates:C}}),u=p.map(h=>h.agent),g=[];a.push(...i.notes.filter(h=>h.code==="orphan-skill").flatMap(h=>{let f=de(h,t);return f?[f]:[]}));for(let{resolved:h,root:f,conventions:m,agent:w,candidates:v}of p){let S=po({repoKey:t,files:n,root:f,conventions:m,nodes:u,parentId:w.id,candidates:v,resolved:{subagents:h.subagents,notes:i.notes.filter(y=>y.code==="frontmatter")}});u=S.nodes,g.push(...S.edges),a.push(...S.warnings)}return{fragment:{nodes:u,edges:g,warnings:[]},warnings:a}}function Wa(e){let t=e.findingQuality;if(!t?.config.switches.codeInputs||t.codeEvidence)return e;let n=[],o={};for(let[s,r]of(e.repos??[]).entries()){let i=r.files??{},a=Ht.safeParse(e.mapped?.[s]),c=a.success?a.data.nodes:[],l=e.projectAgents,d=l?.enabled?[...l.byRepo[r.key]??[],...l.codeByRepo?.[r.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=y=>y.filter(k=>{let b=i[k.sourcePath],O=p.codeInputsJson?.sourceHashes?.[k.sourcePath];return u&&b!==void 0&&O&&Ga("sha256").update(b).digest("hex")===O?!0:(h.push({path:k.sourcePath,reason:u?O?"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)},v=c.find(y=>y.id===p.unitKey)?.files.find(y=>y.role==="system prompt"&&y.span),S=fs({agent:{...p,codeInputsJson:m,...v?.span?{site:{path:v.path,span:v.span}}:{}},files:i,allowance:g,enabled:!0});S.skipped.push(...h),n.push({repo:r.key,unitKey:p.unitKey,input:S})}for(let[p,u]of Object.entries(i))o[JSON.stringify([r.key,p])]=Ga("sha256").update(u).digest("hex")}return{...e,findingQuality:{...t,codeEvidence:n,sourceHashes:o}}}function Xa(e,t,n={}){let o=e.findingQuality;if(!o?.config.switches.codeInputs)return e;let s=(o.codeEvidence??[]).flatMap(i=>ae([{...i.input,files:Es(e,i.repo,i.input.files,n)}],t[i.repo]??{}).skipped.map(a=>({...a,repo:i.repo}))),r=new Set(s.map(i=>JSON.stringify([i.repo,i.path]))).size;return{...e,findingQuality:{...o,readingSkipped:s},warnings:[...new Set([...e.warnings??[],...r?[`${r} ${r===1?"file was":"files were"} skipped, so some findings may be missing.`]:[]])]}}function _s(e){if(!e.findingQuality?.config.switches.codeInputs)return;let{all:t}=Pe(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(r=>r.repo===o.repo&&r.path===s))),sources:o.input.sources.filter(s=>t.some(r=>r.repo===o.repo&&r.path===s.sourcePath))})),agentRows:e.projectAgents?.agentRows,repoByPath:Object.fromEntries(t.map(o=>[o.path,o.repo]))}}function za(e,t){let n=[..._s(e)?.inputs??[]];for(let o of e.repos??[]){if(!o.ranked&&!o.markerPath)continue;let s=lo(t,o,e.codeAgents??Un(t),e,{checks:e.codeChecks}),r=Fe(t,s);for(let i of r.codeAgents??[]){let{path:a,line:c}=i.toolCall;if(!c||!i.reading.paths.includes(a)||typeof o.files?.[a]!="string")continue;let l=fs({agent:{unitKey:i.unitKey,toolsJson:[],codeInputsJson:{tools:[],contextInputs:[{name:i.name,sourcePath:a,sourceLine:c}]}},files:o.files,allowance:{paths:i.reading.paths,skipped:i.reading.skipped},enabled:!0});n.push({...l,repo:o.key,unitKey:i.unitKey})}}return{enabled:!0,inputs:n}}function Es(e,t,n,o){let s=Zi(e,(e.repos??[]).findIndex(r=>r.key===t));return se(o,n,s.success?s.data:{nodes:[]})}function $s(e,t,n,o={}){return Object.fromEntries(Object.entries(n).map(([s,r])=>{let i=e.repos?.find(c=>c.key===s)?.files??{},a=Es(e,s,Object.fromEntries(r.map(c=>[c,i[c]??""])),o);return[s,Object.fromEntries(Object.entries(a).map(([c,l])=>[c,t.core.includes(c)?me(l):l]))]}))}function Va(e,t,n,o={}){if(!e.findingQuality?.config.switches.codeInputs)return;let s=$s(e,t,n,o);return e.findingQuality.codeEvidence?.map(r=>({repo:r.repo,unitKey:r.unitKey,enabled:!0,inputs:[{...r.input,files:Es(e,r.repo,r.input.files,o)}],files:s[r.repo]??{},agentRows:e.projectAgents?.agentRows}))}var Is=e=>e>1?24:wt,Ue=e=>Is(e.inspectPlan?.passes.length??1);function dd(e,t,n){let o=oo(e,t,void 0,void 0,void 0,n),s=Q(t),r=Object.keys(o.files);return{core:r.filter(i=>s.has(i)),passes:[{own:r.filter(i=>!s.has(i))}],skipped:o.skipped,warnings:o.warnings}}function Rs(e,t,n,o){let s=$t(o,Et(e));if(s){let r=_i(Object.entries(s).map(([i,a])=>({path:i,size:Buffer.byteLength(a),inputBytes:Ci(i,a)})));if(!r)throw new Error("bad_request");return{core:[],passes:r,skipped:[],warnings:[]}}return n?xa({files:Et(e),graph:t,passMaxBytes:15e4,maxPasses:4,settings:o,repos:e}):dd(e,t,o)}function Ja(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 Qa(e,t){let{graph:n,llm:o}=t,s=Wa(t.data),r=s.findingQuality?.config,i=s.repos??[],{all:a,shadowed:c}=Pe(i),l=_s(s),d=Et(i),p=He(t.fragments),u=s.inspectPlan??Rs(i,p,ee(e,s).multiPass,e),g=s.passCursor??0,h=u.passes.length,f=(s.passFindings??[]).map(_e),m={...s,inspectPlan:u},w=t.parallel??Qn(e);if(h>1&&t.checkpoint&&(w.enabled||s.passResults)){if(!(s.passResults&&u.passes.every((b,O)=>s.passResults?.[O]?.findings!==void 0)))return{done:!1,data:await na({data:s,plan:u,progress:{...t.progress,checkpoint:(O,_)=>t.progress.checkpoint(_?O:{...ie(m),...O},_)},concurrency:w.concurrency,onePartPerStep:!w.enabled,forLocal:t.forLocal,run:(O,_)=>ys(e,{llm:o.withRetry(_),qualityConfig:r,graph:n,plan:u,index:O,files:d,reading:p,codeEvidence:l,repos:i})})};f=u.passes.map((b,O)=>_e(s.passResults[O].findings))}else if(g<h){let k;try{k=await ys(e,{llm:o.withRetry(s.passRetries??0),qualityConfig:r,graph:n,plan:u,index:g,files:d,reading:p,codeEvidence:l,repos:i})}catch(b){if(o.rethrow(b),fe(b),t.forLocal)throw b instanceof ce?b:new Error("A findings reading pass failed; no completed report was written.");if(h<2)throw b;let O=s.passRetries??0;if(t.progress.log({level:"warn",code:"analysis.pass_failed",counts:{part:g+1,parts:h,retries:O}}),O<cn)return{done:!1,data:{...m,passRetries:O+1}};throw Zn(g,h,O+1)}if(f=[...f,k],m={...m,passCursor:g+1,passRetries:0,passFindings:f},await t.checkpoint?.(ie(m)),h>1)return{done:!1,data:m}}let v=new Set([...u.core,...u.passes.flatMap(k=>k.own)]),S={},y=je(e,{paths:a.map(k=>k.path),files:d,graph:p,repos:i});for(let k of Ve(a,Q(p),Ne(p),y))v.has(k.path)&&(S[k.repo]??=[]).push(k.path);return m.findingQuality&&r?.switches.codeInputs&&(m=Xa(m,$s(m,u,S,e),e)),{done:!0,data:m,findings:ra(f,{semanticMatching:r?.switches.semanticMatching,dedupe:ia(e),deferCap:t.forLocal||Pn(e)}),plan:u,readByRepo:S,shadowed:c}}import{posix as Pt}from"node:path";function fo(e,t,n,o={}){let s=t.replace(/\[[^\]]*\]\([^)]*\)/g,"").replace(/\b[a-z][a-z\d+.-]*:\/\/[^\s)>]+|\/\/[^\s)>]+/gi,""),r=[...Array.from(t.matchAll(/\]\(\s*(?:<([^>]+)>|([^\s)]+))/g),a=>({value:a[1]??a[2],relative:!0})),...Array.from(t.matchAll(/^\s*\[[^\]]+\]:\s*(?:<([^>]+)>|([^\s]+))/gm),a=>({value:a[1]??a[2],relative:!0})),...Array.from(s.matchAll(/\bRead\s+(?:`([^`\n]+)`|"([^"\n]+)"|'([^'\n]+)'|([^\s<>`"']+\.[a-zA-Z0-9]+))/gi),a=>({value:a[1]??a[2]??a[3]??a[4],relative:!1}))],i=[];for(let a of r){let c;try{c=decodeURIComponent(a.value.split(/[?#]/)[0]).replace(/[.,;]+$/,"")}catch{continue}if(!c||/^(?:[a-z][a-z0-9+.-]*:|\/\/|\\)/i.test(c)||c.startsWith("/")&&!o.rootRelative)continue;let l=c.startsWith("/"),d=Pt.normalize(l?c.slice(1):Pt.join(Pt.dirname(e),c)),u=(l||a.relative||c.startsWith(".")?[d]:[d,Pt.normalize(c)]).filter(h=>h!==".."&&!h.startsWith("../")),g=u.find(h=>Object.hasOwn(n,h))??(o.includeMissing?u[0]:void 0);g&&!i.includes(g)&&i.push(g)}if(o.includeNamed)for(let a of Object.keys(n))[a,Pt.relative(Pt.dirname(e),a)].some(l=>l&&s.includes(l)&&new RegExp("(?:^|[^\\p{L}\\p{N}_./-])"+l.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+"(?=$|[^\\p{L}\\p{N}_./-]|\\.(?:\\s|$))","u").test(s))&&!i.includes(a)&&i.push(a);return i}function at(e,t,n,o=Jn,s=t){let r=e.split(`
7
+ `),i=Math.max(0,Math.min(r.length-1,(t??1)-1)),a=t===null||r.length<=o*2+1,c=a?0:Math.max(0,i-o),l=a?r.length:Math.min(r.length,Math.max(i,(s??1)-1)+o+1),d=()=>r.slice(c,l).map((g,h)=>`${c+h+1} ${g}`).join(`
8
+ `),p=d();for(;l-c>1&&Buffer.byteLength(d())>n;)i-c>l-i-1?c++:l--;let u=D(d(),n);return{text:u,truncated:u!==p||t!==null&&(t<1||t>r.length)}}function ct(e,t,n=0,o="legacy",s){let r=fd(e,t,n);return o==="whole-file"?hd(e,t,n,r,s):r}function fd(e,t,n){let o=[],s=[],r=[],i=we,a=t.repos.flatMap(l=>{let d=t.fragments.filter(h=>h.repoKey===l.key),p=Q(He(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 a){let p=l.files?.[d],u=p===void 0?"":p.split(`
9
+ `).map((f,m)=>`${m+1} ${f}`).join(`
10
+ `),g=D(u,i),h=p===void 0||g!==u;r.push({repo:l.key,path:d,line:1,text:g,truncated:h}),i-=Buffer.byteLength(g),h&&o.push({kind:"core-incomplete",repo:l.key,path:d})}r.length===0&&o.push({kind:"no-core"});let c=e.flatMap((l,d)=>{let p=Te([l]).notActive[0]?.activity,u=p?{state:p.state,gate:p.gate===null?null:D(p.gate,256),reason:D(p.reason,1e3)}:void 0,g=[...l.site?[{...l.site,repo:l.siteRepo}]:[],...l.otherSites];if(Jr(l.category)&&g.length<Kt(l.category))return s.push({id:`f${n+d+1}`,reason:`${l.category} requires ${Kt(l.category)} cited sites; ${g.length} supplied.`}),[];let h=[...g,...p?.evidence.map(S=>({...S,repo:l.siteRepo}))??[]],f=h.map(S=>{let y=t.repos.find(b=>b.key===S.repo),k=y?.files?.[S.path];return k===void 0?(o.push({kind:"site-unavailable",repo:S.repo??null,path:S.path,line:S.line}),{repo:S.repo??"",path:S.path,line:S.line??0,text:"",truncated:!0}):{repo:y.key,path:S.path,line:S.line??0,...at(k,S.line,Math.floor(ye/h.length))}}),m=D(l.title,Math.floor(K/4)),w=l.category??"",v=D(l.cause,K-Buffer.byteLength(m)-Buffer.byteLength(w)-(u?Buffer.byteLength(JSON.stringify(u)):0));return[{id:`f${n+d+1}`,title:m,body:v,category:w,sites:f,...u?{activity:u}:{},truncated:v!==l.cause||m!==l.title}]});return{coreFiles:r,findings:c,diagnostics:o,skipped:s}}var xe=e=>Buffer.byteLength(JSON.stringify(e)),te=e=>JSON.stringify([e.repo,e.path]),Ps=e=>[...new Map(e.map(t=>[te(t),t])).values()],Ya=({repo:e,path:t})=>({repo:e,path:t});function As(e,t,n){if(xe(n(e))<=t)return e;let o=0,s=Buffer.byteLength(e);for(;o<s;){let r=Math.ceil((o+s)/2);xe(n(D(e,r)))<=t?o=r:s=r-1}return D(e,o)}function ud(e,t){let n=[];for(let s of e)xe([...n,s].map(r=>({...r,text:""})))<=we?n.push(s):t.push({kind:"core-omitted",repo:s.repo,path:s.path});let o=[];for(let[s,r]of n.entries()){let i=n.slice(s+1).map(l=>({...l,text:""})),a=As(r.text,we,l=>[...o,{...r,text:l},...i]),c=r.truncated||a!==r.text;c&&t.push({kind:"core-incomplete",repo:r.repo,path:r.path}),o.push({...r,text:a,truncated:c})}return o}function md(e,t){let n=t.repos.find(s=>s.key===e.repo)?.files??{},o=n[e.path];return o===void 0?[]:fo(e.path,o,n,{includeMissing:!0,includeNamed:!0,rootRelative:!0}).filter(s=>s!==e.path).sort().map(s=>({repo:e.repo,path:s}))}function hd(e,t,n,o,s){let r=[...o.diagnostics],i=ud(o.coreFiles,r),a=o.coreFiles.map(Ya),c=e.map((O,_)=>{let $=o.findings.find(C=>C.id===`f${n+_+1}`)?.sites.map(Ya)??[],x=Ps([...a,...$]);return Ps([...x,...x.flatMap(C=>md(C,t))])}),l=O=>t.repos.find(_=>_.key===O.repo)?.files?.[O.path],d=new Set(a.map(te)),p=new Set(o.findings.map(O=>O.id)),g=Ps(c.flatMap((O,_)=>p.has(`f${n+_+1}`)?O:[])).filter(O=>!d.has(te(O))).flatMap(O=>{let _=l(O);return _===void 0?(r.push({kind:"linked-unavailable",repo:O.repo,path:O.path}),[]):[{...O,line:1,text:_.split(`
11
+ `).map(($,x)=>`${x+1} ${$}`).join(`
12
+ `),truncated:!1}]}),h=[],f=xe(g)<=Ct;for(let[O,_]of g.entries()){let $=f?Ct:Math.floor((Ct-xe(h))/(g.length-O))-1;if(f||xe(_)<=$){h.push(_);continue}let x=o.findings.flatMap(I=>I.sites.filter(R=>te(R)===te(_)).map(R=>({line:R.line||null,cap:Math.floor(ye/I.sites.length)}))),C=I=>{let R=new Map;for(let P of x.length?x:[{line:null,cap:ye}])for(let N of at(l(_),P.line,Math.min(P.cap,I)).text.split(`
13
+ `)){let U=/^(\d+) /.exec(N);U&&N.length>(R.get(Number(U[1]))?.length??0)&&R.set(Number(U[1]),N)}return{..._,text:[...R].sort((P,N)=>P[0]-N[0]).map(([,P])=>P).join(`
14
+ `),truncated:!0}},E=C(ye);if(xe(E)>$){let I=Math.max(0,Math.floor(($-xe({..._,text:"",truncated:!0}))/6/Math.max(1,x.length)));E=C(I)}xe(E)<=$&&h.push(E),r.push({kind:"whole-file-incomplete",repo:_.repo,path:_.path})}let m=new Map([...i,...h].map(O=>[te(O),O])),w=O=>{let _=l(O);return _!==void 0&&(!Number.isInteger(O.line)||O.line<1||O.line>_.split(`
15
+ `).length)},v=[...o.skipped??[]],S=o.findings.flatMap(O=>{let _=O.sites.map(E=>({...E,text:"",truncated:!m.has(te(E))||m.get(te(E)).truncated||w(E)})),$={...O,title:"",body:"",sites:_};if(xe($)>K-2)return v.push({id:O.id,reason:"The cited paths exceed the serialized claim allowance."}),[];let x=As(O.title,K-2,E=>({...$,title:E})),C=As(O.body,K-2,E=>({...$,title:x,body:E}));return[{...O,title:x,body:C,sites:_,truncated:O.truncated||x!==O.title||C!==O.body}]}),y=i.length>0&&i.length===o.coreFiles.length&&i.every(O=>!O.truncated),k=e.map((O,_)=>{let $=`f${n+_+1}`,x=S.find(E=>E.id===$),C=o.findings.find(E=>E.id===$)?.sites.filter(w).map(te)??[];return{fingerprint:V(O),requested:c[_],included:c[_].filter(E=>l(E)!==void 0&&m.has(te(E))),missing:c[_].filter(E=>l(E)===void 0),truncated:c[_].filter(E=>l(E)!==void 0&&(!m.has(te(E))||m.get(te(E)).truncated||C.includes(te(E)))),claimTruncated:x?.truncated??!0,coreComplete:y}}),b={coreFiles:i,citedFiles:h,findings:S,diagnostics:[...new Map(r.map(O=>[JSON.stringify(O),O])).values()],skipped:v,coverage:k};return b.serializedBytes=s.checkPayloadBytes(b),b}import{createHash as gd}from"node:crypto";var Za=e=>gd("sha256").update(JSON.stringify(e)).digest("hex"),uo=e=>[...new Set(e)],kd=e=>!e.trim()||/^[\s"'“”‘’]*none found[\s."'“”‘’]*$/i.test(e);function wd(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 le(n,{template:"second-opinion"},"Shadow finding opinion",t.models.secondOpinion,(re(t.caps.secondOpinionInputBytes)+t.caps.checkOverheadTokens)*o,t.caps.secondOpinionOutputTokens*o)}function yd(e){let t=[...e.skipped??[]],n=e.coreFiles.length>0&&e.coreFiles.every(r=>!r.truncated&&r.text.trim()),o=new Map(e.assessments?.map(r=>[r.fingerprint,r]));return{findings:e.findings.filter(r=>{let i=o.get(e.fingerprints?.[r.id]??""),a=e.coverage?.filter(f=>f.fingerprint===e.fingerprints?.[r.id]),c=e.citedFiles!==void 0,l=[...e.coreFiles,...e.citedFiles??[]],d=!c||a?.length===1&&a[0].coreComplete&&!a[0].claimTruncated&&!a[0].missing.length&&!a[0].truncated.length&&a[0].requested.every(f=>a[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&&!r.truncated&&r.sites.length>0&&r.sites.every(f=>!f.truncated&&(c?l.some(m=>m.repo===f.repo&&m.path===f.path&&!m.truncated&&m.text.trim()):f.text.trim()))&&d&&i?.support!=="incomplete",u=e.disputedIds?.includes(r.id)??!1,g=i===void 0||i.weak||i.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:r.id,reason:h}),h===null}),skipped:t}}function Sd(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(`
16
+ `).map(c=>/^(\d+) (.*)$/.exec(c));if(o.some(c=>c===null))return!1;let s=o;if(s.some((c,l)=>l>0&&Number(c[1])!==Number(s[l-1][1])+1))return!1;let r=s.findIndex(c=>Number(c[1])===e.line);if(r<0)return!1;let i=s.slice(r).map(c=>c[2]).join(`
17
+ `),a=i.indexOf(e.quote);return a>=0&&!i.slice(0,a).includes(`
18
+ `)&&ve(i,e.quote)===1}):!1}function xd(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(kd(s)||e.verdict==="drop"&&!e.decisive)return"The shadow verdict has no decisive evidence.";let r=e.quotes.filter(i=>i.side===o);return r.length===0||e.quotes.some(i=>!Sd(i,[...n,...t.sites]))||r.some(i=>!s.includes(i.quote))?"The shadow verdict lacks exact deciding quotes at the supplied file lines.":null}function bd(e,t){return{template:"second-opinion",answerFormat:"opinion",model:t.models.secondOpinion,inputs:{checkTemplate:gs(t).check,checkInput:e},limits:{maxTokens:t.caps.secondOpinionOutputTokens,thinking:"disabled"}}}async function Fs(e,t,n,o){let{findings:s,skipped:r}=yd(t),{saved:i,...a}=t,c=Za(a),l=Za(zr(o)?n:{config:n,categories:Xr(o)}),d={shadowOnly:!0,done:!1,cursor:0,retries:0,inputHash:c,configHash:l,verdicts:[],diagnostics:e.tools.checkDiagnosticsText(t.diagnostics),coverage:{requestedIds:t.findings.map(b=>b.id),sentIds:[],answeredIds:[],missingIds:s.map(b=>b.id),failedIds:[],skipped:r},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 b=i?structuredClone(i):d;return{...b,done:!0,verdicts:[],disagreements:[],diagnostics:[...b.diagnostics,p]}}if(i&&(i.inputHash!==c||i.configHash!==l))return{...structuredClone(i),done:!0,verdicts:[],disagreements:[],diagnostics:[...i.diagnostics,"Second opinion snapshot changed or is missing; no replacement calls were made."]};let u=i?structuredClone(i):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(!Wt(t.findings,uo(t.findings.map(b=>b.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(b=>b.id),f={...t,findings:g,diagnostics:[]};try{_t(n,e.tools,o)}catch{return{...u,done:!0,diagnostics:[...u.diagnostics,"Second opinion prompt changed since its frozen snapshot."]}}let m=bd(f,n),w=0,v=!1,S=n.caps.secondOpinionInputBytes,y;try{let b=await M(e,m,o,{maxInputBytes:S,onSend(O){w=O,v=!0,u.estimate=wd(g.length,n,o),u.coverage.sentIds=uo([...u.coverage.sentIds,...h])}});y=ls.parse(b).verdicts}catch(b){if(!v){if(b instanceof zi)return{...u,done:!0,diagnostics:[...u.diagnostics,"Second opinion serialized evidence exceeds its priced input budget."]};throw b}F("second-opinion",b,_=>e.rethrow(_));let O=b instanceof Error?b.message:"Unreadable shadow response.";return u.batches.push({ids:h,attempt:u.retries+1,inputBytes:w,rawVerdicts:[],failure:O}),u.diagnostics.push(O),u.retries<n.caps.secondOpinionMaxRetries?{...u,retries:u.retries+1}:(u.coverage.failedIds=uo([...u.coverage.failedIds,...h]),{...u,done:!0})}if(u.batches.push({ids:h,attempt:u.retries+1,inputBytes:w,rawVerdicts:y}),!Wt(y,h))u.diagnostics.push("Shadow verdict ids did not match this batch; every answer in the batch was rejected.");else for(let b of y){let O=g.find(x=>x.id===b.id),_=xd(b,O,[...t.coreFiles,...t.citedFiles??[]]);if(_){u.diagnostics.push(`${b.id}: ${_}`);continue}u.verdicts.push(b);let $=t.originalVerdicts?.find(x=>x.id===b.id);$&&$.verdict!==b.verdict&&u.disagreements.push({id:b.id,original:$.verdict,shadow:b.verdict,reason:b.reason})}u.coverage.answeredIds=uo(u.verdicts.map(b=>b.id)),u.coverage.missingIds=s.filter(b=>!u.coverage.answeredIds.includes(b.id)).map(b=>b.id);for(let b of h.filter(O=>!u.coverage.answeredIds.includes(O)))u.diagnostics.push(`${b}: 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 Ms(e,t,n,o,s){if(s.qualityConfig?.switches.secondOpinion&&s.secondOpinion&&e?.qualityAudit){let r=s.qualityConfig,i=s.secondOpinion.saved??t.qualityAudit?.shadow,a=lt(e,e.qualityAudit.coverage,n,o,s),c={...ct(n,o,0,mo(r),s.secondOpinion.llm.tools),purpose:s.secondOpinion.purpose,fictional:s.secondOpinion.fictional,coverage:a.coverage,originalVerdicts:t.verdicts,fingerprints:Object.fromEntries(n.map((d,p)=>[`f${p+1}`,V(d)])),assessments:a.assessments},l=await Fs(s.secondOpinion.llm,{...c,...i?{saved:i}:{}},r,s.settings);for(;;){let d=lt(e,a.coverage,n,o,s,l);if(t={...t,qualityAudit:d},await s.onCheckpoint?.(t),l.done||s.secondOpinion.oneBatch)break;l=await Fs(s.secondOpinion.llm,{...c,saved:l},r,s.settings)}}return t}function mo(e){return e?.switches.fullContext?"whole-file":"legacy"}function vd(e,t,n,o){return e.coverage?e.coverage:t.map((s,r)=>{let i=e.findings.find(u=>u.id===`f${o+r+1}`),a=[...s.site?[{repo:s.siteRepo??"",...s.site}]:[],...s.otherSites],c=[...new Map([...e.coreFiles,...a].map(u=>[JSON.stringify([u.repo,u.path]),{repo:u.repo,path:u.path}])).values()],l=[...e.coreFiles,...i?.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:V(s),requested:c,included:c.filter(u=>d(u)!==void 0&&p(u).length>0),missing:c.filter(u=>d(u)===void 0),truncated:c.filter(u=>{let g=d(u);return g!==void 0&&!p(u).some(h=>!h.truncated&&h.text===g.split(`
19
+ `).map((f,m)=>`${m+1} ${f}`).join(`
20
+ `))}),claimTruncated:i?.truncated??!0,coreComplete:e.coreFiles.length>0&&e.coreFiles.every(u=>!u.truncated)}})}function lt(e,t,n,o,s={},r){let a=[...s.qualityConfig?.switches.codeInputs?(s.codeEvidence??[]).flatMap(f=>{let m=o.repos.find(w=>w.key===f.repo)?.files??{};return ae([f.input],m).skipped.map(w=>({repo:f.repo,path:w.path}))}):[],...s.qualityConfig?.switches.enabled?s.readingSkipped??[]:[]];t=t.map(f=>({...f,truncated:[...new Map([...f.truncated,...f.requested.filter(m=>a.some(w=>w.repo===m.repo&&w.path===m.path))].map(m=>[JSON.stringify([m.repo,m.path]),m])).values()]}));let c=new Set(e.acceptedIds),l=(e.verdicts??[]).map((f,m)=>({fingerprint:V(n[m]),accepted:c.has(f.id),verdict:f})),d=r?Je(n,r.verdicts,{sentIds:r.coverage.sentIds,skipped:r.coverage.skipped,recordAcceptance:!0}):void 0,p=new Set(d?.acceptedIds),u=d?.verdicts?.map((f,m)=>({fingerprint:V(n[m]),accepted:p.has(f.id),verdict:f})),g=r?.coverage.sentIds.map(f=>n[Number(f.slice(1))-1]).filter(Boolean).map(V),h={coverage:t,verdicts:l,assessments:Ri({findings:n,sources:o,coverage:t,verdicts:l,sawCode:s.sawCode,...r?{shadowVerdicts:u??[],shadowRequestedIds:g}:{}}),...r?{shadow:r}:{}};return e.qualityAudit=h,h}var fn=class extends Error{sent;verdicts;constructor(t,n,o){super(t),this.sent=n,this.verdicts=o}};function Od(e,t,n){let o=t?.switches.enabled;return{template:nt("check",n,t),answerFormat:"check",model:o?t.models.check:Ie,inputs:{checkInput:e},limits:{maxTokens:o?Math.min(t.caps.checkOutputTokens,Ke(e.findings.length)):Ke(e.findings.length),effort:"medium"}}}async function Cd(e,t,n,o){if(t.findings.length===0)return[];let s=!1,r,i=n?.switches.enabled,a=Od(t,n,o);try{i&&_t(n,e.tools,o);let c=await M(e,a,o,{maxInputBytes:tt(t.findings.length,mo(n)),onSend(){s=!0}});if(r=c.verdicts,!Wt(r,t.findings.map(l=>l.id)))throw new Error("verdict ids did not match this batch");return c.verdicts}catch(c){throw F(a.template,c,l=>e.rethrow(l)),new fn(c instanceof Error?c.message:"unreadable response",s,r)}}async function ec(e,t,n,o,s){if(o?.done)return o;let r=o?{...o,diagnostics:o.diagnostics??[],retries:o.retries??0}:{cursor:0,verdicts:[],diagnostics:[],retries:0,done:!1},i=s.qualityConfig,a=i?.switches.enabled,c=mo(i),l=a?i.caps.checkBatchSize:B,d=o&&o.sentIds===void 0?ct(t.slice(0,r.cursor),n,0,c,e.tools):void 0,p=o?.sentIds??d?.findings.map(w=>w.id)??[],u=o?.skipped??d?.skipped??[],g=o?.rejectedBatches??[],h=o?.qualityAudit?.coverage??[],f=w=>a?lt(w,h,t,n,s):void 0;if(r.cursor>=t.length){let w=Je(t,r.verdicts,{sentIds:p,skipped:u,rejectedBatches:g,...a?{recordAcceptance:!0}:{}}),v=f(w);return{...r,done:!0,sentIds:p,skipped:u,result:w,...v?{qualityAudit:v}:{}}}let m;try{let w=t.slice(r.cursor,r.cursor+l);if(m=ct(w,n,r.cursor,c,e.tools),a&&(h=[...new Map([...h,...vd(m,w,n,r.cursor)].map(_=>[_.fingerprint,_])).values()]),u=[...new Map([...u,...m.skipped??[]].map(_=>[_.id,_])).values()],!e.available&&m.findings.length)throw new Error("model unavailable");let v=[...r.verdicts,...m.findings.length?await Cd(e.withRetry(r.retries),m,i,s.settings):[]];p=[...new Set([...p,...m.findings.map(_=>_.id)])];let S=Math.min(t.length,r.cursor+l),y=[...new Set([...r.diagnostics,...e.tools.checkDiagnosticsText(m.diagnostics)])],k=S>=t.length,b=k?Je(t,v,{sentIds:p,skipped:u,rejectedBatches:g,...a?{recordAcceptance:!0}:{}}):void 0;b&&(y=[...new Set([...y,...b.diagnostics??[]])],b.diagnostics=y);let O=b?f(b):a?{coverage:h,verdicts:[],assessments:[]}:void 0;return{cursor:S,verdicts:v,diagnostics:y,retries:0,done:k,sentIds:p,skipped:u,rejectedBatches:g,...b?{result:b}:{},...O?{qualityAudit:O}:{}}}catch(w){F(nt("check",s.settings,i),w,b=>e.rethrow(b));let v=w instanceof Error?w.message:"unreadable response";w instanceof fn&&w.verdicts&&m&&(g=[...g,{ids:m.findings.map(b=>b.id),verdicts:w.verdicts}]),w instanceof fn&&w.sent?p=[...new Set([...p,...m?.findings.map(b=>b.id)??[]])]:u=[...u,...m?.findings.map(b=>({id:b.id,reason:`The model was not called: ${v}`}))??[]];let S=[...r.diagnostics,...e.tools.checkDiagnosticsText(m?.diagnostics??[]),v];if(e.available&&r.retries<(a?i.caps.checkMaxRetries:Z))return{...r,sentIds:p,skipped:u,rejectedBatches:g,diagnostics:S,retries:r.retries+1,...a?{qualityAudit:{coverage:h,verdicts:[],assessments:[]}}:{}};let y=Je(t,r.verdicts,{sentIds:p,skipped:u,rejectedBatches:g,failure:Hn,...a?{recordAcceptance:!0}:{}});y.diagnostics=S;let k=f(y);return{...r,sentIds:p,skipped:u,rejectedBatches:g,diagnostics:S,done:!0,result:y,...k?{qualityAudit:k}:{}}}}function _d(e){let t=e.findingCheck?.original??[];if(!e.sourceNotes?.done)return t;let n=new Map(e.sourceNotes.findings.map(o=>[V(o),o.sourceNotes]));return t.map(o=>n.has(V(o))?{...o,sourceNotes:n.get(V(o))}:o)}function tc(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=_d(e),r=lt({...o},t.coverage??[],s,{repos:e.repos??[],fragments:[]},{qualityConfig:t.config,codeEvidence:t.codeEvidence,readingSkipped:t.readingSkipped,sawCode:St(e)},t.shadow);return{...e,findingQuality:{...t,...r}}}function nc(e,t,n){return!ee(e,t).findingCheck||n.length===0?t:{...t,findingCheck:{original:n,state:{cursor:0,verdicts:[],diagnostics:[],retries:0,done:!1}}}}async function oc(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,r;try{let i=t.repos??[],a=Y(t);r=await ec(n,o.original,{repos:i,fragments:a},o.state,{settings:e,qualityConfig:s,codeEvidence:t.findingQuality?.codeEvidence,readingSkipped:t.findingQuality?.readingSkipped,sawCode:St(t)})}catch(i){F(nt("check",e,s),i,d=>n.rethrow(d)),fe(i);let a=[...o.state.diagnostics??[],"unreadable source map"],c=Je(o.original,o.state.verdicts,{sentIds:o.state.sentIds??[],skipped:o.state.skipped??[],rejectedBatches:o.state.rejectedBatches,failure:Hn,...s?.switches.enabled?{recordAcceptance:!0}:{}});c.diagnostics=a;let l=s?.switches.enabled?lt(c,o.state.qualityAudit?.coverage??[],o.original,{repos:t.repos??[],fragments:[]},{qualityConfig:s,codeEvidence:t.findingQuality?.codeEvidence,readingSkipped:t.findingQuality?.readingSkipped,sawCode:St(t)}):void 0;r={...o.state,diagnostics:a,done:!0,result:c,...l?{qualityAudit:l}:{}}}return{done:r.done,data:{...t,findingCheck:{...o,state:r},...t.findingQuality&&r.qualityAudit?{findingQuality:{...t.findingQuality,...r.qualityAudit}}:{},...r.result?{findingsRaw:r.result.kept,warnings:[...t.warnings??[],...r.result.warnings]}:{}}}}var $d=.03,sc=le({},{template:"judge-code-prompt"},"Check possible agents in code",A.mechanical,3e3,200).usd,Ts=3,rc=e=>e.replace(/\s+/g," ").trim(),ho=e=>Math.round(e*1e6);function Id(e){return{template:"judge-code-prompt",answerFormat:"codeJudge",model:A.mechanical,inputs:e,limits:{effort:"medium",maxTokens:200}}}async function ac(e,t,n){let o=ho(n),s=await H(t,Ts,async r=>{if(!e.available)return{fingerprint:r.fingerprint,why:"unavailable"};if(o+ho(sc)>ho($d))return{fingerprint:r.fingerprint,why:"limit"};o+=ho(sc);try{let i=await M(e,Id({location:r.location,text:r.text,usage:r.usage,at:{path:r.candidate.prompt.path,line:r.candidate.prompt.line}}));return{fingerprint:r.fingerprint,isPrompt:i.isSystemPrompt,name:i.isSystemPrompt?rc(i.name).slice(0,40).trim():"",reason:rc(i.reason),model:A.mechanical}}catch(i){return F("judge-code-prompt",i,a=>e.rethrow(a)),{fingerprint:r.fingerprint,why:"unavailable"}}},e);return{verdicts:s.filter(r=>"isPrompt"in r),failed:s.filter(r=>"why"in r),spentUsd:o/1e6}}function cc(e,t,n,o=""){let s=new Map;if(e?.enabled&&e.grouped){let a=new Map(pi(e,t).flatMap(d=>d.keys.map(p=>[p,d.node.id]))),c=new Map,l=(d,p)=>JSON.stringify([li(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=c.get(g)??new Set;h.add(a.get(d.unitKey)),c.set(g,h)}}for(let d of n.nodes){if(d.kind!=="agent"||a.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=>[...c.get(l(h.path,h.line))??[]]));g.size&&s.set(d.id,g.size===1?[...g][0]:null)}}let r={...n,nodes:n.nodes.filter(a=>!s.has(a.id)),edges:n.edges.flatMap(a=>{let c=s.has(a.from)?s.get(a.from):a.from,l=s.has(a.to)?s.get(a.to):a.to;return c&&l&&(c!==l||a.from===a.to)?[{...a,from:c,to:l}]:[]})},i=di(e,t,r,o);return{fragment:{...r,nodes:[...r.nodes,...i.nodes],edges:[...r.edges,...i.edges]},files:i.files,addedNodes:i.nodes}}var go=e=>e.CF_CODE_PROMPT_LOADERS!=="0";var pc=40,ko=10,lc=/(agent|prompt|llm|model|chain|fix|plan|assist|bot|ai)/i,Rd=new Set(["agent","agents","prompt","prompts","system","instructions"]);function Ls(e){return e.replace(/([a-z])([A-Z])/g,"$1 $2").split(/[^a-zA-Z]+/).map(t=>t.toLowerCase()).filter(t=>t.length>=4&&!Rd.has(t))}function Pd(e){let t=e.filter(s=>Ar(s.rel)&&Pr.test(s.rel.slice(0,s.rel.lastIndexOf("/"))));if(t.length<2)return;let n=new Set(t.flatMap(s=>Ls(s.rel.split("/").at(-1).replace(/\.[^.]+$/,"")))),o=s=>s.some(r=>[...n].some(i=>r.startsWith(i)||i.startsWith(r)));for(let s of e){let r=s.rel.split("/"),i=r.pop().replace(/\.[^.]+$/,"");s.promptRank=En(s.rel)?o(Ls(i))?0:o(r.flatMap(Ls))?1:2:2}}function Ad(e,t,n){let o=n?Number(Jo(t.rel))-Number(Jo(e.rel)):0;if(o)return o;let s=(e.promptRank??2)-(t.promptRank??2);if(s)return s;let r=lc.test(e.rel)?0:1,i=lc.test(t.rel)?0:1;if(r!==i)return r-i;let a=e.rel.split("/").length,c=t.rel.split("/").length;return a!==c?a-c: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 dc(e,t,n="",o=!1){let s=[],r=[],i=new Map(t.map(u=>[u.path,u.size]));for(let u of t){let g=J(e,u,{purpose:"code-scan",route:"github",root:n,listing:i});g.admitted||r.push({path:u.path,reason:g.reason}),(g.admitted||g.reason==="too-large")&&s.push({entry:u,rel:gt(u.path,n),tooLarge:!g.admitted})}go(e)&&Pd(s),s.sort((u,g)=>Ad(u,g,In(e)));let a=[],c=[],l=0,d=0,p=!1;for(let{entry:u,tooLarge:g}of s){if(g){l+=1,o&&c.push({path:u.path,reason:"too-large"});continue}if(a.length>=oe.codeScan.files||d+u.size>oe.codeScan.bytes){p=!0,r.push({path:u.path,reason:"scan-limit"}),o&&c.push({path:u.path,reason:"scan-limit"});continue}a.push(u),d+=u.size}return{plan:a,total:s.length,skippedLarge:l,truncated:p,refused:r,...o?{skippedFiles:c}:{}}}function wo(e,t,n="",o=!1,s){return Fd(e,t,n,o,s).state}function Fd(e,t,n="",o=!1,s=Di(e,t.map(r=>r.path),n)){let r=In(e),i=go(e),a=s&&new Set(s),{plan:c,total:l,skippedLarge:d,truncated:p,skippedFiles:u,refused:g}=dc(e,a?t.filter(f=>a.has(f.path)):t,n,o),h=jr(e,c.map(f=>f.path),n);return{state:{plan:c,cursor:0,hits:[],total:l,skippedLarge:d,truncated:p,...u?{skippedFiles:u}:{},...r?{sdk:{layouts:!0}}:{},...Kr(e)?{}:{promptFunctions:!1},...i?{}:{promptLoaders:!1},...yr(e)?{coverageLinks:!0}:{},...h.length?{documentedPaths:h}:{}},refused:g}}function un(e){return e.cursor>=e.plan.length}async function fc(e,t,n={batch:pc,parallel:ko}){let o=e.plan.slice(e.cursor,e.cursor+n.batch),s=await H(o,n.parallel,t),r=e.sdk&&{...e.sdk,openaiAgents:e.sdk.openaiAgents===!0||o.some((l,d)=>s[d]!==null&&Mr(l.path,s[d]))},i=o.map((l,d)=>s[d]===null?null:Br(l.path,s[d],{sdk:r,promptFunctions:e.promptFunctions!==!1,promptLoaders:e.promptLoaders!==!1,coverageLinks:e.coverageLinks===!0,documented:e.documentedPaths?.includes(l.path)===!0})),a=i.filter(l=>l!==null),c=e.skippedFiles&&[...e.skippedFiles,...o.filter((l,d)=>i[d]===null).map(({path:l})=>({path:l,reason:"unreadable"}))];return{...e,cursor:e.cursor+o.length,hits:[...e.hits,...a],...c?{skippedFiles:c}:{},...r?{sdk:r}:{}}}function uc(e){return{...Nr(e.hits),...e.skippedFiles?{skippedFiles:e.skippedFiles}:{}}}function my(e){return{scanned:e.hits.length,total:e.total,truncated:e.truncated,skippedLarge:e.skippedLarge}}var Md=10,Td=2e5;function Ld(e,t,n,o){let s=new Set(Rt(e,t,n,o).window),r=[],i=0;for(let[a,c]of t.possible.entries())if(!(a>=Md&&!s.has(c))){if(i+=JSON.stringify(c).length+1,i>Td)break;r.push(c)}return r}var mc=1,hc=2;function gc(e,t,n,o=new Map){let s=De()+10,r=t.omitted??{strong:0,possible:0},i=Rt(e,t,n,o);if(i.page){let p=t.agentInventory??{strong:t.strong,possible:t.possible};return{...t,agentInventory:p,agentPage:i.page,strong:i.strong,possible:i.window,callsWithoutPrompt:t.callsWithoutPrompt.slice(0,mc),repoModelIds:t.repoModelIds.slice(0,hc),omitted:{strong:p.strong.length-i.strong.length,possible:p.possible.length-i.window.length},skippedFiles:j(t.skippedFiles,i.skippedFiles),notRead:i.notRead,notReadMore:i.notReadMore}}let a=new Set(i.skipped),c=t.notRead!==void 0,l=t.strong.filter(p=>!a.has(p)),d=Ld(e,t,n,o);return{...t,strong:l.slice(0,s),possible:d,callsWithoutPrompt:t.callsWithoutPrompt.slice(0,mc),repoModelIds:t.repoModelIds.slice(0,hc),omitted:{strong:r.strong+Math.max(0,l.length-s),possible:r.possible+Math.max(0,t.possible.length-d.length)},...!c||t.skippedFiles?{skippedFiles:j(t.skippedFiles,c?[]:i.skippedFiles)}:{},notRead:c?t.notRead:i.notRead,notReadMore:c?t.notReadMore??0:i.notReadMore}}var kc=e=>e.includes("/")?e.slice(0,e.lastIndexOf("/")):"",wc=e=>new Map(e.map(t=>[t.path,t.size])),Nd=(e,t,n=new Map)=>gc(e,uc(t),wc(t.plan),n),yc=e=>e.strong.length===0&&e.possible.length===0;function Sc(e,t){let{paths:n,entries:o,root:s,scanFlag:r,modelReader:i,recordSkips:a=!1}=t,c=Ye(e,{phase:"start",paths:n,root:s,scanFlag:r});if(c.kind==="marker"){let l=c.scanIfBare,d=l?wo(e,o,s,a,c.scanPaths):void 0;return d&&c.scanPaths&&(d.markerDecision=c,d.explicitMarkerScan=wo(e,o,s,a,c.scanPathsIfExplicit??[])),{kind:"marker",markerPath:c.markerPath,scanNeeded:l,...d?{scan:d}:{}}}return c.kind==="off"||!c.scan?{kind:"none"}:{kind:"scan",...yo(e,{scan:wo(e,o,s,a,c.scanPaths)},i)}}function xc(e,t,n){return{scan:{...t,hits:[]},ranked:Nd(e,t,n.alreadyRead)}}async function bc(e,t,n,o){let s=await fc(t,n,o.size);if(!un(s))return{scan:s,selection:null};let{scan:r,ranked:i}=xc(e,s,o);return{scan:r,selection:{ranked:i,paths:Ca(e,i,wc(s.plan),o.alreadyRead),refused:s.refused??[]}}}function yo(e,t,n=!1){let{scan:o}=t;return!o||!un(o)||t.ranked?t:{...t,...xc(e,o,{modelReader:n,alreadyRead:new Map})}}function vc(e,t,n,o){let s=new Map(n.map(c=>[c.path,c])),r=new Set(o),i=[],a=[];for(let c of t){let l=s.get(c);if(!l||r.has(c))continue;r.add(c);let d=J(e,l,{purpose:"pointer",route:"github"});d.admitted?i.push(l):a.push({path:c,reason:d.reason})}return{entries:i,refused:a}}function pt(e,t,n,o,s=1/0){let r=vc(e,n,o,new Set(t.filter(p=>p.readBytes===void 0).map(p=>p.path))),i=s,a=r.entries.filter(p=>p.size>i?(r.refused.push({path:p.path,reason:"total"}),!1):(i-=p.size,!0)),c=new Map(a.map(p=>[p.path,p])),l=new Set(t.map(p=>p.path));return{selected:[...t.map(p=>c.get(p.path)??p),...a.filter(p=>!l.has(p.path))],refused:r.refused}}var Oc=20;function Ny(e,t){return t==="hosted-import"?{...e,CF_IMPORT_CALLS:"0"}:e}function Cc(e,t,n,o){t.requestedPaths.push(...n);let s=pt(e,t.selected,n,o);t.selected=s.selected,t.refused.push(...s.refused)}function _c(e,t,n){let o=e.hosted;if(!o)return;let s=new Set(t),r=e.selected.filter(i=>s.has(i.path));n==="code"?o.codePaths&&(o.codePaths=[...new Set([...o.codePaths,...r.map(i=>i.path)])]):o.weakCodeFallback&&(e.conventionPaths=[...new Set([...e.conventionPaths,...r.map(i=>i.path)])],o.fallback={...o.fallback,selectedPaths:[...new Set([...o.fallback.selectedPaths,...r.map(i=>i.path)])],shaByPath:{...o.fallback.shaByPath,...Object.fromEntries(r.map(i=>[i.path,i.ref]))}})}function jy(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=>ge(s,t.ranked.repoModelIds,e).map(r=>r.path)));t.conventionPaths=[...new Set([...t.conventionPaths,...t.selected.filter(s=>!o.has(s.path)).map(s=>s.path)])]}}function Ec(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 $c(e,t=It(e.ranked,e.scan)){return t.agents.length>0}function jd(e){return e.hosted?.weakCodeFallback&&!e.hosted.codeMode?e.hosted.fallback.selectedPaths:[]}function Dy(e,t){if(e.hosted&&(e.hosted.codePaths=t.map(s=>s.path)),!e.hosted?.weakCodeFallback||e.hosted.codeMode||$c(e)){Ec(e,t);return}let n=new Map([...e.entries,...e.selected].map(s=>[s.path,s])),o=new Map(jd(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 By(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(r=>[r.path,r]));$c(e,t)?Ec(e,n.codePaths.map(r=>o.get(r))):(e.selected=n.fallback.selectedPaths.map(r=>o.get(r)),e.cursor=0,n.codeMode=!1,n.needsExtraction=n.fallback.needsExtraction);let s=new Set(e.selected.map(r=>r.path));e.files=Object.fromEntries(Object.entries(e.files).filter(([r])=>s.has(r)))}function Dd(e,t){if(!_n(e))return;let n=new Set(t.entries.map(r=>r.path)),o=Object.fromEntries(Object.entries(t.files).filter(([r])=>t.selected.some(i=>i.path===r&&i.readBytes===void 0))),s=new Set(hi(e,[...n],o));for(let[r,i]of Object.entries(t.files)){let a=J(e,{path:r,text:i},{...t.admission,purpose:"override",route:"github",root:t.root,listing:n,managedFiles:t.files});(!a.admitted||s.has(r))&&(delete t.files[r],t.refused.push({path:r,reason:a.admitted?"unreadable":a.reason}))}}function Ky(e,t,n){Dd(e,t);let o=t.selected.filter(a=>t.files[a.path]!==void 0),s=new Set(o.filter(a=>a.readBytes===void 0).map(a=>a.path)),r=new Set(t.requestedPaths),i=j(t.selectionRefused.filter(a=>!r.has(a.path)),t.refused).filter(a=>!s.has(a.path));return{state:t,requestedReads:n,files:t.files,settled:o,refused:i,treeTruncated:t.treeTruncated}}function Ic(e,t,n,o,s,r){let i=t.ranked&&he(e)?Rt(e,t.ranked,o,s,{files:n,root:t.root,replacementBytes:r}):{paths:[],refused:[],manifests:[]};if(!_n(e))return i;let a=new Map(s);for(let p of i.paths)o.has(p)&&a.set(p,Math.max(a.get(p)??0,o.get(p)));let c=Jt(a,r);for(let p of i.paths)c.chosen.add(p);let d=Xn(e,{files:n,listedPaths:t.entries.map(p=>p.path),root:t.root,fallbackName:"",skills:!0},{sizes:o,total:c}).agents.filter(p=>p.crewCall||p.layoutCall).flatMap(p=>p.manifest?[p.manifest]:[]);return{paths:[...new Set([...i.paths,...d.flatMap(p=>p.files.map(u=>u.path))])],refused:[...i.refused,...d.flatMap(rt)],manifests:[...i.manifests??[],...d]}}async function Rc(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))),r=new Map(t.entries.map(m=>[m.path,m.size])),i=new Map(Object.entries(t.files).map(([m,w])=>[m,Buffer.byteLength(w)]));for(let[m,w]of Object.entries(s))r.set(m,Buffer.byteLength(w));let a=Ic(e,t,s,r,i),c=new Set(t.manifestReadPaths),l=a.paths.filter(m=>s[m]===void 0&&!c.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))),Cc(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,Oc);if(g.length){let m=await H(g,4,async k=>{let b=J(e,k,{...t.admission,purpose:"pointer",route:"github",root:t.root});return b.admitted?n(k):(t.refused.push({path:k.path,reason:b.reason}),null)});t.manifestReadPaths=[...t.manifestReadPaths,...g.map(k=>k.path)];let w=new Map(r);g.forEach((k,b)=>{m[b]!==null&&w.set(k.path,Buffer.byteLength(m[b]))});let v=new Map(g.filter((k,b)=>d.has(k.path)&&m[b]!==null).map(k=>[k.path,i.get(k.path)])),S=Ic(e,t,s,w,i,v),y=new Set(S.paths);g.forEach((k,b)=>{m[b]!==null&&(y.has(k.path)?(t.files[k.path]=m[b],t.selected=t.selected.map(O=>O.path===k.path?k:O)):t.refused.push(S.refused.find(O=>O.path===k.path)??{path:k.path,reason:"total"}))});return}let h=new Map((a.manifests??[]).map(m=>{let v=m.files.filter(S=>s[S.path]===void 0).map(S=>t.refused.find(y=>y.path===S.path)??{path:S.path,reason:"missing"});return[m.agentId,{...m,files:m.files.filter(S=>s[S.path]!==void 0),refused:[...m.refused,...v]}]})),f=m=>{let w=h.get(T(m.prompt));return w?{...m,manifest:w}:m};t.ranked&&(t.ranked={...t.ranked,strong:t.ranked.strong.map(f),possible:t.ranked.possible.map(f)}),_c(t,[...h.values()].flatMap(m=>m.files.map(w=>w.path)),"code"),t.refused.push(...[...h.values()].flatMap(rt)),t.phase="done"}async function Pc(e,t){let n=t.admission.exclusions?.length?await t.listing():void 0,o=t.config?Ni(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]:j(l,d),r=s(t.priorRefused,o.refused),{kept:i}=ke(e,o.paths),a=t.requestedMode==="kept-and-refused"?[...o.refused.map(l=>l.path),...i]:[];if(!i.length)return{refused:r,requestedPaths:a};let c=pt(e,t.selected,i,n??await t.listing(),oe.candidateFetch.pointers);return r=s(r,c.refused),{selected:c.selected,refused:r,requestedPaths:a}}async function So(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 jn)||s.reason!=="secret-content")throw s;return n.push({path:e.path,reason:s.reason}),null}}function xo(e,t){return t.codeAgents??Un(e)}function RS(e,t,n,o,s,r=!1){let i=ht(e)?{agentConfigurations:Bn(e,t.map(d=>d.path),o)}:{},a=[],c=t.filter(d=>{let p=J(e,d,{purpose:"pointer",route:"github"});return p.admitted||a.push({path:d.path,reason:p.reason}),p.admitted}),l=Sc(e,{paths:c.map(d=>d.path),entries:t,root:o,scanFlag:s.scan,modelReader:r});if(l.kind==="marker"){let{markerPath:d,scanNeeded:p,scan:u}=l,g=c.find(f=>f.path===d),h=n.some(f=>f.path===d);return{...i,markerPath:d,refused:a,scanNeeded:p,...u?{scan:u}:{},...g&&!h?{selected:[...n,g]}:{}}}return l.kind==="scan"?{...i,scanNeeded:!0,scan:l.scan,refused:a,...l.ranked?{ranked:l.ranked}:{}}:i}function Ac(e){return!!(e.root&&e.ranked&&yc(e.ranked)&&e.plumbing===void 0)}var Ns=e=>(e.listAll??e.list).call(e);async function Bd(e,t,n,o){let s=t.markerPath,r=(t.selected??[]).find(h=>h.path===s);if(!r)throw new Error(`counterfact.json ${s} is not in the selection`);let i={...t.files??{}},a=[],c=i[s]??await So(r,h=>n.read(h),a,t.refused);c!==null&&(i[s]=c);let l=Ye(e,{phase:"read",pending:t.scan?.markerDecision??{kind:"marker",markerPath:s,scanIfBare:!!t.scanNeeded},text:c}),d=l.markerKind,{scan:p,...u}=t,g={...u,files:i,markerKind:d,...a.length?{refused:j(t.refused,a)}:{}};if(l.scan&&p&&!p.markerDecision)return yo(e,{...g,scan:p},o);if(d!=="bare"){let{config:h}=Gn(i[s]),f=await Pc(e,{config:h,markerDir:kc(s),selected:t.selected??[],admission:n.admission??{},modelReader:o,priorRefused:t.refused??[],refusalMode:"merge",requestedMode:"none",listing:()=>Ns(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),w=f.plan.filter(v=>m.has(v.path));return yo(e,{...g,scan:{...f,plan:w,total:f.total-f.plan.length+w.length}},o)}return g}async function Kd(e,t,n,o){let s=[],{scan:r,selection:i}=await bc(e,t.scan,c=>So(c,l=>n.read(l),s,t.refused),{modelReader:o,alreadyRead:new Map});if(!i)return{...t,scan:r,...s.length?{refused:j(t.refused,s)}:{}};let a=pt(e,t.selected??[],i.paths,r.plan);return{...t,ranked:i.ranked,scan:r,selected:a.selected,refused:j(t.refused,s,i.refused,a.refused)}}async function qd(e,t,n){let o=t.root,s=await Ns(n),r=qr(t.files??{},s.map(d=>d.path),o),{selected:i,refused:a}=pt(e,[],r,s),c=await H(i,ko,d=>So(d,p=>n.read(p),a,t.refused)),l=Hr(o,Object.fromEntries(i.flatMap((d,p)=>c[p]===null?[]:[[d.path,c[p]]])),e);return{...t,plumbing:l,refused:j(t.refused,a)}}async function Hd(e,t,n){let o=t.ranked?.manifestProgress,s=o?.entries??await Ns(n),r={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 Rc(e,r,async i=>{try{return await n.read(i)}catch(a){if(!(a instanceof jn))throw a;return r.refused.push({path:i.path,reason:a.reason}),null}}),{...t,files:r.files,selected:r.selected,cursor:r.selected.length,ranked:{...r.ranked,manifestProgress:{entries:s,readPaths:r.manifestReadPaths??[],done:r.phase==="done"}},refused:j(r.refused)}}function Fc(e,t){return!!(t.ranked&&he(e)&&!t.ranked.manifestProgress?.done)}function PS(e,t){return Ac(t)||Fc(e,t)}async function AS(e,t,n,o=!1){if(n=ki(e,n),t.markerPath&&!t.markerKind)return Bd(e,t,n,o);if(t.scan&&!un(t.scan))return Kd(e,t,n,o);let s=(t.cursor??0)>=(t.selected??[]).length;return s&&Ac(t)?qd(e,t,n):s&&Fc(e,t)?Hd(e,t,n):null}function FS(e){return e.root&&e.plumbing?[`${e.key}: ${Ur(e.root,e.plumbing)}`]:[]}function mn(e,t,n,o=!1,s,r="",i){let a=lo(e,t,n,{modelReader:o,projectAgents:s},{checks:i}),c=Fe(e,a),l=cc(s,t.key,c.fragment,r),{fragment:d,warnings:p}=Mn(l.fragment,t.key);return{fragment:d,warnings:[...fi(t.key,c.warnings,l.addedNodes),...p],...l.addedNodes.length?{virtualFiles:l.files}:{}}}var bo=e=>(e.ranked?.possible.length??0)>0;async function Mc(e,t,n){let o=[];try{o=await t?.()??[]}catch(r){n.rethrow(r)}let s=new Set((e.repos??[]).filter(bo).flatMap(r=>r.ranked.possible.map(i=>ln(r.key,i,r.files??{}).fingerprint)));return o.filter(r=>s.has(r.fingerprint))}function Ud(e,t,n,o){let s=new Set(n.map(i=>i.fingerprint)),r={due:[],overCap:[],ineligible:[]};for(let i of(t.repos??[]).filter(bo)){let a=va(e,{candidates:i.ranked.possible,files:i.files??{},repoKey:i.key,stored:s,flags:o,modelReader:t.modelReader??!1,hasClient:!0,page:i.ranked.agentPage,agentCountSoFar:i.ranked.strong.length,alreadyDue:r.due.length});r.due.push(...a.due),r.overCap.push(...a.overCap),r.ineligible.push(...a.ineligible)}return r}function js(e,t){let n=[...t];return e.filter(o=>{let s=n.indexOf(o);return s<0?!0:(n.splice(s,1),!1)})}function Tc(e,t,n,o){let s=[...t.mapped??[]],r=[...t.warnings??[]];return(t.repos??[]).forEach((i,a)=>{if(!bo(i))return;let c=mn(e,i,n,t.modelReader??!1,t.projectAgents),l=mn(e,i,n,t.modelReader??!1,t.projectAgents,"",o);s[a]=l.fragment,r=[...js(r,js(c.warnings,l.warnings)),...js(l.warnings,c.warnings)]}),{mapped:s,warnings:r}}async function Lc(e,t,n){let o=xo(e,t);if(t.codeChecks?.done||!(t.repos??[]).some(bo))return{data:t,pending:!1};if(!o.model){let g=await Mc(t,n.load,n.llm);return{pending:!1,data:{...t,...Tc(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 Mc(t,n.load,n.llm)},r=Ud(e,t,s.stored,o),i=r.due.slice(s.cursor,s.cursor+Ts),a=await ac(n.llm,i,s.spentUsd),c=s.cursor+i.length,l=r.due.length,d=[...s.verdicts,...a.verdicts],p=[...s.failed,...a.failed];if(c<l)return{pending:!0,data:{...t,codeChecks:{done:!1,total:l,cursor:c,spentUsd:a.spentUsd,verdicts:d,failed:p,stored:s.stored}}};let u=new Set(p.map(g=>g.fingerprint));for(let{fingerprint:g}of r.overCap)u.has(g)||p.push({fingerprint:g,why:"limit"});return{pending:c>s.cursor,data:{...t,...Tc(e,t,o,{verdicts:[...s.stored,...d],failed:p}),newVerdicts:d,codeChecks:{done:!0,total:l,cursor:c,spentUsd:a.spentUsd,verdicts:[],failed:[],stored:[]}}}}var At=A.mechanical,Ds=!1,Nc=200;function Bs(e){return e.length>Nc?`${e.slice(0,Nc)}\u2026`:e}function Gd(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}]:[],...Ks(e).map(s=>({repo:s.repo??e.siteRepo??null,file:s.path,line:s.line,excerpt:s.excerpt}))];return no(o,n,t.flatMap(s=>s.inputs.map(r=>({repo:s.repo,unitKey:s.unitKey,input:r,files:s.files}))),t[0].agentRows)?null:"Code quotes are outside one agent's admitted source locations."}function Ks(e){return e.otherSites??[]}function Wd(e,t){if(!Qr(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+Ks(e).length;return Kt(e.category)===2&&n<2?`${e.category} needs two quoted sites, found ${n}`:null}function jc(e,t,n){let o={title:t.title,category:t.category??null,reason:Bs(n)};e.push(o)}function Xd(e,t,n){let o={title:t.title,category:t.category??null,reason:Bs(n)};e.push(o)}function zd(e,t){return{template:"scope-items",answerFormat:"structureScope",model:At,inputs:{scopeRuleId:t.scopeRuleId??"",items:e},limits:{...t.maxTokens===void 0?{}:{maxTokens:t.maxTokens}}}}async function Dc(e,t,n){try{let o=await M(e,zd(t,n)),s=new Map(o.verdicts.map(r=>[r.index,r]));return o.verdicts.length!==t.length||s.size!==t.length||t.some((r,i)=>!s.has(i))?null:new Map([...s].map(([r,i])=>[r,{inScope:i.inScope,reason:Bs(i.reason)}]))}catch(o){return F("scope-items",o,s=>e.rethrow(s)),null}}function Vd(e){return{category:e.category??null,path:e.site?.path??"?",title:e.title,cause:e.cause,excerpt:e.excerpt??"",otherSites:Ks(e).map(t=>({path:t.path,excerpt:t.excerpt??""}))}}function Jd(e,t,n=Vn(t)){return{template:"scope-findings",answerFormat:"scope",model:t.qualityConfig?.switches.enabled?t.qualityConfig.models.scope:At,inputs:{codeSources:n.sources,codeFiles:n.files,items:e}}}async function Qd(e,t,n,o,s){let r=[];for(let p=0;p<n.length;p+=B)r.push(n.slice(p,p+B));let i=e.CF_PARALLEL_SCOPE_CHECK==="0"?1:o.scopeConcurrency??4,a=await H(r,i,async(p,u)=>{let g=[],h=u+1;for(let f=0;f<=Z;f++)try{let m=await M(t,Jd(p,o,s),e),w=Ii(m.verdicts,p.map(v=>v.id));return w.unknownIds.length&&g.push(`Scope check batch ${h}: ignored ${w.unknownIds.length} unknown verdict ids.`),w.duplicateIds.length&&g.push(`Scope check batch ${h}: ignored duplicate verdict ids for ${w.duplicateIds.join(", ")}.`),{verdicts:w.byId,diagnostics:g,ran:!0}}catch(m){F("scope-findings",m,w=>t.rethrow(w)),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),c=new Map,l=[];for(let p of a){for(let[u,g]of p.verdicts)c.set(u,g);l.push(...p.diagnostics)}let d=n.filter(p=>!c.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:c,diagnostics:l,missingIds:d,ran:a.some(p=>p.ran)}}async function Bc(e,t,n,o={}){let s=[],r=[],i=[],a=Vn(o);for(let[d,p]of n.entries()){let u=Wd(p,e)??Gd(p,a.scopes,o.graph);u?jc(s,p,u):i.push({id:`f${d+1}`,finding:p})}if(i.length===0)return{kept:[],dropped:s,ran:!0,flagged:r};let c=await Qd(e,t,i.map(({id:d,finding:p})=>({id:d,...Vd(p)})),o,a),l=[];return i.forEach(({id:d,finding:p})=>{let u=c.verdicts.get(d);if(!u||u.inScope){l.push(p);return}Ds?jc(s,p,u.reason):(Xd(r,p,u.reason),l.push(p))}),{kept:l,dropped:s,ran:c.ran,flagged:r,...c.diagnostics.length?{diagnostics:c.diagnostics}:{},...c.missingIds.length?{missingIds:c.missingIds}:{}}}function Kc(e,t,n=new Set){if(!t)return 1;let o=e.reduce((r,i)=>r+i.size,0),s=Yd(e,n);return Sa(o,s,15e4,4)}function Yd(e,t=new Set){return e.filter(n=>t.has(n.path)||Ir(n.path)).reduce((n,o)=>n+o.size,0)}function ox(e,t){return t>1?Math.min(e,6e4):0}function Ox(e,t,n){let o=pe(e).multiPass,s=n?Rs(n.repos??[],He(Y(n)),o,e).passes.length:Kc([...t],o),r=ea(e,s,Is(s),8e5);return{findings:r.findings,calls:[r.derive,q(e,"scope-findings","scope",At,Math.ceil(r.findings/B)*(Z+1),8e5),...r.check?[r.check]:[]]}}function qs(e,t){return ee(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 qe(t),r=Se(t.model,s,t.progress.rethrow,t.progress.signal),i=await oc(n,o,r);if(i){let S=e.execution.secondOpinion;if(i.done&&S&&o.findingQuality?.config.switches.secondOpinion){if(!o.findingCheck?.state?.done)return{set:ie(i.data),clear:[],next:"inspecting"};let y=o.findingCheck,k=o.findingQuality,b=await Ms(y.state.result,y.state,y.original,{repos:o.repos??[],fragments:Y(o)},{settings:n,qualityConfig:k.config,codeEvidence:k.codeEvidence,readingSkipped:k.readingSkipped,sawCode:o.sawCode??k.sawCode,secondOpinion:{...S,oneBatch:!0,llm:Se(t.secondOpinionModel??null,s,t.progress.rethrow,t.progress.signal)},onCheckpoint:async _=>t.progress.checkpoint({findingCheck:{...y,state:_},..._.qualityAudit?{findingQuality:{...k,..._.qualityAudit}}:{}})}),O={...i.data,findingCheck:{...y,state:b},...b.qualityAudit?{findingQuality:{...k,...b.qualityAudit}}:{}};return{set:ie(O),clear:[],next:b.qualityAudit?.shadow?.done===!1?"inspecting":qs(n,O)}}return{set:ie(i.data),clear:[],next:i.done?qs(n,i.data):"inspecting"}}let a=await Lc(n,o,{llm:r,load:t.context.loadCodeVerdicts});if(a.pending)return{set:ie(a.data),clear:[],next:"inspecting"};if(o=a.data,!t.model)throw new ce("llm","llm gone mid-job");let c=Y(o),l=Xe(c),d=await Qa(n,{data:o,graph:l,fragments:c,llm:r,checkpoint:t.progress.checkpoint,progress:t.progress,forLocal:e.execution.forLocal,parallel:Qn(n,e.execution)});if(!d.done)return{set:ie(d.data),clear:[],next:"inspecting"};let p=Oe(d.findings,Be(o),Ue(d.data),n),u=await Bc(n,r,p.findings,{graph:l,qualityConfig:d.data.findingQuality?.config,codeEvidence:Va(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=Ja(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(S=>`${S.repo}:${S.path}`).join(", ")}`);let w=Pn(n)?{sawCode:$i(d.readByRepo)}:{},v=nc(n,{...d.data,...w,...d.data.findingQuality?{findingQuality:{...d.data.findingQuality,...w}}:{},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:ie(v),clear:[],next:v.findingCheck?.state&&!v.findingCheck.state.done?"inspecting":qs(n,v)}};var Ft=A.explain,Hs=4,vo=4e4,qc=15,Mt=4096,Hc=6e4;function Oo(e){let t=Object.entries(Vr).find(([,n])=>n===e)?.[0]??e;return t==="contradiction"?["Says","But also says"]:t==="ambiguity"?["Unclear","Context"]:t==="bypassable_requirement"||t==="missing_requirement"?["Requirement","What actually happens","Why it's a gap"]:["Evidence","Context"]}function Uc(e,t,n){let o=Fi(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??"",K)})),s=[],r=[],i=(l,d)=>t.repos.find(p=>p.key===l)?.files?.[d],a=l=>{if(s.some(g=>g.repo===l.repo&&g.path===l.path&&g.text===l.text))return;let d=Math.max(0,vo-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){r.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&&r.push(`Source notes context incomplete: ${l.repo}:${l.path}`)};for(let l of o){let d=i(l.repo,l.path);if(d===void 0){r.push(`Source notes file unavailable: ${l.repo}:${l.path}`);continue}let p=l.line===null?null:l.line+l.excerpt.split(`
21
+ `).length-1;a({repo:l.repo,path:l.path,...at(d,l.line,vo,qc,p)})}let c=new Set;for(let l of o){let d=`${l.repo}
22
+ ${l.path}`;if(c.has(d))continue;c.add(d);let p=i(l.repo,l.path);if(p===void 0)continue;let u=t.repos.find(g=>g.key===l.repo)?.files??{};for(let g of fo(l.path,p,u))a({repo:l.repo,path:g,...at(u[g],null,vo)})}for(let l of ct([],t,0,"legacy",n).coreFiles)a(l);return{category:e.category??"",title:D(e.title,K/4),summary:D(e.summary??"",K/4),cause:D(e.cause,K/2),roles:Oo(e.category),sites:o,files:s,diagnostics:r}}var Us=(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 Zd(e,t,n){let o=e.text.split(`
23
+ `),s=o.findIndex(a=>a.startsWith(`${t} `));if(s<0)return!1;let i=o.slice(s).map(a=>a.replace(/^\d+ /,"")).join(`
24
+ `).indexOf(n);return i>=0&&i<o[s].replace(/^\d+ /,"").length}function Gc(e,t){let n=Oo(t.category),o=new Set,s=e.sites.flatMap(c=>{let l=t.sites.find(p=>p.index===c.index),d=Us(c.meaning);return!l||!Number.isInteger(c.index)||o.has(c.index)||!n.includes(c.role)||!d?[]:(o.add(c.index),[{index:c.index,role:c.role,meaning:d,keyPhrase:c.keyPhrase.trim()&&l.excerpt.includes(c.keyPhrase)?c.keyPhrase:""}])}),r=new Set,i=e.counterEvidence.flatMap(c=>{let l=Us(c.meaning);if(!Number.isInteger(c.line)||c.line<1||!c.excerpt.trim()||!l)return[];if(!t.files.some(p=>p.repo===c.repo&&p.path===c.path&&Zd(p,c.line,c.excerpt)))return[];let d=JSON.stringify([c.repo,c.path,c.line,c.excerpt]);return r.has(d)?[]:(r.add(d),[{...c,meaning:l}])}).slice(0,2),a=Us(e.supportNote,280);if(!a)throw new Error("Source notes have no support explanation");return es.parse({sites:s,support:e.support,supportNote:a,counterEvidence:i})}import{z as ef}from"zod";function Wc(e,t,n){let o=Buffer.byteLength(JSON.stringify(e))+t.templateBytes("explain-sources")+Buffer.byteLength(JSON.stringify(ef.toJSONSchema(Zo)));if(o>Hc)throw new Error("Source notes input exceeds its priced limit");return le(n,{template:"explain-sources"},"Explain sources",Ft,re(o),Mt)}function tf(e){return{template:"explain-sources",model:Ft,answerFormat:"sourceNotes",inputs:{content:JSON.stringify(e)},limits:{maxTokens:Mt,thinking:"disabled"}}}async function nf(e,t,n,o){let s=Uc(n,o,t.tools);Wc(s,t.tools,e);let r=await M(t,tf(s),e);return Gc(r,s)}async function Xc(e,t,n,o,s){if(s?.done)return s;let r=s??{cursor:0,findings:n.map(l=>({...l,sourceNotes:null})),failures:0,done:!1},i=r.findings.slice(r.cursor,r.cursor+Hs),a=await H(i,Hs,async l=>{try{if(!t.available)throw new Error("Source notes model unavailable");return{finding:{...l,sourceNotes:await nf(e,t,l,o)},failed:!1}}catch(d){return F("explain-sources",d,p=>t.rethrow(p)),{finding:{...l,sourceNotes:null},failed:!0}}},t??void 0),c=Math.min(r.findings.length,r.cursor+i.length);return{cursor:c,findings:[...r.findings.slice(0,r.cursor),...a.map(l=>l.finding),...r.findings.slice(c)],failures:r.failures+a.filter(l=>l.failed).length,done:c>=r.findings.length}}async function zc(e,t,n){if(!ee(e,t).sourceNotes||t.sourceNotes?.done)return{data:t,done:!0};let o=[],s;try{let i=t.repos??[],a=Be(t);o=Oe(_e(t.findingsRaw??[]),a,Ue(t),e).findings;let c=Y(t);if(t.sourceNotes&&(!Array.isArray(t.sourceNotes.findings)||!Number.isInteger(t.sourceNotes.cursor)))throw new Error("Unreadable source notes checkpoint");s=await Xc(e,n,o,{repos:i,fragments:c},t.sourceNotes)}catch(i){F("explain-sources",i,u=>n.rethrow(u)),fe(i);let a=t.sourceNotes,c=a&&Array.isArray(a.findings)&&Number.isInteger(a.cursor)&&a.cursor>=0&&a.cursor<=a.findings.length,l=c?a.findings:o,d=c?a.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:(c?a.failures:0)+p-d,done:!0}}let r=[...t.warnings??[]];return s.done&&s.failures&&r.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:r,...s.findings.length||Array.isArray(t.findingsRaw)&&!t.findingsRaw.length?{findingsRaw:s.findings}:{}}}}function Sb(e,t){return pe(e).sourceNotes?[q(e,"explain-sources","sourceNotes",Ft,t,8e5,Mt)]:[]}var xb=async(e,t)=>{t.progress.assertHeld(),t.progress.signal?.throwIfAborted();let n=await qe(t),o=await zc(e.settings,e.state,Se(t.model,n,t.progress.rethrow,t.progress.signal));return{next:o.done?"structuring":"explaining_sources",clear:[],set:ie(o.done?tc(o.data):o.data)}};function Vc(e){let t=e.id.indexOf("#");return e.sourceRef?.repo??(t<0?null:e.id.slice(0,t))}var hn=(e,t)=>JSON.stringify([e,t]),Jc=(e,t)=>e<t?-1:e>t?1:0;function Qc(e,t=[]){let n=e.nodes.filter(i=>i.kind==="agent");if(n.some(i=>i.files===void 0&&!i.sourceRef))return null;if(!n.length)return[];let o=new Map,s=(i,a,c)=>{let l=hn(i,a),d=o.get(l);d||(d={repo:i,path:a,agents:new Set},o.set(l,d)),c.forEach(p=>d.agents.add(p))},r=new Map;for(let i of n){let a=Vc(i),c=ii(i),l=hn(a,c),d=r.get(l)??[];d.push(i.id),r.set(l,d);for(let p of i.files??[])s(a,p.path,[i.id]);i.sourceRef&&s(a,i.sourceRef.path,[i.id]),ze(i)&&s(a,ci(c,a),[i.id]);for(let p of i.sourcePaths??[])s(a,p,[i.id])}for(let i of e.nodes)i.kind==="tool"&&i.sourceRef&&s(Vc(i),i.sourceRef.path,[]);for(let i of t){let a=r.get(hn(i.repo,i.unitKey))??[];for(let c of i.input.sources)s(i.repo,c.sourcePath,a)}return[...o.values()].map(i=>({...i,agents:[...i.agents].sort()})).sort((i,a)=>Jc(i.repo??"",a.repo??"")||Jc(i.path,a.path))}function Yc(e,t){if(e===null)return[];let n=new Set(e.map(s=>s.path)),o=new Set(e.map(s=>hn(s.repo,s.path)));return t.flatMap((s,r)=>s.sitePath?(s.siteRepo===null?n.has(s.sitePath):o.has(hn(s.siteRepo,s.sitePath)))?[]:[r]:[])}var Tt=e=>({paths:e.slice(0,2e3),omitted:Math.max(0,e.length-2e3)});function of(e){let t=e.map((r,i)=>({part:i+1,findings:[]})),n=Buffer.byteLength(JSON.stringify(t)),o=!1,s=0;return e.forEach((r,i)=>{let a=t[i].findings;for(let c of r){let l=Buffer.byteLength(JSON.stringify(c))+(a.length?1:0);n+l>15e4&&(o=!0),o?s+=1:(a.push(c),n+=l)}}),{rawFindings:t,rawFindingsOmitted:s}}function Zc(e){let t=new Map(Object.entries(e.readByRepo).map(([s,r])=>[s,new Set(r)])),n=new Set(Object.values(e.readByRepo).flat()),o=new Map;for(let s of e.loaded??[]){let r=s.repo===null?n.has(s.path):t.get(s.repo)?.has(s.path);for(let i of s.agents){let a=o.get(i);a||(a={loaded:new Set,notRead:new Set},o.set(i,a)),a.loaded.add(s.path),r||a.notRead.add(s.path)}}return{version:1,core:Tt(e.plan?.core??[]),parts:(e.plan?.passes??[]).map(s=>({own:Tt(s.own)})),skipped:Tt(e.plan?.skipped??[]),readByRepo:Object.fromEntries(Object.entries(e.readByRepo).map(([s,r])=>[s,Tt(r)])),agents:e.graph.nodes.filter(s=>s.kind==="agent").map(s=>({id:s.id,label:s.label??s.id,loaded:Tt([...o.get(s.id)?.loaded??[]]),notRead:Tt([...o.get(s.id)?.notRead??[]])})),...of(e.passFindings)}}function el(e){return e.CF_RECALL_SIGNALS!=="0"}import{createHash as sf}from"node:crypto";function gn(e,t){return e==="finding"?ue(t):sf("sha256").update(et(t)).digest("hex")}function tl(e,t,n,o){let s=gn(e,t);return nl({target:e,index:n,fingerprint:s},o)}function nl(e,t){let n={status:"rejected",reason:"attachment_mismatch"};if(!Number.isInteger(e.index)||e.index<0)return n;let o=t.filter(r=>r.target===e.target&&r.index===e.index);if(!o.length)return{status:"absent"};if(o.length!==1||o[0].fingerprint!==e.fingerprint)return n;let s=zt(o[0]);return s?{status:"accepted",wording:s}:n}function Gs(e,t){let n=new Map(t.map(a=>[a.key,a])),o=e.evidence.flatMap(a=>{let c=n.get(a.key);if(!c)return[];let l=e.positions.filter(p=>p.key===a.key),d=l.length===1&&l[0].target===a.kind?l[0]:null;return[{key:a.key,pair:c,position:d}]}),s=o.flatMap(({pair:a,position:c})=>c?[{target:c.target,index:c.index,fingerprint:c.fingerprint,headline:a.headline,ifLeft:a.ifLeft}]:[]),r=[],i=[];for(let{key:a,position:c}of o){let l=c?nl(c,s):null;if(!c||l?.status!=="accepted"){i.push({key:a,reason:"attachment_mismatch"});continue}r.push({target:c.target,index:c.index,fingerprint:c.fingerprint,...l.wording})}return{rows:r,rejected:i}}function ol(e,t,n,o){let s=[],r=new Set,i=0;for(let a of n){let c=`${a.target}:${a.index}`;if(r.has(c))continue;r.add(c);let l=a.target==="finding"?e[a.index]:void 0,d=a.target==="structure"?t[a.index]:void 0;if((l?tl("finding",l,a.index,n):d?tl("structure",d,a.index,n):null)?.status!=="accepted"){i++;continue}s.push(a)}return{rows:s,...o?{diagnostics:i?{...o,accepted:o.accepted-i,rejected:o.rejected+i,byReason:{...o.byReason,attachment_mismatch:(o.byReason.attachment_mismatch??0)+i}}:o}:{}}}function rf(e){let t=!1,n=!1,o="",s=0;return e.split(/\r?\n/).map((r,i)=>{if(i===0&&r==="---")return n=!0,"";if(n)return/^(?:---|\.\.\.)\s*$/.test(r)&&(n=!1),"";let a=r.match(/^\s*(`{3,}|~{3,})(.*)$/);return o?(a&&a[1][0]===o&&a[1].length>=s&&!a[2].trim()&&(o=""),""):a?(o=a[1][0],s=a[1].length,""):t||r.includes("<!--")?(r.includes("<!--")&&(t=!0),r.includes("-->")&&(t=!1),""):r})}function sl(e,t,n,o){let s=new Set([...n?.paths??[],...Object.keys(t)]),r=new Set(n?.admittedPaths??Object.keys(t)),i=Kn(e,[...r],o,{files:t});return{documents:i.files.flatMap(c=>{let l=t[c.path];if(l===void 0||!/\.(?:md|txt|prompt)$/i.test(c.path)||c.kind==="background"||!["prompt","soul","knowledge","skill","sub-agent","reference"].includes(c.role))return[];let d=!n?.incompletePaths?.includes(c.path);return[{path:c.path,root:i.ownerOf(c.path)?.folder??o??"",role:c.role,sourceLines:l.split(`
25
+ `),lines:l.split(/\r?\n/),visible:d?rf(l):[],complete:d}]}),paths:s,admittedPaths:r,complete:n?.complete===!0,asOf:n?.asOf,opaquePaths:n?.opaquePaths??[],skills:i.files.filter(c=>c.role==="skill").map(c=>c.path),knowledge:i.files.filter(c=>c.role==="knowledge"&&c.kind!=="background").map(c=>c.path)}}function W(e,t,n=t+1){let o=e.sourceLines.slice(t,n).join(`
26
+ `).replace(/\r$/,"");return{path:e.path,line:t+1,excerpt:o}}function Lt(e,t,n){let o=[...new Set([t.path,`${t.root?`${t.root}/`:""}__root__`].flatMap(r=>{let i=_r(r,n,t.root,!0);return i.reason?[]:[i.path]}))];if(!o.length||o.some(r=>e.opaquePaths.some(i=>!i||r===i||r.startsWith(`${i}/`))))return null;let s=o.filter(r=>e.paths.has(r));return s.length>1?null:{path:s[0]??o[0],exists:s.length===1}}function Nt(e){return[...new Set(Cr(e).filter(t=>t.explicit&&t.fileLike).map(t=>t.target))]}var be=/\b(?:examples?|e\.g\.|shared|global|external|optional|historical|previously|removed|create|write|generate|output|save|append)\b/i;function rl(e){return e.complete?e.documents.flatMap(t=>t.visible.flatMap((n,o)=>be.test(n)||!(/\b(?:read|load|follow|consult|see|use|refer)\b/i.test(n)||/\[[^\]]+\]\([^)]+\)/.test(n))?[]:Nt(n).flatMap(s=>{if(!/\.(?:md|mdx|txt|prompt)(?:#.*)?$/i.test(s))return[];if(!(!s.includes("/")||/^\.{1,2}\//.test(s)||z(s,{nested:!0})||!!Dt(t.path,{nested:!0})&&/^references\//.test(s)))return[];let i=[...n.matchAll(/\[[^\]]+\]\(([^)]+)\)/g)].find(l=>l[1]===s),a=n.slice(0,i?.index??n.indexOf(s)).replace(/[`*_"']+$/,"");if(!/\b(?:read|load|follow|consult|see|use|refer to)\s+(?:the\s+)?$/i.test(a))return[];let c=Lt(e,t,s);return!c||c.exists?[]:[{rule:"missing-file",title:`Your instructions refer to missing file ${s}`,cause:`${c.path} isn't in the agent's folder.`,fix:`Point this reference to an existing file, or add ${c.path} to the agent folder.`,site:W(t,o)}]}))):[]}function af(e,t){let n=null,o=e.visible.some(s=>/^#{1,6}\s+(?:Step\s+\d|(?:Workflow|Steps|Procedure)\b)/i.test(s));return e.visible.flatMap((s,r)=>{let i=t==="step"?o?s.match(/^#{1,6}\s+(?:Step\s+)?(\d+(?:\.\d+)*[a-z]?)(?:[.:]|\s|$)/i):null:s.match(/^#{1,6}\s+(?:Section\s+)?(\d+(?:\.\d+)*)(?:\.|\s|:|$)/i);if(i&&/^\d{4}/.test(i[1])&&!/^#{1,6}\s+(?:Step|Section)\s+/i.test(s))return[];if(i)return n=null,[{label:i[1].toLowerCase(),index:r}];let a=t==="step"&&o?s.match(/^(\d+)\.\s+\S/):null;return a?(n=n===null?Number(a[1]):n+1,[{label:String(n),index:r}]):(s.trim()&&!/^\s/.test(s)&&(n=null),[])})}function il(e){let t=new Map(e.documents.map(s=>[s.path,s])),n=new Map,o=(s,r)=>{let i=`${s.path}\0${r}`,a=n.get(i);if(!a){let c=r==="step"?/^\s*(?:\*\*|__)?Step\s+\d/i:/^\s*(?:\*\*|__)?Section\s+\d/i,l=af(s,r),d=new Set(l.map(p=>p.label));a={defined:l,known:d,ambiguous:s.visible.some(p=>r==="step"&&/^\s+\d+[.)]\s/.test(p)||c.test(p))},n.set(i,a)}return a};return e.documents.flatMap(s=>s.visible.flatMap((r,i)=>{if(be.test(r)||!/\b(?:see|refer to|follow|return to|go to|from)\b/i.test(r))return[];let a=Nt(r);if(a.length>1||a.length===0&&/\b(?:in|of)\s+(?!this\s+(?:file|document)\b)/i.test(r))return[];let c=a.length?Lt(e,s,a[0]):{path:s.path},l=c?t.get(c.path):void 0;return l?.complete?[...r.matchAll(/\b(step|section)\s+(\d+(?:\.\d+)*[a-z]?)\b/gi)].flatMap(d=>{let p=d[1].toLowerCase(),u=d[2].toLowerCase(),{defined:g,known:h,ambiguous:f}=o(l,p);return f||!g.length||h.has(u)?[]:[{rule:"numbered-reference",title:`Your instructions refer to missing ${p} ${u} in ${l.path}`,cause:`${l.path} has no ${p} ${u}.`,fix:`Point this reference to an existing ${p}, or restore the missing ${p} in ${l.path}.`,site:W(s,i),otherSites:g.slice(0,3).map(m=>W(l,m.index))}]}):[]}))}import{posix as dt}from"node:path";function al(e){if(!e.complete)return[];let t=[];for(let n of e.documents)n.complete&&n.visible.forEach((o,s)=>{let r=o.match(/^(#{1,6})\s+(?:Available )?(Skills|Knowledge files)\s*$/i);if(!r)return;let i=n.visible.findIndex((u,g)=>{let h=g>s?u.match(/^(#+)\s/):null;return h!==null&&h[1].length<=r[1].length}),a=n.visible.slice(s+1,i<0?void 0:i).flatMap((u,g)=>!/^\s*[-*]\s/.test(u)||be.test(u)?[]:Nt(u).flatMap(h=>{let f=Lt(e,n,h);return f?[{...f,index:s+g+1}]:[]})),c=r[2].toLowerCase()==="skills",l=a.filter(u=>c?z(u.path,{nested:!0}):/\.md$/i.test(u.path));if(!l.some(u=>u.exists))return;let d=new Set(l.map(u=>c?dt.dirname(dt.dirname(u.path)):dt.dirname(u.path))),p=new Set(l.map(u=>u.path));for(let u of c?e.skills:e.admittedPaths){let g=c?dt.dirname(dt.dirname(u)):dt.dirname(u);!c&&Rr.test(dt.basename(u))||u===n.path||!c&&g===(n.root||".")&&!e.knowledge.includes(u)||!d.has(g)||p.has(u)||(c?!z(u,{nested:!0}):!/\.md$/i.test(u))||t.push({rule:"unlisted-file",title:`Your ${c?"skills":"knowledge"} index omits ${u}`,cause:`${u} is in the agent's folder but isn't in this list, so the agent may miss it.`,fix:`Add ${u} to this index, or remove the unused file.`,site:W(n,s),otherSites:e.documents.filter(h=>h.path===u).flatMap(h=>{let f=h.lines.findIndex(w=>/^name:\s*\S/.test(w)),m=f<0?h.visible.findIndex(w=>w.trim()):f;return m<0?[]:[W(h,m)]})})}for(let u of l.filter(g=>!g.exists))t.push({rule:"absent-index-entry",title:`Your index lists missing file ${u.path}`,cause:`${u.path} isn't in the agent's folder.`,fix:`Remove this index entry, correct its path, or add ${u.path} to the agent folder.`,site:W(n,u.index)})});return t}function cl(e){let t=new Map,n=new TextEncoder;for(let a of e.documents){let c=0;for(let l=0;l<=a.visible.length;l++){if(l<a.visible.length&&a.visible[l].trim()&&!/^#{1,6}\s/.test(a.visible[l]))continue;let d=a.visible.slice(c,l).join(`
27
+ `),p=W(a,c,l);if(d.length>=240&&n.encode(p.excerpt).byteLength<=1800&&d.trim().split(/\s+/).length>=40){let u=`${a.root}\0${d}`,g=t.get(u)??[];g.some(h=>h.path===a.path)||g.push(p),t.set(u,g)}c=l+1}}let o=[...t.values()].filter(a=>a.length>1),s=o.map(a=>a[0].excerpt.trim().split(/\s+/)),r=(a,c)=>s[a].slice(0,c).join(" "),i=(a,c)=>ue({kind:"reliability",site:o[a][0],title:r(a,c)});return o.map((a,c)=>{let l=Math.min(8,s[c].length);for(;l<s[c].length&&o.some((d,p)=>p!==c&&i(p,l)===i(c,l));)l++;return{rule:"duplicate-block",title:`Your instruction files repeat "${r(c,l)}"`,cause:"The same instructions appear in more than one file. Editing one copy can leave the others out of date.",fix:"Keep this block in one instruction file and have the other files refer to it.",site:a[0],otherSites:a.slice(1,4)}})}var cf=[{kind:"channel",pattern:/\b(?:channel(?:\s+id)?)[^\n\w]{1,12}([CG][A-Z0-9]{8,12})\b/g},{kind:"user",pattern:/\b(?:user(?:\s+id)?)[^\n\w]{1,12}([UW][A-Z0-9]{8,12})\b/g},{kind:"room",pattern:/\broom(?:\s+(?:id|uri))?[^\n\w]{1,12}(rm[A-Za-z0-9]{8,18})\b/g},{kind:"account",pattern:/\baccount(?:\s+(?:id|number))?[^\n\w]{1,12}(\d{8,18})\b/g},{kind:"UUID",pattern:/\b(?:use|send|route|account|channel|user|room|tenant)\b[^\n]{0,40}?\b([a-f0-9]{8}-[a-f0-9]{4}-[1-8][a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12})\b/gi}];function ll(e){return e.documents.flatMap(t=>{let n=new Map;return t.visible.forEach((o,s)=>{if(!(be.test(o)||/^\s*#/.test(o)||/\b(?:config(?:uration|ured)?|environment|placeholder)\b/i.test(o)))for(let{kind:r,pattern:i}of cf){if(o.matchAll(i).next().done)continue;let a=n.get(r)??[];a.push(W(t,s)),n.set(r,a)}}),[...n].map(([o,s])=>({rule:"hardcoded-id",title:`Your instructions hard-code ${o==="account"?"an":"a"} ${o}${o==="UUID"?"":" identifier"}`,cause:`These instructions contain fixed ${o} identifiers. Reusing the instructions elsewhere could make the agent use the wrong ones.`,fix:`Move this ${o} identifier to deployment configuration and reference that setting in the instructions.`,site:s[0],otherSites:s.slice(1,4)}))})}function pl(e){if(!e||!/^\d{4}-\d{2}-\d{2}$/.test(e))return!1;let t=new Date(`${e}T00:00:00Z`);return Number.isFinite(t.getTime())&&t.toISOString().slice(0,10)===e}function dl(e){let t=e.asOf;return pl(t)?e.documents.flatMap(n=>{let o=[],s=!1;for(let r=n.visible.length-1;r>=0;r--){let i=n.visible[r];s=!!i.trim()&&(s||/\b(?:not|never|don.t|then|after|thereafter|otherwise)\b/i.test(i)),o[r]=s}return n.visible.flatMap((r,i)=>o[i]?[]:be.test(r)||!/\b(?:use|send|route|deliver|apply|keep|publish|post)\b/i.test(r)?[]:[...r.matchAll(/\b(?:until|through)\s+(\d{4}-\d{2}-\d{2})\b/gi)].flatMap(a=>{let c=a[1];return!pl(c)||c>=t?[]:[{rule:"expired-date",title:`Your instructions retain a deadline that has passed (${c})`,cause:`The deadline ${c} had already passed when this analysis ran on ${t}. The agent may keep following an old rule.`,fix:"Remove the expired instruction or replace it with the current rule and its effective dates.",site:W(n,i)}]}))}):[]}var lf=[al,rl,il,cl,ll,dl];function pf(e,t,n,o){if(!n||e.CF_MECHANICAL_CHECKS==="0")return[];let s=sl(e,t,n,o),r=lf.flatMap(a=>a(s)),i=new Set(r.filter(a=>a.rule==="absent-index-entry").map(a=>`${a.site.path}:${a.site.line}`));return r.filter(a=>a.rule!=="missing-file"||!i.has(`${a.site.path}:${a.site.line}`))}function fl(e,t,n,o){let s=new TextEncoder;return pf(e,t,n,o).filter(r=>[r.site,...r.otherSites??[]].every(i=>s.encode(i.excerpt).byteLength<=wr.quoteBytes)).map(r=>({kind:"reliability",severity:"low",title:r.title,cause:r.cause,summary:r.cause,category:"prompt_quality",site:{path:r.site.path,line:r.site.line},excerpt:r.site.excerpt,otherSites:r.otherSites??[],question:"",fixes:[{title:"Update these instructions",approach:r.fix,kind:"prompt",targetFiles:[{path:r.site.path,create:null}],expectedOutcome:"",summary:null,impact:null,objective:null,blockedBy:null,confidence:"high",status:"ready",alsoFixes:[],delta:null}]}))}var df=JSON.parse('{"findings":{"history":{"title":"Full context keeps growing on every turn","cause":"The instruction retains full additions without trimming or summarizing, so earlier content is sent repeatedly as input.","fix":"Keep raw history outside model context. Send a bounded recent window and a summary of earlier material."},"ordering":{"title":"Changing content comes before stable instructions","cause":"The instruction puts request-specific content before a stable instruction file, so a prefix cache cannot reuse that later text when the prefix changes.","fix":"Place stable instructions first and request-specific content afterward. Verify cache eligibility and cache usage for the chosen model."},"reads":{"title":"An unchanged file is read into context again every turn","cause":"The instruction asks for another full read even when the same unchanged file is already in context.","fix":"Reuse the existing context copy. Read the file again only after a change or when its earlier contents are no longer available."},"turn-limit":{"title":"The turn limit has no stated reason","cause":"The instruction sets a fixed turn ceiling without explaining the choice. Its token effect cannot be established from the limit alone.","fix":"State why this turn ceiling is needed and choose it using run lengths and completion results. Keep a bounded stop condition."},"output-limit":{"title":"The output token limit has no stated reason","cause":"The instruction sets an output ceiling without explaining the choice. A ceiling is not evidence that replies use that many tokens.","fix":"State why this output ceiling is needed and choose it using observed reply lengths and truncation results."}},"outcomes":{"limit":"The limit has a stated reason and a way to assess it.","context":"Less repeated context or more reusable stable context."},"assessment":"A static rule verified this explicit instruction in its owned source range. Token estimates state assumptions; actual savings are unknown.","estimates":{"history":"About 55,000 context tokens over a 10-turn run, 45,000 of them re-sent (assuming 1,000 tokens added per turn and nothing trimmed).\\n\\n1,000 new per turn; 9,000 re-sent on turn 10; 10,000 new + 45,000 re-sent = 55,000 total over the run. Cacheable context: unknown; no cache assumed. These are illustrative input totals, not measured waste or promised savings. {unknownOutput}","unknownOutput":"Output tokens: unknown; this instruction does not establish reply length.","turn-limit":"At most {limit} turns; actual run length and token use are unknown.\\n\\nContext tokens: new, cacheable and re-sent unknown. Output tokens: unknown. A turn ceiling alone does not establish waste or savings.","output-limit":"At most {runLimit} output tokens over a 10-turn run (assuming one reply at the {limit}-token ceiling per turn).\\n\\nActual output use and savings are unknown; this ceiling does not establish waste. Context tokens: new, cacheable and re-sent unknown.","context":"About {total} context tokens over 10 {units}, {repeated} of them re-sent (assuming one full copy per {unit}).\\n\\n{tokens} new on the first {unit} + {repeated} re-sent over the next 9 {units} = {total} total; {tokens} cacheable tokens per request if supported. Estimate: UTF-8 bytes divided by 4, rounded up, not a model tokenizer.","reads":"{context} {tokens} context tokens per read. The 9 repeat reads expose {repeated} avoidable context tokens if the existing copy can be reused; accumulation of duplicate copies is not assumed. {unknownOutput}","ordering":"{context} For the named stable file only. New request-specific context tokens are unknown. The changing prefix can force {repeated} stable tokens to be prefilled again after the first request. Cache reuse depends on provider support, prefix size threshold and lifetime; reordering does not shorten context for local models. {unknownOutput}"}}'),kn=e=>e.toLocaleString("en-US"),Ws=(e,t)=>e.replace(/\{(\w+)\}/g,(n,o)=>t[o]);function ul(e,t="",n=0){let o=df.estimates,s={limit:kn(n),runLimit:kn(n*10),unknownOutput:o.unknownOutput};if(e==="history"||e==="turn-limit"||e==="output-limit")return Ws(o[e],s);let r=re(Buffer.byteLength(t,"utf8"));return Object.assign(s,{tokens:kn(r),repeated:kn(r*9),total:kn(r*10),unit:e==="ordering"?"request":"turn",units:e==="ordering"?"requests":"turns"}),s.context=Ws(o.context,s),Ws(o[e],s)}var Xs=/^ {0,3}(`{3,}|~{3,})/,ml=/^(#{1,6})\s+\S/,zs=/^(\s*)([-*+]|\d+[.)])\s+/,Vs=/^\s*\|/;function X(e){let t=e.split(`
28
+ `);return t.length>1&&t[t.length-1]===""&&t.pop(),t}function ne(e,t){let n=X(t),o=[],s=(a,c,l,d=0)=>o.push({kind:a,start:c+1,end:l+1,level:d,text:n[c]}),r=0,i=mi(t,Qt(e)?void 0:"outline");if(i){let a=i.raw.length+1;s("frontmatter",0,a),r=a+1}for(;r<n.length;){let a=n[r];if(a.trim()===""){r++;continue}let c=Xs.exec(a);if(c){let u=r+1;for(;u<n.length;){let h=Xs.exec(n[u]);if(h&&h[1][0]===c[1][0]&&h[1].length>=c[1].length&&!n[u].slice(h[0].length).trim())break;u++}let g=Math.min(u,n.length-1);s("fence",r,g),r=g+1;continue}let l=ml.exec(a);if(l){s("heading",r,r,l[1].length),r++;continue}if(Vs.test(a)){let u=r;for(;u+1<n.length&&Vs.test(n[u+1]);)u++;s("table",r,u),r=u+1;continue}let d=zs.exec(a);if(d){let u=d[1].length,g=r;for(;g+1<n.length&&n[g+1].trim()!==""&&!zs.test(n[g+1])&&n[g+1].length-n[g+1].trimStart().length>u;)g++;s("list_item",r,g,u),r=g+1;continue}let p=r;for(;p+1<n.length&&n[p+1].trim()!==""&&!Xs.test(n[p+1])&&!ml.test(n[p+1])&&!Vs.test(n[p+1])&&!zs.test(n[p+1]);)p++;s("paragraph",r,p),r=p+1}return o}function ff(e){return e.kind==="frontmatter"||e.kind==="fence"||e.kind==="table"||e.kind==="list_item"}function Co(e,t,n){let o=t,s=n,r=!0;for(;r;){r=!1;for(let i of e){if(!ff(i))continue;i.start<=s&&i.end>=o&&(i.start<o||i.end>s)&&(o=Math.min(o,i.start),s=Math.max(s,i.end),r=!0)}}return{start:o,end:s,snapped:o!==t||s!==n}}var uf={max_tokens:"output-limit",maxTokens:"output-limit",max_output_tokens:"output-limit",max_completion_tokens:"output-limit",max_turns:"turn-limit",maxTurns:"turn-limit"};function hl(e,t,n){if(!n?.enabled)return[];let o=n.inputs.filter(a=>a.unitKey===t),s=ae(o,e).sources.filter(a=>a.unitKey===t&&a.kind!=="prompt"),r=[...new Set(s.map(a=>a.sourcePath))],i=[];for(let a of r){let c=En(a);if(!c)continue;let l=e[a],d=xr(a,l,c),{toks:p}=d,u=Sr(l,c).filter(g=>g.kind==="comment");for(let g of Dr(d,vr(d),{layouts:!0})){let h=p[g.from],f=p[g.to-1],m=l.slice(h.start,f.end),w=h.line;if(!s.some(y=>y.sourcePath===a&&w<=y.sourceLine&&y.sourceLine<=f.endLine)||!on({path:a,line:w,excerpt:m},o,t,e)||u.some(y=>y.line<=f.endLine+1&&y.endLine>=w-1))continue;let v=c==="js"?g.args.find(y=>$n(p[y.from],"{")):null,S=v?br(p,v.from):c==="py"?g.args:[];if(!S.some(({from:y})=>[".","*","["].some(k=>$n(p[y],k))||["get","set"].includes(p[y]?.text)))for(let{from:y,to:k}of S){let b=p[y],O=p[y+2],_=b?.kind==="string"?b.value:b?.kind==="ident"?b.text:"",$=uf[_];if(!$||k!==y+3||!$n(p[y+1],c==="py"?"=":":")||O?.kind!=="number"||!/^[1-9]\d{0,5}$/.test(O.text)||S.filter(E=>(p[E.from]?.value??p[E.from]?.text)===_).length!==1)continue;let x=m.length>240,C=x?l.slice(b.start,O.end).replace(/\s+/g," "):m;C.length>240||i.push({rule:$,limit:Number(O.text),path:a,line:x?b.line:w,excerpt:C})}}}return i}var Js=JSON.parse('{"findings":{"history":{"title":"Full context keeps growing on every turn","cause":"The instruction retains full additions without trimming or summarizing, so earlier content is sent repeatedly as input.","fix":"Keep raw history outside model context. Send a bounded recent window and a summary of earlier material."},"ordering":{"title":"Changing content comes before stable instructions","cause":"The instruction puts request-specific content before a stable instruction file, so a prefix cache cannot reuse that later text when the prefix changes.","fix":"Place stable instructions first and request-specific content afterward. Verify cache eligibility and cache usage for the chosen model."},"reads":{"title":"An unchanged file is read into context again every turn","cause":"The instruction asks for another full read even when the same unchanged file is already in context.","fix":"Reuse the existing context copy. Read the file again only after a change or when its earlier contents are no longer available."},"turn-limit":{"title":"The turn limit has no stated reason","cause":"The instruction sets a fixed turn ceiling without explaining the choice. Its token effect cannot be established from the limit alone.","fix":"State why this turn ceiling is needed and choose it using run lengths and completion results. Keep a bounded stop condition."},"output-limit":{"title":"The output token limit has no stated reason","cause":"The instruction sets an output ceiling without explaining the choice. A ceiling is not evidence that replies use that many tokens.","fix":"State why this output ceiling is needed and choose it using observed reply lengths and truncation results."}},"outcomes":{"limit":"The limit has a stated reason and a way to assess it.","context":"Less repeated context or more reusable stable context."},"assessment":"A static rule verified this explicit instruction in its owned source range. Token estimates state assumptions; actual savings are unknown.","estimates":{"history":"About 55,000 context tokens over a 10-turn run, 45,000 of them re-sent (assuming 1,000 tokens added per turn and nothing trimmed).\\n\\n1,000 new per turn; 9,000 re-sent on turn 10; 10,000 new + 45,000 re-sent = 55,000 total over the run. Cacheable context: unknown; no cache assumed. These are illustrative input totals, not measured waste or promised savings. {unknownOutput}","unknownOutput":"Output tokens: unknown; this instruction does not establish reply length.","turn-limit":"At most {limit} turns; actual run length and token use are unknown.\\n\\nContext tokens: new, cacheable and re-sent unknown. Output tokens: unknown. A turn ceiling alone does not establish waste or savings.","output-limit":"At most {runLimit} output tokens over a 10-turn run (assuming one reply at the {limit}-token ceiling per turn).\\n\\nActual output use and savings are unknown; this ceiling does not establish waste. Context tokens: new, cacheable and re-sent unknown.","context":"About {total} context tokens over 10 {units}, {repeated} of them re-sent (assuming one full copy per {unit}).\\n\\n{tokens} new on the first {unit} + {repeated} re-sent over the next 9 {units} = {total} total; {tokens} cacheable tokens per request if supported. Estimate: UTF-8 bytes divided by 4, rounded up, not a model tokenizer.","reads":"{context} {tokens} context tokens per read. The 9 repeat reads expose {repeated} avoidable context tokens if the existing copy can be reused; accumulation of duplicate copies is not assumed. {unknownOutput}","ordering":"{context} For the named stable file only. New request-specific context tokens are unknown. The changing prefix can force {repeated} stable tokens to be prefilled again after the first request. Cache reuse depends on provider support, prefix size threshold and lifetime; reordering does not shorten context for local models. {unknownOutput}"}}'),mf=/^(?:append|add) (?:the )?(?:full|entire|complete|raw) (?:conversation history|tool (?:outputs?|results?)|retrieved documents?) to (?:the )?(?:context|history|conversation history)(?: without (?:trimming|summarizing|summarising) or (?:trimming|summarizing|summarising)|; (?:do not|never) (?:trim|truncate) or summari[sz]e(?: them)?)[.!]?$/i,hf=/^(?:prepend|put|place) (?:the )?(?:current timestamp|request ID|user data|retrieved text) (?:before|ahead of) (?:the )?stable instructions (?:from|in) `([^`]+)`[.!]?$/i,gf=/^(?:read|reload) `([^`]+)`(?: again)?,? even (?:when|if) (?:(?:its|the) (?:full|entire|complete) unchanged contents are already in context|it has not changed and is already in context)[.!]?$/i,kf=/^(?:Stop after |(?:The )?maximum (?:number of )?turns (?:is |[:=] ?)|Set max_turns to )([1-9]\d{0,5})(?: turns)?[.!]?$/i,wf=/^(?:Limit output to |(?:The )?maximum (?:number of )?output tokens (?:is |[:=] ?)|Set max_tokens to )([1-9]\d{0,5})(?: tokens)?[.!]?$/i,gl=/(?:^(?:always |(?:(?:on|at|for) )?(?:every|each) (?:turn|step|request),? )| (?:on|at|for) (?:every|each) (?:turn|step|request),?(?= without| even|[.!]?$))/i,yf=/\b(?:examples?|samples?|anti-patterns?|incorrect|avoid)\b/i,Sf=/\b(?:because|reason|rationale|budget|ceiling|capacity|parser|prevent\w*|unattended|retries|finite)\b/i,_o=e=>e.trim().replace(/^(?:[-*+] |\d+[.)] )/,"");function xf(e,t){if(/^(?: {4}|\t|\s*>)/.test(e[t]))return!0;let n=7;for(let o=t;o>=0;o--){let s=_o(e[o]),r=/^(#{1,6})\s/.exec(s);if(!(!r||r[1].length>=n)){if(yf.test(s))return!0;n=r[1].length}}return!1}function bf(e,t){for(let n=t-1;n>=0&&e[n].trim()&&!/^\s*#{1,6}\s/.test(e[n]);n--){let o=_o(e[n]);if(/^>/.test(o)||/^(?:for )?example\b/i.test(o)||/^(?:if|unless|when)\b.*:\s*$/i.test(o)||/^(?:do not|don't|never)\b.*\b(?:follow|policy|instructions|rules)\b/i.test(o))return!0}return!1}function kl(e,t,n,o){let s=gl.test(e),r=e.replace(gl,"");if(s&&mf.test(r))return{rule:"history"};for(let[i,a]of[[hf,"ordering"],[gf,"reads"]]){let c=s?i.exec(r):null;if(c&&o.has(c[1])&&n[c[1]]?.trim())return a==="ordering"&&/\{\{|\$\{|<%/.test(n[c[1]])?null:{rule:a,text:n[c[1]],reference:c[1]}}if(!t)return null;for(let[i,a]of[[kf,"turn-limit"],[wf,"output-limit"]]){let c=i.exec(e);if(c)return{rule:a,limit:Number(c[1])}}return null}function wl(e,t,n,o){let s=Js.findings[e.rule],r=`${s.cause} ${ul(e.rule,e.text,e.limit)}`,i=e.text?.split(`
29
+ `).findIndex(c=>c.trim()),a=e.reference&&i!==void 0?[{path:e.reference,line:i+1,excerpt:e.text.split(`
30
+ `)[i].slice(0,240)}]:[];return{kind:"cost",severity:e.rule.endsWith("limit")?"low":"medium",category:"token_waste",title:s.title,cause:r,summary:s.cause,site:{path:t,line:n},excerpt:o,otherSites:a,question:"",fixes:[{title:s.title,kind:e.code?"code":"prompt",approach:s.fix,summary:s.fix,expectedOutcome:e.rule.endsWith("limit")?Js.outcomes.limit:Js.outcomes.context,targetFiles:[{path:t,create:null}],impact:null,confidence:"high",objective:null,status:null,blockedBy:null,alsoFixes:[],delta:null}]}}function Eo(e){return e.CF_COST_FINDINGS!=="0"}function yl(e,t,n,o){if(!Eo(e))return[];let s=[],r=new Set,i=new Map;for(let a of n.nodes){if(a.kind!=="agent")continue;let c=new Set(a.files.map(p=>p.path)),l=a.files.flatMap(p=>{let u=t[p.path];if(typeof u!="string")return[];let g=u.split(`
31
+ `),h=p.span?g.slice(p.span.from-1,p.span.to):g,f=p.span?Math.min(...h.filter(w=>w.trim()).map(w=>/^\s*/.exec(w)[0].length)):0,m=h.map(w=>w.slice(Math.min(f,/^\s*/.exec(w)[0].length)));return[{file:p,lines:m,source:m.join(`
32
+ `),offset:(p.span?.from??1)-1}]}),d=l.length===a.files.length&&!l.some(({lines:p})=>p.some(u=>{let g=_o(u);return!kl(g,!0,t,c)&&Sf.test(g)}));for(let{file:p,source:u,lines:g,offset:h}of l){if(!["system prompt","soul","skill"].includes(p.role))continue;let f=ne(e,u).filter(m=>["frontmatter","fence","table"].includes(m.kind));for(let[m,w]of g.entries()){if(f.some(k=>k.start<=m+1&&m+1<=k.end)||xf(g,m)||bf(g,m))continue;let v=_o(w),S=kl(v,d,t,c);if(!S)continue;let y=JSON.stringify([p.path,m+h,S.rule]);r.has(y)||(r.add(y),s.push(wl(S,p.path,m+h+1,w.trim())))}}for(let p of hl(t,a.id,o)){let u=JSON.stringify([p.path,p.line-1,p.rule,p.limit]);if(r.has(u))continue;r.add(u);let g=JSON.stringify([p.rule,p.limit]),h=i.get(g);if(h){h.otherSites.push({path:p.path,line:p.line,excerpt:p.excerpt});let f=h.fixes[0].targetFiles;f.some(m=>m.path===p.path)||f.push({path:p.path,create:null})}else{let f=wl({...p,code:!0},p.path,p.line,p.excerpt);i.set(g,f),s.push(f)}}}return s}var vf=JSON.parse('{"findings":{"history":{"title":"Full context keeps growing on every turn","cause":"The instruction retains full additions without trimming or summarizing, so earlier content is sent repeatedly as input.","fix":"Keep raw history outside model context. Send a bounded recent window and a summary of earlier material."},"ordering":{"title":"Changing content comes before stable instructions","cause":"The instruction puts request-specific content before a stable instruction file, so a prefix cache cannot reuse that later text when the prefix changes.","fix":"Place stable instructions first and request-specific content afterward. Verify cache eligibility and cache usage for the chosen model."},"reads":{"title":"An unchanged file is read into context again every turn","cause":"The instruction asks for another full read even when the same unchanged file is already in context.","fix":"Reuse the existing context copy. Read the file again only after a change or when its earlier contents are no longer available."},"turn-limit":{"title":"The turn limit has no stated reason","cause":"The instruction sets a fixed turn ceiling without explaining the choice. Its token effect cannot be established from the limit alone.","fix":"State why this turn ceiling is needed and choose it using run lengths and completion results. Keep a bounded stop condition."},"output-limit":{"title":"The output token limit has no stated reason","cause":"The instruction sets an output ceiling without explaining the choice. A ceiling is not evidence that replies use that many tokens.","fix":"State why this output ceiling is needed and choose it using observed reply lengths and truncation results."}},"outcomes":{"limit":"The limit has a stated reason and a way to assess it.","context":"Less repeated context or more reusable stable context."},"assessment":"A static rule verified this explicit instruction in its owned source range. Token estimates state assumptions; actual savings are unknown.","estimates":{"history":"About 55,000 context tokens over a 10-turn run, 45,000 of them re-sent (assuming 1,000 tokens added per turn and nothing trimmed).\\n\\n1,000 new per turn; 9,000 re-sent on turn 10; 10,000 new + 45,000 re-sent = 55,000 total over the run. Cacheable context: unknown; no cache assumed. These are illustrative input totals, not measured waste or promised savings. {unknownOutput}","unknownOutput":"Output tokens: unknown; this instruction does not establish reply length.","turn-limit":"At most {limit} turns; actual run length and token use are unknown.\\n\\nContext tokens: new, cacheable and re-sent unknown. Output tokens: unknown. A turn ceiling alone does not establish waste or savings.","output-limit":"At most {runLimit} output tokens over a 10-turn run (assuming one reply at the {limit}-token ceiling per turn).\\n\\nActual output use and savings are unknown; this ceiling does not establish waste. Context tokens: new, cacheable and re-sent unknown.","context":"About {total} context tokens over 10 {units}, {repeated} of them re-sent (assuming one full copy per {unit}).\\n\\n{tokens} new on the first {unit} + {repeated} re-sent over the next 9 {units} = {total} total; {tokens} cacheable tokens per request if supported. Estimate: UTF-8 bytes divided by 4, rounded up, not a model tokenizer.","reads":"{context} {tokens} context tokens per read. The 9 repeat reads expose {repeated} avoidable context tokens if the existing copy can be reused; accumulation of duplicate copies is not assumed. {unknownOutput}","ordering":"{context} For the named stable file only. New request-specific context tokens are unknown. The changing prefix can force {repeated} stable tokens to be prefilled again after the first request. Cache reuse depends on provider support, prefix size threshold and lifetime; reordering does not shorten context for local models. {unknownOutput}"}}');function Sl({state:e,settings:t},n={}){let o=e.repos??[],s=[],r=Y(e).map(({repoKey:C,fragment:E},I)=>{let R=Yr(E,o[I]?.files??{},C,t);return s.push(...R.warnings),{repoKey:C,fragment:R.fragment,files:R.nodes}}),i=Xe(r),a=[];if(Eo(t)){let C=Pe(o).all,E=za(e,t);for(let{repoKey:I,fragment:R}of Y(e)){let P={...E,inputs:E.inputs.filter(N=>N.repo===I)};a.push(...yl(t,Object.fromEntries(C.filter(N=>N.repo===I).map(N=>[N.path,N.text])),R,P))}}let c=_e(e.findingsRaw??[]),l=Eo(t)?c.filter(C=>!qt(C.category)):c,{findings:d,warnings:p}=Oe(l,Be(e),Ue(e),t,a),u=d.length,g=new Set(d.map(ue));for(let C of n.mechanical===!1?[]:o){let E=fl(t,C.files??{},C.mechanicalInventory,C.root),I=Oe(E,{[C.key]:new Set(Object.keys(C.files??{}))},1/0,t);for(let R of I.findings){let P=ue(R);g.has(P)||(d.push(R),g.add(P))}}let h=new Set(a.map(ue)),f=d.filter(C=>qt(C.category)&&h.has(ue({...C,siteRepo:null}))).map(C=>({fingerprint:ue(C),support:"complete",confidence:"sure",weak:C.severity==="low",reason:vf.assessment})),m=e.findingQuality&&f.length?{...e.findingQuality,assessments:[...(e.findingQuality.assessments??[]).filter(C=>!f.some(E=>E.fingerprint===C.fingerprint)),...f]}:e.findingQuality,w=e.structuresRaw??[],v=mt(t)?e.findingHeadlines:void 0,S=v?.done?v.version===2?v.rows:v.rows.map(C=>({...C,target:"finding"})):[],y=ol(d,w,S,mt(t)?v?.version===2?v.diagnostics:e.findingHeadlineDiagnostics:void 0),k=y.rows,b=e.readPaths??Object.fromEntries(o.map(C=>[C.key,Object.keys(C.files??{})])),O;if(el(t)){let C=Qc(i,e.findingQuality?.codeEvidence),E=e.inspectPlan?.passes.map((I,R)=>e.passResults?.[R]?.findings??e.passFindings?.[R]??[])??e.passFindings??[];O={log:Zc({plan:e.inspectPlan??null,readByRepo:b,loaded:C,graph:i,passFindings:E.filter(I=>Array.isArray(I))}),unreachedIndexes:C===null?null:Yc(C,d.map(I=>({siteRepo:I.siteRepo??null,sitePath:I.site?.path??null})))}}let _=0,$=0;for(let C of o)for(let E of Object.values(C.files??{}))_++,$+=E.length;let x=St(e);return{graph:i,model:A.generate,analyzedShaByRepo:Object.fromEntries(o.map(C=>[C.key,C.headSha??""])),sourceStats:{files:_,bytes:$,...x===void 0?{}:{sawCode:x}},...O?{recall:O}:{},warnings:[...new Set([...e.warnings??[],...s,...p])],findings:d,...d.length>u?{structuralFindingCount:u}:{},...k.length?{findingHeadlines:k}:{},...y.diagnostics?{findingHeadlineDiagnostics:y.diagnostics}:{},structures:w,loadModes:e.loadModes??[],structurePassFailed:e.structurePassFailed??!1,splitCheckRan:e.splitCheckRan??!1,splitPassFailed:e.splitPassFailed??!1,sourceFilesByRepo:Object.fromEntries(o.map(C=>[C.key,C.files??{}])),readPaths:b,rechecks:e.rechecks??[],recheckedChangeIds:e.recheckedChangeIds??[],newVerdicts:e.newVerdicts??[],...m?{findingQuality:m}:{}}}import{createHash as Of}from"node:crypto";function xl({repo:e,body:t}){let[n,...o]=t.evidence,s=t.split,r=i=>i.map(a=>({path:a.path??null,startLine:a.startLine,endLine:a.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(i=>({repo:e,path:i.path,line:i.line,excerpt:i.excerpt})),structure:{title:t.title,subKind:t.subKind,files:t.files.map(i=>({path:i.path,action:i.action,role:i.role,unit:i.unit,loadMode:i.loadMode,loadVia:i.loadVia,purpose:i.purpose})),segments:t.segments.map(i=>({path:i.path,startLine:i.startLine,endLine:i.endLine,to:i.to,disposition:i.disposition,into:i.into?{path:i.into.path,line:i.into.line}:null,reason:i.reason})),reorder:t.reorder?{path:t.reorder.path,startLine:t.reorder.startLine,endLine:t.reorder.endLine,steps:t.reorder.steps.map(i=>({from:i.from,reason:i.reason}))}:null,toolMoves:t.toolMoves.map(i=>({tool:i.tool,fromUnit:i.fromUnit,toUnit:i.toUnit,reason:i.reason})),split:s?{frontDoor:{job:s.frontDoor.job,skills:[...s.frontDoor.skills]},subAgents:s.subAgents.map(i=>({job:i.job,description:i.description,path:i.path,handoff:i.handoff??null,skills:i.skills.map(a=>({from:a.from,to:a.to})),tools:[...i.tools],movedKnowledge:r(i.movedKnowledge),neededKnowledge:r(i.neededKnowledge)}))}:null}}}function bl(e,t=[]){let n=e.map((o,s)=>({f:o,index:s})).filter(({f:o})=>!qt(o.category));return{evidence:[...n.map(({f:o,index:s})=>({key:`f${s}`,kind:"finding",impact:o.kind,structure:null,cause:o.cause,category:o.category??null,question:o.question,site:o.site?{repo:o.siteRepo,path:o.site.path,line:o.site.line}:null,excerpt:o.excerpt,otherSites:o.otherSites.map(r=>({repo:r.repo,path:r.path,line:r.line,excerpt:r.excerpt})),fixSummaries:o.fixes.flatMap(r=>typeof r.summary=="string"&&r.summary.trim()?[r.summary]:[])})),...t.map((o,s)=>({key:`s${s}`,...xl(o)}))],positions:[...n.map(({f:o,index:s})=>({key:`f${s}`,target:"finding",index:s,fingerprint:gn("finding",o)})),...t.map((o,s)=>({key:`s${s}`,target:"structure",index:s,fingerprint:gn("structure",o)}))]}}function vl(e,t){return Of("sha256").update(et({batch:e,requestIdentity:t})).digest("hex")}import{z as _f}from"zod";function Qs(e){let t=e.trim();return/[.!?…。!?][\u0022'\u201d\u2019)\]]*$/u.test(t)?t:`${t}.`}function Ol(e,t,n){return t.kind==="structure"?`${Qs(e)} ${Qs(t.structure.title)}`:Cf(e,t,n)}function Cf(e,t,n){let o=e.trim();if(!Tn(t.category))return o;let s=[...t.site?[t.site]:[],...t.otherSites],r=new Map;for(let l of s){let d=r.get(l.path)??new Set;d.add(l.repo),r.set(l.path,d)}let i=new Set,a=s.flatMap(l=>{let d=JSON.stringify([l.repo,l.path]);return i.has(d)?[]:(i.add(d),[r.get(l.path).size>1&&l.repo?`${l.repo}:${l.path}`:l.path])}),c=t.question?.trim()||n.trim();return`${Qs(o)} ${c}${a.length?` (${a.join(", ")})`:""}`}var Cl=e=>e.match(/\d+(?:[.,]\d+)*/g)??[];function ft(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 Ys(e,t){let n=Ai.safeParse(e);if(!n.success)return null;let o=n.data,s=new Set(t.map(i=>i.key));for(let i of[...o.rows,...o.rejected])if(!s.delete(i.key))return null;if(s.size)return null;let r=ft(o.rows,o.rejected,o.diagnostics.unexpectedRows);return r.diagnostics.requested===t.length&&et(r.diagnostics)===et(o.diagnostics)?o:null}function $o(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})},r=rs.safeParse(e),i=new Map,a=new Set(t.map(d=>d.key)),c=r.success?r.data.rows:[];for(let d of c)i.set(d.key,(i.get(d.key)??0)+1),a.has(d.key)||o.diagnostics.unexpectedRows++;let l=new Map(c.map(d=>[d.key,d]));for(let d of t){let p=d.key,u=l.get(p);if(!r.success){s(p,"malformed_answer");continue}if(!u){s(p,"missing_row");continue}if(i.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=zt(u);if(!g){s(p,"invalid_wording");continue}let h=new Set([d.excerpt??"",...d.otherSites.map(m=>m.excerpt)].flatMap(Cl));if([g.headline,g.ifLeft].some(m=>Cl(m).some(w=>!h.has(w)))){s(p,"unsupported_number");continue}if(Tn(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=Ol(g.headline,d,n);if(!zt({...g,headline:f})){s(p,"invalid_wording");continue}o.rows.push({key:p,headline:f,ifLeft:g.ifLeft})}return ft(o.rows,o.rejected,o.diagnostics.unexpectedRows)}var wn=48e3;function dO(e,t){return e?[le(t,{template:"finding-headlines"},"Finding headlines",tn,re(wn),nn)]:[]}async function _l(e,t,n){let o=ps(t.evidence),s=e.tools.headlinePlan(o),r=vl(t,{prompt:e.tools.promptVersion(o.template),model:o.model,limits:o.limits,maxInputBytes:wn,request:s.identity,compositionVersion:2,resultVersion:Qe}),i=c=>{let l=Gs(t,c.rows);if(l.rejected.length){let d=new Set(l.rejected.map(p=>p.key));c=ft(c.rows.filter(p=>!d.has(p.key)),[...c.rejected,...l.rejected],c.diagnostics.unexpectedRows)}return{version:Qe,inputHash:r,done:!0,rows:l.rows,rejected:c.rejected,diagnostics:c.diagnostics}},a=c=>i(ft([],t.evidence.map(l=>({key:l.key,reason:c}))));if(n?.done)return n.version===Qe&&n.inputHash===r?n:a("stale_checkpoint");if(!t.evidence.length)return i(ft([],[]));if(!e.available)return a("model_unavailable");if(s.inputBytes>wn)return a("over_input_allowance");try{let c=await M(e,o,{},{maxInputBytes:wn}),l=s.relayValidated?Ys(c,t.evidence):$o(c,t.evidence,s.fallbackQuestion??"");return l?i(l):a("incompatible_relay_result")}catch(c){return e.rethrow(c),a(c instanceof Yi||c instanceof _f.ZodError?"malformed_answer":"provider_failure")}}function AO(e){return mt(e)?[q(e,"finding-headlines","findingHeadlines",tn,1,8e5,nn)]:[]}var FO=async(e,t)=>{if(t.progress.assertHeld(),t.progress.signal?.throwIfAborted(),!mt(e.settings))return{next:"persisting",set:{},clear:[]};let n=await qe(t),o=Se(t.model,n,p=>{t.progress.signal?.throwIfAborted(),t.progress.assertHeld(),t.progress.rethrow?.(p)},t.progress.signal),{findings:s,structures:r}=Sl(e,{mechanical:!1}),i=bl(s,r),a=new Set(Te(s).active),c=new Set(i.positions.filter(p=>p.target==="structure"||a.has(s[p.index])).map(p=>p.key)),l={...i,evidence:i.evidence.filter(p=>c.has(p.key)),positions:i.positions.filter(p=>c.has(p.key))},d=await _l(o,l,e.state.findingHeadlines);return t.progress.signal?.throwIfAborted(),t.progress.assertHeld(),await t.progress.checkpoint({findingHeadlines:d}),{next:"persisting",set:{findingHeadlines:d},clear:[]}};function Io(e){let t=e,n=t.expectedOutcome?.trim();return{motivation:t.motivation??[],outcomes:t.outcomes??(n?[{improvement:n,measurement:""}]:[])}}import{createHash as Lf}from"node:crypto";import{basename as Bl}from"node:path";var Zs=["split_monolith","single_source","fold_patches","extract_subagent","merge_subagents","move_rule","move_tool","reorder"],er=["create","shrink","edit","delete"],tr=["system prompt","soul","knowledge","skill","config","tools","mcp","template","reference","log","code"],nr=["always","on_demand","never"],or=["move","fold_into","remove_duplicate","remove_superseded"],sr=["pointer","handoff","reference_update"];var Ef=e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),El=(e,t)=>new RegExp(`(^|[\\s\`'"(])${Ef(t)}($|[\\s\`'"),.:;])`).test(e);function $f(e,t){let n=e.segments.map((i,a)=>({...i,index:a})),o=n.filter(i=>(i.disposition==="move"||i.disposition==="remove_superseded")&&t.has(i.to)),s=new Set([...o.filter(i=>i.disposition==="move").map(i=>i.path),...t]),r=n.filter(i=>(i.disposition==="remove_duplicate"||i.disposition==="fold_into")&&(s.has(i.path)||t.has(i.to)));return[...o,...r].sort((i,a)=>i.index-a.index)}var Il=(e,t,n)=>e.find(o=>o.path===t&&n>=o.startLine&&n<=o.endLine)??null;function rr(e,t,n){let o=Il(e,t,n);return o?o.disposition==="move"||o.disposition==="remove_superseded"?o.to:o.into?rr(e,o.into.path,o.into.line):o.to:t}function ut(e){return e===""||e.includes(`
33
+ `)||e.includes(": ")||e.endsWith(":")||/^[\s"'[\]{}#>|*&!%@`,]/.test(e)||/\s$/.test(e)?JSON.stringify(e):e}var If=e=>{let t=/^(#{1,6})\s+(.*)$/.exec(e);return t?t[2].trim():null};function $l(e,t,n,o,s){let r=()=>{t.lines.length&&t.lines[t.lines.length-1].trim()!==""&&(t.lines.push(""),t.prov.push("heading"))};if(n){let i=ne(e,t.lines.join(`
34
+ `)).filter(c=>c.kind==="heading"),a=i.findIndex(c=>If(c.text)===n.trim());if(a>=0){let c=i[a],l=t.lines.length;for(let d=a+1;d<i.length;d++)if(i[d].level<=c.level){l=i[d].start-1;break}t.lines.splice(l,0,...o),t.prov.splice(l,0,...s);return}r(),t.lines.push(`## ${n}`,""),t.prov.push("heading","heading")}else r();t.lines.push(...o),t.prov.push(...s)}function Rl(e,t){let n=new Set(t.ticked),o=$f(t.body,n),{files:s}=t.body,r=[],i=[],a=[],c=new Map,l=f=>X(t.contents[f]??""),d=f=>({lines:l(f),prov:l(f).map((m,w)=>`${f}:${w+1}`),created:!1});for(let f of[...new Set(o.map(m=>m.path))]){let m={lines:[],prov:[],created:!1};l(f).forEach((S,y)=>{Il(o,f,y+1)||(m.lines.push(S),m.prov.push(`${f}:${y+1}`))});let w=s.find(S=>S.path===f),v=m.lines.filter(S=>S.trim()!=="").length;if(w?.action==="delete"&&v===0){a.push(f);continue}w?.action==="delete"&&r.push(`${f} keeps ${v} lines this time, so it is shrunk, not deleted`),c.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}`;i.push({quote:l(f.path).slice(f.startLine-1,f.endLine).join(`
35
+ `),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=c.get(f.path)??(t.contents[f.path]!=null?d(f.path):{lines:[],prov:[],created:!0});if(m.created&&f.frontmatter){let w=["---",`name: ${ut(f.frontmatter.name)}`,`description: ${ut(f.frontmatter.description)}`,...f.frontmatter.tools.length?[`tools: ${bt(e,f.frontmatter.tools)}`]:[],"---"];m.lines.push(...w),m.prov.push(...w.map(()=>"frontmatter"))}for(let w of o.filter(v=>v.to===f.path&&v.disposition==="move")){let v=l(w.path).slice(w.startLine-1,w.endLine);$l(e,m,w.heading,v,v.map((S,y)=>`${w.path}:${w.startLine+y}`))}c.set(f.path,m)}let p=new Set;for(let f of o)f.into&&(f.disposition==="fold_into"||f.disposition==="move")&&p.add(rr(o,f.into.path,f.into.line));let u=t.body.reorder;u&&p.add(rr(o,u.path,u.startLine));for(let f of t.childSites)p.add(f.host);for(let f of p)!c.has(f)&&t.contents[f]!=null&&c.set(f,d(f));let g=[];t.body.additions.forEach((f,m)=>{if(!c.has(f.path)&&t.contents[f.path]!=null&&c.set(f.path,d(f.path)),!c.has(f.path)){r.push(`no host found for the addition to ${f.path} (addition:${m})`);return}if(!(f.kind==="pointer"&&!t.ticked.some(w=>El(f.text,w)))){if(f.kind==="reference_update"){g.push(m),p.add(f.path);return}$l(e,c.get(f.path),f.heading,[f.text],[`addition:${m}`])}});let h=[...p].filter(f=>c.has(f)).sort();return{outputs:[...c.entries()].sort(([f],[m])=>f.localeCompare(m)).map(([f,m])=>({path:f,content:`${m.lines.join(`
36
+ `)}
37
+ `,provenance:m.prov,created:m.created})),deletes:a.sort(),removals:i,modelHosts:h,pendingAdditions:g,warnings:r}}function Ro(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 Pl}from"node:path";var Rf=/(read|open|cat|file)/i;function Pf(e){return e.some(t=>Rf.test(`${t.name} ${t.description??""}`))}function Al(e,t){if(!e)return[];let n=e.files.find(r=>r.role==="tools"),o=[];if(n)try{o=Bt(t[n.path]).tools.map(r=>({name:r.name,description:r.description??null}))}catch{o=[]}let s=new Map(o.map(r=>[r.name,r]));for(let r of e.tools)r.source!=="mcp"&&(s.has(r.label)||s.set(r.label,{name:r.label}));return[...s.values()]}function ir(e){return Pf(e)?"on_demand":"never"}function Fl(e,t){return t.existing?t.existing.mode:e.role==="skill"?z(e.path,{nested:!0})?"on_demand":"never":e.role==="log"?"never":e.role!=="template"&&e.role!=="reference"?"always":t.prompt?.frontmatter?ir(t.prompt.frontmatter.tools.map(n=>({name:n}))):ir(Al(t.node,t.files))}var Af=/sent from (\S+:\d+)\.?\s*$/;function Ml(e,t){let{repoKey:n,root:o,files:s,fragment:r}=t,i=[],a=new Set(r.edges.filter(h=>h.kind==="delegates").map(h=>h.to)),c=new Map;for(let h of r.nodes)for(let f of h.files)c.set(f.path,[...c.get(f.path)??[],{nodeId:h.id,label:h.label,role:f.role,skill:f.label,inCode:f.span!==void 0}]);let l=h=>(r.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 w of l(h)){let S=(s[w]??"").split(`
38
+ `).findIndex(y=>y.includes(f)&&m(y));if(S>=0)return`${w}:${S+1}`}return null},p=h=>gt(h,o)??h,u=new Map,g=[];for(let h of Object.keys(s).filter(f=>Rn(f,o)).sort()){let f=c.get(h)?.[0]??null,m=f?`${n}#${f.nodeId}`:null,w={repo:n,path:h,unit:m,role:f?.role??null};if(!f){g.push({...w,mode:"never",via:"not a convention, not referenced",evidence:""});continue}switch(f.role){case"system prompt":{let v="convention";if(a.has(f.nodeId))v="sub-agent file; its parent sees only the frontmatter description";else if(f.inCode){let S=r.nodes.find(k=>k.id===f.nodeId)?.desc??"",y=Af.exec(S)?.[1];v=y?`system prompt in code, sent from ${y}`:"system prompt in code"}g.push({...w,mode:"always",via:v,evidence:""});break}case"code":g.push({...w,mode:"never",via:"code that sends the prompt; the model never reads it",evidence:""});break;case"soul":case"knowledge":{let v=Pl(h),S=d(f.nodeId,v,y=>/\b(not|never)\b.*\b(loaded|read)\b/i.test(y));g.push(S?{...w,mode:"never",via:"a line in the files says it is not loaded",evidence:S}:{...w,mode:"always",via:"Counterfact's runner appends it (src/lib/run/execute.ts:242-243)",evidence:""});break}case"tools":case"mcp":case"config":{let v=!0;try{f.role==="tools"?Bt(s[h]):JSON.parse(s[h])}catch{v=!1}g.push(v?{...w,mode:"always",via:f.role==="config"?"config":"tool definitions",evidence:""}:{...w,mode:"unknown",via:"unreadable config",evidence:""});break}case"skill":{let v=vt(e,Pl(h),s[h]),S=v.description??null;i.push(...(v.warnings??[]).map(y=>`${n}: ${h}: ${y}`)),g.push({...w,mode:"on_demand",via:S?`skill trigger \u2014 description: ${S}`:"skill trigger",evidence:"",evidenceKind:"skill-frontmatter"});break}default:{let v=d(f.nodeId,p(h))??(f.skill?`skill ${f.skill}`:""),S=r.nodes.find(y=>y.id===f.nodeId)??null;if(ir(Al(S,s))==="on_demand")g.push({...w,mode:"on_demand",via:"named by a file the unit loads",evidence:v});else{let y=u.get(f.nodeId)??{label:f.label,paths:[]};y.paths.push(h),u.set(f.nodeId,y),g.push({...w,mode:"never",via:"pointer, but no file-reading tool",evidence:v})}}}}for(let{label:h,paths:f}of u.values()){let m=f.length;i.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:i}}function Po(e,t,n){return e.find(o=>o.repo===t&&o.path===n)??null}var Ff="<!-- counterfact: proposed file -->";function jt(e,t){return e.startsWith(`${t}#`)?e.slice(t.length+1):null}function Tl(e,t,n){if(Qt(e))return qi(t,n);if(!t.startsWith(`---
39
+ `)){let c=n([]);return c.length?`---
40
+ tools: ${c.join(", ")}
41
+ ---
42
+ ${t}`:t}let o=t.indexOf(`
43
+ ---`,3),s=t.slice(4,o).split(`
44
+ `),r=s.findIndex(c=>/^tools\s*:/i.test(c)),i=r>=0?s[r].replace(/^tools\s*:\s*/i,"").replace(/^\[|\]$/g,"").split(",").map(c=>c.trim()).filter(Boolean):[],a=n(i);return r>=0?a.length?s[r]=`tools: ${a.join(", ")}`:s.splice(r,1):a.length&&s.push(`tools: ${a.join(", ")}`),`---
45
+ ${s.join(`
46
+ `)}${t.slice(o)}`}function Ll(e,t){let n=JSON.parse(e);return Array.isArray(n)?`${JSON.stringify(t(n),null,2)}
47
+ `:`${JSON.stringify({...n,tools:t(n.tools??[])},null,2)}
48
+ `}function Mf(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 jl(e,t,n,o,s,r=[]){let i={...t};for(let a of n.files)if(a.action==="delete"&&delete i[a.path],a.action==="create"){let c=a.frontmatter?`---
49
+ name: ${ut(a.frontmatter.name)}
50
+ description: ${ut(a.frontmatter.description)}
51
+ ${a.frontmatter.tools.length?`tools: ${bt(e,a.frontmatter.tools)}
52
+ `:""}---
53
+ `:"";i[a.path]=`${c}${Ff}
54
+ `}for(let a of n.additions)a.kind==="reference_update"||i[a.path]==null||(i[a.path]=`${i[a.path].replace(/\n?$/,`
55
+ `)}${a.text}
56
+ `);for(let a of n.toolMoves){let c=Tf(e,i,{tool:a.tool,fromPath:a.fromPath??Sn(o,n,a.fromUnit,s),toPath:a.toPath??Sn(o,n,a.toUnit,s)});c&&r.push(c)}return i}function Sn(e,t,n,o){let s=jt(n,o);return s?Mf(e,s):t.files.find(r=>r.unit===n&&r.role==="system prompt")?.path??null}function Tf(e,t,n){let{tool:o,fromPath:s,toPath:r}=n;if(Qt(e)){for(let i of[s,r])if(i&&t[i]!=null&&!i.endsWith(".json")&&Ki(t[i]).error)return`${i}: tools could not be read; moving ${o} was skipped.`}return s&&t[s]!=null&&(t[s]=s.endsWith(".json")?Ll(t[s],i=>i.filter(a=>a.name!==o)):Tl(e,t[s],i=>i.filter(a=>a!==o))),r&&t[r]!=null&&(t[r]=r.endsWith(".json")?Ll(t[r],i=>i.some(a=>a.name===o)?i:[...i,{...n.object??{},name:o}]):Tl(e,t[r],i=>i.includes(o)?i:[...i,o])),null}function Dl(e,t){let n=Fe(e,dn(e,t));return Mn(n.fragment,t.repoKey).fragment}var Nl=e=>e.files.map(t=>t.path).sort().join(`
57
+ `),yn=(e,t)=>e.nodes.find(n=>n.files.some(o=>o.path===t))??null;function Ao(e,t,n,o){let s=m=>`${o}#${m}`,r=new Map(e.nodes.map(m=>[m.id,m])),i=new Map(t.nodes.map(m=>[m.id,m])),a=[];for(let[m,w]of i)r.has(m)?Nl(r.get(m))!==Nl(w)&&a.push({id:s(m),change:"edited",label:w.label}):a.push({id:s(m),change:"added",label:w.label});for(let[m,w]of r)i.has(m)||a.push({id:s(m),change:"removed",label:w.label});let c=m=>`${m.from}>${m.to}>${m.kind}`,l=new Map(e.edges.map(m=>[c(m),m])),d=new Map(t.edges.map(m=>[c(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,w)=>{let v=w?yn(t,m)??yn(e,m):yn(e,m)??yn(t,m);return v?s(v.id):""},g=n.files.map(m=>{let w=n.segments.filter(b=>b.disposition==="move"&&b.to===m.path&&b.path!==m.path),v=n.segments.filter(b=>b.path===m.path),S=u(m.path,m.action!=="delete"),y,k={};if(m.action==="delete")y="removed";else if(m.action==="create"){let b=[...new Set(w.map($=>$.path))],O=b.length===1&&n.files.some($=>$.path===b[0]&&$.action==="delete"),_=b.length===1?u(b[0],!1):"";O&&_&&_!==S?(y="moved",k={fromNode:_,fromPath:b[0]}):y="added"}else w.length?y="grown":n.reorder?.path===m.path?y="reordered":v.length||m.action==="shrink"?y="shrunk":y="grown";return{path:m.path,role:m.role,node:S,change:y,...k,segments:w.length}});if(n.split){let m=new Set([...n.segments.map(w=>w.path),...(n.additions??[]).map(w=>w.path)]);for(let w of m){if(g.some(S=>S.path===w))continue;let v=yn(e,w);g.push({path:w,role:v.files.find(S=>S.path===w).role,node:s(v.id),change:n.segments.some(S=>S.path===w)?"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(jt(m,o))return m;let v=n.files.find(S=>S.unit===m);return v?u(v.path,!0):m},f=n.toolMoves.map(m=>({label:m.tool,fromNode:h(m.fromUnit),toNode:h(m.toUnit)}));return{nodes:a,edges:p,files:g,tools:f}}var Kl=["ordering","reliability","coverage","cost","safety","correctness"],xn=["low","medium","high","critical"];function ar(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 Ge=(e,t)=>e.includes(t);function Nf(e){if(!Ge(Zs,e.subKind))return`sub-kind "${e.subKind}" is not one of ${Zs.join(", ")}`;if(!Ge(Kl,e.kind))return`impact "${e.kind}" is not one of ${Kl.join(", ")}`;if(e.reorders.length>1)return"more than one reorder";let t=[];for(let i of e.files){if(!Ge(er,i.action))return`${i.path}: action "${i.action}" is not one of ${er.join(", ")}`;if(!Ge(tr,i.role))return`${i.path}: role "${i.role}" is not one of ${tr.join(", ")}`;if(!Ge(nr,i.loadMode))return`${i.path}: load mode "${i.loadMode}" is not one of ${nr.join(", ")}`;let a=i.fmName||i.fmDescription||i.fmTools.length?{name:i.fmName,description:i.fmDescription,tools:i.fmTools}:null;t.push({path:i.path.trim(),action:i.action,role:i.role,unit:i.unit,loadMode:i.loadMode,loadVia:i.loadVia||null,purpose:i.purpose,frontmatter:a})}let n=[];for(let i of e.segments){if(!Ge(or,i.disposition))return`${i.path}:${i.startLine}-${i.endLine}: disposition "${i.disposition}" is not one of ${or.join(", ")}`;let a=i.intoPath?{path:i.intoPath.trim(),line:i.intoLine}:null,c=i.disposition==="remove_duplicate"||i.disposition==="fold_into",l=i.to.trim()||(c&&a?a.path:"");n.push({path:i.path.trim(),startLine:i.startLine,endLine:i.endLine,to:l,disposition:i.disposition,into:a,childRef:i.childRef||null,heading:i.heading||null,reason:i.reason})}let o=[];for(let i of e.additions){if(!Ge(sr,i.kind))return`addition to ${i.path}: kind "${i.kind}" is not one of ${sr.join(", ")}`;o.push({path:i.path.trim(),text:i.text,kind:i.kind,heading:i.heading||null})}let s=e.reorders[0],r=Ge(xn,e.severity)?e.severity:"medium";return{body:{...Io(e),subKind:e.subKind,kind:e.kind,severity:r,title:e.title.trim(),cause:e.cause,evidence:e.evidence.map(i=>({path:i.path.trim(),line:i.line,excerpt:i.excerpt})),files:t,segments:n,additions:o,reorder:s?{path:s.path.trim(),startLine:s.startLine,endLine:s.endLine,steps:s.order.map((i,a)=>({from:i,reason:s.reasons[a]||null}))}:null,toolMoves:e.toolMoves.map(i=>({...i,fromPath:null,toPath:null}))},children:e.children.map(i=>({ref:i.ref.trim(),how:i.how}))}}function jf(e,t){let n=[],o=[],s=[],r=(i,a)=>{n.push(`proposal "${i}": ${a} \u2014 dropped`),o.push({title:i,reason:a})};for(let i of t.raw){let a=Nf(i);if(typeof a=="string"){r(i.title,a);continue}let{body:c}=a,l=a.children,d=`proposal "${c.title}"`;if(c.files.length>as){r(c.title,`${c.files.length} files (cap ${as})`);continue}if(c.segments.length>cs){r(c.title,`${c.segments.length} segments (cap ${cs})`);continue}let p=ar(c),u=new Set(c.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(C=>x.files[C]!=null)):void 0;if(!h){r(c.title,`cites ${g[0]??p[0]??"no source file"}, which the analysis never read`);continue}let f=x=>h.files[x]!=null,w=[...c.files.map(x=>x.path),...c.segments.map(x=>x.path),...c.additions.map(x=>x.path),...c.reorder?[c.reorder.path]:[]].map(x=>Fn(x)?`${x} is code \u2014 the structural pass moves instructions only`:Rn(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(w){r(c.title,w);continue}let v=[];for(let x of c.evidence.slice(0,4)){let C=f(x.path)?ve(h.files[x.path],x.excerpt):null;C==null?n.push(`${d}: evidence at ${x.path} is not a quote from the file \u2014 dropped`):v.push({...x,line:C})}c.evidence.length>4&&n.push(`${d}: ${c.evidence.length} evidence sites, kept the first 4`),c.evidence=v;let S=new Set(c.files.filter(x=>x.action!=="delete").map(x=>x.path)),y=null;for(let x of c.segments){let C=h.files[x.path];if(C==null){y=`segment ${x.path}:${x.startLine}-${x.endLine} is in a file that does not exist yet`;break}let E=X(C).length;if(x.startLine<1||x.endLine<x.startLine||x.endLine>E){y=`segment ${x.path}:${x.startLine}-${x.endLine} is outside the file`;break}let I=Co(ne(e,C),x.startLine,x.endLine);if(I.snapped&&(n.push(`${d}: segment ${x.path}:${x.startLine}-${x.endLine} cut an atomic block; widened to ${I.start}-${I.end}`),x.startLine=I.start,x.endLine=I.end),(x.disposition==="move"||x.disposition==="remove_superseded")&&!S.has(x.to)&&x.to!==x.path){y=`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){y=`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)){y=`segment ${x.path}:${x.startLine}-${x.endLine} folds into ${x.into.path}, which does not exist`;break}if(x.disposition==="move"&&x.into&&c.files.find(P=>P.path===x.to)?.role!=="log"){y=`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))){y=`segment ${x.path}:${x.startLine}-${x.endLine} is remove_superseded but names no child`;break}}if(!y){let x=[...c.segments].sort((C,E)=>C.path.localeCompare(E.path)||C.startLine-E.startLine);for(let C=1;C<x.length;C++)if(x[C].path===x[C-1].path&&x[C].startLine<=x[C-1].endLine){y=`overlapping segments in ${x[C].path}`;break}}if(!y){let x=c.segments.filter(E=>E.disposition!=="move"),C=c.segments.find(E=>E.into&&x.some(I=>I.path===E.into.path&&E.into.line>=I.startLine&&E.into.line<=I.endLine));C&&(y=`segment ${C.path}:${C.startLine}-${C.endLine} folds into a line this proposal removes`)}if(y){r(c.title,y);continue}let k=new Set,b=Ro(c),O=(x,C)=>C!=null&&c.segments.some(E=>E.path===x&&C>=E.startLine&&C<=E.endLine);if(l=l.filter(x=>{if(k.has(x.ref))return!1;k.add(x.ref);let C=/^f(\d+)$/.exec(x.ref),E=C?t.findings[Number(C[1])-1]:void 0;if(!E)return n.push(`${d}: child ${x.ref} is not a finding of this analysis \u2014 link dropped`),!1;if(!Te([E]).active.length)return n.push(`${d}: child ${x.ref} is not active \u2014 link dropped`),!1;let I=E.siteRepo===h.key;return I&&E.site&&O(E.site.path,E.site.line)||I&&E.otherSites.some(P=>O(P.path,P.line))||b.some(P=>x.how.includes(P))?!0:(n.push(`${d}: child ${x.ref} ("${E.title}") is not in a segment and its how names no destination \u2014 link dropped`),!1)}),l.length===0&&c.evidence.length<2){r(c.title,c.evidence.length===0?"no evidence quote is in the files":"no children and fewer than two evidence sites");continue}if(c.reorder){let x=c.reorder,C=ne(e,h.files[x.path]??"").filter(I=>I.kind==="list_item"&&I.level===0&&/^\s*\d+[.)]/.test(I.text)&&I.start>=x.startLine&&I.end<=x.endLine),E=x.steps.map(I=>I.from).sort((I,R)=>I-R);if(E.length!==C.length||E.some((I,R)=>I!==R+1)){r(c.title,`reorder of ${x.path}:${x.startLine}-${x.endLine} is not a permutation of its ${C.length} steps`);continue}}let _=s.find(x=>ar(x.body).some(C=>p.includes(C)));if(_){r(c.title,`shares ${ar(_.body).find(x=>p.includes(x))} with "${_.body.title}"`);continue}let $=l.map(x=>t.findings[Number(x.ref.slice(1))-1].severity);c.severity=$.length?$.reduce((x,C)=>xn.indexOf(C)>xn.indexOf(x)?C:x):xn[Math.min(xn.indexOf(c.severity),1)],s.push({repo:h.key,body:c,children:l})}for(let i of s.splice(Zt))r(i.body.title,`over the cap of ${Zt} proposals`);return{kept:s,warnings:n,dropped:o}}var Df=/\b(never|always|must|don't|do not)\b/i,Bf=/^\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 Kf(e){return Df.test(e)||Bf.test(e)}function cr(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 qf(e,t){let n=Or("",t),o=gt(e.path,t)??e.path,s=o.startsWith(".claude/")?".claude/":"",r=Ae(e.frontmatter?.name||Bl(o).replace(/\.md$/i,""));switch(e.role){case"skill":return`${n}${s}skills/${r}/SKILL.md`;case"system prompt":return`${n}${s}agents/${r}.md`;case"template":return`${n}templates/${Bl(o)}`;default:return`${n}${o}, with a pointer from a file the agent always loads`}}function ql(e,t){let n=jf(e,t),o=[...n.warnings],s=[...n.dropped],r=[],i=(a,c)=>{o.push(`proposal "${a}": ${c} \u2014 dropped`),s.push({title:a,reason:c})};for(let a of n.kept){let{body:c,repo:l}=a,d=t.repos.find(k=>k.key===l),p=We(d.root),u=t.fragments.find(k=>k.repoKey===l)?.fragment;if(!u){i(c.title,`no architecture graph for ${l}`);continue}let g=k=>`${l}#${k}`,h=k=>u.nodes.find(b=>b.id===jt(k,l))??null;for(let k of c.toolMoves)k.fromPath=Sn(u,c,k.fromUnit,l),k.toPath=Sn(u,c,k.toUnit,l);let f=c.toolMoves.find(k=>!k.fromPath||!k.toPath);if(f){i(c.title,`cannot find the tool list of ${f.fromPath?f.toUnit:f.fromUnit}`);continue}let m=Dl(e,{repoKey:l,root:p,agentConfigurations:d.agentConfigurations,files:jl(e,d.files,c,u,l,o)}),w=null;for(let k of c.files){if(k.action==="delete"||k.loadMode==="never"||k.action!=="create"&&k.action!=="edit")continue;let b=m.nodes.find(_=>_.files.some($=>$.path===k.path));if(!b){w=`The agent would not load ${k.path} \u2014 put it at ${qf(k,p)}.`;break}let O=jt(k.unit,l);if(O&&b.id!==O){w=`${k.path} would attach to ${g(b.id)}, not ${k.unit}`;break}if(!O&&u.nodes.some(_=>_.id===b.id)&&k.role==="system prompt"){w=`${k.path} would not be a new sub-agent`;break}if(!O&&k.role==="system prompt"&&!m.edges.some(_=>_.kind==="delegates"&&_.to===b.id)){w=`${k.path} would not be a sub-agent anyone delegates to`;break}}if(!w)for(let k of c.toolMoves){let b=jt(k.toUnit,l)??m.nodes.find(_=>_.files.some($=>c.files.some(x=>x.unit===k.toUnit&&x.path===$.path)))?.id;if(!m.nodes.find(_=>_.id===b)?.tools.some(_=>_.label===k.tool)){w=`${k.tool} would not reach ${k.toUnit}`;break}}if(w){i(c.title,w);continue}for(let k of c.files){if(k.action==="delete"||k.action==="shrink")continue;let b=k.action==="create"?null:Po(t.loadModes,l,k.path),O=Fl(k,{existing:b,node:h(k.unit),files:d.files,prompt:c.files.find(_=>_.unit===k.unit&&_.role==="system prompt")});if(O!=="unknown"&&O!==k.loadMode){w=`declares ${k.path} ${k.loadMode}, but the conventions make it ${O}`;break}if(k.loadMode==="on_demand"&&k.role==="skill"&&k.action==="create"){let _=k.frontmatter?.description??"";if(!_||_.length>1024){w=`skill ${k.path} needs a description of at most 1024 characters to be triggered`;break}}if(k.loadMode==="on_demand"&&k.role!=="skill"&&!b){let _=$=>Po(t.loadModes,l,$)?.mode==="always"&&Po(t.loadModes,l,$)?.unit===k.unit||c.files.some(x=>x.path===$&&x.unit===k.unit&&x.loadMode==="always");if(!c.additions.some($=>$.kind==="pointer"&&$.text.includes(k.path)&&_($.path))){w=`${k.path} is read only on demand, but nothing the agent always loads points to it`;break}}}if(!w)for(let k of c.segments){let b=c.files.find($=>$.path===k.to);if(k.disposition!=="move"||b?.loadMode!=="never"||k.into)continue;let _=(d.files[k.path]??"").split(`
58
+ `).slice(k.startLine-1,k.endLine).findIndex(Kf);if(_>=0){w=`moves a rule into a file the agent never reads (${k.path}:${k.startLine+_} \u2192 ${k.to})`;break}}if(w){i(c.title,w);continue}let S=Rl(e,{body:c,ticked:Ro(c),contents:d.files,childSites:[]}).outputs.map(k=>({path:k.path,bytes:Buffer.byteLength(k.content,"utf8")})).find(k=>k.bytes>is);if(S){i(c.title,`would assemble ${S.path} at ${S.bytes} bytes (cap ${is})`);continue}let y=Object.fromEntries(cr(c,d.files).map(k=>[k,Lf("sha256").update(d.files[k]).digest("hex")]));r.push({...a,sourceHashes:y,delta:Ao(u,m,c,l)})}return{structures:r,warnings:o,dropped:s}}var Hf=["low","medium","high","critical"];function Fo(e){return e.map((t,n)=>`f${n+1}`)}function _C(e,t){if(t.every((o,s)=>o===s))return e;let n=o=>{let s=/^f(\d+)$/.exec(o),r=s?t[Number(s[1])-1]:void 0;return r===void 0?o:`f${r+1}`};return e.map(o=>({...o,children:o.children.map(s=>({...s,ref:n(s.ref)})),body:{...o.body,segments:o.body.segments.map(s=>({...s,childRef:s.childRef?n(s.childRef):null})),...o.body.split?{split:{...o.body.split,subAgents:o.body.split.subAgents.map(s=>({...s,...s.resolves?{resolves:s.resolves.map(n)}:{}}))}}:{}}}))}function lr(e,t){let n=Fo(e),o=new Set(Te(e).active),s=e.flatMap((i,a)=>!o.has(i)||[i.site,...i.otherSites??[]].some(c=>c&&Ut(c.path,t))?[]:[{...i,ref:n[a]}]),r=e.map(i=>({...i.activity===void 0?{}:{activity:i.activity},title:i.title,severity:Hf.includes(i.severity)?i.severity:"medium",siteRepo:i.siteRepo,site:i.site,otherSites:(i.otherSites??[]).map(a=>({path:a.path,line:a.line}))}));return{items:s,candidates:r,refs:n}}var pr=A.generate;function Uf(e,t){return{template:"derive-structure",model:pr,answerFormat:"structures",limits:{effort:"high"},inputs:{maxStructures:String(Zt),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:Le(o),markdown:s,outline:s?ne(e,o).map(r=>({...r,text:r.text.slice(0,60)})):[]}})}}}async function Hl(e,t,n){return(await M(t,Uf(e,n),e)).structures}async function Mo(e,t,n,o={}){let s=o.enforce??Ds;if(t.length===0)return{kept:[],dropped:[],flagged:[],ran:!0};let r=await Dc(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(!r)return{kept:t,dropped:[],flagged:[],ran:!1};let i=[],a=[],c=[];return t.forEach((l,d)=>{let p=r.get(d);if(p.inScope){i.push(l);return}let u={title:l.body.title,reason:p.reason};s?a.push(u):(c.push(u),i.push(l))}),{kept:i,dropped:a,flagged:c,ran:!0}}function Gf(e,t,n,o=15e4){let s=new Set(t.flatMap(l=>[l.site?.path,...(l.otherSites??[]).map(d=>d.path)]).filter(l=>!!l)),r=l=>e.has(l)?0:s.has(l)?1:2,i=Object.keys(n).sort((l,d)=>r(l)-r(d)||n[l].length-n[d].length||(l<d?-1:1)),a={},c=0;for(let l of i)r(l)>0&&c+n[l].length>o||(a[l]=e.has(l)?me(n[l]):n[l],c+=a[l].length);return a}function Ul(e,t,n,o,s={}){return o?Gf(Q(t),n,se(s,Et(e),t)):oo(e,t,void 0,new Set,void 0,{...s,CF_READING_PRIORITY:"0"}).files}function Gl(e){let t=Fo(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(r=>({...r,repo:r.repo??n.siteRepo}))),[{id:t[o],title:n.title,category:n.category,sites:s}]})}function Wl(e,t,n){return t===void 0?[]:e.filter(o=>o.sites.length>0&&o.sites.every(s=>s.repo===t&&n.some(r=>r.path===s.path&&(!r.span||s.line!==null&&s.line>=r.span.from&&s.line<=r.span.to))))}import{posix as Wf}from"node:path";function To(e,t,n=1){let o=ne(e,t).filter(s=>s.kind==="heading");return o.map((s,r)=>({heading:s.text,startLine:s.start+n-1,endLine:(o.slice(r+1).find(i=>i.level<=s.level)?.start??X(t).length+1)+n-2,level:s.level}))}function Xl(e,t,n=1){let o=To(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:r})=>({startLine:s,endLine:r}))]:[{startLine:n,endLine:n+X(t).length-1}]}function zl(e,t,n){let o=new Map;for(let s of t.files.filter(r=>r.role==="tools")){let r=n[s.path]??"",i=[];try{i=Bt(r).tools}catch{}let a=[...i,...Gr(r).tools,...Wr(r).tools];for(let c of a)o.has(c.name)||o.set(c.name,{name:c.name,description:c.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(r=>r.role==="mcp")?.path??""})}function dr(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 Jl(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 Ql(e,t){if(!dr(e).some(o=>o.id===t))return null;let n=Jl(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 Yl(e,t){return dr(t.graph).map(n=>zf(e,{...t,unitId:n.id}))}function Vl(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 r=s.label,i=t.files.filter(d=>d.role==="reference"&&(d.label===r||d.path.startsWith(Wf.dirname(s.path)+"/"))).map(d=>d.path).sort(),a=[s.path,...i],c=a.map(d=>n[d]??"").join(`
59
+ `),l=d=>d.filter(p=>ot(c,{name:p,key:p,paths:[],bytes:0}));return{name:r,path:s.path,description:vt(e,s.path,n[s.path]??"").description?.trim()||"no description",bytes:a.reduce((d,p)=>d+Buffer.byteLength(n[p]??""),0),references:i,tools:l(t.tools.map(d=>d.label)),skills:l(o.flatMap(d=>d.label&&d.label!==r?[d.label]:[]))}}).sort((s,r)=>s.name.localeCompare(r.name))}function Xf(e,t,n){return t.files.filter(o=>o.role==="system prompt"||o.role==="soul").map(o=>{let s=n[o.path]??"",r=o.span?.from??1,i=o.span?.to??X(s).length,a=X(s).slice(r-1,i).join(`
60
+ `);return{path:o.path,text:a,startLine:r,endLine:i,numberedText:Le(s).split(`
61
+ `).slice(r-1,i).join(`
62
+ `),sections:To(e,a,r)}})}function zf(e,t){let{graph:n,files:o}=t,s=dr(n);if(!t.unitId&&s.length!==1)throw new Error("Select one top-level agent for the split inventory.");let r=t.unitId?s.find(l=>l.id===t.unitId):s[0];if(!r)throw new Error(`No top-level agent named ${t.unitId} is available.`);let i=Jl(n,r.id),a=Vl(e,r,o),c=Xf(e,r,o);return{agent:{id:r.id,name:r.label,description:r.desc,tools:r.tools.map(l=>l.label)},skills:a,tools:zl(e,r,o).map(l=>({...l,skills:a.filter(d=>d.tools.includes(l.name)).map(d=>d.name)})),subAgents:n.nodes.filter(l=>l.id!==r.id&&i.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:Vl(e,l,o)})),prompt:c[0]??null,prompts:c,knowledge:r.files.filter(l=>l.role==="knowledge").map(l=>({path:l.path,sections:To(e,o[l.path]??"")})),open:t.open.map(l=>({...l,frozen:[...l.frozen],declined:[...l.declined],files:[...l.files]})),findings:Wl(t.findings??[],t.repoKey,n.nodes.filter(l=>i.has(l.id)).flatMap(l=>l.files))}}function Lo(e,t){return(t.repos??[]).flatMap((n,o)=>{let s=ds(t,o);return Yl(e,{graph:s,files:n.files??{},open:t.openStructures??[],repoKey:n.key,findings:t.splitFindingsPriced?t.shapeFindings??[]:[]}).filter(r=>!ze(r.agent)).map(r=>({repo:n,graph:s,inventory:r}))})}function Zl(e){return e.findings.length>0||e.skills.length>=8||e.subAgents.length>=3||e.tools.length>=20}var fr=A.generate;function ep(e){return{template:"derive-shape",model:fr,answerFormat:"shape",limits:{effort:"high"},inputs:{inventoryData:e,maxSubAgents:String(en),minSkills:String(zn)}}}function f_(e,t){return e.tools.analysisRequest(ep(t))}function tp(e,t){return e.tools.validateShapeInput(t),M(e,ep(t))}function np(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)),r=o.filter(l=>!s.has(l.id)),i=r[0];if(r.length!==1||i.id!==t.agent.id||i.label!==t.agent.name)return`${t.agent.name} would not remain the one original entry point.`;let a=new Map(e.frontDoor.skills.map(l=>[l,i.id])),c=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===i.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)a.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&&!c.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!==a.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 op(e,t,n,o,s){let r=h=>({section:null,error:h}),{path:i,startLine:a,endLine:c}=t;if(!(n==="prompt"?o.prompts:o.knowledge).find(h=>h.path===i)||s[i]===void 0)return r(`${n} section ${i} is not an available ${n} file.`);let d=n==="prompt"?o.prompts.find(h=>h.path===i):null,p=d?.startLine??1,u=d?.endLine??X(s[i]).length;if(!Number.isInteger(a)||!Number.isInteger(c)||a<p||c<a||c>u)return r(`${n} section ${i}:${a}-${c} is outside its file or prompt span.`);let g=Co(ne(e,s[i]),a,c);return g.start<p||g.end>u?r(`${n} section ${i} snaps outside its prompt span.`):d&&Xl(e,d.text,d.startLine).some(h=>h.startLine<=g.end&&h.endLine>=g.start)?r(`prompt section ${i}:${g.start}-${g.end} would move the agent's identity.`):{section:{path:i,startLine:g.start,endLine:g.end},error:null}}var No=(e,t)=>e.path===t.path&&e.startLine<=t.endLine&&t.startLine<=e.endLine,L=e=>({shape:null,warnings:[`Split check discarded: ${e}`]});function sp(e,t,n){if(t.decision==="keep")return{shape:null,warnings:[]};if(t.decision!=="split")return L(`unknown decision "${t.decision}".`);if(t.subAgents.length<1||t.subAgents.length>en)return L(`a split needs 1\u2013${en} sub-agents.`);let{inventory:o,files:s}=n,r=new Set(o.skills.map(f=>f.name)),i=new Set(o.tools.map(f=>f.name)),a=new Set,c=f=>r.has(f)?a.has(f)?`skill ${f} is placed twice.`:(a.add(f),null):`unknown skill ${f}.`;for(let f of t.frontDoor.skills){let m=c(f);if(m)return L(m)}let l=new Set(o.subAgents.map(f=>Ae(f.name))),d=new Set,p=[],u=new Set,g=[];for(let f of t.subAgents){if(f.skills.length<zn&&f.promptSections.length===0)return L(`sub-agent ${f.name} needs at least one skill or one prompt section.`);for(let b of f.skills){let O=c(b);if(O)return L(O)}for(let b of f.tools)if(!i.has(b))return L(`unknown tool ${b} on ${f.name}.`);if(!f.handoff.trim())return L(`sub-agent ${f.name} has an empty handoff.`);if(!f.description.trim()||f.description.length>1024)return L(`sub-agent ${f.name} needs a description of 1\u20131024 characters.`);if(!/[a-z0-9]/i.test(f.name))return L(`sub-agent "${f.name}" needs a usable name.`);let m=Ae(f.name);if(l.has(m))return L(`the existing sub-agent ${m} already uses that name.`);let w=m,v=2;for(;d.has(w)||l.has(w);)w=`${m}-${v++}`;d.add(w);for(let b of f.resolves)if(!o.findings.some(O=>O.id===b))return L(`unknown finding ${b} on sub-agent ${w}.`);let S=[];for(let b of f.evidence){let O=s[b.path]===void 0?null:ve(s[b.path],b.excerpt);if(O===null)return L(`evidence quote was not found in ${b.path}: "${b.excerpt}".`);S.push({...b,line:O}),u.add(`${b.path}:${O}:${b.excerpt.replace(/\s+/g," ").trim()}`)}let y=[],k=[];for(let[b,O,_]of[["prompt",f.promptSections,y],["knowledge",f.knowledgeSections,k]])for(let $ of O){let x=op(e,$,b,o,s);if(x.error)return L(x.error);let C=x.section;if(b==="prompt"){if(p.some(E=>No(C,E)))return L(`prompt section ${C.path}:${C.startLine}-${C.endLine} is placed twice.`);p.push(C)}else if(k.some(E=>No(C,E)))return L(`knowledge section ${C.path}:${C.startLine}-${C.endLine} is listed twice on ${w}.`);_.push(C)}g.push({...f,name:w,skills:[...f.skills],tools:[...f.tools],resolves:[...new Set(f.resolves)],evidence:S,handoff:f.handoff.trim(),promptSections:y,knowledgeSections:k,movedKnowledge:[],neededKnowledge:[]})}for(let f of r)if(!a.has(f))return L(`skill ${f} is missing from the split.`);if(u.size<2)return L("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(v=>No(v,m))||g.some(v=>v!==f&&v.knowledgeSections.some(S=>No(S,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 L(`cannot prove that ${f} would load without a loadability checker.`)}try{let f=np(h,o,n.afterGraph(h));return f?L(f):{shape:h,warnings:[]}}catch(f){return L(`loadability check failed: ${f instanceof Error?f.message:String(f)}.`)}}import{posix as rp}from"node:path";function bn(e,t,n){let o=n.scoped[0]??"",s=o.slice(0,o.length-n.stripRoot(o).length),r=n.scoped.some(c=>n.stripRoot(c).startsWith(`${Er}/`)),i=`${s}${$r[r?0:1]}`,a=`${i}/${e}/skills/${t}`;return{agent:`${i}/${e}.md`,folder:a,skill:`${a}/SKILL.md`}}function jo(e,t,n,o){return e.subAgents.flatMap(s=>s.skills.flatMap(r=>{let i=t.skills.find(l=>l.name===r),a=rp.dirname(i.path),c=bn(s.name,rp.basename(a),o).folder;return Object.keys(n).filter(l=>l.startsWith(`${a}/`)).sort().map(l=>({name:r,owner:s.name,from:l,to:c+l.slice(a.length),fromFolder:a,toFolder:c}))}))}import{posix as Vf}from"node:path";var ur=e=>e.replace(/(?<!\.)[.!]$/,""),Jf=e=>[...e.matchAll(/\bmcp__[^\s`"'()[\]{},;:<>]+/g)].map(t=>ur(t[0])),ip=(e,t)=>ot(e,{name:t,key:t,paths:[],bytes:0});function ap(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)),r=Object.keys(o).filter(f=>s.some(m=>f.startsWith(Vf.dirname(m.path)+"/"))),i=[...t.promptSections,...t.movedKnowledge,...t.neededKnowledge],a=[...r.map(f=>o[f]),...i.map(f=>X(o[f.path]??"").slice(f.startLine-1,f.endLine).join(`
63
+ `))].join(`
64
+ `),c=new Set([...n.agent.tools,...n.tools.map(f=>f.name)].filter(f=>!/[*?]/.test(f))),l=Jf(a);if(l.some(f=>!c.has(f))||t.tools.some(f=>!c.has(f)))return null;let d=new Set(l.map(f=>f.slice(0,f.lastIndexOf("__")+2))),p=f=>{if(c.has(f))return f;let m=[...c].filter(S=>S.endsWith(`__${f}`)),w=m.filter(S=>d.has(S.slice(0,S.lastIndexOf("__")+2))),v=m.length===1?m:w;return v.length===1?v[0]:null},u=new Set(l);for(let f of c)ip(a,f)&&u.add(f);let g=new Set([...c].flatMap(f=>/^mcp__.+__(.+)$/.exec(f)?.[1]??[]));for(let f of g){if(!ip(a,f))continue;let m=p(f);if(!m)return null;u.add(m)}let h=[...[...a.matchAll(/`([^`\n]+)`/g)].flatMap(f=>{let m=f[1];return c.has(m)?[m]:/^[\w*?./-]+(?:\([^)]*\))?$/.test(m)?[m.replace(/\([^)]*\)$/,"")]:[]}),...[...a.matchAll(/(?:[*?]+[\w-]+|[\w-]+[*?])[\w*?.-]*/g)].map(f=>f[0]),...[...a.matchAll(/\b[a-z][\w*?.-]*_[\w*?.-]+/gi)].map(f=>ur(f[0])),...[...a.matchAll(/\b(?:call|invoke)\s+(?:the\s+)?(?:tool\s+)?`?([\w*?.-]+)/gi)].map(f=>ur(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 Do(e,t,n,o,s={}){let r={...o},i=Ce(e,Object.keys(o),s.root);for(let a of t.subAgents){let c=ap(e,a,n,o);r[bn(a.name,"",i).agent]=["---",`name: ${a.name}`,`description: ${ut(a.description.replace(/\s+/g," "))}`,...c===null?[]:[`tools: ${c.length?bt(e,c):"[]"}`],"---",a.job].join(`
65
+ `)}for(let a of jo(t,n,o,i))delete r[a.from],r[a.to]=o[a.from];return r}function Qf(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 cp(e,t){return e.split?{...t,files:t.files.flatMap(n=>{if(n.change!=="shrunk"&&n.change!=="grown")return[n];let o=Qf(e,n.path);return o==="grown"?[{...n,change:o}]:o==="unchanged"?[]:[n]})}:t}import{createHash as Zf}from"node:crypto";var lp=e=>e.replace(/\s+/g," ").trim().replace(/[.!?]+$/,"").replace(/^./,t=>t.toLowerCase());function pp(e,t){let n=e.frontDoor.name??t,o=e.subAgents.map(s=>lp(Yf(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: ${lp(e.frontDoor.job)}.${o.length?` Each helper gets its own skills and rules, and ${n} hands work to it.`:""}`}}function Yf(e){return(e.name.replace(/[-_]/g," ").replace(/\s+/g," ").trim()||e.job.trim()).replace(/^./,n=>n.toUpperCase())}function dp(e,t,n,o,s){if(!n.prompt)throw new Error("An original prompt is needed for each handoff.");let r=n.prompt,{files:i,root:a}=s,c=Ce(e,Object.keys(i),a),l=jo(t,n,i,c),d=y=>bn(y,"",c).agent,p=n.agent.name.replace(/^./,y=>y.toUpperCase()),u=new Map;for(let y of t.subAgents)for(let k of y.resolves){let b=u.get(k)??[];b.push(`${y.name} in ${d(y.name)}`),u.set(k,b)}let g=t.subAgents.flatMap(y=>[...y.promptSections,...y.movedKnowledge].map(k=>({...k,to:d(y.name),disposition:"move",into:null,childRef:null,heading:null,reason:y.job}))),h={...Io(t),subKind:"extract_subagent",kind:"reliability",severity:"medium",...pp({frontDoor:{...t.frontDoor,name:p},subAgents:t.subAgents},p),cause:t.reason,evidence:t.subAgents.flatMap(y=>y.evidence.map(k=>({...k}))),files:t.subAgents.map(y=>{let k=y.tools.filter(b=>!n.tools.find(O=>O.name===b).skills.some(O=>t.frontDoor.skills.includes(O)));return{path:d(y.name),action:"create",role:"system prompt",unit:`new:${y.name}`,loadMode:"always",loadVia:null,purpose:`${y.job}${k.length?` ${k.join(", ")}: only the sub-agent uses this.`:""}`,frontmatter:{name:y.name,description:y.description,tools:[...y.tools]}}}),segments:g,additions:t.subAgents.map(y=>({path:r.path,kind:"handoff",text:y.handoff,heading:null})),reorder:null,toolMoves:[],split:{...a?{root:a}:{},frontDoor:{name:p,job:t.frontDoor.job,skills:[...t.frontDoor.skills]},subAgents:t.subAgents.map(y=>({name:y.name,job:y.job,description:y.description,path:d(y.name),handoff:y.handoff,tools:[...y.tools],...y.noTools===void 0?{}:{noTools:y.noTools},resolves:[...y.resolves],skills:y.skills.map(k=>{let b=n.skills.find(_=>_.name===k),O=l.find(_=>_.from===b.path);if(!O)throw new Error(`The skill definition at ${b.path} is unavailable for its move.`);return{name:k,from:b.path,to:O.to}}),movedKnowledge:y.movedKnowledge.map(k=>({...k})),neededKnowledge:y.neededKnowledge.map(k=>({...k}))}))}},f=s.agentConfigurations?{agentConfigurations:s.agentConfigurations}:{},m=s.graphs?.before??Fe(e,dn(e,{repoKey:o,files:i,root:a,...f})).fragment,w=s.graphs?.after??Fe(e,dn(e,{repoKey:o,files:Do(e,t,n,i,{root:a}),root:a,...f})).fragment,v=cp(h,Ao(m,w,h,o));for(let y of l){let k=w.nodes.find(O=>O.files.some(_=>_.path===d(y.owner)));if(!k)throw new Error(`The sub-agent at ${d(y.owner)} is missing from the discovered graph.`);let b=m.nodes.flatMap(O=>O.files).find(O=>O.path===y.from)?.role??(Fn(y.from)?"code":"reference");v.files.push({path:y.to,fromPath:y.from,role:b,node:`${o}#${k.id}`,fromNode:`${o}#${n.agent.id}`,change:"moved",segments:0})}let S=[...new Set([...cr(h,i),...l.map(y=>y.from),...t.subAgents.flatMap(y=>y.neededKnowledge.map(k=>k.path))])].sort();return{repo:o,body:h,children:[...u].map(([y,k])=>({ref:y,how:`Isolating ${k.join(" and ")} gives each job its own rules.`})),delta:v,sourceHashes:Object.fromEntries(S.map(y=>[y,Zf("sha256").update(i[y]).digest("hex")]))}}var eu=1e3,oE=Wi+4e3;function fp(e,t,n={}){return Mo(e,t,[],{...n,scopeRuleId:"split",maxTokens:eu})}function up(e,t,n){return t>0?[q(e,"derive-shape","shape",fr,t,n)]:[]}async function mp({state:e,settings:t},n,o,s){let r=[...e.warnings??[]],i=[...e.structuresRaw??[]],a=!1,c=!1;function l(d){return F("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(ee(t,e).splitCheck&&e.splitCheckPriced){c=!0;let d=Lo(t,e).filter(({inventory:u})=>Zl(u)),p=await H(d,4,async({repo:u,graph:g,inventory:h})=>{n.progress.assertHeld(),n.progress.signal?.throwIfAborted();try{let f=u.files??{},m=await tp(o,h),w=g,v=sp(t,m,{inventory:h,files:f,afterGraph(b){return w=mn(t,{...u,files:Do(t,b,h,f,{root:u.root})},xo(t,e),e.modelReader??!1,e.projectAgents,s,{verdicts:e.newVerdicts??[],failed:[]}).fragment,Ql(w,h.agent.id)??w}});if(!v.shape)return{structures:[],warnings:v.warnings,failed:v.warnings.length>0};let S=dp(t,v.shape,h,u.key,{files:f,root:u.root,graphs:{before:g,after:w}}),y=await fp(o,[S]),k=y.ran?y.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 y.ran||n.progress.log({level:"warn",code:"analysis.shape_check_failed"}),{structures:y.kept,warnings:k,failed:!y.ran}}catch(f){return l(f)}},o);for(let u of p)i.push(...u.structures),r.push(...u.warnings),a||=u.failed}}catch(d){r.push(...l(d).warnings),a=!0}return{next:"persisting",clear:[],set:{structuresRaw:i,warnings:r,splitCheckRan:c,splitPassFailed:a}}}var mr=A.mechanical,hp=20;function tu(e,t){if(!t)return null;for(let[n,o]of Object.entries(e).sort(([s],[r])=>s.localeCompare(r))){let s=ve(o,t);if(s!=null)return{path:n,line:s}}return null}function nu(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=tu(n,t.excerpt);if(!o)return{childId:t.id,kind:"gone"};let s=e.newFindings.find(r=>r.category===t.category&&r.repo===t.repo&&r.sites.some(i=>i.path===o.path&&i.line!=null&&Math.abs(i.line-o.line)<=hp));return s?{childId:t.id,kind:"match",matchIndex:s.index,location:o}:{childId:t.id,kind:"ask",location:o}})}function ou(e,t){return e.split(`
66
+ `).map((n,o)=>({text:n,line:o+1})).filter(n=>Math.abs(n.line-t)<=hp).map(n=>`${n.line} ${n.text}`).join(`
67
+ `)}function su(e){return{template:"structure-recheck",model:mr,answerFormat:"recheck",inputs:e}}async function gp(e,t,n){let o=[],s=[],r=`C-${t.change.seq}`;for(let i of nu(t)){n?.assertHeld(),n?.signal?.throwIfAborted();let a=t.children.find(l=>l.id===i.childId),c={childId:a.id,changeId:t.change.id};if(i.kind==="match"){s.push({...c,outcome:"present",note:`Still present in ${i.location.path} after ${r}`,matchIndex:i.matchIndex,location:i.location});continue}if(i.kind==="keep"&&i.reason==="repo_not_analysed"){o.push(`F-${a.seq}'s repository was not analysed after ${r}; it stays open.`),s.push({...c,outcome:"not_checked",note:`Not re-checked after ${r} \u2014 its repository was not analysed`,matchIndex:null,location:null});continue}if(i.kind==="keep"){o.push(`F-${a.seq} has no excerpt to re-check after ${r}; it stays open.`),s.push({...c,outcome:"present",note:`Still present after ${r}`,matchIndex:null,location:null});continue}if(i.kind==="gone"){s.push({...c,outcome:"resolved",note:`Resolved by ${r}`,matchIndex:null,location:null});continue}try{let l=await M(e,su({childId:a.id,seq:a.seq,title:a.title,cause:a.cause,path:i.location.path,line:i.location.line,window:ou(t.filesByRepo[a.repo][i.location.path],i.location.line)}));l.verdict==="resolved"?s.push({...c,outcome:"resolved",note:`Resolved by ${r}: ${l.reason.slice(0,200)}`,matchIndex:null,location:null}):s.push({...c,outcome:"present",note:`Still present in ${i.location.path} after ${r}`,matchIndex:null,location:i.location})}catch(l){F("structure-recheck",l,d=>e.rethrow(d)),n?.log({level:"warn",code:"analysis.structure_recheck_failed"}),o.push(`F-${a.seq} could not be re-checked after ${r}; it stays open.`),s.push({...c,outcome:"present",note:`Still present in ${i.location.path} after ${r}`,matchIndex:null,location:i.location})}}return{outcomes:s,warnings:o}}function kp(e,t){return e>0?[q({},"structure-recheck","recheck",mr,e,t)]:[]}async function wp(e,t,n,o){let s=Object.fromEntries((e.repos??[]).map(c=>[c.key,c.files??{}])),r={outcomes:[],changeIds:[],warnings:[]},i;try{i=await t.context.loadPendingRechecks?.()??[]}catch(c){return n.rethrow(c),t.progress.log({level:"warn",code:"analysis.structure_recheck_load_failed"}),r}let a=o.map((c,l)=>({index:l,category:c.category??null,repo:c.siteRepo,sites:[c.site,...c.otherSites].filter(d=>!!d)}));for(let c of i){if(t.progress.assertHeld(),t.progress.signal?.throwIfAborted(),!s[c.repo])continue;let l=await gp(n,{change:c.change,children:c.children,filesByRepo:s,newFindings:a},t.progress);r.outcomes.push(...l.outcomes),r.warnings.push(...l.warnings),l.outcomes.some(d=>d.outcome==="not_checked")||r.changeIds.push(c.change.id)}return r}function zE(e,t,n={}){let o=8e5,s=pe(e).splitCheck?n.structureState?Lo(e,n.structureState).length:t.length:0;return[q(e,"derive-structure","structures",pr,1,o),q(e,"scope-items","structureScope",At,1+s,o),...kp(n.pendingRecheckChildren??0,o),...up(e,s,o)]}var VE=async(e,t)=>{if(t.progress.assertHeld(),t.progress.signal?.throwIfAborted(),!t.model)throw new ce("llm","llm gone mid-job");let n=await qe(t),o=Se(t.model,n,t.progress.rethrow,t.progress.signal);if(e.state.structurePhase==="shape"){let y=e.execution.forLocal?"":n.modelReaderPrompt();return mp(e,t,o,y)}let{state:s,settings:r}=e,i=s.repos??[],a=Y(s),c=Xe(a),{findings:l}=Oe(_e(s.findingsRaw??[]),Be(s),Ue(s),r),d=ai(c),p=a.map(({repoKey:y,fragment:k})=>{let b=k.nodes.filter(_=>!ze(_)),O=new Set(b.map(_=>_.id));return{repoKey:y,fragment:{...k,nodes:b,edges:k.edges.filter(_=>O.has(_.from)&&O.has(_.to))}}}),u=i.map(y=>({...y,files:Object.fromEntries(Object.entries(y.files??{}).filter(([k])=>!Ut(k,d)))})),g=Xe(p),h=lr(l,d),f=[...s.warnings??[]],m=a.flatMap(({repoKey:y,fragment:k},b)=>{let O=Ml(r,{repoKey:y,root:i[b]?.root,files:i[b]?.files??{},fragment:k});return f.push(...O.warnings),O.entries}),w;try{let k=c.nodes.some(ze)&&!g.nodes.some(x=>x.kind==="agent")?[]:await Hl(r,o,{graph:g,files:Ul(u,He(p),l,ee(r,s).multiPass,r),findings:h.items,loadModes:m.filter(x=>!Ut(x.path,d)),open:s.openStructures??[]}),b=ql(r,{raw:k,findings:h.candidates,repos:u,fragments:p,loadModes:m});f.push(...b.warnings);let O=await Mo(o,b.structures,l),_=O.dropped.length,$=O.flagged.length;_&&f.push(`${_} structural proposal${_===1?"":"s"} removed as out of scope`),$&&f.push(`${$} structural proposal${$===1?"":"s"} flagged by the scope check's model pass, but kept \u2014 that verdict is not enforced`),O.ran||f.push("the structural scope check did not run; proposals were kept unchecked"),w={structuresRaw:O.kept,structurePassFailed:!1,structureScopeCheck:{ran:O.ran},structureStats:{raw:k.length,flagged:$,droppedByValidation:b.dropped}}}catch(y){F("derive-structure",y,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."),w={structuresRaw:[],structurePassFailed:!0}}let v=await wp(s,t,o,l);f.push(...v.warnings);let S=ee(r,s).splitCheck&&s.splitCheckPriced;return{next:S?"structuring":"persisting",clear:[],set:{...w,loadModes:m,warnings:f,rechecks:v.outcomes,recheckedChangeIds:v.changeIds,...S?{structurePhase:"shape"}:{},...S&&s.splitFindingsPriced?{shapeFindings:Gl(l)}:{}}}};export{Rt as a,ao as b,_a as c,pn as d,La as e,de as f,Na as g,Ta as h,Os as i,co as j,Fe as k,pc as l,wo as m,Fd as n,un as o,fc as p,my as q,wc as r,Nd as s,bc as t,pt as u,Oc as v,Ny as w,Cc as x,_c as y,jy as z,Ec as A,jd as B,Dy as C,By as D,Dd as E,Ky as F,Rc as G,Pc as H,vp as I,ds as J,Zi as K,Y as L,Be as M,ie as N,pe as O,ee as P,So as Q,xo as R,RS as S,PS as T,AS as U,FS as V,mn as W,Wa as X,Vn as Y,B as Z,Z as _,yu as $,nt as aa,Pu as ba,Ft as ca,Mt as da,Hc as ea,Kc as fa,ox as ga,dO as ha,_C as ia,Lo as ja,Se as ka,fr as la,f_ as ma,eu as na,oE as oa,Ox as pa,Cx as qa,Sb as ra,xb as sa,ol as ta,Sl as ua,AO as va,FO as wa,zE as xa,VE as ya};