@counterfact-labs/cli 0.2.9 → 0.2.11

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 (134) hide show
  1. package/README.md +4 -5
  2. package/bundle/client-release.json +1 -1
  3. package/dist/adapters/analysis-results.js +10 -5
  4. package/dist/adapters/completion.js +75 -41
  5. package/dist/adapters/config-directory.js +5 -0
  6. package/dist/adapters/files.js +25 -10
  7. package/dist/adapters/legacy-reports.js +48 -0
  8. package/dist/adapters/output-paths.js +85 -5
  9. package/dist/adapters/relay-plan.js +7 -5
  10. package/dist/adapters/result-receipt.js +78 -0
  11. package/dist/adapters/results.js +5 -8
  12. package/dist/adapters/settings.js +10 -4
  13. package/dist/adapters/storage-identity.js +27 -0
  14. package/dist/analysis-core/analysis/code-agents/skipped-files.js +1 -1
  15. package/dist/analysis-core/analysis/file-analysis-plan.js +1 -1
  16. package/dist/analysis-core/analysis/file-dependencies.js +1 -1
  17. package/dist/analysis-core/analysis/finding-quality/policy.js +1 -1
  18. package/dist/analysis-core/analysis/folder-analysis-plan.js +1 -1
  19. package/dist/analysis-core/analysis/passes/full-file-passes.js +1 -1
  20. package/dist/analysis-core/analysis/project-architecture.js +1 -1
  21. package/dist/analysis-core/analysis/schemas.js +1 -1
  22. package/dist/analysis-core/chunks/{5B5UCWD3.js → 2IQN26TC.js} +1 -1
  23. package/dist/analysis-core/chunks/{MZOKZ3N6.js → 2J3PWUPG.js} +1 -1
  24. package/dist/analysis-core/chunks/33EUZF25.js +1 -0
  25. package/dist/analysis-core/chunks/{3GUKUEEJ.js → 5JG3ZRNJ.js} +1 -1
  26. package/dist/analysis-core/chunks/{FRXOQ2M6.js → 6E4K7JTI.js} +1 -1
  27. package/dist/analysis-core/chunks/{4RXRAB5S.js → 6JTHFDH3.js} +1 -1
  28. package/dist/analysis-core/chunks/{4UDQBDDE.js → 6W6B7VSP.js} +1 -1
  29. package/dist/analysis-core/chunks/{4PT5C4IT.js → AIS3FHQR.js} +7 -7
  30. package/dist/analysis-core/chunks/CNQZLSAP.js +1 -0
  31. package/dist/analysis-core/chunks/{YWL52FVW.js → EJ2IZUN2.js} +2 -2
  32. package/dist/analysis-core/chunks/{LOBIDUCA.js → GOBOE2SC.js} +1 -1
  33. package/dist/analysis-core/chunks/GYXDN5W4.js +1 -0
  34. package/dist/analysis-core/chunks/GZSUTDGX.js +1 -0
  35. package/dist/analysis-core/chunks/HB5BTGTI.js +6 -0
  36. package/dist/analysis-core/chunks/HH3HDT5K.js +73 -0
  37. package/dist/analysis-core/chunks/I4F56VMG.js +1 -0
  38. package/dist/analysis-core/chunks/{RQTNTIR4.js → I5F7S63K.js} +1 -1
  39. package/dist/analysis-core/chunks/ICJV6KIZ.js +11 -0
  40. package/dist/analysis-core/chunks/JAPVLU4Z.js +1 -0
  41. package/dist/analysis-core/chunks/{33IGHOYT.js → JCVB6IC4.js} +1 -1
  42. package/dist/analysis-core/chunks/{33HRXJ5Q.js → JLW44GIU.js} +1 -1
  43. package/dist/analysis-core/chunks/JS6HTVYX.js +1 -0
  44. package/dist/analysis-core/chunks/{JGK37AWN.js → JWQXG5RB.js} +1 -1
  45. package/dist/analysis-core/chunks/LOODGUMW.js +1 -0
  46. package/dist/analysis-core/chunks/{HVQJKPQ4.js → NWYNJHY4.js} +1 -1
  47. package/dist/analysis-core/chunks/{HHFDNY6V.js → OHDC3L6V.js} +1 -1
  48. package/dist/analysis-core/chunks/OXGKALKM.js +1 -0
  49. package/dist/analysis-core/chunks/{MJGB25S5.js → P5FCHJ7W.js} +1 -1
  50. package/dist/analysis-core/chunks/PISOGSJF.js +1 -0
  51. package/dist/analysis-core/chunks/{CTLHKFPH.js → QENYFKG3.js} +8 -8
  52. package/dist/analysis-core/chunks/{2YREYGOG.js → QY57UR6E.js} +1 -1
  53. package/dist/analysis-core/chunks/QYYN4YKB.js +35 -0
  54. package/dist/analysis-core/chunks/UYG422QR.js +0 -0
  55. package/dist/analysis-core/chunks/V7GZHSVR.js +1 -0
  56. package/dist/analysis-core/chunks/{JEWBPIQI.js → VBGQKYIT.js} +1 -1
  57. package/dist/analysis-core/chunks/{S27Y2TP5.js → VVSHUUWX.js} +1 -1
  58. package/dist/analysis-core/chunks/VX6LYNXV.js +1 -0
  59. package/dist/analysis-core/chunks/{JKWTHRUR.js → YDSB7UOR.js} +1 -1
  60. package/dist/analysis-core/chunks/ZLUI3EHB.js +1 -0
  61. package/dist/analysis-core/contracts/execution-request.js +1 -1
  62. package/dist/analysis-core/contracts/intake-finding.js +1 -1
  63. package/dist/analysis-core/contracts/model-errors.js +1 -0
  64. package/dist/analysis-core/contracts/relay-analysis.js +1 -1
  65. package/dist/analysis-core/contracts/requests.js +1 -1
  66. package/dist/analysis-core/conventions/analysis-fit.js +1 -1
  67. package/dist/analysis-core/conventions/file-admission.js +1 -1
  68. package/dist/analysis-core/errors.js +1 -1
  69. package/dist/analysis-core/import/calls/modules.js +1 -1
  70. package/dist/analysis-core/import/entry-selection.js +1 -1
  71. package/dist/analysis-core/import/outside-loader-sources.js +1 -1
  72. package/dist/analysis-core/index.js +1 -1
  73. package/dist/analysis-core/llm/cache-policy.js +1 -1
  74. package/dist/analysis-core/llm/cost.js +1 -1
  75. package/dist/analysis-core/llm/structured-output-error.js +1 -1
  76. package/dist/analysis-core/requests/answer-formats.js +1 -1
  77. package/dist/analysis-core/requests/frame-budget.js +1 -0
  78. package/dist/analysis-core/requests/local-plan.js +1 -1
  79. package/dist/analysis-core/requests/planned-limits.js +1 -1
  80. package/dist/analysis-core/requests/registry.js +1 -1
  81. package/dist/analysis-core/requests/template-version.js +1 -1
  82. package/dist/analysis-core/requests/tools.js +1 -1
  83. package/dist/analysis-core/settings.js +1 -1
  84. package/dist/analysis-core/stages/engine-entry.js +1 -1
  85. package/dist/analysis-core/wording.js +1 -0
  86. package/dist/cli/analysis-preview.js +22 -0
  87. package/dist/cli/analysis-selection.js +6 -8
  88. package/dist/cli/commands/analyze.js +29 -26
  89. package/dist/cli/commands/login.js +5 -0
  90. package/dist/cli/compatibility.js +39 -0
  91. package/dist/cli/completion-delivery.js +4 -3
  92. package/dist/cli/completion-recovery.js +25 -23
  93. package/dist/cli/credentials.js +3 -2
  94. package/dist/cli/finding-display.js +3 -2
  95. package/dist/cli/git.js +5 -2
  96. package/dist/cli/intake-payload.js +1 -2
  97. package/dist/cli/main.js +8 -2
  98. package/dist/cli/mcp.js +35 -10
  99. package/dist/cli/prior-completion.js +1 -1
  100. package/dist/cli/relay-check.js +88 -30
  101. package/dist/cli/relay-failure.js +19 -11
  102. package/dist/cli/relay-preparation.js +9 -6
  103. package/dist/cli/scope-choices.js +5 -4
  104. package/dist/cli/skipped-files.js +2 -1
  105. package/dist/cli/suggested-email.js +6 -1
  106. package/dist/cli/summary.js +2 -1
  107. package/dist/contract/agent-choice.js +2 -0
  108. package/dist/contract/cli-refusals.js +105 -9
  109. package/dist/contract/cli-version.js +1 -1
  110. package/dist/contract/console.js +2 -1
  111. package/dist/contract/email-sign-in-messages.js +2 -1
  112. package/dist/contract/scope-choice.js +4 -1
  113. package/dist/gatekeeper/client.js +11 -2
  114. package/dist/gatekeeper/connection-exchange.js +19 -4
  115. package/dist/gatekeeper/connection.js +15 -6
  116. package/dist/gatekeeper/console.js +10 -17
  117. package/dist/gatekeeper/model.js +13 -3
  118. package/package.json +1 -1
  119. package/dist/adapters/gitignore-output.js +0 -41
  120. package/dist/adapters/source-relay-plan.js +0 -7
  121. package/dist/analysis-core/chunks/2AASSZRO.js +0 -35
  122. package/dist/analysis-core/chunks/CQQ4TTXE.js +0 -1
  123. package/dist/analysis-core/chunks/F54DOWKN.js +0 -6
  124. package/dist/analysis-core/chunks/HCPO6QPU.js +0 -1
  125. package/dist/analysis-core/chunks/J4AXGE5W.js +0 -1
  126. package/dist/analysis-core/chunks/LFYTD7JF.js +0 -1
  127. package/dist/analysis-core/chunks/LMUXOKIM.js +0 -1
  128. package/dist/analysis-core/chunks/M5YWJY7P.js +0 -1
  129. package/dist/analysis-core/chunks/MGVIKA74.js +0 -1
  130. package/dist/analysis-core/chunks/NXHVBJL4.js +0 -1
  131. package/dist/analysis-core/chunks/OKBK3JL3.js +0 -1
  132. package/dist/analysis-core/chunks/SJESFYBA.js +0 -10
  133. package/dist/analysis-core/chunks/W24SFYZM.js +0 -67
  134. package/dist/analysis-core/chunks/YTHF2E2S.js +0 -1
