@counterfact-labs/cli 0.2.4 → 0.2.5
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.
- package/README.md +7 -1
- package/bundle/client-release.json +1 -1
- package/dist/adapters/anthropic.js +11 -2
- package/dist/adapters/completion.js +3 -0
- package/dist/adapters/durable-write.js +9 -2
- package/dist/adapters/files.js +25 -13
- package/dist/adapters/git-ignore.js +28 -14
- package/dist/adapters/git.js +1 -1
- package/dist/adapters/gitignore-output.js +41 -0
- package/dist/adapters/models.js +1 -6
- package/dist/adapters/output-paths.js +5 -2
- package/dist/adapters/public-instructions.js +1 -1
- package/dist/adapters/relay-plan.js +2 -5
- package/dist/adapters/release.js +2 -1
- package/dist/adapters/repository-files.js +164 -4
- package/dist/adapters/repository-root.js +18 -2
- package/dist/adapters/results.js +8 -4
- package/dist/adapters/settings.js +26 -1
- package/dist/adapters/snapshot.js +86 -15
- package/dist/analysis-core/analysis/finding-audience-switch.js +1 -0
- package/dist/analysis-core/analysis/schemas.js +1 -1
- package/dist/analysis-core/analysis/source-notes/types.js +1 -1
- package/dist/analysis-core/chunks/377MLK4M.js +21 -0
- package/dist/analysis-core/chunks/{D6AWHLRI.js → 3JWEFCTJ.js} +1 -1
- package/dist/analysis-core/chunks/{3227KXHF.js → 4H23CSUM.js} +1 -1
- package/dist/analysis-core/chunks/5DGPLXYB.js +1 -0
- package/dist/analysis-core/chunks/5TATKWLG.js +1 -0
- package/dist/analysis-core/chunks/{EH3QQ3T4.js → 6B2HILSY.js} +1 -1
- package/dist/analysis-core/chunks/6QY5BV5B.js +14 -0
- package/dist/analysis-core/chunks/6U2IR4XB.js +1 -0
- package/dist/analysis-core/chunks/A7WJJMRY.js +1 -0
- package/dist/analysis-core/chunks/C6X5GDG4.js +1 -0
- package/dist/analysis-core/chunks/DLPVYWHZ.js +1 -0
- package/dist/analysis-core/chunks/DZZBQDGO.js +1 -0
- package/dist/analysis-core/chunks/F3R4J3ND.js +1 -0
- package/dist/analysis-core/chunks/FOKDE64Y.js +1 -0
- package/dist/analysis-core/chunks/K2GNDX3W.js +1 -0
- package/dist/analysis-core/chunks/KTNA2KTN.js +7 -0
- package/dist/analysis-core/chunks/KWECQJ6X.js +1 -0
- package/dist/analysis-core/chunks/{SL27GMEN.js → M6HYSTQD.js} +1 -1
- package/dist/analysis-core/chunks/{ZAA44GPI.js → N7U5N42V.js} +1 -1
- package/dist/analysis-core/chunks/NIOS7U6C.js +41 -0
- package/dist/analysis-core/chunks/{QMIXCT62.js → OPMA32A6.js} +1 -1
- package/dist/analysis-core/chunks/PECX3OXB.js +1 -0
- package/dist/analysis-core/chunks/QFY6A3MS.js +66 -0
- package/dist/analysis-core/chunks/SKVEBOGA.js +1 -0
- package/dist/analysis-core/chunks/{T66VDFXF.js → STI4JE7L.js} +1 -1
- package/dist/analysis-core/chunks/SVMEWGD3.js +1 -0
- package/dist/analysis-core/chunks/X7WZAA7S.js +1 -0
- package/dist/analysis-core/chunks/YDBO7P4X.js +1 -0
- package/dist/analysis-core/chunks/YUY436SM.js +1 -0
- package/dist/analysis-core/chunks/ZTOVBAG7.js +1 -0
- package/dist/analysis-core/contracts/file-safety.js +1 -0
- package/dist/analysis-core/contracts/relay-analysis.js +1 -0
- package/dist/analysis-core/contracts/requests.js +1 -1
- package/dist/analysis-core/conventions/analysis-fit.js +1 -1
- package/dist/analysis-core/conventions/file-admission.js +1 -1
- package/dist/analysis-core/data/finding-types.js +1 -1
- package/dist/analysis-core/findings/sites.js +1 -0
- package/dist/analysis-core/github/repo-key.js +1 -1
- package/dist/analysis-core/import/outside-loader-sources.js +1 -1
- package/dist/analysis-core/index.js +3 -3
- package/dist/analysis-core/llm/output-limit.js +1 -1
- package/dist/analysis-core/llm/types.js +1 -0
- package/dist/analysis-core/requests/answer-formats.js +1 -1
- package/dist/analysis-core/requests/headline-request.js +1 -1
- package/dist/analysis-core/requests/local-plan.js +1 -1
- package/dist/analysis-core/requests/registry.js +1 -1
- package/dist/analysis-core/requests/template-version.js +1 -1
- package/dist/analysis-core/requests/tools.js +1 -1
- package/dist/analysis-core/settings.js +1 -1
- package/dist/analysis-core/stages/engine-entry.js +1 -0
- package/dist/analysis-core/stages/execution-ports.js +1 -0
- package/dist/bundle/seal/deserialise.js +9 -1
- package/dist/bundle/seal/engine.js +76 -0
- package/dist/bundle/seal/freeze.js +9 -0
- package/dist/bundle/seal/metadata.js +3 -0
- package/dist/bundle/seal/open-engine.js +26 -0
- package/dist/bundle/seal/open.js +2 -8
- package/dist/cli/commands/analyze.js +36 -4
- package/dist/cli/commands/finding.js +9 -3
- package/dist/cli/context.js +4 -1
- package/dist/cli/finding-display.js +39 -0
- package/dist/cli/finding-lookup.js +92 -0
- package/dist/cli/finding-settings.js +5 -0
- package/dist/cli/fix-requests.js +42 -0
- package/dist/cli/intake-payload.js +19 -11
- package/dist/cli/main.js +9 -4
- package/dist/cli/mcp.js +65 -18
- package/dist/cli/relay-check.js +46 -13
- package/dist/cli/relay-preparation.js +28 -5
- package/dist/cli/result-check.js +68 -0
- package/dist/cli/summary.js +10 -3
- package/dist/contract/agent-choice.js +15 -0
- package/dist/contract/agent-proposal.js +38 -0
- package/dist/contract/attestation.js +106 -0
- package/dist/contract/cli-refusals.js +3 -0
- package/dist/contract/cli-version.js +1 -1
- package/dist/contract/console.js +21 -16
- package/dist/contract/engine.js +44 -0
- package/dist/contract/findings.js +28 -0
- package/dist/contract/fix-requests.js +30 -0
- package/dist/contract/messages.js +6 -94
- package/dist/contract/public-report.js +1 -0
- package/dist/contract/runtime-environment.js +12 -1
- package/dist/core/analysis/run-to-end.js +7 -52
- package/dist/gatekeeper/attestation.js +1 -1
- package/dist/gatekeeper/channel-binding.js +15 -0
- package/dist/gatekeeper/cli-api.js +12 -2
- package/dist/gatekeeper/connection-exchange.js +16 -12
- package/dist/gatekeeper/model.js +2 -1
- package/dist/gatekeeper/production-attestation.js +23 -17
- package/dist/gatekeeper/trust/policy.js +4 -1
- package/dist/gatekeeper/trust/schema.js +4 -0
- package/dist/transport/kms.js +25 -0
- package/package.json +4 -3
- package/dist/adapters/quality.js +0 -6
- package/dist/adapters/report.js +0 -29
- package/dist/analysis-core/analysis/analysis-flags.js +0 -1
- package/dist/analysis-core/analysis/finding-quality/config.js +0 -1
- package/dist/analysis-core/analysis/finding-quality/policy.js +0 -1
- package/dist/analysis-core/analysis/headlines/attachment.js +0 -1
- package/dist/analysis-core/analysis/headlines/input.js +0 -1
- package/dist/analysis-core/chunks/3CKW5JIF.js +0 -1
- package/dist/analysis-core/chunks/6YCABS5T.js +0 -1
- package/dist/analysis-core/chunks/7OYIBWX3.js +0 -1
- package/dist/analysis-core/chunks/DRGDIIFA.js +0 -1
- package/dist/analysis-core/chunks/FTODBFQW.js +0 -1
- package/dist/analysis-core/chunks/HPIAEQHE.js +0 -37
- package/dist/analysis-core/chunks/IVDDV6CU.js +0 -14
- package/dist/analysis-core/chunks/JF4GYMOZ.js +0 -1
- package/dist/analysis-core/chunks/K5OTWBTT.js +0 -22
- package/dist/analysis-core/chunks/MXXNED6N.js +0 -7
- package/dist/analysis-core/chunks/NCWEOJVJ.js +0 -6
- package/dist/analysis-core/chunks/O652FQQH.js +0 -1
- package/dist/analysis-core/chunks/OFBJNHC6.js +0 -1
- package/dist/analysis-core/chunks/QV2EOS7U.js +0 -1
- package/dist/analysis-core/chunks/STZOC7LN.js +0 -1
- package/dist/analysis-core/chunks/T2SAP7OV.js +0 -60
- package/dist/analysis-core/chunks/T5TREZCQ.js +0 -1
- package/dist/analysis-core/chunks/TDNTU4TF.js +0 -1
- package/dist/analysis-core/chunks/U5HOEVPE.js +0 -1
- package/dist/analysis-core/chunks/UEWL3GMQ.js +0 -1
- package/dist/analysis-core/chunks/V7BFUTM7.js +0 -1
- package/dist/core/analysis/finding-quality/config.js +0 -4
- package/dist/core/analysis/structural-run.js +0 -16
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import{f as V,yb as C}from"./HPIAEQHE.js";import{f as T,g as M}from"./FSLWD2PE.js";function F(e){let s=e.replace(/\s/g," "),t=[],r=[],n=!0;for(let d=0;d<e.length;d++){let c=s[d];c===" "&&n||(t.push(c),r.push(d),n=c===" ")}return{text:t.join("").trimEnd(),offsets:r}}function*_(e,s){let t=F(e),r=F(s).text;if(!r)return;let n=i=>e.slice(0,t.offsets[i]).split(`
|
|
2
|
-
`).length,d=t.text.indexOf(r);if(d>=0){for(let i=d;i>=0;i=t.text.indexOf(r,i+1))yield[{from:n(i),to:n(i+r.length-1)}];return}let c=r.split(/\s*(?:\.{3}|…)\s*/);if(!(c.length<2||c.some(i=>!i)))for(let i=t.text.indexOf(c[0]);i>=0;i=t.text.indexOf(c[0],i+1)){let o=i+c[0].length,a=[{from:n(i),to:n(o-1)}],f=!0;for(let l of c.slice(1)){let u=t.text.indexOf(l,o);if(u<0||/\n\s*\n|\n\s*#{1,6}\s|\n[^\s][^:\n]*:/.test(e.slice(t.offsets[o-1]+1,t.offsets[u]))){f=!1;break}o=u+l.length,a.push({from:n(u),to:n(o-1)})}f&&(yield a)}}function E(e,s){for(let t of _(e,s))return t[0].from;return null}function se(e,s,t){if(!Number.isInteger(t)||t<1)return null;for(let r of _(e,s)){if(r[0].from===t)return r;if(r[0].from>t)break}return null}var U="We couldn't see this agent's code, so this may already be handled there.";function re(e){return Object.values(e).some(s=>[...s].some(t=>V(t)!==null))}function j(e,s){return e==="better_as_code"&&s===!1?U:void 0}function ce(e){return e.sawCode??e.findingQuality?.sawCode}var W="Findings could not be checked a second time; all findings were kept.";function I(e,s){let t=new Set(s),r=new Map,n=new Set,d=new Set,c=new Set;for(let i of e){if(!t.has(i.id)){d.add(i.id);continue}if(n.has(i.id)){c.add(i.id),r.delete(i.id);continue}n.add(i.id),r.set(i.id,i)}return{byId:r,unknownIds:[...d],duplicateIds:[...c]}}function H(e,s){let t=I(e,s);return t.unknownIds.length===0&&t.duplicateIds.length===0}function ue(e,s,t,r={}){let n=e.map((h,w)=>`f${w+1}`),d=!H(s,n),c=d?"Verdict ids did not match; all findings were kept.":t?.failure,i=new Set(t?.sentIds??n),o=new Map(t?.skipped.map(h=>[h.id,h.reason])??[]),a=d?["verdict ids did not match"]:[],f=new Map(s.map(h=>[h.id,h])),l=[...t?.rejectedBatches??[],...d?[{ids:n,verdicts:s}]:[]],u=new Map,p=[],O=r.mode==="offline-simulation"&&r.shadow?.done?I(r.shadow.verdicts,n).byId:new Map;for(let h of l)for(let w of h.verdicts)h.ids.includes(w.id)&&u.set(w.id,w);let R=e.map((h,w)=>{let g=n[w],v=d?void 0:f.get(g),k=f.get(g)??u.get(g),A=i.has(g)||k!==void 0,$=A?"":o.get(g)??"No model call was made before the check stopped.",b="keep",m;A?c?m=c:v?v.reason.trim()?!v.evidenceAgainst?.trim()||!v.evidenceFor?.trim()||v.verdict==="drop"&&/^[\s"'“”‘’]*none found[\s."'“”‘’]*$/i.test(v.evidenceAgainst)?(m="The model supplied no usable evidence for its decision; this finding was kept.",a.push(`${g}: ${m}`)):(b=v.verdict,m=v.reason,p.push(g)):(m="The model returned an empty reason; this finding was kept.",a.push(`${g}: ${m}`)):(m="The model returned no verdict for this finding in the accepted response; it was kept.",a.push(`${g}: ${m}`)):m=$;let y=O.get(g);return!c&&p.includes(g)&&y&&r.shadow?.coverage.answeredIds.includes(g)&&(y.verdict==="drop"&&y.decisive&&y.quotes.some(L=>L.side==="against")?(b="drop",m=y.reason):y.verdict!==b&&(b="keep",m="The checks disagree without decisive contrary evidence; this finding was kept.")),{id:g,title:h.title,verdict:b,reason:m,sent:A,skipReason:$,modelVerdict:k?.verdict??"",modelReason:k?.reason??"",evidenceAgainst:k?.evidenceAgainst??"",evidenceFor:k?.evidenceFor??""}}),x=[],P=e.filter((h,w)=>{let g=R[w];return g.verdict!=="drop"?!0:(x.push({finding:h,reason:g.reason}),!1)}),z=c?[W]:x.length?[`${x.length} ${x.length===1?"finding was":"findings were"} removed after a second read: ${x.map(({finding:h})=>h.title.replace(/\s+/g," ").trim()).join("; ")}`]:[];return{kept:c?e:P,dropped:x,warnings:z,verdicts:R,...a.length?{diagnostics:a}:{},...l.length?{rejectedBatches:l}:{},...t?.recordAcceptance?{acceptedIds:p}:{}}}var B={critical:0,high:1,medium:2,low:3},J="No strong findings to show.",K=/^[\s"'“”‘’]*none found[\s."'“”‘’]*$/i,Y=/"([^"\n]*(?:\n[^"\n]*)*)"|“([^”]+)”|`([^`]+)`|‘([^’]+)’|'([^'\n]+)'/g;function S(e,s){return I(e.map(t=>({...t,id:t.fingerprint})),s).byId}function q(e,s){return e.repo===s.repo&&e.path===s.path}function N(e,s){let t=e.repos.filter(r=>r.key===s.repo);return t.length===1?t[0].files?.[s.path]:void 0}function Q(e,s,t){return e===void 0||s===null||!Number.isInteger(s)||s<1||!t?.trim()?!1:E(e.split(`
|
|
3
|
-
`).slice(s-1).join(`
|
|
4
|
-
`),t)===1}function X(e){return[...e.site?[{repo:e.siteRepo??"",...e.site,excerpt:e.excerpt}]:[],...e.otherSites]}function D(e,s){let t=N(s,e),r=e.line>1?t.split(`
|
|
5
|
-
`).slice(0,e.line-1).join(`
|
|
6
|
-
`)+`
|
|
7
|
-
`:"",n=t.replace(/\s+/g," "),d=e.excerpt.replace(/\s+/g," ").trim(),c=r.replace(/\s+/g," ").length,i=n.indexOf(d,c);if(i>=0)return{from:i,to:i+d.length};let o=d.split(/\s*(?:\.{3}|…)\s*/),a=n.indexOf(o[0],c),f=a;for(let l of o){let u=n.indexOf(l,f);if(u<0)return null;f=u+l.length}return a<0?null:{from:a,to:f}}function Z(e,s,t){if(!q(e,s))return!0;let r=D(e,t),n=D(s,t);return r!==null&&n!==null&&(r.to<=n.from||n.to<=r.from)}function ee(e,s,t,r){if(!M(e.category))return"The finding has no supported evidence category.";if(!e.site||!e.siteRepo)return"The finding has no fetched primary site.";if(s.length<T(e.category))return"The category's required quoted sites are missing.";if(!t)return"Evidence coverage was not recorded unambiguously.";if(t.claimTruncated)return"The claim was truncated in the check.";if(!t.coreComplete||t.missing.length||t.truncated.length)return"Required evidence was unavailable or truncated.";if(t.requested.length===0||t.requested.some(n=>!t.included.some(d=>q(n,d))||N(r,n)===void 0))return"Required files were not included in the check.";for(let n of s){if(!t.requested.some(d=>q(d,n))||!t.included.some(d=>q(d,n)))return"A cited file was not included in the check.";if(!Q(N(r,n),n.line,n.excerpt))return"A cited quote could not be verified at its source line."}return T(e.category)===2&&!s.some((n,d)=>s.slice(d+1).some(c=>Z(n,c,r)))?"The category needs distinct quoted sites.":null}function te(e,s){let t=e.cause.replace(/\s+/g," ").trim();for(let d of s){let c=d.excerpt?.replace(/\s+/g," ").trim();c&&(t=t.replaceAll(c,""))}if(!t||t===e.title)return!1;let r=/\b(?:without|before|instead|different|wrong|repeatedly|twice|never|cannot|can't|unable to|fails? to|unapproved|unauthori[sz]ed)\b/i,n=/\b(?:send(?:s|ing)?|sent|delet(?:e[sd]?|ing)|appl(?:y|ies|ied|ying)|grant(?:s|ed|ing)?|revok(?:e[sd]?|ing)|return(?:s|ed|ing)?|rout(?:e[sd]?|ing)|run(?:s|ning)?|execut(?:e[sd]?|ing)|writ(?:e[sd]?|ing)|read(?:s|ing)?|retry|retries|retried|retrying|skip(?:s|ped|ping)?|omit(?:s|ted|ting)?|block(?:s|ed|ing)?|allow(?:s|ed|ing)?|charg(?:e[sd]?|ing)|pay(?:s|ing)?|paid|los(?:e[sd]?|ing)|receiv(?:e[sd]?|ing)|select(?:s|ed|ing)?|exclud(?:e[sd]?|ing)|includ(?:e[sd]?|ing)|schedul(?:e[sd]?|ing))\b/i;return r.test(t)&&n.test(t)}function ne(e,s,t,r){let n=[...e.matchAll(/(?:^|[\s(`*])([^\s"'“”‘’`() *]+):(\d+)(?:-\d+)?/g)].map(i=>{let o=i[1],a=t.included.filter(l=>l.path===o||`${l.repo}:${l.path}`===o),f=[...new Map(a.map(l=>[JSON.stringify([l.repo,l.path]),l])).values()];return{from:i.index,to:i.index+i[0].length,line:Number(i[2]),ref:f.length===1?f[0]:void 0}});if(n.length===0||n.some(i=>!i.ref))return!1;let d=new Map;for(let i of e.matchAll(Y)){let o=i.index,a=o+i[0].length;if(n.some(p=>p.from>=o&&p.to<=a))continue;let f=i.slice(1).find(p=>p!==void 0),l=n.flatMap((p,O)=>Q(N(r,p.ref),p.line,f)?[O]:[]);if(l.length!==1)return!1;let u=l[0];d.set(u,[...d.get(u)??[],f])}let c=!1;for(let i=0;i<n.length;i++){let o=n[i],{line:a,ref:f}=o,l=d.get(i)??[];if(l.length===0)return!1;s.some(u=>q(u,f)&&u.line===a&&l.some(p=>E(p,u.excerpt??"")!==null))&&(c=!0)}return c}function G(e,s,t,r){if(!e?.accepted)return"No accepted check verdict is available.";let n=e.verdict;return!n.sent||n.verdict!=="keep"||n.modelVerdict!=="keep"||!n.reason.trim()||n.reason!==n.modelReason?"The check kept the finding without an accepted supporting decision.":ne(n.evidenceFor,s,t,r)?K.test(n.evidenceAgainst)?null:"Contrary check evidence has not been resolved.":"The check supplied no verified supporting quote."}function ve(e){let s=e.findings.map(C),t=S(e.coverage,s),r=S(e.verdicts,s),n=new Set(e.shadowRequestedIds??(e.shadowVerdicts===void 0?[]:s)),d=S(e.shadowVerdicts??[],[...n]);return e.findings.map((c,i)=>{let o=s[i],a=X(c),f=t.get(o),l=ee(c,a,f,e.sources),u=j(c.category,e.sawCode)??l;!u&&!te(c,a)&&(u="The finding does not explain a concrete behavioral consequence."),u||(u=G(r.get(o),a,f,e.sources)),!u&&n.has(o)&&(u=G(d.get(o),a,f,e.sources)),!u&&c.sourceNotes&&(c.sourceNotes.support!=="supported"||c.sourceNotes.counterEvidence.length>0)&&(u="Source notes contain uncertain support or unresolved contrary evidence.");let p=u?"not sure":"sure";return{fingerprint:o,support:l?"incomplete":"complete",confidence:p,weak:p!=="sure"||c.severity==="low",reason:u??(c.severity==="low"?"Verified support, but low impact.":"Verified quotes and an accepted keep support the stated consequence.")}})}function xe(e,s,t){let r=e.map(t??(o=>C(o))),n=S(s,r),d=e.map((o,a)=>{let f=r[a],l=n.get(f),u=l?.confidence==="sure",p=u&&l?.support==="complete"&&!l.weak&&o.severity!=="low";return{finding:o,fingerprint:f,sure:u,strong:p}}).sort((o,a)=>Number(a.strong)-Number(o.strong)||B[o.finding.severity]-B[a.finding.severity]||Number(a.sure)-Number(o.sure)||(o.fingerprint<a.fingerprint?-1:o.fingerprint>a.fingerprint?1:0)),c=d.filter(o=>o.strong).slice(0,3),i=new Set(c);return{ordered:d.map(o=>o.finding),defaultIds:c.map(o=>o.fingerprint),hiddenIds:d.filter(o=>!i.has(o)).map(o=>o.fingerprint),emptyMessage:!c.length&&d.length?J:null}}export{E as a,se as b,re as c,ce as d,W as e,I as f,H as g,ue as h,ve as i,xe as j};
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import{D as H,F as J,H as Q,Ha as E,T as I,d as X,e as Y,fa as j,g as R,h as b,i as _,na as Z,oa as ee,p as x,q as V,ra as te,s as q,sa as A,t as M,ta as ne,u as $,va as oe,wa as C,ya as T}from"./HPIAEQHE.js";import{a as W,c as S,e as N}from"./T5TREZCQ.js";function G(t,r,n){let f=E(t,r.filter(e=>j(t,{path:e},{purpose:"override",route:"github"}).admitted),{root:n});return B(f)}function B(t){let r=new Map(t.scoped.map(e=>[e.path,e.relativePath])),n=(e,i,l=!1)=>t.files.find(a=>a.role===e&&a.kind!=="background"&&a.preferred!==!1&&(!i||a.kind===i)&&(!l||a.preferred))?.path??null,f=(e,i,l=!1)=>t.files.filter(a=>a.role===e&&(!i||a.kind===i)&&a.ownerPath!==void 0===l).map(a=>a.path).sort();return{scoped:t.scoped.map(e=>e.path),stripRoot:e=>r.get(e)??e,configPath:n("marker"),promptPath:n("prompt","dedicated",!0),claudePath:n("prompt","fallback"),toolsPath:n("tool file","json"),toolsTsPath:n("tool file","sdk"),cliPath:n("tool file","cli"),mcpPath:n("MCP config",void 0,!0),registry:t.registry,soulPath:n("soul"),knowledgePath:n("knowledge"),subagentPaths:f("sub-agent"),skillPaths:f("skill"),skillNames:Object.fromEntries(t.files.filter(e=>e.role==="skill"&&e.name).map(e=>[e.path,e.name])),skillRefNames:Object.fromEntries(t.files.filter(e=>e.role==="reference"&&e.kind==="skill"&&e.name).map(e=>[e.path,e.name])),templatePaths:f("reference","template"),skillRefPaths:f("reference","skill"),subagentSkillPaths:f("skill",void 0,!0),subagentSkillRefPaths:f("reference","skill",!0),subagentSkillOwners:Object.fromEntries(t.files.filter(e=>e.ownerPath!==void 0).map(e=>[e.path,e.ownerPath]))}}function O(t){return!!(t.promptPath||t.toolsPath||t.toolsTsPath||t.cliPath||t.mcpPath||t.soulPath||t.knowledgePath||t.subagentPaths.length||t.skillPaths.length)}function se(t,r){return!!t.configPath||!!t.claudePath&&r==="prompt"||O(t)}function ge(t){return M(t,"CF_IMPORT_LAYOUTS")}function ie(t,r){return ge(t)?[...new Set(r)].sort().flatMap(n=>{if(n.includes("\\")||/[:\0]/.test(n)||n.split("/").some(e=>!e||e==="."||e===".."))return[];let f=/^(?:(.*)\/)?\.claude-plugin\/plugin\.json$/i.exec(n);return f?[{folder:f[1]??"",path:n}]:[]}):[]}function ae(t,r,n){let f=r.split("/");for(let e=0;e<f.length-2;e++)if(!(f[e].toLowerCase()!=="plugins"||!f[e+1])&&re(t,f.slice(e+2).join("/")))return f.slice(0,e+2).join("/");for(let e of[...n].sort((i,l)=>l.folder.length-i.folder.length)){let i=S(r,e.folder);if(i!==null&&re(t,i))return e.folder}return null}function re(t,r){return r.toLowerCase().startsWith(`${A}/`)&&C.test(r)||!!(T(t)&&r.toLowerCase().startsWith(`${ne}/`)&&$(r)?.definition)}import{posix as D}from"node:path";function z(t,r=1){let n=new Set,f=[],e=t.replace(/{#[\s\S]*?#}|{%[-+]?\s*raw\s*[-+]?%}[\s\S]*?(?:{%[-+]?\s*endraw\s*[-+]?%}|$)/g,i=>i.replace(/[^\n]/g," "));for(let i of e.matchAll(/{%[-+]?\s*(include|extends|import|from)\s+(.+?)\s*[-+]?%}/g)){let l=i[2].match(/^(["'])([^"']+)\1(?:\s+(?:as\s+\w+|import\s+.+|ignore missing|with context|without context))?$/),a=r+t.slice(0,i.index).split(`
|
|
2
|
-
`).length-1;f.push({source:l?.[2]??i[2],span:{from:a,to:a},...l?{}:{reason:"dynamic"}})}for(let i of e.matchAll(/{{[-+]?\s*([\w]+)|{%[-+]?\s*(?:if|elif|for\s+\w+\s+in|set\s+\w+\s*=)\s+([\w]+)/g)){let l=i[1]??i[2];!["true","false","none"].includes(l.toLowerCase())&&!/^\d/.test(l)&&n.add(l)}return{variables:[...n],loaders:f}}function le(t){let r=t.split(`
|
|
3
|
-
`),n=[],f=[],e=(i,l,a)=>{let k=new Set;for(let g of J(i.join(`
|
|
4
|
-
`))){let m=a?`${a}.${g.key}`:g.key,d={from:l+g.span.from,to:l+g.span.to},o=i.slice(g.span.from-1,g.span.to);k.has(g.key)&&f.push({key:m,span:d,reason:"duplicate"}),k.add(g.key);let s=o[0].slice(o[0].indexOf(":")+1).trim();if(!s||s.startsWith("#")){let p=o.slice(1),w=p.find(P=>P.trim()&&!P.trimStart().startsWith("#"))?.match(/^ */)?.[0].length;if(w){e(p.map(P=>P.slice(w)),d.from,m);continue}}let h=H(o.join(`
|
|
5
|
-
`))?.[g.key],u=typeof h=="string"?h:null,c=m.endsWith("_template");(c&&u===null||/^[!&*]/.test(s))&&f.push({key:m,span:d,reason:"invalid"}),n.push({key:m,span:d,text:r.slice(d.from-1,d.to).join(`
|
|
6
|
-
`),value:u,...c&&u!==null?z(u,d.from+(/^[|>]/.test(s)?1:0)):{variables:[],loaders:[]}})}};e(r,0,"");for(let i of f.filter(l=>l.reason==="duplicate"))for(let l of n.filter(a=>a.key===i.key||a.key.startsWith(`${i.key}.`)))l.value=null;return{fields:n,unresolved:f}}function ce(t){return M(t,"CF_IMPORT_LAYOUTS")}function fe(t,r){if(!ce(t))return[];let n=new Set(r),f=[];for(let e of[...n].sort()){let i=e.match(/^((?:[^/]+\/)*?)(?:src\/)?minisweagent\/agents\/default\.py$/);if(!i)continue;let l=e.slice(0,-18),a=`${l}/config`,k=`${a}/__init__.py`,g=`${l}/run/mini.py`;if(!n.has(k)||!n.has(g))continue;let m=[...n].filter(d=>S(d,a)!==null&&/\.ya?ml$/.test(d)).sort();m.length&&f.push({folder:i[1].replace(/\/$/,""),configFolder:a,agentPath:e,loaderPath:k,runnerPath:g,configs:m,templates:[...n].filter(d=>S(d,a)!==null&&/\.(?:j2|jinja2?)$/.test(d)).sort()})}return f}function ke(t,r){let n=R(t.agentPath,r[t.agentPath]??"","py").toks,f=R(t.loaderPath,r[t.loaderPath]??"","py").toks,e=R(t.runnerPath,r[t.runnerPath]??"","py").toks;if(!["system_template","instance_template"].every(l=>n.some((a,k)=>_(a,l)&&b(n[k-1],".")))||!f.some((l,a)=>_(l,"safe_load")&&b(f[a+1],"("))||!f.some((l,a)=>_(l,"read_text")&&b(f[a+1],"("))||!e.some((l,a)=>_(l,"get_config_from_spec")&&b(e[a+1],"("))||!e.some((l,a)=>_(l,"get_agent")&&b(e[a+1],"("))||!e.some((l,a)=>_(l,"get")&&b(e[a+1],"(")&&e[a+2]?.value==="agent"))return null;let i=e.flatMap((l,a)=>{if(!_(l,"DEFAULT_CONFIG_FILE")||!b(e[a+1],"="))return[];let k=e.slice(a+2).filter(g=>g.line===l.line);return k.flatMap((g,m)=>_(g,"builtin_config_dir")&&b(k[m+1],"/")&&k[m+2]?.kind==="string"?[D.join(t.configFolder,k[m+2].value)]:[])});return i.length===1?i[0]:null}function Ne(t,r,n,f){let e={variants:[],selectedPaths:[],fields:[],model:null,loaded:[],unresolved:[],edges:[]};if(!ce(t))return e;let i=ke(r,n);if(!i)return e.unresolved.push({path:r.runnerPath,source:"config",reason:"dynamic"}),e;let l=new Map,a=new Set(Object.keys(n)),k=o=>{let s=j(t,{path:o,text:n[o],size:n[o]===void 0?void 0:Buffer.byteLength(n[o])},{purpose:"pointer",route:"github",root:r.configFolder,listing:a,managedFiles:n});return s.admitted||l.set(o,s.reason),s.admitted},g=new Map([...new Set([...r.configs,...f??[]])].flatMap(o=>k(o)&&Object.hasOwn(n,o)?[[o,le(n[o])]]:[]));e.variants=r.configs.map(o=>({path:o,fields:(g.get(o)?.fields??[]).map(s=>({...s,path:o}))})),e.selectedPaths=f?[...f]:[i];let m=new Map;for(let o of e.selectedPaths){if(S(o,r.configFolder)===null){e.unresolved.push({path:o,source:o,reason:"out-of-scope"});continue}let s=g.get(o);if(!s){e.unresolved.push({path:o,source:o,reason:l.get(o)??"missing"});continue}e.unresolved.push(...s.unresolved.map(h=>({path:o,source:h.key,span:h.span,reason:h.reason})));for(let h of s.fields)if(/^(?:agent|model|environment)(?:\.|$)/.test(h.key)){for(let u of m.keys())(u.startsWith(`${h.key}.`)||h.key.startsWith(`${u}.`))&&m.delete(u);m.set(h.key,{...h,path:o})}}e.fields=[...m.values()],e.model=m.get("model.model_name")?.value??null;let d=new Set;for(let o of e.fields){let s=new Set([o.path]),h=[{path:o.path,facts:{variables:o.variables,loaders:o.loaders},next:0}];for(;h.length;){let u=h.at(-1),{path:c,facts:p}=u;if(u.next===0)for(let F of p.variables)e.unresolved.push({path:c,source:F,reason:"runtime-variable"});if(u.next>=p.loaders.length){s.delete(c),h.pop();continue}let w=p.loaders[u.next++],P=D.normalize(D.join(D.dirname(c),w.source)),v=w.reason??(D.isAbsolute(w.source)||S(P,r.configFolder)===null?"out-of-scope":k(P)?s.has(P)?"cycle":Object.hasOwn(n,P)?null:"missing":l.get(P));if(v){e.unresolved.push({path:c,source:w.source,...w.reason?{}:{target:P},span:w.span,reason:v});continue}e.edges.push({from:c,to:P,span:w.span}),!d.has(P)&&(d.add(P),e.loaded.push({path:P}),s.add(P),h.push({path:P,facts:z(n[P]),next:0}))}}return e}var Pe=new Set([...ee,Z.soul].map(t=>t.toLowerCase())),we=["templates","default_prompts","prompts/default","docs","evals","benchmarks"],Se=["tests","__tests__","fixtures","test_data","evals","benchmarks","templates","default_prompts","prompts/default","docs"];function ue(t,r=""){return t===r?null:`folder:${t}`}function et(t,r,n){let f=pe(t,r,n),e=W(n),i=r.filter(s=>!x(t,s,e)),l=i.filter(s=>f.ownerOf(s)?.key===null),a=G(t,l,e),k=O(a)||!!a.configPath,g=E(t,l,{root:e}).files.filter(s=>s.role!=="reference"&&s.kind!=="background"),m=new Set(g.map(s=>s.relativePath)),d=g.flatMap(s=>s.role==="sub-agent"?[s.relativePath.slice(0,-3)]:s.role==="skill"?[s.relativePath.slice(0,s.relativePath.lastIndexOf("/"))]:[]),o=new Map(f.scopes.map(s=>[s.folder,{scope:s,paths:[]}]));for(let s of[...new Set(i)]){let h=f.ownerOf(s);if(!h)continue;let u=S(s,e),c=u.split("/");if(h.key===null&&k&&c.length>1&&!m.has(u)&&!d.some(p=>S(u,p)!==null)){let p=c.slice(0,-1).findIndex((P,v)=>![...m].some(F=>F.startsWith(`${c.slice(0,v+1).join("/")}/`))),w=N(c.slice(0,p<0?-1:p+1).join("/"),e);o.has(w)||o.set(w,{scope:{key:ue(w,e),folder:w,kind:"folder"},paths:[]}),h=o.get(w).scope}o.get(h.folder).paths.push(s)}return[...o.values()].sort((s,h)=>s.scope.folder<h.scope.folder?-1:s.scope.folder>h.scope.folder?1:0).map(({scope:s,paths:h})=>{let u=G(t,h,s.folder),c=f.scopes.includes(s);return{scope:s,paths:h,convention:c&&(!!s.managed||!!s.miniSwe||s.kind==="crew"||O(u)),markerPath:c?u.configPath:null}})}function pe(t,r,n){let f=W(n),e=Y(t),i=ie(t,r),{scopes:l,skipped:a,pluginFolders:k}=e?ve(t,r,f,i):{scopes:[{key:null,folder:f,kind:"root"}],skipped:[],pluginFolders:[]},g=o=>me(l,o),m=r.filter(o=>x(t,o,f)||e&&g(o)&&I(t,o,k)),d=e?r.filter(o=>{let s=g(o);return s?.kind==="crew"&&S(o,s.folder)?.toLowerCase().startsWith("tools/")}):[];return{scopes:l,skipped:a,ownerOf:g,pluginFolders:k,ignoredPaths:m,ignoredImportPaths:d,...i.length?{pluginDeclarations:i.filter(o=>k.includes(o.folder))}:{}}}function me(t,r){return t.findLast(n=>S(r,n.folder)!==null)??null}function ve(t,r,n,f){let e=[...new Set(r)].filter(d=>!I(t,d)).sort().flatMap(d=>{let o=S(d,n);return o===null?[]:[{path:d,relativePath:o}]}),i=[],l=new Map,a=e.filter(d=>!x(t,d.path,n)).map(d=>d.path);for(let d of Q(t,a))l.set(d.folder,d.agents.map(o=>({path:o,plugin:!1,crew:!1,checkPath:`${d.folder}/`,managed:d})));for(let d of fe(t,a))l.set(d.folder,[...l.get(d.folder)??[],{path:d.agentPath,plugin:!1,crew:!1,checkPath:`${d.folder}/`,miniSwe:d}]);for(let{path:d,relativePath:o}of e){let s=o.split("/"),h=Pe.has(s.pop().toLowerCase())&&s.length>0,u=ae(t,d,f);u===n&&!x(t,d,n)&&!i.includes(n)&&i.push(n);let c=u!==null&&u!==n&&!!S(`${u}/`,n),p=o.toLowerCase()==="config/agents.yaml"||o.toLowerCase().endsWith("/config/agents.yaml");if(!h&&!c&&!p)continue;let w=p?d.slice(0,-18).replace(/\/$/,""):c?u:N(s.join("/"),n),P=l.get(w)??[];P.push({path:d,plugin:c,crew:p,checkPath:c?`${w}/`:d}),l.set(w,P)}let k=q(t),g={settings:t,folder:n,scoped:e,candidates:l,rootPlugins:i,excludedFolders:k?we:Se},m=de(g,new Set);if(k){let d=[...new Set(m.accepted.map(c=>c.folder))].filter(c=>c!==n),o=e.filter(c=>!x(t,c.path,n)&&!d.some(p=>S(c.path,p)!==null)).map(c=>c.path),s=E(t,o,{root:n,folderAgentsFound:d.length>0}),h=he(s,d.length>0)?[{path:`${n}/`,checkPath:`${n}/`}]:[],u=V([...m.accepted,...h],c=>c.checkPath,{root:n,listing:new Set(e.map(c=>c.path))});if(m.accepted.some(c=>u(c.checkPath))){let c=new Set([...l.values()].flat().filter(p=>u(p.checkPath)).map(p=>p.path));m=de(g,c)}}return m.skipped.sort((d,o)=>d.path<o.path?-1:d.path>o.path?1:0),{scopes:m.scopes,skipped:m.skipped,pluginFolders:m.pluginFolders}}function de({settings:t,folder:r,scoped:n,candidates:f,rootPlugins:e,excludedFolders:i},l){let a=[{key:null,folder:r,kind:"root"}],k=[],g=[...e],m=[],d=new Map;for(let o of[...f.keys()].sort()){let s=f.get(o),h=me(a,s[0].path),u=d.get(h.folder)??ye(n.map(y=>y.path),h.folder);d.set(h.folder,u);let c=[];for(let y of s){let{path:L,checkPath:U}=y;if(I(t,L,g))continue;let K=x(t,L,r)?"excluded-folder":o===r?null:l.has(L)?"excluded-folder":Fe(S(U,r),S(U,h.folder),u,i);K?k.push({path:L,reason:K}):(c.push(y),m.push({path:L,folder:o,checkPath:U}))}if(!c.length)continue;let p=c.find(y=>y.crew),w=ue(o,r),P=p?{key:w,folder:o,kind:"crew",agentsPath:p.path,tasksPath:n.find(y=>S(y.path,o)?.toLowerCase()==="config/tasks.yaml")?.path??null}:{key:w,folder:o,kind:"folder"},v=s.find(y=>y.managed)?.managed;v&&(P.managed=v);let F=s.find(y=>y.miniSwe)?.miniSwe;F&&(P.miniSwe=F),o===r?a[0]=P:a.push(P),c.some(y=>y.plugin)&&!g.includes(o)&&g.push(o)}return{scopes:a,skipped:k,pluginFolders:g,accepted:m}}function tt(t,r,n,f={}){let e=pe(t,r,n),{scopes:i,ownerOf:l,ignoredPaths:a}=e,k=new Set(a),g=new Map(i.map(u=>[u,[]]));for(let u of r){if(k.has(u))continue;let c=l(u);c&&g.get(c).push(u)}let m=i.map(u=>E(t,g.get(u),{root:u.folder,mode:f.mode,folderAgentsFound:u.key===null&&(i.length>1||u.kind==="crew")})),d=(u,c)=>he(u,i[c].key===null&&(i.length>1||i[c].kind==="crew")),o=i.length===1?m:m.filter((u,c)=>i[c].managed||i[c].miniSwe||i[c].kind==="crew"||d(u,c)),s=!o.length||o.some(u=>{let c=m.indexOf(u);return i[c].managed||i[c].miniSwe||i[c].kind==="crew"&&!d(u,c)?!1:!u.registry&&(!u.files.some(p=>p.role==="prompt")||!u.files.some(p=>p.role==="tool file"))}),h=m.flatMap((u,c)=>{let p=i[c];if(p.miniSwe)return[...u.files,...[...p.miniSwe.configs,...p.miniSwe.templates,p.miniSwe.agentPath,p.miniSwe.loaderPath,p.miniSwe.runnerPath].map(v=>({path:v,relativePath:S(v,p.folder),role:"knowledge",kind:"entry"}))];if(p.managed)return[...p.managed.agents,...p.managed.configs].flatMap(v=>{let F=$(S(v,p.folder))?.definition;if(F&&(f.mode==="core"||!T(t)))return[];let y=p.managed.agents.includes(v);return[{path:v,relativePath:S(v,p.folder),role:y?"prompt":F?"skill":"knowledge",kind:y?"entry":F?"skill":"json"}]});let w=(e.pluginDeclarations??[]).filter(v=>v.folder===p.folder).map(v=>({path:v.path,relativePath:S(v.path,p.folder),role:"marker",kind:"entry"}));if(p.kind!=="crew")return[...u.files,...w];let P=[{path:p.agentsPath,relativePath:S(p.agentsPath,p.folder),role:"prompt",kind:"entry"}];return p.tasksPath&&P.push({path:p.tasksPath,relativePath:S(p.tasksPath,p.folder),role:"knowledge",kind:"entry"}),[...u.files,...P,...w]});return{...e,files:h,needsExtraction:s}}function he(t,r){let n=B(t),f=X({codeAgentsFound:!1,folderAgentsFound:r,otherDefinitions:O(n)});return se(n,f)}function ye(t,r){let n=new Set;for(let f of t){let e=S(f,r);e!==null&&C.test(e)&&n.add(e.slice(0,-3).toLowerCase())}return n}function Fe(t,r,n,f){let e=t.toLowerCase();if(f.some(a=>`/${e}`.includes(`/${a}/`)))return"excluded-folder";let i=e.slice(0,e.lastIndexOf("/"));if($(t,{nested:!0})||oe.some(a=>i===a||i.endsWith(`/${a}`)))return"skill-folder";if(`/${e}`.includes(`/${te}/${A}/`)||C.test(r))return"sub-agent-folder";let l=r.toLowerCase().split("/");return l.some((a,k)=>n.has(l.slice(0,k).join("/")))?"sub-agent-folder":null}export{G as a,O as b,se as c,ge as d,Ne as e,et as f,pe as g,tt as h};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{b as g}from"./57M4OQJM.js";import{a as m}from"./IBCFGUHI.js";import{yb as p}from"./HPIAEQHE.js";import{createHash as y}from"node:crypto";function h(e,i){return e==="finding"?p(i):y("sha256").update(g(i)).digest("hex")}function l(e,i,a,n){let c=h(e,i);return x({target:e,index:a,fingerprint:c},n)}function x(e,i){let a={status:"rejected",reason:"attachment_mismatch"};if(!Number.isInteger(e.index)||e.index<0)return a;let n=i.filter(s=>s.target===e.target&&s.index===e.index);if(!n.length)return{status:"absent"};if(n.length!==1||n[0].fingerprint!==e.fingerprint)return a;let c=m(n[0]);return c?{status:"accepted",wording:c}:a}function R(e,i){let a=new Map(i.map(t=>[t.key,t])),n=e.evidence.flatMap(t=>{let r=a.get(t.key);if(!r)return[];let f=e.positions.filter(u=>u.key===t.key),o=f.length===1&&f[0].target===t.kind?f[0]:null;return[{key:t.key,pair:r,position:o}]}),c=n.flatMap(({pair:t,position:r})=>r?[{target:r.target,index:r.index,fingerprint:r.fingerprint,headline:t.headline,ifLeft:t.ifLeft}]:[]),s=[],d=[];for(let{key:t,position:r}of n){let f=r?x(r,c):null;if(!r||f?.status!=="accepted"){d.push({key:t,reason:"attachment_mismatch"});continue}s.push({target:r.target,index:r.index,fingerprint:r.fingerprint,...f.wording})}return{rows:s,rejected:d}}function _(e,i,a,n){let c=[],s=new Set,d=0;for(let t of a){let r=`${t.target}:${t.index}`;if(s.has(r))continue;s.add(r);let f=t.target==="finding"?e[t.index]:void 0,o=t.target==="structure"?i[t.index]:void 0;if((f?l("finding",f,t.index,a):o?l("structure",o,t.index,a):null)?.status!=="accepted"){d++;continue}c.push(t)}return{rows:c,...n?{diagnostics:d?{...n,accepted:n.accepted-d,rejected:n.rejected+d,byReason:{...n.byReason,attachment_mismatch:(n.byReason.attachment_mismatch??0)+d}}:n}:{}}}export{h as a,l as b,R as c,_ as d};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
function n(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 c(e,r={}){let s=Number(e.CF_PASS_CONCURRENCY??(r.forLocal?4:3));return{enabled:e.CF_PARALLEL_PASSES!=="0",concurrency:r.passConcurrency??(Number.isSafeInteger(s)&&s>0?s:3)}}function a(e,r){let s=r.analysisFlags;return s?{...s,findingCheck:s.findingCheck??n(e).findingCheck,sourceNotes:s.sourceNotes??!1}:{...n(e),sourceNotes:!1}}export{n as a,c as b,a as c};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{f as E,l as j,m as T,n as _}from"./7OYIBWX3.js";import{h as B}from"./NCWEOJVJ.js";import{L as I,R as M,b as C,e as x,fa as y,o as g}from"./HPIAEQHE.js";import{c as h,e as O}from"./T5TREZCQ.js";import{posix as v}from"node:path";function D(e,a,c={},u={}){let{root:r}=c,f=a.filter(t=>{let o=y(e,t,{...c,purpose:"source",route:"github"});return o.admitted||o.reason==="wrong-type"||o.reason==="too-large"}),n=x(e)?B(e,f.map(t=>t.path),r):void 0,s=new Set(n?.pluginDeclarations?.map(t=>t.path)),i=n??(u.measureAnalysisSize?B(e,f.map(t=>t.path),r):void 0),l=new Map(i?.files.map(t=>[t.path,t])),k=u.measureAnalysisSize?new Map(a.map(t=>[t.path,t.size])):void 0,z=n?{files:n.files.map(t=>({...t,path:h(t.path,r)})),ownerOf:t=>{let o=n.ownerOf(O(t,r));return o?{...o,folder:o.key===null?"":h(o.folder,r)}:null}}:void 0,q=new Set(n?.ignoredPaths),d=E(e,{paths:f.map(t=>h(t.path,r)),scopes:z});return{descriptions:a.flatMap(t=>{if(q.has(t.path))return[];let o=h(t.path,r),P=o===null?{size:t.size}:j(d,o,t.size),m=y(e,{...t,size:P.size},{...c,purpose:"source",route:"github",scopes:z}),F=o===null?99:_(e,o,z),L=o!==null&&!s.has(t.path)&&!T(d,o)&&(C(t.path)||M(e,o,z)||F===0)?"instruction":"code",S={};if(u.measureAnalysisSize){let N=m.admitted||m.reason==="too-large",R=y(e,t,{...c,purpose:"code-scan",route:"github",listing:k}),w=l.get(t.path),U=w&&(m.admitted||["too-large","wrong-type","empty"].includes(m.reason))&&y(e,{path:t.path},{...c,purpose:I(w.role),route:"github"}).admitted;S.countsTowardAnalysisSize=N||R.admitted||R.reason==="too-large"||!!U,S.analysisPool=w?.role==="skill"||w?.role==="reference"?"instruction":L}return[{entry:t,readEntry:{...t,...P},rel:o,score:F,pool:L,...S,admission:m,...d.enabled&&o!==null?{tier:d.tierOf(o)}:{}}]}),priority:d,declarations:s,discovery:i}}var K=Object.freeze({totalLimitBytes:g.codeAgent.importBytes,instructionLimitBytes:g.sourceFetch.instructionBytes}),b=["totalBytes","instructionBytes","fileCount"],p=()=>new Error("Invalid analysis size"),A=e=>typeof e=="number"&&Number.isSafeInteger(e)&&e>=0;function W(e){if(!e||typeof e!="object"||Array.isArray(e)||Reflect.ownKeys(e).length!==b.length||b.some(r=>!Object.hasOwn(e,r)||!A(Reflect.get(e,r))))throw p();let{totalBytes:a,instructionBytes:c,fileCount:u}=e;if(c>a)throw p();return{totalBytes:a,instructionBytes:c,fileCount:u}}function ot(e){let a=W(e);return a.totalBytes>K.totalLimitBytes?{fits:!1,measure:"total_text"}:a.instructionBytes>K.instructionLimitBytes?{fits:!1,measure:"instruction_text"}:{fits:!0,measure:null}}function st(e,a,c={}){let u=new Map;for(let s of a){if(!A(s.size)||typeof s.path!="string"||!s.path||s.path.includes("\0"))throw p();let i=v.normalize(s.path.replace(/\\/g,"/"));if(i==="."||i===".."||i.startsWith("../")||i.startsWith("/"))throw p();let l=u.get(i);if(l&&l.size!==s.size)throw p();u.set(i,{path:i,size:s.size,ref:i})}let r=[...u.values()],{descriptions:f}=D(e,r,c,{measureAnalysisSize:!0}),n={totalBytes:0,instructionBytes:0,fileCount:0};for(let s of f){if(!s.countsTowardAnalysisSize)continue;let{entry:i}=s;if(n.totalBytes+=i.size,s.analysisPool==="instruction"&&(n.instructionBytes+=i.size),n.fileCount+=1,!b.every(l=>A(n[l])))throw p()}return W(n)}export{D as a,K as b,W as c,ot as d,st as e};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as m}from"./UEWL3GMQ.js";import{c as r,e as c,g as f}from"./EH3QQ3T4.js";import{a as o,b as a}from"./FSLWD2PE.js";import{z as i}from"zod";var u={expectedOutcome:{setting:"CF_FIX_EXPECTED_OUTCOME",enabled:e=>e.CF_FIX_EXPECTED_OUTCOME!=="0",suffix:"-no-outcome",suffixWhen:!1},untrustedContent:{setting:"CF_UNTRUSTED_CONTENT_CHECK",enabled:o,suffix:"-no-untrusted",suffixWhen:!1},betterAsCode:{setting:"CF_FINDING_BETTER_AS_CODE",enabled:a,suffix:"-better-as-code",suffixWhen:!0}};function d(e){let n=Object.entries(u).map(([t,s])=>({key:t,rule:s,enabled:s.enabled(e)}));return{name:`findings${n.map(({rule:t,enabled:s})=>s===t.suffixWhen?t.suffix:"").join("")}`,switches:Object.fromEntries(n.map(({key:t,enabled:s})=>[t,s])),settings:Object.fromEntries(n.map(({rule:t,enabled:s})=>[t.setting,s?"1":"0"]))}}function _(){let e=[{}];for(let{setting:n}of Object.values(u))e=e.flatMap(t=>["0","1"].map(s=>({...t,[n]:s})));return e.map(n=>({...d(n),schema:h(n)}))}function p(e){return i.object({findings:i.array(e.shape.findings.element.extend({fixes:i.array(r.omit({expectedOutcome:!0})).min(1)}))})}var x=r.extend({expectedOutcome:i.string().default("")}),g=i.array(c.extend({fixes:i.array(x).min(1),sourceNotes:m.nullable().optional().catch(null)}));function h(e){let n=d(e),t=f(n.settings);return n.switches.expectedOutcome?t:p(t)}function S(e){return E(e.findings)}function E(e){return g.parse(e)}export{d as a,_ as b,h as c,S as d,E as e};
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import{a as Gr}from"./QMIXCT62.js";import{a as Jr}from"./J4AXGE5W.js";import{b as j,k as Hr}from"./IVDDV6CU.js";import{a as go,b as Rt,c as ko,d as wo,e as So,f as yo,g as Ct,h as fn,i as Kr}from"./TDNTU4TF.js";import{a as Ur}from"./QDYMR6KS.js";import{A as ue,B as Dr,C as Br,E as qr,a as Et,b as Cr,c as Pr,d as ot,g as uo,h as mo,i as ho,j as ye,k as dn,l as st,m as Ir,n as Ar,o as Mr,p as _t,q as rt,r as it,s as fe,t as ct,u as Fr,v as Tr,w as Lr,x as Nr,y as jr,z as xe}from"./K5OTWBTT.js";import{a as K}from"./326F4XNG.js";import{a as at}from"./V7BFUTM7.js";import{a as Wr}from"./4F6ZIHXU.js";import{a as zr}from"./VGYWI4X2.js";import{a as ln}from"./PYKAERZZ.js";import{b as W,c as we,d as oe,e as pn,f as Se,j as vt,k as Rr,p as fo,q as Ne}from"./7OYIBWX3.js";import{a as Z,b as nt,f as vr,g as Er,h as _r}from"./NCWEOJVJ.js";import{a as Jt,b as D,c as Xt}from"./2PSNOSJ2.js";import{a as ys,b as Re,c as Ce,d as xs,e as Qt,f as ht,g as Vt,h as Y,i as no,j as pr,l as pe,m as G,n as mr,o as Fe,p as hr,s as et}from"./DRGDIIFA.js";import{g as ur,k as I}from"./3CKW5JIF.js";import{d as fr,e as Ze}from"./STZOC7LN.js";import{c as ke}from"./MJGB25S5.js";import{b as ao,c as dr}from"./UEWL3GMQ.js";import{a as _e,b as zt,c as U}from"./OFBJNHC6.js";import{a as de,b as gr,c as kr,d as tt,e as cn,f as wr,g as bt,h as Te,i as Sr}from"./MXXNED6N.js";import{a as br,b as Or}from"./FTODBFQW.js";import{a as Ot,b as $t,c as xr}from"./ZAA44GPI.js";import{a as N}from"./3227KXHF.js";import{c as po,d as yr}from"./O652FQQH.js";import{b as co}from"./57M4OQJM.js";import{a as lo}from"./IBCFGUHI.js";import{a as Le,e as $r}from"./KU5DINLW.js";import{$a as Vs,A as St,B as Fs,C as Ts,Da as ro,Ea as nn,Ia as yt,Ja as Ie,M as Ls,Oa as Us,Qa as Hs,Ra as Gs,Ua as Ws,Va as zs,Wa as Js,Xa as Xs,Za as Qs,_ as Ns,_a as Ye,a as Zt,ab as Ys,b as Ve,bb as Ae,cb as Zs,d as wt,db as xt,e as tn,f as Ps,fa as ce,fb as er,gb as tr,hb as nr,ib as or,jb as sr,ka as js,kb as rr,mb as on,nb as ir,o as J,ob as Me,pa as Ds,pb as ar,qb as rn,ra as Bs,rb as cr,sb as lr,t as Is,tb as io,u as so,ua as qs,ub as an,vb as he,x as As,xa as le,y as Ms,yb as H,za as Ks,zb as ge}from"./HPIAEQHE.js";import{b as sn}from"./74FPPPIG.js";import{b as kt,f as oo}from"./EH3QQ3T4.js";import{f as Qe}from"./JKWTHRUR.js";import{b as Yt,c as bs,d as Os,f as gt,g as $s,h as vs}from"./FSLWD2PE.js";import{b as V,c as ne}from"./3GUKUEEJ.js";import{a as Es,b as Pe,c as me,d as en,e as _s,h as Rs,i as Cs}from"./T5TREZCQ.js";var Nc={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},jc=Object.freeze(Object.keys(Nc));function xo(e,t){return kt.parse(e.mapped?.[t])}function td(e,t){return kt.safeParse(e.mapped?.[t])}function X(e){return(e.mapped??[]).map((t,n)=>({repoKey:e.repos?.[n]?.key??`repo-${n}`,fragment:xo(e,n)}))}function be(e){return Object.fromEntries((e.repos??[]).map(t=>[t.key,new Set(Object.keys(t.files??{}))]))}function Q(e){return Object.fromEntries(jc.filter(t=>Object.hasOwn(e,t)).map(t=>[t,e[t]]))}function se(e,t){let n=[],o=e.flatMap(c=>c.skipped).map(c=>({...c}));for(let c of e)for(let[a,l]of Object.entries(c.files)){let p=Object.hasOwn(t,a)?t[a]:void 0;p===l?n.push(...c.sources.filter(d=>d.sourcePath===a)):o.push({path:a,reason:p===void 0?"Source file was not read.":l.startsWith(p)?"Source file was truncated while reading.":"Source file changed after admission."})}let s=o.filter((c,a)=>o.findIndex(l=>l.path===c.path&&l.reason===c.reason)===a),r=new Set(s.map(({path:c})=>c)).size,i=r?[`${r} ${r===1?"file was":"files were"} skipped, so some findings may be missing.`]:[];return{sources:n,skipped:s,warnings:i}}function bo(e,t,n,o){let s=t.filter(l=>Object.hasOwn(l.files,e.path)&&l.sources.some(p=>p.unitKey===n&&p.sourcePath===e.path)&&typeof o[e.path]=="string"&&l.files[e.path].startsWith(o[e.path]));if(!s.length)return!0;let{excerpt:r,line:i}=e,c=Object.hasOwn(o,e.path)?o[e.path]:void 0;if(!r||i===null||typeof c!="string")return!1;let a=gr(c,r,i);return a?s.some(l=>{let p=l.files[e.path];return typeof p!="string"||!p.startsWith(c)?!1:l.sources.some(d=>d.unitKey!==n||d.sourcePath!==e.path?!1:d.kind==="prompt"?a.every(u=>u.from>=d.sourceLine&&u.to<=(d.sourceEndLine??d.sourceLine)):a.some(u=>u.from<=d.sourceLine&&u.to>=d.sourceLine))}):!1}var Dc={"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 Xr(e){let t={files:{},sources:[],skipped:[]},{agent:n,files:o,allowance:s}=e;if(!e.enabled||!n.codeInputsJson)return t;let r=new Set(s.skipped.map(({path:d})=>d)),i=s.paths.filter(d=>!r.has(d)),c=new Set(i),a=(d,u)=>{t.skipped.some(h=>h.path===d&&h.reason===u)||t.skipped.push({path:d,reason:u})};s.skipped.forEach(({path:d,reason:u})=>{let h=Dc[u];h&&a(d,h)});let l=(d,u)=>{let{sourcePath:h,sourceLine:g}=d;if(r.has(h))return!1;if(!c.has(h))return a(h,"File was not admitted for this agent."),!1;let f=Object.hasOwn(o,h)?o[h]:void 0;return typeof f!="string"?(a(h,"Source file is missing."),!1):!Number.isInteger(g)||g<1||g>f.split(`
|
|
2
|
-
`).length?(a(h,"Source line is missing or stale."),!1):d.name.trim()?(t.files[h]=f,t.sources.some(m=>m.kind===u&&m.name===d.name&&m.sourcePath===h&&m.sourceLine===g)||t.sources.push({...d,unitKey:n.unitKey,kind:u}),!0):(a(h,"Source name is missing."),!1)},p=new Set((n.toolsJson??[]).map(({name:d})=>d));for(let d of n.codeInputsJson.tools){if(!p.has(d.name)||!l(d,"tool"))continue;let u=Pr([d.name],i,o,i);u.length||a(d.sourcePath,`Tool implementation was not admitted or found: ${d.name}.`);for(let h of u){let g=Cr([d.name],[h],o);g.length||a(h,"Tool implementation is missing."),g.forEach(f=>l(f,"tool"))}}if(n.codeInputsJson.contextInputs.forEach(d=>l(d,"context")),n.site){let{path:d,span:u}=n.site,h=Object.hasOwn(o,d)?o[d]:void 0;Number.isInteger(u.to)&&u.to>=u.from&&(typeof h!="string"||u.to<=h.split(`
|
|
3
|
-
`).length)?l({name:n.unitKey,sourcePath:d,sourceLine:u.from,sourceEndLine:u.to},"prompt"):a(d,"Prompt source lines are missing or stale.")}return t}function un(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=>se(s.inputs,s.files).sources),o=[...new Map(t.flatMap(s=>s.inputs.flatMap(r=>Object.entries(r.files).flatMap(([i,c])=>{let a=Object.hasOwn(s.files,i)?s.files[i]:void 0;return a!==void 0&&c.startsWith(a)?[{repo:s.repo,path:i,text:ge(a),truncated:a!==c}]:[]}))).map(s=>[JSON.stringify([s.repo,s.path,s.text]),s])).values()];return{scopes:t,sources:n,files:o}}function re(e,t,n,o){return{tools:t,rethrow(s){n?.(s),ne(s)},available:e!==null,settleStartedOnError:e?.settleStartedOnError,withRetry:s=>re(e?zr(e,s):null,t,n,o),async execute(s,r={}){if(o&&(r={...r,signal:r.signal?AbortSignal.any([o,r.signal]):o}),r.signal?.throwIfAborted(),!e)throw new Error("model unavailable");return"execute"in e?e.execute(s,r):Wr(e,t,s,r)}}}function M(e,t,n={},o={}){return e.execute(ur(t,n,o.maxInputBytes),o)}async function Oe(e){return e.requestTools?e.requestTools():Gr(Ur(await e.instructions()))}var Pt=2,Bc=10*6e4;function mn(e,t,n){return new V("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 Qr(e){let{data:t,plan:n,progress:o}=e,s=n.passes.length,r={...t.passResults};if(!t.passResults){for(let p=0;p<(t.passCursor??0);p++)r[p]={findings:t.passFindings?.[p],retries:0};t.passRetries&&(r[t.passCursor??0]={retries:t.passRetries})}await o.checkpoint({inspectPlan:n,passResults:r});let i={...t,inspectPlan:n,passResults:r},c=n.passes.map((p,d)=>d).filter(p=>r[p]?.findings===void 0);for(let p of c)if((r[p]?.retries??0)>Pt)throw mn(p,s,r[p].retries);let a;if(await K(e.onePartPerStep?c.slice(0,1):c,e.concurrency,async p=>{if(!(o.elapsedMs()>=Bc||a))try{let d=r[p]?.retries??0;for(;!a;){o.assertHeld(),o.signal?.throwIfAborted();let u;try{u=await e.run(p,d)}catch(g){if(o.rethrow?.(g),ne(g),e.forLocal)throw g instanceof V?g:new Error("A findings reading pass failed; no completed report was written.");d++,o.log({level:"warn",code:"analysis.pass_failed",counts:{part:p+1,parts:s,retries:d}});let f={retries:d};if(await o.checkpoint({},{index:p,result:f}),r[p]=f,d>Pt)throw mn(p,s,d);if(e.onePartPerStep)break;await new Promise(m=>setTimeout(m,1e3));continue}let h={findings:u,retries:d};await o.checkpoint({},{index:p,result:h}),r[p]=h;break}}catch(d){a??=d}}),a)throw a;let l=n.passes.every((p,d)=>r[d]?.findings!==void 0);return{...i,...l?{passCursor:s,passRetries:0,passFindings:n.passes.map((p,d)=>r[d].findings)}:{}}}var hn={critical:0,high:1,medium:2,low:3},Yr=e=>(e.line??0)>0,gn=e=>Yr(e)&&!!e.excerpt?.trim();function Oo(e,t){let n=i=>{let c=rn(i);return[c.filter(gn).length,c.filter(Yr).length,Number(!!i.site&&gn({...i.site,excerpt:i.excerpt}))]},[o,s]=[n(e),n(t)],r=o.findIndex((i,c)=>i!==s[c]);return r>=0&&o[r]>s[r]}function Vr(e,t,n={}){let o=[];if(n.semanticMatching)for(let s of e){let r=ar({previous:o.map((i,c)=>io(i,String(c))),current:s.map((i,c)=>io(i,String(c))),enabled:!0});for(let i of r.matches){let c=Number(i.previousId),a=s[Number(i.currentId)];Oo(a,o[c])&&(o[c]=a)}for(let i of r.unmatchedCurrent)o.push(s[Number(i.id)])}else for(let s of e.flat()){let r=o.findIndex(i=>cr(i,s));r<0?o.push(s):Oo(s,o[r])&&(o[r]=s)}return o.sort((s,r)=>hn[s.severity]-hn[r.severity]).slice(0,t)}function qc(e,t){let n=hn[e.severity]-hn[t.severity];if(n)return n<0;let o=rn(e).filter(gn).length-rn(t).filter(gn).length;return o?o>0:Oo(e,t)}function Zr(e,t={}){let n=t.deferCap?1/0:24;if(t.dedupe===!1)return e.length<2?e[0]??[]:Vr(e,n,t);let o=e.length<2?e[0]??[]:Vr(e,1/0,t),s=o.map((a,l)=>o.map((p,d)=>l===d||lr(a,p))),r=new Set,i=new Map;for(let a=0;a<o.length;a++){if(r.has(a))continue;let l=[a];r.add(a);for(let d=0;d<l.length;d++)for(let u=0;u<o.length;u++)r.has(u)||!s[l[d]][u]||(r.add(u),l.push(u));if(!l.every(d=>l.every(u=>s[d][u]))){for(let d of l)i.set(d,o[d]);continue}let p=l.reduce((d,u)=>qc(o[u],o[d])?u:d,a);i.set(a,o[p])}let c=i.size===o.length?o:o.flatMap((a,l)=>i.has(l)?[i.get(l)]:[]);return e.length<2?c:c.slice(0,n)}var ei=e=>e.CF_FINDING_DEDUPE!=="0";var Kc=15*6e4;async function ti(e,t){let n=new AbortController,o={...e,execute:(i,c={})=>e.execute(i,{...c,signal:c.signal?AbortSignal.any([c.signal,n.signal]):n.signal})},s,r=new Promise((i,c)=>{s=setTimeout(()=>{let a=new V("llm","The reading part's model call timed out.");c(a),n.abort(a)},Kc)});try{return await Promise.race([Promise.resolve().then(()=>t(o)),r])}finally{clearTimeout(s)}}var Uc=N.generate;function Hc(e,t){let n=t.qualityConfig;return{template:Fe("derive",e,n),inputs:{maxFindings:String(an),graph:JSON.stringify(t.graph,null,2),pass:t.pass??null,codeSources:t.codeSources??[],files:Object.entries(t.files).map(([s,r])=>({path:s,text:ge(r)}))},answerFormat:"findings",model:n?.switches.enabled?n.models.derive:Uc,limits:{effort:"high"}}}async function ni(e,t,n){n.qualityConfig&&et(n.qualityConfig,t.tools,e);let o=await M(t,Hc(e,n),e);return fr(o)}function oi(e,t,n){return e.flatMap(o=>{let s=o.site?{path:o.site.path,line:o.site.line,excerpt:o.excerpt}:null,r=[...s?[s]:[],...o.otherSites??[]].filter(l=>t.has(l.path));if(!r.some(l=>n.has(l.path)))return[];let i=o.site&&r[0]===s?0:Math.max(0,r.findIndex(l=>(l.line??0)>0)),c=r[i],a=r.filter((l,p)=>p!==i);return[{...o,site:{path:c.path,line:c.line},excerpt:c.excerpt,otherSites:a}]})}function je(e){let t=[],n=[],o=new Set;for(let s of e)for(let[r,i]of Object.entries(s.files??{})){if(o.has(r)){n.push({repo:s.key,path:r});continue}o.add(r),t.push({repo:s.key,path:r,text:i})}return{all:t,shadowed:n}}function It(e){return Object.fromEntries(je(e).all.map(t=>[t.path,t.text]))}function Gc(e,t){return Object.keys(t).filter(n=>le(n,{nested:!0})).sort().map(n=>{let o=n.split("/").slice(-2,-1)[0]??"skill",{name:s,description:r}=it(e,`${o}.md`,t[n]);return{name:s,description:r??""}})}function si(e,t,n,o,s,r,i){let c=new Set(t.core),a=n===0?[...t.core,...t.passes[0].own]:t.passes[n].own,l=[...t.core,...t.passes[n].own,...t.passes.length>1?t.passes[n].context??[]:[]],p=Se(e,{paths:Object.keys(o),files:o,graph:s,repos:i}),d=Ne(l.map(g=>({repo:"",path:g,text:c.has(g)?oe(o[g]):o[g]})),c,we(s),p),u=Object.fromEntries(d.map(g=>[g.path,g.text])),h=r?.enabled?se(r.inputs,u):void 0;return{files:u,...t.passes.length>1?{pass:{part:n+1,count:t.passes.length,own:a,context:t.passes[n].context??[],skills:Gc(e,o)}}:{},read:d.map(g=>g.path),own:a,...h?{codeSources:h.sources,codeSkipped:h.skipped}:{}}}function ri(e){return e.find(t=>!t.notFoundAt)??e[0]??null}function Wc(e,t){return t.startsWith(`${e}#`)?t.slice(e.length+1):null}function zc(e,t){let n=[];for(let o of e?.nodes??[]){let s=o.kind==="agent"?t?Wc(t,o.id):o.id.slice(o.id.indexOf("#")+1):null;s!==null&&n.push({node:o,unitId:s})}return n}function Jc(e,t,n){if(n==null)return e[0];let o=e.flatMap(i=>(i.node.files??[]).flatMap(c=>(c.role==="system prompt"||c.role==="knowledge")&&c.path===t&&c.span?[{c:i,span:c.span}]:[])),s=o.find(i=>i.span&&i.span.from<=n&&n<=i.span.to);if(s)return s.c;let r=null;for(let i of o)i.span&&i.span.to<n&&(!r||i.span.to>r.to)&&(r={c:i.c,to:i.span.to});return r?.c??e[0]}function ii(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)&&bo({path:e.file,line:e.line??null,excerpt:e.excerpt},[{...n,sources:[o]}],o.unitKey,n.files)).map(o=>o.unitKey)))]}function Xc(e,t,n,o){let s=ii(e,n);if(s.length)return{unitKey:s.length===1?s[0]:null,anchors:s,code:!0};let r=e.file?zc(t,e.repo??"").filter(i=>i.node.files?.some(c=>c.path===e.file)):[];return{unitKey:r.length?Jc(r,e.file,e.line).unitId:o,anchors:s,code:!1}}function kn(e,t,n,o){let s=e[0];if(!s)return!0;let r=n.map(p=>({...p,input:{...p.input,files:Object.fromEntries(Object.entries(p.input.files).filter(([d,u])=>typeof p.files[d]=="string"&&u.startsWith(p.files[d])))}})),i=p=>r.filter(d=>!p.repo||!d.repo||d.repo===p.repo),c=i(s),a=Vc(s,t,c.map(p=>p.input),o,{savedRepoPaths:!0});if(!a.unitKey&&!a.code)return!0;let l=a.unitKey?[a.unitKey]:a.anchors;return e.every(p=>{let d=i(p).filter(h=>!s.repo||!h.repo||h.repo===s.repo),u=a.unitKey?[]:ii(p,d.map(h=>h.input));return l.every(h=>(!u.length||u.includes(h))&&d.filter(g=>g.unitKey===h).every(g=>bo({path:p.file??"",line:p.line??null,excerpt:p.excerpt??null},[g.input],h,g.files)))})}function ai(e,t,n=!1){let o=n?Cs:Rs,s=t?e.filter(r=>r.repoPath&&o(r.repoPath)===t):[];return{rows:s,unitRows:s.filter(r=>r.unitKey)}}function Qc(e,t,n={}){let{rows:o,unitRows:s}=ai(e,t,n.savedRepoPaths);return ri(s)?.id??o[0]?.id??(e.length===1?e[0].id:null)}function Vc(e,t,n,o,s){let r=o?Qc(o,e.repo,s):null,i=o?.find(p=>p.id===r)?.unitKey??null,{unitRows:c}=ai(o??[],e.repo,s.savedRepoPaths);if(o&&(!e.repo||!c.length))return{unitKey:i,anchors:[],code:!1,agentId:r};let a=Xc(e,t,n,i);if(!o)return{...a,agentId:null};let l=c.find(p=>p.unitKey===a.unitKey);return{...a,unitKey:a.code?a.unitKey:l?.unitKey??i,agentId:a.unitKey?l?.id??(a.code?null:r):null}}async function vo(e,t){let n=si(e,t.plan,t.index,t.files,t.reading,t.codeEvidence,t.repos),o=await ti(t.llm,i=>ni(e,i,{graph:t.graph,...n,qualityConfig:t.qualityConfig})),s=oi(o,new Set(n.read),new Set(n.own));if(!t.codeEvidence?.enabled)return s;let r=t.codeEvidence.inputs.flatMap(i=>i.unitKey?[{repo:i.repo,unitKey:i.unitKey,input:i,files:n.files}]:[...new Set(i.sources.map(c=>c.unitKey))].map(c=>({repo:i.repo,unitKey:c,input:i,files:n.files})));return s.filter(i=>kn([...i.site?[{...i.site,excerpt:i.excerpt}]:[],...i.otherSites??[]].map(c=>({repo:t.codeEvidence?.repoByPath?.[c.path]??null,file:c.path,line:c.line,excerpt:c.excerpt})),t.graph,r,t.codeEvidence?.agentRows))}function wn(e,t,n=15e4,o,s,r){let{all:i,shadowed:c}=je(e),a=o??W(t),l={},p=[],d={},u=0,h=Se(r,{paths:i.map(y=>y.path),files:Object.fromEntries(i.map(y=>[y.path,y.text])),graph:t,repos:e});for(let y of Ne(i,a,we(t),h)){if(!a.has(y.path)&&u+y.text.length>n){p.push(y.path);continue}let S=a.has(y.path)?oe(y.text):y.text;l[y.path]=S,(d[y.repo]??=[]).push(y.path),u+=S.length}let g=Yc(l,a),f=[...g>n?[`The agent's core files (${Math.round(g/1e3)} KB) are larger than one reading pass, so they were read in full and nothing else was read`]:[],...[pn(a,Object.fromEntries(i.map(y=>[y.path,y.text])))].filter(y=>!!y)],m=vt(h,p.map(y=>({path:y,reason:"total"})));m&&f.push(m);let k=s?.enabled?se(s.inputs,l):void 0;return{files:l,skipped:p,readByRepo:d,shadowed:c,warnings:[...f,...k?.warnings??[]],...k?{codeSources:k.sources,codeSkipped:k.skipped}:{}}}var Yc=(e,t)=>Object.entries(e).reduce((n,[o,s])=>n+(t.has(o)?s.length:0),0);import{posix as pi}from"node:path";var Zc=e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),el=(e,t)=>new RegExp(`(?<![\\w-])${Zc(t)}(?![\\w-])`).test(e);function Be(e,t){return t.name!==null&&el(e,t.name)||fe(t.paths,[e],n=>n).length>0}function ci(e,t){let n=e.map(c=>c.paths.map(a=>t[a]).join(`
|
|
4
|
-
`)),o=(c,a)=>Be(n[c],e[a]),s=e.map(()=>new Set);for(let c=0;c<e.length;c++)for(let a=c+1;a<e.length;a++)(o(c,a)||o(a,c))&&(s[c].add(a),s[a].add(c));let r=new Set,i=[];for(let c=0;c<e.length;c++){if(r.has(c))continue;let a=[],l=[c];r.add(c);for(let p=l.shift();p!==void 0;p=l.shift()){a.push(p);for(let d of s[p])r.has(d)||(r.add(d),l.push(d))}a.sort((p,d)=>p-d),i.push({bundles:a.map(p=>e[p]),bytes:a.reduce((p,d)=>p+e[d].bytes,0),adjacent:Object.fromEntries(a.map(p=>[e[p].key,[...s[p]].map(d=>e[d].key).sort()]))})}return i.sort((c,a)=>a.bytes-c.bytes||(c.bundles[0].key<a.bundles[0].key?-1:1))}function li(e){let t=new Map(e.bundles.map(r=>[r.key,r])),n=new Set,o=r=>e.adjacent[r.key].filter(i=>n.has(i)).length,s=[];for(;t.size>0;){let r=[...t.values()].sort((i,c)=>o(c)-o(i)||e.adjacent[c.key].length-e.adjacent[i.key].length||c.bytes-i.bytes||(i.key<c.key?-1:1))[0];t.delete(r.key),n.add(r.key),s.push(r)}return s}function di(e,t,n,o,s){if(e.length<2)return{passes:e};let r=new Set(e.flatMap(l=>l.own)),i=[...r].filter(l=>/\.md$/i.test(l)).sort(),c=l=>[...new Set([...fe(i,[n[l]],p=>p),...fe(i,[n[l]],p=>pi.relative(pi.dirname(l),p))])];return{passes:e.map(l=>{let p=new Set([...t,...l.own]),d=new Map,u=new Set;for(let m of l.own){let k=new Set;for(let S of o)if(Be(n[m],S))for(let x of S.paths.filter(b=>le(b,{nested:!0})))k.add(x);for(let S of c(m))k.add(S);for(let S of[...k].filter(x=>le(x,{nested:!0})))for(let x of c(S))k.add(x);for(let S of k)u.add(S);let y=[...k];for(let S=0;S<y.length;S++){let x=y[S];for(let b of c(x))k.has(b)||(k.add(b),y.push(b))}for(let S of k)r.has(S)&&!p.has(S)&&d.set(S,(d.get(S)??0)+1)}let h=[...d.keys()].sort((m,k)=>Number(u.has(k))-Number(u.has(m))||d.get(k)-d.get(m)||(m<k?-1:1)),g=[],f=0;for(let m of h){let k=n[m].length;f+k<=s&&(g.push(m),f+=k)}return{own:l.own,context:g.sort()}})}}import{basename as fi}from"node:path";function Eo(e,t,n,o){let s=[...n].sort();return{key:e,name:t,paths:s,bytes:s.reduce((r,i)=>r+o[i].length,0)}}function ui(e,t){let n=W(t),o=new Set(Object.keys(e).filter(a=>!n.has(a))),s=[],r=a=>a.filter(l=>o.delete(l)),i=new Set(t.edges.filter(a=>a.kind==="delegates").map(a=>a.to));for(let a of t.nodes){if(!i.has(a.id)||!a.sourceRef)continue;let l=a.sourceRef.path.replace(/\.md$/i,"")+"/",p=(a.files??[]).filter(g=>g.role==="skill").map(g=>so(g.path,{nested:!0})?.folder).filter(g=>!!g),d=[...o].filter(g=>g.startsWith(l)||p.some(f=>g.startsWith(f+"/"))),u=(a.files??[]).filter(g=>g.role==="reference"||g.role==="skill").map(g=>g.path),h=r([...d,...u]);h.length&&s.push(Eo(l,fi(l),h,e))}let c=new Map;for(let a of o){let l=so(a,{nested:!0})?.folder;l&&c.set(l,[...c.get(l)??[],a])}for(let[a,l]of c)s.push(Eo(a,fi(a),r(l),e));for(let a of o)s.push(Eo(a,null,[a],e));return s.sort((a,l)=>a.key<l.key?-1:a.key>l.key?1:0)}var tl=(e,t)=>e.reduce((n,o)=>n+t[o].length,0);function mi(e,t,n,o){let s=n-t;return e<=n||s<=0?1:Math.min(o,Math.ceil((e-t)/s))}function nl(e,t,n){return e.bytes<=t?[e.bundles]:li(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 ol(e,t){let n=e.split("/").slice(0,-1);for(let o=n.length;o>0;o--){let s=n.slice(0,o).join("/"),r=t.find(i=>i.own.some(c=>c.startsWith(`${s}/`)));if(r)return r}}function hi(e){let{passMaxBytes:t,maxPasses:n,graph:o}=e,s=W(o),r=Object.keys(e.files).filter(w=>s.has(w)).sort(),i=Object.fromEntries(Object.entries(e.files).map(([w,_])=>[w,s.has(w)?oe(_):_])),c=t-tl(r,i),a=Object.keys(i).filter(w=>!s.has(w)),l=Se(e.settings,{paths:Object.keys(i),graph:o,files:i,repos:e.repos}),p=we(o),d=fo(a.filter(w=>Rr(l,w)),i,p,l),u=new Set(d),h=new Set(o.nodes.flatMap(w=>(w.files??[]).map(_=>_.path))),g=Object.fromEntries(a.filter(w=>!u.has(w)).map(w=>[w,i[w]])),f=ui(g,o),m=w=>w.name!==null||Ve(w.paths[0])&&h.has(w.paths[0]),k=f.filter(w=>!m(w)).flatMap(w=>w.paths),y=[pn(r,e.files)].filter(w=>!!w),S=[],x=[];if(c<=0){y.push("The agent's core files fill a whole reading pass, so nothing else was read");let w=vt(l,a.map(_=>({path:_,reason:"total"})));return w&&y.push(w),{core:r,passes:[{own:[]}],skipped:[...a].sort(),warnings:y}}for(let w of d){let _=i[w].length,E=x.find(C=>C.bytes+_<=c);!E&&_<=c&&x.length<n&&(E={own:[],bytes:0},x.push(E)),E?(E.own.push(w),E.bytes+=_):S.push(w)}let b=new Set(x);for(let w of ci(f.filter(m),g)){let _=w.bytes>c,E;for(let C of nl(w,c,i)){let P=C.reduce((q,Xe)=>q+Xe.bytes,0),A=C.flatMap(q=>q.paths),L=(_&&E&&E.bytes+P<=c?E:void 0)??x.find(q=>(!_||b.has(q))&&q.bytes+P<=c);L?(_&&(E=L),L.own.push(...A),L.bytes+=P):P>c||x.length>=n?S.push(...A):(E={own:[...A],bytes:P},x.push(E))}}x.length===0&&x.push({own:[],bytes:0});let $=fo(k,i,p,l);for(let w of $){let _=P=>P.bytes+i[w].length<=c,E=ol(w,x),C=E&&_(E)?E:x.find(_);if(!C){S.push(w);continue}C.own.push(w),C.bytes+=i[w].length}let O=x.map(w=>({own:w.own.sort()})),v=vt(l,S.map(w=>({path:w,reason:"total"})));v&&y.push(v);let R=di(O,r,e.files,f,e.contextMaxBytes??6e4);return{core:r,passes:R.passes,skipped:S.sort(),warnings:y}}function $e(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 gi}from"node:crypto";function ki(e){let t=e.findingQuality;if(!t?.config.switches.codeInputs||t.codeEvidence)return e;let n=[],o={};for(let[s,r]of(e.repos??[]).entries()){let i=r.files??{},c=kt.safeParse(e.mapped?.[s]),a=c.success?c.data.nodes:[],l=e.projectAgents,p=l?.enabled?[...l.byRepo[r.key]??[],...l.codeByRepo?.[r.key]??[]]:[];for(let d of p){if(!d.codeInputsJson)continue;let u=d.codeInputsJson.admittedPaths!==void 0,h={paths:u?[...d.codeInputsJson.admittedPaths]:[],skipped:[]},g=[],f=x=>x.filter(b=>{let $=i[b.sourcePath],O=d.codeInputsJson?.sourceHashes?.[b.sourcePath];return u&&$!==void 0&&O&&gi("sha256").update($).digest("hex")===O?!0:(g.push({path:b.sourcePath,reason:u?O?"The source revision differs from the imported source.":"The imported source revision is unknown.":"The imported file admission is unknown."}),!1)}),m={tools:f(d.codeInputsJson.tools),contextInputs:f(d.codeInputsJson.contextInputs)},y=a.find(x=>x.id===d.unitKey)?.files.find(x=>x.role==="system prompt"&&x.span),S=Xr({agent:{...d,codeInputsJson:m,...y?.span?{site:{path:y.path,span:y.span}}:{}},files:i,allowance:h,enabled:!0});S.skipped.push(...g),n.push({repo:r.key,unitKey:d.unitKey,input:S})}for(let[d,u]of Object.entries(i))o[JSON.stringify([r.key,d])]=gi("sha256").update(u).digest("hex")}return{...e,findingQuality:{...t,codeEvidence:n,sourceHashes:o}}}function wi(e,t){let n=e.findingQuality;if(!n?.config.switches.codeInputs)return e;let o=(n.codeEvidence??[]).flatMap(r=>se([r.input],t[r.repo]??{}).skipped.map(i=>({...i,repo:r.repo}))),s=new Set(o.map(r=>JSON.stringify([r.repo,r.path]))).size;return{...e,findingQuality:{...n,readingSkipped:o},warnings:[...new Set([...e.warnings??[],...s?[`${s} ${s===1?"file was":"files were"} skipped, so some findings may be missing.`]:[]])]}}function Si(e){if(!e.findingQuality?.config.switches.codeInputs)return;let{all:t}=je(e.repos??[]);return{enabled:!0,inputs:(e.findingQuality.codeEvidence??[]).map(o=>({...o.input,repo:o.repo,unitKey:o.unitKey,files:Object.fromEntries(Object.entries(o.input.files).filter(([s])=>t.some(r=>r.repo===o.repo&&r.path===s))),sources:o.input.sources.filter(s=>t.some(r=>r.repo===o.repo&&r.path===s.sourcePath))})),agentRows:e.projectAgents?.agentRows,repoByPath:Object.fromEntries(t.map(o=>[o.path,o.repo]))}}function Ro(e,t,n){return Object.fromEntries(Object.entries(n).map(([o,s])=>[o,Object.fromEntries(s.map(r=>{let i=e.repos?.find(c=>c.key===o)?.files?.[r]??"";return[r,t.core.includes(r)?oe(i):i]}))]))}function yi(e,t,n){if(!e.findingQuality?.config.switches.codeInputs)return;let o=Ro(e,t,n);return e.findingQuality.codeEvidence?.map(s=>({repo:s.repo,unitKey:s.unitKey,enabled:!0,inputs:[s.input],files:o[s.repo]??{},agentRows:e.projectAgents?.agentRows}))}var Po=e=>e>1?24:an,ve=e=>Po(e.inspectPlan?.passes.length??1);function sl(e,t,n){let o=wn(e,t,void 0,void 0,void 0,n),s=W(t),r=Object.keys(o.files);return{core:r.filter(i=>s.has(i)),passes:[{own:r.filter(i=>!s.has(i))}],skipped:o.skipped,warnings:o.warnings}}function Io(e,t,n,o){return n?hi({files:It(e),graph:t,passMaxBytes:15e4,maxPasses:4,settings:o,repos:e}):sl(e,t,o)}function xi(e){let t=e.skipped.length;if(t===0)return null;let n=e.passes.length>1?`${e.passes.length} reading passes`:"one pass";return`${t} file${t===1?" was":"s were"} not analyzed because the agent is larger than ${n} can read: ${e.skipped.join(", ")}`}async function bi(e,t){let{graph:n,llm:o}=t,s=ki(t.data),r=s.findingQuality?.config,i=s.repos??[],{all:c,shadowed:a}=je(i),l=Si(s),p=It(i),d=$e(t.fragments),u=s.inspectPlan??Io(i,d,U(e,s).multiPass,e),h=s.passCursor??0,g=u.passes.length,f=(s.passFindings??[]).map(b=>oo.shape.findings.parse(b)),m={...s,inspectPlan:u},k=t.parallel??zt(e);if(g>1&&t.checkpoint&&(k.enabled||s.passResults)){if(!(s.passResults&&u.passes.every(($,O)=>s.passResults?.[O]?.findings!==void 0)))return{done:!1,data:await Qr({data:s,plan:u,progress:{...t.progress,checkpoint:(O,v)=>t.progress.checkpoint(v?O:{...Q(m),...O},v)},concurrency:k.concurrency,onePartPerStep:!k.enabled,forLocal:t.forLocal,run:(O,v)=>vo(e,{llm:o.withRetry(v),qualityConfig:r,graph:n,plan:u,index:O,files:p,reading:d,codeEvidence:l,repos:i})})};f=u.passes.map(($,O)=>oo.shape.findings.parse(s.passResults[O].findings))}else if(h<g){let b;try{b=await vo(e,{llm:o.withRetry(s.passRetries??0),qualityConfig:r,graph:n,plan:u,index:h,files:p,reading:d,codeEvidence:l,repos:i})}catch($){if(o.rethrow($),ne($),t.forLocal)throw $ instanceof V?$:new Error("A findings reading pass failed; no completed report was written.");if(g<2)throw $;let O=s.passRetries??0;if(t.progress.log({level:"warn",code:"analysis.pass_failed",counts:{part:h+1,parts:g,retries:O}}),O<Pt)return{done:!1,data:{...m,passRetries:O+1}};throw mn(h,g,O+1)}if(f=[...f,b],m={...m,passCursor:h+1,passRetries:0,passFindings:f},await t.checkpoint?.(Q(m)),g>1)return{done:!1,data:m}}let y=new Set([...u.core,...u.passes.flatMap(b=>b.own)]),S={},x=Se(e,{paths:c.map(b=>b.path),files:p,graph:d,repos:i});for(let b of Ne(c,W(d),we(d),x))y.has(b.path)&&(S[b.repo]??=[]).push(b.path);return m.findingQuality&&r?.switches.codeInputs&&(m=wi(m,Ro(m,u,S))),{done:!0,data:m,findings:Zr(f,{semanticMatching:r?.switches.semanticMatching,dedupe:ei(e),deferCap:t.forLocal||Yt(e)}),plan:u,readByRepo:S,shadowed:a}}import{posix as lt}from"node:path";function Sn(e,t,n,o={}){let s=t.replace(/\[[^\]]*\]\([^)]*\)/g,"").replace(/\b[a-z][a-z\d+.-]*:\/\/[^\s)>]+|\/\/[^\s)>]+/gi,""),r=[...Array.from(t.matchAll(/\]\(\s*(?:<([^>]+)>|([^\s)]+))/g),c=>({value:c[1]??c[2],relative:!0})),...Array.from(t.matchAll(/^\s*\[[^\]]+\]:\s*(?:<([^>]+)>|([^\s]+))/gm),c=>({value:c[1]??c[2],relative:!0})),...Array.from(s.matchAll(/\bRead\s+(?:`([^`\n]+)`|"([^"\n]+)"|'([^'\n]+)'|([^\s<>`"']+\.[a-zA-Z0-9]+))/gi),c=>({value:c[1]??c[2]??c[3]??c[4],relative:!1}))],i=[];for(let c of r){let a;try{a=decodeURIComponent(c.value.split(/[?#]/)[0]).replace(/[.,;]+$/,"")}catch{continue}if(!a||/^(?:[a-z][a-z0-9+.-]*:|\/\/|\\)/i.test(a)||a.startsWith("/")&&!o.rootRelative)continue;let l=a.startsWith("/"),p=lt.normalize(l?a.slice(1):lt.join(lt.dirname(e),a)),u=(l||c.relative||a.startsWith(".")?[p]:[p,lt.normalize(a)]).filter(g=>g!==".."&&!g.startsWith("../")),h=u.find(g=>Object.hasOwn(n,g))??(o.includeMissing?u[0]:void 0);h&&!i.includes(h)&&i.push(h)}if(o.includeNamed)for(let c of Object.keys(n))[c,lt.relative(lt.dirname(e),c)].some(l=>l&&s.includes(l)&&new RegExp("(?:^|[^\\p{L}\\p{N}_./-])"+l.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+"(?=$|[^\\p{L}\\p{N}_./-]|\\.(?:\\s|$))","u").test(s))&&!i.includes(c)&&i.push(c);return i}function qe(e,t,n,o=xs,s=t){let r=e.split(`
|
|
5
|
-
`),i=Math.max(0,Math.min(r.length-1,(t??1)-1)),c=t===null||r.length<=o*2+1,a=c?0:Math.max(0,i-o),l=c?r.length:Math.min(r.length,Math.max(i,(s??1)-1)+o+1),p=()=>r.slice(a,l).map((h,g)=>`${a+g+1} ${h}`).join(`
|
|
6
|
-
`),d=p();for(;l-a>1&&Buffer.byteLength(p())>n;)i-a>l-i-1?a++:l--;let u=j(p(),n);return{text:u,truncated:u!==d||t!==null&&(t<1||t>r.length)}}function Ke(e,t,n=0,o="legacy",s){let r=rl(e,t,n);return o==="whole-file"?ll(e,t,n,r,s):r}function rl(e,t,n){let o=[],s=[],r=[],i=Qt,c=t.repos.flatMap(l=>{let p=t.fragments.filter(g=>g.repoKey===l.key),d=W($e(p)),u=new Map(p.flatMap(g=>g.fragment.nodes.flatMap(f=>f.files.map(m=>[m.path,m.role])))),h=g=>["system prompt","soul","knowledge"].indexOf(u.get(g)??"");return[...d].map(g=>({repo:l,path:g,rank:h(g)<0?3:h(g)}))}).sort((l,p)=>l.rank-p.rank||l.repo.key.localeCompare(p.repo.key)||l.path.localeCompare(p.path));for(let{repo:l,path:p}of c){let d=l.files?.[p],u=d===void 0?"":d.split(`
|
|
7
|
-
`).map((f,m)=>`${m+1} ${f}`).join(`
|
|
8
|
-
`),h=j(u,i),g=d===void 0||h!==u;r.push({repo:l.key,path:p,line:1,text:h,truncated:g}),i-=Buffer.byteLength(h),g&&o.push({kind:"core-incomplete",repo:l.key,path:p})}r.length===0&&o.push({kind:"no-core"});let a=e.flatMap((l,p)=>{let d=[...l.site?[{...l.site,repo:l.siteRepo}]:[],...l.otherSites];if($s(l.category)&&d.length<gt(l.category))return s.push({id:`f${n+p+1}`,reason:`${l.category} requires ${gt(l.category)} cited sites; ${d.length} supplied.`}),[];let u=d.map(m=>{let k=t.repos.find(S=>S.key===m.repo),y=k?.files?.[m.path];return y===void 0?(o.push({kind:"site-unavailable",repo:m.repo??null,path:m.path,line:m.line}),{repo:m.repo??"",path:m.path,line:m.line??0,text:"",truncated:!0}):{repo:k.key,path:m.path,line:m.line??0,...qe(y,m.line,Math.floor(ht/d.length))}}),h=j(l.title,Math.floor(Y/4)),g=l.category??"",f=j(l.cause,Y-Buffer.byteLength(h)-Buffer.byteLength(g));return[{id:`f${n+p+1}`,title:h,body:f,category:g,sites:u,truncated:f!==l.cause||h!==l.title}]});return{coreFiles:r,findings:a,diagnostics:o,skipped:s}}var ie=e=>Buffer.byteLength(JSON.stringify(e)),z=e=>JSON.stringify([e.repo,e.path]),Ao=e=>[...new Map(e.map(t=>[z(t),t])).values()],il=({repo:e,path:t})=>({repo:e,path:t});function Mo(e,t,n){if(ie(n(e))<=t)return e;let o=0,s=Buffer.byteLength(e);for(;o<s;){let r=Math.ceil((o+s)/2);ie(n(j(e,r)))<=t?o=r:s=r-1}return j(e,o)}function al(e,t){let n=[];for(let s of e)ie([...n,s].map(r=>({...r,text:""})))<=Qt?n.push(s):t.push({kind:"core-omitted",repo:s.repo,path:s.path});let o=[];for(let[s,r]of n.entries()){let i=n.slice(s+1).map(l=>({...l,text:""})),c=Mo(r.text,Qt,l=>[...o,{...r,text:l},...i]),a=r.truncated||c!==r.text;a&&t.push({kind:"core-incomplete",repo:r.repo,path:r.path}),o.push({...r,text:c,truncated:a})}return o}function cl(e,t){let n=t.repos.find(s=>s.key===e.repo)?.files??{},o=n[e.path];return o===void 0?[]:Sn(e.path,o,n,{includeMissing:!0,includeNamed:!0,rootRelative:!0}).filter(s=>s!==e.path).sort().map(s=>({repo:e.repo,path:s}))}function ll(e,t,n,o,s){let r=[...o.diagnostics],i=al(o.coreFiles,r),c=o.coreFiles.map(il),a=e.map(O=>{let v=[...O.site?[{repo:O.siteRepo??"",path:O.site.path}]:[],...O.otherSites.map(w=>({repo:w.repo??"",path:w.path}))],R=Ao([...c,...v]);return Ao([...R,...R.flatMap(w=>cl(w,t))])}),l=O=>t.repos.find(v=>v.key===O.repo)?.files?.[O.path],p=new Set(c.map(z)),d=new Set(o.findings.map(O=>O.id)),h=Ao(a.flatMap((O,v)=>d.has(`f${n+v+1}`)?O:[])).filter(O=>!p.has(z(O))).flatMap(O=>{let v=l(O);return v===void 0?(r.push({kind:"linked-unavailable",repo:O.repo,path:O.path}),[]):[{...O,line:1,text:v.split(`
|
|
9
|
-
`).map((R,w)=>`${w+1} ${R}`).join(`
|
|
10
|
-
`),truncated:!1}]}),g=[],f=ie(h)<=Vt;for(let[O,v]of h.entries()){let R=f?Vt:Math.floor((Vt-ie(g))/(h.length-O))-1;if(f||ie(v)<=R){g.push(v);continue}let w=o.findings.flatMap(C=>C.sites.filter(P=>z(P)===z(v)).map(P=>({line:P.line||null,cap:Math.floor(ht/C.sites.length)}))),_=C=>{let P=new Map;for(let A of w.length?w:[{line:null,cap:ht}])for(let L of qe(l(v),A.line,Math.min(A.cap,C)).text.split(`
|
|
11
|
-
`)){let q=/^(\d+) /.exec(L);q&&L.length>(P.get(Number(q[1]))?.length??0)&&P.set(Number(q[1]),L)}return{...v,text:[...P].sort((A,L)=>A[0]-L[0]).map(([,A])=>A).join(`
|
|
12
|
-
`),truncated:!0}},E=_(ht);if(ie(E)>R){let C=Math.max(0,Math.floor((R-ie({...v,text:"",truncated:!0}))/6/Math.max(1,w.length)));E=_(C)}ie(E)<=R&&g.push(E),r.push({kind:"whole-file-incomplete",repo:v.repo,path:v.path})}let m=new Map([...i,...g].map(O=>[z(O),O])),k=O=>{let v=l(O);return v!==void 0&&(!Number.isInteger(O.line)||O.line<1||O.line>v.split(`
|
|
13
|
-
`).length)},y=[...o.skipped??[]],S=o.findings.flatMap(O=>{let v=O.sites.map(E=>({...E,text:"",truncated:!m.has(z(E))||m.get(z(E)).truncated||k(E)})),R={...O,title:"",body:"",sites:v};if(ie(R)>Y-2)return y.push({id:O.id,reason:"The cited paths exceed the serialized claim allowance."}),[];let w=Mo(O.title,Y-2,E=>({...R,title:E})),_=Mo(O.body,Y-2,E=>({...R,title:w,body:E}));return[{...O,title:w,body:_,sites:v,truncated:O.truncated||w!==O.title||_!==O.body}]}),x=i.length>0&&i.length===o.coreFiles.length&&i.every(O=>!O.truncated),b=e.map((O,v)=>{let R=`f${n+v+1}`,w=S.find(E=>E.id===R),_=o.findings.find(E=>E.id===R)?.sites.filter(k).map(z)??[];return{fingerprint:H(O),requested:a[v],included:a[v].filter(E=>l(E)!==void 0&&m.has(z(E))),missing:a[v].filter(E=>l(E)===void 0),truncated:a[v].filter(E=>l(E)!==void 0&&(!m.has(z(E))||m.get(z(E)).truncated||_.includes(z(E)))),claimTruncated:w?.truncated??!0,coreComplete:x}}),$={coreFiles:i,citedFiles:g,findings:S,diagnostics:[...new Map(r.map(O=>[JSON.stringify(O),O])).values()],skipped:y,coverage:b};return $.serializedBytes=s.checkPayloadBytes($),$}import{createHash as pl}from"node:crypto";var Oi=e=>pl("sha256").update(JSON.stringify(e)).digest("hex"),yn=e=>[...new Set(e)],dl=e=>!e.trim()||/^[\s"'“”‘’]*none found[\s."'“”‘’]*$/i.test(e);function fl(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 ke(n,{template:"second-opinion"},"Shadow finding opinion",t.models.secondOpinion,(Qe(t.caps.secondOpinionInputBytes)+t.caps.checkOverheadTokens)*o,t.caps.secondOpinionOutputTokens*o)}function ul(e){let t=[...e.skipped??[]],n=e.coreFiles.length>0&&e.coreFiles.every(r=>!r.truncated&&r.text.trim()),o=new Map(e.assessments?.map(r=>[r.fingerprint,r]));return{findings:e.findings.filter(r=>{let i=o.get(e.fingerprints?.[r.id]??""),c=e.coverage?.filter(f=>f.fingerprint===e.fingerprints?.[r.id]),a=e.citedFiles!==void 0,l=[...e.coreFiles,...e.citedFiles??[]],p=!a||c?.length===1&&c[0].coreComplete&&!c[0].claimTruncated&&!c[0].missing.length&&!c[0].truncated.length&&c[0].requested.every(f=>c[0].included.some(m=>m.repo===f.repo&&m.path===f.path)&&l.some(m=>m.repo===f.repo&&m.path===f.path&&!m.truncated)),d=n&&!r.truncated&&r.sites.length>0&&r.sites.every(f=>!f.truncated&&(a?l.some(m=>m.repo===f.repo&&m.path===f.path&&!m.truncated&&m.text.trim()):f.text.trim()))&&p&&i?.support!=="incomplete",u=e.disputedIds?.includes(r.id)??!1,h=i===void 0||i.weak||i.confidence==="not sure",g=d?!h&&!u?"Strong, uncontested finding needs no shadow check.":null:"Second opinion needs complete fetched evidence.";return g&&t.push({id:r.id,reason:g}),g===null}),skipped:t}}function ml(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(`
|
|
14
|
-
`).map(a=>/^(\d+) (.*)$/.exec(a));if(o.some(a=>a===null))return!1;let s=o;if(s.some((a,l)=>l>0&&Number(a[1])!==Number(s[l-1][1])+1))return!1;let r=s.findIndex(a=>Number(a[1])===e.line);if(r<0)return!1;let i=s.slice(r).map(a=>a[2]).join(`
|
|
15
|
-
`),c=i.indexOf(e.quote);return c>=0&&!i.slice(0,c).includes(`
|
|
16
|
-
`)&&de(i,e.quote)===1}):!1}function hl(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(dl(s)||e.verdict==="drop"&&!e.decisive)return"The shadow verdict has no decisive evidence.";let r=e.quotes.filter(i=>i.side===o);return r.length===0||e.quotes.some(i=>!ml(i,[...n,...t.sites]))||r.some(i=>!s.includes(i.quote))?"The shadow verdict lacks exact deciding quotes at the supplied file lines.":null}function gl(e,t){return{template:"second-opinion",answerFormat:"opinion",model:t.models.secondOpinion,inputs:{checkTemplate:mr(t).check,checkInput:e},limits:{maxTokens:t.caps.secondOpinionOutputTokens,thinking:"disabled"}}}async function Fo(e,t,n,o){let{findings:s,skipped:r}=ul(t),{saved:i,...c}=t,a=Oi(c),l=Oi(Os(o)?n:{config:n,categories:bs(o)}),p={shadowOnly:!0,done:!1,cursor:0,retries:0,inputHash:a,configHash:l,verdicts:[],diagnostics:e.tools.checkDiagnosticsText(t.diagnostics),coverage:{requestedIds:t.findings.map($=>$.id),sentIds:[],answeredIds:[],missingIds:s.map($=>$.id),failedIds:[],skipped:r},disagreements:[],batches:[],estimate:null},d=null;if(!n.switches.enabled||!n.switches.secondOpinion?d="Second opinion is off.":t.purpose!=="benchmark"||t.fictional!==!0?d="Second opinion is shadow-only for fictional benchmarks; customer calls are off.":(!n.models.secondOpinion||!n.secondOpinionProvider)&&(d=n.diagnostics.join(" ")||"Second opinion has no approved provider/model configuration."),d){let $=i?structuredClone(i):p;return{...$,done:!0,verdicts:[],disagreements:[],diagnostics:[...$.diagnostics,d]}}if(i&&(i.inputHash!==a||i.configHash!==l))return{...structuredClone(i),done:!0,verdicts:[],disagreements:[],diagnostics:[...i.diagnostics,"Second opinion snapshot changed or is missing; no replacement calls were made."]};let u=i?structuredClone(i):p;if(u.done)return u;if(u.cursor>=s.length)return{...u,done:!0};if(!e.available)return{...u,done:!0,diagnostics:[...u.diagnostics,"Second opinion provider is unavailable."]};if(!bt(t.findings,yn(t.findings.map($=>$.id))))return{...u,done:!0,diagnostics:[...u.diagnostics,"Second opinion input contains duplicate ids."]};let h=s.slice(u.cursor,u.cursor+n.caps.secondOpinionBatchSize),g=h.map($=>$.id),f={...t,findings:h,diagnostics:[]};try{et(n,e.tools,o)}catch{return{...u,done:!0,diagnostics:[...u.diagnostics,"Second opinion prompt changed since its frozen snapshot."]}}let m=gl(f,n),k=0,y=!1,S=n.caps.secondOpinionInputBytes,x;try{let $=await M(e,m,o,{maxInputBytes:S,onSend(O){k=O,y=!0,u.estimate=fl(h.length,n,o),u.coverage.sentIds=yn([...u.coverage.sentIds,...g])}});x=yo.parse($).verdicts}catch($){if(!y){if($ instanceof Hr)return{...u,done:!0,diagnostics:[...u.diagnostics,"Second opinion serialized evidence exceeds its priced input budget."]};throw $}I("second-opinion",$,v=>e.rethrow(v));let O=$ instanceof Error?$.message:"Unreadable shadow response.";return u.batches.push({ids:g,attempt:u.retries+1,inputBytes:k,rawVerdicts:[],failure:O}),u.diagnostics.push(O),u.retries<n.caps.secondOpinionMaxRetries?{...u,retries:u.retries+1}:(u.coverage.failedIds=yn([...u.coverage.failedIds,...g]),{...u,done:!0})}if(u.batches.push({ids:g,attempt:u.retries+1,inputBytes:k,rawVerdicts:x}),!bt(x,g))u.diagnostics.push("Shadow verdict ids did not match this batch; every answer in the batch was rejected.");else for(let $ of x){let O=h.find(w=>w.id===$.id),v=hl($,O,[...t.coreFiles,...t.citedFiles??[]]);if(v){u.diagnostics.push(`${$.id}: ${v}`);continue}u.verdicts.push($);let R=t.originalVerdicts?.find(w=>w.id===$.id);R&&R.verdict!==$.verdict&&u.disagreements.push({id:$.id,original:R.verdict,shadow:$.verdict,reason:$.reason})}u.coverage.answeredIds=yn(u.verdicts.map($=>$.id)),u.coverage.missingIds=s.filter($=>!u.coverage.answeredIds.includes($.id)).map($=>$.id);for(let $ of g.filter(O=>!u.coverage.answeredIds.includes(O)))u.diagnostics.push(`${$}: No validated shadow verdict; the original finding is unchanged.`);let b=u.cursor+h.length;return{...u,cursor:b,retries:0,done:b>=s.length}}async function To(e,t,n,o,s){if(s.qualityConfig?.switches.secondOpinion&&s.secondOpinion&&e?.qualityAudit){let r=s.qualityConfig,i=s.secondOpinion.saved??t.qualityAudit?.shadow,c=Ue(e,e.qualityAudit.coverage,n,o,s),a={...Ke(n,o,0,xn(r),s.secondOpinion.llm.tools),purpose:s.secondOpinion.purpose,fictional:s.secondOpinion.fictional,coverage:c.coverage,originalVerdicts:t.verdicts,fingerprints:Object.fromEntries(n.map((p,d)=>[`f${d+1}`,H(p)])),assessments:c.assessments},l=await Fo(s.secondOpinion.llm,{...a,...i?{saved:i}:{}},r,s.settings);for(;;){let p=Ue(e,c.coverage,n,o,s,l);if(t={...t,qualityAudit:p},await s.onCheckpoint?.(t),l.done||s.secondOpinion.oneBatch)break;l=await Fo(s.secondOpinion.llm,{...a,saved:l},r,s.settings)}}return t}function xn(e){return e?.switches.fullContext?"whole-file":"legacy"}function kl(e,t,n,o){return e.coverage?e.coverage:t.map((s,r)=>{let i=e.findings.find(u=>u.id===`f${o+r+1}`),c=[...s.site?[{repo:s.siteRepo??"",...s.site}]:[],...s.otherSites],a=[...new Map([...e.coreFiles,...c].map(u=>[JSON.stringify([u.repo,u.path]),{repo:u.repo,path:u.path}])).values()],l=[...e.coreFiles,...i?.sites??[]],p=u=>n.repos.find(h=>h.key===u.repo)?.files?.[u.path],d=u=>l.filter(h=>h.repo===u.repo&&h.path===u.path);return{fingerprint:H(s),requested:a,included:a.filter(u=>p(u)!==void 0&&d(u).length>0),missing:a.filter(u=>p(u)===void 0),truncated:a.filter(u=>{let h=p(u);return h!==void 0&&!d(u).some(g=>!g.truncated&&g.text===h.split(`
|
|
17
|
-
`).map((f,m)=>`${m+1} ${f}`).join(`
|
|
18
|
-
`))}),claimTruncated:i?.truncated??!0,coreComplete:e.coreFiles.length>0&&e.coreFiles.every(u=>!u.truncated)}})}function Ue(e,t,n,o,s={},r){let c=[...s.qualityConfig?.switches.codeInputs?(s.codeEvidence??[]).flatMap(f=>{let m=o.repos.find(k=>k.key===f.repo)?.files??{};return se([f.input],m).skipped.map(k=>({repo:f.repo,path:k.path}))}):[],...s.qualityConfig?.switches.enabled?s.readingSkipped??[]:[]];t=t.map(f=>({...f,truncated:[...new Map([...f.truncated,...f.requested.filter(m=>c.some(k=>k.repo===m.repo&&k.path===m.path))].map(m=>[JSON.stringify([m.repo,m.path]),m])).values()]}));let a=new Set(e.acceptedIds),l=(e.verdicts??[]).map((f,m)=>({fingerprint:H(n[m]),accepted:a.has(f.id),verdict:f})),p=r?Te(n,r.verdicts,{sentIds:r.coverage.sentIds,skipped:r.coverage.skipped,recordAcceptance:!0}):void 0,d=new Set(p?.acceptedIds),u=p?.verdicts?.map((f,m)=>({fingerprint:H(n[m]),accepted:d.has(f.id),verdict:f})),h=r?.coverage.sentIds.map(f=>n[Number(f.slice(1))-1]).filter(Boolean).map(H),g={coverage:t,verdicts:l,assessments:Sr({findings:n,sources:o,coverage:t,verdicts:l,sawCode:s.sawCode,...r?{shadowVerdicts:u??[],shadowRequestedIds:h}:{}}),...r?{shadow:r}:{}};return e.qualityAudit=g,g}var At=class extends Error{sent;verdicts;constructor(t,n,o){super(t),this.sent=n,this.verdicts=o}};function wl(e,t,n){let o=t?.switches.enabled;return{template:Fe("check",n,t),answerFormat:"check",model:o?t.models.check:ys,inputs:{checkInput:e},limits:{maxTokens:o?Math.min(t.caps.checkOutputTokens,no(e.findings.length)):no(e.findings.length),effort:"medium"}}}async function Sl(e,t,n,o){if(t.findings.length===0)return[];let s=!1,r,i=n?.switches.enabled,c=wl(t,n,o);try{i&&et(n,e.tools,o);let a=await M(e,c,o,{maxInputBytes:pr(t.findings.length,xn(n)),onSend(){s=!0}});if(r=a.verdicts,!bt(r,t.findings.map(l=>l.id)))throw new Error("verdict ids did not match this batch");return a.verdicts}catch(a){throw I(c.template,a,l=>e.rethrow(l)),new At(a instanceof Error?a.message:"unreadable response",s,r)}}async function $i(e,t,n,o,s){if(o?.done)return o;let r=o?{...o,diagnostics:o.diagnostics??[],retries:o.retries??0}:{cursor:0,verdicts:[],diagnostics:[],retries:0,done:!1},i=s.qualityConfig,c=i?.switches.enabled,a=xn(i),l=c?i.caps.checkBatchSize:Re,p=o&&o.sentIds===void 0?Ke(t.slice(0,r.cursor),n,0,a,e.tools):void 0,d=o?.sentIds??p?.findings.map(k=>k.id)??[],u=o?.skipped??p?.skipped??[],h=o?.rejectedBatches??[],g=o?.qualityAudit?.coverage??[],f=k=>c?Ue(k,g,t,n,s):void 0;if(r.cursor>=t.length){let k=Te(t,r.verdicts,{sentIds:d,skipped:u,rejectedBatches:h,...c?{recordAcceptance:!0}:{}}),y=f(k);return{...r,done:!0,sentIds:d,skipped:u,result:k,...y?{qualityAudit:y}:{}}}let m;try{let k=t.slice(r.cursor,r.cursor+l);if(m=Ke(k,n,r.cursor,a,e.tools),c&&(g=[...new Map([...g,...kl(m,k,n,r.cursor)].map(v=>[v.fingerprint,v])).values()]),u=[...new Map([...u,...m.skipped??[]].map(v=>[v.id,v])).values()],!e.available&&m.findings.length)throw new Error("model unavailable");let y=[...r.verdicts,...m.findings.length?await Sl(e.withRetry(r.retries),m,i,s.settings):[]];d=[...new Set([...d,...m.findings.map(v=>v.id)])];let S=Math.min(t.length,r.cursor+l),x=[...new Set([...r.diagnostics,...e.tools.checkDiagnosticsText(m.diagnostics)])],b=S>=t.length,$=b?Te(t,y,{sentIds:d,skipped:u,rejectedBatches:h,...c?{recordAcceptance:!0}:{}}):void 0;$&&(x=[...new Set([...x,...$.diagnostics??[]])],$.diagnostics=x);let O=$?f($):c?{coverage:g,verdicts:[],assessments:[]}:void 0;return{cursor:S,verdicts:y,diagnostics:x,retries:0,done:b,sentIds:d,skipped:u,rejectedBatches:h,...$?{result:$}:{},...O?{qualityAudit:O}:{}}}catch(k){I(Fe("check",s.settings,i),k,$=>e.rethrow($));let y=k instanceof Error?k.message:"unreadable response";k instanceof At&&k.verdicts&&m&&(h=[...h,{ids:m.findings.map($=>$.id),verdicts:k.verdicts}]),k instanceof At&&k.sent?d=[...new Set([...d,...m?.findings.map($=>$.id)??[]])]:u=[...u,...m?.findings.map($=>({id:$.id,reason:`The model was not called: ${y}`}))??[]];let S=[...r.diagnostics,...e.tools.checkDiagnosticsText(m?.diagnostics??[]),y];if(e.available&&r.retries<(c?i.caps.checkMaxRetries:Ce))return{...r,sentIds:d,skipped:u,rejectedBatches:h,diagnostics:S,retries:r.retries+1,...c?{qualityAudit:{coverage:g,verdicts:[],assessments:[]}}:{}};let x=Te(t,r.verdicts,{sentIds:d,skipped:u,rejectedBatches:h,failure:cn,...c?{recordAcceptance:!0}:{}});x.diagnostics=S;let b=f(x);return{...r,sentIds:d,skipped:u,rejectedBatches:h,diagnostics:S,done:!0,result:x,...b?{qualityAudit:b}:{}}}}function yl(e){let t=e.findingCheck?.original??[];if(!e.sourceNotes?.done)return t;let n=new Map(e.sourceNotes.findings.map(o=>[H(o),o.sourceNotes]));return t.map(o=>n.has(H(o))?{...o,sourceNotes:n.get(H(o))}:o)}function vi(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=yl(e),r=Ue({...o},t.coverage??[],s,{repos:e.repos??[],fragments:[]},{qualityConfig:t.config,codeEvidence:t.codeEvidence,readingSkipped:t.readingSkipped,sawCode:tt(e)},t.shadow);return{...e,findingQuality:{...t,...r}}}function Ei(e,t,n){return!U(e,t).findingCheck||n.length===0?t:{...t,findingCheck:{original:n,state:{cursor:0,verdicts:[],diagnostics:[],retries:0,done:!1}}}}async function _i(e,t,n){let o=t.findingCheck;if(!o?.state||!o.original)return null;if(o.state.done)return{data:t,done:!0};let s=t.findingQuality?.config,r;try{let i=t.repos??[],c=X(t);r=await $i(n,o.original,{repos:i,fragments:c},o.state,{settings:e,qualityConfig:s,codeEvidence:t.findingQuality?.codeEvidence,readingSkipped:t.findingQuality?.readingSkipped,sawCode:tt(t)})}catch(i){I(Fe("check",e,s),i,p=>n.rethrow(p)),ne(i);let c=[...o.state.diagnostics??[],"unreadable source map"],a=Te(o.original,o.state.verdicts,{sentIds:o.state.sentIds??[],skipped:o.state.skipped??[],rejectedBatches:o.state.rejectedBatches,failure:cn,...s?.switches.enabled?{recordAcceptance:!0}:{}});a.diagnostics=c;let l=s?.switches.enabled?Ue(a,o.state.qualityAudit?.coverage??[],o.original,{repos:t.repos??[],fragments:[]},{qualityConfig:s,codeEvidence:t.findingQuality?.codeEvidence,readingSkipped:t.findingQuality?.readingSkipped,sawCode:tt(t)}):void 0;r={...o.state,diagnostics:c,done:!0,result:a,...l?{qualityAudit:l}:{}}}return{done:r.done,data:{...t,findingCheck:{...o,state:r},...t.findingQuality&&r.qualityAudit?{findingQuality:{...t.findingQuality,...r.qualityAudit}}:{},...r.result?{findingsRaw:r.result.kept,warnings:[...t.warnings??[],...r.result.warnings]}:{}}}}import{createHash as xl}from"node:crypto";function Ri(e,t,n){let o=[e,t.prompt.path,t.prompt.symbol??"",n,t.link?.callExcerpt??""];return xl("sha256").update(o.join("\0")).digest("hex")}var bl=200,Ol=6e3,$l=1200,vl=[3,4,5],bn=e=>vl.includes(e.score)&&e.prompt.chars>=bl,El=5;function _l(e,t){let n=e.link,o=n?t[n.callPath]:void 0;if(!n||o===void 0)return null;let s=Math.max(0,n.callLine-1-El);return o.split(`
|
|
19
|
-
`).slice(s).join(`
|
|
20
|
-
`).slice(0,$l)}function Rl(e){let{path:t,line:n,symbol:o}=e.prompt;return o?`${t}:${n} (${o})`:`${t}:${n}`}function Mt(e,t,n){let o=dn(t,n);return{candidate:t,fingerprint:Ri(e,t,o),text:o.slice(0,Ol),usage:_l(t,n),location:Rl(t)}}var Pl=.03,Ci=ke({},{template:"judge-code-prompt"},"Check possible agents in code",N.mechanical,3e3,200).usd,Lo=3,Pi=e=>e.replace(/\s+/g," ").trim(),On=e=>Math.round(e*1e6);function Il(e){return{template:"judge-code-prompt",answerFormat:"codeJudge",model:N.mechanical,inputs:e,limits:{effort:"medium",maxTokens:200}}}async function Ai(e,t,n){let o=On(n),s=await K(t,Lo,async r=>{if(!e.available)return{fingerprint:r.fingerprint,why:"unavailable"};if(o+On(Ci)>On(Pl))return{fingerprint:r.fingerprint,why:"limit"};o+=On(Ci);try{let i=await M(e,Il({location:r.location,text:r.text,usage:r.usage,at:{path:r.candidate.prompt.path,line:r.candidate.prompt.line}}));return{fingerprint:r.fingerprint,isPrompt:i.isSystemPrompt,name:i.isSystemPrompt?Pi(i.name).slice(0,40).trim():"",reason:Pi(i.reason),model:N.mechanical}}catch(i){return I("judge-code-prompt",i,c=>e.rethrow(c)),{fingerprint:r.fingerprint,why:"unavailable"}}},e);return{verdicts:s.filter(r=>"isPrompt"in r),failed:s.filter(r=>"why"in r),spentUsd:o/1e6}}function $n(e,t){return{agents:e.strong.map(n=>({candidate:n,confirmedBy:null})),possible:e.possible,rejected:[],unchecked:[],callsWithoutPrompt:e.callsWithoutPrompt,repoModelIds:e.repoModelIds,scanned:e.scanned,total:t.total,truncated:t.truncated,omitted:e.omitted??{strong:0,possible:0},notRead:e.notRead??[],notReadMore:e.notReadMore??0,...e.skippedFiles?{skippedFiles:e.skippedFiles}:{}}}function Mi(e,t){let{candidates:n,files:o,repoKey:s,stored:r,flags:i}=t,c=i.scan&&i.model&&t.hasClient,a=[],l=[],p=[],d=Math.max(0,6-(t.alreadyDue??0)),u=Math.min(d,Math.max(0,xe()-t.agentCountSoFar));for(let h of n){let g=c&&bn(h)?Mt(s,h,o):null;!g||!g.text||r.has(g.fingerprint)?p.push(h):a.length<u?a.push(g):a.length>=d?l.push({candidate:h,fingerprint:g.fingerprint}):p.push(h)}return{due:a,overCap:l,ineligible:p}}function Fi(e,t,n){let o=new Map(t.map(i=>[i.fingerprint,i])),s=new Map(n.failed.map(i=>[i.fingerprint,i.why])),r={...$n(e,n.scanInfo),possible:[]};for(let i of e.possible){let{fingerprint:c}=Mt(n.repoKey,i,n.files),a=o.get(c),l=s.get(c);a?.isPrompt?r.agents.push({candidate:i,confirmedBy:{model:a.model,name:a.name}}):a?r.rejected.push({candidate:i,reason:a.reason,model:a.model}):l?r.unchecked.push({candidate:i,why:l}):r.possible.push(i)}return r}function Ti(e,t,n,o=""){let s=new Map;if(e?.enabled&&e.grouped){let c=new Map(nr(e,t).flatMap(p=>p.keys.map(d=>[d,p.node.id]))),a=new Map,l=(p,d)=>JSON.stringify([tr(p,t),d]);for(let p of e.byRepo[t]??[]){let d=p.codeInputsJson?.step;if(!(!p.groupKey||!d))for(let u of[d.at,d.prompt].filter(h=>h!==void 0)){let h=l(u.path,u.line),g=a.get(h)??new Set;g.add(c.get(p.unitKey)),a.set(h,g)}}for(let p of n.nodes){if(p.kind!=="agent"||c.has(p.id))continue;let d=p.files.filter(g=>g.role==="system prompt"&&g.span).map(g=>({path:g.path,line:g.span.from})),u=d.length?d:p.sourceRef?[{path:p.sourceRef.path,line:p.sourceRef.line??1}]:[],h=new Set(u.flatMap(g=>[...a.get(l(g.path,g.line))??[]]));h.size&&s.set(p.id,h.size===1?[...h][0]:null)}}let r={...n,nodes:n.nodes.filter(c=>!s.has(c.id)),edges:n.edges.flatMap(c=>{let a=s.has(c.from)?s.get(c.from):c.from,l=s.has(c.to)?s.get(c.to):c.to;return a&&l&&(a!==l||c.from===c.to)?[{...c,from:a,to:l}]:[]})},i=or(e,t,r,o);return{fragment:{...r,nodes:[...r.nodes,...i.nodes],edges:[...r.edges,...i.edges]},files:i.files,addedNodes:i.nodes}}var vn=e=>e.CF_CODE_PROMPT_LOADERS!=="0";var Ni=40,En=10,Li=/(agent|prompt|llm|model|chain|fix|plan|assist|bot|ai)/i,Al=new Set(["agent","agents","prompt","prompts","system","instructions"]);function jo(e){return e.replace(/([a-z])([A-Z])/g,"$1 $2").split(/[^a-zA-Z]+/).map(t=>t.toLowerCase()).filter(t=>t.length>=4&&!Al.has(t))}function Ml(e){let t=e.filter(s=>Ms(s.rel)&&As.test(s.rel.slice(0,s.rel.lastIndexOf("/"))));if(t.length<2)return;let n=new Set(t.flatMap(s=>jo(s.rel.split("/").at(-1).replace(/\.[^.]+$/,"")))),o=s=>s.some(r=>[...n].some(i=>r.startsWith(i)||i.startsWith(r)));for(let s of e){let r=s.rel.split("/"),i=r.pop().replace(/\.[^.]+$/,"");s.promptRank=Ps(s.rel)?o(jo(i))?0:o(r.flatMap(jo))?1:2:2}}function Fl(e,t,n){let o=n?Number(St(t.rel))-Number(St(e.rel)):0;if(o)return o;let s=(e.promptRank??2)-(t.promptRank??2);if(s)return s;let r=Li.test(e.rel)?0:1,i=Li.test(t.rel)?0:1;if(r!==i)return r-i;let c=e.rel.split("/").length,a=t.rel.split("/").length;return c!==a?c-a:e.entry.size!==t.entry.size?e.entry.size-t.entry.size:e.entry.path<t.entry.path?-1:e.entry.path>t.entry.path?1:0}function ji(e,t,n="",o=!1){let s=[],r=[],i=new Map(t.map(u=>[u.path,u.size]));for(let u of t){let h=ce(e,u,{purpose:"code-scan",route:"github",root:n,listing:i});h.admitted||r.push({path:u.path,reason:h.reason}),(h.admitted||h.reason==="too-large")&&s.push({entry:u,rel:me(u.path,n),tooLarge:!h.admitted})}vn(e)&&Ml(s),s.sort((u,h)=>Fl(u,h,tn(e)));let c=[],a=[],l=0,p=0,d=!1;for(let{entry:u,tooLarge:h}of s){if(h){l+=1,o&&a.push({path:u.path,reason:"too-large"});continue}if(c.length>=J.codeScan.files||p+u.size>J.codeScan.bytes){d=!0,r.push({path:u.path,reason:"scan-limit"}),o&&a.push({path:u.path,reason:"scan-limit"});continue}c.push(u),p+=u.size}return{plan:c,total:s.length,skippedLarge:l,truncated:d,refused:r,...o?{skippedFiles:a}:{}}}function Do(e){return Is(e,"CF_IMPORT_SCOPED_SCAN")}function _n(e,t,n,o="bare"){if(!Do(e))return;let s=vr(e,t,n).filter(c=>!c.convention&&(!c.markerPath||c.scope.key===null&&o!=="agents"&&o!=="prompt")).flatMap(c=>c.paths);if(!s.length)return s;let r=Es(n),i=new Set(s);for(let c of t){let a=me(c,r);a!==null&&!a.includes("/")&&St(c)&&i.add(c)}return[...i]}function Di(e,{paths:t,root:n,scanFlag:o,marker:s}){let r={scan:!1,markerToRead:null};if(!o)return r;let i=Z(e,t,n);if(i.configPath&&s===null)return{scan:!1,markerToRead:i.configPath};let c=_n(e,t,n,s);return c?{scan:c.length>0,markerToRead:null,scanPaths:c}:wt({usage:"scan",codeAgentsFound:!1,otherDefinitions:nt(i)})==="prompt"?r:{scan:s!=="agents"&&s!=="prompt",markerToRead:null}}function He(e,t){if(t.phase==="read"){let i=Fr(t.text??"");if(t.pending.scanPaths){let c=ct(t.text??"").config,a=t.pending.markerPath.split("/").slice(0,-1).join("/"),l=new Set(c?Lr(e,c,a):[]),p=i==="bare"?t.pending.scanPaths:(t.pending.scanPathsIfExplicit??[]).filter(d=>!l.has(d));return{kind:"settled",markerPath:t.pending.markerPath,markerKind:i,scan:p.length>0,scanPaths:p}}return{kind:"settled",markerPath:t.pending.markerPath,markerKind:i,scan:t.pending.scanIfBare&&i==="bare"}}let{paths:n,root:o,scanFlag:s}=t,r=Di(e,{paths:n,root:o,scanFlag:s,marker:null});if(!s)return{kind:"off"};if(r.markerToRead){let i=Di(e,{paths:n,root:o,scanFlag:s,marker:"bare"});return{kind:"marker",markerPath:r.markerToRead,scanIfBare:i.scan,...i.scanPaths?{scanPaths:i.scanPaths,scanPathsIfExplicit:_n(e,n,o,"agents")}:{}}}return{kind:"settled",markerPath:null,markerKind:null,scan:r.scan,...r.scanPaths?{scanPaths:r.scanPaths}:{}}}function Rn(e,t,n="",o=!1,s){return Tl(e,t,n,o,s).state}function Tl(e,t,n="",o=!1,s=_n(e,t.map(r=>r.path),n)){let r=tn(e),i=vn(e),c=s&&new Set(s),{plan:a,total:l,skippedLarge:p,truncated:d,skippedFiles:u,refused:h}=ji(e,c?t.filter(g=>c.has(g.path)):t,n,o);return{state:{plan:a,cursor:0,hits:[],total:l,skippedLarge:p,truncated:d,...u?{skippedFiles:u}:{},...r?{sdk:{layouts:!0}}:{},...Gs(e)?{}:{promptFunctions:!1},...i?{}:{promptLoaders:!1}},refused:h}}function Ft(e){return e.cursor>=e.plan.length}async function Bi(e,t,n={batch:Ni,parallel:En}){let o=e.plan.slice(e.cursor,e.cursor+n.batch),s=await K(o,n.parallel,t),r=e.sdk&&{...e.sdk,openaiAgents:e.sdk.openaiAgents===!0||o.some((l,p)=>s[p]!==null&&Fs(l.path,s[p]))},i=o.map((l,p)=>s[p]===null?null:Hs(l.path,s[p],{sdk:r,promptFunctions:e.promptFunctions!==!1,promptLoaders:e.promptLoaders!==!1})),c=i.filter(l=>l!==null),a=e.skippedFiles&&[...e.skippedFiles,...o.filter((l,p)=>i[p]===null).map(({path:l})=>({path:l,reason:"unreadable"}))];return{...e,cursor:e.cursor+o.length,hits:[...e.hits,...c],...a?{skippedFiles:a}:{},...r?{sdk:r}:{}}}function qi(e){return{...Us(e.hits),...e.skippedFiles?{skippedFiles:e.skippedFiles}:{}}}function zm(e){return{scanned:e.hits.length,total:e.total,truncated:e.truncated,skippedLarge:e.skippedLarge}}function Tt(e,t,n,o){if(!ot(e))return null;let s=Er(e,[...o.sizes.keys()],o.root);return Ir(e,t.map(r=>{let i=Ie(r.prompt),c=o.modelOverrides?.includes(i);return{id:i,scope:s.ownerOf(r.prompt.path)??s.scopes[0],ownFiles:c?ye({...r,modelId:null},[]):ye(r,n),toolCall:Et(r)}}),{...o,scopes:s})}function Cn(e){return e.refused.filter(t=>t.reason!=="other-agent"&&t.reason!=="provider-transport")}var Ll=24;function Pn(e,t,n,o=new Map,s={files:{}}){let r=Nl(e,t,n,o);if(!ot(e))return r;let i=mo(o,s.replacementBytes),c=Tt(e,r.strong,t.repoModelIds,{...s,sizes:n,total:i}),a=new Set(c.flatMap(m=>m.files.map(k=>k.path))),l=Tt(e,r.window,t.repoModelIds,{...s,sizes:n}),d=[...new Set(l.flatMap(m=>m.files.map(k=>k.path)))].reduce((m,k)=>m+(a.has(k)||s.replacementBytes?.has(k)?0:o.get(k)??0),0),u={left:Math.min(i.left+d,J.candidateFetch.check),chosen:a,replacementBytes:s.replacementBytes,wholeBytesLeft:J.candidateFetch.check},h=Tt(e,r.window,t.repoModelIds,{...s,sizes:n,total:u}),g=[...c,...h],f=D(r.refused,...g.map(Cn));return{...r,paths:[...new Set(g.flatMap(m=>m.files.map(k=>k.path)))],manifests:g,refused:f,skippedFiles:D(r.skippedFiles,...g.map(Cn))}}var Ki=(e,t,n,o=new Map)=>Pn(e,t,n,o).paths;function Nl(e,t,n,o){let s=mo(o),r=[],i=[],c=[],a=[],l=[],p=[],d=0,u=m=>{p.length<10?p.push(m):d++},h=m=>{for(let k of m)r.includes(k)||r.push(k)};for(let m of t.strong){if(i.length>=xe())break;let k=n.get(m.prompt.path),y=ce(e,{path:m.prompt.path,size:k},{purpose:"pointer",route:"github"});if(y.admitted||l.push({path:m.prompt.path,reason:y.reason}),!y.admitted&&y.reason!=="too-large"){c.push(m);continue}let S=k===void 0||!y.admitted;if(S||!s.chosen.has(m.prompt.path)&&k>s.left){c.push(m),a.push({path:m.prompt.path,reason:k===void 0?"missing":S?"too-large":"total"}),u({candidate:m,path:m.prompt.path,kind:S?"prompt-too-large":"prompt-over-limit"});continue}let x=ye(m,t.repoModelIds).map(({path:$})=>$),b=st(e,{ownPaths:x},{files:{},sizes:n,total:s});l.push(...b.refused),i.push(m),h(b.paths),a.push(...b.skipped),b.skipped.forEach(({path:$})=>u({candidate:m,path:$,kind:"extra"}))}let g=J.candidateFetch.check,f=t.possible.filter(bn).slice(0,Ll).filter(m=>{let k=ye(m,t.repoModelIds).map(({path:v})=>v),y=k.filter(v=>!s.chosen.has(v)),S=n.get(m.prompt.path),x=ce(e,{path:m.prompt.path,size:S},{purpose:"pointer",route:"github"});if(x.admitted||l.push({path:m.prompt.path,reason:x.reason}),S===void 0||!x.admitted||!s.chosen.has(m.prompt.path)&&S>g)return!1;let b=new Set(s.chosen),$=st(e,{ownPaths:k},{files:{},sizes:n,total:{left:Math.min(g,s.left),chosen:s.chosen}});if(l.push(...$.refused),!$.paths.includes(m.prompt.path))return!1;let O=y.filter(v=>!b.has(v)&&$.paths.includes(v)).reduce((v,R)=>v+n.get(R),0);return g-=O,s.left-=O,h($.paths),!0});return{paths:r,strong:i,window:f,notRead:p,notReadMore:d,skipped:c,skippedFiles:a,refused:D(l)}}var jl=10,Dl=2e5;function Bl(e,t,n,o){let s=new Set(Pn(e,t,n,o).window),r=[],i=0;for(let[c,a]of t.possible.entries())if(!(c>=jl&&!s.has(a))){if(i+=JSON.stringify(a).length+1,i>Dl)break;r.push(a)}return r}var ql=1,Kl=2;function Ui(e,t,n,o=new Map){let s=xe()+10,r=t.omitted??{strong:0,possible:0},i=Pn(e,t,n,o),c=new Set(i.skipped),a=t.notRead!==void 0,l=t.strong.filter(d=>!c.has(d)),p=Bl(e,t,n,o);return{...t,strong:l.slice(0,s),possible:p,callsWithoutPrompt:t.callsWithoutPrompt.slice(0,ql),repoModelIds:t.repoModelIds.slice(0,Kl),omitted:{strong:r.strong+Math.max(0,l.length-s),possible:r.possible+Math.max(0,t.possible.length-p.length)},...!a||t.skippedFiles?{skippedFiles:D(t.skippedFiles,a?[]:i.skippedFiles)}:{},notRead:a?t.notRead:i.notRead,notReadMore:a?t.notReadMore??0:i.notReadMore}}var Hi=e=>e.includes("/")?e.slice(0,e.lastIndexOf("/")):"",Gi=e=>new Map(e.map(t=>[t.path,t.size])),Ul=(e,t,n=new Map)=>Ui(e,qi(t),Gi(t.plan),n),Wi=e=>e.strong.length===0&&e.possible.length===0;function zi(e,t){let{paths:n,entries:o,root:s,scanFlag:r,modelReader:i,recordSkips:c=!1}=t,a=He(e,{phase:"start",paths:n,root:s,scanFlag:r});if(a.kind==="marker"){let l=a.scanIfBare,p=l?Rn(e,o,s,c,a.scanPaths):void 0;return p&&a.scanPaths&&(p.markerDecision=a,p.explicitMarkerScan=Rn(e,o,s,c,a.scanPathsIfExplicit??[])),{kind:"marker",markerPath:a.markerPath,scanNeeded:l,...p?{scan:p}:{}}}return a.kind==="off"||!a.scan?{kind:"none"}:{kind:"scan",...In(e,{scan:Rn(e,o,s,c,a.scanPaths)},i)}}function Ji(e,t,n){return{scan:{...t,hits:[]},ranked:Ul(e,t,n.alreadyRead)}}async function Xi(e,t,n,o){let s=await Bi(t,n,o.size);if(!Ft(s))return{scan:s,selection:null};let{scan:r,ranked:i}=Ji(e,s,o);return{scan:r,selection:{ranked:i,paths:Ki(e,i,Gi(s.plan),o.alreadyRead),refused:s.refused??[]}}}function In(e,t,n=!1){let{scan:o}=t;return!o||!Ft(o)||t.ranked?t:{...t,...Ji(e,o,{modelReader:n,alreadyRead:new Map})}}function Qi(e,t,n,o){let s=new Map(n.map(a=>[a.path,a])),r=new Set(o),i=[],c=[];for(let a of t){let l=s.get(a);if(!l||r.has(a))continue;r.add(a);let p=ce(e,l,{purpose:"pointer",route:"github"});p.admitted?i.push(l):c.push({path:a,reason:p.reason})}return{entries:i,refused:c}}function Lt(e,t,n,o,s=1/0){let r=Qi(e,n,o,new Set(t.filter(d=>d.readBytes===void 0).map(d=>d.path))),i=s,c=r.entries.filter(d=>d.size>i?(r.refused.push({path:d.path,reason:"total"}),!1):(i-=d.size,!0)),a=new Map(c.map(d=>[d.path,d])),l=new Set(t.map(d=>d.path));return{selected:[...t.map(d=>a.get(d.path)??d),...c.filter(d=>!l.has(d.path))],refused:r.refused}}function Nt(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"secret-file":return Ns(e.path);case"claude-fallback":return"no dedicated prompt file found; used CLAUDE.md as the system prompt";case"no-prompt":return`no system prompt found (looked for ${ro}); 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 ee(e,t){switch(e.code){case"unreadable-crew":return`${t}: ${Nt(e)}`;case"duplicate-agent":case"agent-cap":return`${t}: ${Nt(e)}`;case"invalid-config":return`${t}: counterfact.json is not valid JSON; ignored`;case"pointer-owned-by-subagent":return`${t}: ${Nt(e)}`;case"pointer-missed":return null;case"secret-file":return null;case"claude-fallback":return`${t}: no system prompt file; using ${Ds}`;case"no-prompt":return e.detail==="no-conventions"?`${t}: no agent conventions found (looked for ${nn})`:`${t}: ${e.folderAgentsFound?"the root agent has ":""}no system prompt file (looked for ${ro})`;case"orphan-skill":return`${t}: ${Nt(e)}`;case"frontmatter":return le(e.path,{nested:!0})?null:`${t}: ${Nt(e)}`}}import{basename as da}from"node:path";import{posix as Jl}from"node:path";var An=e=>`${e.prompt.path}:${e.prompt.line}`,Hl=(e,t,n)=>`${e} ${e===1?t:n}`;function Mn(e,t,n,o){let s=xe(),r=`${n.repoKey}: `,i=[],{kept:c}=ue(e,t.agents),a=t.agents.length+t.omitted.strong;a>s&&i.push(Dr({kind:"scan",found:a})),c.forEach(({candidate:u,confirmedBy:h},g)=>{h&&i.push(`${r}${o[g]}: included on ${h.model}'s reading of ${An(u)} \u2014 the code alone was not conclusive`)}),n.reportSkippedFiles!==!1&&i.push(...Xt(Jt(t),t.skippedFiles?0:t.notReadMore));let l=t.agents.length===0?t.callsWithoutPrompt[0]:void 0;l&&i.push(`${r}found model calls (${l.path}:${l.line}) but no system prompt they send \u2014 point counterfact.json "prompt" at it`);let p=[...t.rejected.map(u=>`${r}not an agent prompt, per ${u.model}: ${An(u.candidate)} \u2014 ${u.reason}`),...t.unchecked.map(u=>{let h=u.why==="limit"?`the per-analysis limit of ${6} checks was reached`:"the model check was unavailable; the code alone was not conclusive";return`${r}possible agent prompt not checked: ${An(u.candidate)} \u2014 ${h}`}),...t.possible.map(u=>`${r}possible agent prompt not included: ${An(u)}${u.prompt.symbol?` (${u.prompt.symbol})`:""} \u2014 nothing in the scanned code sends it to a model`)];i.push(...p.slice(0,10));let d=Math.max(0,p.length-10)+t.omitted.possible;return d>0&&i.push(`${r}${Hl(d,"more possible agent prompt is","more possible agent prompts are")} not listed here`),t.truncated&&!t.skippedFiles?.some(({reason:u})=>u==="scan-limit")&&i.push(`${r}scanned ${t.scanned} of ${t.total} code files (the ${J.codeScan.files}-file / ${J.codeScan.bytes/1e6} MB budget); agents defined in the rest were not looked for`),i}import{basename as Yi}from"node:path";function ae(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")||"agent"}function Fn(e,t,n){let o=new Set(t);return s=>{let r=`${e}${ae(s)}`,i=r;if(o.has(i)){let c=2;for(;o.has(`${r}-${c}`);)c++;i=`${r}-${c}`,n(s,i)}return o.add(i),i}}var Gl=new Set(["system","prompt","prompts","instruction","instructions"]);function Vi(e){let t=e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[^A-Za-z0-9]+/).filter(n=>n&&!Gl.has(n.toLowerCase())).map(n=>n.toLowerCase());return t.length?t.join(" ").replace(/^./,n=>n.toUpperCase()):null}function Zi(e,t){let{prompt:n,link:o}=e;if(o?.kind==="L1"&&o.shortLabel)return o.shortLabel;let s=n.symbol?Vi(n.symbol):null;if(s)return s;if(o?.shortLabel)return o.shortLabel;let r=n.enclosing?Vi(n.enclosing):null;return r||t||`${Yi(n.path).replace(/\.[^.]*$/,"")}:${n.line}`}function ea(e,t,n){let o=t?`${ae(Yi(t))}-`:"";return Fn(o,[],(s,r)=>{n.push(`${e}: two agents are named ${s}; the second is ${r}`)})}function ta(e,t,n,o){return t.map(s=>({...s,tools:s.manifest&&ot(e)?s.tools:uo({ownPaths:n[s.unitKey]??[],toolCall:s.toolCall},o).tools}))}function Bo(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 Wl(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 zl(e,t,n){if(!t.forImport&&!t.forLocal)return n;let o=n.candidate.prompt,s=i=>i.kind==="file"?null:i.symbol??`line ${i.span.from}`,r=Wl(e.agents,o);return[...t.importCandidates??[],...e.agents].find(({candidate:i})=>i.prompt.path===o.path&&i.prompt.span.from===o.span.from&&s(i.prompt)===s(o)&&(!r||i.prompt.start===o.start))??n}function na(e,t,n){let o=[],s=ea(n.repoKey,n.root,o),r=[...Jt(t)],i=[],c=new Map(Object.entries(n.files).map(([f,m])=>[f,Buffer.byteLength(m)])),{kept:a}=ue(e,t.agents),l=ot(e),p=a.map(({candidate:f},m)=>l&&!Bo(n,m).model?f.manifest:void 0),d=l&&p.some(f=>!f)?Tt(e,a.map(({candidate:f})=>f),t.repoModelIds,{files:n.files,sizes:c,root:n.root,modelOverrides:a.flatMap(({candidate:f},m)=>Bo(n,m).model?[Ie(f.prompt)]:[])}):null,u=a.map(({candidate:f,confirmedBy:m},k)=>{let y=Bo(n,k),{prompt:S,link:x}=f,b=y.name??Zi(f,m?.name??null),$=s(b),O=[],v=`${n.repoKey}: ${b}: `,R=y.model?null:ho(f,t.repoModelIds),w=y.model?{value:y.model,from:"marker",path:null,line:null}:R?{...R,from:f.modelId?"call":"only-model-in-code"}:null;R&&!f.modelId&&O.push(`${v}model ${R.value} assumed from ${R.path}:${R.line} (the only model id in the code)`);let _=y.model?ye({...f,modelId:null},[]):ye(f,t.repoModelIds),E=p[k]??d?.[k],C=E?E.files.map(F=>_.find(Lc=>Lc.path===F.path)??{path:F.path,role:F.roles.includes("config")?"config":"code",label:null,...F.spans.length===1?{span:F.spans[0]}:{}}):_,P=_.map(({path:F})=>F),A=[...P,...n.codingGuides??[]],L=zl(t,n,{candidate:f,confirmedBy:m}),q=Et(f),Xe=L.candidate===f?q:Et(L.candidate),Wt=E?.files.map(F=>F.path),ks=E&&Wt?{paths:Wt,skipped:Cn(E),...uo({ownPaths:Wt,toolCall:Xe},Object.fromEntries(Wt.filter(F=>n.files[F]!==void 0).map(F=>[F,n.files[F]])))}:null,eo=ks??st(e,{ownPaths:P,toolCall:q},{files:n.files,sizes:c,root:n.root,guides:n.forImport?void 0:n.codingGuides}),to=ks??(n.forImport&&(A.length!==P.length||Xe!==q)?st(e,{ownPaths:P,toolCall:Xe},{files:n.files,sizes:c,root:n.root,guides:n.codingGuides}):eo),ws={paths:to.paths,skipped:to.skipped.filter(({reason:F})=>F!=="missing")};r.push(...eo.skipped.filter(({reason:F})=>F!=="missing")),n.forImport&&i.push(...ws.skipped),O.push(...eo.toolWarnings.map(F=>`${v}${F}`)),o.push(...O);let Ss=x?`${x.callPath}:${x.callLine}`:null,Fc=Ss?`, sent from ${Ss}`:"",Tc=f.shape?` Answers in the shape of ${f.shape.name}.`:"";return{unitKey:$,name:b,description:y.description??`Instructions in ${S.path} (${S.symbol??`line ${S.span.from}`})${Fc}.${Tc}`,model:w,prompt:L.candidate.prompt,instructionText:dn(f,n.files),...L.candidate.prompt.filledAtRunTime?{filledAtRunTime:!0}:{},sentFrom:L.candidate.link?`${L.candidate.link.callPath}:${L.candidate.link.callLine}`:null,confirmedBy:L.confirmedBy?.model??null,toolCall:Xe,ownFiles:C,reading:ws,tools:to.tools,warnings:O,...E?{manifest:E}:{}}}),h=new Map(a.map(({candidate:f},m)=>[Ie(f.prompt),u[m].unitKey]));for(let[f,{candidate:m}]of a.entries()){let k=(m.links??[]).flatMap(y=>{let S=h.get(y.to);return S?[{to:S,kind:y.kind}]:[]});k.length&&(u[f].links=k)}let g=D(r,i);return{agents:u,skippedFiles:g,warnings:[...o,...Mn(e,t,{...n,reportSkippedFiles:!1},u.map(({name:f})=>f)),...n.reportSkippedFiles!==!1?Xt(g,t.skippedFiles?0:t.notReadMore):[]]}}function oa(e,t,n){let o=na(e,t,{...n,modelReader:n.modelReader??!1}),s={};return{nodes:o.agents.map(i=>{let{unitKey:c,prompt:a}=i;return s[c]=i.instructionText,{id:c,label:i.name,kind:"agent",desc:i.description,meta:i.model?.value??null,sourceRef:{path:a.path,line:a.span.from},files:[...i.ownFiles],tools:i.tools.map(({tool:l})=>Ye(l.name))}}),agents:o.agents,warnings:o.warnings,instructionSpans:s,...o.skippedFiles.length?{skippedFiles:o.skippedFiles}:{}}}function Tn({repoKey:e,files:t,root:n,conventions:o,nodes:s,parentId:r,candidates:i,resolved:c}){let a=s.map(h=>({...h,files:[...h.files]})),l=[],p=[];for(let h of c.notes.filter(g=>g.code==="orphan-skill")){let g=ee(h,e);g&&p.push(g)}let d=r?a.find(h=>h.id===r):a[0];if(!d)return{nodes:a,edges:l,warnings:p};let u=Fn(n?`${d.id}-`:"",a.map(h=>h.id),(h,g)=>{p.push(`${e}: two sub-agents are named ${h}; the second is ${g}`)});for(let h of c.subagents){let{path:g}=h,f=h.files??h.skillPaths.map(y=>o.skillNames[y]?{role:"skill",path:y,label:o.skillNames[y]}:{role:"reference",path:y,label:o.skillRefNames[y]??null}),m=(h.files?[]:fe(i,[g,...f.map(y=>y.path)].map(y=>t[y]??""),o.stripRoot)).map(y=>({role:"reference",path:y,label:null})),k=a.slice(1).find(y=>y.sourceRef?.path===g);if(k){let y=new Set(k.files.map(S=>S.path));k.files.push(...[...f,...m].filter(S=>!y.has(S.path)))}else{for(let S of c.notes.filter(x=>x.code==="frontmatter"&&x.path===g)){let x=ee(S,e);x&&p.push(x)}k={id:u(h.name),label:h.name,kind:"agent",desc:h.description??`A sub-agent ${d.label} can hand work to.`,meta:h.model??null,sourceRef:{path:g,line:1},files:[{role:"system prompt",path:g,label:null},...f,...m],tools:(h.tools??[]).map(Ye)},a.push(k)}l.push({from:d.id,to:k.id,kind:"delegates",label:null,sourceRef:{path:g,line:1}})}return{nodes:a,edges:l,warnings:p}}function ra(e,{input:t,conventions:n},o){let s=t.code?.resolved;if(Do(e)){let r=Object.keys(t.files),i=He(e,{phase:"start",paths:r,root:t.root,scanFlag:!0}),c=i.kind==="marker"?He(e,{phase:"read",pending:i,text:t.files[i.markerPath]??null}):i,a=c.kind==="settled"?c.scanPaths:void 0;if(a&&a.length<r.length){let l=new Set(a),p=sa(e,{input:{...t,code:{resolved:null}},conventions:n},o),d=Xl(e,t,n,p,o),u=(s?.agents??[]).filter(x=>l.has(x.candidate.prompt.path)),h=[...d.fragment.nodes.filter(x=>x.kind==="agent").map(()=>({code:null})),...u.map(x=>({code:x}))],{kept:g,leftOut:f}=ue(e,h),m=g.flatMap(x=>x.code?[x.code]:[]),k=f.flatMap(x=>x.code?[{path:x.code.candidate.prompt.path,reason:"allowance"}]:[]);if(!m.length)return k.length?{...d,skippedFiles:[...d.skippedFiles??[],...k]}:d;let y=qo(e,t,Z(e,a,t.root),{agents:[],notes:[]},{...s,agents:m},{}),S=new Map((y.codeAgents??[]).map(x=>[x.unitKey,`code:${Ie(x.prompt)}`]));return{...d,fragment:{nodes:[...d.fragment.nodes,...y.fragment.nodes.map(x=>({...x,id:S.get(x.id)??x.id}))],edges:[...d.fragment.edges,...y.fragment.edges.map(x=>({...x,from:S.get(x.from)??x.from,to:S.get(x.to)??x.to}))],warnings:[]},warnings:[...new Set([...d.warnings,...y.warnings])],...y.codeAgents?{codeAgents:[...d.codeAgents??[],...y.codeAgents.map(x=>({...x,unitKey:S.get(x.unitKey)??x.unitKey,...x.links?{links:x.links.map(b=>({...b,to:S.get(b.to)??b.to}))}:{}}))]}:{},...y.skippedFiles?.length||k.length?{skippedFiles:[...d.skippedFiles??[],...y.skippedFiles??[],...k]}:{}}}}return sa(e,{input:t,conventions:n},o)}function Xl(e,t,n,o,s){if(!o.codeAgents?.length||!n.agentScopes)return o;let r=new Set(o.codeAgents?.map(m=>m.prompt.path)),i=new Map(n.agentScopes.map(m=>[m.key,m])),c=n.agents.filter(m=>i.has(m.key)&&i.get(m.key).folder!==(t.root??"")&&(m.prompt.kind==="none"||!r.has(m.prompt.path))),a=[...o.fragment.nodes.filter(m=>m.kind==="agent").map(()=>({agent:null})),...c.map(m=>({agent:m}))],{kept:l,leftOut:p}=ue(e,a),d=l.flatMap(m=>m.agent?[m.agent]:[]),u=p.flatMap(m=>m.agent?.files[0]?[{path:m.agent.files[0].path,reason:"allowance"}]:[]),h=new Set(d.map(m=>m.key)),g=n.agentScopes.filter(m=>h.has(m.key)),f=s(t,{...n,agents:d,agentScopes:g,notes:g.flatMap(m=>m.notes)});return{...o,fragment:{nodes:[...o.fragment.nodes,...f.fragment.nodes],edges:[...o.fragment.edges,...f.fragment.edges],warnings:[]},warnings:[...new Set([...o.warnings,...f.warnings])],...u.length?{skippedFiles:[...o.skippedFiles??[],...u]}:{}}}function sa(e,{input:t,conventions:n},o){let s=t.code,{repoKey:r,files:i,root:c}=t,a=Z(e,Object.keys(i),c),l=a.configPath?ct(i[a.configPath]):null,p=l?.config??null,d=l?.invalid===!0,u=p?Tr(p):"bare",h=[],g;if(p&&u!=="bare"){let y=Jl.dirname(a.configPath).replace(/^\.$/,""),S=jr(e,p,{repoKey:r,markerDir:y,files:i});g=S.agents.length>0;let x=S.agents.filter(O=>qr(e,O.prompt.path,i,c)),b=S.agents.filter(O=>!x.includes(O)),$=x.flatMap(O=>{let v=ee({code:"pointer-owned-by-subagent",path:O.prompt.path},r);return v?[v]:[]});if(b.length>0){let O=qo(e,t,a,n,Yl(b),{overrides:b.map(({name:v,model:R,description:w})=>({name:v,model:R,description:w})),configPath:a.configPath});return{...O,markerAgentsFound:g,markerWarnings:S.warnings,warnings:[...S.warnings,...$,...ia(e,t,a,b.length),...O.warnings]}}h=[...S.warnings,...$]}let{resolved:f}=s;if(!f||nt(a)||u!=="bare"){let y=o(t);return{fragment:y.fragment,warnings:[...new Set([...h,...y.warnings])],...g===void 0?{}:{markerAgentsFound:g}}}if(f.agents.length>0)return Vl(e,t,a,n,f,p,d);let m=wt({usage:"map",codeAgentsFound:f.agents.length>0,otherDefinitions:nt(a)}),k=a.claudePath&&m==="prompt"||a.configPath?o(t):{fragment:{nodes:[],edges:[],warnings:[]},warnings:[Ql(r,f),...n.notes.filter(y=>y.code==="orphan-skill").flatMap(y=>{let S=ee(y,r);return S?[S]:[]})]};return{fragment:k.fragment,warnings:[...k.warnings,...Mn(e,f,{repoKey:r,modelReader:t.modelReader,reportSkippedFiles:t.reportSkippedFiles},[])]}}function Ql(e,t){return`${e}: no agent found \u2014 no convention files (looked for ${nn}) and no system prompt in code (scanned ${t.scanned} code files for prompt constants, prompt files and model calls)`}function ia(e,t,n,o){let s=wt({usage:"map",codeAgentsFound:o>0,otherDefinitions:nt(n)});return n.claudePath&&s==="background"?[`${t.repoKey}: CLAUDE.md read as developer guidance, not an agent prompt, because agents were found in code`]:[]}function Vl(e,t,n,o,s,r,i){let{repoKey:c}=t,a=s.agents.length,l=qo(e,t,n,o,s,{primaryConfig:r,configPath:r?n.configPath:null}),p=i?ee({code:"invalid-config"},c):null,d=p?[p]:[];return d.push(`${c}: no agent convention files; found ${a===1?"1 agent":`${a} agents`} defined in code \u2014 add counterfact.json to name them yourself`,...ia(e,t,n,a)),{...l,warnings:[...d,...l.warnings]}}function Yl(e){return{agents:e.map(t=>({candidate:{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 qo(e,{repoKey:t,files:n,root:o,modelReader:s,codingGuides:r,reportSkippedFiles:i,forImport:c,forLocal:a,code:l},p,d,u,h){let g=oa(e,u,{repoKey:t,root:o,files:n,modelReader:s,codingGuides:r,reportSkippedFiles:i,forImport:c,forLocal:a,...c&&l?.resolved?{importCandidates:l.resolved.agents}:{},overrides:h.overrides,primaryConfig:h.primaryConfig}),f=d.agents.find(O=>O.key===null)?.subagents??[],m=new Set(f.map(O=>O.path)),k=new Set([...f.flatMap(O=>O.skillPaths),...d.notes.filter(O=>O.code==="orphan-skill").map(O=>O.path)]),{stripRoot:y}=p,S=new Set(g.nodes.flatMap(O=>O.files.map(v=>v.path))),x=p.scoped.filter(O=>!S.has(O)&&!m.has(O)&&!k.has(O)&&O!==h.configPath&&Ve(O)).sort();for(let O of g.nodes){let v=fe(x,[g.instructionSpans[O.id]??""],y).map(R=>({role:"reference",label:null,path:R}));O.files.push(...v)}h.configPath&&g.nodes[0]&&g.nodes[0].files.push({role:"config",label:null,path:h.configPath});let b=k.size?Tn({repoKey:t,files:n,root:o,conventions:p,nodes:g.nodes,candidates:x,resolved:{subagents:f,notes:d.notes}}):{nodes:g.nodes,edges:[],warnings:[]},$=a?ta(e,g.agents,Object.fromEntries(b.nodes.map(({id:O,files:v})=>[O,v.map(({path:R})=>R)])),n):g.agents;return{fragment:{nodes:b.nodes,edges:b.edges,warnings:[]},codeAgents:$,warnings:[...g.warnings,...b.warnings],...g.skippedFiles?{skippedFiles:g.skippedFiles}:{}}}import{basename as Zl}from"node:path";function aa(e){let t=e.replace(/^local:/,"");return t.slice(t.lastIndexOf("/")+1)||t}function ca(e,t,n,o={}){if(e.ranked&&e.scan){let{total:r,truncated:i}=e.scan;return{resolved:n?Fi(e.ranked,n.verdicts,{repoKey:e.key,files:e.files??{},failed:n.failed,flags:t,scanInfo:{total:r,truncated:i}}):$n(e.ranked,{total:r,truncated:i})}}let s=o.markerPolicy==="any-read"?!!e.markerPath:e.markerKind==="agents"||e.markerKind==="prompt";return t.scan&&s?{resolved:null}:void 0}function Ko(e){let t=Pe(e.root);return t?Zl(t):aa(e.repoKey)}function Ln(e,t,n=t.code&&t.code.resolved?.agents.length!==0?"":Ko(t)){let o={...t,root:Pe(t.root)},s=Br(e,{files:o.files,root:o.root,fallbackName:n,skills:!0,listedPaths:o.listedPaths,codeAgentsFound:(o.code?.resolved?.agents.length??0)>0});return s.projection==="conventions"&&delete o.code,{input:o,conventions:s}}function la(e,t,n,o,s={}){let r={repoKey:t.key,files:rr(o.projectAgents,t.key,t.files??{}),...t.root?{root:t.root}:{},code:ca(t,n,s.checks),modelReader:o.modelReader??!1};return Ln(e,r)}function jt(e,t){let n={repoKey:t.repoKey,files:t.files,...t.root?{root:t.root}:{}};return Ln(e,n)}function We(e,t){return t.input.code?ra(e,t,(n,o)=>pa(e,o?{input:n,conventions:o}:Ln(e,n,Ko(n)))):pa(e,t)}function ep(e,t,n){return n?`Instructions in ${t.filter(s=>s.role==="soul"||s.role==="knowledge").map(s=>da(s.path)).join(" and ")}.`:e?`Instructions in ${e}.`:"No system prompt file found."}function pa(e,{input:{repoKey:t,files:n,root:o},conventions:s}){if(!s.agents.length)return{fragment:{nodes:[],edges:[],warnings:[]},warnings:s.notes.flatMap(u=>{let h=ee(u,t);return h?[h]:[]})};let r=s.notes.filter(u=>u.code!=="orphan-skill"&&u.code!=="frontmatter").flatMap(u=>{let h=ee(u,t);return h?[h]:[]}),{scopes:i,ownerOf:c}=_r(e,s.scopePaths??Object.keys(n),o),a=new Map(i.map(u=>[u.folder,[]]));for(let u of Object.keys(n)){let h=c(u);h&&a.get(h.folder).push(u)}let l=s.agents.map(u=>{let h=s.agentScopes?.find(O=>O.key===u.key)??i.find(O=>O.key===u.key),g=Pe(h.folder),f=Z(e,a.get(h.folder),g),m=u.tools?.map(Ye)??Vs(e,t,n,f,r),k=u.prompt.kind==="registry",y=u.prompt.kind==="none"||k?null:u.prompt.path,S=(u.prompt.kind==="registry"?u.prompt.path:f.configPath)??y??u.files[0]?.path??u.subagents[0]?.path,x={id:u.key??(o?ae(da(o)):"agent"),label:u.name,kind:"agent",desc:u.description??ep(y,u.files,k),meta:u.model,sourceRef:{path:S,line:null},files:u.files,tools:m},b=new Set([...u.files.filter(O=>O.role!=="reference"||O.label!==null).map(O=>O.path),...u.subagents.flatMap(O=>[O.path,...O.skillPaths]),...s.notes.filter(O=>O.code==="orphan-skill").map(O=>O.path)]),$=f.scoped.filter(O=>!b.has(O)&&Ve(O)).sort();return{resolved:u,root:g,conventions:f,agent:x,candidates:$}}),p=l.map(u=>u.agent),d=[];r.push(...s.notes.filter(u=>u.code==="orphan-skill").flatMap(u=>{let h=ee(u,t);return h?[h]:[]}));for(let{resolved:u,root:h,conventions:g,agent:f,candidates:m}of l){let k=Tn({repoKey:t,files:n,root:h,conventions:g,nodes:p,parentId:f.id,candidates:m,resolved:{subagents:u.subagents,notes:s.notes.filter(y=>y.code==="frontmatter")}});p=k.nodes,d.push(...k.edges),r.push(...k.warnings)}return{fragment:{nodes:p,edges:d,warnings:[]},warnings:r}}function fa(e){let t=e.CF_CODE_AGENTS!=="0";return{scan:t,model:t&&e.CF_CODE_AGENTS_MODEL!=="0"}}async function ua(e,t){let n=t.admission.exclusions?.length?await t.listing():void 0,o=t.config?Nr(e,t.config,t.markerDir,{...t.admission,...n?{listing:new Set(n.map(l=>l.path))}:{}}):{paths:[],refused:[]},s=(l,p)=>t.refusalMode==="append"?[...l,...p]:D(l,p),r=s(t.priorRefused,o.refused),{kept:i}=ue(e,o.paths),c=t.requestedMode==="kept-and-refused"?[...o.refused.map(l=>l.path),...i]:[];if(!i.length)return{refused:r,requestedPaths:c};let a=Lt(e,t.selected,i,n??await t.listing(),J.candidateFetch.pointers);return r=s(r,a.refused),{selected:a.selected,refused:r,requestedPaths:c}}async function Nn(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 Ls)||s.reason!=="secret-content")throw s;return n.push({path:e.path,reason:s.reason}),null}}function jn(e,t){return t.codeAgents??fa(e)}function lk(e,t,n,o,s,r=!1){let i=[],c=t.filter(l=>{let p=ce(e,l,{purpose:"pointer",route:"github"});return p.admitted||i.push({path:l.path,reason:p.reason}),p.admitted}),a=zi(e,{paths:c.map(l=>l.path),entries:t,root:o,scanFlag:s.scan,modelReader:r});if(a.kind==="marker"){let{markerPath:l,scanNeeded:p,scan:d}=a,u=c.find(g=>g.path===l),h=n.some(g=>g.path===l);return{markerPath:l,refused:i,scanNeeded:p,...d?{scan:d}:{},...u&&!h?{selected:[...n,u]}:{}}}return a.kind==="scan"?{scanNeeded:!0,scan:a.scan,refused:i,...a.ranked?{ranked:a.ranked}:{}}:{}}function tp(e){return!!(e.root&&e.ranked&&Wi(e.ranked)&&e.plumbing===void 0)}var ma=e=>(e.listAll??e.list).call(e);async function np(e,t,n,o){let s=t.markerPath,r=(t.selected??[]).find(g=>g.path===s);if(!r)throw new Error(`counterfact.json ${s} is not in the selection`);let i={...t.files??{}},c=[],a=i[s]??await Nn(r,g=>n.read(g),c,t.refused);a!==null&&(i[s]=a);let l=He(e,{phase:"read",pending:t.scan?.markerDecision??{kind:"marker",markerPath:s,scanIfBare:!!t.scanNeeded},text:a}),p=l.markerKind,{scan:d,...u}=t,h={...u,files:i,markerKind:p,...c.length?{refused:D(t.refused,c)}:{}};if(l.scan&&d&&!d.markerDecision)return In(e,{...h,scan:d},o);if(p!=="bare"){let{config:g}=ct(i[s]),f=await ua(e,{config:g,markerDir:Hi(s),selected:t.selected??[],admission:n.admission??{},modelReader:o,priorRefused:t.refused??[],refusalMode:"merge",requestedMode:"none",listing:()=>ma(n)});h.refused=f.refused,f.selected&&(h.selected=f.selected)}if(l.scan&&d?.markerDecision){let f={...p==="bare"?d:d.explicitMarkerScan};delete f.markerDecision,delete f.explicitMarkerScan;let m=new Set(l.scanPaths),k=f.plan.filter(y=>m.has(y.path));return In(e,{...h,scan:{...f,plan:k,total:f.total-f.plan.length+k.length}},o)}return h}async function op(e,t,n,o){let s=[],{scan:r,selection:i}=await Xi(e,t.scan,a=>Nn(a,l=>n.read(l),s,t.refused),{modelReader:o,alreadyRead:new Map});if(!i)return{...t,scan:r,...s.length?{refused:D(t.refused,s)}:{}};let c=Lt(e,t.selected??[],i.paths,r.plan);return{...t,ranked:i.ranked,scan:r,selected:c.selected,refused:D(t.refused,s,i.refused,c.refused)}}async function sp(e,t,n){let o=t.root,s=await ma(n),r=Ws(t.files??{},s.map(p=>p.path),o),{selected:i,refused:c}=Lt(e,[],r,s),a=await K(i,En,p=>Nn(p,d=>n.read(d),c,t.refused)),l=zs(o,Object.fromEntries(i.flatMap((p,d)=>a[d]===null?[]:[[p.path,a[d]]])),e);return{...t,plumbing:l,refused:D(t.refused,c)}}async function pk(e,t,n,o=!1){return n=js(e,n),t.markerPath&&!t.markerKind?np(e,t,n,o):t.scan&&!Ft(t.scan)?op(e,t,n,o):(t.cursor??0)>=(t.selected??[]).length&&tp(t)?sp(e,t,n):null}function dk(e){return e.root&&e.plumbing?[`${e.key}: ${Js(e.root,e.plumbing)}`]:[]}function Dt(e,t,n,o=!1,s,r="",i){let c=la(e,t,n,{modelReader:o,projectAgents:s},{checks:i}),a=We(e,c),l=Ti(s,t.key,a.fragment,r),{fragment:p,warnings:d}=on(l.fragment,t.key);return{fragment:p,warnings:[...sr(t.key,a.warnings,l.addedNodes),...d],...l.addedNodes.length?{virtualFiles:l.files}:{}}}var Dn=e=>(e.ranked?.possible.length??0)>0;async function ha(e,t,n){let o=[];try{o=await t?.()??[]}catch(r){n.rethrow(r)}let s=new Set((e.repos??[]).filter(Dn).flatMap(r=>r.ranked.possible.map(i=>Mt(r.key,i,r.files??{}).fingerprint)));return o.filter(r=>s.has(r.fingerprint))}function rp(e,t,n,o){let s=new Set(n.map(i=>i.fingerprint)),r={due:[],overCap:[],ineligible:[]};for(let i of(t.repos??[]).filter(Dn)){let c=Mi(e,{candidates:i.ranked.possible,files:i.files??{},repoKey:i.key,stored:s,flags:o,modelReader:t.modelReader??!1,hasClient:!0,agentCountSoFar:i.ranked.strong.length,alreadyDue:r.due.length});r.due.push(...c.due),r.overCap.push(...c.overCap),r.ineligible.push(...c.ineligible)}return r}function Uo(e,t){let n=[...t];return e.filter(o=>{let s=n.indexOf(o);return s<0?!0:(n.splice(s,1),!1)})}function ga(e,t,n,o){let s=[...t.mapped??[]],r=[...t.warnings??[]];return(t.repos??[]).forEach((i,c)=>{if(!Dn(i))return;let a=Dt(e,i,n,t.modelReader??!1,t.projectAgents),l=Dt(e,i,n,t.modelReader??!1,t.projectAgents,"",o);s[c]=l.fragment,r=[...Uo(r,Uo(a.warnings,l.warnings)),...Uo(l.warnings,a.warnings)]}),{mapped:s,warnings:r}}async function ka(e,t,n){let o=jn(e,t);if(t.codeChecks?.done||!(t.repos??[]).some(Dn))return{data:t,pending:!1};if(!o.model){let h=await ha(t,n.load,n.llm);return{pending:!1,data:{...t,...ga(e,t,o,{verdicts:h,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 ha(t,n.load,n.llm)},r=rp(e,t,s.stored,o),i=r.due.slice(s.cursor,s.cursor+Lo),c=await Ai(n.llm,i,s.spentUsd),a=s.cursor+i.length,l=r.due.length,p=[...s.verdicts,...c.verdicts],d=[...s.failed,...c.failed];if(a<l)return{pending:!0,data:{...t,codeChecks:{done:!1,total:l,cursor:a,spentUsd:c.spentUsd,verdicts:p,failed:d,stored:s.stored}}};let u=new Set(d.map(h=>h.fingerprint));for(let{fingerprint:h}of r.overCap)u.has(h)||d.push({fingerprint:h,why:"limit"});return{pending:a>s.cursor,data:{...t,...ga(e,t,o,{verdicts:[...s.stored,...p],failed:d}),newVerdicts:p,codeChecks:{done:!0,total:l,cursor:a,spentUsd:c.spentUsd,verdicts:[],failed:[],stored:[]}}}}var pt=N.mechanical,Ho=!1,wa=200;function Go(e){return e.length>wa?`${e.slice(0,wa)}\u2026`:e}function ip(e,t,n){if(!t.length)return null;let o=[...e.site?[{repo:e.siteRepo??null,file:e.site.path,line:e.site.line,excerpt:e.excerpt}]:[],...Wo(e).map(s=>({repo:s.repo??e.siteRepo??null,file:s.path,line:s.line,excerpt:s.excerpt}))];return kn(o,n,t.flatMap(s=>s.inputs.map(r=>({repo:s.repo,unitKey:s.unitKey,input:r,files:s.files}))),t[0].agentRows)?null:"Code quotes are outside one agent's admitted source locations."}function Wo(e){return e.otherSites??[]}function ap(e,t){if(!vs(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+Wo(e).length;return gt(e.category)===2&&n<2?`${e.category} needs two quoted sites, found ${n}`:null}function Sa(e,t,n){let o={title:t.title,category:t.category??null,reason:Go(n)};e.push(o)}function cp(e,t,n){let o={title:t.title,category:t.category??null,reason:Go(n)};e.push(o)}function lp(e,t){return{template:"scope-items",answerFormat:"structureScope",model:pt,inputs:{scopeRuleId:t.scopeRuleId??"",items:e},limits:{...t.maxTokens===void 0?{}:{maxTokens:t.maxTokens}}}}async function ya(e,t,n){try{let o=await M(e,lp(t,n)),s=new Map(o.verdicts.map(r=>[r.index,r]));return o.verdicts.length!==t.length||s.size!==t.length||t.some((r,i)=>!s.has(i))?null:new Map([...s].map(([r,i])=>[r,{inScope:i.inScope,reason:Go(i.reason)}]))}catch(o){return I("scope-items",o,s=>e.rethrow(s)),null}}function pp(e){return{category:e.category??null,path:e.site?.path??"?",title:e.title,cause:e.cause,excerpt:e.excerpt??"",otherSites:Wo(e).map(t=>({path:t.path,excerpt:t.excerpt??""}))}}function dp(e,t,n=un(t)){return{template:"scope-findings",answerFormat:"scope",model:t.qualityConfig?.switches.enabled?t.qualityConfig.models.scope:pt,inputs:{codeSources:n.sources,codeFiles:n.files,items:e}}}async function fp(e,t,n,o,s){let r=[];for(let d=0;d<n.length;d+=Re)r.push(n.slice(d,d+Re));let i=e.CF_PARALLEL_SCOPE_CHECK==="0"?1:o.scopeConcurrency??4,c=await K(r,i,async(d,u)=>{let h=[],g=u+1;for(let f=0;f<=Ce;f++)try{let m=await M(t,dp(d,o,s),e),k=wr(m.verdicts,d.map(y=>y.id));return k.unknownIds.length&&h.push(`Scope check batch ${g}: ignored ${k.unknownIds.length} unknown verdict ids.`),k.duplicateIds.length&&h.push(`Scope check batch ${g}: ignored duplicate verdict ids for ${k.duplicateIds.join(", ")}.`),{verdicts:k.byId,diagnostics:h,ran:!0}}catch(m){I("scope-findings",m,k=>t.rethrow(k)),f===Ce&&h.push(`Scope check batch ${g} failed after ${f+1} attempts; its findings were kept.`)}return{verdicts:new Map,diagnostics:h,ran:!1}},t),a=new Map,l=[];for(let d of c){for(let[u,h]of d.verdicts)a.set(u,h);l.push(...d.diagnostics)}let p=n.filter(d=>!a.has(d.id)).map(d=>d.id);for(let d of p)l.push(`${d}: no verdict from the scope check; finding kept.`);return{verdicts:a,diagnostics:l,missingIds:p,ran:c.some(d=>d.ran)}}async function xa(e,t,n,o={}){let s=[],r=[],i=[],c=un(o);for(let[p,d]of n.entries()){let u=ap(d,e)??ip(d,c.scopes,o.graph);u?Sa(s,d,u):i.push({id:`f${p+1}`,finding:d})}if(i.length===0)return{kept:[],dropped:s,ran:!0,flagged:r};let a=await fp(e,t,i.map(({id:p,finding:d})=>({id:p,...pp(d)})),o,c),l=[];return i.forEach(({id:p,finding:d})=>{let u=a.verdicts.get(p);if(!u||u.inScope){l.push(d);return}Ho?Sa(s,d,u.reason):(cp(r,d,u.reason),l.push(d))}),{kept:l,dropped:s,ran:a.ran,flagged:r,...a.diagnostics.length?{diagnostics:a.diagnostics}:{},...a.missingIds.length?{missingIds:a.missingIds}:{}}}function ba(e,t,n=new Set){if(!t)return 1;let o=e.reduce((r,i)=>r+i.size,0),s=up(e,n);return mi(o,s,15e4,4)}function up(e,t=new Set){return e.filter(n=>t.has(n.path)||Ks(n.path)).reduce((n,o)=>n+o.size,0)}function Tk(e,t){return t>1?Math.min(e,6e4):0}function nw(e,t,n){let o=_e(e).multiPass,s=n?Io(n.repos??[],$e(X(n)),o,e).passes.length:ba([...t],o),r=hr(e,s,Po(s),pe);return{findings:r.findings,calls:[r.derive,G(e,"scope-findings","scope",pt,Math.ceil(r.findings/Re)*(Ce+1),pe),...r.check?[r.check]:[]]}}function zo(e,t){return U(e,t).sourceNotes&&Array.isArray(t.findingsRaw)&&t.findingsRaw.length>0?"explaining_sources":"structuring"}var ow=async(e,t)=>{t.progress.assertHeld(),t.progress.signal?.throwIfAborted();let{settings:n}=e,{state:o}=e,s=await Oe(t),r=re(t.model,s,t.progress.rethrow,t.progress.signal),i=await _i(n,o,r);if(i){let S=e.execution.secondOpinion;if(i.done&&S&&o.findingQuality?.config.switches.secondOpinion){if(!o.findingCheck?.state?.done)return{set:Q(i.data),clear:[],next:"inspecting"};let x=o.findingCheck,b=o.findingQuality,$=await To(x.state.result,x.state,x.original,{repos:o.repos??[],fragments:X(o)},{settings:n,qualityConfig:b.config,codeEvidence:b.codeEvidence,readingSkipped:b.readingSkipped,sawCode:o.sawCode??b.sawCode,secondOpinion:{...S,oneBatch:!0,llm:re(t.secondOpinionModel??null,s,t.progress.rethrow,t.progress.signal)},onCheckpoint:async v=>t.progress.checkpoint({findingCheck:{...x,state:v},...v.qualityAudit?{findingQuality:{...b,...v.qualityAudit}}:{}})}),O={...i.data,findingCheck:{...x,state:$},...$.qualityAudit?{findingQuality:{...b,...$.qualityAudit}}:{}};return{set:Q(O),clear:[],next:$.qualityAudit?.shadow?.done===!1?"inspecting":zo(n,O)}}return{set:Q(i.data),clear:[],next:i.done?zo(n,i.data):"inspecting"}}let c=await ka(n,o,{llm:r,load:t.context.loadCodeVerdicts});if(c.pending)return{set:Q(c.data),clear:[],next:"inspecting"};if(o=c.data,!t.model)throw new V("llm","llm gone mid-job");let a=X(o),l=Me(a),p=await bi(n,{data:o,graph:l,fragments:a,llm:r,checkpoint:t.progress.checkpoint,progress:t.progress,forLocal:e.execution.forLocal,parallel:zt(n,e.execution)});if(!p.done)return{set:Q(p.data),clear:[],next:"inspecting"};let d=he(p.findings,be(o),ve(p.data),n),u=await xa(n,r,d.findings,{graph:l,qualityConfig:p.data.findingQuality?.config,codeEvidence:yi(p.data,p.plan,p.readByRepo),scopeConcurrency:e.execution.scopeConcurrency}),h=u.dropped.length,g=u.flagged.length,f=[...d.warnings,...p.plan.warnings];h&&f.push(`${h} finding${h===1?"":"s"} removed as out of scope`),g&&f.push(`${g} finding${g===1?"":"s"} flagged by the scope check's model pass, but kept \u2014 that verdict is not enforced`),u.ran||f.push("the scope check did not run; findings were kept unchecked");let m=xi(p.plan);m&&f.push(m),p.shadowed.length&&f.push(`${p.shadowed.length} file${p.shadowed.length===1?" was":"s were"} not analysed because another repository has a file at the same path: ${p.shadowed.map(S=>`${S.repo}:${S.path}`).join(", ")}`);let k=Yt(n)?{sawCode:kr(p.readByRepo)}:{},y=Ei(n,{...p.data,...k,...p.data.findingQuality?{findingQuality:{...p.data.findingQuality,...k}}:{},findingsRaw:u.kept,scopeCheck:{dropped:h,ran:u.ran,flagged:g,...u.diagnostics?.length?{diagnostics:u.diagnostics}:{}},readPaths:p.readByRepo,warnings:[...p.data.warnings??[],...f]},u.kept);return{set:Q(y),clear:[],next:y.findingCheck?.state&&!y.findingCheck.state.done?"inspecting":zo(n,y)}};function Oa(e,t){return e?[e,...t]:[]}var dt=N.explain,Jo=4,Bn=4e4,$a=15,ft=4096,va=6e4;function Ea(e,t,n){let o=Oa(e.site?{...e.site,repo:e.siteRepo??"",excerpt:e.excerpt}:null,e.otherSites).map((l,p)=>({index:p,repo:l.repo??"",path:l.path,line:l.line,excerpt:j(l.excerpt??"",Y)})),s=[],r=[],i=(l,p)=>t.repos.find(d=>d.key===l)?.files?.[p],c=l=>{if(s.some(h=>h.repo===l.repo&&h.path===l.path&&h.text===l.text))return;let p=Math.max(0,Bn-Buffer.byteLength(JSON.stringify([...s,{...l,text:"",truncated:!0}]))),d=j(l.text,p);for(;d&&Buffer.byteLength(JSON.stringify(d))-2>p;)d=j(d,Math.floor(Buffer.byteLength(d)*.9));if(!d){r.push(`Source notes omitted ${l.repo}:${l.path}: context limit`);return}let u=l.truncated||d!==l.text;s.push({...l,text:d,truncated:u}),u&&r.push(`Source notes context incomplete: ${l.repo}:${l.path}`)};for(let l of o){let p=i(l.repo,l.path);if(p===void 0){r.push(`Source notes file unavailable: ${l.repo}:${l.path}`);continue}let d=l.line===null?null:l.line+l.excerpt.split(`
|
|
21
|
-
`).length-1;c({repo:l.repo,path:l.path,...qe(p,l.line,Bn,$a,d)})}let a=new Set;for(let l of o){let p=`${l.repo}
|
|
22
|
-
${l.path}`;if(a.has(p))continue;a.add(p);let d=i(l.repo,l.path);if(d===void 0)continue;let u=t.repos.find(h=>h.key===l.repo)?.files??{};for(let h of Sn(l.path,d,u))c({repo:l.repo,path:h,...qe(u[h],null,Bn)})}for(let l of Ke([],t,0,"legacy",n).coreFiles)c(l);return{category:e.category??"",title:j(e.title,Y/4),summary:j(e.summary??"",Y/4),cause:j(e.cause,Y/2),roles:ln(e.category),sites:o,files:s,diagnostics:r}}var Xo=(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 mp(e,t,n){let o=e.text.split(`
|
|
23
|
-
`),s=o.findIndex(c=>c.startsWith(`${t} `));if(s<0)return!1;let i=o.slice(s).map(c=>c.replace(/^\d+ /,"")).join(`
|
|
24
|
-
`).indexOf(n);return i>=0&&i<o[s].replace(/^\d+ /,"").length}function _a(e,t){let n=ln(t.category),o=new Set,s=e.sites.flatMap(a=>{let l=t.sites.find(d=>d.index===a.index),p=Xo(a.meaning);return!l||!Number.isInteger(a.index)||o.has(a.index)||!n.includes(a.role)||!p?[]:(o.add(a.index),[{index:a.index,role:a.role,meaning:p,keyPhrase:a.keyPhrase.trim()&&l.excerpt.includes(a.keyPhrase)?a.keyPhrase:""}])}),r=new Set,i=e.counterEvidence.flatMap(a=>{let l=Xo(a.meaning);if(!Number.isInteger(a.line)||a.line<1||!a.excerpt.trim()||!l)return[];if(!t.files.some(d=>d.repo===a.repo&&d.path===a.path&&mp(d,a.line,a.excerpt)))return[];let p=JSON.stringify([a.repo,a.path,a.line,a.excerpt]);return r.has(p)?[]:(r.add(p),[{...a,meaning:l}])}).slice(0,2),c=Xo(e.supportNote,280);if(!c)throw new Error("Source notes have no support explanation");return dr.parse({sites:s,support:e.support,supportNote:c,counterEvidence:i})}import{z as hp}from"zod";function Ra(e,t,n){let o=Buffer.byteLength(JSON.stringify(e))+t.templateBytes("explain-sources")+Buffer.byteLength(JSON.stringify(hp.toJSONSchema(ao)));if(o>va)throw new Error("Source notes input exceeds its priced limit");return ke(n,{template:"explain-sources"},"Explain sources",dt,Qe(o),ft)}function gp(e){return{template:"explain-sources",model:dt,answerFormat:"sourceNotes",inputs:{content:JSON.stringify(e)},limits:{maxTokens:ft,thinking:"disabled"}}}async function kp(e,t,n,o){let s=Ea(n,o,t.tools);Ra(s,t.tools,e);let r=await M(t,gp(s),e);return _a(r,s)}async function Ca(e,t,n,o,s){if(s?.done)return s;let r=s??{cursor:0,findings:n.map(l=>({...l,sourceNotes:null})),failures:0,done:!1},i=r.findings.slice(r.cursor,r.cursor+Jo),c=await K(i,Jo,async l=>{try{if(!t.available)throw new Error("Source notes model unavailable");return{finding:{...l,sourceNotes:await kp(e,t,l,o)},failed:!1}}catch(p){return I("explain-sources",p,d=>t.rethrow(d)),{finding:{...l,sourceNotes:null},failed:!0}}},t??void 0),a=Math.min(r.findings.length,r.cursor+i.length);return{cursor:a,findings:[...r.findings.slice(0,r.cursor),...c.map(l=>l.finding),...r.findings.slice(a)],failures:r.failures+c.filter(l=>l.failed).length,done:a>=r.findings.length}}async function Pa(e,t,n){if(!U(e,t).sourceNotes||t.sourceNotes?.done)return{data:t,done:!0};let o=[],s;try{let i=t.repos??[],c=be(t);o=he(Ze(t.findingsRaw??[]),c,ve(t),e).findings;let a=X(t);if(t.sourceNotes&&(!Array.isArray(t.sourceNotes.findings)||!Number.isInteger(t.sourceNotes.cursor)))throw new Error("Unreadable source notes checkpoint");s=await Ca(e,n,o,{repos:i,fragments:a},t.sourceNotes)}catch(i){I("explain-sources",i,u=>n.rethrow(u)),ne(i);let c=t.sourceNotes,a=c&&Array.isArray(c.findings)&&Number.isInteger(c.cursor)&&c.cursor>=0&&c.cursor<=c.findings.length,l=a?c.findings:o,p=a?c.cursor:0,d=l.length||(Array.isArray(t.findingsRaw)?t.findingsRaw.length:0);s={cursor:d,findings:l.map((u,h)=>h<p?u:{...u,sourceNotes:null}),failures:(a?c.failures:0)+d-p,done:!0}}let r=[...t.warnings??[]];return s.done&&s.failures&&r.push(`Source notes unavailable for ${s.failures} finding${s.failures===1?"":"s"}; their quotes are shown without explanations.`),{done:s.done,data:{...t,sourceNotes:s,warnings:r,...s.findings.length||Array.isArray(t.findingsRaw)&&!t.findingsRaw.length?{findingsRaw:s.findings}:{}}}}function Xw(e,t){return _e(e).sourceNotes?[G(e,"explain-sources","sourceNotes",dt,t,pe,ft)]:[]}var Qw=async(e,t)=>{t.progress.assertHeld(),t.progress.signal?.throwIfAborted();let n=await Oe(t),o=await Pa(e.settings,e.state,re(t.model,n,t.progress.rethrow,t.progress.signal));return{next:o.done?"structuring":"explaining_sources",clear:[],set:Q(o.done?vi(o.data):o.data)}};function Ia(e){let t=e.id.indexOf("#");return e.sourceRef?.repo??(t<0?null:e.id.slice(0,t))}var Bt=(e,t)=>JSON.stringify([e,t]),Aa=(e,t)=>e<t?-1:e>t?1:0;function Ma(e,t=[]){let n=e.nodes.filter(i=>i.kind==="agent");if(n.some(i=>i.files===void 0&&!i.sourceRef))return null;if(!n.length)return[];let o=new Map,s=(i,c,a)=>{let l=Bt(i,c),p=o.get(l);p||(p={repo:i,path:c,agents:new Set},o.set(l,p)),a.forEach(d=>p.agents.add(d))},r=new Map;for(let i of n){let c=Ia(i),a=Ys(i),l=Bt(c,a),p=r.get(l)??[];p.push(i.id),r.set(l,p);for(let d of i.files??[])s(c,d.path,[i.id]);i.sourceRef&&s(c,i.sourceRef.path,[i.id]),Ae(i)&&s(c,er(a,c),[i.id]);for(let d of i.sourcePaths??[])s(c,d,[i.id])}for(let i of e.nodes)i.kind==="tool"&&i.sourceRef&&s(Ia(i),i.sourceRef.path,[]);for(let i of t){let c=r.get(Bt(i.repo,i.unitKey))??[];for(let a of i.input.sources)s(i.repo,a.sourcePath,c)}return[...o.values()].map(i=>({...i,agents:[...i.agents].sort()})).sort((i,c)=>Aa(i.repo??"",c.repo??"")||Aa(i.path,c.path))}function Fa(e,t){if(e===null)return[];let n=new Set(e.map(s=>s.path)),o=new Set(e.map(s=>Bt(s.repo,s.path)));return t.flatMap((s,r)=>s.sitePath?(s.siteRepo===null?n.has(s.sitePath):o.has(Bt(s.siteRepo,s.sitePath)))?[]:[r]:[])}var ut=e=>({paths:e.slice(0,2e3),omitted:Math.max(0,e.length-2e3)});function wp(e){let t=e.map((r,i)=>({part:i+1,findings:[]})),n=Buffer.byteLength(JSON.stringify(t)),o=!1,s=0;return e.forEach((r,i)=>{let c=t[i].findings;for(let a of r){let l=Buffer.byteLength(JSON.stringify(a))+(c.length?1:0);n+l>15e4&&(o=!0),o?s+=1:(c.push(a),n+=l)}}),{rawFindings:t,rawFindingsOmitted:s}}function Ta(e){let t=new Map(Object.entries(e.readByRepo).map(([s,r])=>[s,new Set(r)])),n=new Set(Object.values(e.readByRepo).flat()),o=new Map;for(let s of e.loaded??[]){let r=s.repo===null?n.has(s.path):t.get(s.repo)?.has(s.path);for(let i of s.agents){let c=o.get(i);c||(c={loaded:new Set,notRead:new Set},o.set(i,c)),c.loaded.add(s.path),r||c.notRead.add(s.path)}}return{version:1,core:ut(e.plan?.core??[]),parts:(e.plan?.passes??[]).map(s=>({own:ut(s.own)})),skipped:ut(e.plan?.skipped??[]),readByRepo:Object.fromEntries(Object.entries(e.readByRepo).map(([s,r])=>[s,ut(r)])),agents:e.graph.nodes.filter(s=>s.kind==="agent").map(s=>({id:s.id,label:s.label??s.id,loaded:ut([...o.get(s.id)?.loaded??[]]),notRead:ut([...o.get(s.id)?.notRead??[]])})),...wp(e.passFindings)}}function La(e){return e.CF_RECALL_SIGNALS!=="0"}function Na({state:e,settings:t}){let n=e.repos??[],o=[],s=X(e).map(({repoKey:y,fragment:S},x)=>{let b=ir(S,n[x]?.files??{},y);return o.push(...b.warnings),{repoKey:y,fragment:b.fragment,files:b.nodes}}),r=Me(s),{findings:i,warnings:c}=he(Ze(e.findingsRaw??[]),be(e),ve(e),t),a=e.structuresRaw??[],l=at(t)?e.findingHeadlines:void 0,p=l?.done?l.version===2?l.rows:l.rows.map(y=>({...y,target:"finding"})):[],d=yr(i,a,p,at(t)?l?.version===2?l.diagnostics:e.findingHeadlineDiagnostics:void 0),u=d.rows,h=e.readPaths??Object.fromEntries(n.map(y=>[y.key,Object.keys(y.files??{})])),g;if(La(t)){let y=Ma(r,e.findingQuality?.codeEvidence),S=e.inspectPlan?.passes.map((x,b)=>e.passResults?.[b]?.findings??e.passFindings?.[b]??[])??e.passFindings??[];g={log:Ta({plan:e.inspectPlan??null,readByRepo:h,loaded:y,graph:r,passFindings:S.filter(x=>Array.isArray(x))}),unreachedIndexes:y===null?null:Fa(y,i.map(x=>({siteRepo:x.siteRepo??null,sitePath:x.site?.path??null})))}}let f=0,m=0;for(let y of n)for(let S of Object.values(y.files??{}))f++,m+=S.length;let k=tt(e);return{graph:r,model:N.generate,analyzedShaByRepo:Object.fromEntries(n.map(y=>[y.key,y.headSha??""])),sourceStats:{files:f,bytes:m,...k===void 0?{}:{sawCode:k}},...g?{recall:g}:{},warnings:[...new Set([...e.warnings??[],...o,...c])],findings:i,...u.length?{findingHeadlines:u}:{},...d.diagnostics?{findingHeadlineDiagnostics:d.diagnostics}:{},structures:a,loadModes:e.loadModes??[],structurePassFailed:e.structurePassFailed??!1,splitCheckRan:e.splitCheckRan??!1,splitPassFailed:e.splitPassFailed??!1,sourceFilesByRepo:Object.fromEntries(n.map(y=>[y.key,y.files??{}])),readPaths:h,rechecks:e.rechecks??[],recheckedChangeIds:e.recheckedChangeIds??[],newVerdicts:e.newVerdicts??[],...e.findingQuality?{findingQuality:e.findingQuality}:{}}}import{z as yp}from"zod";function Qo(e){let t=e.trim();return/[.!?…。!?][\u0022'\u201d\u2019)\]]*$/u.test(t)?t:`${t}.`}function ja(e,t,n){return t.kind==="structure"?`${Qo(e)} ${Qo(t.structure.title)}`:Sp(e,t,n)}function Sp(e,t,n){let o=e.trim();if(!sn(t.category))return o;let s=[...t.site?[t.site]:[],...t.otherSites],r=new Map;for(let l of s){let p=r.get(l.path)??new Set;p.add(l.repo),r.set(l.path,p)}let i=new Set,c=s.flatMap(l=>{let p=JSON.stringify([l.repo,l.path]);return i.has(p)?[]:(i.add(p),[r.get(l.path).size>1&&l.repo?`${l.repo}:${l.path}`:l.path])}),a=t.question?.trim()||n.trim();return`${Qo(o)} ${a}${c.length?` (${c.join(", ")})`:""}`}var Da=e=>e.match(/\d+(?:[.,]\d+)*/g)??[];function ze(e,t,n=0){let o={};for(let{reason:s}of t)o[s]=(o[s]??0)+1;return{version:Le,rows:[...e],rejected:[...t],diagnostics:{requested:e.length+t.length,accepted:e.length,rejected:t.length,unexpectedRows:n,byReason:o}}}function Vo(e,t){let n=$r.safeParse(e);if(!n.success)return null;let o=n.data,s=new Set(t.map(i=>i.key));for(let i of[...o.rows,...o.rejected])if(!s.delete(i.key))return null;if(s.size)return null;let r=ze(o.rows,o.rejected,o.diagnostics.unexpectedRows);return r.diagnostics.requested===t.length&&co(r.diagnostics)===co(o.diagnostics)?o:null}function qn(e,t,n){let o={version:Le,rows:[],rejected:[],diagnostics:{requested:t.length,accepted:0,rejected:0,unexpectedRows:0,byReason:{}}},s=(p,d)=>{o.rejected.push({key:p,reason:d})},r=go.safeParse(e),i=new Map,c=new Set(t.map(p=>p.key)),a=r.success?r.data.rows:[];for(let p of a)i.set(p.key,(i.get(p.key)??0)+1),c.has(p.key)||o.diagnostics.unexpectedRows++;let l=new Map(a.map(p=>[p.key,p]));for(let p of t){let d=p.key,u=l.get(d);if(!r.success){s(d,"malformed_answer");continue}if(!u){s(d,"missing_row");continue}if(i.get(d)!==1){s(d,"duplicate_key");continue}if(u.headline===null&&u.ifLeft===null){s(d,"model_declined");continue}if(!u.headline?.trim()||!u.ifLeft?.trim()){s(d,"incomplete_pair");continue}let h=lo(u);if(!h){s(d,"invalid_wording");continue}let g=new Set([p.excerpt??"",...p.otherSites.map(m=>m.excerpt)].flatMap(Da));if([h.headline,h.ifLeft].some(m=>Da(m).some(k=>!g.has(k)))){s(d,"unsupported_number");continue}if(sn(p.category)){if(!p.site||!p.excerpt?.trim()||!p.otherSites.some(m=>m.excerpt.trim())){s(d,"insufficient_question_evidence");continue}if([p.site,...p.otherSites].some(m=>!m.path.trim())||!(p.question?.trim()||n.trim())){s(d,"invalid_source");continue}}if(p.kind==="structure"&&!p.structure.title.trim()){s(d,"invalid_source");continue}let f=ja(h.headline,p,n);if(!lo({...h,headline:f})){s(d,"invalid_wording");continue}o.rows.push({key:d,headline:f,ifLeft:h.ifLeft})}return ze(o.rows,o.rejected,o.diagnostics.unexpectedRows)}var qt=48e3;function AS(e,t){return e?[ke(t,{template:"finding-headlines"},"Finding headlines",Ot,Qe(qt),$t)]:[]}async function Ba(e,t,n){let o=xr(t.evidence),s=e.tools.headlinePlan(o),r=Or(t,{prompt:e.tools.promptVersion(o.template),model:o.model,limits:o.limits,maxInputBytes:qt,request:s.identity,compositionVersion:2,resultVersion:Le}),i=a=>{let l=po(t,a.rows);if(l.rejected.length){let p=new Set(l.rejected.map(d=>d.key));a=ze(a.rows.filter(d=>!p.has(d.key)),[...a.rejected,...l.rejected],a.diagnostics.unexpectedRows)}return{version:Le,inputHash:r,done:!0,rows:l.rows,rejected:a.rejected,diagnostics:a.diagnostics}},c=a=>i(ze([],t.evidence.map(l=>({key:l.key,reason:a}))));if(n?.done)return n.version===Le&&n.inputHash===r?n:c("stale_checkpoint");if(!t.evidence.length)return i(ze([],[]));if(!e.available)return c("model_unavailable");if(s.inputBytes>qt)return c("over_input_allowance");try{let a=await M(e,o,{},{maxInputBytes:qt}),l=s.relayValidated?Vo(a,t.evidence):qn(a,t.evidence,s.fallbackQuestion??"");return l?i(l):c("incompatible_relay_result")}catch(a){return e.rethrow(a),c(a instanceof Jr||a instanceof yp.ZodError?"malformed_answer":"provider_failure")}}function YS(e){return at(e)?[G(e,"finding-headlines","findingHeadlines",Ot,1,pe,$t)]:[]}var ZS=async(e,t)=>{if(t.progress.assertHeld(),t.progress.signal?.throwIfAborted(),!at(e.settings))return{next:"persisting",set:{},clear:[]};let n=await Oe(t),o=re(t.model,n,a=>{t.progress.signal?.throwIfAborted(),t.progress.assertHeld(),t.progress.rethrow?.(a)},t.progress.signal),{findings:s,structures:r}=Na(e),i=br(s,r),c=await Ba(o,i,e.state.findingHeadlines);return t.progress.signal?.throwIfAborted(),t.progress.assertHeld(),await t.progress.checkpoint({findingHeadlines:c}),{next:"persisting",set:{findingHeadlines:c},clear:[]}};function Kn(e){let t=e,n=t.expectedOutcome?.trim();return{motivation:t.motivation??[],outcomes:t.outcomes??(n?[{improvement:n,measurement:""}]:[])}}import{createHash as Ip}from"node:crypto";import{basename as tc}from"node:path";var Yo=["split_monolith","single_source","fold_patches","extract_subagent","merge_subagents","move_rule","move_tool","reorder"],Zo=["create","shrink","edit","delete"],es=["system prompt","soul","knowledge","skill","config","tools","mcp","template","reference","log","code"],ts=["always","on_demand","never"],ns=["move","fold_into","remove_duplicate","remove_superseded"],os=["pointer","handoff","reference_update"];var ss=/^ {0,3}(`{3,}|~{3,})/,qa=/^(#{1,6})\s+\S/,rs=/^(\s*)([-*+]|\d+[.)])\s+/,is=/^\s*\|/;function B(e){let t=e.split(`
|
|
25
|
-
`);return t.length>1&&t[t.length-1]===""&&t.pop(),t}function te(e,t){let n=B(t),o=[],s=(c,a,l,p=0)=>o.push({kind:c,start:a+1,end:l+1,level:p,text:n[a]}),r=0,i=Ts(t,_t(e)?void 0:"outline");if(i){let c=i.raw.length+1;s("frontmatter",0,c),r=c+1}for(;r<n.length;){let c=n[r];if(c.trim()===""){r++;continue}let a=ss.exec(c);if(a){let u=r+1;for(;u<n.length;){let g=ss.exec(n[u]);if(g&&g[1][0]===a[1][0]&&g[1].length>=a[1].length&&!n[u].slice(g[0].length).trim())break;u++}let h=Math.min(u,n.length-1);s("fence",r,h),r=h+1;continue}let l=qa.exec(c);if(l){s("heading",r,r,l[1].length),r++;continue}if(is.test(c)){let u=r;for(;u+1<n.length&&is.test(n[u+1]);)u++;s("table",r,u),r=u+1;continue}let p=rs.exec(c);if(p){let u=p[1].length,h=r;for(;h+1<n.length&&n[h+1].trim()!==""&&!rs.test(n[h+1])&&n[h+1].length-n[h+1].trimStart().length>u;)h++;s("list_item",r,h,u),r=h+1;continue}let d=r;for(;d+1<n.length&&n[d+1].trim()!==""&&!ss.test(n[d+1])&&!qa.test(n[d+1])&&!is.test(n[d+1])&&!rs.test(n[d+1]);)d++;s("paragraph",r,d),r=d+1}return o}function xp(e){return e.kind==="frontmatter"||e.kind==="fence"||e.kind==="table"||e.kind==="list_item"}function Un(e,t,n){let o=t,s=n,r=!0;for(;r;){r=!1;for(let i of e){if(!xp(i))continue;i.start<=s&&i.end>=o&&(i.start<o||i.end>s)&&(o=Math.min(o,i.start),s=Math.max(s,i.end),r=!0)}}return{start:o,end:s,snapped:o!==t||s!==n}}var bp=e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),Ka=(e,t)=>new RegExp(`(^|[\\s\`'"(])${bp(t)}($|[\\s\`'"),.:;])`).test(e);function Op(e,t){let n=e.segments.map((i,c)=>({...i,index:c})),o=n.filter(i=>(i.disposition==="move"||i.disposition==="remove_superseded")&&t.has(i.to)),s=new Set([...o.filter(i=>i.disposition==="move").map(i=>i.path),...t]),r=n.filter(i=>(i.disposition==="remove_duplicate"||i.disposition==="fold_into")&&(s.has(i.path)||t.has(i.to)));return[...o,...r].sort((i,c)=>i.index-c.index)}var Ha=(e,t,n)=>e.find(o=>o.path===t&&n>=o.startLine&&n<=o.endLine)??null;function as(e,t,n){let o=Ha(e,t,n);return o?o.disposition==="move"||o.disposition==="remove_superseded"?o.to:o.into?as(e,o.into.path,o.into.line):o.to:t}function Je(e){return e===""||e.includes(`
|
|
26
|
-
`)||e.includes(": ")||e.endsWith(":")||/^[\s"'[\]{}#>|*&!%@`,]/.test(e)||/\s$/.test(e)?JSON.stringify(e):e}var $p=e=>{let t=/^(#{1,6})\s+(.*)$/.exec(e);return t?t[2].trim():null};function Ua(e,t,n,o,s){let r=()=>{t.lines.length&&t.lines[t.lines.length-1].trim()!==""&&(t.lines.push(""),t.prov.push("heading"))};if(n){let i=te(e,t.lines.join(`
|
|
27
|
-
`)).filter(a=>a.kind==="heading"),c=i.findIndex(a=>$p(a.text)===n.trim());if(c>=0){let a=i[c],l=t.lines.length;for(let p=c+1;p<i.length;p++)if(i[p].level<=a.level){l=i[p].start-1;break}t.lines.splice(l,0,...o),t.prov.splice(l,0,...s);return}r(),t.lines.push(`## ${n}`,""),t.prov.push("heading","heading")}else r();t.lines.push(...o),t.prov.push(...s)}function Ga(e,t){let n=new Set(t.ticked),o=Op(t.body,n),{files:s}=t.body,r=[],i=[],c=[],a=new Map,l=f=>B(t.contents[f]??""),p=f=>({lines:l(f),prov:l(f).map((m,k)=>`${f}:${k+1}`),created:!1});for(let f of[...new Set(o.map(m=>m.path))]){let m={lines:[],prov:[],created:!1};l(f).forEach((S,x)=>{Ha(o,f,x+1)||(m.lines.push(S),m.prov.push(`${f}:${x+1}`))});let k=s.find(S=>S.path===f),y=m.lines.filter(S=>S.trim()!=="").length;if(k?.action==="delete"&&y===0){c.push(f);continue}k?.action==="delete"&&r.push(`${f} keeps ${y} lines this time, so it is shrunk, not deleted`),a.set(f,m)}for(let f of o){if(f.disposition==="move")continue;let m=f.disposition==="remove_duplicate"?`duplicate_of ${f.into?.path??f.to}`:f.disposition==="remove_superseded"?`superseded_by ${f.childRef??""}`:`folded_into ${f.into?.path}:${f.into?.line}`;i.push({quote:l(f.path).slice(f.startLine-1,f.endLine).join(`
|
|
28
|
-
`),sourcePath:f.path,sourceLine:f.startLine,reason:m,ref:f.childRef??""})}for(let f of s){if(!n.has(f.path)||f.action==="delete"||f.action==="shrink")continue;let m=a.get(f.path)??(t.contents[f.path]!=null?p(f.path):{lines:[],prov:[],created:!0});if(m.created&&f.frontmatter){let k=["---",`name: ${Je(f.frontmatter.name)}`,`description: ${Je(f.frontmatter.description)}`,...f.frontmatter.tools.length?[`tools: ${rt(e,f.frontmatter.tools)}`]:[],"---"];m.lines.push(...k),m.prov.push(...k.map(()=>"frontmatter"))}for(let k of o.filter(y=>y.to===f.path&&y.disposition==="move")){let y=l(k.path).slice(k.startLine-1,k.endLine);Ua(e,m,k.heading,y,y.map((S,x)=>`${k.path}:${k.startLine+x}`))}a.set(f.path,m)}let d=new Set;for(let f of o)f.into&&(f.disposition==="fold_into"||f.disposition==="move")&&d.add(as(o,f.into.path,f.into.line));let u=t.body.reorder;u&&d.add(as(o,u.path,u.startLine));for(let f of t.childSites)d.add(f.host);for(let f of d)!a.has(f)&&t.contents[f]!=null&&a.set(f,p(f));let h=[];t.body.additions.forEach((f,m)=>{if(!a.has(f.path)&&t.contents[f.path]!=null&&a.set(f.path,p(f.path)),!a.has(f.path)){r.push(`no host found for the addition to ${f.path} (addition:${m})`);return}if(!(f.kind==="pointer"&&!t.ticked.some(k=>Ka(f.text,k)))){if(f.kind==="reference_update"){h.push(m),d.add(f.path);return}Ua(e,a.get(f.path),f.heading,[f.text],[`addition:${m}`])}});let g=[...d].filter(f=>a.has(f)).sort();return{outputs:[...a.entries()].sort(([f],[m])=>f.localeCompare(m)).map(([f,m])=>({path:f,content:`${m.lines.join(`
|
|
29
|
-
`)}
|
|
30
|
-
`,provenance:m.prov,created:m.created})),deletes:c.sort(),removals:i,modelHosts:g,pendingAdditions:h,warnings:r}}function Hn(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 Wa}from"node:path";var vp=/(read|open|cat|file)/i;function Ep(e){return e.some(t=>vp.test(`${t.name} ${t.description??""}`))}function za(e,t){if(!e)return[];let n=e.files.find(r=>r.role==="tools"),o=[];if(n)try{o=yt(t[n.path]).tools.map(r=>({name:r.name,description:r.description??null}))}catch{o=[]}let s=new Map(o.map(r=>[r.name,r]));for(let r of e.tools)r.source!=="mcp"&&(s.has(r.label)||s.set(r.label,{name:r.label}));return[...s.values()]}function cs(e){return Ep(e)?"on_demand":"never"}function Ja(e,t){return t.existing?t.existing.mode:e.role==="skill"?le(e.path,{nested:!0})?"on_demand":"never":e.role==="log"?"never":e.role!=="template"&&e.role!=="reference"?"always":t.prompt?.frontmatter?cs(t.prompt.frontmatter.tools.map(n=>({name:n}))):cs(za(t.node,t.files))}var _p=/sent from (\S+:\d+)\.?\s*$/;function Xa(e,t){let{repoKey:n,root:o,files:s,fragment:r}=t,i=[],c=new Set(r.edges.filter(g=>g.kind==="delegates").map(g=>g.to)),a=new Map;for(let g of r.nodes)for(let f of g.files)a.set(f.path,[...a.get(f.path)??[],{nodeId:g.id,label:g.label,role:f.role,skill:f.label,inCode:f.span!==void 0}]);let l=g=>(r.nodes.find(f=>f.id===g)?.files??[]).filter(f=>["system prompt","soul","knowledge","skill"].includes(f.role)).map(f=>f.path),p=(g,f,m=()=>!0)=>{for(let k of l(g)){let S=(s[k]??"").split(`
|
|
31
|
-
`).findIndex(x=>x.includes(f)&&m(x));if(S>=0)return`${k}:${S+1}`}return null},d=g=>me(g,o)??g,u=new Map,h=[];for(let g of Object.keys(s).filter(f=>en(f,o)).sort()){let f=a.get(g)?.[0]??null,m=f?`${n}#${f.nodeId}`:null,k={repo:n,path:g,unit:m,role:f?.role??null};if(!f){h.push({...k,mode:"never",via:"not a convention, not referenced",evidence:""});continue}switch(f.role){case"system prompt":{let y="convention";if(c.has(f.nodeId))y="sub-agent file; its parent sees only the frontmatter description";else if(f.inCode){let S=r.nodes.find(b=>b.id===f.nodeId)?.desc??"",x=_p.exec(S)?.[1];y=x?`system prompt in code, sent from ${x}`:"system prompt in code"}h.push({...k,mode:"always",via:y,evidence:""});break}case"code":h.push({...k,mode:"never",via:"code that sends the prompt; the model never reads it",evidence:""});break;case"soul":case"knowledge":{let y=Wa(g),S=p(f.nodeId,y,x=>/\b(not|never)\b.*\b(loaded|read)\b/i.test(x));h.push(S?{...k,mode:"never",via:"a line in the files says it is not loaded",evidence:S}:{...k,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{f.role==="tools"?yt(s[g]):JSON.parse(s[g])}catch{y=!1}h.push(y?{...k,mode:"always",via:f.role==="config"?"config":"tool definitions",evidence:""}:{...k,mode:"unknown",via:"unreadable config",evidence:""});break}case"skill":{let y=it(e,Wa(g),s[g]),S=y.description??null;i.push(...(y.warnings??[]).map(x=>`${n}: ${g}: ${x}`)),h.push({...k,mode:"on_demand",via:S?`skill trigger \u2014 description: ${S}`:"skill trigger",evidence:"",evidenceKind:"skill-frontmatter"});break}default:{let y=p(f.nodeId,d(g))??(f.skill?`skill ${f.skill}`:""),S=r.nodes.find(x=>x.id===f.nodeId)??null;if(cs(za(S,s))==="on_demand")h.push({...k,mode:"on_demand",via:"named by a file the unit loads",evidence:y});else{let x=u.get(f.nodeId)??{label:f.label,paths:[]};x.paths.push(g),u.set(f.nodeId,x),h.push({...k,mode:"never",via:"pointer, but no file-reading tool",evidence:y})}}}}for(let{label:g,paths:f}of u.values()){let m=f.length;i.push(`${n}: ${m} reference file${m===1?"":"s"} can only be reached by a pointer, and ${g} has no file-reading tool, so it can't open them; for example: ${f.slice(0,5).join(", ")}`)}return{entries:h,warnings:i}}function Gn(e,t,n){return e.find(o=>o.repo===t&&o.path===n)??null}var Rp="<!-- counterfact: proposed file -->";function mt(e,t){return e.startsWith(`${t}#`)?e.slice(t.length+1):null}function Qa(e,t,n){if(_t(e))return Mr(t,n);if(!t.startsWith(`---
|
|
32
|
-
`)){let a=n([]);return a.length?`---
|
|
33
|
-
tools: ${a.join(", ")}
|
|
34
|
-
---
|
|
35
|
-
${t}`:t}let o=t.indexOf(`
|
|
36
|
-
---`,3),s=t.slice(4,o).split(`
|
|
37
|
-
`),r=s.findIndex(a=>/^tools\s*:/i.test(a)),i=r>=0?s[r].replace(/^tools\s*:\s*/i,"").replace(/^\[|\]$/g,"").split(",").map(a=>a.trim()).filter(Boolean):[],c=n(i);return r>=0?c.length?s[r]=`tools: ${c.join(", ")}`:s.splice(r,1):c.length&&s.push(`tools: ${c.join(", ")}`),`---
|
|
38
|
-
${s.join(`
|
|
39
|
-
`)}${t.slice(o)}`}function Va(e,t){let n=JSON.parse(e);return Array.isArray(n)?`${JSON.stringify(t(n),null,2)}
|
|
40
|
-
`:`${JSON.stringify({...n,tools:t(n.tools??[])},null,2)}
|
|
41
|
-
`}function Cp(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 Za(e,t,n,o,s,r=[]){let i={...t};for(let c of n.files)if(c.action==="delete"&&delete i[c.path],c.action==="create"){let a=c.frontmatter?`---
|
|
42
|
-
name: ${Je(c.frontmatter.name)}
|
|
43
|
-
description: ${Je(c.frontmatter.description)}
|
|
44
|
-
${c.frontmatter.tools.length?`tools: ${rt(e,c.frontmatter.tools)}
|
|
45
|
-
`:""}---
|
|
46
|
-
`:"";i[c.path]=`${a}${Rp}
|
|
47
|
-
`}for(let c of n.additions)c.kind==="reference_update"||i[c.path]==null||(i[c.path]=`${i[c.path].replace(/\n?$/,`
|
|
48
|
-
`)}${c.text}
|
|
49
|
-
`);for(let c of n.toolMoves){let a=Pp(e,i,{tool:c.tool,fromPath:c.fromPath??Ut(o,n,c.fromUnit,s),toPath:c.toPath??Ut(o,n,c.toUnit,s)});a&&r.push(a)}return i}function Ut(e,t,n,o){let s=mt(n,o);return s?Cp(e,s):t.files.find(r=>r.unit===n&&r.role==="system prompt")?.path??null}function Pp(e,t,n){let{tool:o,fromPath:s,toPath:r}=n;if(_t(e)){for(let i of[s,r])if(i&&t[i]!=null&&!i.endsWith(".json")&&Ar(t[i]).error)return`${i}: tools could not be read; moving ${o} was skipped.`}return s&&t[s]!=null&&(t[s]=s.endsWith(".json")?Va(t[s],i=>i.filter(c=>c.name!==o)):Qa(e,t[s],i=>i.filter(c=>c!==o))),r&&t[r]!=null&&(t[r]=r.endsWith(".json")?Va(t[r],i=>i.some(c=>c.name===o)?i:[...i,{...n.object??{},name:o}]):Qa(e,t[r],i=>i.includes(o)?i:[...i,o])),null}function ec(e,t){let n=We(e,jt(e,t));return on(n.fragment,t.repoKey).fragment}var Ya=e=>e.files.map(t=>t.path).sort().join(`
|
|
50
|
-
`),Kt=(e,t)=>e.nodes.find(n=>n.files.some(o=>o.path===t))??null;function Wn(e,t,n,o){let s=m=>`${o}#${m}`,r=new Map(e.nodes.map(m=>[m.id,m])),i=new Map(t.nodes.map(m=>[m.id,m])),c=[];for(let[m,k]of i)r.has(m)?Ya(r.get(m))!==Ya(k)&&c.push({id:s(m),change:"edited",label:k.label}):c.push({id:s(m),change:"added",label:k.label});for(let[m,k]of r)i.has(m)||c.push({id:s(m),change:"removed",label:k.label});let a=m=>`${m.from}>${m.to}>${m.kind}`,l=new Map(e.edges.map(m=>[a(m),m])),p=new Map(t.edges.map(m=>[a(m),m])),d=[...[...p].filter(([m])=>!l.has(m)).map(([,m])=>({from:s(m.from),to:s(m.to),kind:m.kind,change:"added",detail:null})),...[...l].filter(([m])=>!p.has(m)).map(([,m])=>({from:s(m.from),to:s(m.to),kind:m.kind,change:"removed",detail:null}))],u=(m,k)=>{let y=k?Kt(t,m)??Kt(e,m):Kt(e,m)??Kt(t,m);return y?s(y.id):""},h=n.files.map(m=>{let k=n.segments.filter($=>$.disposition==="move"&&$.to===m.path&&$.path!==m.path),y=n.segments.filter($=>$.path===m.path),S=u(m.path,m.action!=="delete"),x,b={};if(m.action==="delete")x="removed";else if(m.action==="create"){let $=[...new Set(k.map(R=>R.path))],O=$.length===1&&n.files.some(R=>R.path===$[0]&&R.action==="delete"),v=$.length===1?u($[0],!1):"";O&&v&&v!==S?(x="moved",b={fromNode:v,fromPath:$[0]}):x="added"}else k.length?x="grown":n.reorder?.path===m.path?x="reordered":y.length||m.action==="shrink"?x="shrunk":x="grown";return{path:m.path,role:m.role,node:S,change:x,...b,segments:k.length}});if(n.split){let m=new Set([...n.segments.map(k=>k.path),...(n.additions??[]).map(k=>k.path)]);for(let k of m){if(h.some(S=>S.path===k))continue;let y=Kt(e,k);h.push({path:k,role:y.files.find(S=>S.path===k).role,node:s(y.id),change:n.segments.some(S=>S.path===k)?"shrunk":"grown",segments:0})}}n.reorder&&!h.some(m=>m.path===n.reorder.path)&&h.push({path:n.reorder.path,role:"system prompt",node:u(n.reorder.path,!0),change:"reordered",segments:0});let g=m=>{if(mt(m,o))return m;let y=n.files.find(S=>S.unit===m);return y?u(y.path,!0):m},f=n.toolMoves.map(m=>({label:m.tool,fromNode:g(m.fromUnit),toNode:g(m.toUnit)}));return{nodes:c,edges:d,files:h,tools:f}}var nc=["ordering","reliability","coverage","cost","safety","correctness"],Ht=["low","medium","high","critical"];function ls(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 Ee=(e,t)=>e.includes(t);function Ap(e){if(!Ee(Yo,e.subKind))return`sub-kind "${e.subKind}" is not one of ${Yo.join(", ")}`;if(!Ee(nc,e.kind))return`impact "${e.kind}" is not one of ${nc.join(", ")}`;if(e.reorders.length>1)return"more than one reorder";let t=[];for(let i of e.files){if(!Ee(Zo,i.action))return`${i.path}: action "${i.action}" is not one of ${Zo.join(", ")}`;if(!Ee(es,i.role))return`${i.path}: role "${i.role}" is not one of ${es.join(", ")}`;if(!Ee(ts,i.loadMode))return`${i.path}: load mode "${i.loadMode}" is not one of ${ts.join(", ")}`;let c=i.fmName||i.fmDescription||i.fmTools.length?{name:i.fmName,description:i.fmDescription,tools:i.fmTools}:null;t.push({path:i.path.trim(),action:i.action,role:i.role,unit:i.unit,loadMode:i.loadMode,loadVia:i.loadVia||null,purpose:i.purpose,frontmatter:c})}let n=[];for(let i of e.segments){if(!Ee(ns,i.disposition))return`${i.path}:${i.startLine}-${i.endLine}: disposition "${i.disposition}" is not one of ${ns.join(", ")}`;let c=i.intoPath?{path:i.intoPath.trim(),line:i.intoLine}:null,a=i.disposition==="remove_duplicate"||i.disposition==="fold_into",l=i.to.trim()||(a&&c?c.path:"");n.push({path:i.path.trim(),startLine:i.startLine,endLine:i.endLine,to:l,disposition:i.disposition,into:c,childRef:i.childRef||null,heading:i.heading||null,reason:i.reason})}let o=[];for(let i of e.additions){if(!Ee(os,i.kind))return`addition to ${i.path}: kind "${i.kind}" is not one of ${os.join(", ")}`;o.push({path:i.path.trim(),text:i.text,kind:i.kind,heading:i.heading||null})}let s=e.reorders[0],r=Ee(Ht,e.severity)?e.severity:"medium";return{body:{...Kn(e),subKind:e.subKind,kind:e.kind,severity:r,title:e.title.trim(),cause:e.cause,evidence:e.evidence.map(i=>({path:i.path.trim(),line:i.line,excerpt:i.excerpt})),files:t,segments:n,additions:o,reorder:s?{path:s.path.trim(),startLine:s.startLine,endLine:s.endLine,steps:s.order.map((i,c)=>({from:i,reason:s.reasons[c]||null}))}:null,toolMoves:e.toolMoves.map(i=>({...i,fromPath:null,toPath:null}))},children:e.children.map(i=>({ref:i.ref.trim(),how:i.how}))}}function Mp(e,t){let n=[],o=[],s=[],r=(i,c)=>{n.push(`proposal "${i}": ${c} \u2014 dropped`),o.push({title:i,reason:c})};for(let i of t.raw){let c=Ap(i);if(typeof c=="string"){r(i.title,c);continue}let{body:a}=c,l=c.children,p=`proposal "${a.title}"`;if(a.files.length>wo){r(a.title,`${a.files.length} files (cap ${wo})`);continue}if(a.segments.length>So){r(a.title,`${a.segments.length} segments (cap ${So})`);continue}let d=ls(a),u=new Set(a.files.filter(w=>w.action==="create").map(w=>w.path)),h=d.filter(w=>!u.has(w)),g=h.length>0?t.repos.find(w=>h.every(_=>w.files[_]!=null)):void 0;if(!g){r(a.title,`cites ${h[0]??d[0]??"no source file"}, which the analysis never read`);continue}let f=w=>g.files[w]!=null,k=[...a.files.map(w=>w.path),...a.segments.map(w=>w.path),...a.additions.map(w=>w.path),...a.reorder?[a.reorder.path]:[]].map(w=>Zt(w)?`${w} is code \u2014 the structural pass moves instructions only`:en(w,g.root)?u.has(w)?f(w)?`creates ${w}, which exists`:null:f(w)?null:`${w} is not a file the analysis read`:`${w} is outside the agent's root ${g.root}`).find(Boolean);if(k){r(a.title,k);continue}let y=[];for(let w of a.evidence.slice(0,4)){let _=f(w.path)?de(g.files[w.path],w.excerpt):null;_==null?n.push(`${p}: evidence at ${w.path} is not a quote from the file \u2014 dropped`):y.push({...w,line:_})}a.evidence.length>4&&n.push(`${p}: ${a.evidence.length} evidence sites, kept the first 4`),a.evidence=y;let S=new Set(a.files.filter(w=>w.action!=="delete").map(w=>w.path)),x=null;for(let w of a.segments){let _=g.files[w.path];if(_==null){x=`segment ${w.path}:${w.startLine}-${w.endLine} is in a file that does not exist yet`;break}let E=B(_).length;if(w.startLine<1||w.endLine<w.startLine||w.endLine>E){x=`segment ${w.path}:${w.startLine}-${w.endLine} is outside the file`;break}let C=Un(te(e,_),w.startLine,w.endLine);if(C.snapped&&(n.push(`${p}: segment ${w.path}:${w.startLine}-${w.endLine} cut an atomic block; widened to ${C.start}-${C.end}`),w.startLine=C.start,w.endLine=C.end),(w.disposition==="move"||w.disposition==="remove_superseded")&&!S.has(w.to)&&w.to!==w.path){x=`segment ${w.path}:${w.startLine}-${w.endLine} sends lines to ${w.to}, which is not a destination`;break}if((w.disposition==="fold_into"||w.disposition==="remove_duplicate")&&!w.into){x=`segment ${w.path}:${w.startLine}-${w.endLine} is ${w.disposition} with no target`;break}if(w.into&&!f(w.into.path)&&!u.has(w.into.path)){x=`segment ${w.path}:${w.startLine}-${w.endLine} folds into ${w.into.path}, which does not exist`;break}if(w.disposition==="move"&&w.into&&a.files.find(A=>A.path===w.to)?.role!=="log"){x=`segment ${w.path}:${w.startLine}-${w.endLine} names a fold target, which only a move into a log may do`;break}if(w.disposition==="remove_superseded"&&!(w.childRef&&l.some(A=>A.ref===w.childRef))){x=`segment ${w.path}:${w.startLine}-${w.endLine} is remove_superseded but names no child`;break}}if(!x){let w=[...a.segments].sort((_,E)=>_.path.localeCompare(E.path)||_.startLine-E.startLine);for(let _=1;_<w.length;_++)if(w[_].path===w[_-1].path&&w[_].startLine<=w[_-1].endLine){x=`overlapping segments in ${w[_].path}`;break}}if(!x){let w=a.segments.filter(E=>E.disposition!=="move"),_=a.segments.find(E=>E.into&&w.some(C=>C.path===E.into.path&&E.into.line>=C.startLine&&E.into.line<=C.endLine));_&&(x=`segment ${_.path}:${_.startLine}-${_.endLine} folds into a line this proposal removes`)}if(x){r(a.title,x);continue}let b=new Set,$=Hn(a),O=(w,_)=>_!=null&&a.segments.some(E=>E.path===w&&_>=E.startLine&&_<=E.endLine);if(l=l.filter(w=>{if(b.has(w.ref))return!1;b.add(w.ref);let _=/^f(\d+)$/.exec(w.ref),E=_?t.findings[Number(_[1])-1]:void 0;if(!E)return n.push(`${p}: child ${w.ref} is not a finding of this analysis \u2014 link dropped`),!1;let C=E.siteRepo===g.key;return C&&E.site&&O(E.site.path,E.site.line)||C&&E.otherSites.some(A=>O(A.path,A.line))||$.some(A=>w.how.includes(A))?!0:(n.push(`${p}: child ${w.ref} ("${E.title}") is not in a segment and its how names no destination \u2014 link dropped`),!1)}),l.length===0&&a.evidence.length<2){r(a.title,a.evidence.length===0?"no evidence quote is in the files":"no children and fewer than two evidence sites");continue}if(a.reorder){let w=a.reorder,_=te(e,g.files[w.path]??"").filter(C=>C.kind==="list_item"&&C.level===0&&/^\s*\d+[.)]/.test(C.text)&&C.start>=w.startLine&&C.end<=w.endLine),E=w.steps.map(C=>C.from).sort((C,P)=>C-P);if(E.length!==_.length||E.some((C,P)=>C!==P+1)){r(a.title,`reorder of ${w.path}:${w.startLine}-${w.endLine} is not a permutation of its ${_.length} steps`);continue}}let v=s.find(w=>ls(w.body).some(_=>d.includes(_)));if(v){r(a.title,`shares ${ls(v.body).find(w=>d.includes(w))} with "${v.body.title}"`);continue}let R=l.map(w=>t.findings[Number(w.ref.slice(1))-1].severity);a.severity=R.length?R.reduce((w,_)=>Ht.indexOf(_)>Ht.indexOf(w)?_:w):Ht[Math.min(Ht.indexOf(a.severity),1)],s.push({repo:g.key,body:a,children:l})}for(let i of s.splice(Rt))r(i.body.title,`over the cap of ${Rt} proposals`);return{kept:s,warnings:n,dropped:o}}var Fp=/\b(never|always|must|don't|do not)\b/i,Tp=/^\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 Lp(e){return Fp.test(e)||Tp.test(e)}function ps(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 Np(e,t){let n=_s("",t),o=me(e.path,t)??e.path,s=o.startsWith(".claude/")?".claude/":"",r=ae(e.frontmatter?.name||tc(o).replace(/\.md$/i,""));switch(e.role){case"skill":return`${n}${s}skills/${r}/SKILL.md`;case"system prompt":return`${n}${s}agents/${r}.md`;case"template":return`${n}templates/${tc(o)}`;default:return`${n}${o}, with a pointer from a file the agent always loads`}}function oc(e,t){let n=Mp(e,t),o=[...n.warnings],s=[...n.dropped],r=[],i=(c,a)=>{o.push(`proposal "${c}": ${a} \u2014 dropped`),s.push({title:c,reason:a})};for(let c of n.kept){let{body:a,repo:l}=c,p=t.repos.find(b=>b.key===l),d=Pe(p.root),u=t.fragments.find(b=>b.repoKey===l)?.fragment;if(!u){i(a.title,`no architecture graph for ${l}`);continue}let h=b=>`${l}#${b}`,g=b=>u.nodes.find($=>$.id===mt(b,l))??null;for(let b of a.toolMoves)b.fromPath=Ut(u,a,b.fromUnit,l),b.toPath=Ut(u,a,b.toUnit,l);let f=a.toolMoves.find(b=>!b.fromPath||!b.toPath);if(f){i(a.title,`cannot find the tool list of ${f.fromPath?f.toUnit:f.fromUnit}`);continue}let m=ec(e,{repoKey:l,root:d,files:Za(e,p.files,a,u,l,o)}),k=null;for(let b of a.files){if(b.action==="delete"||b.loadMode==="never"||b.action!=="create"&&b.action!=="edit")continue;let $=m.nodes.find(v=>v.files.some(R=>R.path===b.path));if(!$){k=`The agent would not load ${b.path} \u2014 put it at ${Np(b,d)}.`;break}let O=mt(b.unit,l);if(O&&$.id!==O){k=`${b.path} would attach to ${h($.id)}, not ${b.unit}`;break}if(!O&&u.nodes.some(v=>v.id===$.id)&&b.role==="system prompt"){k=`${b.path} would not be a new sub-agent`;break}if(!O&&b.role==="system prompt"&&!m.edges.some(v=>v.kind==="delegates"&&v.to===$.id)){k=`${b.path} would not be a sub-agent anyone delegates to`;break}}if(!k)for(let b of a.toolMoves){let $=mt(b.toUnit,l)??m.nodes.find(v=>v.files.some(R=>a.files.some(w=>w.unit===b.toUnit&&w.path===R.path)))?.id;if(!m.nodes.find(v=>v.id===$)?.tools.some(v=>v.label===b.tool)){k=`${b.tool} would not reach ${b.toUnit}`;break}}if(k){i(a.title,k);continue}for(let b of a.files){if(b.action==="delete"||b.action==="shrink")continue;let $=b.action==="create"?null:Gn(t.loadModes,l,b.path),O=Ja(b,{existing:$,node:g(b.unit),files:p.files,prompt:a.files.find(v=>v.unit===b.unit&&v.role==="system prompt")});if(O!=="unknown"&&O!==b.loadMode){k=`declares ${b.path} ${b.loadMode}, but the conventions make it ${O}`;break}if(b.loadMode==="on_demand"&&b.role==="skill"&&b.action==="create"){let v=b.frontmatter?.description??"";if(!v||v.length>1024){k=`skill ${b.path} needs a description of at most 1024 characters to be triggered`;break}}if(b.loadMode==="on_demand"&&b.role!=="skill"&&!$){let v=R=>Gn(t.loadModes,l,R)?.mode==="always"&&Gn(t.loadModes,l,R)?.unit===b.unit||a.files.some(w=>w.path===R&&w.unit===b.unit&&w.loadMode==="always");if(!a.additions.some(R=>R.kind==="pointer"&&R.text.includes(b.path)&&v(R.path))){k=`${b.path} is read only on demand, but nothing the agent always loads points to it`;break}}}if(!k)for(let b of a.segments){let $=a.files.find(R=>R.path===b.to);if(b.disposition!=="move"||$?.loadMode!=="never"||b.into)continue;let v=(p.files[b.path]??"").split(`
|
|
51
|
-
`).slice(b.startLine-1,b.endLine).findIndex(Lp);if(v>=0){k=`moves a rule into a file the agent never reads (${b.path}:${b.startLine+v} \u2192 ${b.to})`;break}}if(k){i(a.title,k);continue}let S=Ga(e,{body:a,ticked:Hn(a),contents:p.files,childSites:[]}).outputs.map(b=>({path:b.path,bytes:Buffer.byteLength(b.content,"utf8")})).find(b=>b.bytes>ko);if(S){i(a.title,`would assemble ${S.path} at ${S.bytes} bytes (cap ${ko})`);continue}let x=Object.fromEntries(ps(a,p.files).map(b=>[b,Ip("sha256").update(p.files[b]).digest("hex")]));r.push({...c,sourceHashes:x,delta:Wn(u,m,a,l)})}return{structures:r,warnings:o,dropped:s}}var jp=["low","medium","high","critical"];function zn(e){return e.map((t,n)=>`f${n+1}`)}function ds(e,t){let n=zn(e),o=e.flatMap((r,i)=>[r.site,...r.otherSites??[]].some(c=>c&&xt(c.path,t))?[]:[{...r,ref:n[i]}]),s=e.map(r=>({title:r.title,severity:jp.includes(r.severity)?r.severity:"medium",siteRepo:r.siteRepo,site:r.site,otherSites:(r.otherSites??[]).map(i=>({path:i.path,line:i.line}))}));return{items:o,candidates:s,refs:n}}var fs=N.generate;function Dp(e,t){return{template:"derive-structure",model:fs,answerFormat:"structures",limits:{effort:"high"},inputs:{maxStructures:String(Rt),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:ge(o),markdown:s,outline:s?te(e,o).map(r=>({...r,text:r.text.slice(0,60)})):[]}})}}}async function sc(e,t,n){return(await M(t,Dp(e,n),e)).structures}async function Jn(e,t,n,o={}){let s=o.enforce??Ho;if(t.length===0)return{kept:[],dropped:[],flagged:[],ran:!0};let r=await ya(e,t.map(l=>({subKind:l.body.subKind,title:l.body.title,cause:l.body.cause,evidence:l.body.evidence,resolves:l.children.map(p=>n[Number(p.ref.slice(1))-1]?.title??p.ref)})),{scopeRuleId:o.scopeRuleId??"structure",maxTokens:o.maxTokens});if(!r)return{kept:t,dropped:[],flagged:[],ran:!1};let i=[],c=[],a=[];return t.forEach((l,p)=>{let d=r.get(p);if(d.inScope){i.push(l);return}let u={title:l.body.title,reason:d.reason};s?c.push(u):(a.push(u),i.push(l))}),{kept:i,dropped:c,flagged:a,ran:!0}}function Bp(e,t,n,o=15e4){let s=new Set(t.flatMap(l=>[l.site?.path,...(l.otherSites??[]).map(p=>p.path)]).filter(l=>!!l)),r=l=>e.has(l)?0:s.has(l)?1:2,i=Object.keys(n).sort((l,p)=>r(l)-r(p)||n[l].length-n[p].length||(l<p?-1:1)),c={},a=0;for(let l of i)r(l)>0&&a+n[l].length>o||(c[l]=e.has(l)?oe(n[l]):n[l],a+=c[l].length);return c}function rc(e,t,n,o){return o?Bp(W(t),n,It(e)):wn(e,t,void 0,new Set,void 0,{CF_READING_PRIORITY:"0"}).files}function ic(e){let t=zn(e);return e.flatMap((n,o)=>{if(n.category!=="contradiction"&&n.category!=="ambiguity")return[];let s=n.site?[{...n.site,repo:n.siteRepo,excerpt:n.excerpt}]:[];return s.push(...(n.otherSites??[]).map(r=>({...r,repo:r.repo??n.siteRepo}))),[{id:t[o],title:n.title,category:n.category,sites:s}]})}function ac(e,t,n){return t===void 0?[]:e.filter(o=>o.sites.length>0&&o.sites.every(s=>s.repo===t&&n.some(r=>r.path===s.path&&(!r.span||s.line!==null&&s.line>=r.span.from&&s.line<=r.span.to))))}import{posix as qp}from"node:path";function Xn(e,t,n=1){let o=te(e,t).filter(s=>s.kind==="heading");return o.map((s,r)=>({heading:s.text,startLine:s.start+n-1,endLine:(o.slice(r+1).find(i=>i.level<=s.level)?.start??B(t).length+1)+n-2,level:s.level}))}function cc(e,t,n=1){let o=Xn(e,t,n);return o.length?[{startLine:n,endLine:o[1]?o[1].startLine-1:o[0].endLine},...o.filter(s=>/^#{1,6}\s+(Identity|Mission|Boundaries)\b/i.test(s.heading)).map(({startLine:s,endLine:r})=>({startLine:s,endLine:r}))]:[{startLine:n,endLine:n+B(t).length-1}]}function lc(e,t,n){let o=new Map;for(let s of t.files.filter(r=>r.role==="tools")){let r=n[s.path]??"",i=[];try{i=yt(r).tools}catch{}let c=[...i,...Xs(r).tools,...Qs(r).tools];for(let a of c)o.has(a.name)||o.set(a.name,{name:a.name,description:a.description?.trim()||"no description",declaredIn:s.path})}return t.tools.map(s=>o.get(s.label)??{name:s.label,description:"no description",declaredIn:t.files.find(r=>r.role==="mcp")?.path??""})}function us(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 dc(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 fc(e,t){if(!us(e).some(o=>o.id===t))return null;let n=dc(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 uc(e,t){return us(t.graph).map(n=>Up(e,{...t,unitId:n.id}))}function pc(e,t,n){let o=t.files.filter(s=>s.role==="skill");return o.map(s=>{if(!s.label)throw new Error(`The graph did not name the skill at ${s.path}.`);let r=s.label,i=t.files.filter(p=>p.role==="reference"&&(p.label===r||p.path.startsWith(qp.dirname(s.path)+"/"))).map(p=>p.path).sort(),c=[s.path,...i],a=c.map(p=>n[p]??"").join(`
|
|
52
|
-
`),l=p=>p.filter(d=>Be(a,{name:d,key:d,paths:[],bytes:0}));return{name:r,path:s.path,description:it(e,s.path,n[s.path]??"").description?.trim()||"no description",bytes:c.reduce((p,d)=>p+Buffer.byteLength(n[d]??""),0),references:i,tools:l(t.tools.map(p=>p.label)),skills:l(o.flatMap(p=>p.label&&p.label!==r?[p.label]:[]))}}).sort((s,r)=>s.name.localeCompare(r.name))}function Kp(e,t,n){return t.files.filter(o=>o.role==="system prompt"||o.role==="soul").map(o=>{let s=n[o.path]??"",r=o.span?.from??1,i=o.span?.to??B(s).length,c=B(s).slice(r-1,i).join(`
|
|
53
|
-
`);return{path:o.path,text:c,startLine:r,endLine:i,numberedText:ge(s).split(`
|
|
54
|
-
`).slice(r-1,i).join(`
|
|
55
|
-
`),sections:Xn(e,c,r)}})}function Up(e,t){let{graph:n,files:o}=t,s=us(n);if(!t.unitId&&s.length!==1)throw new Error("Select one top-level agent for the split inventory.");let r=t.unitId?s.find(l=>l.id===t.unitId):s[0];if(!r)throw new Error(`No top-level agent named ${t.unitId} is available.`);let i=dc(n,r.id),c=pc(e,r,o),a=Kp(e,r,o);return{agent:{id:r.id,name:r.label,description:r.desc,tools:r.tools.map(l=>l.label)},skills:c,tools:lc(e,r,o).map(l=>({...l,skills:c.filter(p=>p.tools.includes(l.name)).map(p=>p.name)})),subAgents:n.nodes.filter(l=>l.id!==r.id&&i.has(l.id)&&l.kind==="agent").map(l=>({id:l.id,name:l.label,description:l.desc,tools:l.tools.map(p=>p.label),skills:pc(e,l,o)})),prompt:a[0]??null,prompts:a,knowledge:r.files.filter(l=>l.role==="knowledge").map(l=>({path:l.path,sections:Xn(e,o[l.path]??"")})),open:t.open.map(l=>({...l,frozen:[...l.frozen],declined:[...l.declined],files:[...l.files]})),findings:ac(t.findings??[],t.repoKey,n.nodes.filter(l=>i.has(l.id)).flatMap(l=>l.files))}}function Qn(e,t){return(t.repos??[]).flatMap((n,o)=>{let s=xo(t,o);return uc(e,{graph:s,files:n.files??{},open:t.openStructures??[],repoKey:n.key,findings:t.splitFindingsPriced?t.shapeFindings??[]:[]}).filter(r=>!Ae(r.agent)).map(r=>({repo:n,graph:s,inventory:r}))})}function mc(e){return e.findings.length>0||e.skills.length>=8||e.subAgents.length>=3||e.tools.length>=20}var ms=N.generate;function hc(e){return{template:"derive-shape",model:ms,answerFormat:"shape",limits:{effort:"high"},inputs:{inventoryData:e,maxSubAgents:String(Ct),minSkills:String(fn)}}}function Ix(e,t){return e.tools.analysisRequest(hc(t))}function gc(e,t){return e.tools.validateShapeInput(t),M(e,hc(t))}function kc(e,t,n){let o=n.nodes.filter(l=>l.kind==="agent"),s=new Set(n.edges.filter(l=>l.kind==="delegates").map(l=>l.to)),r=o.filter(l=>!s.has(l.id)),i=r[0];if(r.length!==1||i.id!==t.agent.id||i.label!==t.agent.name)return`${t.agent.name} would not remain the one original entry point.`;let c=new Map(e.frontDoor.skills.map(l=>[l,i.id])),a=new Set(t.subAgents.flatMap(l=>l.skills.map(p=>JSON.stringify([l.id,p.name,p.path]))));for(let l of e.subAgents){let p=o.filter(d=>d.label===l.name);if(p.length!==1||n.edges.filter(d=>d.kind==="delegates"&&d.from===i.id&&d.to===p[0].id).length!==1)return`sub-agent ${l.name} would not load once with a handoff from ${t.agent.name}.`;for(let d of l.skills)c.set(d,p[0].id)}for(let l of t.skills){let p=o.flatMap(u=>u.files.filter(h=>h.role==="skill"&&h.label===l.name&&!a.has(JSON.stringify([u.id,h.label,h.path]))).map(h=>({node:u.id,path:h.path}))),d=e.frontDoor.skills.includes(l.name);if(p.length!==1||p[0].node!==c.get(l.name)||(d?p[0].path!==l.path:p[0].path===l.path))return`skill ${l.name} would not load once on its intended owner at its ${d?"original":"new"} path.`}for(let l of t.subAgents){let p=o.find(d=>d.id===l.id&&d.label===l.name);if(!p||!s.has(p.id))return`existing sub-agent ${l.name} would no longer load.`;for(let d of l.skills)if(!p.files.some(u=>u.role==="skill"&&u.label===d.name&&u.path===d.path))return`existing skill ${d.name} would no longer load on ${l.name}.`}return null}function wc(e,t,n,o,s){let r=g=>({section:null,error:g}),{path:i,startLine:c,endLine:a}=t;if(!(n==="prompt"?o.prompts:o.knowledge).find(g=>g.path===i)||s[i]===void 0)return r(`${n} section ${i} is not an available ${n} file.`);let p=n==="prompt"?o.prompts.find(g=>g.path===i):null,d=p?.startLine??1,u=p?.endLine??B(s[i]).length;if(!Number.isInteger(c)||!Number.isInteger(a)||c<d||a<c||a>u)return r(`${n} section ${i}:${c}-${a} is outside its file or prompt span.`);let h=Un(te(e,s[i]),c,a);return h.start<d||h.end>u?r(`${n} section ${i} snaps outside its prompt span.`):p&&cc(e,p.text,p.startLine).some(g=>g.startLine<=h.end&&g.endLine>=h.start)?r(`prompt section ${i}:${h.start}-${h.end} would move the agent's identity.`):{section:{path:i,startLine:h.start,endLine:h.end},error:null}}var Vn=(e,t)=>e.path===t.path&&e.startLine<=t.endLine&&t.startLine<=e.endLine,T=e=>({shape:null,warnings:[`Split check discarded: ${e}`]});function Sc(e,t,n){if(t.decision==="keep")return{shape:null,warnings:[]};if(t.decision!=="split")return T(`unknown decision "${t.decision}".`);if(t.subAgents.length<1||t.subAgents.length>Ct)return T(`a split needs 1\u2013${Ct} sub-agents.`);let{inventory:o,files:s}=n,r=new Set(o.skills.map(f=>f.name)),i=new Set(o.tools.map(f=>f.name)),c=new Set,a=f=>r.has(f)?c.has(f)?`skill ${f} is placed twice.`:(c.add(f),null):`unknown skill ${f}.`;for(let f of t.frontDoor.skills){let m=a(f);if(m)return T(m)}let l=new Set(o.subAgents.map(f=>ae(f.name))),p=new Set,d=[],u=new Set,h=[];for(let f of t.subAgents){if(f.skills.length<fn&&f.promptSections.length===0)return T(`sub-agent ${f.name} needs at least one skill or one prompt section.`);for(let $ of f.skills){let O=a($);if(O)return T(O)}for(let $ of f.tools)if(!i.has($))return T(`unknown tool ${$} on ${f.name}.`);if(!f.handoff.trim())return T(`sub-agent ${f.name} has an empty handoff.`);if(!f.description.trim()||f.description.length>1024)return T(`sub-agent ${f.name} needs a description of 1\u20131024 characters.`);if(!/[a-z0-9]/i.test(f.name))return T(`sub-agent "${f.name}" needs a usable name.`);let m=ae(f.name);if(l.has(m))return T(`the existing sub-agent ${m} already uses that name.`);let k=m,y=2;for(;p.has(k)||l.has(k);)k=`${m}-${y++}`;p.add(k);for(let $ of f.resolves)if(!o.findings.some(O=>O.id===$))return T(`unknown finding ${$} on sub-agent ${k}.`);let S=[];for(let $ of f.evidence){let O=s[$.path]===void 0?null:de(s[$.path],$.excerpt);if(O===null)return T(`evidence quote was not found in ${$.path}: "${$.excerpt}".`);S.push({...$,line:O}),u.add(`${$.path}:${O}:${$.excerpt.replace(/\s+/g," ").trim()}`)}let x=[],b=[];for(let[$,O,v]of[["prompt",f.promptSections,x],["knowledge",f.knowledgeSections,b]])for(let R of O){let w=wc(e,R,$,o,s);if(w.error)return T(w.error);let _=w.section;if($==="prompt"){if(d.some(E=>Vn(_,E)))return T(`prompt section ${_.path}:${_.startLine}-${_.endLine} is placed twice.`);d.push(_)}else if(b.some(E=>Vn(_,E)))return T(`knowledge section ${_.path}:${_.startLine}-${_.endLine} is listed twice on ${k}.`);v.push(_)}h.push({...f,name:k,skills:[...f.skills],tools:[...f.tools],resolves:[...new Set(f.resolves)],evidence:S,handoff:f.handoff.trim(),promptSections:x,knowledgeSections:b,movedKnowledge:[],neededKnowledge:[]})}for(let f of r)if(!c.has(f))return T(`skill ${f} is missing from the split.`);if(u.size<2)return T("a split needs at least two distinct evidence quotes.");for(let f of h)for(let m of f.knowledgeSections)(n.retainedKnowledge===void 0||n.retainedKnowledge.some(y=>Vn(y,m))||h.some(y=>y!==f&&y.knowledgeSections.some(S=>Vn(S,m)))?f.neededKnowledge:f.movedKnowledge).push(m);let g={...t,decision:"split",frontDoor:{...t.frontDoor,skills:[...t.frontDoor.skills]},subAgents:h};if(!n.afterGraph){let f=h[0].skills[0]?`moved skill ${h[0].skills[0]}`:`sub-agent ${h[0].name}`;return T(`cannot prove that ${f} would load without a loadability checker.`)}try{let f=kc(g,o,n.afterGraph(g));return f?T(f):{shape:g,warnings:[]}}catch(f){return T(`loadability check failed: ${f instanceof Error?f.message:String(f)}.`)}}import{posix as yc}from"node:path";function Gt(e,t,n){let o=n.scoped[0]??"",s=o.slice(0,o.length-n.stripRoot(o).length),r=n.scoped.some(a=>n.stripRoot(a).startsWith(`${Bs}/`)),i=`${s}${qs[r?0:1]}`,c=`${i}/${e}/skills/${t}`;return{agent:`${i}/${e}.md`,folder:c,skill:`${c}/SKILL.md`}}function Yn(e,t,n,o){return e.subAgents.flatMap(s=>s.skills.flatMap(r=>{let i=t.skills.find(l=>l.name===r),c=yc.dirname(i.path),a=Gt(s.name,yc.basename(c),o).folder;return Object.keys(n).filter(l=>l.startsWith(`${c}/`)).sort().map(l=>({name:r,owner:s.name,from:l,to:a+l.slice(c.length),fromFolder:c,toFolder:a}))}))}import{posix as Hp}from"node:path";var hs=e=>e.replace(/(?<!\.)[.!]$/,""),Gp=e=>[...e.matchAll(/\bmcp__[^\s`"'()[\]{},;:<>]+/g)].map(t=>hs(t[0])),xc=(e,t)=>Be(e,{name:t,key:t,paths:[],bytes:0});function bc(e,t,n,o){if(e.CF_SPLIT_HELPER_TOOLS==="0")return[...t.tools];if(t.noTools)return[];let s=n.skills.filter(f=>t.skills.includes(f.name)),r=Object.keys(o).filter(f=>s.some(m=>f.startsWith(Hp.dirname(m.path)+"/"))),i=[...t.promptSections,...t.movedKnowledge,...t.neededKnowledge],c=[...r.map(f=>o[f]),...i.map(f=>B(o[f.path]??"").slice(f.startLine-1,f.endLine).join(`
|
|
56
|
-
`))].join(`
|
|
57
|
-
`),a=new Set([...n.agent.tools,...n.tools.map(f=>f.name)].filter(f=>!/[*?]/.test(f))),l=Gp(c);if(l.some(f=>!a.has(f))||t.tools.some(f=>!a.has(f)))return null;let p=new Set(l.map(f=>f.slice(0,f.lastIndexOf("__")+2))),d=f=>{if(a.has(f))return f;let m=[...a].filter(S=>S.endsWith(`__${f}`)),k=m.filter(S=>p.has(S.slice(0,S.lastIndexOf("__")+2))),y=m.length===1?m:k;return y.length===1?y[0]:null},u=new Set(l);for(let f of a)xc(c,f)&&u.add(f);let h=new Set([...a].flatMap(f=>/^mcp__.+__(.+)$/.exec(f)?.[1]??[]));for(let f of h){if(!xc(c,f))continue;let m=d(f);if(!m)return null;u.add(m)}let g=[...[...c.matchAll(/`([^`\n]+)`/g)].flatMap(f=>{let m=f[1];return a.has(m)?[m]:/^[\w*?./-]+(?:\([^)]*\))?$/.test(m)?[m.replace(/\([^)]*\)$/,"")]:[]}),...[...c.matchAll(/(?:[*?]+[\w-]+|[\w-]+[*?])[\w*?.-]*/g)].map(f=>f[0]),...[...c.matchAll(/\b[a-z][\w*?.-]*_[\w*?.-]+/gi)].map(f=>hs(f[0])),...[...c.matchAll(/\b(?:call|invoke)\s+(?:the\s+)?(?:tool\s+)?`?([\w*?.-]+)/gi)].map(f=>hs(f[1]))];for(let f of g){let m=d(f);if(!m)return null;u.add(m)}return t.tools.length?[...t.tools]:u.size?[...u].sort():null}function Zn(e,t,n,o,s={}){let r={...o},i=Z(e,Object.keys(o),s.root);for(let c of t.subAgents){let a=bc(e,c,n,o);r[Gt(c.name,"",i).agent]=["---",`name: ${c.name}`,`description: ${Je(c.description.replace(/\s+/g," "))}`,...a===null?[]:[`tools: ${a.length?rt(e,a):"[]"}`],"---",c.job].join(`
|
|
58
|
-
`)}for(let c of Yn(t,n,o,i))delete r[c.from],r[c.to]=o[c.from];return r}function Wp(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 Oc(e,t){return e.split?{...t,files:t.files.flatMap(n=>{if(n.change!=="shrunk"&&n.change!=="grown")return[n];let o=Wp(e,n.path);return o==="grown"?[{...n,change:o}]:o==="unchanged"?[]:[n]})}:t}import{createHash as Jp}from"node:crypto";var $c=e=>e.replace(/\s+/g," ").trim().replace(/[.!?]+$/,"").replace(/^./,t=>t.toLowerCase());function vc(e,t){let n=e.frontDoor.name??t,o=e.subAgents.map(s=>$c(zp(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: ${$c(e.frontDoor.job)}.${o.length?` Each helper gets its own skills and rules, and ${n} hands work to it.`:""}`}}function zp(e){return(e.name.replace(/[-_]/g," ").replace(/\s+/g," ").trim()||e.job.trim()).replace(/^./,n=>n.toUpperCase())}function Ec(e,t,n,o,s){if(!n.prompt)throw new Error("An original prompt is needed for each handoff.");let r=n.prompt,{files:i,root:c}=s,a=Z(e,Object.keys(i),c),l=Yn(t,n,i,a),p=S=>Gt(S,"",a).agent,d=n.agent.name.replace(/^./,S=>S.toUpperCase()),u=new Map;for(let S of t.subAgents)for(let x of S.resolves){let b=u.get(x)??[];b.push(`${S.name} in ${p(S.name)}`),u.set(x,b)}let h=t.subAgents.flatMap(S=>[...S.promptSections,...S.movedKnowledge].map(x=>({...x,to:p(S.name),disposition:"move",into:null,childRef:null,heading:null,reason:S.job}))),g={...Kn(t),subKind:"extract_subagent",kind:"reliability",severity:"medium",...vc({frontDoor:{...t.frontDoor,name:d},subAgents:t.subAgents},d),cause:t.reason,evidence:t.subAgents.flatMap(S=>S.evidence.map(x=>({...x}))),files:t.subAgents.map(S=>{let x=S.tools.filter(b=>!n.tools.find($=>$.name===b).skills.some($=>t.frontDoor.skills.includes($)));return{path:p(S.name),action:"create",role:"system prompt",unit:`new:${S.name}`,loadMode:"always",loadVia:null,purpose:`${S.job}${x.length?` ${x.join(", ")}: only the sub-agent uses this.`:""}`,frontmatter:{name:S.name,description:S.description,tools:[...S.tools]}}}),segments:h,additions:t.subAgents.map(S=>({path:r.path,kind:"handoff",text:S.handoff,heading:null})),reorder:null,toolMoves:[],split:{...c?{root:c}:{},frontDoor:{name:d,job:t.frontDoor.job,skills:[...t.frontDoor.skills]},subAgents:t.subAgents.map(S=>({name:S.name,job:S.job,description:S.description,path:p(S.name),handoff:S.handoff,tools:[...S.tools],...S.noTools===void 0?{}:{noTools:S.noTools},resolves:[...S.resolves],skills:S.skills.map(x=>{let b=n.skills.find(O=>O.name===x),$=l.find(O=>O.from===b.path);if(!$)throw new Error(`The skill definition at ${b.path} is unavailable for its move.`);return{name:x,from:b.path,to:$.to}}),movedKnowledge:S.movedKnowledge.map(x=>({...x})),neededKnowledge:S.neededKnowledge.map(x=>({...x}))}))}},f=s.graphs?.before??We(e,jt(e,{repoKey:o,files:i,root:c})).fragment,m=s.graphs?.after??We(e,jt(e,{repoKey:o,files:Zn(e,t,n,i,{root:c}),root:c})).fragment,k=Oc(g,Wn(f,m,g,o));for(let S of l){let x=m.nodes.find($=>$.files.some(O=>O.path===p(S.owner)));if(!x)throw new Error(`The sub-agent at ${p(S.owner)} is missing from the discovered graph.`);let b=f.nodes.flatMap($=>$.files).find($=>$.path===S.from)?.role??(Zt(S.from)?"code":"reference");k.files.push({path:S.to,fromPath:S.from,role:b,node:`${o}#${x.id}`,fromNode:`${o}#${n.agent.id}`,change:"moved",segments:0})}let y=[...new Set([...ps(g,i),...l.map(S=>S.from),...t.subAgents.flatMap(S=>S.neededKnowledge.map(x=>x.path))])].sort();return{repo:o,body:g,children:[...u].map(([S,x])=>({ref:S,how:`Isolating ${x.join(" and ")} gives each job its own rules.`})),delta:k,sourceHashes:Object.fromEntries(y.map(S=>[S,Jp("sha256").update(i[S]).digest("hex")]))}}var Xp=1e3,bb=Kr+4e3;function _c(e,t,n={}){return Jn(e,t,[],{...n,scopeRuleId:"split",maxTokens:Xp})}function Rc(e,t,n){return t>0?[G(e,"derive-shape","shape",ms,t,n)]:[]}async function Cc({state:e,settings:t},n,o,s){let r=[...e.warnings??[]],i=[...e.structuresRaw??[]],c=!1,a=!1;function l(p){return I("derive-shape",p,d=>o.rethrow(d)),n.progress.log({level:"warn",code:"analysis.shape_check_failed"}),{structures:[],warnings:["The split check failed; other results were kept and earlier splits were left unchanged."],failed:!0}}try{if(U(t,e).splitCheck&&e.splitCheckPriced){a=!0;let p=Qn(t,e).filter(({inventory:u})=>mc(u)),d=await K(p,4,async({repo:u,graph:h,inventory:g})=>{n.progress.assertHeld(),n.progress.signal?.throwIfAborted();try{let f=u.files??{},m=await gc(o,g),k=h,y=Sc(t,m,{inventory:g,files:f,afterGraph($){return k=Dt(t,{...u,files:Zn(t,$,g,f,{root:u.root})},jn(t,e),e.modelReader??!1,e.projectAgents,s,{verdicts:e.newVerdicts??[],failed:[]}).fragment,fc(k,g.agent.id)??k}});if(!y.shape)return{structures:[],warnings:y.warnings,failed:y.warnings.length>0};let S=Ec(t,y.shape,g,u.key,{files:f,root:u.root,graphs:{before:h,after:k}}),x=await _c(o,[S]),b=x.ran?x.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 x.ran||n.progress.log({level:"warn",code:"analysis.shape_check_failed"}),{structures:x.kept,warnings:b,failed:!x.ran}}catch(f){return l(f)}},o);for(let u of d)i.push(...u.structures),r.push(...u.warnings),c||=u.failed}}catch(p){r.push(...l(p).warnings),c=!0}return{next:"persisting",clear:[],set:{structuresRaw:i,warnings:r,splitCheckRan:a,splitPassFailed:c}}}var gs=N.mechanical,Pc=20;function Qp(e,t){if(!t)return null;for(let[n,o]of Object.entries(e).sort(([s],[r])=>s.localeCompare(r))){let s=de(o,t);if(s!=null)return{path:n,line:s}}return null}function Vp(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=Qp(n,t.excerpt);if(!o)return{childId:t.id,kind:"gone"};let s=e.newFindings.find(r=>r.category===t.category&&r.repo===t.repo&&r.sites.some(i=>i.path===o.path&&i.line!=null&&Math.abs(i.line-o.line)<=Pc));return s?{childId:t.id,kind:"match",matchIndex:s.index,location:o}:{childId:t.id,kind:"ask",location:o}})}function Yp(e,t){return e.split(`
|
|
59
|
-
`).map((n,o)=>({text:n,line:o+1})).filter(n=>Math.abs(n.line-t)<=Pc).map(n=>`${n.line} ${n.text}`).join(`
|
|
60
|
-
`)}function Zp(e){return{template:"structure-recheck",model:gs,answerFormat:"recheck",inputs:e}}async function Ic(e,t,n){let o=[],s=[],r=`C-${t.change.seq}`;for(let i of Vp(t)){n?.assertHeld(),n?.signal?.throwIfAborted();let c=t.children.find(l=>l.id===i.childId),a={childId:c.id,changeId:t.change.id};if(i.kind==="match"){s.push({...a,outcome:"present",note:`Still present in ${i.location.path} after ${r}`,matchIndex:i.matchIndex,location:i.location});continue}if(i.kind==="keep"&&i.reason==="repo_not_analysed"){o.push(`F-${c.seq}'s repository was not analysed after ${r}; it stays open.`),s.push({...a,outcome:"not_checked",note:`Not re-checked after ${r} \u2014 its repository was not analysed`,matchIndex:null,location:null});continue}if(i.kind==="keep"){o.push(`F-${c.seq} has no excerpt to re-check after ${r}; it stays open.`),s.push({...a,outcome:"present",note:`Still present after ${r}`,matchIndex:null,location:null});continue}if(i.kind==="gone"){s.push({...a,outcome:"resolved",note:`Resolved by ${r}`,matchIndex:null,location:null});continue}try{let l=await M(e,Zp({childId:c.id,seq:c.seq,title:c.title,cause:c.cause,path:i.location.path,line:i.location.line,window:Yp(t.filesByRepo[c.repo][i.location.path],i.location.line)}));l.verdict==="resolved"?s.push({...a,outcome:"resolved",note:`Resolved by ${r}: ${l.reason.slice(0,200)}`,matchIndex:null,location:null}):s.push({...a,outcome:"present",note:`Still present in ${i.location.path} after ${r}`,matchIndex:null,location:i.location})}catch(l){I("structure-recheck",l,p=>e.rethrow(p)),n?.log({level:"warn",code:"analysis.structure_recheck_failed"}),o.push(`F-${c.seq} could not be re-checked after ${r}; it stays open.`),s.push({...a,outcome:"present",note:`Still present in ${i.location.path} after ${r}`,matchIndex:null,location:i.location})}}return{outcomes:s,warnings:o}}function Ac(e,t){return e>0?[G({},"structure-recheck","recheck",gs,e,t)]:[]}async function Mc(e,t,n,o){let s=Object.fromEntries((e.repos??[]).map(a=>[a.key,a.files??{}])),r={outcomes:[],changeIds:[],warnings:[]},i;try{i=await t.context.loadPendingRechecks?.()??[]}catch(a){return n.rethrow(a),t.progress.log({level:"warn",code:"analysis.structure_recheck_load_failed"}),r}let c=o.map((a,l)=>({index:l,category:a.category??null,repo:a.siteRepo,sites:[a.site,...a.otherSites].filter(p=>!!p)}));for(let a of i){if(t.progress.assertHeld(),t.progress.signal?.throwIfAborted(),!s[a.repo])continue;let l=await Ic(n,{change:a.change,children:a.children,filesByRepo:s,newFindings:c},t.progress);r.outcomes.push(...l.outcomes),r.warnings.push(...l.warnings),l.outcomes.some(p=>p.outcome==="not_checked")||r.changeIds.push(a.change.id)}return r}function uO(e,t,n={}){let o=pe,s=_e(e).splitCheck?n.structureState?Qn(e,n.structureState).length:t.length:0;return[G(e,"derive-structure","structures",fs,1,o),G(e,"scope-items","structureScope",pt,1+s,o),...Ac(n.pendingRecheckChildren??0,o),...Rc(e,s,o)]}var mO=async(e,t)=>{if(t.progress.assertHeld(),t.progress.signal?.throwIfAborted(),!t.model)throw new V("llm","llm gone mid-job");let n=await Oe(t),o=re(t.model,n,t.progress.rethrow,t.progress.signal);if(e.state.structurePhase==="shape"){let x=e.execution.forLocal?"":n.modelReaderPrompt();return Cc(e,t,o,x)}let{state:s,settings:r}=e,i=s.repos??[],c=X(s),a=Me(c),{findings:l}=he(Ze(s.findingsRaw??[]),be(s),ve(s),r),p=Zs(a),d=c.map(({repoKey:x,fragment:b})=>{let $=b.nodes.filter(v=>!Ae(v)),O=new Set($.map(v=>v.id));return{repoKey:x,fragment:{...b,nodes:$,edges:b.edges.filter(v=>O.has(v.from)&&O.has(v.to))}}}),u=i.map(x=>({...x,files:Object.fromEntries(Object.entries(x.files??{}).filter(([b])=>!xt(b,p)))})),h=Me(d),g=ds(l,p),f=[...s.warnings??[]],m=c.flatMap(({repoKey:x,fragment:b},$)=>{let O=Xa(r,{repoKey:x,root:i[$]?.root,files:i[$]?.files??{},fragment:b});return f.push(...O.warnings),O.entries}),k;try{let b=a.nodes.some(Ae)&&!h.nodes.some(w=>w.kind==="agent")?[]:await sc(r,o,{graph:h,files:rc(u,$e(d),l,U(r,s).multiPass),findings:g.items,loadModes:m.filter(w=>!xt(w.path,p)),open:s.openStructures??[]}),$=oc(r,{raw:b,findings:g.candidates,repos:u,fragments:d,loadModes:m});f.push(...$.warnings);let O=await Jn(o,$.structures,l),v=O.dropped.length,R=O.flagged.length;v&&f.push(`${v} structural proposal${v===1?"":"s"} removed as out of scope`),R&&f.push(`${R} structural proposal${R===1?"":"s"} flagged by the scope check's model pass, but kept \u2014 that verdict is not enforced`),O.ran||f.push("the structural scope check did not run; proposals were kept unchecked"),k={structuresRaw:O.kept,structurePassFailed:!1,structureScopeCheck:{ran:O.ran},structureStats:{raw:b.length,flagged:R,droppedByValidation:$.dropped}}}catch(x){I("derive-structure",x,b=>o.rethrow(b)),t.progress.log({level:"warn",code:"analysis.structure_pass_failed"}),f.push("The structural pass failed; no structural proposals this time."),k={structuresRaw:[],structurePassFailed:!0}}let y=await Mc(s,t,o,l);f.push(...y.warnings);let S=U(r,s).splitCheck&&s.splitCheckPriced;return{next:S?"structuring":"persisting",clear:[],set:{...k,loadModes:m,warnings:f,rechecks:y.outcomes,recheckedChangeIds:y.changeIds,...S?{structurePhase:"shape"}:{},...S&&s.splitFindingsPriced?{shapeFindings:ic(l)}:{}}}};export{Cn as a,Pn as b,Do as c,Di as d,He as e,$n as f,ca as g,Ko as h,Ln as i,We as j,fa as k,Ni as l,Rn as m,Tl as n,Ft as o,Bi as p,zm as q,Gi as r,Ul as s,Xi as t,Lt as u,ua as v,jc as w,xo as x,td as y,X as z,be as A,Q as B,Nn as C,jn as D,lk as E,tp as F,pk as G,dk as H,Dt as I,ki as J,un as K,dt as L,ft as M,va as N,ba as O,Tk as P,AS as Q,Qn as R,re as S,ms as T,Ix as U,Xp as V,bb as W,nw as X,ow as Y,Xw as Z,Qw as _,Na as $,YS as aa,ZS as ba,uO as ca,mO as da};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
function w(r,t={}){let n=0,e=r.length;if(!t.trailingOnly)for(;n<e&&r[n]==="/";)n+=1;for(;e>n&&r[e-1]==="/";)e-=1;return r.slice(n,e)}function l(r){return w(r??"")}function O(r){return l(r)||void 0}function g(r,t){let n=l(t);if(!n)return r;let e=`${n}/`;return r.startsWith(e)?r.slice(e.length):null}function z(r,t){return g(r,t)!==null}function U(r,t){let n=l(t);return n?`${n}/${r}`:r}var p=/^[A-Za-z0-9_.-]+$/;function f(r){return r.endsWith(".git")?r.slice(0,-4):r}function a(r,t){return p.test(r)&&p.test(t)&&r!=="."&&r!==".."&&t!=="."&&t!==".."}function R(r){let t=r.trim();if(!t)return null;let n=t.match(/^git@github\.com:([^/]+)\/(.+?)(?:\.git)?$/);if(n){let i=n[1]??"",o=f(n[2]??"");return a(i,o)?{owner:i,repo:o}:null}if(/^https?:\/\//i.test(t)){let i;try{i=new URL(t)}catch{return null}if(i.hostname!=="github.com"&&i.hostname!=="www.github.com")return null;let o=i.pathname.split("/").filter(Boolean),[u,m]=o;if(!u||!m)return null;let s=f(m);if(!a(u,s))return null;if(o.length===2)return{owner:u,repo:s};if(o[2]==="tree"&&o[3]){let d;try{d=decodeURIComponent(o[3])}catch{return null}let h=o.slice(4);if(h.some(c=>c==="."||c===".."||!p.test(c)))return null;let $=h.join("/");return{owner:u,repo:s,ref:d,...$?{dir:$}:{}}}return null}let e=t.match(/^([^/\s]+)\/([^/\s]+)$/);if(e){let i=e[1]??"",o=f(e[2]??"");return a(i,o)?{owner:i,repo:o}:null}return null}function x(r){let t=l(r.dir);return t?`${r.owner}/${r.repo}/${t}`:`${r.owner}/${r.repo}`}function y(r){return`local:${r.replace(/\/+$/,"").split("/").pop()??"repo"}`}function b(r){let t=R(r);return t?x({owner:t.owner,repo:t.repo,dir:t.dir}):null}function E(r){return r.startsWith("upload:")?r:b(r)??(r.startsWith("/")?y(r):null)}function A(r){return l(r.split("/").slice(2).join("/"))||void 0}export{l as a,O as b,g as c,z as d,U as e,x as f,y as g,b as h,E as i,A as j};
|