@@ -0,0 +1,73 @@
1
+ import{a as pa}from"./2IQN26TC.js";import{b as B,k as la}from"./OHDC3L6V.js";import{a as ks,b as tn,c as ws,d as ys,e as Ss,f as xs,g as nn,h as no,i as ia,j as aa}from"./6JTHFDH3.js";import{c as ua,d as ma,e as ha,f as ga}from"./GYXDN5W4.js";import{a as on,b as sn,c as bs}from"./N7U5N42V.js";import{a as ca}from"./QDYMR6KS.js";import{a as Re,b as ta,c as na,d as Zt,e as Et,f as _t,g as en,h as oa,i as Ke,j as ye,k as sa,l as to,n as ra}from"./QENYFKG3.js";import{a as da}from"./4F6ZIHXU.js";import{a as fa}from"./VGYWI4X2.js";import{b as nt}from"./57M4OQJM.js";import{a as Vt}from"./IBCFGUHI.js";import{a as Xi}from"./DZZBQDGO.js";import{D as hs,E as Yt,F as gs,G as we,H as eo,I as Ot,J as tt,K as ea,a as Qt,b as zi,c as Ji,d as ke,g as Yn,h as Zn,i as Vi,l as Qi,n as ms,o as Yi,p as Zi,q as et}from"./6E4K7JTI.js";import{a as H}from"./326F4XNG.js";import{a as Ze,e as Wi}from"./KU5DINLW.js";import{a as _n,b as D,c as Cn}from"./PISOGSJF.js";import{a as qi,b as vt,c as Qn,d as Ui,e as zt,f as Ye,g as Hi}from"./HB5BTGTI.js";import{a as Jt,c as us,d as Gi}from"./JCVB6IC4.js";import{a as Ki}from"./GOBOE2SC.js";import{A as ps,B as Qe,a as Ce,c as Hn,d as Mi,f as Gn,m as Wn,n as Xn,p as Z,q as De,r as ge,s as zn,t as Be,x as Xt,y as Ti}from"./AIS3FHQR.js";import{a as U,c as Vn,d as Bi}from"./QY57UR6E.js";import{a as de,b as Di}from"./GZSUTDGX.js";import{a as F,d as ji}from"./4H23CSUM.js";import{a as Jn,c as Ni,e as M}from"./VBGQKYIT.js";import{a as fs,e as Li,f as $e}from"./VX6LYNXV.js";import{c as pe}from"./P5FCHJ7W.js";import{c as ds}from"./QVXARKP7.js";import{$ as L,$a as _i,B as rs,Ca as Dn,D as Ur,Da as mi,Ea as Le,F as Hr,Fb as Y,Ga as wi,Ha as Ee,Ia as yi,J,Ja as Si,Ka as Ne,Kb as Fi,L as Gr,La as xi,M as Wr,Ma as xt,Na as _e,P as is,Q as as,Qa as Q,Ra as je,Sa as bt,Ta as qn,U as Xr,Ua as bi,V as zr,Va as Ve,W as Jr,Wa as vi,Xa as Wt,Y as cs,Z as Vr,Za as Oi,_ as qt,_a as Ei,ab as Ci,bb as $i,ca as Zr,cb as Ri,d as yt,db as Ii,ea as ei,f as os,g as ss,h as Tr,i as $n,l as Pn,la as ti,lb as Pi,na as re,pa as ni,pb as Un,qa as oi,sa as si,t as Kt,ta as ri,ua as ii,v as Kr,va as ai,w as qr,xa as ci,ya as jn,za as St}from"./QYYN4YKB.js";import{b as Bn}from"./74FPPPIG.js";import{a as Pr,b as Ar,e as wt,f as Fr,i as Mr}from"./LOODGUMW.js";import{a as se}from"./MKYLK6DB.js";import{c as Qr,d as Yr}from"./5TATKWLG.js";import{c as Nn,f as ie}from"./YDSB7UOR.js";import{b as le,c as me}from"./5JG3ZRNJ.js";import{a as Mn,b as Tn,d as Ln}from"./ZLUI3EHB.js";import{e as Gt}from"./JAPVLU4Z.js";import{f as Ir}from"./CNQZLSAP.js";import{e as Ai}from"./YUY436SM.js";import{b as ze,c as Je,d as An,e as Br}from"./C6X5GDG4.js";import{a as A}from"./JS6HTVYX.js";import{a as Nr,b as In,l as jr,o as Dr}from"./EJ2IZUN2.js";import{b as Rn,c as Lr}from"./ICJV6KIZ.js";import{a as he,d as hi,g as Kn,h as gi,i as ki,j as ls}from"./Q5WR6B2H.js";import{b as Fn,c as li,d as pi,e as di,f as Ut,g as fi,h as Ht,i as ui}from"./VDUFPTDD.js";var qp={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},Up=Object.freeze(Object.keys(qp));function vs(e,t){return Gt.parse(e.mapped?.[t])}function ka(e,t){return Gt.safeParse(e.mapped?.[t])}function V(e){return(e.mapped??[]).map((t,n)=>({repoKey:e.repos?.[n]?.key??`repo-${n}`,fragment:vs(e,n)}))}function qe(e){return Object.fromEntries((e.repos??[]).map(t=>[t.key,new Set(Object.keys(t.files??{}))]))}function ae(e){return Object.fromEntries(Up.filter(t=>Object.hasOwn(e,t)).map(t=>[t,e[t]]))}function ce(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),i=new Set(s.map(({path:a})=>a)).size,r=i?[`${i} ${A(i,"file was","files were")} skipped, so some findings may be missing.`]:[];return{sources:n,skipped:s,warnings:r}}function rn(e,t,n,o){let s=t.filter(l=>Object.hasOwn(l.files,e.path)&&l.sources.some(d=>d.unitKey===n&&d.sourcePath===e.path)&&typeof o[e.path]=="string"&&l.files[e.path].startsWith(o[e.path]));if(!s.length)return!0;let{excerpt:i,line:r}=e,a=Object.hasOwn(o,e.path)?o[e.path]:void 0;if(!i||r===null||typeof a!="string")return!1;let c=yi(a,i,r);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(m=>m.from>=p.sourceLine&&m.to<=(p.sourceEndLine??p.sourceLine)):c.some(m=>m.from<=p.sourceLine&&m.to>=p.sourceLine))}):!1}var Hp={"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 Os(e){let t={files:{},sources:[],skipped:[]},{agent:n,files:o,allowance:s}=e;if(!e.enabled||!n.codeInputsJson)return t;let i=new Set(s.skipped.map(({path:p})=>p)),r=s.paths.filter(p=>!i.has(p)),a=new Set(r),c=(p,m)=>{t.skipped.some(g=>g.path===p&&g.reason===m)||t.skipped.push({path:p,reason:m})};s.skipped.forEach(({path:p,reason:m})=>{let g=Hp[m];g&&c(p,g)});let l=(p,m)=>{let{sourcePath:g,sourceLine:h}=p;if(i.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(u=>u.kind===m&&u.name===p.name&&u.sourcePath===g&&u.sourceLine===h)||t.sources.push({...p,unitKey:n.unitKey,kind:m}),!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 m=Ji([p.name],r,o,r);m.length||c(p.sourcePath,`Tool implementation was not admitted or found: ${p.name}.`);for(let g of m){let h=zi([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:m}=n.site,g=Object.hasOwn(o,p)?o[p]:void 0;Number.isInteger(m.to)&&m.to>=m.from&&(typeof g!="string"||m.to<=g.split(`
3
+ `).length)?l({name:n.unitKey,sourcePath:p,sourceLine:m.from,sourceEndLine:m.to},"prompt"):c(p,"Prompt source lines are missing or stale.")}return t}function oo(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=>ce(s.inputs,s.files).sources),o=[...new Map(t.flatMap(s=>s.inputs.flatMap(i=>Object.entries(i.files).flatMap(([r,a])=>{let c=Object.hasOwn(s.files,r)?s.files[r]:void 0;return c!==void 0&&a.startsWith(c)?[{repo:s.repo,path:r,text:je(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=F.chat,K=8,ee=1,so=40,Se=6e4,xe=16e3,$t=8e4,q=4e3,Gp=1536,Es=8192,_s=1024;function Ue(e){return Es+e*Gp+_s}function ot(e,t="legacy"){return t==="whole-file"?Se+$t+q*e+4e3*4:Se+(xe+q)*e+4e3*2}function Vu(e,t,n,o,s="legacy"){if(!n||t===0)return null;let i=Math.ceil(t/K),r=1+ee,a=Ue(t)+(Es+_s)*(i-1),c={template:o};if(s==="whole-file"){let d=Math.floor(t/K),p=t%K,m=ie(ot(K,s))*d+(p?ie(ot(p,s)):0);return pe(e,c,"Double-check findings",Ie,m*r,a*r)}let l=Se*i+(xe+q)*t;return pe(e,c,"Double-check findings",Ie,(ie(l)+4e3*i)*r,a*r)}function fe(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 ro(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 te(e,t){let n=t.analysisFlags;return n?{...n,findingCheck:n.findingCheck??fe(e).findingCheck,sourceNotes:n.sourceNotes??!1}:{...fe(e),sourceNotes:!1}}function io(e,t){let n=e.CF_FINDING_QUALITY==="1",o=n&&e.CF_FINDING_FULL_CONTEXT==="1",s=n&&e.CF_FINDING_PRECISION_RULES==="1",i=t?.check.name??(s?"check-findings-precision-v1":"check-findings");return{enabled:n,fullContext:o,precisionRules:s,prompts:{derive:t?.derive.name??"derive-findings-legacy",check:i==="check-findings-legacy"?"check-findings":i}}}function $s(e){return io({},e.prompts).prompts}function Cs(e,t,{enabled:n,prompts:o}){return Ni(e,t,n?o[e]:void 0)}function st(e,t,n){return Cs(e,t,{enabled:n?.switches.enabled??!1,prompts:io({},n?.prompts).prompts})}function wa(e,t,n,o){let s=fe(e),i=io(e),{fullContext:r}=i,a=Cs("derive",e,i),c=Cs("check",e,i),l=r?"whole-file":"legacy";return{findings:n,derive:U(e,a,"findings",F.generate,t,o),check:s.findingCheck?U(e,c,"check",Ie,Math.ceil(n/K)*(ee+1),Math.max(o,ot(K,l)),Ue(K)):null}}function ya(e){if(e&&typeof e=="object"){for(let t of Object.values(e))ya(t);Object.freeze(e)}return e}function cm(e,t,n={}){let{enabled:o,fullContext:s,precisionRules:i,prompts:r}=io(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",m=[],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"&&m.push("Recall was skipped: no supported variant was selected.");let f=null,u=null;if(n.recall===!1&&e.CF_FINDING_RECALL==="1"&&m.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"&&m.push("Code evidence isn't available in local checks yet, so CF_FINDING_CODE_INPUTS has no effect."),c&&n.secondOpinion===!1&&m.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(Nn,w)?Nn[w]:void 0,y=Nn[Ie];v&&v.provider===e.CF_FINDING_SECOND_OPINION_PROVIDER&&v.provider!==y.provider&&v.input<=y.input&&v.output<=y.output&&(v.input<y.input||v.output<y.output)?(f=w,u=v.provider):m.push("Second opinion was skipped: configure a priced, cheaper model from a different provider.")}return ya({ruleVersion:o?"precision-v1":"legacy",switches:{enabled:o,fullContext:s,precisionRules:i,secondOpinion:c,ranking:l,semanticMatching:d,codeInputs:p,recall:h!=="off"},prompts:{derive:t.promptVersion(r.derive,e),check:t.promptVersion(r.check,e)},models:{derive:F.generate,check:Ie,scope:F.mechanical,secondOpinion:f},caps:{coreBytes:Se,siteBytes:xe,findingTextBytes:q,siteWindowLines:so,citedBatchBytes:s?8e4:0,passBytes:15e4,passContextBytes:6e4,maxPasses:4,passFindings:h==="request-18"?18:xt,totalFindings:24,deriveOutputTokens:ji,checkBatchSize:K,checkOutputTokens:Ue(K),checkMaxRetries:ee,checkOverheadTokens:4e3,secondOpinionBatchSize:4,secondOpinionInputBytes:ot(4)+(s?8e4:0),secondOpinionOutputTokens:2048,secondOpinionMaxRetries:ee},recallVariant:h,displayPolicyVersion:l?"support-v1":"legacy",meaningMatchingVersion:d?"meaning-v1":"legacy",codeInputScopeVersion:p?"owned-code-v1":"legacy",secondOpinionProvider:u,diagnostics:m})}function Rt(e,t,n={}){let o=$s(e);e.switches.enabled&&t.assertPromptVersions([{...e.prompts.derive,name:o.derive},{...e.prompts.check,name:o.check}],n)}function be(e,t,n,o,s={}){let i=s.CF_REQUEST_FRAME_BUDGET!=="0";return{tools:t,frameBudgetEnabled:i,rethrow(r){n?.(r),me(r)},available:e!==null,settleStartedOnError:e?.settleStartedOnError,withRetry:r=>be(e?fa(e,r):null,t,n,o,s),async execute(r,a={}){if(o&&(a={...a,signal:a.signal?AbortSignal.any([o,a.signal]):o}),a.signal?.throwIfAborted(),!e)throw new Error("model unavailable");let c=Buffer.byteLength(JSON.stringify(r)),{frameBudget:l,...d}=a;return l??i?ha(c):ma(c),a.signal?.throwIfAborted(),"execute"in e?e.execute(r,d):da(e,t,r,d)}}}var Wp=aa();async function T(e,t,n={},o={}){let s=Jn(t,n,o.maxInputBytes),i=n.CF_REQUEST_FRAME_BUDGET===void 0?e.frameBudgetEnabled:n.CF_REQUEST_FRAME_BUDGET!=="0",r=await e.execute(s,{...o,frameBudget:i}),a=Wp[s.answerFormat];if(i&&s.answerFormat!=="findingHeadlines"&&!a.safeParse(r).success)throw new Tn;return r}async function He(e){return e.requestTools?e.requestTools():pa(ca(await e.instructions()))}var rt=2,Xp=10*6e4;function ao(e,t,n){return new le("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 Sa(e){let{data:t,plan:n,progress:o}=e,s=n.passes.length,i={...t.passResults};if(!t.passResults){for(let d=0;d<(t.passCursor??0);d++)i[d]={findings:t.passFindings?.[d],retries:0};t.passRetries&&(i[t.passCursor??0]={retries:t.passRetries})}await o.checkpoint({inspectPlan:n,passResults:i});let r={...t,inspectPlan:n,passResults:i},a=n.passes.map((d,p)=>p).filter(d=>i[d]?.findings===void 0);for(let d of a)if((i[d]?.retries??0)>rt)throw ao(d,s,i[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)>=Xp||c)return;let m=i[d]?.retries??0;for(;!c;){o.assertHeld(),o.signal?.throwIfAborted();let g;try{g=await e.run(d,m)}catch(f){if(o.rethrow?.(f),me(f),e.forLocal)throw f instanceof le||Ln(f)?f:new Error("A findings reading pass failed; no completed report was written.");m++,o.log({level:"warn",code:"analysis.pass_failed",counts:{part:d+1,parts:s,retries:m}});let u={retries:m};if(await o.checkpoint({},{index:d,result:u}),i[d]=u,m>rt)throw ao(d,s,m);if(e.onePartPerStep)break;await new Promise(w=>setTimeout(w,1e3));continue}let h={findings:g,retries:m};await o.checkpoint({},{index:d,result:h}),i[d]=h;break}}catch(m){c??=m}}),c)throw c;let l=n.passes.every((d,p)=>i[p]?.findings!==void 0);return{...r,...l?{passCursor:s,passRetries:0,passFindings:n.passes.map((d,p)=>i[p].findings)}:{}}}var co={critical:0,high:1,medium:2,low:3},ba=e=>(e.line??0)>0,lo=e=>ba(e)&&!!e.excerpt?.trim();function Rs(e,t){let n=r=>{let a=Kn(r);return[a.filter(lo).length,a.filter(ba).length,Number(!!r.site&&lo({...r.site,excerpt:r.excerpt}))]},[o,s]=[n(e),n(t)],i=o.findIndex((r,a)=>r!==s[a]);return i>=0&&o[i]>s[i]}function Is(e,t){let n=wi(t.map(i=>i.audience)),o=xi(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 xa(e,t,n={}){let o=[];if(n.semanticMatching)for(let s of e){let i=hi({previous:o.map((r,a)=>ls(r,String(a))),current:s.map((r,a)=>ls(r,String(a))),enabled:!0});for(let r of i.matches){let a=Number(r.previousId),c=s[Number(r.currentId)];o[a]=Is(Rs(c,o[a])?c:o[a],[o[a],c])}for(let r of i.unmatchedCurrent)o.push(s[Number(r.id)])}else for(let s of e.flat()){let i=o.findIndex(r=>gi(r,s));i<0?o.push(s):o[i]=Is(Rs(s,o[i])?s:o[i],[o[i],s])}return o.sort((s,i)=>co[s.severity]-co[i.severity]).slice(0,t)}function zp(e,t){let n=co[e.severity]-co[t.severity];if(n)return n<0;let o=Kn(e).filter(lo).length-Kn(t).filter(lo).length;return o?o>0:Rs(e,t)}function va(e,t={}){let n=t.deferCap?1/0:24;if(t.dedupe===!1)return e.length<2?e[0]??[]:xa(e,n,t);let o=e.length<2?e[0]??[]:xa(e,1/0,t),s=o.map((c,l)=>o.map((d,p)=>l===p||ki(c,d))),i=new Set,r=new Map;for(let c=0;c<o.length;c++){if(i.has(c))continue;let l=[c];i.add(c);for(let p=0;p<l.length;p++)for(let m=0;m<o.length;m++)i.has(m)||!s[l[p]][m]||(i.add(m),l.push(m));if(!l.every(p=>l.every(m=>s[p][m]))){for(let p of l)r.set(p,o[p]);continue}let d=l.reduce((p,m)=>zp(o[m],o[p])?m:p,c);r.set(c,Is(o[d],l.map(p=>o[p])))}let a=r.size===o.length?o:o.flatMap((c,l)=>r.has(l)?[r.get(l)]:[]);return e.length<2?a:a.slice(0,n)}var Oa=e=>e.CF_FINDING_DEDUPE!=="0";var Jp=15*6e4;async function Ea(e,t){let n=new AbortController,o={...e,execute:(r,a={})=>e.execute(r,{...a,signal:a.signal?AbortSignal.any([a.signal,n.signal]):n.signal})},s,i=new Promise((r,a)=>{s=setTimeout(()=>{let c=new le("llm","The reading part's model call timed out.");a(c),n.abort(c)},Jp)});try{return await Promise.race([Promise.resolve().then(()=>t(o)),i])}finally{clearTimeout(s)}}var Vp=F.generate;function Qp(e,t){let n=new Set(t);return{...e,nodes:e.nodes.map(o=>{let s=[...o.sourceRef?[o.sourceRef.path]:[],...(o.files??[]).map(r=>r.path)];if(!s.length||s.some(r=>n.has(r)))return o;let i={...o,desc:""};return delete i.files,i})}}function po(e,t){let n=t.qualityConfig;return{template:st("derive",e,n),inputs:{maxFindings:String(xt),graph:JSON.stringify(t.trimGraph&&e.CF_REQUEST_FRAME_BUDGET!=="0"?Qp(t.graph,Object.keys(t.files)):t.graph,null,2),pass:t.pass??null,codeSources:t.codeSources??[],files:Object.entries(t.files).map(([s,i])=>({path:s,text:je(i)}))},answerFormat:"findings",model:n?.switches.enabled?n.models.derive:Vp,limits:{effort:"high"}}}async function _a(e,t,n){n.qualityConfig&&Rt(n.qualityConfig,t.tools,e);let o=await T(t,po(e,n),e);return Li({...o,findings:Si(o.findings,n.files,e,n.activitySnapshot,n.activitySnapshotComplete)})}function Ca(e,t,n){return e.flatMap(o=>{let s=o.site?{path:o.site.path,line:o.site.line,excerpt:o.excerpt}:null,i=[...s?[s]:[],...o.otherSites??[]].filter(l=>t.has(l.path));if(!i.some(l=>n.has(l.path)))return[];let r=o.site&&i[0]===s?0:Math.max(0,i.findIndex(l=>(l.line??0)>0)),a=i[r],c=i.filter((l,d)=>d!==r);return[{...o,site:{path:a.path,line:a.line},excerpt:a.excerpt,otherSites:c}]})}function Ae(e){let t=[],n=[],o=new Set;for(let s of e)for(let[i,r]of Object.entries(s.files??{})){if(o.has(i)){n.push({repo:s.key,path:i});continue}o.add(i),t.push({repo:s.key,path:i,text:r})}return{all:t,shadowed:n}}function it(e){return Object.fromEntries(Ae(e).all.map(t=>[t.path,t.text]))}function It(e,t){return Ki(e)===void 0?void 0:t}function Yp(e,t){return Object.keys(t).filter(n=>J(n,{nested:!0})).sort().map(n=>{let o=n.split("/").slice(-2,-1)[0]??"skill",{name:s,description:i}=_t(e,`${o}.md`,t[n]);return{name:s,description:i??""}})}function fo(e,t,n,o,s,i,r){let a=It(e,o);if(a){let f=t.passes[n].own;return{trimGraph:t.passes[n].trimGraph,files:Object.fromEntries(f.map(u=>[u,a[u]])),read:f,own:f,...t.passes.length>1?{pass:{part:n+1,count:t.passes.length,own:f,context:[],skills:[]}}:{}}}o=re(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=Be(e,{paths:Object.keys(o),files:o,graph:s,repos:r}),m=Qe(d.map(f=>({repo:"",path:f,text:c.has(f)?ge(o[f]):o[f]})),c,De(s),p),g=Object.fromEntries(m.map(f=>[f.path,f.text])),h=i?.enabled?ce(i.inputs.map(f=>({...f,files:re(e,f.files,s)})),g):void 0;return{trimGraph:t.passes[n].trimGraph,files:g,...t.passes.length>1?{pass:{part:n+1,count:t.passes.length,own:l,context:t.passes[n].context??[],skills:Yp(e,o)}}:{},read:m.map(f=>f.path),own:l,...h?{codeSources:h.sources,codeSkipped:h.skipped}:{}}}function $a(e){return e.find(t=>!t.notFoundAt)??e[0]??null}function Zp(e,t={}){return{savedRepoPaths:!0,...t,repositoryProjects:Ar(e)}}function ed(e,t){return t.startsWith(`${e}#`)?t.slice(e.length+1):null}function td(e,t){let n=[];for(let o of e?.nodes??[]){let s=o.kind==="agent"?t?ed(t,o.id):o.id.slice(o.id.indexOf("#")+1):null;s!==null&&n.push({node:o,unitId:s})}return n}function nd(e,t,n){if(n==null)return e[0];let o=e.flatMap(r=>(r.node.files??[]).flatMap(a=>(a.role==="system prompt"||a.role==="knowledge")&&a.path===t&&a.span?[{c:r,span:a.span}]:[])),s=o.find(r=>r.span&&r.span.from<=n&&n<=r.span.to);if(s)return s.c;let i=null;for(let r of o)r.span&&r.span.to<n&&(!i||r.span.to>i.to)&&(i={c:r.c,to:r.span.to});return i?.c??e[0]}function Ra(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)&&rn({path:e.file,line:e.line??null,excerpt:e.excerpt},[{...n,sources:[o]}],o.unitKey,n.files)).map(o=>o.unitKey)))]}function od(e,t,n,o){let s=Ra(e,n);if(s.length)return{unitKey:s.length===1?s[0]:null,anchors:s,code:!0};let i=e.file?td(t,e.repo??"").filter(r=>r.node.files?.some(a=>a.path===e.file)):[];return{unitKey:i.length?nd(i,e.file,e.line).unitId:o,anchors:s,code:!1}}function uo(e,t,n,o,s={}){let i=e[0];if(!i)return!0;let r=n.map(p=>({...p,input:{...p.input,files:Object.fromEntries(Object.entries(p.input.files).filter(([m,g])=>typeof p.files[m]=="string"&&g.startsWith(p.files[m])))}})),a=p=>r.filter(m=>!p.repo||!m.repo||m.repo===p.repo),c=a(i),l=rd(i,t,c.map(p=>p.input),o,Zp(s));if(!l.unitKey&&!l.code)return!0;let d=l.unitKey?[l.unitKey]:l.anchors;return e.every(p=>{let m=a(p).filter(h=>!i.repo||!h.repo||h.repo===i.repo),g=l.unitKey?[]:Ra(p,m.map(h=>h.input));return d.every(h=>(!g.length||g.includes(h))&&m.filter(f=>f.unitKey===h).every(f=>rn({path:p.file??"",line:p.line??null,excerpt:p.excerpt??null},[f.input],h,f.files)))})}function Ia(e,t,n=!1){let o=n?Yr:Qr,s=t?e.filter(i=>i.repoPath&&o(i.repoPath)===t):[];return{rows:s,unitRows:s.filter(i=>i.unitKey)}}function sd(e,t,n={}){let{rows:o}=Ia(e,t,n.savedRepoPaths),s=n.repositoryProjects?o.filter(r=>r.githubFetched!==!1):[],i=s.length?s:o;return $a(i.filter(r=>r.unitKey))?.id??i[0]?.id??(e.length===1?e[0].id:null)}function rd(e,t,n,o,s){let i=o?sd(o,e.repo,s):null,r=o?.find(d=>d.id===i)?.unitKey??null,{unitRows:a}=Ia(o??[],e.repo,s.savedRepoPaths);if(o&&(!e.repo||!a.length))return{unitKey:r,anchors:[],code:!1,agentId:i};let c=od(e,t,n,r);if(!o)return{...c,agentId:null};let l=a.find(d=>d.unitKey===c.unitKey);return{...c,unitKey:c.code?c.unitKey:l?.unitKey??r,agentId:l?.id??(c.code?null:i)}}async function Ps(e,t){let n=fo(e,t.plan,t.index,t.files,t.reading,t.codeEvidence,t.repos),o=await Ea(t.llm,r=>_a(e,r,{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=Ca(o,new Set(n.read),new Set(n.own));if(!t.codeEvidence?.enabled)return s;let i=t.codeEvidence.inputs.flatMap(r=>r.unitKey?[{repo:r.repo,unitKey:r.unitKey,input:r,files:n.files}]:[...new Set(r.sources.map(a=>a.unitKey))].map(a=>({repo:r.repo,unitKey:a,input:r,files:n.files})));return s.filter(r=>uo([...r.site?[{...r.site,excerpt:r.excerpt}]:[],...r.otherSites??[]].map(a=>({repo:t.codeEvidence?.repoByPath?.[a.path]??null,file:a.path,line:a.line,excerpt:a.excerpt})),t.graph,i,t.codeEvidence?.agentRows,e))}function mo(e,t,n=15e4,o,s,i){let{all:r,shadowed:a}=Ae(e),c=It(i,Object.fromEntries(r.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=re(i,Object.fromEntries(r.map(k=>[k.path,k.text])),t),d=r.map(k=>({...k,text:l[k.path]})),p=o??Z(t),m={},g=[],h={},f=0,u=Be(i,{paths:d.map(k=>k.path),files:l,graph:t,repos:e});for(let k of Qe(d,p,De(t),u)){if(!p.has(k.path)&&f+k.text.length>n){g.push(k.path);continue}let b=p.has(k.path)?ge(k.text):k.text;m[k.path]=b,(h[k.repo]??=[]).push(k.path),f+=b.length}let w=id(m,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`]:[],...[zn(p,l)].filter(k=>!!k)],y=Xt(u,g.map(k=>({path:k,reason:"total"})));y&&v.push(y);let S=s?.enabled?ce(s.inputs.map(k=>({...k,files:re(i,k.files,t)})),m):void 0;return{files:m,skipped:g,readByRepo:h,shadowed:a,warnings:[...v,...S?.warnings??[]],...S?{codeSources:S.sources,codeSkipped:S.skipped}:{}}}var id=(e,t)=>Object.entries(e).reduce((n,[o,s])=>n+(t.has(o)?s.length:0),0);import{posix as Fa}from"node:path";var ad=e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),cd=(e,t)=>new RegExp(`(?<![\\w-])${ad(t)}(?![\\w-])`).test(e);function at(e,t){return t.name!==null&&cd(e,t.name)||Re(t.paths,[e],n=>n).length>0}function Pa(e,t){let n=e.map(a=>a.paths.map(c=>t[c]).join(`
4
+ `)),o=(a,c)=>at(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 i=new Set,r=[];for(let a=0;a<e.length;a++){if(i.has(a))continue;let c=[],l=[a];i.add(a);for(let d=l.shift();d!==void 0;d=l.shift()){c.push(d);for(let p of s[d])i.has(p)||(i.add(p),l.push(p))}c.sort((d,p)=>d-p),r.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 r.sort((a,c)=>c.bytes-a.bytes||(a.bundles[0].key<c.bundles[0].key?-1:1))}function Aa(e){let t=new Map(e.bundles.map(i=>[i.key,i])),n=new Set,o=i=>e.adjacent[i.key].filter(r=>n.has(r)).length,s=[];for(;t.size>0;){let i=[...t.values()].sort((r,a)=>o(a)-o(r)||e.adjacent[a.key].length-e.adjacent[r.key].length||a.bytes-r.bytes||(r.key<a.key?-1:1))[0];t.delete(i.key),n.add(i.key),s.push(i)}return s}function Ma(e,t,n,o,s){if(e.length<2)return{passes:e};let i=new Set(e.flatMap(l=>l.own)),r=[...i].filter(l=>/\.md$/i.test(l)).sort(),a=l=>[...new Set([...Re(r,[n[l]],d=>d),...Re(r,[n[l]],d=>Fa.relative(Fa.dirname(l),d))])];return{passes:e.map(l=>{let d=new Set([...t,...l.own]),p=new Map,m=new Set;for(let u of l.own){let w=new Set;for(let y of o)if(at(n[u],y))for(let S of y.paths.filter(k=>J(k,{nested:!0})))w.add(S);for(let y of a(u))w.add(y);for(let y of[...w].filter(S=>J(S,{nested:!0})))for(let S of a(y))w.add(S);for(let y of w)m.add(y);let v=[...w];for(let y=0;y<v.length;y++){let S=v[y];for(let k of a(S))w.has(k)||(w.add(k),v.push(k))}for(let y of w)i.has(y)&&!d.has(y)&&p.set(y,(p.get(y)??0)+1)}let g=[...p.keys()].sort((u,w)=>Number(m.has(w))-Number(m.has(u))||p.get(w)-p.get(u)||(u<w?-1:1)),h=[],f=0;for(let u of g){let w=n[u].length;f+w<=s&&(h.push(u),f+=w)}return{own:l.own,context:h.sort()}})}}import{basename as Ta}from"node:path";function As(e,t,n,o){let s=[...n].sort();return{key:e,name:t,paths:s,bytes:s.reduce((i,r)=>i+o[r].length,0)}}function La(e,t){let n=Z(t),o=new Set(Object.keys(e).filter(c=>!n.has(c))),s=[],i=c=>c.filter(l=>o.delete(l)),r=new Set(t.edges.filter(c=>c.kind==="delegates").map(c=>c.to));for(let c of t.nodes){if(!r.has(c.id)||!c.sourceRef)continue;let l=c.sourceRef.path.replace(/\.md$/i,"")+"/",d=(c.files??[]).filter(h=>h.role==="skill").map(h=>Kt(h.path,{nested:!0})?.folder).filter(h=>!!h),p=[...o].filter(h=>h.startsWith(l)||d.some(f=>h.startsWith(f+"/"))),m=(c.files??[]).filter(h=>h.role==="reference"||h.role==="skill").map(h=>h.path),g=i([...p,...m]);g.length&&s.push(As(l,Ta(l),g,e))}let a=new Map;for(let c of o){let l=Kt(c,{nested:!0})?.folder;l&&a.set(l,[...a.get(l)??[],c])}for(let[c,l]of a)s.push(As(c,Ta(c),i(l),e));for(let c of o)s.push(As(c,null,[c],e));return s.sort((c,l)=>c.key<l.key?-1:c.key>l.key?1:0)}var ld=(e,t)=>e.reduce((n,o)=>n+t[o].length,0);function Na(e,t,n,o){let s=n-t;return e<=n||s<=0?1:Math.min(o,Math.ceil((e-t)/s))}function pd(e,t,n){return e.bytes<=t?[e.bundles]:Aa(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 dd(e,t){let n=e.split("/").slice(0,-1);for(let o=n.length;o>0;o--){let s=n.slice(0,o).join("/"),i=t.find(r=>r.own.some(a=>a.startsWith(`${s}/`)));if(i)return i}}function ja(e){e={...e,files:re(e.settings,e.files,e.graph)};let{passMaxBytes:t,maxPasses:n,graph:o}=e,s=Z(o),i=Object.keys(e.files).filter(x=>s.has(x)).sort(),r=Object.fromEntries(Object.entries(e.files).map(([x,E])=>[x,s.has(x)?ge(E):E])),a=t-ld(i,r),c=Object.keys(r).filter(x=>!s.has(x)),l=Be(e.settings,{paths:Object.keys(r),graph:o,files:r,repos:e.repos}),d=De(o),p=ps(c.filter(x=>Ti(l,x)),r,d,l),m=new Set(p),g=new Set(o.nodes.flatMap(x=>(x.files??[]).map(E=>E.path))),h=Object.fromEntries(c.filter(x=>!m.has(x)).map(x=>[x,r[x]])),f=La(h,o),u=x=>x.name!==null||St(x.paths[0])&&g.has(x.paths[0]),w=f.filter(x=>!u(x)).flatMap(x=>x.paths),v=[zn(i,e.files)].filter(x=>!!x),y=[],S=[];if(a<=0){v.push("The agent's core files fill a whole reading pass, so nothing else was read");let x=Xt(l,c.map(E=>({path:E,reason:"total"})));return x&&v.push(x),{core:i,passes:[{own:[]}],skipped:[...c].sort(),warnings:v}}for(let x of p){let E=r[x].length,C=S.find(R=>R.bytes+E<=a);!C&&E<=a&&S.length<n&&(C={own:[],bytes:0},S.push(C)),C?(C.own.push(x),C.bytes+=E):y.push(x)}let k=new Set(S);for(let x of Pa(f.filter(u),h)){let E=x.bytes>a,C;for(let R of pd(x,a,r)){let I=R.reduce((G,Yo)=>G+Yo.bytes,0),P=R.flatMap(G=>G.paths),j=(E&&C&&C.bytes+I<=a?C:void 0)??S.find(G=>(!E||k.has(G))&&G.bytes+I<=a);j?(E&&(C=j),j.own.push(...P),j.bytes+=I):I>a||S.length>=n?y.push(...P):(C={own:[...P],bytes:I},S.push(C))}}S.length===0&&S.push({own:[],bytes:0});let b=ps(w,r,d,l);for(let x of b){let E=I=>I.bytes+r[x].length<=a,C=dd(x,S),R=C&&E(C)?C:S.find(E);if(!R){y.push(x);continue}R.own.push(x),R.bytes+=r[x].length}let O=S.map(x=>({own:x.own.sort()})),_=Xt(l,y.map(x=>({path:x,reason:"total"})));_&&v.push(_);let $=Ma(O,i,e.files,f,e.contextMaxBytes??6e4);return{core:i,passes:$.passes,skipped:y.sort(),warnings:v}}function Ge(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 lc}from"node:crypto";import{basename as _d}from"node:path";function Pt(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 fd}from"node:crypto";function Da(e,t,n){let o=[e,t.prompt.path,t.prompt.symbol??"",n,t.link?.callExcerpt??""];return fd("sha256").update(o.join("\0")).digest("hex")}var ud=200,md=6e3,Fs=1200,hd=[3,4,5],ho=e=>hd.includes(e.score)&&e.prompt.chars>=ud,gd=5,Ba=6;function kd(e,t){let n=e.link,o=n?t[n.callPath]:void 0;if(!n||o===void 0)return null;if(n.trace?.length)return wd(e,t);let s=Math.max(0,n.callLine-1-gd);return o.split(`
5
+ `).slice(s).join(`
6
+ `).slice(0,Fs)}function wd(e,t){let o=e.link.trace.filter((a,c)=>c===0||!(a.path===e.prompt.path&&a.from<=e.prompt.span.from&&e.prompt.span.to<=a.to)),i=(o.length<=Ba?o:[...o.slice(0,Ba-1),o.at(-1)]).flatMap(a=>{let c=t[a.path];if(c===void 0)return[];let l=c.split(`
7
+ `).slice(a.from-1,a.to).filter(d=>d.trim()&&!d.trimStart().startsWith("#")).join(`
8
+ `);return l?[`${a.path}:${a.from}
9
+ ${l}`]:[]}),r=Math.floor((Fs-Math.max(0,i.length-1))/Math.max(1,i.length));return i.map(a=>a.length>r?a.slice(0,Math.ceil((r-5)/2))+`
10
+ ...
11
+ `+a.slice(-Math.floor((r-5)/2)):a).join(`
12
+ `).slice(0,Fs)}function yd(e){let{path:t,line:n,symbol:o}=e.prompt;return o?`${t}:${n} (${o})`:`${t}:${n}`}function pn(e,t,n){let o=Ot(n,t.manifest),s=eo(t,o);return{candidate:t,fingerprint:Da(e,t,s),text:s.slice(0,md),usage:kd(t,o),location:yd(t)}}function Ka(e,t){let{candidates:n,files:o,repoKey:s,stored:i,flags:r}=t,a=r.scan&&r.model&&t.hasClient,c=[],l=[],d=[],p=Math.max(0,6-(t.alreadyDue??0)),m=Math.min(p,Math.max(0,Ke()-t.agentCountSoFar)),g=en(e)&&t.page?new Set(t.page.selected):null;for(let h of n){if(g&&!g.has(L(h.prompt))){d.push(h);continue}let f=a&&ho(h)?pn(s,h,o):null;!f||!f.text||h.link?.trace?.length&&!f.usage||i.has(f.fingerprint)?d.push(h):c.length<m?c.push(f):c.length>=p?l.push({candidate:h,fingerprint:f.fingerprint}):d.push(h)}return{due:c,overCap:l,ineligible:d}}function qa(e,t,n){let o=new Map(t.map(r=>[r.fingerprint,r])),s=new Map(n.failed.map(r=>[r.fingerprint,r.why])),i={...Pt(e,n.scanInfo),possible:[]};for(let r of e.possible){let{fingerprint:a}=pn(n.repoKey,r,n.files),c=o.get(a),l=s.get(a);c?.isPrompt?i.agents.push({candidate:r,confirmedBy:{model:c.model,name:c.name}}):c?i.rejected.push({candidate:r,reason:c.reason,model:c.model}):l?i.unchecked.push({candidate:r,why:l}):i.possible.push(r)}return i}var go=e=>`${e.prompt.path}:${e.prompt.line}`;function ko(e,t,n,o){let s=Ke(),i=`${n.repoKey}: `,r=[],{kept:a}=ye(e,t.agents),c=t.agents.length+t.omitted.strong;c>s&&r.push(sa({kind:"scan",found:c})),a.forEach(({candidate:m,confirmedBy:g},h)=>{g&&r.push(`${i}${o[h]}: included on ${g.model}'s reading of ${go(m)} \u2014 the code alone was not conclusive`)}),n.reportSkippedFiles!==!1&&r.push(...Cn(_n(t),t.skippedFiles?0:t.notReadMore));let l=t.agents.length===0?t.callsWithoutPrompt[0]:void 0;l&&r.push(`${i}found model calls (${l.path}:${l.line}) but no system prompt they send \u2014 point counterfact.json "prompt" at it`);let d=[...t.rejected.map(m=>`${i}not an agent prompt, per ${m.model}: ${go(m.candidate)} \u2014 ${m.reason}`),...t.unchecked.map(m=>{let g=m.why==="limit"?`the per-analysis limit of ${6} checks was reached`:"the model check was unavailable; the code alone was not conclusive";return`${i}possible agent prompt not checked: ${go(m.candidate)} \u2014 ${g}`}),...t.possible.map(m=>`${i}possible agent prompt not included: ${go(m)}${m.prompt.symbol?` (${m.prompt.symbol})`:""} \u2014 ${m.link?.trace?.length?"the scan found code that appears to send it, but no model analysis confirmed it":"nothing in the scanned code sends it to a model"}`)];r.push(...d.slice(0,10));let p=Math.max(0,d.length-10)+t.omitted.possible;return p>0&&r.push(`${i}${p} ${A(p,"more possible agent prompt is","more possible agent prompts are")} not listed here`),t.truncated&&!t.skippedFiles?.some(({reason:m})=>m==="scan-limit")&&r.push(`${i}scanned ${t.scanned} of ${t.total} ${A(t.total,"code file")} (the ${se.codeScan.files}-file / ${se.codeScan.bytes/1e6} MB budget); agents defined in the rest were not looked for`),r}function Ts(e,t,n,o){if(!ke(e))return null;let s=Wn(e,[...o.sizes.keys()],o.root,{},o.agentConfigurations??{});return ea(e,t.map(i=>{let r=L(i.prompt),a=o.modelOverrides?.includes(r);return{id:r,scope:s.ownerOf(i.prompt.path)??s.scopes[0],ownFiles:a?we({...i,modelId:null},[],e):we(i,n,e),toolCall:Qt(i)}}),{...o,scopes:s})}function lt(e){return e.refused.filter(t=>t.reason!=="other-agent"&&t.reason!=="provider-transport")}var Sd=24;function At(e,t,n,o=new Map,s={files:{}}){let i=t.agentInventory??t,r=s.page??t.agentPage?.context??{commit:"",scope:s.root??""},a=oa(e,[...i.strong,...i.possible].map(h=>({id:L(h.prompt),path:h.prompt.path,bytes:n.get(h.prompt.path)??0,pool:h.tier,..."groupKey"in h&&typeof h.groupKey=="string"?{groupKey:h.groupKey}:{}})),{commit:r.commit,scope:r.scope},s.page?s.page.continuation:t.agentPage?.current,s.page?.pageSize,{strong:se.codeAgent.importBytes,possible:se.candidateFetch.check});if(a){let h=new Set(a.selected);t={...t,strong:i.strong.filter(f=>h.has(L(f.prompt))),possible:i.possible.filter(f=>h.has(L(f.prompt)))}}let c=xd(e,t,n,o);if(a){let h=new Set([...c.strong,...c.window].map(f=>L(f.prompt)));for(let f of[...t.strong,...t.possible]){let u=L(f.prompt);if(h.has(u))continue;let w=f.prompt.path,v=n.has(w)?c.refused.find(y=>y.path===w)?.reason??c.notRead.find(y=>y.candidate===f)?.kind??(c.skipped.includes(f)?"prompt-over-limit":"confirmation-window"):"missing";a.refusals.push({id:u,reason:v})}a.partial||=a.refusals.length>0,c.page=a}if(!ke(e))return a&&(a.estimatedInputBytes=c.paths.reduce((h,f)=>h+(n.get(f)??0),0)),c;let l=Yt(o,s.replacementBytes),d=a?[...i.strong,...i.possible]:[...t.strong,...t.possible],p=Ts(e,d,t.repoModelIds,{...s,sizes:n,total:l,selectedIds:[...c.strong,...c.window].map(h=>L(h.prompt)),confirmationIds:c.window.map(h=>L(h.prompt))}),m=D(c.refused,...p.map(lt)),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:m,skippedFiles:D(c.skippedFiles,...p.map(lt))}}var Ua=(e,t,n,o=new Map)=>At(e,t,n,o).paths;function xd(e,t,n,o){let s=Yt(o);if(en(e))for(let u of t.strong)tt(e,{ownPaths:[u.prompt.path]},{files:{},sizes:n,total:s});let i=[],r=[],a=[],c=[],l=[],d=[],p=0,m=u=>{d.length<10?d.push(u):p++},g=u=>{for(let w of u)i.includes(w)||i.push(w)};for(let u of t.strong){if(!en(e)&&r.length>=Ke())break;let w=n.get(u.prompt.path),v=Y(e,{path:u.prompt.path,size:w},{purpose:"pointer",route:"github"});if(v.admitted||l.push({path:u.prompt.path,reason:v.reason}),!v.admitted&&v.reason!=="too-large"){a.push(u);continue}let y=w===void 0||!v.admitted;if(y||!s.chosen.has(u.prompt.path)&&w>s.left){a.push(u),c.push({path:u.prompt.path,reason:w===void 0?"missing":y?"too-large":"total"}),m({candidate:u,path:u.prompt.path,kind:y?"prompt-too-large":"prompt-over-limit"});continue}let S=we(u,t.repoModelIds,e).map(({path:b})=>b),k=tt(e,{ownPaths:S},{files:{},sizes:n,total:s});l.push(...k.refused),r.push(u),g(k.paths),c.push(...k.skipped),k.skipped.forEach(({path:b})=>m({candidate:u,path:b,kind:"extra"}))}let h=se.candidateFetch.check,f=t.possible.filter(ho).slice(0,Sd).filter(u=>{let w=we(u,t.repoModelIds,e).map(({path:_})=>_),v=w.filter(_=>!s.chosen.has(_)),y=n.get(u.prompt.path),S=Y(e,{path:u.prompt.path,size:y},{purpose:"pointer",route:"github"});if(S.admitted||l.push({path:u.prompt.path,reason:S.reason}),y===void 0||!S.admitted||!s.chosen.has(u.prompt.path)&&y>h)return!1;let k=new Set(s.chosen),b=tt(e,{ownPaths:w},{files:{},sizes:n,total:{left:Math.min(h,s.left),chosen:s.chosen}});if(l.push(...b.refused),!b.paths.includes(u.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:i,strong:r,window:f,notRead:d,notReadMore:p,skipped:a,skippedFiles:c,refused:D(l)}}import{basename as Wa}from"node:path";import{basename as bd}from"node:path";function Fe(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")||"agent"}function wo(e,t,n){let o=new Set(t);return s=>{let i=`${e}${Fe(s)}`,r=i;if(o.has(r)){let a=2;for(;o.has(`${i}-${a}`);)a++;r=`${i}-${a}`,n(s,r)}return o.add(r),r}}function Ha(e,t){return e??(t?Fe(bd(t)):"agent")}var vd=new Set(["system","prompt","prompts","instruction","instructions"]);function Ga(e){let t=e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[^A-Za-z0-9]+/).filter(n=>n&&!vd.has(n.toLowerCase())).map(n=>n.toLowerCase());return t.length?t.join(" ").replace(/^./,n=>n.toUpperCase()):null}function Xa(e,t){let{prompt:n,link:o}=e;if(o?.kind==="L1"&&o.shortLabel)return o.shortLabel;let s=n.symbol?Ga(n.symbol):null;if(s)return s;if(o?.shortLabel)return o.shortLabel;let i=n.enclosing?Ga(n.enclosing):null;return i||t||`${Wa(n.path).replace(/\.[^.]*$/,"")}:${n.line}`}function za(e,t,n){let o=t?`${Fe(Wa(t))}-`:"";return wo(o,[],(s,i)=>{n.push(`${e}: two agents are named ${s}; the second is ${i}`)})}function Ja(e,t,n,o){return t.map(s=>({...s,tools:s.manifest&&ke(e)?s.tools:hs({ownPaths:n[s.unitKey]??[],toolCall:s.toolCall},o).tools}))}function Ls(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 Ed(e,t,n){if(!t.forImport&&!t.forLocal)return n;let o=n.candidate.prompt,s=r=>r.kind==="file"?null:r.symbol??`line ${r.span.from}`,i=Od(e.agents,o);return[...t.importCandidates??[],...e.agents].find(({candidate:r})=>r.prompt.path===o.path&&r.prompt.span.from===o.span.from&&s(r.prompt)===s(o)&&(!i||r.prompt.start===o.start))??n}function Va(e,t,n){let o=[];return{agents:t.agents.flatMap(i=>{let{candidate:r}=i;if(os(e,r.prompt.path,r.promptSource==="marker"))return[i];let a=r.alsoLoads?.find(l=>os(e,l)&&Object.hasOwn(n,l));if(!a)return[];let c=Jr(a,n[a]);return o.push([L(r.prompt),L(c)]),[{...i,candidate:{...r,prompt:c,manifest:void 0,alsoLoads:[r.prompt.path,...(r.alsoLoads??[]).filter(l=>l!==a)]}}]}),aliases:o}}function dn(e,t,n){return!!t&&Va(e,t,n).agents.length>0}function Qa(e,t,n){let o=[],s=za(n.repoKey,n.root,o),i=[..._n(t)],r=[],a=new Map(Object.entries(n.files).map(([w,v])=>[w,Buffer.byteLength(v)])),{agents:c,aliases:l}=Va(e,t,n.files),{kept:d}=ye(e,c),p=ke(e),m=d.map(({candidate:w},v)=>p&&!Ls(n,v).model?w.manifest:void 0),g=p&&m.some(w=>!w)?Ts(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)=>Ls(n,v).model?[L(w.prompt)]:[])}):null,h=d.map(({candidate:w,confirmedBy:v},y)=>{let S=Ls(n,y),{prompt:k,link:b}=w,O=S.name??Xa(w,v?.name??null),_=s(O),$=[],x=`${n.repoKey}: ${O}: `,E=S.model?null:gs(w,t.repoModelIds),C=S.model?{value:S.model,from:"marker",path:null,line:null}:E?{...E,from:w.modelId?"call":"only-model-in-code"}:null;E&&!w.modelId&&$.push(`${x}model ${E.value} assumed from ${E.path}:${E.line} (the only model id in the code)`);let R=S.model?we({...w,modelId:null},[],e):we(w,t.repoModelIds,e),I=m[y]??g?.[y],P=Ot(n.files,I),j=I?I.files.map(W=>R.find(Kp=>Kp.path===W.path)??{path:W.path,role:W.roles.includes("config")?"config":"code",label:null,...W.spans.length===1?{span:W.spans[0]}:{}}):R,G=R.map(({path:W})=>W),Yo=[...G,...n.codingGuides??[]],Te=Ed(t,n,{candidate:w,confirmedBy:v}),Zo=Qt(w),En=Te.candidate===w?Zo:Qt(Te.candidate),es=I?.files.map(W=>W.path),Cr=I&&es?{paths:es,skipped:lt(I),...hs({ownPaths:es,toolCall:En},P)}:null,ts=Cr??tt(e,{ownPaths:G,toolCall:Zo},{files:n.files,sizes:a,root:n.root,guides:n.forImport?void 0:n.codingGuides}),ns=Cr??(n.forImport&&(Yo.length!==G.length||En!==Zo)?tt(e,{ownPaths:G,toolCall:En},{files:n.files,sizes:a,root:n.root,guides:n.codingGuides}):ts),$r={paths:ns.paths,skipped:ns.skipped.filter(({reason:W})=>W!=="missing")};i.push(...ts.skipped.filter(({reason:W})=>W!=="missing")),n.forImport&&r.push(...$r.skipped),$.push(...ts.toolWarnings.map(W=>`${x}${W}`)),o.push(...$);let Rr=b?`${b.callPath}:${b.callLine}`:null,Dp=Rr?`, sent from ${Rr}`:"",Bp=w.shape?` Answers in the shape of ${w.shape.name}.`:"";return{unitKey:_,name:O,description:S.description??`Instructions in ${k.path} (${k.symbol??`line ${k.span.from}`})${Dp}.${Bp}`,model:C,prompt:Te.candidate.prompt,instructionText:eo(w,P),...Te.candidate.prompt.filledAtRunTime?{filledAtRunTime:!0}:{},sentFrom:Te.candidate.link?`${Te.candidate.link.callPath}:${Te.candidate.link.callLine}`:null,confirmedBy:Te.confirmedBy?.model??null,toolCall:En,ownFiles:j,reading:$r,tools:ns.tools,warnings:$,...I?{manifest:I}:{}}}),f=new Map(d.map(({candidate:w},v)=>[L(w.prompt),h[v].unitKey]));for(let[w,v]of l){let y=f.get(v);y&&f.set(w,y)}for(let[w,{candidate:v}]of d.entries()){let y=(v.links??[]).flatMap(S=>{let k=f.get(S.to);return k?[{to:k,kind:S.kind}]:[]});y.length&&(h[w].links=y)}let u=D(i,r);return{agents:h,skippedFiles:u,warnings:[...o,...ko(e,{...t,agents:c},{...n,reportSkippedFiles:!1},h.map(({name:w})=>w)),...n.reportSkippedFiles!==!1?Cn(u,t.skippedFiles?0:t.notReadMore):[]]}}function Ya(e){let t=e.replace(/^local:/,"");return t.slice(t.lastIndexOf("/")+1)||t}function Za(e,t,n,o={}){if(e.ranked&&e.scan){let{total:i,truncated:r}=e.scan;return{resolved:n?qa(e.ranked,n.verdicts,{repoKey:e.key,files:e.files??{},failed:n.failed,flags:t,scanInfo:{total:i,truncated:r}}):Pt(e.ranked,{total:i,truncated:r})}}let s=o.markerPolicy==="any-read"?!!e.markerPath:e.markerKind==="agents"||e.markerKind==="prompt";return t.scan&&s?{resolved:null}:void 0}function Ns(e){let t=ze(e.root);return t?_d(t):Ya(e.repoKey)}function yo(e,t,n=t.code&&(!t.code.resolved||dn(e,t.code.resolved,t.files))?"":Ns(t),o=t.code?.resolved?.filenameReferences){let s={...t,root:ze(t.root)};yt(e)&&!s.agentConfigurations&&(s.agentConfigurations=Gn(e,s.listedPaths??Object.keys(s.files),s.root));let i=to(e,{files:s.files,root:s.root,fallbackName:n,skills:!0,listedPaths:s.listedPaths,agentConfigurations:s.agentConfigurations,filenameReferences:o,codeAgentsFound:dn(e,s.code?.resolved,s.files)});return i.projection==="conventions"&&delete s.code,{input:s,conventions:i}}function So(e,t,n,o,s={}){let i={repoKey:t.key,files:Ri(o.projectAgents,t.key,t.files??{}),...t.root?{root:t.root}:{},...yt(e)?{agentConfigurations:t.agentConfigurations??{}}:{},code:Za(t,n,s.checks),modelReader:o.modelReader??!1};return yo(e,i)}function fn(e,t){let n={repoKey:t.repoKey,files:t.files,...t.root?{root:t.root}:{},...yt(e)?{agentConfigurations:t.agentConfigurations??{}}:{}};return yo(e,n)}function ec(e,t){return`${e}: no agent found \u2014 no convention files (looked for ${as}) and no system prompt in code (scanned ${t.scanned} ${A(t.scanned,"code file")} for prompt constants, prompt files and model calls)`}function pt(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 Ai(e.path);case"claude-fallback":return`no dedicated prompt file found; used ${e.path??rs} as the system prompt`;case"no-prompt":return`no system prompt found (looked for ${is}); 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 ue(e,t){switch(e.code){case"unreadable-crew":return`${t}: ${pt(e)}`;case"duplicate-agent":case"agent-cap":return`${t}: ${pt(e)}`;case"invalid-config":return`${t}: counterfact.json is not valid JSON; ignored`;case"pointer-owned-by-subagent":return`${t}: ${pt(e)}`;case"pointer-guide":return pt(e,t);case"explicit-guide":return`${t}: ${pt(e)}`;case"pointer-missed":return null;case"secret-file":return null;case"claude-fallback":return`${t}: no system prompt file; using ${e.path??rs}`;case"no-prompt":return e.detail==="no-conventions"?`${t}: no agent conventions found (looked for ${as})`:`${t}: ${e.folderAgentsFound?"the root agent has ":""}no system prompt file (looked for ${is})`;case"orphan-skill":return`${t}: ${pt(e)}`;case"frontmatter":return J(e.path,{nested:!0})?null:`${t}: ${pt(e)}`}}import{basename as Cd}from"node:path";function tc(e,t,n){return n?`Instructions in ${t.filter(s=>s.role==="soul"||s.role==="knowledge").map(s=>Cd(s.path)).join(" and ")}.`:e?`Instructions in ${e}.`:"No system prompt file found."}import{posix as oc}from"node:path";function nc(e,t,n){let o=Qa(e,t,{...n,modelReader:n.modelReader??!1}),s={};return{nodes:o.agents.map(r=>{let{unitKey:a,prompt:c}=r;return s[a]=r.instructionText,{id:a,label:r.name,kind:"agent",desc:r.description,meta:r.model?.value??null,sourceRef:{path:c.path,line:c.span.from},files:[...r.ownFiles],tools:r.tools.map(({tool:l})=>bt(l.name))}}),agents:o.agents,warnings:o.warnings,instructionSpans:s,...o.skippedFiles.length?{skippedFiles:o.skippedFiles}:{}}}function xo({repoKey:e,files:t,root:n,conventions:o,nodes:s,parentId:i,candidates:r,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=ue(g,e);h&&d.push(h)}let p=i?c.find(g=>g.id===i):c[0];if(!p)return{nodes:c,edges:l,warnings:d};let m=wo(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(y=>o.skillNames[y]?{role:"skill",path:y,label:o.skillNames[y]}:{role:"reference",path:y,label:o.skillRefNames[y]??null}),u=(g.files?[]:Re(r,[h,...f.map(y=>y.path)].map(y=>t[y]??""),o.stripRoot)).map(y=>({role:"reference",path:y,label:null})),w="key"in g&&typeof g.key=="string"?g.key:void 0,v=w?c.find(y=>y.id===w):c.find(y=>y.id!==p.id&&y.sourceRef?.path===h);if(v){let y=new Set(v.files.map(S=>S.path));v.files.push(...[...f,...u].filter(S=>!y.has(S.path)))}else{for(let S of a.notes.filter(k=>k.code==="frontmatter"&&k.path===h)){let k=ue(S,e);k&&d.push(k)}v={id:w??m(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(S=>S.path===h&&S.role==="system prompt")?[]:[{role:"system prompt",path:h,label:null}],...f,...u],tools:(g.tools??[]).map(bt)},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 ic(e,t,n){let o=$d(e,t,n),{input:s,conventions:i}=t,r=i.agents.filter(y=>y.layoutCall);if(!r.length||o.markerAgentsFound)return o;let a=new Set((o.codeAgents??[]).filter(y=>r.some(S=>{let k=S.layoutCall;return k.path!==y.toolCall.path?!1:k.callStart!==void 0&&y.toolCall.callStart!==void 0?k.callStart===y.toolCall.callStart:k.promptPath===y.prompt.path&&k.promptStart===y.prompt.start})).map(y=>y.unitKey)),c=n(s,{...i,agents:r,notes:[]}),l=[...new Map([...o.fragment.nodes.filter(y=>!a.has(y.id)),...c.fragment.nodes].map(y=>[y.id,y])).values()],d=ye(e,l.filter(y=>y.kind==="agent")),p=new Set(d.kept.map(y=>y.id)),m=l.filter(y=>y.kind!=="agent"||p.has(y.id)),g=new Set(m.map(y=>y.id)),h=[...new Map([...o.fragment.edges,...c.fragment.edges].filter(y=>g.has(y.from)&&g.has(y.to)).map(y=>[JSON.stringify(y),y])).values()],{codeAgents:f,...u}=o,w=f?.filter(y=>!a.has(y.unitKey)&&g.has(y.unitKey)),v=d.leftOut.flatMap(y=>y.sourceRef?.path?[{path:y.sourceRef.path,reason:"allowance"}]:[]);return{...u,fragment:{...o.fragment,nodes:m,edges:h},warnings:[...new Set([...o.warnings,...c.warnings])],...w?.length?{codeAgents:w}:{},...v.length?{skippedFiles:[...o.skippedFiles??[],...v]}:{}}}function $d(e,{input:t,conventions:n},o){let s=t.code?.resolved;if(Yi(e)&&(n.projection!=="code"||n.agents.some(Jt))){let r=Object.keys(t.files),a=et(e,{phase:"start",paths:r,root:t.root,scanFlag:!0}),c=a.kind==="marker"?et(e,{phase:"read",pending:a,text:t.files[a.markerPath]??null}):a,l=c.kind==="settled"?c.scanPaths:void 0;if(l&&l.length<r.length){let d=new Set(l),p=rc(e,{input:{...t,code:{resolved:null}},conventions:n},o),m=sc(e,t,n,p,o),g=(s?.agents??[]).filter(k=>d.has(k.candidate.prompt.path)),h=[...m.fragment.nodes.filter(k=>k.kind==="agent").map(()=>({code:null})),...g.map(k=>({code:k}))],{kept:f,leftOut:u}=ye(e,h),w=f.flatMap(k=>k.code?[k.code]:[]),v=u.flatMap(k=>k.code?[{path:k.code.candidate.prompt.path,reason:"allowance"}]:[]);if(!w.length)return v.length?{...m,skippedFiles:[...m.skippedFiles??[],...v]}:m;let y=js(e,t,Ce(e,l,t.root,t.listedPaths),{agents:[],notes:[]},{...s,agents:w},{}),S=new Map((y.codeAgents??[]).map(k=>[k.unitKey,`code:${L(k.prompt)}`]));return{...m,fragment:{nodes:[...m.fragment.nodes,...y.fragment.nodes.map(k=>({...k,id:S.get(k.id)??k.id}))],edges:[...m.fragment.edges,...y.fragment.edges.map(k=>({...k,from:S.get(k.from)??k.from,to:S.get(k.to)??k.to}))],warnings:[]},warnings:[...new Set([...m.warnings,...y.warnings])],...y.codeAgents?{codeAgents:[...m.codeAgents??[],...y.codeAgents.map(k=>({...k,unitKey:S.get(k.unitKey)??k.unitKey,...k.links?{links:k.links.map(b=>({...b,to:S.get(b.to)??b.to}))}:{}}))]}:{},...y.skippedFiles?.length||v.length?{skippedFiles:[...m.skippedFiles??[],...y.skippedFiles??[],...v]}:{}}}}let i=rc(e,{input:t,conventions:n},o);return n.projection==="code"?sc(e,t,n,i,o):i}function sc(e,t,n,o,s){if(!o.codeAgents?.length||!n.agentScopes)return o;let i=new Set(o.codeAgents?.map(u=>u.prompt.path)),r=new Map(n.agentScopes.map(u=>[u.key,u])),a=n.agents.filter(u=>r.has(u.key)&&Gi(e,u,r.get(u.key).folder,t.root??"")&&(!Jt(u)||!i.has(u.prompt.path))),c=[...o.fragment.nodes.filter(u=>u.kind==="agent").map(()=>({agent:null})),...a.map(u=>({agent:u}))],{kept:l,leftOut:d}=ye(e,c),p=l.flatMap(u=>u.agent?[u.agent]:[]),m=d.flatMap(u=>u.agent?.files[0]?[{path:u.agent.files[0].path,reason:"allowance"}]:[]),g=new Set(p.map(u=>u.key)),h=n.agentScopes.filter(u=>g.has(u.key)),f=s(t,{...n,agents:p,agentScopes:h,notes:h.flatMap(u=>u.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])],...m.length?{skippedFiles:[...o.skippedFiles??[],...m]}:{}}}function rc(e,{input:t,conventions:n},o){let s=t.code,{repoKey:i,files:r,root:a}=t,c=Ce(e,Object.keys(r),a,t.listedPaths),l=c.configPath?Zn(r[c.configPath]):null,d=l?.config??null,p=l?.invalid===!0,m=d?Vi(d):"bare",g=[];d&&m==="bare"&&(d.prompt||d.agents?.length)&&(g=ms(e,d,{repoKey:i,markerDir:oc.dirname(c.configPath).replace(/^\.$/,""),files:r}).warnings);let h;if(d&&m!=="bare"){let y=oc.dirname(c.configPath).replace(/^\.$/,""),S=ms(e,d,{repoKey:i,markerDir:y,files:r});h=S.agents.length>0;let k=S.agents.filter(_=>ra(e,_.prompt.path,r,a)),b=S.agents.filter(_=>!k.includes(_)),O=k.flatMap(_=>{let $=ue({code:"pointer-owned-by-subagent",path:_.prompt.path},i);return $?[$]:[]});if(b.length>0){let _=js(e,t,c,n,Pd(b),{overrides:b.map(({name:$,model:x,description:E})=>({name:$,model:x,description:E})),configPath:c.configPath});return{..._,markerAgentsFound:h,markerWarnings:S.warnings,warnings:[...S.warnings,...O,...ac(e,t,c,b.length),..._.warnings]}}g=[...S.warnings,...O]}let{resolved:f}=s;if(!f||Rd(e,c,n)||m!=="bare"){let y=o(t);return{fragment:y.fragment,warnings:[...new Set([...g,...y.warnings])],...h===void 0?{}:{markerAgentsFound:h}}}let u=dn(e,f,r);if(u){let y=Id(e,t,c,n,f,d,p);return{...y,warnings:[...new Set([...g,...y.warnings])]}}let w=ss({agentConfiguration:n.agents.some(y=>y.prompt.kind==="fallback"),usage:"map",codeAgentsFound:u,otherDefinitions:Hn(c)},e),v=c.claudePath&&w==="prompt"||c.configPath||n.agents.some(y=>us(y)||y.layoutCall)?o(t,n):{fragment:{nodes:[],edges:[],warnings:[]},warnings:[ec(i,f),...n.notes.filter(y=>y.code==="orphan-skill").flatMap(y=>{let S=ue(y,i);return S?[S]:[]})]};return{fragment:v.fragment,warnings:[...v.warnings,...ko(e,f,{repoKey:i,modelReader:t.modelReader,reportSkippedFiles:t.reportSkippedFiles},[])]}}function Rd(e,t,n){return n.projection==="code"?!1:Mi(e,t)?!0:n.agents.some(o=>Jt(o)&&us(o))}function ac(e,t,n,o){let s=ss({usage:"map",codeAgentsFound:o>0,otherDefinitions:Hn(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 Id(e,t,n,o,s,i,r){let{repoKey:a}=t,c=s.agents.length,l=js(e,t,n,o,s,{primaryConfig:i,configPath:i?n.configPath:null}),d=r?ue({code:"invalid-config"},a):null,p=d?[d]:[];return Hn(n)||p.push(`${a}: no agent convention files; found ${c} ${A(c,"agent")} defined in code \u2014 add counterfact.json to name them yourself`),p.push(...ac(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 js(e,{repoKey:t,files:n,root:o,modelReader:s,codingGuides:i,reportSkippedFiles:r,forImport:a,forLocal:c,code:l,agentConfigurations:d},p,m,g,h){let f=nc(e,g,{repoKey:t,root:o,files:n,modelReader:s,codingGuides:i,reportSkippedFiles:r,forImport:a,forLocal:c,agentConfigurations:d,...a&&l?.resolved?{importCandidates:l.resolved.agents}:{},overrides:h.overrides,primaryConfig:h.primaryConfig}),u=m.agents.find(x=>x.key===null)?.subagents??[],w=new Set(p.developerCompanionPaths),v;for(let x of f.nodes){let E=m.agents.find(P=>Jt(P)&&P.prompt.path===x.sourceRef?.path);if(!E)continue;let C=E.files.filter(P=>w.has(P.path)),R=new Set(x.files.map(P=>P.path));x.files.push(...C.filter(P=>!R.has(P.path)));let I=C.find(P=>P.role==="mcp")?.path??null;I&&x.tools.push(...qn(e,t,n,{toolsPath:null,toolsTsPath:null,cliPath:null,mcpPath:I},f.warnings)),E.key===null&&E.subagents.some(P=>w.has(P.path))&&(v=x.id)}let y=new Set(u.map(x=>x.path)),S=new Set([...u.flatMap(x=>x.skillPaths),...m.notes.filter(x=>x.code==="orphan-skill").map(x=>x.path)]),{stripRoot:k}=p,b=new Set(f.nodes.flatMap(x=>x.files.map(E=>E.path))),O=p.scoped.filter(x=>!b.has(x)&&!y.has(x)&&!S.has(x)&&x!==h.configPath&&St(x)).sort();for(let x of f.nodes){let E=Re(O,[f.instructionSpans[x.id]??""],k).map(C=>({role:"reference",label:null,path:C}));x.files.push(...E)}h.configPath&&f.nodes[0]&&f.nodes[0].files.push({role:"config",label:null,path:h.configPath});let _=S.size||v!==void 0?xo({repoKey:t,files:n,root:o,conventions:p,nodes:f.nodes,parentId:v,candidates:O,resolved:{subagents:u,notes:m.notes}}):{nodes:f.nodes,edges:[],warnings:[]},$=c?Ja(e,f.agents,Object.fromEntries(_.nodes.map(({id:x,files:E})=>[x,E.map(({path:C})=>C)])),n):f.agents;return{fragment:{nodes:_.nodes,edges:_.edges,warnings:[]},codeAgents:$,warnings:[...f.warnings,..._.warnings],...f.skippedFiles?{skippedFiles:f.skippedFiles}:{}}}function Me(e,t){return t.input.code?ic(e,t,(n,o)=>cc(e,o?{input:n,conventions:o}:yo(e,n,Ns(n),t.input.code?.resolved?.filenameReferences))):cc(e,t)}function cc(e,{input:{repoKey:t,files:n,root:o,listedPaths:s,agentConfigurations:i},conventions:r}){if(!r.agents.length)return{fragment:{nodes:[],edges:[],warnings:[]},warnings:r.notes.flatMap(h=>{let f=ue(h,t);return f?[f]:[]})};let a=r.notes.filter(h=>h.code!=="orphan-skill"&&h.code!=="frontmatter").flatMap(h=>{let f=ue(h,t);return f?[f]:[]}),{scopes:c,ownerOf:l}=Xn(e,r.scopePaths??Object.keys(n),o,{files:n,listedPaths:s,agentConfigurations:i}),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=r.agents.map(h=>{let f=r.agentScopes?.find(C=>C.key===h.key)??c.find(C=>C.key===h.key),u=ze(f.folder),w=Ot(n,h.manifest),v=Ce(e,d.get(f.folder).filter(C=>w[C]!==void 0),u),y=new Set(h.files.map(C=>C.path)),S=C=>C!==null&&y.has(C)?C:null,k=h.tools?.map(bt)??qn(e,t,w,{toolsPath:S(v.toolsPath),toolsTsPath:S(v.toolsTsPath),cliPath:S(v.cliPath),mcpPath:S(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:Ha(h.key,o),label:h.name,kind:"agent",desc:h.description??tc(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(C=>C.role!=="reference"||C.label!==null).map(C=>C.path),...h.subagents.flatMap(C=>[C.path,...C.skillPaths]),...r.notes.filter(C=>C.code==="orphan-skill").map(C=>C.path)]),E=v.scoped.filter(C=>!x.has(C)&&St(C)).sort();return{resolved:h,root:u,conventions:v,agent:$,candidates:E}}),m=p.map(h=>h.agent),g=[];a.push(...r.notes.filter(h=>h.code==="orphan-skill").flatMap(h=>{let f=ue(h,t);return f?[f]:[]}));for(let{resolved:h,root:f,conventions:u,agent:w,candidates:v}of p){let y=xo({repoKey:t,files:n,root:f,conventions:u,nodes:m,parentId:w.id,candidates:v,resolved:{subagents:h.subagents,notes:r.notes.filter(S=>S.code==="frontmatter")}});m=y.nodes,g.push(...y.edges),a.push(...y.warnings)}return{fragment:{nodes:m,edges:g,warnings:[]},warnings:a}}function bo(e){let t=e.findingQuality;if(!t?.config.switches.codeInputs||t.codeEvidence)return e;let n=[],o={};for(let[s,i]of(e.repos??[]).entries()){let r=i.files??{},a=Gt.safeParse(e.mapped?.[s]),c=a.success?a.data.nodes:[],l=e.projectAgents,d=l?.enabled?[...l.byRepo[i.key]??[],...l.codeByRepo?.[i.key]??[]]:[];for(let p of d){if(!p.codeInputsJson)continue;let m=p.codeInputsJson.admittedPaths!==void 0,g={paths:m?[...p.codeInputsJson.admittedPaths]:[],skipped:[]},h=[],f=S=>S.filter(k=>{let b=r[k.sourcePath],O=p.codeInputsJson?.sourceHashes?.[k.sourcePath];return m&&b!==void 0&&O&&lc("sha256").update(b).digest("hex")===O?!0:(h.push({path:k.sourcePath,reason:m?O?"The source revision differs from the imported source.":"The imported source revision is unknown.":"The imported file admission is unknown."}),!1)}),u={tools:f(p.codeInputsJson.tools),contextInputs:f(p.codeInputsJson.contextInputs)},v=c.find(S=>S.id===p.unitKey)?.files.find(S=>S.role==="system prompt"&&S.span),y=Os({agent:{...p,codeInputsJson:u,...v?.span?{site:{path:v.path,span:v.span}}:{}},files:r,allowance:g,enabled:!0});y.skipped.push(...h),n.push({repo:i.key,unitKey:p.unitKey,input:y})}for(let[p,m]of Object.entries(r))o[JSON.stringify([i.key,p])]=lc("sha256").update(m).digest("hex")}return{...e,findingQuality:{...t,codeEvidence:n,sourceHashes:o}}}function pc(e,t,n={}){let o=e.findingQuality;if(!o?.config.switches.codeInputs)return e;let s=(o.codeEvidence??[]).flatMap(r=>ce([{...r.input,files:Ds(e,r.repo,r.input.files,n)}],t[r.repo]??{}).skipped.map(a=>({...a,repo:r.repo}))),i=new Set(s.map(r=>JSON.stringify([r.repo,r.path]))).size;return{...e,findingQuality:{...o,readingSkipped:s},warnings:[...new Set([...e.warnings??[],...i?[`${i} ${A(i,"file was","files were")} skipped, so some findings may be missing.`]:[]])]}}function un(e){if(!e.findingQuality?.config.switches.codeInputs)return;let{all:t}=Ae(e.repos??[]);return{enabled:!0,inputs:(e.findingQuality.codeEvidence??[]).map(o=>({...o.input,repo:o.repo,unitKey:o.unitKey,files:Object.fromEntries(Object.entries(o.input.files).filter(([s])=>t.some(i=>i.repo===o.repo&&i.path===s))),sources:o.input.sources.filter(s=>t.some(i=>i.repo===o.repo&&i.path===s.sourcePath))})),agentRows:e.projectAgents?.agentRows,repoByPath:Object.fromEntries(t.map(o=>[o.path,o.repo]))}}function dc(e,t){let n=[...un(e)?.inputs??[]];for(let o of e.repos??[]){if(!o.ranked&&!o.markerPath)continue;let s=So(t,o,e.codeAgents??Yn(t),e,{checks:e.codeChecks}),i=Me(t,s);for(let r of i.codeAgents??[]){let{path:a,line:c}=r.toolCall;if(!c||!r.reading.paths.includes(a)||typeof o.files?.[a]!="string")continue;let l=Os({agent:{unitKey:r.unitKey,toolsJson:[],codeInputsJson:{tools:[],contextInputs:[{name:r.name,sourcePath:a,sourceLine:c}]}},files:o.files,allowance:{paths:r.reading.paths,skipped:r.reading.skipped},enabled:!0});n.push({...l,repo:o.key,unitKey:r.unitKey})}}return{enabled:!0,inputs:n}}function Ds(e,t,n,o){let s=ka(e,(e.repos??[]).findIndex(i=>i.key===t));return re(o,n,s.success?s.data:{nodes:[]})}function Bs(e,t,n,o={}){return Object.fromEntries(Object.entries(n).map(([s,i])=>{let r=e.repos?.find(c=>c.key===s)?.files??{},a=Ds(e,s,Object.fromEntries(i.map(c=>[c,r[c]??""])),o);return[s,Object.fromEntries(Object.entries(a).map(([c,l])=>[c,t.core.includes(c)?ge(l):l]))]}))}function fc(e,t,n,o={}){if(!e.findingQuality?.config.switches.codeInputs)return;let s=Bs(e,t,n,o);return e.findingQuality.codeEvidence?.map(i=>({repo:i.repo,unitKey:i.unitKey,enabled:!0,inputs:[{...i.input,files:Ds(e,i.repo,i.input.files,o)}],files:s[i.repo]??{},agentRows:e.projectAgents?.agentRows}))}var uc=Math.floor(512/(rt+1));function mc(e,t,n,o,s,i=[],r,a){if(e.CF_REQUEST_FRAME_BUDGET==="0")return t;let c=structuredClone(t);if(c.passes.length>uc)throw new Mn;let l=new Set([...i,...c.passes.flatMap(f=>f.own).filter(f=>c.passes.filter(u=>u.own.includes(f)).length>1)]),d=po(e,{graph:s,files:{}}),p=Buffer.byteLength(JSON.stringify(Jn(d,e))),m=Buffer.byteLength(JSON.stringify(d.inputs.graph)),g=new Map,h=(f,u)=>{let w=u?{...c,passes:c.passes.map(($,x)=>x===f?u:$)}:c,v=fo(e,w,f,n,o,r,a),y=Object.entries(v.files),S=y.reduce(($,[x,E])=>{let C=g.get(x);return(!C||C.text!==E)&&(C={text:E,bytes:Vn(x,E)},g.set(x,C)),$+C.bytes},Math.max(0,y.length-1)),k=Buffer.byteLength(JSON.stringify(v.pass??null))-Buffer.byteLength("null"),b=Buffer.byteLength(JSON.stringify(po(e,{graph:s,...v}).inputs.graph)),O=Buffer.byteLength(JSON.stringify(JSON.stringify(v.codeSources??[])))-Buffer.byteLength('"[]"'),_=p-m+b+S+k+O;return _+ua<=8e5&&ga(_)};for(let f=0;f<c.passes.length;f++)for(;;){let u=c.passes[f];if(delete u.trimGraph,h(f))break;let w=u.own.filter(k=>l.has(k)),v=u.own.filter(k=>!l.has(k));if(!(v.length>1&&v.some(k=>h(f,{...u,own:[...w,k]})))&&(u.trimGraph=!0,h(f)))break;if(v.length<2||c.passes.length>=uc)throw new Mn;let S=Math.ceil(v.length/2);c.passes.splice(f,1,{...u,own:[...w,...v.slice(0,S)]},{...u,own:[...w,...v.slice(S)]})}if(c.passes.some((f,u)=>!h(u)))throw new Mn;return c}var Ks=e=>e>1?24:xt,We=e=>Ks(e.inspectPlan?.passes.length??1);function Ad(e,t,n){let o=mo(e,t,void 0,void 0,void 0,n),s=Z(t),i=Object.keys(o.files);return{core:i.filter(r=>s.has(r)),passes:[{own:i.filter(r=>!s.has(r))}],skipped:o.skipped,warnings:o.warnings}}function qs(e,t,n,o,s={graph:{nodes:[],edges:[]}}){let i=It(o,it(e)),r;if(i){let a=Bi(Object.entries(i).map(([c,l])=>({path:c,size:Buffer.byteLength(l),inputBytes:Vn(c,l)})));if(!a)throw new Error("bad_request");r={core:[],passes:a,skipped:[],warnings:[]}}else r=n?ja({files:it(e),graph:t,passMaxBytes:15e4,maxPasses:4,settings:o,repos:e}):Ad(e,t,o);return mc(o,r,it(e),t,s.graph,[],s.codeEvidence,e)}function hc(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} ${A(t,"file was","files were")} not analyzed because the agent is larger than ${n} can read: ${e.skipped.join(", ")}`}async function gc(e,t){let{graph:n,llm:o}=t,s=bo(t.data),i=s.findingQuality?.config,r=s.repos??[],{all:a,shadowed:c}=Ae(r),l=un(s),d=it(r),p=Ge(t.fragments),m=s.inspectPlan??qs(r,p,te(e,s).multiPass,e,{graph:n,codeEvidence:l}),g=s.passCursor??0,h=m.passes.length,f=(s.passFindings??[]).map($e),u={...s,inspectPlan:m},w=t.parallel??ro(e);if(h>1&&t.checkpoint&&(w.enabled||s.passResults)){if(!(s.passResults&&m.passes.every((b,O)=>s.passResults?.[O]?.findings!==void 0)))return{done:!1,data:await Sa({data:s,plan:m,progress:{...t.progress,checkpoint:(O,_)=>t.progress.checkpoint(_?O:{...ae(u),...O},_)},concurrency:w.concurrency,onePartPerStep:!w.enabled,forLocal:t.forLocal,run:(O,_)=>Ps(e,{llm:o.withRetry(_),qualityConfig:i,graph:n,plan:m,index:O,files:d,reading:p,codeEvidence:l,repos:r})})};f=m.passes.map((b,O)=>$e(s.passResults[O].findings))}else if(g<h){let k;try{k=await Ps(e,{llm:o.withRetry(s.passRetries??0),qualityConfig:i,graph:n,plan:m,index:g,files:d,reading:p,codeEvidence:l,repos:r})}catch(b){if(o.rethrow(b),me(b),t.forLocal)throw b instanceof le||Ln(b)?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<rt)return{done:!1,data:{...u,passRetries:O+1}};throw ao(g,h,O+1)}if(f=[...f,k],u={...u,passCursor:g+1,passRetries:0,passFindings:f},await t.checkpoint?.(ae(u)),h>1)return{done:!1,data:u}}let v=new Set([...m.core,...m.passes.flatMap(k=>k.own)]),y={},S=Be(e,{paths:a.map(k=>k.path),files:d,graph:p,repos:r});for(let k of Qe(a,Z(p),De(p),S))v.has(k.path)&&(y[k.repo]??=[]).push(k.path);return u.findingQuality&&i?.switches.codeInputs&&(u=pc(u,Bs(u,m,y,e),e)),{done:!0,data:u,findings:va(f,{semanticMatching:i?.switches.semanticMatching,dedupe:Oa(e),deferCap:t.forLocal||Fn(e)}),plan:m,readByRepo:y,shadowed:c}}import{posix as Ft}from"node:path";function vo(e,t,n,o={}){let s=t.replace(/\[[^\]]*\]\([^)]*\)/g,"").replace(/\b[a-z][a-z\d+.-]*:\/\/[^\s)>]+|\/\/[^\s)>]+/gi,""),i=[...Array.from(t.matchAll(/\]\(\s*(?:<([^>]+)>|([^\s)]+))/g),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}))],r=[];for(let a of i){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=Ft.normalize(l?c.slice(1):Ft.join(Ft.dirname(e),c)),m=(l||a.relative||c.startsWith(".")?[d]:[d,Ft.normalize(c)]).filter(h=>h!==".."&&!h.startsWith("../")),g=m.find(h=>Object.hasOwn(n,h))??(o.includeMissing?m[0]:void 0);g&&!r.includes(g)&&r.push(g)}if(o.includeNamed)for(let a of Object.keys(n))[a,Ft.relative(Ft.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))&&!r.includes(a)&&r.push(a);return r}function dt(e,t,n,o=so,s=t){let i=e.split(`
13
+ `),r=Math.max(0,Math.min(i.length-1,(t??1)-1)),a=t===null||i.length<=o*2+1,c=a?0:Math.max(0,r-o),l=a?i.length:Math.min(i.length,Math.max(r,(s??1)-1)+o+1),d=()=>i.slice(c,l).map((g,h)=>`${c+h+1} ${g}`).join(`
14
+ `),p=d();for(;l-c>1&&Buffer.byteLength(d())>n;)r-c>l-r-1?c++:l--;let m=B(d(),n);return{text:m,truncated:m!==p||t!==null&&(t<1||t>i.length)}}function ft(e,t,n=0,o="legacy",s){let i=Fd(e,t,n);return o==="whole-file"?Ld(e,t,n,i,s):i}function Fd(e,t,n){let o=[],s=[],i=[],r=Se,a=t.repos.flatMap(l=>{let d=t.fragments.filter(h=>h.repoKey===l.key),p=Z(Ge(d)),m=new Map(d.flatMap(h=>h.fragment.nodes.flatMap(f=>f.files.map(u=>[u.path,u.role])))),g=h=>["system prompt","soul","knowledge"].indexOf(m.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],m=p===void 0?"":p.split(`
15
+ `).map((f,u)=>`${u+1} ${f}`).join(`
16
+ `),g=B(m,r),h=p===void 0||g!==m;i.push({repo:l.key,path:d,line:1,text:g,truncated:h}),r-=Buffer.byteLength(g),h&&o.push({kind:"core-incomplete",repo:l.key,path:d})}i.length===0&&o.push({kind:"no-core"});let c=e.flatMap((l,d)=>{let p=Ne([l]).notActive[0]?.activity,m=p?{state:p.state,gate:p.gate===null?null:B(p.gate,256),reason:B(p.reason,1e3)}:void 0,g=[...l.site?[{...l.site,repo:l.siteRepo}]:[],...l.otherSites];if(fi(l.category)&&g.length<Ut(l.category))return s.push({id:`f${n+d+1}`,reason:`${l.category} requires ${Ut(l.category)} cited sites; ${g.length} supplied.`}),[];let h=[...g,...p?.evidence.map(y=>({...y,repo:l.siteRepo}))??[]],f=h.map(y=>{let S=t.repos.find(b=>b.key===y.repo),k=S?.files?.[y.path];return k===void 0?(o.push({kind:"site-unavailable",repo:y.repo??null,path:y.path,line:y.line}),{repo:y.repo??"",path:y.path,line:y.line??0,text:"",truncated:!0}):{repo:S.key,path:y.path,line:y.line??0,...dt(k,y.line,Math.floor(xe/h.length))}}),u=B(l.title,Math.floor(q/4)),w=l.category??"",v=B(l.cause,q-Buffer.byteLength(u)-Buffer.byteLength(w)-(m?Buffer.byteLength(JSON.stringify(m)):0));return[{id:`f${n+d+1}`,title:u,body:v,category:w,sites:f,...m?{activity:m}:{},truncated:v!==l.cause||u!==l.title}]});return{coreFiles:i,findings:c,diagnostics:o,skipped:s}}var ve=e=>Buffer.byteLength(JSON.stringify(e)),ne=e=>JSON.stringify([e.repo,e.path]),Us=e=>[...new Map(e.map(t=>[ne(t),t])).values()],kc=({repo:e,path:t})=>({repo:e,path:t});function Hs(e,t,n){if(ve(n(e))<=t)return e;let o=0,s=Buffer.byteLength(e);for(;o<s;){let i=Math.ceil((o+s)/2);ve(n(B(e,i)))<=t?o=i:s=i-1}return B(e,o)}function Md(e,t){let n=[];for(let s of e)ve([...n,s].map(i=>({...i,text:""})))<=Se?n.push(s):t.push({kind:"core-omitted",repo:s.repo,path:s.path});let o=[];for(let[s,i]of n.entries()){let r=n.slice(s+1).map(l=>({...l,text:""})),a=Hs(i.text,Se,l=>[...o,{...i,text:l},...r]),c=i.truncated||a!==i.text;c&&t.push({kind:"core-incomplete",repo:i.repo,path:i.path}),o.push({...i,text:a,truncated:c})}return o}function Td(e,t){let n=t.repos.find(s=>s.key===e.repo)?.files??{},o=n[e.path];return o===void 0?[]:vo(e.path,o,n,{includeMissing:!0,includeNamed:!0,rootRelative:!0}).filter(s=>s!==e.path).sort().map(s=>({repo:e.repo,path:s}))}function Ld(e,t,n,o,s){let i=[...o.diagnostics],r=Md(o.coreFiles,i),a=o.coreFiles.map(kc),c=e.map((O,_)=>{let $=o.findings.find(E=>E.id===`f${n+_+1}`)?.sites.map(kc)??[],x=Us([...a,...$]);return Us([...x,...x.flatMap(E=>Td(E,t))])}),l=O=>t.repos.find(_=>_.key===O.repo)?.files?.[O.path],d=new Set(a.map(ne)),p=new Set(o.findings.map(O=>O.id)),g=Us(c.flatMap((O,_)=>p.has(`f${n+_+1}`)?O:[])).filter(O=>!d.has(ne(O))).flatMap(O=>{let _=l(O);return _===void 0?(i.push({kind:"linked-unavailable",repo:O.repo,path:O.path}),[]):[{...O,line:1,text:_.split(`
17
+ `).map(($,x)=>`${x+1} ${$}`).join(`
18
+ `),truncated:!1}]}),h=[],f=ve(g)<=$t;for(let[O,_]of g.entries()){let $=f?$t:Math.floor(($t-ve(h))/(g.length-O))-1;if(f||ve(_)<=$){h.push(_);continue}let x=o.findings.flatMap(R=>R.sites.filter(I=>ne(I)===ne(_)).map(I=>({line:I.line||null,cap:Math.floor(xe/R.sites.length)}))),E=R=>{let I=new Map;for(let P of x.length?x:[{line:null,cap:xe}])for(let j of dt(l(_),P.line,Math.min(P.cap,R)).text.split(`
19
+ `)){let G=/^(\d+) /.exec(j);G&&j.length>(I.get(Number(G[1]))?.length??0)&&I.set(Number(G[1]),j)}return{..._,text:[...I].sort((P,j)=>P[0]-j[0]).map(([,P])=>P).join(`
20
+ `),truncated:!0}},C=E(xe);if(ve(C)>$){let R=Math.max(0,Math.floor(($-ve({..._,text:"",truncated:!0}))/6/Math.max(1,x.length)));C=E(R)}ve(C)<=$&&h.push(C),i.push({kind:"whole-file-incomplete",repo:_.repo,path:_.path})}let u=new Map([...r,...h].map(O=>[ne(O),O])),w=O=>{let _=l(O);return _!==void 0&&(!Number.isInteger(O.line)||O.line<1||O.line>_.split(`
21
+ `).length)},v=[...o.skipped??[]],y=o.findings.flatMap(O=>{let _=O.sites.map(C=>({...C,text:"",truncated:!u.has(ne(C))||u.get(ne(C)).truncated||w(C)})),$={...O,title:"",body:"",sites:_};if(ve($)>q-2)return v.push({id:O.id,reason:"The cited paths exceed the serialized claim allowance."}),[];let x=Hs(O.title,q-2,C=>({...$,title:C})),E=Hs(O.body,q-2,C=>({...$,title:x,body:C}));return[{...O,title:x,body:E,sites:_,truncated:O.truncated||x!==O.title||E!==O.body}]}),S=r.length>0&&r.length===o.coreFiles.length&&r.every(O=>!O.truncated),k=e.map((O,_)=>{let $=`f${n+_+1}`,x=y.find(C=>C.id===$),E=o.findings.find(C=>C.id===$)?.sites.filter(w).map(ne)??[];return{fingerprint:Q(O),requested:c[_],included:c[_].filter(C=>l(C)!==void 0&&u.has(ne(C))),missing:c[_].filter(C=>l(C)===void 0),truncated:c[_].filter(C=>l(C)!==void 0&&(!u.has(ne(C))||u.get(ne(C)).truncated||E.includes(ne(C)))),claimTruncated:x?.truncated??!0,coreComplete:S}}),b={coreFiles:r,citedFiles:h,findings:y,diagnostics:[...new Map(i.map(O=>[JSON.stringify(O),O])).values()],skipped:v,coverage:k};return b.serializedBytes=s.checkPayloadBytes(b),b}import{createHash as Nd}from"node:crypto";var wc=e=>Nd("sha256").update(JSON.stringify(e)).digest("hex"),Oo=e=>[...new Set(e)],jd=e=>!e.trim()||/^[\s"'“”‘’]*none found[\s."'“”‘’]*$/i.test(e);function Dd(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 pe(n,{template:"second-opinion"},"Shadow finding opinion",t.models.secondOpinion,(ie(t.caps.secondOpinionInputBytes)+t.caps.checkOverheadTokens)*o,t.caps.secondOpinionOutputTokens*o)}function Bd(e){let t=[...e.skipped??[]],n=e.coreFiles.length>0&&e.coreFiles.every(i=>!i.truncated&&i.text.trim()),o=new Map(e.assessments?.map(i=>[i.fingerprint,i]));return{findings:e.findings.filter(i=>{let r=o.get(e.fingerprints?.[i.id]??""),a=e.coverage?.filter(f=>f.fingerprint===e.fingerprints?.[i.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(u=>u.repo===f.repo&&u.path===f.path)&&l.some(u=>u.repo===f.repo&&u.path===f.path&&!u.truncated)),p=n&&!i.truncated&&i.sites.length>0&&i.sites.every(f=>!f.truncated&&(c?l.some(u=>u.repo===f.repo&&u.path===f.path&&!u.truncated&&u.text.trim()):f.text.trim()))&&d&&r?.support!=="incomplete",m=e.disputedIds?.includes(i.id)??!1,g=r===void 0||r.weak||r.confidence==="not sure",h=p?!g&&!m?"Strong, uncontested finding needs no shadow check.":null:"Second opinion needs complete fetched evidence.";return h&&t.push({id:i.id,reason:h}),h===null}),skipped:t}}function Kd(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(`
22
+ `).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 i=s.findIndex(c=>Number(c[1])===e.line);if(i<0)return!1;let r=s.slice(i).map(c=>c[2]).join(`
23
+ `),a=r.indexOf(e.quote);return a>=0&&!r.slice(0,a).includes(`
24
+ `)&&Ee(r,e.quote)===1}):!1}function qd(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(jd(s)||e.verdict==="drop"&&!e.decisive)return"The shadow verdict has no decisive evidence.";let i=e.quotes.filter(r=>r.side===o);return i.length===0||e.quotes.some(r=>!Kd(r,[...n,...t.sites]))||i.some(r=>!s.includes(r.quote))?"The shadow verdict lacks exact deciding quotes at the supplied file lines.":null}function Ud(e,t){return{template:"second-opinion",answerFormat:"opinion",model:t.models.secondOpinion,inputs:{checkTemplate:$s(t).check,checkInput:e},limits:{maxTokens:t.caps.secondOpinionOutputTokens,thinking:"disabled"}}}async function Gs(e,t,n,o){let{findings:s,skipped:i}=Bd(t),{saved:r,...a}=t,c=wc(a),l=wc(pi(o)?n:{config:n,categories:li(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:i},disagreements:[],batches:[],estimate:null},p=null;if(!n.switches.enabled||!n.switches.secondOpinion?p="Second opinion is off.":t.purpose!=="benchmark"||t.fictional!==!0?p="Second opinion is shadow-only for fictional benchmarks; customer calls are off.":(!n.models.secondOpinion||!n.secondOpinionProvider)&&(p=n.diagnostics.join(" ")||"Second opinion has no approved provider/model configuration."),p){let b=r?structuredClone(r):d;return{...b,done:!0,verdicts:[],disagreements:[],diagnostics:[...b.diagnostics,p]}}if(r&&(r.inputHash!==c||r.configHash!==l))return{...structuredClone(r),done:!0,verdicts:[],disagreements:[],diagnostics:[...r.diagnostics,"Second opinion snapshot changed or is missing; no replacement calls were made."]};let m=r?structuredClone(r):d;if(m.done)return m;if(m.cursor>=s.length)return{...m,done:!0};if(!e.available)return{...m,done:!0,diagnostics:[...m.diagnostics,"Second opinion provider is unavailable."]};if(!zt(t.findings,Oo(t.findings.map(b=>b.id))))return{...m,done:!0,diagnostics:[...m.diagnostics,"Second opinion input contains duplicate ids."]};let g=s.slice(m.cursor,m.cursor+n.caps.secondOpinionBatchSize),h=g.map(b=>b.id),f={...t,findings:g,diagnostics:[]};try{Rt(n,e.tools,o)}catch{return{...m,done:!0,diagnostics:[...m.diagnostics,"Second opinion prompt changed since its frozen snapshot."]}}let u=Ud(f,n),w=0,v=!1,y=n.caps.secondOpinionInputBytes,S;try{let b=await T(e,u,o,{maxInputBytes:y,onSend(O){w=O,v=!0,m.estimate=Dd(g.length,n,o),m.coverage.sentIds=Oo([...m.coverage.sentIds,...h])}});S=xs.parse(b).verdicts}catch(b){if(!v){if(b instanceof la)return{...m,done:!0,diagnostics:[...m.diagnostics,"Second opinion serialized evidence exceeds its priced input budget."]};throw b}M("second-opinion",b,_=>e.rethrow(_));let O=b instanceof Error?b.message:"Unreadable shadow response.";return m.batches.push({ids:h,attempt:m.retries+1,inputBytes:w,rawVerdicts:[],failure:O}),m.diagnostics.push(O),m.retries<n.caps.secondOpinionMaxRetries?{...m,retries:m.retries+1}:(m.coverage.failedIds=Oo([...m.coverage.failedIds,...h]),{...m,done:!0})}if(m.batches.push({ids:h,attempt:m.retries+1,inputBytes:w,rawVerdicts:S}),!zt(S,h))m.diagnostics.push("Shadow verdict ids did not match this batch; every answer in the batch was rejected.");else for(let b of S){let O=g.find(x=>x.id===b.id),_=qd(b,O,[...t.coreFiles,...t.citedFiles??[]]);if(_){m.diagnostics.push(`${b.id}: ${_}`);continue}m.verdicts.push(b);let $=t.originalVerdicts?.find(x=>x.id===b.id);$&&$.verdict!==b.verdict&&m.disagreements.push({id:b.id,original:$.verdict,shadow:b.verdict,reason:b.reason})}m.coverage.answeredIds=Oo(m.verdicts.map(b=>b.id)),m.coverage.missingIds=s.filter(b=>!m.coverage.answeredIds.includes(b.id)).map(b=>b.id);for(let b of h.filter(O=>!m.coverage.answeredIds.includes(O)))m.diagnostics.push(`${b}: No validated shadow verdict; the original finding is unchanged.`);let k=m.cursor+g.length;return{...m,cursor:k,retries:0,done:k>=s.length}}async function Ws(e,t,n,o,s){if(s.qualityConfig?.switches.secondOpinion&&s.secondOpinion&&e?.qualityAudit){let i=s.qualityConfig,r=s.secondOpinion.saved??t.qualityAudit?.shadow,a=ut(e,e.qualityAudit.coverage,n,o,s),c={...ft(n,o,0,Eo(i),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}`,Q(d)])),assessments:a.assessments},l=await Gs(s.secondOpinion.llm,{...c,...r?{saved:r}:{}},i,s.settings);for(;;){let d=ut(e,a.coverage,n,o,s,l);if(t={...t,qualityAudit:d},await s.onCheckpoint?.(t),l.done||s.secondOpinion.oneBatch)break;l=await Gs(s.secondOpinion.llm,{...c,saved:l},i,s.settings)}}return t}function Eo(e){return e?.switches.fullContext?"whole-file":"legacy"}function Hd(e,t,n,o){return e.coverage?e.coverage:t.map((s,i)=>{let r=e.findings.find(m=>m.id===`f${o+i+1}`),a=[...s.site?[{repo:s.siteRepo??"",...s.site}]:[],...s.otherSites],c=[...new Map([...e.coreFiles,...a].map(m=>[JSON.stringify([m.repo,m.path]),{repo:m.repo,path:m.path}])).values()],l=[...e.coreFiles,...r?.sites??[]],d=m=>n.repos.find(g=>g.key===m.repo)?.files?.[m.path],p=m=>l.filter(g=>g.repo===m.repo&&g.path===m.path);return{fingerprint:Q(s),requested:c,included:c.filter(m=>d(m)!==void 0&&p(m).length>0),missing:c.filter(m=>d(m)===void 0),truncated:c.filter(m=>{let g=d(m);return g!==void 0&&!p(m).some(h=>!h.truncated&&h.text===g.split(`
25
+ `).map((f,u)=>`${u+1} ${f}`).join(`
26
+ `))}),claimTruncated:r?.truncated??!0,coreComplete:e.coreFiles.length>0&&e.coreFiles.every(m=>!m.truncated)}})}function ut(e,t,n,o,s={},i){let a=[...s.qualityConfig?.switches.codeInputs?(s.codeEvidence??[]).flatMap(f=>{let u=o.repos.find(w=>w.key===f.repo)?.files??{};return ce([f.input],u).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(u=>a.some(w=>w.repo===u.repo&&w.path===u.path))].map(u=>[JSON.stringify([u.repo,u.path]),u])).values()]}));let c=new Set(e.acceptedIds),l=(e.verdicts??[]).map((f,u)=>({fingerprint:Q(n[u]),accepted:c.has(f.id),verdict:f})),d=i?Ye(n,i.verdicts,{sentIds:i.coverage.sentIds,skipped:i.coverage.skipped,recordAcceptance:!0}):void 0,p=new Set(d?.acceptedIds),m=d?.verdicts?.map((f,u)=>({fingerprint:Q(n[u]),accepted:p.has(f.id),verdict:f})),g=i?.coverage.sentIds.map(f=>n[Number(f.slice(1))-1]).filter(Boolean).map(Q),h={coverage:t,verdicts:l,assessments:Hi({findings:n,sources:o,coverage:t,verdicts:l,sawCode:s.sawCode,...i?{shadowVerdicts:m??[],shadowRequestedIds:g}:{}}),...i?{shadow:i}:{}};return e.qualityAudit=h,h}var mn=class extends Error{sent;verdicts;constructor(t,n,o){super(t),this.sent=n,this.verdicts=o}};function Gd(e,t,n){let o=t?.switches.enabled;return{template:st("check",n,t),answerFormat:"check",model:o?t.models.check:Ie,inputs:{checkInput:e},limits:{maxTokens:o?Math.min(t.caps.checkOutputTokens,Ue(e.findings.length)):Ue(e.findings.length),effort:"medium"}}}async function Wd(e,t,n,o){if(t.findings.length===0)return[];let s=!1,i,r=n?.switches.enabled,a=Gd(t,n,o);try{r&&Rt(n,e.tools,o);let c=await T(e,a,o,{maxInputBytes:ot(t.findings.length,Eo(n)),onSend(){s=!0}});if(i=c.verdicts,!zt(i,t.findings.map(l=>l.id)))throw new Error("verdict ids did not match this batch");return c.verdicts}catch(c){throw M(a.template,c,l=>e.rethrow(l)),new mn(c instanceof Error?c.message:"unreadable response",s,i)}}async function yc(e,t,n,o,s){if(o?.done)return o;let i=o?{...o,diagnostics:o.diagnostics??[],retries:o.retries??0}:{cursor:0,verdicts:[],diagnostics:[],retries:0,done:!1},r=s.qualityConfig,a=r?.switches.enabled,c=Eo(r),l=a?r.caps.checkBatchSize:K,d=o&&o.sentIds===void 0?ft(t.slice(0,i.cursor),n,0,c,e.tools):void 0,p=o?.sentIds??d?.findings.map(w=>w.id)??[],m=o?.skipped??d?.skipped??[],g=o?.rejectedBatches??[],h=o?.qualityAudit?.coverage??[],f=w=>a?ut(w,h,t,n,s):void 0;if(i.cursor>=t.length){let w=Ye(t,i.verdicts,{sentIds:p,skipped:m,rejectedBatches:g,...a?{recordAcceptance:!0}:{}}),v=f(w);return{...i,done:!0,sentIds:p,skipped:m,result:w,...v?{qualityAudit:v}:{}}}let u;try{let w=t.slice(i.cursor,i.cursor+l);if(u=ft(w,n,i.cursor,c,e.tools),a&&(h=[...new Map([...h,...Hd(u,w,n,i.cursor)].map(_=>[_.fingerprint,_])).values()]),m=[...new Map([...m,...u.skipped??[]].map(_=>[_.id,_])).values()],!e.available&&u.findings.length)throw new Error("model unavailable");let v=[...i.verdicts,...u.findings.length?await Wd(e.withRetry(i.retries),u,r,s.settings):[]];p=[...new Set([...p,...u.findings.map(_=>_.id)])];let y=Math.min(t.length,i.cursor+l),S=[...new Set([...i.diagnostics,...e.tools.checkDiagnosticsText(u.diagnostics)])],k=y>=t.length,b=k?Ye(t,v,{sentIds:p,skipped:m,rejectedBatches:g,...a?{recordAcceptance:!0}:{}}):void 0;b&&(S=[...new Set([...S,...b.diagnostics??[]])],b.diagnostics=S);let O=b?f(b):a?{coverage:h,verdicts:[],assessments:[]}:void 0;return{cursor:y,verdicts:v,diagnostics:S,retries:0,done:k,sentIds:p,skipped:m,rejectedBatches:g,...b?{result:b}:{},...O?{qualityAudit:O}:{}}}catch(w){M(st("check",s.settings,r),w,b=>e.rethrow(b));let v=w instanceof Error?w.message:"unreadable response";w instanceof mn&&w.verdicts&&u&&(g=[...g,{ids:u.findings.map(b=>b.id),verdicts:w.verdicts}]),w instanceof mn&&w.sent?p=[...new Set([...p,...u?.findings.map(b=>b.id)??[]])]:m=[...m,...u?.findings.map(b=>({id:b.id,reason:`The model was not called: ${v}`}))??[]];let y=[...i.diagnostics,...e.tools.checkDiagnosticsText(u?.diagnostics??[]),v];if(e.available&&i.retries<(a?r.caps.checkMaxRetries:ee))return{...i,sentIds:p,skipped:m,rejectedBatches:g,diagnostics:y,retries:i.retries+1,...a?{qualityAudit:{coverage:h,verdicts:[],assessments:[]}}:{}};let S=Ye(t,i.verdicts,{sentIds:p,skipped:m,rejectedBatches:g,failure:Qn,...a?{recordAcceptance:!0}:{}});S.diagnostics=y;let k=f(S);return{...i,sentIds:p,skipped:m,rejectedBatches:g,diagnostics:y,done:!0,result:S,...k?{qualityAudit:k}:{}}}}function Xd(e){let t=e.findingCheck?.original??[];if(!e.sourceNotes?.done)return t;let n=new Map(e.sourceNotes.findings.map(o=>[Q(o),o.sourceNotes]));return t.map(o=>n.has(Q(o))?{...o,sourceNotes:n.get(Q(o))}:o)}function Sc(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=Xd(e),i=ut({...o},t.coverage??[],s,{repos:e.repos??[],fragments:[]},{qualityConfig:t.config,codeEvidence:t.codeEvidence,readingSkipped:t.readingSkipped,sawCode:vt(e)},t.shadow);return{...e,findingQuality:{...t,...i}}}function xc(e,t,n){return!te(e,t).findingCheck||n.length===0?t:{...t,findingCheck:{original:n,state:{cursor:0,verdicts:[],diagnostics:[],retries:0,done:!1}}}}async function bc(e,t,n){let o=t.findingCheck;if(!o?.state||!o.original)return null;if(o.state.done)return{data:t,done:!0};let s=t.findingQuality?.config,i;try{let r=t.repos??[],a=V(t);i=await yc(n,o.original,{repos:r,fragments:a},o.state,{settings:e,qualityConfig:s,codeEvidence:t.findingQuality?.codeEvidence,readingSkipped:t.findingQuality?.readingSkipped,sawCode:vt(t)})}catch(r){M(st("check",e,s),r,d=>n.rethrow(d)),me(r);let a=[...o.state.diagnostics??[],"unreadable source map"],c=Ye(o.original,o.state.verdicts,{sentIds:o.state.sentIds??[],skipped:o.state.skipped??[],rejectedBatches:o.state.rejectedBatches,failure:Qn,...s?.switches.enabled?{recordAcceptance:!0}:{}});c.diagnostics=a;let l=s?.switches.enabled?ut(c,o.state.qualityAudit?.coverage??[],o.original,{repos:t.repos??[],fragments:[]},{qualityConfig:s,codeEvidence:t.findingQuality?.codeEvidence,readingSkipped:t.findingQuality?.readingSkipped,sawCode:vt(t)}):void 0;i={...o.state,diagnostics:a,done:!0,result:c,...l?{qualityAudit:l}:{}}}return{done:i.done,data:{...t,findingCheck:{...o,state:i},...t.findingQuality&&i.qualityAudit?{findingQuality:{...t.findingQuality,...i.qualityAudit}}:{},...i.result?{findingsRaw:i.result.kept,warnings:[...t.warnings??[],...i.result.warnings]}:{}}}}var Jd=.03,vc=pe({},{template:"judge-code-prompt"},"Check possible agents in code",F.mechanical,3e3,200).usd,Xs=3,Oc=e=>e.replace(/\s+/g," ").trim(),_o=e=>Math.round(e*1e6);function Vd(e){return{template:"judge-code-prompt",answerFormat:"codeJudge",model:F.mechanical,inputs:e,limits:{effort:"medium",maxTokens:200}}}async function _c(e,t,n){let o=_o(n),s=await H(t,Xs,async i=>{if(!e.available)return{fingerprint:i.fingerprint,why:"unavailable"};if(o+_o(vc)>_o(Jd))return{fingerprint:i.fingerprint,why:"limit"};o+=_o(vc);try{let r=await T(e,Vd({location:i.location,text:i.text,usage:i.usage,at:{path:i.candidate.prompt.path,line:i.candidate.prompt.line}}));return{fingerprint:i.fingerprint,isPrompt:r.isSystemPrompt,name:r.isSystemPrompt?Oc(r.name).slice(0,40).trim():"",reason:Oc(r.reason),model:F.mechanical}}catch(r){return M("judge-code-prompt",r,a=>e.rethrow(a)),{fingerprint:i.fingerprint,why:"unavailable"}}},e);return{verdicts:s.filter(i=>"isPrompt"in i),failed:s.filter(i=>"why"in i),spentUsd:o/1e6}}function Cc(e,t,n,o=""){let s=new Map;if(e?.enabled&&e.grouped){let a=new Map(_i(e,t).flatMap(d=>d.keys.map(p=>[p,d.node.id]))),c=new Map,l=(d,p)=>JSON.stringify([Ei(d,t),p]);for(let d of e.byRepo[t]??[]){let p=d.codeInputsJson?.step;if(!(!d.groupKey||!p))for(let m of[p.at,p.prompt].filter(g=>g!==void 0)){let g=l(m.path,m.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})),m=p.length?p:d.sourceRef?[{path:d.sourceRef.path,line:d.sourceRef.line??1}]:[],g=new Set(m.flatMap(h=>[...c.get(l(h.path,h.line))??[]]));g.size&&s.set(d.id,g.size===1?[...g][0]:null)}}let i={...n,nodes:n.nodes.filter(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}]:[]})},r=Ci(e,t,i,o);return{fragment:{...i,nodes:[...i.nodes,...r.nodes],edges:[...i.edges,...r.edges]},files:r.files,addedNodes:r.nodes}}var Co=e=>e.CF_CODE_PROMPT_LOADERS!=="0";var Ic=40,$o=10,$c=/(agent|prompt|llm|model|chain|fix|plan|assist|bot|ai)/i,Qd=new Set(["instruction","instructions","plan","plans","planning","bot","bots","chatbot","openai","anthropic","claude","gemini","langchain","fix","fixes","fixer","autofix","bugfix","hotfix"]),Yd=new Set(["model","models","chat","completion","completions","chain","chains","ai","genai","tool","tools","declaration","declarations"]),Zd=new Set(["generated","autogenerated","pb2","e2e"]),Rc=new Set(["test","tests","testing","spec","specs","doc","docs","documentation"]),ef=/agent|prompt|llm|assist|planner/,tf=new Set(["agent","agents","prompt","prompts","system","instructions"]);function zs(e){return e.replace(/([a-z])([A-Z])/g,"$1 $2").split(/[^a-zA-Z]+/).map(t=>t.toLowerCase()).filter(t=>t.length>=4&&!tf.has(t))}function nf(e){let t=e.filter(s=>zr(s.rel)&&Xr.test(s.rel.slice(0,s.rel.lastIndexOf("/"))));if(t.length<2)return;let n=new Set(t.flatMap(s=>zs(s.rel.split("/").at(-1).replace(/\.[^.]+$/,"")))),o=s=>s.some(i=>[...n].some(r=>i.startsWith(r)||r.startsWith(i)));for(let s of e){let i=s.rel.split("/"),r=i.pop().replace(/\.[^.]+$/,"");s.promptRank=Rn(s.rel)?o(zs(r))?0:o(i.flatMap(zs))?1:2:2}}function of(e){return e.replace(/([A-Z]+)([A-Z][a-z])/g,"$1 $2").replace(/([a-z])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean)}function sf(e){return e.some(t=>Qd.has(t)||ef.test(t))||e.some((t,n)=>t==="open"&&e[n+1]==="ai")}function rf(e,t,n){return!t&&e[0]?.startsWith("test")?!0:e.some(o=>Rc.has(o))?!n||!t&&Rc.has(e.at(-1)):!1}function af(e){let t=e.rel.split("/"),n=t.map(of);if(t.slice(0,-1).some(i=>i.toLowerCase()==="gen")||/\.gen\./i.test(t.at(-1))||n.some(i=>i.some(r=>Zd.has(r))))return 3;let s=n.some(sf);return n.some((i,r)=>rf(i,r===n.length-1,s))?3:(e.promptRank??2)<2||s?0:n.some(i=>i.some(r=>Yd.has(r)||r.includes("fix")))?1:2}function cf(e,t,n,o){let s=n?Number(cs(t.rel))-Number(cs(e.rel)):0;if(s)return s;if(o){let c=e.sourceRank-t.sourceRank;if(c)return c}let i=(e.promptRank??2)-(t.promptRank??2);if(i)return i;if(!o){let c=$c.test(e.rel)?0:1,l=$c.test(t.rel)?0:1;if(c!==l)return c-l}let r=e.rel.split("/").length,a=t.rel.split("/").length;return r!==a?r-a:e.entry.size!==t.entry.size?e.entry.size-t.entry.size:e.entry.path<t.entry.path?-1:e.entry.path>t.entry.path?1:0}function Pc(e,t,n="",o=!1){let s=Fr(e),i=[],r=[],a=new Map(t.map(g=>[g.path,g.size]));for(let g of t){let h=Y(e,g,{purpose:"code-scan",route:"github",root:n,listing:a});h.admitted||r.push({path:g.path,reason:h.reason}),(h.admitted||h.reason==="too-large")&&i.push({entry:g,rel:Je(g.path,n),tooLarge:!h.admitted,sourceRank:2})}if(Co(e)&&nf(i),s)for(let g of i)g.sourceRank=af(g);i.sort((g,h)=>cf(g,h,Pn(e),s));let c=[],l=[],d=0,p=0,m=!1;for(let{entry:g,tooLarge:h}of i){if(h){d+=1,o&&l.push({path:g.path,reason:"too-large"});continue}if(c.length>=se.codeScan.files||p+g.size>se.codeScan.bytes){m=!0,r.push({path:g.path,reason:"scan-limit"}),o&&l.push({path:g.path,reason:"scan-limit"});continue}c.push(g),p+=g.size}return{plan:c,total:i.length,skippedLarge:d,truncated:m,refused:r,...o?{skippedFiles:l}:{}}}function Ro(e,t,n="",o=!1,s){return lf(e,t,n,o,s).state}function lf(e,t,n="",o=!1,s=Zi(e,t.map(i=>i.path),n)){let i=Pn(e),r=Co(e),a=s&&new Set(s),{plan:c,total:l,skippedLarge:d,truncated:p,skippedFiles:m,refused:g}=Pc(e,a?t.filter(f=>a.has(f.path)):t,n,o),h=ti(e,c.map(f=>f.path),n);return{state:{plan:c,cursor:0,hits:[],total:l,skippedLarge:d,truncated:p,...m?{skippedFiles:m}:{},...i?{sdk:{layouts:!0}}:{},...oi(e)?{}:{promptFunctions:!1},...r?{}:{promptLoaders:!1},sentPrompt:Mr(e),...Tr(e)?{coverageLinks:!0}:{},...h.length?{documentedPaths:h}:{}},refused:g}}function hn(e){return e.cursor>=e.plan.length}async function Ac(e,t,n={batch:Ic,parallel:$o}){let o=e.plan.slice(e.cursor,e.cursor+n.batch),s=await H(o,n.parallel,t),i=e.sdk&&{...e.sdk,openaiAgents:e.sdk.openaiAgents===!0||o.some((l,d)=>s[d]!==null&&Vr(l.path,s[d]))},r=o.map((l,d)=>s[d]===null?null:ni(l.path,s[d],{sdk:i,promptFunctions:e.promptFunctions!==!1,promptLoaders:e.promptLoaders!==!1,coverageLinks:e.coverageLinks===!0,sentPrompt:e.sentPrompt===!0,documented:e.documentedPaths?.includes(l.path)===!0})),a=r.filter(l=>l!==null),c=e.skippedFiles&&[...e.skippedFiles,...o.filter((l,d)=>r[d]===null).map(({path:l})=>({path:l,reason:"unreadable"}))];return{...e,cursor:e.cursor+o.length,hits:[...e.hits,...a],...c?{skippedFiles:c}:{},...i?{sdk:i}:{}}}function Fc(e){return{...ei(e.hits),...e.skippedFiles?{skippedFiles:e.skippedFiles}:{}}}function mS(e){return{scanned:e.hits.length,total:e.total,truncated:e.truncated,skippedLarge:e.skippedLarge}}var pf=10,df=2e5;function ff(e,t,n,o){let s=new Set(At(e,t,n,o).window),i=[],r=0;for(let[a,c]of t.possible.entries())if(!(a>=pf&&!s.has(c))){if(r+=JSON.stringify(c).length+1,r>df)break;i.push(c)}return i}var Mc=1,Tc=2;function Lc(e,t,n,o=new Map){let s=Ke()+10,i=t.omitted??{strong:0,possible:0},r=At(e,t,n,o);if(r.page){let p=t.agentInventory??{strong:t.strong,possible:t.possible};return{...t,agentInventory:p,agentPage:r.page,strong:r.strong,possible:r.window,callsWithoutPrompt:t.callsWithoutPrompt.slice(0,Mc),repoModelIds:t.repoModelIds.slice(0,Tc),omitted:{strong:p.strong.length-r.strong.length,possible:p.possible.length-r.window.length},skippedFiles:D(t.skippedFiles,r.skippedFiles),notRead:r.notRead,notReadMore:r.notReadMore}}let a=new Set(r.skipped),c=t.notRead!==void 0,l=t.strong.filter(p=>!a.has(p)),d=ff(e,t,n,o);return{...t,strong:l.slice(0,s),possible:d,callsWithoutPrompt:t.callsWithoutPrompt.slice(0,Mc),repoModelIds:t.repoModelIds.slice(0,Tc),omitted:{strong:i.strong+Math.max(0,l.length-s),possible:i.possible+Math.max(0,t.possible.length-d.length)},...!c||t.skippedFiles?{skippedFiles:D(t.skippedFiles,c?[]:r.skippedFiles)}:{},notRead:c?t.notRead:r.notRead,notReadMore:c?t.notReadMore??0:r.notReadMore}}var Nc=e=>e.includes("/")?e.slice(0,e.lastIndexOf("/")):"",jc=e=>new Map(e.map(t=>[t.path,t.size])),uf=(e,t,n=new Map)=>Lc(e,Fc(t),jc(t.plan),n),Dc=e=>e.strong.length===0&&e.possible.length===0;function Bc(e,t){let{paths:n,entries:o,root:s,scanFlag:i,modelReader:r,recordSkips:a=!1}=t,c=et(e,{phase:"start",paths:n,root:s,scanFlag:i});if(c.kind==="marker"){let l=c.scanIfBare,d=l?Ro(e,o,s,a,c.scanPaths):void 0;return d&&c.scanPaths&&(d.markerDecision=c,d.explicitMarkerScan=Ro(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",...Io(e,{scan:Ro(e,o,s,a,c.scanPaths)},r)}}function Kc(e,t,n){return{scan:{...t,hits:[]},ranked:uf(e,t,n.alreadyRead)}}async function qc(e,t,n,o){let s=await Ac(t,n,o.size);if(!hn(s))return{scan:s,selection:null};let{scan:i,ranked:r}=Kc(e,s,o);return{scan:i,selection:{ranked:r,paths:Ua(e,r,jc(s.plan),o.alreadyRead),refused:s.refused??[]}}}function Io(e,t,n=!1){let{scan:o}=t;return!o||!hn(o)||t.ranked?t:{...t,...Kc(e,o,{modelReader:n,alreadyRead:new Map})}}function Uc(e,t,n,o){let s=new Map(n.map(c=>[c.path,c])),i=new Set(o),r=[],a=[];for(let c of t){let l=s.get(c);if(!l||i.has(c))continue;i.add(c);let d=Y(e,l,{purpose:"pointer",route:"github"});d.admitted?r.push(l):a.push({path:c,reason:d.reason})}return{entries:r,refused:a}}function mt(e,t,n,o,s=1/0){let i=Uc(e,n,o,new Set(t.filter(p=>p.readBytes===void 0).map(p=>p.path))),r=s,a=i.entries.filter(p=>p.size>r?(i.refused.push({path:p.path,reason:"total"}),!1):(r-=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:i.refused}}var Hc=20;function NS(e,t){return t==="hosted-import"?{...e,CF_IMPORT_CALLS:"0"}:e}function Gc(e,t,n,o){t.requestedPaths.push(...n);let s=mt(e,t.selected,n,o);t.selected=s.selected,t.refused.push(...s.refused)}function Wc(e,t,n){let o=e.hosted;if(!o)return;let s=new Set(t),i=e.selected.filter(r=>s.has(r.path));n==="code"?o.codePaths&&(o.codePaths=[...new Set([...o.codePaths,...i.map(r=>r.path)])]):o.weakCodeFallback&&(e.conventionPaths=[...new Set([...e.conventionPaths,...i.map(r=>r.path)])],o.fallback={...o.fallback,selectedPaths:[...new Set([...o.fallback.selectedPaths,...i.map(r=>r.path)])],shaByPath:{...o.fallback.shaByPath,...Object.fromEntries(i.map(r=>[r.path,r.ref]))}})}function jS(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=>we(s,t.ranked.repoModelIds,e).map(i=>i.path)));t.conventionPaths=[...new Set([...t.conventionPaths,...t.selected.filter(s=>!o.has(s.path)).map(s=>s.path)])]}}function Xc(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 zc(e,t=Pt(e.ranked,e.scan)){return t.agents.length>0}function mf(e){return e.hosted?.weakCodeFallback&&!e.hosted.codeMode?e.hosted.fallback.selectedPaths:[]}function DS(e,t){if(e.hosted&&(e.hosted.codePaths=t.map(s=>s.path)),!e.hosted?.weakCodeFallback||e.hosted.codeMode||zc(e)){Xc(e,t);return}let n=new Map([...e.entries,...e.selected].map(s=>[s.path,s])),o=new Map(mf(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 BS(e,t){let n=e.hosted;if(!n?.weakCodeFallback||!n.codePaths||e.markerKind&&e.markerKind!=="bare")return;let o=new Map([...e.entries,...e.selected].map(i=>[i.path,i]));zc(e,t)?Xc(e,n.codePaths.map(i=>o.get(i))):(e.selected=n.fallback.selectedPaths.map(i=>o.get(i)),e.cursor=0,n.codeMode=!1,n.needsExtraction=n.fallback.needsExtraction);let s=new Set(e.selected.map(i=>i.path));e.files=Object.fromEntries(Object.entries(e.files).filter(([i])=>s.has(i)))}function hf(e,t){if(!$n(e))return;let n=new Set(t.entries.map(i=>i.path)),o=Object.fromEntries(Object.entries(t.files).filter(([i])=>t.selected.some(r=>r.path===i&&r.readBytes===void 0))),s=new Set(Pi(e,[...n],o));for(let[i,r]of Object.entries(t.files)){let a=Y(e,{path:i,text:r},{...t.admission,purpose:"override",route:"github",root:t.root,listing:n,managedFiles:t.files});(!a.admitted||s.has(i))&&(delete t.files[i],t.refused.push({path:i,reason:a.admitted?"unreadable":a.reason}))}}function KS(e,t,n){hf(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)),i=new Set(t.requestedPaths),r=D(t.selectionRefused.filter(a=>!i.has(a.path)),t.refused).filter(a=>!s.has(a.path));return{state:t,requestedReads:n,files:t.files,settled:o,refused:r,treeTruncated:t.treeTruncated}}function Jc(e,t,n,o,s,i){let r=t.ranked&&ke(e)?At(e,t.ranked,o,s,{files:n,root:t.root,replacementBytes:i}):{paths:[],refused:[],manifests:[]};if(!$n(e))return r;let a=new Map(s);for(let p of r.paths)o.has(p)&&a.set(p,Math.max(a.get(p)??0,o.get(p)));let c=Yt(a,i);for(let p of r.paths)c.chosen.add(p);let d=to(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([...r.paths,...d.flatMap(p=>p.files.map(m=>m.path))])],refused:[...r.refused,...d.flatMap(lt)],manifests:[...r.manifests??[],...d]}}async function Vc(e,t,n){t.manifestReadPaths??=t.selected.slice(0,t.cursor).filter(u=>u.readBytes===void 0).map(u=>u.path);let o=new Set(t.selected.filter(u=>u.readBytes===void 0).map(u=>u.path)),s=Object.fromEntries(Object.entries(t.files).filter(([u])=>o.has(u))),i=new Map(t.entries.map(u=>[u.path,u.size])),r=new Map(Object.entries(t.files).map(([u,w])=>[u,Buffer.byteLength(w)]));for(let[u,w]of Object.entries(s))i.set(u,Buffer.byteLength(w));let a=Jc(e,t,s,i,r),c=new Set(t.manifestReadPaths),l=a.paths.filter(u=>s[u]===void 0&&!c.has(u)),d=new Map(t.selected.filter(u=>u.readBytes!==void 0).map(u=>[u.path,u]));t.requestedPaths.push(...l.filter(u=>d.has(u))),Gc(e,t,l.filter(u=>!d.has(u)),t.entries);let p=new Set(l),m=new Map(t.entries.map(u=>[u.path,u])),g=t.selected.filter(u=>p.has(u.path)).map(u=>d.has(u.path)?m.get(u.path):u).slice(0,Hc);if(g.length){let u=await H(g,4,async k=>{let b=Y(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(i);g.forEach((k,b)=>{u[b]!==null&&w.set(k.path,Buffer.byteLength(u[b]))});let v=new Map(g.filter((k,b)=>d.has(k.path)&&u[b]!==null).map(k=>[k.path,r.get(k.path)])),y=Jc(e,t,s,w,r,v),S=new Set(y.paths);g.forEach((k,b)=>{u[b]!==null&&(S.has(k.path)?(t.files[k.path]=u[b],t.selected=t.selected.map(O=>O.path===k.path?k:O)):t.refused.push(y.refused.find(O=>O.path===k.path)??{path:k.path,reason:"total"}))});return}let h=new Map((a.manifests??[]).map(u=>{let v=u.files.filter(y=>s[y.path]===void 0).map(y=>t.refused.find(S=>S.path===y.path)??{path:y.path,reason:"missing"});return[u.agentId,{...u,files:u.files.filter(y=>s[y.path]!==void 0),refused:[...u.refused,...v]}]})),f=u=>{let w=h.get(L(u.prompt));return w?{...u,manifest:w}:u};t.ranked&&(t.ranked={...t.ranked,strong:t.ranked.strong.map(f),possible:t.ranked.possible.map(f)}),Wc(t,[...h.values()].flatMap(u=>u.files.map(w=>w.path)),"code"),t.refused.push(...[...h.values()].flatMap(lt)),t.phase="done"}async function Qc(e,t){let n=t.admission.exclusions?.length?await t.listing():void 0,o=t.config?Qi(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]:D(l,d),i=s(t.priorRefused,o.refused),{kept:r}=ye(e,o.paths),a=t.requestedMode==="kept-and-refused"?[...o.refused.map(l=>l.path),...r]:[];if(!r.length)return{refused:i,requestedPaths:a};let c=mt(e,t.selected,r,n??await t.listing(),se.candidateFetch.pointers);return i=s(i,c.refused),{selected:c.selected,refused:i,requestedPaths:a}}async function Po(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 Un)||s.reason!=="secret-content")throw s;return n.push({path:e.path,reason:s.reason}),null}}function Ao(e,t){return t.codeAgents??Yn(e)}function Ix(e,t,n,o,s,i=!1){let r=yt(e)?{agentConfigurations:Gn(e,t.map(d=>d.path),o)}:{},a=[],c=t.filter(d=>{let p=Y(e,d,{purpose:"pointer",route:"github"});return p.admitted||a.push({path:d.path,reason:p.reason}),p.admitted}),l=Bc(e,{paths:c.map(d=>d.path),entries:t,root:o,scanFlag:s.scan,modelReader:i});if(l.kind==="marker"){let{markerPath:d,scanNeeded:p,scan:m}=l,g=c.find(f=>f.path===d),h=n.some(f=>f.path===d);return{...r,markerPath:d,refused:a,scanNeeded:p,...m?{scan:m}:{},...g&&!h?{selected:[...n,g]}:{}}}return l.kind==="scan"?{...r,scanNeeded:!0,scan:l.scan,refused:a,...l.ranked?{ranked:l.ranked}:{}}:r}function Yc(e){return!!(e.root&&e.ranked&&Dc(e.ranked)&&e.plumbing===void 0)}var Js=e=>(e.listAll??e.list).call(e);async function gf(e,t,n,o){let s=t.markerPath,i=(t.selected??[]).find(h=>h.path===s);if(!i)throw new Error(`counterfact.json ${s} is not in the selection`);let r={...t.files??{}},a=[],c=r[s]??await Po(i,h=>n.read(h),a,t.refused);c!==null&&(r[s]=c);let l=et(e,{phase:"read",pending:t.scan?.markerDecision??{kind:"marker",markerPath:s,scanIfBare:!!t.scanNeeded},text:c}),d=l.markerKind,{scan:p,...m}=t,g={...m,files:r,markerKind:d,...a.length?{refused:D(t.refused,a)}:{}};if(l.scan&&p&&!p.markerDecision)return Io(e,{...g,scan:p},o);if(d!=="bare"){let{config:h}=Zn(r[s]),f=await Qc(e,{config:h,markerDir:Nc(s),selected:t.selected??[],admission:n.admission??{},modelReader:o,priorRefused:t.refused??[],refusalMode:"merge",requestedMode:"none",listing:()=>Js(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 u=new Set(l.scanPaths),w=f.plan.filter(v=>u.has(v.path));return Io(e,{...g,scan:{...f,plan:w,total:f.total-f.plan.length+w.length}},o)}return g}async function kf(e,t,n,o){let s=[],{scan:i,selection:r}=await qc(e,t.scan,c=>Po(c,l=>n.read(l),s,t.refused),{modelReader:o,alreadyRead:new Map});if(!r)return{...t,scan:i,...s.length?{refused:D(t.refused,s)}:{}};let a=mt(e,t.selected??[],r.paths,i.plan);return{...t,ranked:r.ranked,scan:i,selected:a.selected,refused:D(t.refused,s,r.refused,a.refused)}}async function wf(e,t,n){let o=t.root,s=await Js(n),i=si(t.files??{},s.map(d=>d.path),o),{selected:r,refused:a}=mt(e,[],i,s),c=await H(r,$o,d=>Po(d,p=>n.read(p),a,t.refused)),l=ri(o,Object.fromEntries(r.flatMap((d,p)=>c[p]===null?[]:[[d.path,c[p]]])),e);return{...t,plumbing:l,refused:D(t.refused,a)}}async function yf(e,t,n){let o=t.ranked?.manifestProgress,s=o?.entries??await Js(n),i={version:1,profile:"hosted-import",phase:"manifest",root:t.root??"",admission:n.admission,entries:s,selected:[...t.selected??[]],cursor:t.cursor??0,files:{...t.files},ranked:t.ranked,conventionPaths:[],selectionRefused:[],requestedPaths:[],refused:[...t.refused??[]],treeTruncated:!1,decision:{kind:"settled",markerPath:null,markerKind:null,scan:!1},...o?{manifestReadPaths:[...o.readPaths]}:{}};return await Vc(e,i,async r=>{try{return await n.read(r)}catch(a){if(!(a instanceof Un))throw a;return i.refused.push({path:r.path,reason:a.reason}),null}}),{...t,files:i.files,selected:i.selected,cursor:i.selected.length,ranked:{...i.ranked,manifestProgress:{entries:s,readPaths:i.manifestReadPaths??[],done:i.phase==="done"}},refused:D(i.refused)}}function Zc(e,t){return!!(t.ranked&&ke(e)&&!t.ranked.manifestProgress?.done)}function Px(e,t){return Yc(t)||Zc(e,t)}async function Ax(e,t,n,o=!1){if(n=Fi(e,n),t.markerPath&&!t.markerKind)return gf(e,t,n,o);if(t.scan&&!hn(t.scan))return kf(e,t,n,o);let s=(t.cursor??0)>=(t.selected??[]).length;return s&&Yc(t)?wf(e,t,n):s&&Zc(e,t)?yf(e,t,n):null}function Fx(e){return e.root&&e.plumbing?[`${e.key}: ${ii(e.root,e.plumbing)}`]:[]}function gn(e,t,n,o=!1,s,i="",r){let a=So(e,t,n,{modelReader:o,projectAgents:s},{checks:r}),c=Me(e,a),l=Cc(s,t.key,c.fragment,i),{fragment:d,warnings:p}=Dn(l.fragment,t.key);return{fragment:d,warnings:[...$i(t.key,c.warnings,l.addedNodes),...p],...l.addedNodes.length?{virtualFiles:l.files}:{}}}var Fo=e=>(e.ranked?.possible.length??0)>0;async function el(e,t,n){let o=[];try{o=await t?.()??[]}catch(i){n.rethrow(i)}let s=new Set((e.repos??[]).filter(Fo).flatMap(i=>i.ranked.possible.map(r=>pn(i.key,r,i.files??{}).fingerprint)));return o.filter(i=>s.has(i.fingerprint))}function Sf(e,t,n,o){let s=new Set(n.map(r=>r.fingerprint)),i={due:[],overCap:[],ineligible:[]};for(let r of(t.repos??[]).filter(Fo)){let a=Ka(e,{candidates:r.ranked.possible,files:r.files??{},repoKey:r.key,stored:s,flags:o,modelReader:t.modelReader??!1,hasClient:!0,page:r.ranked.agentPage,agentCountSoFar:r.ranked.strong.length,alreadyDue:i.due.length});i.due.push(...a.due),i.overCap.push(...a.overCap),i.ineligible.push(...a.ineligible)}return i}function Vs(e,t){let n=[...t];return e.filter(o=>{let s=n.indexOf(o);return s<0?!0:(n.splice(s,1),!1)})}function tl(e,t,n,o){let s=[...t.mapped??[]],i=[...t.warnings??[]];return(t.repos??[]).forEach((r,a)=>{if(!Fo(r))return;let c=gn(e,r,n,t.modelReader??!1,t.projectAgents),l=gn(e,r,n,t.modelReader??!1,t.projectAgents,"",o);s[a]=l.fragment,i=[...Vs(i,Vs(c.warnings,l.warnings)),...Vs(l.warnings,c.warnings)]}),{mapped:s,warnings:i}}async function nl(e,t,n){let o=Ao(e,t);if(t.codeChecks?.done||!(t.repos??[]).some(Fo))return{data:t,pending:!1};if(!o.model){let g=await el(t,n.load,n.llm);return{pending:!1,data:{...t,...tl(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 el(t,n.load,n.llm)},i=Sf(e,t,s.stored,o),r=i.due.slice(s.cursor,s.cursor+Xs),a=await _c(n.llm,r,s.spentUsd),c=s.cursor+r.length,l=i.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 m=new Set(p.map(g=>g.fingerprint));for(let{fingerprint:g}of i.overCap)m.has(g)||p.push({fingerprint:g,why:"limit"});return{pending:c>s.cursor,data:{...t,...tl(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 Mt=F.mechanical,Qs=!1,ol=200;function Ys(e){return e.length>ol?`${e.slice(0,ol)}\u2026`:e}function xf(e,t,n,o){if(!t.length)return null;let s=[...e.site?[{repo:e.siteRepo??null,file:e.site.path,line:e.site.line,excerpt:e.excerpt}]:[],...Zs(e).map(i=>({repo:i.repo??e.siteRepo??null,file:i.path,line:i.line,excerpt:i.excerpt}))];return uo(s,o,t.flatMap(i=>i.inputs.map(r=>({repo:i.repo,unitKey:i.unitKey,input:r,files:i.files}))),t[0].agentRows,n)?null:"Code quotes are outside one agent's admitted source locations."}function Zs(e){return e.otherSites??[]}function bf(e,t){if(!ui(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+Zs(e).length;return Ut(e.category)===2&&n<2?`${e.category} needs two quoted sites, found ${n}`:null}function sl(e,t,n){let o={title:t.title,category:t.category??null,reason:Ys(n)};e.push(o)}function vf(e,t,n){let o={title:t.title,category:t.category??null,reason:Ys(n)};e.push(o)}function Of(e,t){return{template:"scope-items",answerFormat:"structureScope",model:Mt,inputs:{scopeRuleId:t.scopeRuleId??"",items:e},limits:{...t.maxTokens===void 0?{}:{maxTokens:t.maxTokens}}}}async function rl(e,t,n){try{let o=await T(e,Of(t,n)),s=new Map(o.verdicts.map(i=>[i.index,i]));return o.verdicts.length!==t.length||s.size!==t.length||t.some((i,r)=>!s.has(r))?null:new Map([...s].map(([i,r])=>[i,{inScope:r.inScope,reason:Ys(r.reason)}]))}catch(o){return M("scope-items",o,s=>e.rethrow(s)),null}}function Ef(e){return{category:e.category??null,path:e.site?.path??"?",title:e.title,cause:e.cause,excerpt:e.excerpt??"",otherSites:Zs(e).map(t=>({path:t.path,excerpt:t.excerpt??""}))}}function _f(e,t,n=oo(t)){return{template:"scope-findings",answerFormat:"scope",model:t.qualityConfig?.switches.enabled?t.qualityConfig.models.scope:Mt,inputs:{codeSources:n.sources,codeFiles:n.files,items:e}}}async function Cf(e,t,n,o,s){let i=[];for(let p=0;p<n.length;p+=K)i.push(n.slice(p,p+K));let r=e.CF_PARALLEL_SCOPE_CHECK==="0"?1:o.scopeConcurrency??4,a=await H(i,r,async(p,m)=>{let g=[],h=m+1;for(let f=0;f<=ee;f++)try{let u=await T(t,_f(p,o,s),e),w=Ui(u.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(u){M("scope-findings",u,w=>t.rethrow(w)),f===ee&&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[m,g]of p.verdicts)c.set(m,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 il(e,t,n,o={}){let s=[],i=[],r=[],a=oo(o);for(let[d,p]of n.entries()){let m=bf(p,e)??xf(p,a.scopes,e,o.graph);m?sl(s,p,m):r.push({id:`f${d+1}`,finding:p})}if(r.length===0)return{kept:[],dropped:s,ran:!0,flagged:i};let c=await Cf(e,t,r.map(({id:d,finding:p})=>({id:d,...Ef(p)})),o,a),l=[];return r.forEach(({id:d,finding:p})=>{let m=c.verdicts.get(d);if(!m||m.inScope){l.push(p);return}Qs?sl(s,p,m.reason):(vf(i,p,m.reason),l.push(p))}),{kept:l,dropped:s,ran:c.ran,flagged:i,...c.diagnostics.length?{diagnostics:c.diagnostics}:{},...c.missingIds.length?{missingIds:c.missingIds}:{}}}function al(e,t,n=new Set){if(!t)return 1;let o=e.reduce((i,r)=>i+r.size,0),s=$f(e,n);return Na(o,s,15e4,4)}function $f(e,t=new Set){return e.filter(n=>t.has(n.path)||Gr(n.path)).reduce((n,o)=>n+o.size,0)}function ob(e,t){return t>1?Math.min(e,6e4):0}function Eb(e,t,n){let o=fe(e).multiPass,s=n?qs(n.repos??[],Ge(V(n)),o,e,{graph:Le(V(n)),codeEvidence:un(bo(n))}).passes.length:al([...t],o),i=wa(e,s,Ks(s),8e5);return{findings:i.findings,calls:[i.derive,U(e,"scope-findings","scope",Mt,Math.ceil(i.findings/K)*(ee+1),8e5),...i.check?[i.check]:[]]}}function er(e,t){return te(e,t).sourceNotes&&Array.isArray(t.findingsRaw)&&t.findingsRaw.length>0?"explaining_sources":"structuring"}var _b=async(e,t)=>{t.progress.assertHeld(),t.progress.signal?.throwIfAborted();let{settings:n}=e,{state:o}=e,s=await He(t),i=be(t.model,s,t.progress.rethrow,t.progress.signal,n),r=await bc(n,o,i);if(r){let y=e.execution.secondOpinion;if(r.done&&y&&o.findingQuality?.config.switches.secondOpinion){if(!o.findingCheck?.state?.done)return{set:ae(r.data),clear:[],next:"inspecting"};let S=o.findingCheck,k=o.findingQuality,b=await Ws(S.state.result,S.state,S.original,{repos:o.repos??[],fragments:V(o)},{settings:n,qualityConfig:k.config,codeEvidence:k.codeEvidence,readingSkipped:k.readingSkipped,sawCode:o.sawCode??k.sawCode,secondOpinion:{...y,oneBatch:!0,llm:be(t.secondOpinionModel??null,s,t.progress.rethrow,t.progress.signal,n)},onCheckpoint:async _=>t.progress.checkpoint({findingCheck:{...S,state:_},..._.qualityAudit?{findingQuality:{...k,..._.qualityAudit}}:{}})}),O={...r.data,findingCheck:{...S,state:b},...b.qualityAudit?{findingQuality:{...k,...b.qualityAudit}}:{}};return{set:ae(O),clear:[],next:b.qualityAudit?.shadow?.done===!1?"inspecting":er(n,O)}}return{set:ae(r.data),clear:[],next:r.done?er(n,r.data):"inspecting"}}let a=await nl(n,o,{llm:i,load:t.context.loadCodeVerdicts});if(a.pending)return{set:ae(a.data),clear:[],next:"inspecting"};if(o=a.data,!t.model)throw new le("llm","llm gone mid-job");let c=V(o),l=Le(c),d=await gc(n,{data:o,graph:l,fragments:c,llm:i,checkpoint:t.progress.checkpoint,progress:t.progress,forLocal:e.execution.forLocal,parallel:ro(n,e.execution)});if(!d.done)return{set:ae(d.data),clear:[],next:"inspecting"};let p=_e(d.findings,qe(o),We(d.data),n),m=await il(n,i,p.findings,{graph:l,qualityConfig:d.data.findingQuality?.config,codeEvidence:fc(d.data,d.plan,d.readByRepo,n),scopeConcurrency:e.execution.scopeConcurrency}),g=m.dropped.length,h=m.flagged.length,f=[...p.warnings,...d.plan.warnings];g&&f.push(`${g} ${A(g,"finding")} removed as out of scope`),h&&f.push(`${h} ${A(h,"finding")} flagged by the scope check's model pass, but kept \u2014 that verdict is not enforced`),m.ran||f.push("the scope check did not run; findings were kept unchecked");let u=hc(d.plan);u&&f.push(u),d.shadowed.length&&f.push(`${d.shadowed.length} ${A(d.shadowed.length,"file was","files were")} not analysed because another repository has a file at the same path: ${d.shadowed.map(y=>`${y.repo}:${y.path}`).join(", ")}`);let w=Fn(n)?{sawCode:qi(d.readByRepo)}:{},v=xc(n,{...d.data,...w,...d.data.findingQuality?{findingQuality:{...d.data.findingQuality,...w}}:{},findingsRaw:m.kept,scopeCheck:{dropped:g,ran:m.ran,flagged:h,...m.diagnostics?.length?{diagnostics:m.diagnostics}:{}},readPaths:d.readByRepo,warnings:[...d.data.warnings??[],...f]},m.kept);return{set:ae(v),clear:[],next:v.findingCheck?.state&&!v.findingCheck.state.done?"inspecting":er(n,v)}};var Tt=F.explain,tr=4,Mo=4e4,cl=15,Lt=4096,ll=6e4;function To(e){let t=Object.entries(di).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 pl(e,t,n){let o=Xi(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:B(l.excerpt??"",q)})),s=[],i=[],r=(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,Mo-Buffer.byteLength(JSON.stringify([...s,{...l,text:"",truncated:!0}]))),p=B(l.text,d);for(;p&&Buffer.byteLength(JSON.stringify(p))-2>d;)p=B(p,Math.floor(Buffer.byteLength(p)*.9));if(!p){i.push(`Source notes omitted ${l.repo}:${l.path}: context limit`);return}let m=l.truncated||p!==l.text;s.push({...l,text:p,truncated:m}),m&&i.push(`Source notes context incomplete: ${l.repo}:${l.path}`)};for(let l of o){let d=r(l.repo,l.path);if(d===void 0){i.push(`Source notes file unavailable: ${l.repo}:${l.path}`);continue}let p=l.line===null?null:l.line+l.excerpt.split(`
27
+ `).length-1;a({repo:l.repo,path:l.path,...dt(d,l.line,Mo,cl,p)})}let c=new Set;for(let l of o){let d=`${l.repo}
28
+ ${l.path}`;if(c.has(d))continue;c.add(d);let p=r(l.repo,l.path);if(p===void 0)continue;let m=t.repos.find(g=>g.key===l.repo)?.files??{};for(let g of vo(l.path,p,m))a({repo:l.repo,path:g,...dt(m[g],null,Mo)})}for(let l of ft([],t,0,"legacy",n).coreFiles)a(l);return{category:e.category??"",title:B(e.title,q/4),summary:B(e.summary??"",q/4),cause:B(e.cause,q/2),roles:To(e.category),sites:o,files:s,diagnostics:i}}var nr=(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 Rf(e,t,n){let o=e.text.split(`
29
+ `),s=o.findIndex(a=>a.startsWith(`${t} `));if(s<0)return!1;let r=o.slice(s).map(a=>a.replace(/^\d+ /,"")).join(`
30
+ `).indexOf(n);return r>=0&&r<o[s].replace(/^\d+ /,"").length}function dl(e,t){let n=To(t.category),o=new Set,s=e.sites.flatMap(c=>{let l=t.sites.find(p=>p.index===c.index),d=nr(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:""}])}),i=new Set,r=e.counterEvidence.flatMap(c=>{let l=nr(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&&Rf(p,c.line,c.excerpt)))return[];let d=JSON.stringify([c.repo,c.path,c.line,c.excerpt]);return i.has(d)?[]:(i.add(d),[{...c,meaning:l}])}).slice(0,2),a=nr(e.supportNote,280);if(!a)throw new Error("Source notes have no support explanation");return fs.parse({sites:s,support:e.support,supportNote:a,counterEvidence:r})}import{z as If}from"zod";function fl(e,t,n){let o=Buffer.byteLength(JSON.stringify(e))+t.templateBytes("explain-sources")+Buffer.byteLength(JSON.stringify(If.toJSONSchema(ds)));if(o>ll)throw new Error("Source notes input exceeds its priced limit");return pe(n,{template:"explain-sources"},"Explain sources",Tt,ie(o),Lt)}function Pf(e){return{template:"explain-sources",model:Tt,answerFormat:"sourceNotes",inputs:{content:JSON.stringify(e)},limits:{maxTokens:Lt,thinking:"disabled"}}}async function Af(e,t,n,o){let s=pl(n,o,t.tools);fl(s,t.tools,e);let i=await T(t,Pf(s),e);return dl(i,s)}async function ul(e,t,n,o,s){if(s?.done)return s;let i=s??{cursor:0,findings:n.map(l=>({...l,sourceNotes:null})),failures:0,done:!1},r=i.findings.slice(i.cursor,i.cursor+tr),a=await H(r,tr,async l=>{try{if(!t.available)throw new Error("Source notes model unavailable");return{finding:{...l,sourceNotes:await Af(e,t,l,o)},failed:!1}}catch(d){return M("explain-sources",d,p=>t.rethrow(p)),{finding:{...l,sourceNotes:null},failed:!0}}},t??void 0),c=Math.min(i.findings.length,i.cursor+r.length);return{cursor:c,findings:[...i.findings.slice(0,i.cursor),...a.map(l=>l.finding),...i.findings.slice(c)],failures:i.failures+a.filter(l=>l.failed).length,done:c>=i.findings.length}}async function ml(e,t,n){if(!te(e,t).sourceNotes||t.sourceNotes?.done)return{data:t,done:!0};let o=[],s;try{let i=t.repos??[],r=qe(t);o=_e($e(t.findingsRaw??[]),r,We(t),e).findings;let a=V(t);if(t.sourceNotes&&(!Array.isArray(t.sourceNotes.findings)||!Number.isInteger(t.sourceNotes.cursor)))throw new Error("Unreadable source notes checkpoint");s=await ul(e,n,o,{repos:i,fragments:a},t.sourceNotes)}catch(i){M("explain-sources",i,p=>n.rethrow(p)),me(i);let r=t.sourceNotes,a=r&&Array.isArray(r.findings)&&Number.isInteger(r.cursor)&&r.cursor>=0&&r.cursor<=r.findings.length,c=a?r.findings:o,l=a?r.cursor:0,d=c.length||(Array.isArray(t.findingsRaw)?t.findingsRaw.length:0);s={cursor:d,findings:c.map((p,m)=>m<l?p:{...p,sourceNotes:null}),failures:(a?r.failures:0)+d-l,done:!0}}return{done:s.done,data:{...t,sourceNotes:s,warnings:t.warnings??[],...s.findings.length||Array.isArray(t.findingsRaw)&&!t.findingsRaw.length?{findingsRaw:s.findings}:{}}}}function xv(e,t){return fe(e).sourceNotes?[U(e,"explain-sources","sourceNotes",Tt,t,8e5,Lt)]:[]}var bv=async(e,t)=>{t.progress.assertHeld(),t.progress.signal?.throwIfAborted();let n=await He(t),o=await ml(e.settings,e.state,be(t.model,n,t.progress.rethrow,t.progress.signal,e.settings));return{next:o.done?"structuring":"explaining_sources",clear:[],set:ae(o.done?Sc(o.data):o.data)}};function hl(e){let t=e.id.indexOf("#");return e.sourceRef?.repo??(t<0?null:e.id.slice(0,t))}var kn=(e,t)=>JSON.stringify([e,t]),gl=(e,t)=>e<t?-1:e>t?1:0;function kl(e,t=[]){let n=e.nodes.filter(r=>r.kind==="agent");if(n.some(r=>r.files===void 0&&!r.sourceRef))return null;if(!n.length)return[];let o=new Map,s=(r,a,c)=>{let l=kn(r,a),d=o.get(l);d||(d={repo:r,path:a,agents:new Set},o.set(l,d)),c.forEach(p=>d.agents.add(p))},i=new Map;for(let r of n){let a=hl(r),c=bi(r),l=kn(a,c),d=i.get(l)??[];d.push(r.id),i.set(l,d);for(let p of r.files??[])s(a,p.path,[r.id]);r.sourceRef&&s(a,r.sourceRef.path,[r.id]),Ve(r)&&s(a,Oi(c,a),[r.id]);for(let p of r.sourcePaths??[])s(a,p,[r.id])}for(let r of e.nodes)r.kind==="tool"&&r.sourceRef&&s(hl(r),r.sourceRef.path,[]);for(let r of t){let a=i.get(kn(r.repo,r.unitKey))??[];for(let c of r.input.sources)s(r.repo,c.sourcePath,a)}return[...o.values()].map(r=>({...r,agents:[...r.agents].sort()})).sort((r,a)=>gl(r.repo??"",a.repo??"")||gl(r.path,a.path))}function wl(e,t){if(e===null)return[];let n=new Set(e.map(s=>s.path)),o=new Set(e.map(s=>kn(s.repo,s.path)));return t.flatMap((s,i)=>s.sitePath?(s.siteRepo===null?n.has(s.sitePath):o.has(kn(s.siteRepo,s.sitePath)))?[]:[i]:[])}var Nt=e=>({paths:e.slice(0,2e3),omitted:Math.max(0,e.length-2e3)});function Ff(e){let t=e.map((i,r)=>({part:r+1,findings:[]})),n=Buffer.byteLength(JSON.stringify(t)),o=!1,s=0;return e.forEach((i,r)=>{let a=t[r].findings;for(let c of i){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 yl(e){let t=new Map(Object.entries(e.readByRepo).map(([s,i])=>[s,new Set(i)])),n=new Set(Object.values(e.readByRepo).flat()),o=new Map;for(let s of e.loaded??[]){let i=s.repo===null?n.has(s.path):t.get(s.repo)?.has(s.path);for(let r of s.agents){let a=o.get(r);a||(a={loaded:new Set,notRead:new Set},o.set(r,a)),a.loaded.add(s.path),i||a.notRead.add(s.path)}}return{version:1,core:Nt(e.plan?.core??[]),parts:(e.plan?.passes??[]).map(s=>({own:Nt(s.own)})),skipped:Nt(e.plan?.skipped??[]),readByRepo:Object.fromEntries(Object.entries(e.readByRepo).map(([s,i])=>[s,Nt(i)])),agents:e.graph.nodes.filter(s=>s.kind==="agent").map(s=>({id:s.id,label:s.label??s.id,loaded:Nt([...o.get(s.id)?.loaded??[]]),notRead:Nt([...o.get(s.id)?.notRead??[]])})),...Ff(e.passFindings)}}function Sl(e){return e.CF_RECALL_SIGNALS!=="0"}import{createHash as Mf}from"node:crypto";function wn(e,t){return e==="finding"?he(t):Mf("sha256").update(nt(t)).digest("hex")}function xl(e,t,n,o){let s=wn(e,t);return bl({target:e,index:n,fingerprint:s},o)}function bl(e,t){let n={status:"rejected",reason:"attachment_mismatch"};if(!Number.isInteger(e.index)||e.index<0)return n;let o=t.filter(i=>i.target===e.target&&i.index===e.index);if(!o.length)return{status:"absent"};if(o.length!==1||o[0].fingerprint!==e.fingerprint)return n;let s=Vt(o[0]);return s?{status:"accepted",wording:s}:n}function or(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}]:[]),i=[],r=[];for(let{key:a,position:c}of o){let l=c?bl(c,s):null;if(!c||l?.status!=="accepted"){r.push({key:a,reason:"attachment_mismatch"});continue}i.push({target:c.target,index:c.index,fingerprint:c.fingerprint,...l.wording})}return{rows:i,rejected:r}}function vl(e,t,n,o){let s=[],i=new Set,r=0;for(let a of n){let c=`${a.target}:${a.index}`;if(i.has(c))continue;i.add(c);let l=a.target==="finding"?e[a.index]:void 0,d=a.target==="structure"?t[a.index]:void 0;if((l?xl("finding",l,a.index,n):d?xl("structure",d,a.index,n):null)?.status!=="accepted"){r++;continue}s.push(a)}return{rows:s,...o?{diagnostics:r?{...o,accepted:o.accepted-r,rejected:o.rejected+r,byReason:{...o.byReason,attachment_mismatch:(o.byReason.attachment_mismatch??0)+r}}:o}:{}}}function Tf(e){let t=!1,n=!1,o="",s=0;return e.split(/\r?\n/).map((i,r)=>{if(r===0&&i==="---")return n=!0,"";if(n)return/^(?:---|\.\.\.)\s*$/.test(i)&&(n=!1),"";let a=i.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||i.includes("<!--")?(i.includes("<!--")&&(t=!0),i.includes("-->")&&(t=!1),""):i})}function Ol(e,t,n,o){let s=new Set([...n?.paths??[],...Object.keys(t)]),i=new Set(n?.admittedPaths??Object.keys(t)),r=Xn(e,[...i],o,{files:t});return{documents:r.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:r.ownerOf(c.path)?.folder??o??"",role:c.role,sourceLines:l.split(`
31
+ `),lines:l.split(/\r?\n/),visible:d?Tf(l):[],complete:d}]}),paths:s,admittedPaths:i,complete:n?.complete===!0,asOf:n?.asOf,opaquePaths:n?.opaquePaths??[],skills:r.files.filter(c=>c.role==="skill").map(c=>c.path),knowledge:r.files.filter(c=>c.role==="knowledge"&&c.kind!=="background").map(c=>c.path)}}function X(e,t,n=t+1){let o=e.sourceLines.slice(t,n).join(`
32
+ `).replace(/\r$/,"");return{path:e.path,line:t+1,excerpt:o}}function jt(e,t,n){let o=[...new Set([t.path,`${t.root?`${t.root}/`:""}__root__`].flatMap(i=>{let r=qr(i,n,t.root,!0);return r.reason?[]:[r.path]}))];if(!o.length||o.some(i=>e.opaquePaths.some(r=>!r||i===r||i.startsWith(`${r}/`))))return null;let s=o.filter(i=>e.paths.has(i));return s.length>1?null:{path:s[0]??o[0],exists:s.length===1}}function Dt(e){return[...new Set(Kr(e).filter(t=>t.explicit&&t.fileLike).map(t=>t.target))]}var Oe=/\b(?:examples?|e\.g\.|shared|global|external|optional|historical|previously|removed|create|write|generate|output|save|append)\b/i;function El(e){return e.complete?e.documents.flatMap(t=>t.visible.flatMap((n,o)=>Oe.test(n)||!(/\b(?:read|load|follow|consult|see|use|refer)\b/i.test(n)||/\[[^\]]+\]\([^)]+\)/.test(n))?[]:Dt(n).flatMap(s=>{if(!/\.(?:md|mdx|txt|prompt)(?:#.*)?$/i.test(s))return[];if(!(!s.includes("/")||/^\.{1,2}\//.test(s)||J(s,{nested:!0})||!!Kt(t.path,{nested:!0})&&/^references\//.test(s)))return[];let r=[...n.matchAll(/\[[^\]]+\]\(([^)]+)\)/g)].find(l=>l[1]===s),a=n.slice(0,r?.index??n.indexOf(s)).replace(/[`*_"']+$/,"");if(!/\b(?:read|load|follow|consult|see|use|refer to)\s+(?:the\s+)?$/i.test(a))return[];let c=jt(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:X(t,o)}]}))):[]}function Lf(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,i)=>{let r=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(r&&/^\d{4}/.test(r[1])&&!/^#{1,6}\s+(?:Step|Section)\s+/i.test(s))return[];if(r)return n=null,[{label:r[1].toLowerCase(),index:i}];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:i}]):(s.trim()&&!/^\s/.test(s)&&(n=null),[])})}function _l(e){let t=new Map(e.documents.map(s=>[s.path,s])),n=new Map,o=(s,i)=>{let r=`${s.path}\0${i}`,a=n.get(r);if(!a){let c=i==="step"?/^\s*(?:\*\*|__)?Step\s+\d/i:/^\s*(?:\*\*|__)?Section\s+\d/i,l=Lf(s,i),d=new Set(l.map(p=>p.label));a={defined:l,known:d,ambiguous:s.visible.some(p=>i==="step"&&/^\s+\d+[.)]\s/.test(p)||c.test(p))},n.set(r,a)}return a};return e.documents.flatMap(s=>s.visible.flatMap((i,r)=>{if(Oe.test(i)||!/\b(?:see|refer to|follow|return to|go to|from)\b/i.test(i))return[];let a=Dt(i);if(a.length>1||a.length===0&&/\b(?:in|of)\s+(?!this\s+(?:file|document)\b)/i.test(i))return[];let c=a.length?jt(e,s,a[0]):{path:s.path},l=c?t.get(c.path):void 0;return l?.complete?[...i.matchAll(/\b(step|section)\s+(\d+(?:\.\d+)*[a-z]?)\b/gi)].flatMap(d=>{let p=d[1].toLowerCase(),m=d[2].toLowerCase(),{defined:g,known:h,ambiguous:f}=o(l,p);return f||!g.length||h.has(m)?[]:[{rule:"numbered-reference",title:`Your instructions refer to missing ${p} ${m} in ${l.path}`,cause:`${l.path} has no ${p} ${m}.`,fix:`Point this reference to an existing ${p}, or restore the missing ${p} in ${l.path}.`,site:X(s,r),otherSites:g.slice(0,3).map(u=>X(l,u.index))}]}):[]}))}import{posix as ht}from"node:path";function Cl(e){if(!e.complete)return[];let t=[];for(let n of e.documents)n.complete&&n.visible.forEach((o,s)=>{let i=o.match(/^(#{1,6})\s+(?:Available )?(Skills|Knowledge files)\s*$/i);if(!i)return;let r=n.visible.findIndex((m,g)=>{let h=g>s?m.match(/^(#+)\s/):null;return h!==null&&h[1].length<=i[1].length}),a=n.visible.slice(s+1,r<0?void 0:r).flatMap((m,g)=>!/^\s*[-*]\s/.test(m)||Oe.test(m)?[]:Dt(m).flatMap(h=>{let f=jt(e,n,h);return f?[{...f,index:s+g+1}]:[]})),c=i[2].toLowerCase()==="skills",l=a.filter(m=>c?J(m.path,{nested:!0}):/\.md$/i.test(m.path));if(!l.some(m=>m.exists))return;let d=new Set(l.map(m=>c?ht.dirname(ht.dirname(m.path)):ht.dirname(m.path))),p=new Set(l.map(m=>m.path));for(let m of c?e.skills:e.admittedPaths){let g=c?ht.dirname(ht.dirname(m)):ht.dirname(m);!c&&Wr.test(ht.basename(m))||m===n.path||!c&&g===(n.root||".")&&!e.knowledge.includes(m)||!d.has(g)||p.has(m)||(c?!J(m,{nested:!0}):!/\.md$/i.test(m))||t.push({rule:"unlisted-file",title:`Your ${c?"skills":"knowledge"} index omits ${m}`,cause:`${m} is in the agent's folder but isn't in this list, so the agent may miss it.`,fix:`Add ${m} to this index, or remove the unused file.`,site:X(n,s),otherSites:e.documents.filter(h=>h.path===m).flatMap(h=>{let f=h.lines.findIndex(w=>/^name:\s*\S/.test(w)),u=f<0?h.visible.findIndex(w=>w.trim()):f;return u<0?[]:[X(h,u)]})})}for(let m of l.filter(g=>!g.exists))t.push({rule:"absent-index-entry",title:`Your index lists missing file ${m.path}`,cause:`${m.path} isn't in the agent's folder.`,fix:`Remove this index entry, correct its path, or add ${m.path} to the agent folder.`,site:X(n,m.index)})});return t}function $l(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(`
33
+ `),p=X(a,c,l);if(d.length>=240&&n.encode(p.excerpt).byteLength<=1800&&d.trim().split(/\s+/).length>=40){let m=`${a.root}\0${d}`,g=t.get(m)??[];g.some(h=>h.path===a.path)||g.push(p),t.set(m,g)}c=l+1}}let o=[...t.values()].filter(a=>a.length>1),s=o.map(a=>a[0].excerpt.trim().split(/\s+/)),i=(a,c)=>s[a].slice(0,c).join(" "),r=(a,c)=>he({kind:"reliability",site:o[a][0],title:i(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&&r(p,l)===r(c,l));)l++;return{rule:"duplicate-block",title:`Your instruction files repeat "${i(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 Nf=[{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 Rl(e){return e.documents.flatMap(t=>{let n=new Map;return t.visible.forEach((o,s)=>{if(!(Oe.test(o)||/^\s*#/.test(o)||/\b(?:config(?:uration|ured)?|environment|placeholder)\b/i.test(o)))for(let{kind:i,pattern:r}of Nf){if(o.matchAll(r).next().done)continue;let a=n.get(i)??[];a.push(X(t,s)),n.set(i,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 Il(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 Pl(e){let t=e.asOf;return Il(t)?e.documents.flatMap(n=>{let o=[],s=!1;for(let i=n.visible.length-1;i>=0;i--){let r=n.visible[i];s=!!r.trim()&&(s||/\b(?:not|never|don.t|then|after|thereafter|otherwise)\b/i.test(r)),o[i]=s}return n.visible.flatMap((i,r)=>o[r]?[]:Oe.test(i)||!/\b(?:use|send|route|deliver|apply|keep|publish|post)\b/i.test(i)?[]:[...i.matchAll(/\b(?:until|through)\s+(\d{4}-\d{2}-\d{2})\b/gi)].flatMap(a=>{let c=a[1];return!Il(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:X(n,r)}]}))}):[]}var jf=[Cl,El,_l,$l,Rl,Pl];function Df(e,t,n,o){if(!n||e.CF_MECHANICAL_CHECKS==="0")return[];let s=Ol(e,t,n,o),i=jf.flatMap(a=>a(s)),r=new Set(i.filter(a=>a.rule==="absent-index-entry").map(a=>`${a.site.path}:${a.site.line}`));return i.filter(a=>a.rule!=="missing-file"||!r.has(`${a.site.path}:${a.site.line}`))}function Al(e,t,n,o){let s=new TextEncoder;return Df(e,t,n,o).filter(i=>[i.site,...i.otherSites??[]].every(r=>s.encode(r.excerpt).byteLength<=Ir.quoteBytes)).map(i=>({kind:"reliability",severity:"low",title:i.title,cause:i.cause,summary:i.cause,category:"prompt_quality",site:{path:i.site.path,line:i.site.line},excerpt:i.site.excerpt,otherSites:i.otherSites??[],question:"",fixes:[{title:"Update these instructions",approach:i.fix,kind:"prompt",targetFiles:[{path:i.site.path,create:null}],expectedOutcome:"",summary:null,impact:null,objective:null,blockedBy:null,confidence:"high",status:"ready",alsoFixes:[],delta:null}]}))}var Bf=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}"}}'),yn=e=>e.toLocaleString("en-US"),sr=(e,t)=>e.replace(/\{(\w+)\}/g,(n,o)=>t[o]);function Fl(e,t="",n=0){let o=Bf.estimates,s={limit:yn(n),runLimit:yn(n*10),unknownOutput:o.unknownOutput};if(e==="history"||e==="turn-limit"||e==="output-limit")return sr(o[e],s);let i=ie(Buffer.byteLength(t,"utf8"));return Object.assign(s,{tokens:yn(i),repeated:yn(i*9),total:yn(i*10),unit:e==="ordering"?"request":"turn",units:e==="ordering"?"requests":"turns"}),s.context=sr(o.context,s),sr(o[e],s)}var rr=/^ {0,3}(`{3,}|~{3,})/,Ml=/^(#{1,6})\s+\S/,ir=/^(\s*)([-*+]|\d+[.)])\s+/,ar=/^\s*\|/;function z(e){let t=e.split(`
34
+ `);return t.length>1&&t[t.length-1]===""&&t.pop(),t}function oe(e,t){let n=z(t),o=[],s=(a,c,l,d=0)=>o.push({kind:a,start:c+1,end:l+1,level:d,text:n[c]}),i=0,r=Ii(t,Zt(e)?void 0:"outline");if(r){let a=r.raw.length+1;s("frontmatter",0,a),i=a+1}for(;i<n.length;){let a=n[i];if(a.trim()===""){i++;continue}let c=rr.exec(a);if(c){let m=i+1;for(;m<n.length;){let h=rr.exec(n[m]);if(h&&h[1][0]===c[1][0]&&h[1].length>=c[1].length&&!n[m].slice(h[0].length).trim())break;m++}let g=Math.min(m,n.length-1);s("fence",i,g),i=g+1;continue}let l=Ml.exec(a);if(l){s("heading",i,i,l[1].length),i++;continue}if(ar.test(a)){let m=i;for(;m+1<n.length&&ar.test(n[m+1]);)m++;s("table",i,m),i=m+1;continue}let d=ir.exec(a);if(d){let m=d[1].length,g=i;for(;g+1<n.length&&n[g+1].trim()!==""&&!ir.test(n[g+1])&&n[g+1].length-n[g+1].trimStart().length>m;)g++;s("list_item",i,g,m),i=g+1;continue}let p=i;for(;p+1<n.length&&n[p+1].trim()!==""&&!rr.test(n[p+1])&&!Ml.test(n[p+1])&&!ar.test(n[p+1])&&!ir.test(n[p+1]);)p++;s("paragraph",i,p),i=p+1}return o}function Kf(e){return e.kind==="frontmatter"||e.kind==="fence"||e.kind==="table"||e.kind==="list_item"}function Lo(e,t,n){let o=t,s=n,i=!0;for(;i;){i=!1;for(let r of e){if(!Kf(r))continue;r.start<=s&&r.end>=o&&(r.start<o||r.end>s)&&(o=Math.min(o,r.start),s=Math.max(s,r.end),i=!0)}}return{start:o,end:s,snapped:o!==t||s!==n}}var qf={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 Tl(e,t,n){if(!n?.enabled)return[];let o=n.inputs.filter(a=>a.unitKey===t),s=ce(o,e).sources.filter(a=>a.unitKey===t&&a.kind!=="prompt"),i=[...new Set(s.map(a=>a.sourcePath))],r=[];for(let a of i){let c=Rn(a);if(!c)continue;let l=e[a],d=Nr(a,l,c),{toks:p}=d,m=Lr(l,c).filter(g=>g.kind==="comment");for(let g of Zr(d,Dr(d),{layouts:!0})){let h=p[g.from],f=p[g.to-1],u=l.slice(h.start,f.end),w=h.line;if(!s.some(S=>S.sourcePath===a&&w<=S.sourceLine&&S.sourceLine<=f.endLine)||!rn({path:a,line:w,excerpt:u},o,t,e)||m.some(S=>S.line<=f.endLine+1&&S.endLine>=w-1))continue;let v=c==="js"?g.args.find(S=>In(p[S.from],"{")):null,y=v?jr(p,v.from):c==="py"?g.args:[];if(!y.some(({from:S})=>[".","*","["].some(k=>In(p[S],k))||["get","set"].includes(p[S]?.text)))for(let{from:S,to:k}of y){let b=p[S],O=p[S+2],_=b?.kind==="string"?b.value:b?.kind==="ident"?b.text:"",$=qf[_];if(!$||k!==S+3||!In(p[S+1],c==="py"?"=":":")||O?.kind!=="number"||!/^[1-9]\d{0,5}$/.test(O.text)||y.filter(C=>(p[C.from]?.value??p[C.from]?.text)===_).length!==1)continue;let x=u.length>240,E=x?l.slice(b.start,O.end).replace(/\s+/g," "):u;E.length>240||r.push({rule:$,limit:Number(O.text),path:a,line:x?b.line:w,excerpt:E})}}}return r}var cr=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}"}}'),Uf=/^(?: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,Wf=/^(?:Stop after |(?:The )?maximum (?:number of )?turns (?:is |[:=] ?)|Set max_turns to )([1-9]\d{0,5})(?: turns)?[.!]?$/i,Xf=/^(?:Limit output to |(?:The )?maximum (?:number of )?output tokens (?:is |[:=] ?)|Set max_tokens to )([1-9]\d{0,5})(?: tokens)?[.!]?$/i,Ll=/(?:^(?:always |(?:(?:on|at|for) )?(?:every|each) (?:turn|step|request),? )| (?:on|at|for) (?:every|each) (?:turn|step|request),?(?= without| even|[.!]?$))/i,zf=/\b(?:examples?|samples?|anti-patterns?|incorrect|avoid)\b/i,Jf=/\b(?:because|reason|rationale|budget|ceiling|capacity|parser|prevent\w*|unattended|retries|finite)\b/i,No=e=>e.trim().replace(/^(?:[-*+] |\d+[.)] )/,"");function Vf(e,t){if(/^(?: {4}|\t|\s*>)/.test(e[t]))return!0;let n=7;for(let o=t;o>=0;o--){let s=No(e[o]),i=/^(#{1,6})\s/.exec(s);if(!(!i||i[1].length>=n)){if(zf.test(s))return!0;n=i[1].length}}return!1}function Qf(e,t){for(let n=t-1;n>=0&&e[n].trim()&&!/^\s*#{1,6}\s/.test(e[n]);n--){let o=No(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 Nl(e,t,n,o){let s=Ll.test(e),i=e.replace(Ll,"");if(s&&Uf.test(i))return{rule:"history"};for(let[r,a]of[[Hf,"ordering"],[Gf,"reads"]]){let c=s?r.exec(i):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[r,a]of[[Wf,"turn-limit"],[Xf,"output-limit"]]){let c=r.exec(e);if(c)return{rule:a,limit:Number(c[1])}}return null}function jl(e,t,n,o){let s=cr.findings[e.rule],i=`${s.cause} ${Fl(e.rule,e.text,e.limit)}`,r=e.text?.split(`
35
+ `).findIndex(c=>c.trim()),a=e.reference&&r!==void 0?[{path:e.reference,line:r+1,excerpt:e.text.split(`
36
+ `)[r].slice(0,240)}]:[];return{kind:"cost",severity:e.rule.endsWith("limit")?"low":"medium",category:"token_waste",title:s.title,cause:i,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")?cr.outcomes.limit:cr.outcomes.context,targetFiles:[{path:t,create:null}],impact:null,confidence:"high",objective:null,status:null,blockedBy:null,alsoFixes:[],delta:null}]}}function jo(e){return e.CF_COST_FINDINGS!=="0"}function Dl(e,t,n,o){if(!jo(e))return[];let s=[],i=new Set,r=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 m=t[p.path];if(typeof m!="string")return[];let g=m.split(`
37
+ `),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,u=h.map(w=>w.slice(Math.min(f,/^\s*/.exec(w)[0].length)));return[{file:p,lines:u,source:u.join(`
38
+ `),offset:(p.span?.from??1)-1}]}),d=l.length===a.files.length&&!l.some(({lines:p})=>p.some(m=>{let g=No(m);return!Nl(g,!0,t,c)&&Jf.test(g)}));for(let{file:p,source:m,lines:g,offset:h}of l){if(!["system prompt","soul","skill"].includes(p.role))continue;let f=oe(e,m).filter(u=>["frontmatter","fence","table"].includes(u.kind));for(let[u,w]of g.entries()){if(f.some(k=>k.start<=u+1&&u+1<=k.end)||Vf(g,u)||Qf(g,u))continue;let v=No(w),y=Nl(v,d,t,c);if(!y)continue;let S=JSON.stringify([p.path,u+h,y.rule]);i.has(S)||(i.add(S),s.push(jl(y,p.path,u+h+1,w.trim())))}}for(let p of Tl(t,a.id,o)){let m=JSON.stringify([p.path,p.line-1,p.rule,p.limit]);if(i.has(m))continue;i.add(m);let g=JSON.stringify([p.rule,p.limit]),h=r.get(g);if(h){h.otherSites.push({path:p.path,line:p.line,excerpt:p.excerpt});let f=h.fixes[0].targetFiles;f.some(u=>u.path===p.path)||f.push({path:p.path,create:null})}else{let f=jl({...p,code:!0},p.path,p.line,p.excerpt);r.set(g,f),s.push(f)}}}return s}var Yf=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 Bl({state:e,settings:t},n={}){let o=e.repos??[],s=[],i=V(e).map(({repoKey:E,fragment:C},R)=>{let I=mi(C,o[R]?.files??{},E,t);return s.push(...I.warnings),{repoKey:E,fragment:I.fragment,files:I.nodes}}),r=Le(i),a=[];if(jo(t)){let E=Ae(o).all,C=dc(e,t);for(let{repoKey:R,fragment:I}of V(e)){let P={...C,inputs:C.inputs.filter(j=>j.repo===R)};a.push(...Dl(t,Object.fromEntries(E.filter(j=>j.repo===R).map(j=>[j.path,j.text])),I,P))}}let c=$e(e.findingsRaw??[]),l=jo(t)?c.filter(E=>!Ht(E.category)):c,{findings:d,warnings:p}=_e(l,qe(e),We(e),t,a),m=d.length,g=new Set(d.map(he));for(let E of n.mechanical===!1?[]:o){let C=Al(t,E.files??{},E.mechanicalInventory,E.root),R=_e(C,{[E.key]:new Set(Object.keys(E.files??{}))},1/0,t);for(let I of R.findings){let P=he(I);g.has(P)||(d.push(I),g.add(P))}}let h=new Set(a.map(he)),f=d.filter(E=>Ht(E.category)&&h.has(he({...E,siteRepo:null}))).map(E=>({fingerprint:he(E),support:"complete",confidence:"sure",weak:E.severity==="low",reason:Yf.assessment})),u=e.findingQuality&&f.length?{...e.findingQuality,assessments:[...(e.findingQuality.assessments??[]).filter(E=>!f.some(C=>C.fingerprint===E.fingerprint)),...f]}:e.findingQuality,w=e.structuresRaw??[],v=wt(t)?e.findingHeadlines:void 0,y=v?.done?v.version===2?v.rows:v.rows.map(E=>({...E,target:"finding"})):[],S=vl(d,w,y,wt(t)?v?.version===2?v.diagnostics:e.findingHeadlineDiagnostics:void 0),k=S.rows,b=e.readPaths??Object.fromEntries(o.map(E=>[E.key,Object.keys(E.files??{})])),O;if(Sl(t)){let E=kl(r,e.findingQuality?.codeEvidence),C=e.inspectPlan?.passes.map((R,I)=>e.passResults?.[I]?.findings??e.passFindings?.[I]??[])??e.passFindings??[];O={log:yl({plan:e.inspectPlan??null,readByRepo:b,loaded:E,graph:r,passFindings:C.filter(R=>Array.isArray(R))}),unreachedIndexes:E===null?null:wl(E,d.map(R=>({siteRepo:R.siteRepo??null,sitePath:R.site?.path??null})))}}let _=0,$=0;for(let E of o)for(let C of Object.values(E.files??{}))_++,$+=C.length;let x=vt(e);return{graph:r,model:F.generate,analyzedShaByRepo:Object.fromEntries(o.map(E=>[E.key,E.headSha??""])),sourceStats:{files:_,bytes:$,...x===void 0?{}:{sawCode:x}},...O?{recall:O}:{},warnings:[...new Set([...e.warnings??[],...s,...p])],findings:d,...d.length>m?{structuralFindingCount:m}:{},...k.length?{findingHeadlines:k}:{},...S.diagnostics?{findingHeadlineDiagnostics:S.diagnostics}:{},structures:w,loadModes:e.loadModes??[],structurePassFailed:e.structurePassFailed??!1,splitCheckRan:e.splitCheckRan??!1,splitPassFailed:e.splitPassFailed??!1,sourceFilesByRepo:Object.fromEntries(o.map(E=>[E.key,E.files??{}])),readPaths:b,rechecks:e.rechecks??[],recheckedChangeIds:e.recheckedChangeIds??[],newVerdicts:e.newVerdicts??[],...u?{findingQuality:u}:{}}}import{createHash as Zf}from"node:crypto";function Kl({repo:e,body:t}){let[n,...o]=t.evidence,s=t.split,i=r=>r.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(r=>({repo:e,path:r.path,line:r.line,excerpt:r.excerpt})),structure:{title:t.title,subKind:t.subKind,files:t.files.map(r=>({path:r.path,action:r.action,role:r.role,unit:r.unit,loadMode:r.loadMode,loadVia:r.loadVia,purpose:r.purpose})),segments:t.segments.map(r=>({path:r.path,startLine:r.startLine,endLine:r.endLine,to:r.to,disposition:r.disposition,into:r.into?{path:r.into.path,line:r.into.line}:null,reason:r.reason})),reorder:t.reorder?{path:t.reorder.path,startLine:t.reorder.startLine,endLine:t.reorder.endLine,steps:t.reorder.steps.map(r=>({from:r.from,reason:r.reason}))}:null,toolMoves:t.toolMoves.map(r=>({tool:r.tool,fromUnit:r.fromUnit,toUnit:r.toUnit,reason:r.reason})),split:s?{frontDoor:{job:s.frontDoor.job,skills:[...s.frontDoor.skills]},subAgents:s.subAgents.map(r=>({job:r.job,description:r.description,path:r.path,handoff:r.handoff??null,skills:r.skills.map(a=>({from:a.from,to:a.to})),tools:[...r.tools],movedKnowledge:i(r.movedKnowledge),neededKnowledge:i(r.neededKnowledge)}))}:null}}}function ql(e,t=[]){let n=e.map((o,s)=>({f:o,index:s})).filter(({f:o})=>!Ht(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(i=>({repo:i.repo,path:i.path,line:i.line,excerpt:i.excerpt})),fixSummaries:o.fixes.flatMap(i=>typeof i.summary=="string"&&i.summary.trim()?[i.summary]:[])})),...t.map((o,s)=>({key:`s${s}`,...Kl(o)}))],positions:[...n.map(({f:o,index:s})=>({key:`f${s}`,target:"finding",index:s,fingerprint:wn("finding",o)})),...t.map((o,s)=>({key:`s${s}`,target:"structure",index:s,fingerprint:wn("structure",o)}))]}}function Ul(e,t){return Zf("sha256").update(nt({batch:e,requestIdentity:t})).digest("hex")}import{z as tu}from"zod";function lr(e){let t=e.trim();return/[.!?…。!?][\u0022'\u201d\u2019)\]]*$/u.test(t)?t:`${t}.`}function Hl(e,t,n){return t.kind==="structure"?`${lr(e)} ${lr(t.structure.title)}`:eu(e,t,n)}function eu(e,t,n){let o=e.trim();if(!Bn(t.category))return o;let s=[...t.site?[t.site]:[],...t.otherSites],i=new Map;for(let l of s){let d=i.get(l.path)??new Set;d.add(l.repo),i.set(l.path,d)}let r=new Set,a=s.flatMap(l=>{let d=JSON.stringify([l.repo,l.path]);return r.has(d)?[]:(r.add(d),[i.get(l.path).size>1&&l.repo?`${l.repo}:${l.path}`:l.path])}),c=t.question?.trim()||n.trim();return`${lr(o)} ${c}${a.length?` (${a.join(", ")})`:""}`}var Gl=e=>e.match(/\d+(?:[.,]\d+)*/g)??[];function gt(e,t,n=0){let o={};for(let{reason:s}of t)o[s]=(o[s]??0)+1;return{version:Ze,rows:[...e],rejected:[...t],diagnostics:{requested:e.length+t.length,accepted:e.length,rejected:t.length,unexpectedRows:n,byReason:o}}}function pr(e,t){let n=Wi.safeParse(e);if(!n.success)return null;let o=n.data,s=new Set(t.map(r=>r.key));for(let r of[...o.rows,...o.rejected])if(!s.delete(r.key))return null;if(s.size)return null;let i=gt(o.rows,o.rejected,o.diagnostics.unexpectedRows);return i.diagnostics.requested===t.length&&nt(i.diagnostics)===nt(o.diagnostics)?o:null}function Do(e,t,n){let o={version:Ze,rows:[],rejected:[],diagnostics:{requested:t.length,accepted:0,rejected:0,unexpectedRows:0,byReason:{}}},s=(d,p)=>{o.rejected.push({key:d,reason:p})},i=ks.safeParse(e),r=new Map,a=new Set(t.map(d=>d.key)),c=i.success?i.data.rows:[];for(let d of c)r.set(d.key,(r.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,m=l.get(p);if(!i.success){s(p,"malformed_answer");continue}if(!m){s(p,"missing_row");continue}if(r.get(p)!==1){s(p,"duplicate_key");continue}if(m.headline===null&&m.ifLeft===null){s(p,"model_declined");continue}if(!m.headline?.trim()||!m.ifLeft?.trim()){s(p,"incomplete_pair");continue}let g=Vt(m);if(!g){s(p,"invalid_wording");continue}let h=new Set([d.excerpt??"",...d.otherSites.map(u=>u.excerpt)].flatMap(Gl));if([g.headline,g.ifLeft].some(u=>Gl(u).some(w=>!h.has(w)))){s(p,"unsupported_number");continue}if(Bn(d.category)){if(!d.site||!d.excerpt?.trim()||!d.otherSites.some(u=>u.excerpt.trim())){s(p,"insufficient_question_evidence");continue}if([d.site,...d.otherSites].some(u=>!u.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=Hl(g.headline,d,n);if(!Vt({...g,headline:f})){s(p,"invalid_wording");continue}o.rows.push({key:p,headline:f,ifLeft:g.ifLeft})}return gt(o.rows,o.rejected,o.diagnostics.unexpectedRows)}var Sn=48e3;function fE(e,t){return e?[pe(t,{template:"finding-headlines"},"Finding headlines",on,ie(Sn),sn)]:[]}async function Wl(e,t,n){let o=bs(t.evidence),s=e.tools.headlinePlan(o),i=Ul(t,{prompt:e.tools.promptVersion(o.template),model:o.model,limits:o.limits,maxInputBytes:Sn,request:s.identity,compositionVersion:2,resultVersion:Ze}),r=c=>{let l=or(t,c.rows);if(l.rejected.length){let d=new Set(l.rejected.map(p=>p.key));c=gt(c.rows.filter(p=>!d.has(p.key)),[...c.rejected,...l.rejected],c.diagnostics.unexpectedRows)}return{version:Ze,inputHash:i,done:!0,rows:l.rows,rejected:c.rejected,diagnostics:c.diagnostics}},a=c=>r(gt([],t.evidence.map(l=>({key:l.key,reason:c}))));if(n?.done)return n.version===Ze&&n.inputHash===i?n:a("stale_checkpoint");if(!t.evidence.length)return r(gt([],[]));if(!e.available)return a("model_unavailable");if(s.inputBytes>Sn)return a("over_input_allowance");try{let c=await T(e,o,{},{maxInputBytes:Sn}),l=s.relayValidated?pr(c,t.evidence):Do(c,t.evidence,s.fallbackQuestion??"");return l?r(l):a("incompatible_relay_result")}catch(c){return e.rethrow(c),a(c instanceof Tn||c instanceof tu.ZodError?"malformed_answer":"provider_failure")}}function FE(e){return wt(e)?[U(e,"finding-headlines","findingHeadlines",on,1,8e5,sn)]:[]}var ME=async(e,t)=>{if(t.progress.assertHeld(),t.progress.signal?.throwIfAborted(),!wt(e.settings))return{next:"persisting",set:{},clear:[]};let n=await He(t),o=be(t.model,n,p=>{t.progress.signal?.throwIfAborted(),t.progress.assertHeld(),t.progress.rethrow?.(p)},t.progress.signal,e.settings),{findings:s,structures:i}=Bl(e,{mechanical:!1}),r=ql(s,i),a=new Set(Ne(s).active),c=new Set(r.positions.filter(p=>p.target==="structure"||a.has(s[p.index])).map(p=>p.key)),l={...r,evidence:r.evidence.filter(p=>c.has(p.key)),positions:r.positions.filter(p=>c.has(p.key))},d=await Wl(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 Bo(e){let t=e,n=t.expectedOutcome?.trim();return{motivation:t.motivation??[],outcomes:t.outcomes??(n?[{improvement:n,measurement:""}]:[])}}import{createHash as fu}from"node:crypto";import{basename as ip}from"node:path";var dr=["split_monolith","single_source","fold_patches","extract_subagent","merge_subagents","move_rule","move_tool","reorder"],fr=["create","shrink","edit","delete"],ur=["system prompt","soul","knowledge","skill","config","tools","mcp","template","reference","log","code"],mr=["always","on_demand","never"],hr=["move","fold_into","remove_duplicate","remove_superseded"],gr=["pointer","handoff","reference_update"];var nu=e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),Xl=(e,t)=>new RegExp(`(^|[\\s\`'"(])${nu(t)}($|[\\s\`'"),.:;])`).test(e);function ou(e,t){let n=e.segments.map((r,a)=>({...r,index:a})),o=n.filter(r=>(r.disposition==="move"||r.disposition==="remove_superseded")&&t.has(r.to)),s=new Set([...o.filter(r=>r.disposition==="move").map(r=>r.path),...t]),i=n.filter(r=>(r.disposition==="remove_duplicate"||r.disposition==="fold_into")&&(s.has(r.path)||t.has(r.to)));return[...o,...i].sort((r,a)=>r.index-a.index)}var Jl=(e,t,n)=>e.find(o=>o.path===t&&n>=o.startLine&&n<=o.endLine)??null;function kr(e,t,n){let o=Jl(e,t,n);return o?o.disposition==="move"||o.disposition==="remove_superseded"?o.to:o.into?kr(e,o.into.path,o.into.line):o.to:t}function kt(e){return e===""||e.includes(`
39
+ `)||e.includes(": ")||e.endsWith(":")||/^[\s"'[\]{}#>|*&!%@`,]/.test(e)||/\s$/.test(e)?JSON.stringify(e):e}var su=e=>{let t=/^(#{1,6})\s+(.*)$/.exec(e);return t?t[2].trim():null};function zl(e,t,n,o,s){let i=()=>{t.lines.length&&t.lines[t.lines.length-1].trim()!==""&&(t.lines.push(""),t.prov.push("heading"))};if(n){let r=oe(e,t.lines.join(`
40
+ `)).filter(c=>c.kind==="heading"),a=r.findIndex(c=>su(c.text)===n.trim());if(a>=0){let c=r[a],l=t.lines.length;for(let d=a+1;d<r.length;d++)if(r[d].level<=c.level){l=r[d].start-1;break}t.lines.splice(l,0,...o),t.prov.splice(l,0,...s);return}i(),t.lines.push(`## ${n}`,""),t.prov.push("heading","heading")}else i();t.lines.push(...o),t.prov.push(...s)}function Vl(e,t){let n=new Set(t.ticked),o=ou(t.body,n),{files:s}=t.body,i=[],r=[],a=[],c=new Map,l=f=>z(t.contents[f]??""),d=f=>({lines:l(f),prov:l(f).map((u,w)=>`${f}:${w+1}`),created:!1});for(let f of[...new Set(o.map(u=>u.path))]){let u={lines:[],prov:[],created:!1};l(f).forEach((y,S)=>{Jl(o,f,S+1)||(u.lines.push(y),u.prov.push(`${f}:${S+1}`))});let w=s.find(y=>y.path===f),v=u.lines.filter(y=>y.trim()!=="").length;if(w?.action==="delete"&&v===0){a.push(f);continue}w?.action==="delete"&&i.push(`${f} keeps ${v} lines this time, so it is shrunk, not deleted`),c.set(f,u)}for(let f of o){if(f.disposition==="move")continue;let u=f.disposition==="remove_duplicate"?`duplicate_of ${f.into?.path??f.to}`:f.disposition==="remove_superseded"?`superseded_by ${f.childRef??""}`:`folded_into ${f.into?.path}:${f.into?.line}`;r.push({quote:l(f.path).slice(f.startLine-1,f.endLine).join(`
41
+ `),sourcePath:f.path,sourceLine:f.startLine,reason:u,ref:f.childRef??""})}for(let f of s){if(!n.has(f.path)||f.action==="delete"||f.action==="shrink")continue;let u=c.get(f.path)??(t.contents[f.path]!=null?d(f.path):{lines:[],prov:[],created:!0});if(u.created&&f.frontmatter){let w=["---",`name: ${kt(f.frontmatter.name)}`,`description: ${kt(f.frontmatter.description)}`,...f.frontmatter.tools.length?[`tools: ${Et(e,f.frontmatter.tools)}`]:[],"---"];u.lines.push(...w),u.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);zl(e,u,w.heading,v,v.map((y,S)=>`${w.path}:${w.startLine+S}`))}c.set(f.path,u)}let p=new Set;for(let f of o)f.into&&(f.disposition==="fold_into"||f.disposition==="move")&&p.add(kr(o,f.into.path,f.into.line));let m=t.body.reorder;m&&p.add(kr(o,m.path,m.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,u)=>{if(!c.has(f.path)&&t.contents[f.path]!=null&&c.set(f.path,d(f.path)),!c.has(f.path)){i.push(`no host found for the addition to ${f.path} (addition:${u})`);return}if(!(f.kind==="pointer"&&!t.ticked.some(w=>Xl(f.text,w)))){if(f.kind==="reference_update"){g.push(u),p.add(f.path);return}zl(e,c.get(f.path),f.heading,[f.text],[`addition:${u}`])}});let h=[...p].filter(f=>c.has(f)).sort();return{outputs:[...c.entries()].sort(([f],[u])=>f.localeCompare(u)).map(([f,u])=>({path:f,content:`${u.lines.join(`
42
+ `)}
43
+ `,provenance:u.prov,created:u.created})),deletes:a.sort(),removals:r,modelHosts:h,pendingAdditions:g,warnings:i}}function Ko(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 qo}from"node:path";var ru=/(read|open|cat|file)/i;function iu(e){return e.some(t=>ru.test(`${t.name} ${t.description??""}`))}function Ql(e,t){if(!e)return[];let n=e.files.find(i=>i.role==="tools"),o=[];if(n)try{o=qt(t[n.path]).tools.map(i=>({name:i.name,description:i.description??null}))}catch{o=[]}let s=new Map(o.map(i=>[i.name,i]));for(let i of e.tools)i.source!=="mcp"&&(s.has(i.label)||s.set(i.label,{name:i.label}));return[...s.values()]}function wr(e){return iu(e)?"on_demand":"never"}function au(e,t){return t&&!["reference","template","log"].includes(t)?!1:/^(?:changelog|changes|history)(?:\.(?:md|mdx|markdown|txt|rst|adoc))?$/i.test(qo(e))||/(?:^|\/)(?:archives?|old)\//i.test(e)||/(?:^|\/)versions\/v?\d+(?:\.\d+)*(?:[-+][\w.-]+)?\.(?:md|mdx|markdown|txt)$/i.test(e)||/\.v\d+(?:\.\d+)*(?:[-+][\w.-]+)?\.(?:md|mdx|markdown|txt)$/i.test(e)}function Yl(e,t,n,o){if(!Pr(e))return()=>!1;let s=Wn(e,Object.keys(t),n,t,o);return(i,r)=>{let a=s.ownerOf(i.path),c=a?.folder??n,l=c&&a&&a.key!==null&&/^(?:archives?|old)$/i.test(qo(c))?c.split("/").slice(0,-1).join("/"):c;return!r&&au(Je(i.path,l)??i.path,i.role)}}function Zl(e,t){if(t.existing)return t.existing.mode;let n=(t.attachments??t.node?.files??[]).some(o=>o.path===e.path&&o.label);return Yl(t.settings,t.files,t.root,t.agentConfigurations)(e,n)?"never":e.role==="skill"?J(e.path,{nested:!0})?"on_demand":"never":e.role==="log"?"never":e.role!=="template"&&e.role!=="reference"?"always":t.prompt?.frontmatter?wr(t.prompt.frontmatter.tools.map(o=>({name:o}))):wr(Ql(t.node,t.files))}var cu=/sent from (\S+:\d+)\.?\s*$/;function ep(e,t){let{repoKey:n,root:o,files:s,fragment:i}=t,r=Yl(e,s,o,t.agentConfigurations),a=[],c=new Set(i.edges.filter(f=>f.kind==="delegates").map(f=>f.to)),l=new Map;for(let f of i.nodes)for(let u of f.files)l.set(u.path,[...l.get(u.path)??[],{nodeId:f.id,label:f.label,role:u.role,skill:u.label,inCode:u.span!==void 0}]);let d=f=>(i.nodes.find(u=>u.id===f)?.files??[]).filter(u=>["system prompt","soul","knowledge","skill"].includes(u.role)).map(u=>u.path),p=(f,u,w=()=>!0)=>{for(let v of d(f)){let S=(s[v]??"").split(`
44
+ `).findIndex(k=>k.includes(u)&&w(k));if(S>=0)return`${v}:${S+1}`}return null},m=f=>Je(f,o)??f,g=new Map,h=[];for(let f of Object.keys(s).filter(u=>An(u,o)).sort()){let u=l.get(f)?.[0]??null,w=u?`${n}#${u.nodeId}`:null,v={repo:n,path:f,unit:w,role:u?.role??null};if(r(v,l.get(f)?.some(y=>!!y.skill)??!1)){h.push({...v,mode:"never",via:"history; retained as analysis context",evidence:""});continue}if(!u){h.push({...v,mode:"never",via:"not a convention, not referenced",evidence:""});continue}switch(u.role){case"system prompt":{let y="convention";if(c.has(u.nodeId))y="sub-agent file; its parent sees only the frontmatter description";else if(u.inCode){let S=i.nodes.find(b=>b.id===u.nodeId)?.desc??"",k=cu.exec(S)?.[1];y=k?`system prompt in code, sent from ${k}`:"system prompt in code"}h.push({...v,mode:"always",via:y,evidence:""});break}case"code":h.push({...v,mode:"never",via:"code that sends the prompt; the model never reads it",evidence:""});break;case"soul":case"knowledge":{let y=qo(f),S=p(u.nodeId,y,k=>/\b(not|never)\b.*\b(loaded|read)\b/i.test(k));h.push(S?{...v,mode:"never",via:"a line in the files says it is not loaded",evidence:S}:{...v,mode:"always",via:"Counterfact's runner appends it (src/lib/run/execute.ts:242-243)",evidence:""});break}case"tools":case"mcp":case"config":{let y=!0;try{u.role==="tools"?qt(s[f]):JSON.parse(s[f])}catch{y=!1}h.push(y?{...v,mode:"always",via:u.role==="config"?"config":"tool definitions",evidence:""}:{...v,mode:"unknown",via:"unreadable config",evidence:""});break}case"skill":{let y=_t(e,qo(f),s[f]),S=y.description??null;a.push(...(y.warnings??[]).map(k=>`${n}: ${f}: ${k}`)),h.push({...v,mode:"on_demand",via:S?`skill trigger \u2014 description: ${S}`:"skill trigger",evidence:"",evidenceKind:"skill-frontmatter"});break}default:{let y=p(u.nodeId,m(f))??(u.skill?`skill ${u.skill}`:""),S=i.nodes.find(k=>k.id===u.nodeId)??null;if(wr(Ql(S,s))==="on_demand")h.push({...v,mode:"on_demand",via:"named by a file the unit loads",evidence:y});else{let k=g.get(u.nodeId)??{label:u.label,paths:[]};k.paths.push(f),g.set(u.nodeId,k),h.push({...v,mode:"never",via:"pointer, but no file-reading tool",evidence:y})}}}}for(let{label:f,paths:u}of g.values()){let w=u.length;a.push(`${n}: ${w} ${A(w,"reference file")} can only be reached by a pointer, and ${f} has no file-reading tool, so it can't open ${A(w,"it","them")}; for example: ${u.slice(0,5).join(", ")}`)}return{entries:h,warnings:a}}function Uo(e,t,n){return e.find(o=>o.repo===t&&o.path===n)??null}var lu="<!-- counterfact: proposed file -->";function Bt(e,t){return e.startsWith(`${t}#`)?e.slice(t.length+1):null}function tp(e,t,n){if(Zt(e))return na(t,n);if(!t.startsWith(`---
45
+ `)){let c=n([]);return c.length?`---
46
+ tools: ${c.join(", ")}
47
+ ---
48
+ ${t}`:t}let o=t.indexOf(`
49
+ ---`,3),s=t.slice(4,o).split(`
50
+ `),i=s.findIndex(c=>/^tools\s*:/i.test(c)),r=i>=0?s[i].replace(/^tools\s*:\s*/i,"").replace(/^\[|\]$/g,"").split(",").map(c=>c.trim()).filter(Boolean):[],a=n(r);return i>=0?a.length?s[i]=`tools: ${a.join(", ")}`:s.splice(i,1):a.length&&s.push(`tools: ${a.join(", ")}`),`---
51
+ ${s.join(`
52
+ `)}${t.slice(o)}`}function np(e,t){let n=JSON.parse(e);return Array.isArray(n)?`${JSON.stringify(t(n),null,2)}
53
+ `:`${JSON.stringify({...n,tools:t(n.tools??[])},null,2)}
54
+ `}function pu(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 sp(e,t,n,o,s,i=[]){let r={...t};for(let a of n.files)if(a.action==="delete"&&delete r[a.path],a.action==="create"){let c=a.frontmatter?`---
55
+ name: ${kt(a.frontmatter.name)}
56
+ description: ${kt(a.frontmatter.description)}
57
+ ${a.frontmatter.tools.length?`tools: ${Et(e,a.frontmatter.tools)}
58
+ `:""}---
59
+ `:"";r[a.path]=`${c}${lu}
60
+ `}for(let a of n.additions)a.kind==="reference_update"||r[a.path]==null||(r[a.path]=`${r[a.path].replace(/\n?$/,`
61
+ `)}${a.text}
62
+ `);for(let a of n.toolMoves){let c=du(e,r,{tool:a.tool,fromPath:a.fromPath??bn(o,n,a.fromUnit,s),toPath:a.toPath??bn(o,n,a.toUnit,s)});c&&i.push(c)}return r}function bn(e,t,n,o){let s=Bt(n,o);return s?pu(e,s):t.files.find(i=>i.unit===n&&i.role==="system prompt")?.path??null}function du(e,t,n){let{tool:o,fromPath:s,toPath:i}=n;if(Zt(e)){for(let r of[s,i])if(r&&t[r]!=null&&!r.endsWith(".json")&&ta(t[r]).error)return`${r}: tools could not be read; moving ${o} was skipped.`}return s&&t[s]!=null&&(t[s]=s.endsWith(".json")?np(t[s],r=>r.filter(a=>a.name!==o)):tp(e,t[s],r=>r.filter(a=>a!==o))),i&&t[i]!=null&&(t[i]=i.endsWith(".json")?np(t[i],r=>r.some(a=>a.name===o)?r:[...r,{...n.object??{},name:o}]):tp(e,t[i],r=>r.includes(o)?r:[...r,o])),null}function rp(e,t){let n=Me(e,fn(e,t));return Dn(n.fragment,t.repoKey).fragment}var op=e=>e.files.map(t=>t.path).sort().join(`
63
+ `),xn=(e,t)=>e.nodes.find(n=>n.files.some(o=>o.path===t))??null;function Ho(e,t,n,o){let s=u=>`${o}#${u}`,i=new Map(e.nodes.map(u=>[u.id,u])),r=new Map(t.nodes.map(u=>[u.id,u])),a=[];for(let[u,w]of r)i.has(u)?op(i.get(u))!==op(w)&&a.push({id:s(u),change:"edited",label:w.label}):a.push({id:s(u),change:"added",label:w.label});for(let[u,w]of i)r.has(u)||a.push({id:s(u),change:"removed",label:w.label});let c=u=>`${u.from}>${u.to}>${u.kind}`,l=new Map(e.edges.map(u=>[c(u),u])),d=new Map(t.edges.map(u=>[c(u),u])),p=[...[...d].filter(([u])=>!l.has(u)).map(([,u])=>({from:s(u.from),to:s(u.to),kind:u.kind,change:"added",detail:null})),...[...l].filter(([u])=>!d.has(u)).map(([,u])=>({from:s(u.from),to:s(u.to),kind:u.kind,change:"removed",detail:null}))],m=(u,w)=>{let v=w?xn(t,u)??xn(e,u):xn(e,u)??xn(t,u);return v?s(v.id):""},g=n.files.map(u=>{let w=n.segments.filter(b=>b.disposition==="move"&&b.to===u.path&&b.path!==u.path),v=n.segments.filter(b=>b.path===u.path),y=m(u.path,u.action!=="delete"),S,k={};if(u.action==="delete")S="removed";else if(u.action==="create"){let b=[...new Set(w.map($=>$.path))],O=b.length===1&&n.files.some($=>$.path===b[0]&&$.action==="delete"),_=b.length===1?m(b[0],!1):"";O&&_&&_!==y?(S="moved",k={fromNode:_,fromPath:b[0]}):S="added"}else w.length?S="grown":n.reorder?.path===u.path?S="reordered":v.length||u.action==="shrink"?S="shrunk":S="grown";return{path:u.path,role:u.role,node:y,change:S,...k,segments:w.length}});if(n.split){let u=new Set([...n.segments.map(w=>w.path),...(n.additions??[]).map(w=>w.path)]);for(let w of u){if(g.some(y=>y.path===w))continue;let v=xn(e,w);g.push({path:w,role:v.files.find(y=>y.path===w).role,node:s(v.id),change:n.segments.some(y=>y.path===w)?"shrunk":"grown",segments:0})}}n.reorder&&!g.some(u=>u.path===n.reorder.path)&&g.push({path:n.reorder.path,role:"system prompt",node:m(n.reorder.path,!0),change:"reordered",segments:0});let h=u=>{if(Bt(u,o))return u;let v=n.files.find(y=>y.unit===u);return v?m(v.path,!0):u},f=n.toolMoves.map(u=>({label:u.tool,fromNode:h(u.fromUnit),toNode:h(u.toUnit)}));return{nodes:a,edges:p,files:g,tools:f}}var ap=["ordering","reliability","coverage","cost","safety","correctness"],vn=["low","medium","high","critical"];function yr(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 Xe=(e,t)=>e.includes(t);function uu(e){if(!Xe(dr,e.subKind))return`sub-kind "${e.subKind}" is not one of ${dr.join(", ")}`;if(!Xe(ap,e.kind))return`impact "${e.kind}" is not one of ${ap.join(", ")}`;if(e.reorders.length>1)return"more than one reorder";let t=[];for(let r of e.files){if(!Xe(fr,r.action))return`${r.path}: action "${r.action}" is not one of ${fr.join(", ")}`;if(!Xe(ur,r.role))return`${r.path}: role "${r.role}" is not one of ${ur.join(", ")}`;if(!Xe(mr,r.loadMode))return`${r.path}: load mode "${r.loadMode}" is not one of ${mr.join(", ")}`;let a=r.fmName||r.fmDescription||r.fmTools.length?{name:r.fmName,description:r.fmDescription,tools:r.fmTools}:null;t.push({path:r.path.trim(),action:r.action,role:r.role,unit:r.unit,loadMode:r.loadMode,loadVia:r.loadVia||null,purpose:r.purpose,frontmatter:a})}let n=[];for(let r of e.segments){if(!Xe(hr,r.disposition))return`${r.path}:${r.startLine}-${r.endLine}: disposition "${r.disposition}" is not one of ${hr.join(", ")}`;let a=r.intoPath?{path:r.intoPath.trim(),line:r.intoLine}:null,c=r.disposition==="remove_duplicate"||r.disposition==="fold_into",l=r.to.trim()||(c&&a?a.path:"");n.push({path:r.path.trim(),startLine:r.startLine,endLine:r.endLine,to:l,disposition:r.disposition,into:a,childRef:r.childRef||null,heading:r.heading||null,reason:r.reason})}let o=[];for(let r of e.additions){if(!Xe(gr,r.kind))return`addition to ${r.path}: kind "${r.kind}" is not one of ${gr.join(", ")}`;o.push({path:r.path.trim(),text:r.text,kind:r.kind,heading:r.heading||null})}let s=e.reorders[0],i=Xe(vn,e.severity)?e.severity:"medium";return{body:{...Bo(e),subKind:e.subKind,kind:e.kind,severity:i,title:e.title.trim(),cause:e.cause,evidence:e.evidence.map(r=>({path:r.path.trim(),line:r.line,excerpt:r.excerpt})),files:t,segments:n,additions:o,reorder:s?{path:s.path.trim(),startLine:s.startLine,endLine:s.endLine,steps:s.order.map((r,a)=>({from:r,reason:s.reasons[a]||null}))}:null,toolMoves:e.toolMoves.map(r=>({...r,fromPath:null,toPath:null}))},children:e.children.map(r=>({ref:r.ref.trim(),how:r.how}))}}function mu(e,t){let n=[],o=[],s=[],i=(r,a)=>{n.push(`proposal "${r}": ${a} \u2014 dropped`),o.push({title:r,reason:a})};for(let r of t.raw){let a=uu(r);if(typeof a=="string"){i(r.title,a);continue}let{body:c}=a,l=a.children,d=`proposal "${c.title}"`;if(c.files.length>ys){i(c.title,`${c.files.length} files (cap ${ys})`);continue}if(c.segments.length>Ss){i(c.title,`${c.segments.length} segments (cap ${Ss})`);continue}let p=yr(c),m=new Set(c.files.filter(x=>x.action==="create").map(x=>x.path)),g=p.filter(x=>!m.has(x)),h=g.length>0?t.repos.find(x=>g.every(E=>x.files[E]!=null)):void 0;if(!h){i(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=>jn(x)?`${x} is code \u2014 the structural pass moves instructions only`:An(x,h.root)?m.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){i(c.title,w);continue}let v=[];for(let x of c.evidence.slice(0,4)){let E=f(x.path)?Ee(h.files[x.path],x.excerpt):null;E==null?n.push(`${d}: evidence at ${x.path} is not a quote from the file \u2014 dropped`):v.push({...x,line:E})}c.evidence.length>4&&n.push(`${d}: ${c.evidence.length} evidence sites, kept the first 4`),c.evidence=v;let y=new Set(c.files.filter(x=>x.action!=="delete").map(x=>x.path)),S=null;for(let x of c.segments){let E=h.files[x.path];if(E==null){S=`segment ${x.path}:${x.startLine}-${x.endLine} is in a file that does not exist yet`;break}let C=z(E).length;if(x.startLine<1||x.endLine<x.startLine||x.endLine>C){S=`segment ${x.path}:${x.startLine}-${x.endLine} is outside the file`;break}let R=Lo(oe(e,E),x.startLine,x.endLine);if(R.snapped&&(n.push(`${d}: segment ${x.path}:${x.startLine}-${x.endLine} cut an atomic block; widened to ${R.start}-${R.end}`),x.startLine=R.start,x.endLine=R.end),(x.disposition==="move"||x.disposition==="remove_superseded")&&!y.has(x.to)&&x.to!==x.path){S=`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){S=`segment ${x.path}:${x.startLine}-${x.endLine} is ${x.disposition} with no target`;break}if(x.into&&!f(x.into.path)&&!m.has(x.into.path)){S=`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"){S=`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))){S=`segment ${x.path}:${x.startLine}-${x.endLine} is remove_superseded but names no child`;break}}if(!S){let x=[...c.segments].sort((E,C)=>E.path.localeCompare(C.path)||E.startLine-C.startLine);for(let E=1;E<x.length;E++)if(x[E].path===x[E-1].path&&x[E].startLine<=x[E-1].endLine){S=`overlapping segments in ${x[E].path}`;break}}if(!S){let x=c.segments.filter(C=>C.disposition!=="move"),E=c.segments.find(C=>C.into&&x.some(R=>R.path===C.into.path&&C.into.line>=R.startLine&&C.into.line<=R.endLine));E&&(S=`segment ${E.path}:${E.startLine}-${E.endLine} folds into a line this proposal removes`)}if(S){i(c.title,S);continue}let k=new Set,b=Ko(c),O=(x,E)=>E!=null&&c.segments.some(C=>C.path===x&&E>=C.startLine&&E<=C.endLine);if(l=l.filter(x=>{if(k.has(x.ref))return!1;k.add(x.ref);let E=/^f(\d+)$/.exec(x.ref),C=E?t.findings[Number(E[1])-1]:void 0;if(!C)return n.push(`${d}: child ${x.ref} is not a finding of this analysis \u2014 link dropped`),!1;if(!Ne([C]).active.length)return n.push(`${d}: child ${x.ref} is not active \u2014 link dropped`),!1;let R=C.siteRepo===h.key;return R&&C.site&&O(C.site.path,C.site.line)||R&&C.otherSites.some(P=>O(P.path,P.line))||b.some(P=>x.how.includes(P))?!0:(n.push(`${d}: child ${x.ref} ("${C.title}") is not in a segment and its how names no destination \u2014 link dropped`),!1)}),l.length===0&&c.evidence.length<2){i(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,E=oe(e,h.files[x.path]??"").filter(R=>R.kind==="list_item"&&R.level===0&&/^\s*\d+[.)]/.test(R.text)&&R.start>=x.startLine&&R.end<=x.endLine),C=x.steps.map(R=>R.from).sort((R,I)=>R-I);if(C.length!==E.length||C.some((R,I)=>R!==I+1)){i(c.title,`reorder of ${x.path}:${x.startLine}-${x.endLine} is not a permutation of its ${E.length} steps`);continue}}let _=s.find(x=>yr(x.body).some(E=>p.includes(E)));if(_){i(c.title,`shares ${yr(_.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,E)=>vn.indexOf(E)>vn.indexOf(x)?E:x):vn[Math.min(vn.indexOf(c.severity),1)],s.push({repo:h.key,body:c,children:l})}for(let r of s.splice(tn))i(r.body.title,`over the cap of ${tn} proposals`);return{kept:s,warnings:n,dropped:o}}var hu=/\b(never|always|must|don't|do not)\b/i,gu=/^\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 ku(e){return hu.test(e)||gu.test(e)}function Sr(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 wu(e,t){let n=Br("",t),o=Je(e.path,t)??e.path,s=o.startsWith(".claude/")?".claude/":"",i=Fe(e.frontmatter?.name||ip(o).replace(/\.md$/i,""));switch(e.role){case"skill":return`${n}${s}skills/${i}/SKILL.md`;case"system prompt":return`${n}${s}agents/${i}.md`;case"template":return`${n}templates/${ip(o)}`;default:return`${n}${o}, with a pointer from a file the agent always loads`}}function cp(e,t){let n=mu(e,t),o=[...n.warnings],s=[...n.dropped],i=[],r=(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=ze(d.root),m=t.fragments.find(k=>k.repoKey===l)?.fragment;if(!m){r(c.title,`no architecture graph for ${l}`);continue}let g=k=>`${l}#${k}`,h=k=>m.nodes.find(b=>b.id===Bt(k,l))??null;for(let k of c.toolMoves)k.fromPath=bn(m,c,k.fromUnit,l),k.toPath=bn(m,c,k.toUnit,l);let f=c.toolMoves.find(k=>!k.fromPath||!k.toPath);if(f){r(c.title,`cannot find the tool list of ${f.fromPath?f.toUnit:f.fromUnit}`);continue}let u=rp(e,{repoKey:l,root:p,agentConfigurations:d.agentConfigurations,files:sp(e,d.files,c,m,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=u.nodes.find(_=>_.files.some($=>$.path===k.path));if(!b){w=`The agent would not load ${k.path} \u2014 put it at ${wu(k,p)}.`;break}let O=Bt(k.unit,l);if(O&&b.id!==O){w=`${k.path} would attach to ${g(b.id)}, not ${k.unit}`;break}if(!O&&m.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"&&!u.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=Bt(k.toUnit,l)??u.nodes.find(_=>_.files.some($=>c.files.some(x=>x.unit===k.toUnit&&x.path===$.path)))?.id;if(!u.nodes.find(_=>_.id===b)?.tools.some(_=>_.label===k.tool)){w=`${k.tool} would not reach ${k.toUnit}`;break}}if(w){r(c.title,w);continue}for(let k of c.files){if(k.action==="delete"||k.action==="shrink")continue;let b=k.action==="create"?null:Uo(t.loadModes,l,k.path),O=Zl(k,{settings:e,root:p,existing:b,node:h(k.unit),files:d.files,attachments:u.nodes.flatMap(_=>_.files),agentConfigurations:d.agentConfigurations,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 _=$=>Uo(t.loadModes,l,$)?.mode==="always"&&Uo(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(`
64
+ `).slice(k.startLine-1,k.endLine).findIndex(ku);if(_>=0){w=`moves a rule into a file the agent never reads (${k.path}:${k.startLine+_} \u2192 ${k.to})`;break}}if(w){r(c.title,w);continue}let y=Vl(e,{body:c,ticked:Ko(c),contents:d.files,childSites:[]}).outputs.map(k=>({path:k.path,bytes:Buffer.byteLength(k.content,"utf8")})).find(k=>k.bytes>ws);if(y){r(c.title,`would assemble ${y.path} at ${y.bytes} bytes (cap ${ws})`);continue}let S=Object.fromEntries(Sr(c,d.files).map(k=>[k,fu("sha256").update(d.files[k]).digest("hex")]));i.push({...a,sourceHashes:S,delta:Ho(m,u,c,l)})}return{structures:i,warnings:o,dropped:s}}var yu=["low","medium","high","critical"];function Go(e){return e.map((t,n)=>`f${n+1}`)}function I_(e,t){if(t.every((o,s)=>o===s))return e;let n=o=>{let s=/^f(\d+)$/.exec(o),i=s?t[Number(s[1])-1]:void 0;return i===void 0?o:`f${i+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 xr(e,t){let n=Go(e),o=new Set(Ne(e).active),s=e.flatMap((r,a)=>!o.has(r)||[r.site,...r.otherSites??[]].some(c=>c&&Wt(c.path,t))?[]:[{...r,ref:n[a]}]),i=e.map(r=>({...r.activity===void 0?{}:{activity:r.activity},title:r.title,severity:yu.includes(r.severity)?r.severity:"medium",siteRepo:r.siteRepo,site:r.site,otherSites:(r.otherSites??[]).map(a=>({path:a.path,line:a.line}))}));return{items:s,candidates:i,refs:n}}var br=F.generate;function Su(e,t){return{template:"derive-structure",model:br,answerFormat:"structures",limits:{effort:"high"},inputs:{maxStructures:String(tn),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:je(o),markdown:s,outline:s?oe(e,o).map(i=>({...i,text:i.text.slice(0,60)})):[]}})}}}async function lp(e,t,n){return(await T(t,Su(e,n),e)).structures}async function Wo(e,t,n,o={}){let s=o.enforce??Qs;if(t.length===0)return{kept:[],dropped:[],flagged:[],ran:!0};let i=await rl(e,t.map(l=>({subKind:l.body.subKind,title:l.body.title,cause:l.body.cause,evidence:l.body.evidence,resolves:l.children.map(d=>n[Number(d.ref.slice(1))-1]?.title??d.ref)})),{scopeRuleId:o.scopeRuleId??"structure",maxTokens:o.maxTokens});if(!i)return{kept:t,dropped:[],flagged:[],ran:!1};let r=[],a=[],c=[];return t.forEach((l,d)=>{let p=i.get(d);if(p.inScope){r.push(l);return}let m={title:l.body.title,reason:p.reason};s?a.push(m):(c.push(m),r.push(l))}),{kept:r,dropped:a,flagged:c,ran:!0}}function xu(e,t,n,o=15e4){let s=new Set(t.flatMap(l=>[l.site?.path,...(l.otherSites??[]).map(d=>d.path)]).filter(l=>!!l)),i=l=>e.has(l)?0:s.has(l)?1:2,r=Object.keys(n).sort((l,d)=>i(l)-i(d)||n[l].length-n[d].length||(l<d?-1:1)),a={},c=0;for(let l of r)i(l)>0&&c+n[l].length>o||(a[l]=e.has(l)?ge(n[l]):n[l],c+=a[l].length);return a}function pp(e,t,n,o,s={}){return o?xu(Z(t),n,re(s,it(e),t)):mo(e,t,void 0,new Set,void 0,{...s,CF_READING_PRIORITY:"0"}).files}function dp(e){let t=Go(e);return e.flatMap((n,o)=>{if(n.category!=="contradiction"&&n.category!=="ambiguity")return[];let s=n.site?[{...n.site,repo:n.siteRepo,excerpt:n.excerpt}]:[];return s.push(...(n.otherSites??[]).map(i=>({...i,repo:i.repo??n.siteRepo}))),[{id:t[o],title:n.title,category:n.category,sites:s}]})}function fp(e,t,n){return t===void 0?[]:e.filter(o=>o.sites.length>0&&o.sites.every(s=>s.repo===t&&n.some(i=>i.path===s.path&&(!i.span||s.line!==null&&s.line>=i.span.from&&s.line<=i.span.to))))}import{posix as bu}from"node:path";function Xo(e,t,n=1){let o=oe(e,t).filter(s=>s.kind==="heading");return o.map((s,i)=>({heading:s.text,startLine:s.start+n-1,endLine:(o.slice(i+1).find(r=>r.level<=s.level)?.start??z(t).length+1)+n-2,level:s.level}))}function up(e,t,n=1){let o=Xo(e,t,n);return o.length?[{startLine:n,endLine:o[1]?o[1].startLine-1:o[0].endLine},...o.filter(s=>/^#{1,6}\s+(Identity|Mission|Boundaries)\b/i.test(s.heading)).map(({startLine:s,endLine:i})=>({startLine:s,endLine:i}))]:[{startLine:n,endLine:n+z(t).length-1}]}function mp(e,t,n){let o=new Map;for(let s of t.files.filter(i=>i.role==="tools")){let i=n[s.path]??"",r=[];try{r=qt(i).tools}catch{}let a=[...r,...ai(i).tools,...ci(i).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(i=>i.role==="mcp")?.path??""})}function vr(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 gp(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 kp(e,t){if(!vr(e).some(o=>o.id===t))return null;let n=gp(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 wp(e,t){return vr(t.graph).map(n=>Ou(e,{...t,unitId:n.id}))}function hp(e,t,n){let o=t.files.filter(s=>s.role==="skill");return o.map(s=>{if(!s.label)throw new Error(`The graph did not name the skill at ${s.path}.`);let i=s.label,r=t.files.filter(d=>d.role==="reference"&&(d.label===i||d.path.startsWith(bu.dirname(s.path)+"/"))).map(d=>d.path).sort(),a=[s.path,...r],c=a.map(d=>n[d]??"").join(`
65
+ `),l=d=>d.filter(p=>at(c,{name:p,key:p,paths:[],bytes:0}));return{name:i,path:s.path,description:_t(e,s.path,n[s.path]??"").description?.trim()||"no description",bytes:a.reduce((d,p)=>d+Buffer.byteLength(n[p]??""),0),references:r,tools:l(t.tools.map(d=>d.label)),skills:l(o.flatMap(d=>d.label&&d.label!==i?[d.label]:[]))}}).sort((s,i)=>s.name.localeCompare(i.name))}function vu(e,t,n){return t.files.filter(o=>o.role==="system prompt"||o.role==="soul").map(o=>{let s=n[o.path]??"",i=o.span?.from??1,r=o.span?.to??z(s).length,a=z(s).slice(i-1,r).join(`
66
+ `);return{path:o.path,text:a,startLine:i,endLine:r,numberedText:je(s).split(`
67
+ `).slice(i-1,r).join(`
68
+ `),sections:Xo(e,a,i)}})}function Ou(e,t){let{graph:n,files:o}=t,s=vr(n);if(!t.unitId&&s.length!==1)throw new Error("Select one top-level agent for the split inventory.");let i=t.unitId?s.find(l=>l.id===t.unitId):s[0];if(!i)throw new Error(`No top-level agent named ${t.unitId} is available.`);let r=gp(n,i.id),a=hp(e,i,o),c=vu(e,i,o);return{agent:{id:i.id,name:i.label,description:i.desc,tools:i.tools.map(l=>l.label)},skills:a,tools:mp(e,i,o).map(l=>({...l,skills:a.filter(d=>d.tools.includes(l.name)).map(d=>d.name)})),subAgents:n.nodes.filter(l=>l.id!==i.id&&r.has(l.id)&&l.kind==="agent").map(l=>({id:l.id,name:l.label,description:l.desc,tools:l.tools.map(d=>d.label),skills:hp(e,l,o)})),prompt:c[0]??null,prompts:c,knowledge:i.files.filter(l=>l.role==="knowledge").map(l=>({path:l.path,sections:Xo(e,o[l.path]??"")})),open:t.open.map(l=>({...l,frozen:[...l.frozen],declined:[...l.declined],files:[...l.files]})),findings:fp(t.findings??[],t.repoKey,n.nodes.filter(l=>r.has(l.id)).flatMap(l=>l.files))}}function zo(e,t){return(t.repos??[]).flatMap((n,o)=>{let s=vs(t,o);return wp(e,{graph:s,files:n.files??{},open:t.openStructures??[],repoKey:n.key,findings:t.splitFindingsPriced?t.shapeFindings??[]:[]}).filter(i=>!Ve(i.agent)).map(i=>({repo:n,graph:s,inventory:i}))})}function yp(e){return e.findings.length>0||e.skills.length>=8||e.subAgents.length>=3||e.tools.length>=20}var Or=F.generate;function Sp(e){return{template:"derive-shape",model:Or,answerFormat:"shape",limits:{effort:"high"},inputs:{inventoryData:e,maxSubAgents:String(nn),minSkills:String(no)}}}function gC(e,t){return e.tools.analysisRequest(Sp(t))}function xp(e,t){return e.tools.validateShapeInput(t),T(e,Sp(t))}function bp(e,t,n){let o=n.nodes.filter(l=>l.kind==="agent"),s=new Set(n.edges.filter(l=>l.kind==="delegates").map(l=>l.to)),i=o.filter(l=>!s.has(l.id)),r=i[0];if(i.length!==1||r.id!==t.agent.id||r.label!==t.agent.name)return`${t.agent.name} would not remain the one original entry point.`;let a=new Map(e.frontDoor.skills.map(l=>[l,r.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===r.id&&p.to===d[0].id).length!==1)return`sub-agent ${l.name} would not load once with a handoff from ${t.agent.name}.`;for(let p of l.skills)a.set(p,d[0].id)}for(let l of t.skills){let d=o.flatMap(m=>m.files.filter(g=>g.role==="skill"&&g.label===l.name&&!c.has(JSON.stringify([m.id,g.label,g.path]))).map(g=>({node:m.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(m=>m.role==="skill"&&m.label===p.name&&m.path===p.path))return`existing skill ${p.name} would no longer load on ${l.name}.`}return null}function vp(e,t,n,o,s){let i=h=>({section:null,error:h}),{path:r,startLine:a,endLine:c}=t;if(!(n==="prompt"?o.prompts:o.knowledge).find(h=>h.path===r)||s[r]===void 0)return i(`${n} section ${r} is not an available ${n} file.`);let d=n==="prompt"?o.prompts.find(h=>h.path===r):null,p=d?.startLine??1,m=d?.endLine??z(s[r]).length;if(!Number.isInteger(a)||!Number.isInteger(c)||a<p||c<a||c>m)return i(`${n} section ${r}:${a}-${c} is outside its file or prompt span.`);let g=Lo(oe(e,s[r]),a,c);return g.start<p||g.end>m?i(`${n} section ${r} snaps outside its prompt span.`):d&&up(e,d.text,d.startLine).some(h=>h.startLine<=g.end&&h.endLine>=g.start)?i(`prompt section ${r}:${g.start}-${g.end} would move the agent's identity.`):{section:{path:r,startLine:g.start,endLine:g.end},error:null}}var Jo=(e,t)=>e.path===t.path&&e.startLine<=t.endLine&&t.startLine<=e.endLine,N=e=>({shape:null,warnings:[`Split check discarded: ${e}`]});function Op(e,t,n){if(t.decision==="keep")return{shape:null,warnings:[]};if(t.decision!=="split")return N(`unknown decision "${t.decision}".`);if(t.subAgents.length<1||t.subAgents.length>nn)return N(`a split needs 1\u2013${nn} sub-agents.`);let{inventory:o,files:s}=n,i=new Set(o.skills.map(f=>f.name)),r=new Set(o.tools.map(f=>f.name)),a=new Set,c=f=>i.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 u=c(f);if(u)return N(u)}let l=new Set(o.subAgents.map(f=>Fe(f.name))),d=new Set,p=[],m=new Set,g=[];for(let f of t.subAgents){if(f.skills.length<no&&f.promptSections.length===0)return N(`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 N(O)}for(let b of f.tools)if(!r.has(b))return N(`unknown tool ${b} on ${f.name}.`);if(!f.handoff.trim())return N(`sub-agent ${f.name} has an empty handoff.`);if(!f.description.trim()||f.description.length>1024)return N(`sub-agent ${f.name} needs a description of 1\u20131024 characters.`);if(!/[a-z0-9]/i.test(f.name))return N(`sub-agent "${f.name}" needs a usable name.`);let u=Fe(f.name);if(l.has(u))return N(`the existing sub-agent ${u} already uses that name.`);let w=u,v=2;for(;d.has(w)||l.has(w);)w=`${u}-${v++}`;d.add(w);for(let b of f.resolves)if(!o.findings.some(O=>O.id===b))return N(`unknown finding ${b} on sub-agent ${w}.`);let y=[];for(let b of f.evidence){let O=s[b.path]===void 0?null:Ee(s[b.path],b.excerpt);if(O===null)return N(`evidence quote was not found in ${b.path}: "${b.excerpt}".`);y.push({...b,line:O}),m.add(`${b.path}:${O}:${b.excerpt.replace(/\s+/g," ").trim()}`)}let S=[],k=[];for(let[b,O,_]of[["prompt",f.promptSections,S],["knowledge",f.knowledgeSections,k]])for(let $ of O){let x=vp(e,$,b,o,s);if(x.error)return N(x.error);let E=x.section;if(b==="prompt"){if(p.some(C=>Jo(E,C)))return N(`prompt section ${E.path}:${E.startLine}-${E.endLine} is placed twice.`);p.push(E)}else if(k.some(C=>Jo(E,C)))return N(`knowledge section ${E.path}:${E.startLine}-${E.endLine} is listed twice on ${w}.`);_.push(E)}g.push({...f,name:w,skills:[...f.skills],tools:[...f.tools],resolves:[...new Set(f.resolves)],evidence:y,handoff:f.handoff.trim(),promptSections:S,knowledgeSections:k,movedKnowledge:[],neededKnowledge:[]})}for(let f of i)if(!a.has(f))return N(`skill ${f} is missing from the split.`);if(m.size<2)return N("a split needs at least two distinct evidence quotes.");for(let f of g)for(let u of f.knowledgeSections)(n.retainedKnowledge===void 0||n.retainedKnowledge.some(v=>Jo(v,u))||g.some(v=>v!==f&&v.knowledgeSections.some(y=>Jo(y,u)))?f.neededKnowledge:f.movedKnowledge).push(u);let h={...t,decision:"split",frontDoor:{...t.frontDoor,skills:[...t.frontDoor.skills]},subAgents:g};if(!n.afterGraph){let f=g[0].skills[0]?`moved skill ${g[0].skills[0]}`:`sub-agent ${g[0].name}`;return N(`cannot prove that ${f} would load without a loadability checker.`)}try{let f=bp(h,o,n.afterGraph(h));return f?N(f):{shape:h,warnings:[]}}catch(f){return N(`loadability check failed: ${f instanceof Error?f.message:String(f)}.`)}}import{posix as Ep}from"node:path";function On(e,t,n){let o=n.scoped[0]??"",s=o.slice(0,o.length-n.stripRoot(o).length),i=n.scoped.some(c=>n.stripRoot(c).startsWith(`${Ur}/`)),r=`${s}${Hr[i?0:1]}`,a=`${r}/${e}/skills/${t}`;return{agent:`${r}/${e}.md`,folder:a,skill:`${a}/SKILL.md`}}function Vo(e,t,n,o){return e.subAgents.flatMap(s=>s.skills.flatMap(i=>{let r=t.skills.find(l=>l.name===i),a=Ep.dirname(r.path),c=On(s.name,Ep.basename(a),o).folder;return Object.keys(n).filter(l=>l.startsWith(`${a}/`)).sort().map(l=>({name:i,owner:s.name,from:l,to:c+l.slice(a.length),fromFolder:a,toFolder:c}))}))}import{posix as Eu}from"node:path";var Er=e=>e.replace(/(?<!\.)[.!]$/,""),_u=e=>[...e.matchAll(/\bmcp__[^\s`"'()[\]{},;:<>]+/g)].map(t=>Er(t[0])),_p=(e,t)=>at(e,{name:t,key:t,paths:[],bytes:0});function Cp(e,t,n,o){if(e.CF_SPLIT_HELPER_TOOLS==="0")return[...t.tools];if(t.noTools)return[];let s=n.skills.filter(f=>t.skills.includes(f.name)),i=Object.keys(o).filter(f=>s.some(u=>f.startsWith(Eu.dirname(u.path)+"/"))),r=[...t.promptSections,...t.movedKnowledge,...t.neededKnowledge],a=[...i.map(f=>o[f]),...r.map(f=>z(o[f.path]??"").slice(f.startLine-1,f.endLine).join(`
69
+ `))].join(`
70
+ `),c=new Set([...n.agent.tools,...n.tools.map(f=>f.name)].filter(f=>!/[*?]/.test(f))),l=_u(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 u=[...c].filter(y=>y.endsWith(`__${f}`)),w=u.filter(y=>d.has(y.slice(0,y.lastIndexOf("__")+2))),v=u.length===1?u:w;return v.length===1?v[0]:null},m=new Set(l);for(let f of c)_p(a,f)&&m.add(f);let g=new Set([...c].flatMap(f=>/^mcp__.+__(.+)$/.exec(f)?.[1]??[]));for(let f of g){if(!_p(a,f))continue;let u=p(f);if(!u)return null;m.add(u)}let h=[...[...a.matchAll(/`([^`\n]+)`/g)].flatMap(f=>{let u=f[1];return c.has(u)?[u]:/^[\w*?./-]+(?:\([^)]*\))?$/.test(u)?[u.replace(/\([^)]*\)$/,"")]:[]}),...[...a.matchAll(/(?:[*?]+[\w-]+|[\w-]+[*?])[\w*?.-]*/g)].map(f=>f[0]),...[...a.matchAll(/\b[a-z][\w*?.-]*_[\w*?.-]+/gi)].map(f=>Er(f[0])),...[...a.matchAll(/\b(?:call|invoke)\s+(?:the\s+)?(?:tool\s+)?`?([\w*?.-]+)/gi)].map(f=>Er(f[1]))];for(let f of h){let u=p(f);if(!u)return null;m.add(u)}return t.tools.length?[...t.tools]:m.size?[...m].sort():null}function Qo(e,t,n,o,s={}){let i={...o},r=Ce(e,Object.keys(o),s.root);for(let a of t.subAgents){let c=Cp(e,a,n,o);i[On(a.name,"",r).agent]=["---",`name: ${a.name}`,`description: ${kt(a.description.replace(/\s+/g," "))}`,...c===null?[]:[`tools: ${c.length?Et(e,c):"[]"}`],"---",a.job].join(`
71
+ `)}for(let a of Vo(t,n,o,r))delete i[a.from],i[a.to]=o[a.from];return i}function Cu(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 $p(e,t){return e.split?{...t,files:t.files.flatMap(n=>{if(n.change!=="shrunk"&&n.change!=="grown")return[n];let o=Cu(e,n.path);return o==="grown"?[{...n,change:o}]:o==="unchanged"?[]:[n]})}:t}import{createHash as Ru}from"node:crypto";var Rp=e=>e.replace(/\s+/g," ").trim().replace(/[.!?]+$/,"").replace(/^./,t=>t.toLowerCase());function Ip(e,t){let n=e.frontDoor.name??t,o=e.subAgents.map(s=>Rp($u(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: ${Rp(e.frontDoor.job)}.${o.length?` Each helper gets its own skills and rules, and ${n} hands work to it.`:""}`}}function $u(e){return(e.name.replace(/[-_]/g," ").replace(/\s+/g," ").trim()||e.job.trim()).replace(/^./,n=>n.toUpperCase())}function Pp(e,t,n,o,s){if(!n.prompt)throw new Error("An original prompt is needed for each handoff.");let i=n.prompt,{files:r,root:a}=s,c=Ce(e,Object.keys(r),a),l=Vo(t,n,r,c),d=S=>On(S,"",c).agent,p=n.agent.name.replace(/^./,S=>S.toUpperCase()),m=new Map;for(let S of t.subAgents)for(let k of S.resolves){let b=m.get(k)??[];b.push(`${S.name} in ${d(S.name)}`),m.set(k,b)}let g=t.subAgents.flatMap(S=>[...S.promptSections,...S.movedKnowledge].map(k=>({...k,to:d(S.name),disposition:"move",into:null,childRef:null,heading:null,reason:S.job}))),h={...Bo(t),subKind:"extract_subagent",kind:"reliability",severity:"medium",...Ip({frontDoor:{...t.frontDoor,name:p},subAgents:t.subAgents},p),cause:t.reason,evidence:t.subAgents.flatMap(S=>S.evidence.map(k=>({...k}))),files:t.subAgents.map(S=>{let k=S.tools.filter(b=>!n.tools.find(O=>O.name===b).skills.some(O=>t.frontDoor.skills.includes(O)));return{path:d(S.name),action:"create",role:"system prompt",unit:`new:${S.name}`,loadMode:"always",loadVia:null,purpose:`${S.job}${k.length?` ${k.join(", ")}: only the sub-agent uses this.`:""}`,frontmatter:{name:S.name,description:S.description,tools:[...S.tools]}}}),segments:g,additions:t.subAgents.map(S=>({path:i.path,kind:"handoff",text:S.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(S=>({name:S.name,job:S.job,description:S.description,path:d(S.name),handoff:S.handoff,tools:[...S.tools],...S.noTools===void 0?{}:{noTools:S.noTools},resolves:[...S.resolves],skills:S.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:S.movedKnowledge.map(k=>({...k})),neededKnowledge:S.neededKnowledge.map(k=>({...k}))}))}},f=s.agentConfigurations?{agentConfigurations:s.agentConfigurations}:{},u=s.graphs?.before??Me(e,fn(e,{repoKey:o,files:r,root:a,...f})).fragment,w=s.graphs?.after??Me(e,fn(e,{repoKey:o,files:Qo(e,t,n,r,{root:a}),root:a,...f})).fragment,v=$p(h,Ho(u,w,h,o));for(let S of l){let k=w.nodes.find(O=>O.files.some(_=>_.path===d(S.owner)));if(!k)throw new Error(`The sub-agent at ${d(S.owner)} is missing from the discovered graph.`);let b=u.nodes.flatMap(O=>O.files).find(O=>O.path===S.from)?.role??(jn(S.from)?"code":"reference");v.files.push({path:S.to,fromPath:S.from,role:b,node:`${o}#${k.id}`,fromNode:`${o}#${n.agent.id}`,change:"moved",segments:0})}let y=[...new Set([...Sr(h,r),...l.map(S=>S.from),...t.subAgents.flatMap(S=>S.neededKnowledge.map(k=>k.path))])].sort();return{repo:o,body:h,children:[...m].map(([S,k])=>({ref:S,how:`Isolating ${k.join(" and ")} gives each job its own rules.`})),delta:v,sourceHashes:Object.fromEntries(y.map(S=>[S,Ru("sha256").update(r[S]).digest("hex")]))}}var Iu=1e3,c0=ia+4e3;function Ap(e,t,n={}){return Wo(e,t,[],{...n,scopeRuleId:"split",maxTokens:Iu})}function Fp(e,t,n){return t>0?[U(e,"derive-shape","shape",Or,t,n)]:[]}async function Mp({state:e,settings:t},n,o,s){let i=[...e.warnings??[]],r=[...e.structuresRaw??[]],a=!1,c=!1;function l(d){return M("derive-shape",d,p=>o.rethrow(p)),n.progress.log({level:"warn",code:"analysis.shape_check_failed"}),{structures:[],warnings:["The split check failed; other results were kept and earlier splits were left unchanged."],failed:!0}}try{if(te(t,e).splitCheck&&e.splitCheckPriced){c=!0;let d=zo(t,e).filter(({inventory:m})=>yp(m)),p=await H(d,4,async({repo:m,graph:g,inventory:h})=>{n.progress.assertHeld(),n.progress.signal?.throwIfAborted();try{let f=m.files??{},u=await xp(o,h),w=g,v=Op(t,u,{inventory:h,files:f,afterGraph(b){return w=gn(t,{...m,files:Qo(t,b,h,f,{root:m.root})},Ao(t,e),e.modelReader??!1,e.projectAgents,s,{verdicts:e.newVerdicts??[],failed:[]}).fragment,kp(w,h.agent.id)??w}});if(!v.shape)return{structures:[],warnings:v.warnings,failed:v.warnings.length>0};let y=Pp(t,v.shape,h,m.key,{files:f,root:m.root,graphs:{before:g,after:w}}),S=await Ap(o,[y]),k=S.ran?S.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 S.ran||n.progress.log({level:"warn",code:"analysis.shape_check_failed"}),{structures:S.kept,warnings:k,failed:!S.ran}}catch(f){return l(f)}},o);for(let m of p)r.push(...m.structures),i.push(...m.warnings),a||=m.failed}}catch(d){i.push(...l(d).warnings),a=!0}return{next:"persisting",clear:[],set:{structuresRaw:r,warnings:i,splitCheckRan:c,splitPassFailed:a}}}var _r=F.mechanical,Tp=20;function Pu(e,t){if(!t)return null;for(let[n,o]of Object.entries(e).sort(([s],[i])=>s.localeCompare(i))){let s=Ee(o,t);if(s!=null)return{path:n,line:s}}return null}function Au(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=Pu(n,t.excerpt);if(!o)return{childId:t.id,kind:"gone"};let s=e.newFindings.find(i=>i.category===t.category&&i.repo===t.repo&&i.sites.some(r=>r.path===o.path&&r.line!=null&&Math.abs(r.line-o.line)<=Tp));return s?{childId:t.id,kind:"match",matchIndex:s.index,location:o}:{childId:t.id,kind:"ask",location:o}})}function Fu(e,t){return e.split(`
72
+ `).map((n,o)=>({text:n,line:o+1})).filter(n=>Math.abs(n.line-t)<=Tp).map(n=>`${n.line} ${n.text}`).join(`
73
+ `)}function Mu(e){return{template:"structure-recheck",model:_r,answerFormat:"recheck",inputs:e}}async function Lp(e,t,n){let o=[],s=[],i=`C-${t.change.seq}`;for(let r of Au(t)){n?.assertHeld(),n?.signal?.throwIfAborted();let a=t.children.find(l=>l.id===r.childId),c={childId:a.id,changeId:t.change.id};if(r.kind==="match"){s.push({...c,outcome:"present",note:`Still present in ${r.location.path} after ${i}`,matchIndex:r.matchIndex,location:r.location});continue}if(r.kind==="keep"&&r.reason==="repo_not_analysed"){o.push(`F-${a.seq}'s repository was not analysed after ${i}; it stays open.`),s.push({...c,outcome:"not_checked",note:`Not re-checked after ${i} \u2014 its repository was not analysed`,matchIndex:null,location:null});continue}if(r.kind==="keep"){o.push(`F-${a.seq} has no excerpt to re-check after ${i}; it stays open.`),s.push({...c,outcome:"present",note:`Still present after ${i}`,matchIndex:null,location:null});continue}if(r.kind==="gone"){s.push({...c,outcome:"resolved",note:`Resolved by ${i}`,matchIndex:null,location:null});continue}try{let l=await T(e,Mu({childId:a.id,seq:a.seq,title:a.title,cause:a.cause,path:r.location.path,line:r.location.line,window:Fu(t.filesByRepo[a.repo][r.location.path],r.location.line)}));l.verdict==="resolved"?s.push({...c,outcome:"resolved",note:`Resolved by ${i}: ${l.reason.slice(0,200)}`,matchIndex:null,location:null}):s.push({...c,outcome:"present",note:`Still present in ${r.location.path} after ${i}`,matchIndex:null,location:r.location})}catch(l){M("structure-recheck",l,d=>e.rethrow(d)),n?.log({level:"warn",code:"analysis.structure_recheck_failed"}),o.push(`F-${a.seq} could not be re-checked after ${i}; it stays open.`),s.push({...c,outcome:"present",note:`Still present in ${r.location.path} after ${i}`,matchIndex:null,location:r.location})}}return{outcomes:s,warnings:o}}function Np(e,t){return e>0?[U({},"structure-recheck","recheck",_r,e,t)]:[]}async function jp(e,t,n,o){let s=Object.fromEntries((e.repos??[]).map(c=>[c.key,c.files??{}])),i={outcomes:[],changeIds:[],warnings:[]},r;try{r=await t.context.loadPendingRechecks?.()??[]}catch(c){return n.rethrow(c),t.progress.log({level:"warn",code:"analysis.structure_recheck_load_failed"}),i}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 r){if(t.progress.assertHeld(),t.progress.signal?.throwIfAborted(),!s[c.repo])continue;let l=await Lp(n,{change:c.change,children:c.children,filesByRepo:s,newFindings:a},t.progress);i.outcomes.push(...l.outcomes),i.warnings.push(...l.warnings),l.outcomes.some(d=>d.outcome==="not_checked")||i.changeIds.push(c.change.id)}return i}function e$(e,t,n={}){let o=8e5,s=fe(e).splitCheck?n.structureState?zo(e,n.structureState).length:t.length:0;return[U(e,"derive-structure","structures",br,1,o),U(e,"scope-items","structureScope",Mt,1+s,o),...Np(n.pendingRecheckChildren??0,o),...Fp(e,s,o)]}var t$=async(e,t)=>{if(t.progress.assertHeld(),t.progress.signal?.throwIfAborted(),!t.model)throw new le("llm","llm gone mid-job");let n=await He(t),o=be(t.model,n,t.progress.rethrow,t.progress.signal,e.settings);if(e.state.structurePhase==="shape"){let S=e.execution.forLocal?"":n.modelReaderPrompt();return Mp(e,t,o,S)}let{state:s,settings:i}=e,r=s.repos??[],a=V(s),c=Le(a),{findings:l}=_e($e(s.findingsRaw??[]),qe(s),We(s),i),d=vi(c),p=a.map(({repoKey:S,fragment:k})=>{let b=k.nodes.filter(_=>!Ve(_)),O=new Set(b.map(_=>_.id));return{repoKey:S,fragment:{...k,nodes:b,edges:k.edges.filter(_=>O.has(_.from)&&O.has(_.to))}}}),m=r.map(S=>({...S,files:Object.fromEntries(Object.entries(S.files??{}).filter(([k])=>!Wt(k,d)))})),g=Le(p),h=xr(l,d),f=[...s.warnings??[]],u=a.flatMap(({repoKey:S,fragment:k},b)=>{let O=ep(i,{repoKey:S,root:r[b]?.root,files:r[b]?.files??{},agentConfigurations:r[b]?.agentConfigurations,fragment:k});return f.push(...O.warnings),O.entries}),w;try{let k=c.nodes.some(Ve)&&!g.nodes.some(x=>x.kind==="agent")?[]:await lp(i,o,{graph:g,files:pp(m,Ge(p),l,te(i,s).multiPass,i),findings:h.items,loadModes:u.filter(x=>!Wt(x.path,d)),open:s.openStructures??[]}),b=cp(i,{raw:k,findings:h.candidates,repos:m,fragments:p,loadModes:u});f.push(...b.warnings);let O=await Wo(o,b.structures,l),_=O.dropped.length,$=O.flagged.length;_&&f.push(`${_} ${A(_,"structural proposal")} removed as out of scope`),$&&f.push(`${$} ${A($,"structural proposal")} 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(S){M("derive-structure",S,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 jp(s,t,o,l);f.push(...v.warnings);let y=te(i,s).splitCheck&&s.splitCheckPriced;return{next:y?"structuring":"persisting",clear:[],set:{...w,loadModes:u,warnings:f,rechecks:v.outcomes,recheckedChangeIds:v.changeIds,...y?{structurePhase:"shape"}:{},...y&&s.splitFindingsPriced?{shapeFindings:dp(l)}:{}}}};export{At as a,wo as b,Ha as c,dn as d,ec as e,ue as f,tc as g,Za as h,Ns as i,yo as j,Me as k,Ic as l,Ro as m,lf as n,hn as o,Ac as p,mS as q,jc as r,uf as s,qc as t,mt as u,Hc as v,NS as w,Gc as x,Wc as y,jS as z,Xc as A,mf as B,DS as C,BS as D,hf as E,KS as F,Vc as G,Qc as H,Up as I,vs as J,ka as K,V as L,qe as M,ae as N,fe as O,te as P,Po as Q,Ao as R,Ix as S,Px as T,Ax as U,Fx as V,gn as W,bo as X,oo as Y,K as Z,ee as _,Vu as $,st as aa,cm as ba,Tt as ca,Lt as da,ll as ea,al as fa,ob as ga,fE as ha,I_ as ia,zo as ja,be as ka,Or as la,gC as ma,Iu as na,c0 as oa,Eb as pa,_b as qa,xv as ra,bv as sa,vl as ta,Bl as ua,FE as va,ME as wa,e$ as xa,t$ as ya};