@cjhyy/code-shell 0.1.7 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/dist/anthropic-OVRWAZRD.js +1 -0
  2. package/dist/arena/index.js +1 -1
  3. package/dist/{arena-OW55ZCHT.js → arena-64T2EQD4.js} +1 -1
  4. package/dist/{chunk-HIJ2XXGX.js → chunk-2EUIMKJA.js} +1 -1
  5. package/dist/{chunk-Y2NS6HPO.js → chunk-2GJ7H5NC.js} +17 -17
  6. package/dist/chunk-2OD6VR4N.js +2 -0
  7. package/dist/chunk-A4M2Y42L.js +2 -0
  8. package/dist/{chunk-WOP6MJKW.js → chunk-DEYFK6FP.js} +1 -1
  9. package/dist/chunk-DTPABBSV.js +2 -0
  10. package/dist/{chunk-RP26WO4R.js → chunk-EU3J7TBP.js} +1 -1
  11. package/dist/{chunk-XDOWC7EG.js → chunk-L7B2ORID.js} +1 -1
  12. package/dist/chunk-M7VU4YVY.js +49 -0
  13. package/dist/{chunk-NMBYBGC7.js → chunk-MGP35GKD.js} +87 -83
  14. package/dist/chunk-MLCTC53I.js +1 -0
  15. package/dist/{chunk-KCXSARAA.js → chunk-Q3RSX66I.js} +1 -1
  16. package/dist/{chunk-Q4O2HGWS.js → chunk-RERBX75D.js} +1 -1
  17. package/dist/chunk-VKKU4LOM.js +3 -0
  18. package/dist/{chunk-NFH3UQ3E.js → chunk-XXCZE2U2.js} +1 -1
  19. package/dist/chunk-ZSAONDT6.js +2 -0
  20. package/dist/cli/main.js +104 -104
  21. package/dist/cli/onboarding.d.ts +7 -2
  22. package/dist/client-base-F5FCRSB3.js +1 -0
  23. package/dist/compaction-L3Y6NG4N.js +1 -0
  24. package/dist/context/compaction.d.ts +2 -1
  25. package/dist/data/static-catalogs.d.ts +25 -0
  26. package/dist/engine/engine.d.ts +16 -0
  27. package/dist/engine/turn-loop.d.ts +20 -0
  28. package/dist/index.d.ts +1 -1
  29. package/dist/index.js +1 -1
  30. package/dist/llm/capabilities/index.d.ts +20 -0
  31. package/dist/llm/capabilities/rules.d.ts +26 -0
  32. package/dist/llm/capabilities/types.d.ts +108 -0
  33. package/dist/llm/model-pool.d.ts +7 -0
  34. package/dist/llm/provider-catalog.d.ts +2 -0
  35. package/dist/llm/provider-kinds.d.ts +1 -1
  36. package/dist/llm/providers/openai.d.ts +22 -0
  37. package/dist/llm/types.d.ts +8 -0
  38. package/dist/logging/logger.d.ts +10 -2
  39. package/dist/logging/session-recorder.d.ts +16 -3
  40. package/dist/manager-J6FXEUEK.js +1 -0
  41. package/dist/mcp-manager-27EVBKRT.js +1 -0
  42. package/dist/model-fetcher-X5W5EASG.js +1 -0
  43. package/dist/openai-3QEADSYL.js +1 -0
  44. package/dist/{openrouter-models-AM6M52D6.js → openrouter-models-GZVCRWD2.js} +1 -1
  45. package/dist/openrouter-sync-WG4AG5NC.js +1 -0
  46. package/dist/product/index.js +1 -1
  47. package/dist/protocol/client.d.ts +1 -1
  48. package/dist/run/index.js +1 -1
  49. package/dist/{seatbelt-WBYROQT6.js → seatbelt-L54CNI2Y.js} +5 -5
  50. package/dist/settings/schema.d.ts +75 -15
  51. package/dist/{tool-summary-5UE62VU4.js → tool-summary-V2B3MD5N.js} +1 -1
  52. package/dist/tool-system/executor.d.ts +4 -0
  53. package/dist/tool-system/sandbox/index.d.ts +7 -0
  54. package/dist/tool-system/task-guard.d.ts +30 -0
  55. package/dist/types.d.ts +13 -0
  56. package/dist/ui/components/SpinnerWithVerb.d.ts +5 -0
  57. package/dist/ui/components/StatusLine.d.ts +5 -1
  58. package/package.json +1 -1
  59. package/dist/anthropic-UBSB5AQH.js +0 -1
  60. package/dist/chunk-2NS3JMNK.js +0 -1
  61. package/dist/chunk-B7K2OWKC.js +0 -2
  62. package/dist/chunk-EWWK56K6.js +0 -2
  63. package/dist/chunk-NVAZJ5XS.js +0 -2
  64. package/dist/chunk-PGANL6F2.js +0 -3
  65. package/dist/chunk-UDPUTFQT.js +0 -2
  66. package/dist/chunk-W47Z7MGS.js +0 -33
  67. package/dist/client-base-6ZZJJYDY.js +0 -1
  68. package/dist/compaction-ECVQVOCT.js +0 -1
  69. package/dist/manager-C3TDN6MS.js +0 -1
  70. package/dist/mcp-manager-OP4XYV53.js +0 -1
  71. package/dist/model-fetcher-BJ64META.js +0 -1
  72. package/dist/openai-KEWQ54TM.js +0 -1
  73. package/dist/openrouter-sync-5JNBL3Z6.js +0 -1
@@ -0,0 +1 @@
1
+ export{a as AnthropicClient}from'./chunk-DEYFK6FP.js';import'./chunk-O5HFCH2U.js';import'./chunk-2EUIMKJA.js';import'./chunk-FU7AHZNN.js';import'./chunk-ZSAONDT6.js';import'./chunk-3QP5BQ3L.js';
@@ -1 +1 @@
1
- export{j as IterativeArena,f as defaultIterateConvergence,i as getIterateFormat,g as iterateCodeFormat,e as iterateDiffRatio,h as iterateDocumentFormat}from'../chunk-Q4O2HGWS.js';export{J as Arena,I as ArenaLedger,e as DiscussionStrategy,j as LENS_NAMES,Q as MODEL_PRESETS,f as PlanningStrategy,d as ReviewStrategy,z as applyReviewResult,H as buildConsensus,u as buildDigest,i as buildLensPrompt,n as collectEvidence,U as createProgressRenderer,S as formatArenaResult,W as formatArenaResultForSession,v as formatDigest,g as getLens,R as getMaxOutputTokens,k as getStrategy,l as getStrategyForPlan,p as hasTools,c as isStrategyV2,B as isTerminal,y as markUnderReview,A as markUnresolved,m as planArena,T as printArenaResult,s as registerClaims,V as renderProgress,x as resolveClaimStatus,h as resolveLenses,G as runAdjudication,D as runCrossReview,F as runDebateRounds,q as runParticipantResearch,r as runParticipantResearchWithDossiers,E as runVerificationReview,t as selectClaimsForReview,o as selectTools,w as transitionClaim,C as validTransitions}from'../chunk-Y2NS6HPO.js';import'../chunk-NVAZJ5XS.js';import'../chunk-FU7AHZNN.js';import'../chunk-B7K2OWKC.js';import'../chunk-3QP5BQ3L.js';
1
+ export{j as IterativeArena,f as defaultIterateConvergence,i as getIterateFormat,g as iterateCodeFormat,e as iterateDiffRatio,h as iterateDocumentFormat}from'../chunk-RERBX75D.js';export{J as Arena,I as ArenaLedger,e as DiscussionStrategy,j as LENS_NAMES,Q as MODEL_PRESETS,f as PlanningStrategy,d as ReviewStrategy,z as applyReviewResult,H as buildConsensus,u as buildDigest,i as buildLensPrompt,n as collectEvidence,U as createProgressRenderer,S as formatArenaResult,W as formatArenaResultForSession,v as formatDigest,g as getLens,R as getMaxOutputTokens,k as getStrategy,l as getStrategyForPlan,p as hasTools,c as isStrategyV2,B as isTerminal,y as markUnderReview,A as markUnresolved,m as planArena,T as printArenaResult,s as registerClaims,V as renderProgress,x as resolveClaimStatus,h as resolveLenses,G as runAdjudication,D as runCrossReview,F as runDebateRounds,q as runParticipantResearch,r as runParticipantResearchWithDossiers,E as runVerificationReview,t as selectClaimsForReview,o as selectTools,w as transitionClaim,C as validTransitions}from'../chunk-2GJ7H5NC.js';import'../chunk-A4M2Y42L.js';import'../chunk-FU7AHZNN.js';import'../chunk-ZSAONDT6.js';import'../chunk-3QP5BQ3L.js';
@@ -1,3 +1,3 @@
1
- import {a as a$1}from'./chunk-2NS3JMNK.js';import'./chunk-P6JSTIFM.js';import {c as c$1}from'./chunk-UDPUTFQT.js';import {U,V,J,W,T as T$1,R as R$1,Q as Q$1}from'./chunk-Y2NS6HPO.js';export{W as formatArenaResultForSession}from'./chunk-Y2NS6HPO.js';import'./chunk-NVAZJ5XS.js';import'./chunk-FU7AHZNN.js';import'./chunk-B7K2OWKC.js';import {h,a}from'./chunk-3QP5BQ3L.js';import l from'chalk';h();async function Q(e,s,a){let{models:n,mode:i,base:m,head:r,topic:t}=E(e),o=a?.output??(d=>console.log(d));if(!t){o(R());return}let f=j(s,n);if(f.length<2){o(L());return}let P=i?i.charAt(0).toUpperCase()+i.slice(1):"Auto";o(l.bold(`\u2550\u2550\u2550 Arena ${P} \u2550\u2550\u2550`)),o(l.dim(`Topic: ${t}`)),o(l.dim(`Models: ${f.map(d=>d.name).join(" vs ")}`));let x=a?.output?U(a.output):V,O=new J({participants:f,mode:i,enableContextTools:true,onProgress:x});try{let d=await O.run(t,{mode:i,base:m,head:r}),y=a?.outputMessage??a?.output;return y?y(W(d)):T$1(d),d}catch(d){o(l.red(`Arena failed: ${d.message}`));return}}a(Q,"runArenaReview");function T(e){let s=new a$1;try{let a=new c$1(process.cwd()).get();if(a.models?.length)for(let n of a.models)s.register({key:n.key,label:n.label,provider:n.provider??"",model:n.model,baseUrl:n.baseUrl??e.llm.baseUrl,apiKey:n.apiKey??e.llm.apiKey,maxOutputTokens:n.maxOutputTokens});}catch{}return s}a(T,"buildModelPool");function K(e,s,a){if(typeof e=="string"){let n=s.get(e);return n?{name:n.label??c(n.model),llm:{provider:n.provider,model:n.model,apiKey:n.apiKey??a.llm.apiKey,baseUrl:n.baseUrl??a.llm.baseUrl,temperature:.3,maxTokens:n.maxOutputTokens??R$1(n.model),enableStreaming:false}}:void 0}return {name:e.name,llm:{provider:e.provider??a.llm.provider,model:e.model,apiKey:e.apiKey??a.llm.apiKey,baseUrl:e.baseUrl??a.llm.baseUrl,temperature:.3,maxTokens:R$1(e.model),enableStreaming:false}}}a(K,"resolveOneParticipant");function j(e,s){let a=T(e);if(s)return s.split(",").map(r=>r.trim().toLowerCase()).map(r=>{let t=a.get(r);if(t)return {name:t.label??c(t.model),llm:{provider:t.provider,model:t.model,apiKey:t.apiKey??e.llm.apiKey,baseUrl:t.baseUrl??e.llm.baseUrl,temperature:.3,maxTokens:t.maxOutputTokens??R$1(t.model),enableStreaming:false}};let o=Q$1[r];return o?{name:c(o.model),llm:{provider:o.provider,model:o.model,apiKey:e.llm.apiKey,baseUrl:e.llm.baseUrl,temperature:.3,maxTokens:o.maxOutputTokens,enableStreaming:false}}:{name:c(r),llm:{...e.llm,model:r,enableStreaming:false}}});let n=new c$1(process.cwd()).get();if(n.arena?.participants?.length>=2){let m=n.arena.participants.map(r=>K(r,a,e)).filter(r=>r!==void 0);if(m.length>=2)return m}let i=[{name:c(e.llm.model),llm:{...e.llm,maxTokens:R$1(e.llm.model),enableStreaming:false}}];if(e.llm.baseUrl?.includes("openrouter")){let r=e.llm.model.includes("claude")?"openai/gpt-5.4":"anthropic/claude-opus-4.6";i.push({name:c(r),llm:{...e.llm,model:r,maxTokens:R$1(r),enableStreaming:false}});}return i}a(j,"resolveParticipants");var S=["review","discussion","planning"];function E(e){let s,a,n,i,m=[],r=e.split(/\s+/);for(let t=0;t<r.length;t++)if(r[t]==="--models"&&r[t+1])s=r[++t];else if(r[t]==="--mode"&&r[t+1]){let o=r[++t].toLowerCase();S.includes(o)?a=o:console.log(l.yellow(` Unknown mode "${o}", valid: ${S.join(", ")}`));}else r[t]==="--base"&&r[t+1]?n=r[++t]:r[t]==="--head"&&r[t+1]?i=r[++t]:m.push(r[t]);return {models:s,mode:a,base:n,head:i,topic:m.join(" ").trim()}}a(E,"parseFlags");function R(){return [l.bold("Arena \u2014 Multi-model collaborative analysis"),"",l.dim("Usage:")," /arena review the authentication module"," /arena --models claude,gpt4o is the error handling correct?"," /arena --mode planning design the new auth system"," /arena --mode discussion should we use REST or GraphQL"," /arena --base main review changes since main",' code-shell arena "review my latest changes"',"",`${l.dim("Modes:")} review (default), discussion, planning`,l.dim("Mode is auto-detected from the topic if --mode is not specified."),"",l.dim("Flags:")," --base <ref> Base branch/ref for comparison"," --head <ref> Head branch/ref (default: HEAD)","",`${l.dim("Available model presets:")} ${Object.keys(Q$1).join(", ")}`].join(`
1
+ import {a as a$1}from'./chunk-MLCTC53I.js';import'./chunk-P6JSTIFM.js';import {c as c$1}from'./chunk-DTPABBSV.js';import {U,V,J,W,T as T$1,R as R$1,Q as Q$1}from'./chunk-2GJ7H5NC.js';export{W as formatArenaResultForSession}from'./chunk-2GJ7H5NC.js';import'./chunk-A4M2Y42L.js';import'./chunk-FU7AHZNN.js';import'./chunk-ZSAONDT6.js';import {h,a}from'./chunk-3QP5BQ3L.js';import l from'chalk';h();async function Q(e,s,a){let{models:n,mode:i,base:m,head:r,topic:t}=E(e),o=a?.output??(d=>console.log(d));if(!t){o(R());return}let f=j(s,n);if(f.length<2){o(L());return}let P=i?i.charAt(0).toUpperCase()+i.slice(1):"Auto";o(l.bold(`\u2550\u2550\u2550 Arena ${P} \u2550\u2550\u2550`)),o(l.dim(`Topic: ${t}`)),o(l.dim(`Models: ${f.map(d=>d.name).join(" vs ")}`));let x=a?.output?U(a.output):V,O=new J({participants:f,mode:i,enableContextTools:true,onProgress:x});try{let d=await O.run(t,{mode:i,base:m,head:r}),y=a?.outputMessage??a?.output;return y?y(W(d)):T$1(d),d}catch(d){o(l.red(`Arena failed: ${d.message}`));return}}a(Q,"runArenaReview");function T(e){let s=new a$1;try{let a=new c$1(process.cwd()).get();if(a.models?.length)for(let n of a.models)s.register({key:n.key,label:n.label,provider:n.provider??"",model:n.model,baseUrl:n.baseUrl??e.llm.baseUrl,apiKey:n.apiKey??e.llm.apiKey,maxOutputTokens:n.maxOutputTokens});}catch{}return s}a(T,"buildModelPool");function K(e,s,a){if(typeof e=="string"){let n=s.get(e);return n?{name:n.label??c(n.model),llm:{provider:n.provider,model:n.model,apiKey:n.apiKey??a.llm.apiKey,baseUrl:n.baseUrl??a.llm.baseUrl,temperature:.3,maxTokens:n.maxOutputTokens??R$1(n.model),enableStreaming:false}}:void 0}return {name:e.name,llm:{provider:e.provider??a.llm.provider,model:e.model,apiKey:e.apiKey??a.llm.apiKey,baseUrl:e.baseUrl??a.llm.baseUrl,temperature:.3,maxTokens:R$1(e.model),enableStreaming:false}}}a(K,"resolveOneParticipant");function j(e,s){let a=T(e);if(s)return s.split(",").map(r=>r.trim().toLowerCase()).map(r=>{let t=a.get(r);if(t)return {name:t.label??c(t.model),llm:{provider:t.provider,model:t.model,apiKey:t.apiKey??e.llm.apiKey,baseUrl:t.baseUrl??e.llm.baseUrl,temperature:.3,maxTokens:t.maxOutputTokens??R$1(t.model),enableStreaming:false}};let o=Q$1[r];return o?{name:c(o.model),llm:{provider:o.provider,model:o.model,apiKey:e.llm.apiKey,baseUrl:e.llm.baseUrl,temperature:.3,maxTokens:o.maxOutputTokens,enableStreaming:false}}:{name:c(r),llm:{...e.llm,model:r,enableStreaming:false}}});let n=new c$1(process.cwd()).get();if(n.arena?.participants?.length>=2){let m=n.arena.participants.map(r=>K(r,a,e)).filter(r=>r!==void 0);if(m.length>=2)return m}let i=[{name:c(e.llm.model),llm:{...e.llm,maxTokens:R$1(e.llm.model),enableStreaming:false}}];if(e.llm.baseUrl?.includes("openrouter")){let r=e.llm.model.includes("claude")?"openai/gpt-5.4":"anthropic/claude-opus-4.6";i.push({name:c(r),llm:{...e.llm,model:r,maxTokens:R$1(r),enableStreaming:false}});}return i}a(j,"resolveParticipants");var S=["review","discussion","planning"];function E(e){let s,a,n,i,m=[],r=e.split(/\s+/);for(let t=0;t<r.length;t++)if(r[t]==="--models"&&r[t+1])s=r[++t];else if(r[t]==="--mode"&&r[t+1]){let o=r[++t].toLowerCase();S.includes(o)?a=o:console.log(l.yellow(` Unknown mode "${o}", valid: ${S.join(", ")}`));}else r[t]==="--base"&&r[t+1]?n=r[++t]:r[t]==="--head"&&r[t+1]?i=r[++t]:m.push(r[t]);return {models:s,mode:a,base:n,head:i,topic:m.join(" ").trim()}}a(E,"parseFlags");function R(){return [l.bold("Arena \u2014 Multi-model collaborative analysis"),"",l.dim("Usage:")," /arena review the authentication module"," /arena --models claude,gpt4o is the error handling correct?"," /arena --mode planning design the new auth system"," /arena --mode discussion should we use REST or GraphQL"," /arena --base main review changes since main",' code-shell arena "review my latest changes"',"",`${l.dim("Modes:")} review (default), discussion, planning`,l.dim("Mode is auto-detected from the topic if --mode is not specified."),"",l.dim("Flags:")," --base <ref> Base branch/ref for comparison"," --head <ref> Head branch/ref (default: HEAD)","",`${l.dim("Available model presets:")} ${Object.keys(Q$1).join(", ")}`].join(`
2
2
  `)}a(R,"formatUsage");function L(e){return [l.red("Arena needs at least 2 models."),"","Use --models to specify:"," /arena --models claude,gpt4o review the code","","Or configure in ~/.code-shell/settings.json:",' "arena": { "participants": [',' { "name": "Claude", "model": "anthropic/claude-sonnet-4-20250514" },',' { "name": "GPT-4o", "model": "openai/gpt-4o" }'," ]}"].join(`
3
3
  `)}a(L,"formatModelHelp");function c(e){return (e.split("/").pop()??e).replace(/-\d.*$/,"").split("-").map(a=>a.charAt(0).toUpperCase()+a.slice(1)).join(" ")}a(c,"modelDisplayName");export{Q as runArenaReview};
@@ -1 +1 @@
1
- import {d,c as c$1,b as b$1}from'./chunk-FU7AHZNN.js';import {b}from'./chunk-B7K2OWKC.js';import {h,a}from'./chunk-3QP5BQ3L.js';h();var c=class g{constructor(e){this.config=e;this.provider=e.provider,this.model=e.model,this.temperature=e.temperature??.3,this.maxTokens=e.maxTokens??8192,this.timeout=e.timeout??12e4,this.retryMaxAttempts=e.retryMaxAttempts??3,this.enableStreaming=e.enableStreaming??true,this.initClient();}static{a(this,"LLMClientBase");}provider;model;temperature;maxTokens;timeout;retryMaxAttempts;enableStreaming;static onUsage;usage={records:[],totalPromptTokens:0,totalCompletionTokens:0,totalTokens:0,requestCount:0};recordUsage(e,i){i?.recordUsage!==false&&(this.usage.records.push(e),this.usage.totalPromptTokens+=e.promptTokens,this.usage.totalCompletionTokens+=e.completionTokens,this.usage.totalTokens+=e.totalTokens,this.usage.requestCount++,g.onUsage?.(this.model,e));}getUsage(){return {...this.usage}}async withRetry(e,i){let o=i??this.retryMaxAttempts,n;for(let t=1;t<=o;t++)try{return await e()}catch(r){if(n=r,r instanceof d)throw r;if(r instanceof c$1){let s=(r.retryAfter??t*2)*1e3;b.warn("llm.retry",{cat:"llm",provider:this.provider,model:this.model,attempt:t,of:o,reason:"rate_limit",waitMs:s}),await new Promise(T=>setTimeout(T,s));continue}if(t===o){b.error("llm.exhausted",{cat:"llm",provider:this.provider,model:this.model,attempts:o,error:r.message});break}let m=Math.min(1e3*Math.pow(2,t-1),3e4);b.warn("llm.retry",{cat:"llm",provider:this.provider,model:this.model,attempt:t,of:o,reason:"error",error:r.message,backoffMs:m}),await new Promise(s=>setTimeout(s,m));}throw n??new b$1("Unknown LLM error")}};export{c as a};
1
+ import {d,c as c$1,b as b$1}from'./chunk-FU7AHZNN.js';import {b}from'./chunk-ZSAONDT6.js';import {h,a}from'./chunk-3QP5BQ3L.js';h();var c=class g{constructor(e){this.config=e;this.provider=e.provider,this.model=e.model,this.temperature=e.temperature??.3,this.maxTokens=e.maxTokens??8192,this.timeout=e.timeout??12e4,this.retryMaxAttempts=e.retryMaxAttempts??3,this.enableStreaming=e.enableStreaming??true,this.initClient();}static{a(this,"LLMClientBase");}provider;model;temperature;maxTokens;timeout;retryMaxAttempts;enableStreaming;static onUsage;usage={records:[],totalPromptTokens:0,totalCompletionTokens:0,totalTokens:0,requestCount:0};recordUsage(e,i){i?.recordUsage!==false&&(this.usage.records.push(e),this.usage.totalPromptTokens+=e.promptTokens,this.usage.totalCompletionTokens+=e.completionTokens,this.usage.totalTokens+=e.totalTokens,this.usage.requestCount++,g.onUsage?.(this.model,e));}getUsage(){return {...this.usage}}async withRetry(e,i){let o=i??this.retryMaxAttempts,n;for(let t=1;t<=o;t++)try{return await e()}catch(r){if(n=r,r instanceof d)throw r;if(r instanceof c$1){let s=(r.retryAfter??t*2)*1e3;b.warn("llm.retry",{cat:"llm",provider:this.provider,model:this.model,attempt:t,of:o,reason:"rate_limit",waitMs:s}),await new Promise(T=>setTimeout(T,s));continue}if(t===o){b.error("llm.exhausted",{cat:"llm",provider:this.provider,model:this.model,attempts:o,error:r.message});break}let m=Math.min(1e3*Math.pow(2,t-1),3e4);b.warn("llm.retry",{cat:"llm",provider:this.provider,model:this.model,attempt:t,of:o,reason:"error",error:r.message,backoffMs:m}),await new Promise(s=>setTimeout(s,m));}throw n??new b$1("Unknown LLM error")}};export{c as a};
@@ -1,4 +1,4 @@
1
- import {c}from'./chunk-NVAZJ5XS.js';import {b as b$1}from'./chunk-FU7AHZNN.js';import {b}from'./chunk-B7K2OWKC.js';import {h,a}from'./chunk-3QP5BQ3L.js';import {execFile,execFileSync}from'child_process';import {existsSync,statSync,readFileSync,readdirSync,mkdirSync,writeFileSync,renameSync}from'fs';import {readdir,stat}from'fs/promises';import {resolve,join,extname}from'path';import {promisify}from'util';import {createHash}from'crypto';import {homedir}from'os';import R from'chalk';h();var Se=new Map;function He(n,e){Se.set(n,e);}a(He,"registerProvider");async function F(n){let e=Se.get(n.provider);if(!e){if(n.provider==="anthropic"){let{AnthropicClient:t}=await import('./anthropic-UBSB5AQH.js');He("anthropic",t),e=t;}else if(n.provider==="openai"){let{OpenAIClient:t}=await import('./openai-KEWQ54TM.js');He("openai",t),e=t;}}if(!e)throw new b$1(`Unknown LLM provider: ${n.provider}. Available: ${[...Se.keys()].join(", ")}`);return new e(n)}a(F,"createLLMClient");h();var Xe={review:{maxDiscussionRounds:3,convergenceThreshold:200},discussion:{maxDiscussionRounds:4,convergenceThreshold:300},planning:{maxDiscussionRounds:5,convergenceThreshold:400}},Qe={maxClaimsForReview:12,maxContestedClaimsForDebate:5,maxRequestedChecksPerClaimPerRound:2,maxReviewersPerClaim:2,maxRoadmapPhases:6,maxExpandedPhasesPerRun:6};function te(n){return typeof n.detailExpansionUserPrompt=="function"}a(te,"isStrategyPlanning");function M(n){return typeof n.verificationReviewUserPrompt=="function"}a(M,"isStrategyV2");h();h();function U(n){return typeof n=="string"?n:n==null?"":typeof n=="number"||typeof n=="boolean"?String(n):""}a(U,"asString");function K(n){return n?n.replace(/<\/?(?:system|assistant|user|system-reminder)[^>]*>/gi,"").replace(/^(?:IGNORE|DISREGARD|FORGET|OVERRIDE|SYSTEM|INSTRUCTION)[:\s].*/gim,"").slice(0,3e3):""}a(K,"sanitizeForPrompt");function H(n){let e=n.match(/```(?:json)?\s*\n([\s\S]*)\n\s*```/);if(e)return e[1].trim();let t=n.indexOf("{");if(t!==-1){let r=0,i=false,o=false;for(let s=t;s<n.length;s++){let c=n[s];if(o){o=false;continue}if(c==="\\"){o=true;continue}if(c==='"'){i=!i;continue}if(!i){if(c==="{")r++;else if(c==="}"&&(r--,r===0))return n.slice(t,s+1)}}return n.slice(t)}return n}a(H,"extractJSON");function tn(n){let e=n.match(/```(?:json)?\s*\n?([\s\S]*?)\n?```/);if(e)return e[1].trim();let t=n.match(/\[[\s\S]*\]/);return t?t[0]:n}a(tn,"extractJSONArray");function se(n){let e=[];n.quickFacts.length>0&&e.push(`## Quick Facts
1
+ import {c}from'./chunk-A4M2Y42L.js';import {b as b$1}from'./chunk-FU7AHZNN.js';import {b}from'./chunk-ZSAONDT6.js';import {h,a}from'./chunk-3QP5BQ3L.js';import {execFile,execFileSync}from'child_process';import {existsSync,statSync,readFileSync,readdirSync,mkdirSync,writeFileSync,renameSync}from'fs';import {readdir,stat}from'fs/promises';import {resolve,join,extname}from'path';import {promisify}from'util';import {createHash}from'crypto';import {homedir}from'os';import R from'chalk';h();var Se=new Map;function He(n,e){Se.set(n,e);}a(He,"registerProvider");async function F(n){let e=Se.get(n.provider);if(!e){if(n.provider==="anthropic"){let{AnthropicClient:t}=await import('./anthropic-OVRWAZRD.js');He("anthropic",t),e=t;}else if(n.provider==="openai"){let{OpenAIClient:t}=await import('./openai-3QEADSYL.js');He("openai",t),e=t;}}if(!e)throw new b$1(`Unknown LLM provider: ${n.provider}. Available: ${[...Se.keys()].join(", ")}`);return new e(n)}a(F,"createLLMClient");h();var Xe={review:{maxDiscussionRounds:3,convergenceThreshold:200},discussion:{maxDiscussionRounds:4,convergenceThreshold:300},planning:{maxDiscussionRounds:5,convergenceThreshold:400}},Qe={maxClaimsForReview:12,maxContestedClaimsForDebate:5,maxRequestedChecksPerClaimPerRound:2,maxReviewersPerClaim:2,maxRoadmapPhases:6,maxExpandedPhasesPerRun:6};function te(n){return typeof n.detailExpansionUserPrompt=="function"}a(te,"isStrategyPlanning");function U(n){return typeof n.verificationReviewUserPrompt=="function"}a(U,"isStrategyV2");h();h();function M(n){return typeof n=="string"?n:n==null?"":typeof n=="number"||typeof n=="boolean"?String(n):""}a(M,"asString");function K(n){return n?n.replace(/<\/?(?:system|assistant|user|system-reminder)[^>]*>/gi,"").replace(/^(?:IGNORE|DISREGARD|FORGET|OVERRIDE|SYSTEM|INSTRUCTION)[:\s].*/gim,"").slice(0,3e3):""}a(K,"sanitizeForPrompt");function H(n){let e=n.match(/```(?:json)?\s*\n([\s\S]*)\n\s*```/);if(e)return e[1].trim();let t=n.indexOf("{");if(t!==-1){let r=0,i=false,o=false;for(let s=t;s<n.length;s++){let c=n[s];if(o){o=false;continue}if(c==="\\"){o=true;continue}if(c==='"'){i=!i;continue}if(!i){if(c==="{")r++;else if(c==="}"&&(r--,r===0))return n.slice(t,s+1)}}return n.slice(t)}return n}a(H,"extractJSON");function tn(n){let e=n.match(/```(?:json)?\s*\n?([\s\S]*?)\n?```/);if(e)return e[1].trim();let t=n.match(/\[[\s\S]*\]/);return t?t[0]:n}a(tn,"extractJSONArray");function se(n){let e=[];n.quickFacts.length>0&&e.push(`## Quick Facts
2
2
  ${n.quickFacts.map(t=>`- ${t.label}: ${t.value}`).join(`
3
3
  `)}`);for(let t of n.artifacts){let r=t.ref?`${t.title} (${t.ref})`:t.title;e.push(`## ${t.kind.toUpperCase()}: ${r}
4
4
  \`\`\`
@@ -17,8 +17,8 @@ Findings:
17
17
  ${t}`}).join(`
18
18
 
19
19
  `)}a(E,"formatReports");function V(n){return n.length===0?"No peer reviews.":n.map(e=>`[${e.reviewer}] on ${e.findingId}: ${e.verdict}${e.reason?` \u2014 ${e.reason}`:""}`).join(`
20
- `)}a(V,"formatFindingReviews");function oe(n,e){if(!e||e.trim().length===0)return b.warn("arena.parse_report_empty",{participant:n}),{participant:n,contextSummary:"(no response)",findings:[]};let t=ct(n,e);if(t&&t.findings.length>0)return t;try{let r=H(e),i=JSON.parse(r),o=i.findings;!Array.isArray(o)&&i.contextSummary===void 0&&i.kind&&i.title&&(o=[i]);let s={participant:n,contextSummary:i.contextSummary??i.context_summary??"",findings:Array.isArray(o)?o.map(dt):[]};if(s.findings.length>0)return s}catch(r){b.warn("arena.parse_report_json_fail",{participant:n,error:r.message,textLength:e.length,text:e.slice(0,500)});}return t?(b.warn("arena.parse_report_no_findings",{participant:n,textPreview:e.slice(0,200)}),t):lt(n,e)}a(oe,"parseReport");function ct(n,e){let t=e.match(/<report\b[^>]*>([\s\S]*?)<\/report>/i);if(!t)return;let r=t[1],i=ie(re(r,"contextSummary")??""),o=re(r,"findings")??"",s=[],c=0;for(let m of o.matchAll(/<finding\b([^>]*)>([\s\S]*?)<\/finding>/gi)){let d=Ze(m[1]),l=m[2],p=ie(re(l,"title")??""),g=ie(re(l,"summary")??""),u=[];for(let $ of l.matchAll(/<evidence\b([^>]*)>([\s\S]*?)<\/evidence>/gi)){let b=Ze($[1]);u.push({type:b.type??"doc",ref:b.ref??"",note:ie($[2].trim())});}let h=re(l,"affectedFiles")??"",y=[];for(let $ of h.matchAll(/<file>([\s\S]*?)<\/file>/gi))y.push(ie($[1].trim()));let w=ie(re(l,"suggestedChange")??"").trim(),A=Number(d.confidence);s.push({id:d.id||`f${c+1}`,kind:rn(d.kind),title:p||"Untitled",summary:g,severity:d.severity||void 0,confidence:Number.isFinite(A)?A:.5,evidence:u,affectedFiles:y,suggestedChange:w||void 0}),c++;}return {participant:n,contextSummary:i,findings:s}}a(ct,"tryParseReportXml");function re(n,e){let t=new RegExp(`<${e}\\b[^>]*>([\\s\\S]*?)<\\/${e}>`,"i");return n.match(t)?.[1]}a(re,"extractTag");function Ze(n){let e={};for(let t of n.matchAll(/(\w+)\s*=\s*"([^"]*)"/g))e[t[1]]=t[2];return e}a(Ze,"parseAttrs");function ie(n){return n.replace(/<!\[CDATA\[([\s\S]*?)\]\]>/g,"$1").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&apos;/g,"'").replace(/&amp;/g,"&").trim()}a(ie,"decodeXmlText");function dt(n,e){return {id:U(n.id)||`f${e+1}`,kind:rn(n.kind),title:U(n.title)||"Untitled",summary:U(n.summary),severity:n.severity||void 0,confidence:typeof n.confidence=="number"?n.confidence:.5,evidence:Array.isArray(n.evidence)?n.evidence.map(t=>({type:t.type??"doc",ref:t.ref??"",note:t.note??""})):[],affectedFiles:Array.isArray(n.affectedFiles)?n.affectedFiles:[],suggestedChange:n.suggestedChange||void 0}}a(dt,"parseFinding");function rn(n){return n==="strength"||n==="improvement"||n==="risk"||n==="question"?n:"improvement"}a(rn,"validateFindingKind");function lt(n,e){let t=e.split(/(?:^|\n)(?:#{1,3}\s+|\d+\.\s+|\*\*[^*]+\*\*\s*\n|---+\s*\n)/m).map(i=>i.trim()).filter(i=>i.length>20);if(t.length===0)return {participant:n,contextSummary:e.slice(0,200),findings:[{id:`${n}-f1`,kind:"improvement",title:"Analysis",summary:e.slice(0,3e3),confidence:.5,evidence:[],affectedFiles:[]}]};let r=t.slice(0,10).map((i,o)=>{let s=i.split(`
21
- `)[0].slice(0,100),c=i.length>s.length?i.slice(s.length).trim():i;return {id:`${n}-f${o+1}`,kind:pt(i),title:s.replace(/^[-*•]\s*/,"").replace(/\*\*/g,""),summary:c.slice(0,1e3),confidence:.5,evidence:[],affectedFiles:ut(i)}});return {participant:n,contextSummary:e.slice(0,200),findings:r}}a(lt,"extractFindingsFromFreeText");function pt(n){let e=n.toLowerCase();return /\b(risk|danger|vulnerab|security|breaking|regression|critical)\b/.test(e)?"risk":/\b(good|well|strength|clean|solid|nice|excellent|properly)\b/.test(e)?"strength":/\b(question|unclear|confirm|clarif|why|how come|wonder)\b/.test(e)?"question":"improvement"}a(pt,"classifyFindingKind");function ut(n){let e=n.match(/(?:^|\s)((?:src|lib|packages|app)\/[\w\-/.]+\.\w+)/gm);return e?[...new Set(e.map(t=>t.trim()))]:[]}a(ut,"extractFilePaths");function ae(n,e){try{let t=tn(e),r=JSON.parse(t);if(!Array.isArray(r)){let i=H(e),o=JSON.parse(i);return Array.isArray(o.reviews)?o.reviews.map(s=>en(n,s)):[]}return r.map(i=>en(n,i))}catch{return []}}a(ae,"parseReviews");function en(n,e){return {reviewer:n,findingId:e.findingId??e.finding_id??"",verdict:sn(e.verdict),reason:e.reason??"",extraEvidence:Array.isArray(e.extraEvidence)?e.extraEvidence:void 0}}a(en,"parseReview");function sn(n){return n==="agree"||n==="refine"||n==="disagree"||n==="needs_evidence"?n:"agree"}a(sn,"validateVerdict");function ce(n){try{let e=H(n),t=JSON.parse(e);if(typeof t!="object"||t===null)throw new Error("parsed JSON is not an object");return {summary:U(t.summary),subjectSummary:U(t.subjectSummary||t.changeSummary)||void 0,strengths:Re(t.strengths),improvements:Re(t.improvements),risks:Re(t.risks),openQuestions:Re(t.openQuestions),roadmap:mt(t.roadmap),nextActions:Array.isArray(t.nextActions)?t.nextActions.map(r=>({title:r.title??"",priority:on(r.priority),rationale:r.rationale??"",relatedFindings:Array.isArray(r.relatedFindings)?r.relatedFindings:[]})):[]}}catch{return {summary:n,strengths:[],improvements:[],risks:[],openQuestions:[],roadmap:[],nextActions:[]}}}a(ce,"parseConsensus");function Re(n){return Array.isArray(n)?n.map(e=>({title:U(e.title),summary:e.summary??"",support:Array.isArray(e.support)?e.support:[],challenge:Array.isArray(e.challenge)?e.challenge:[],confidence:typeof e.confidence=="number"?e.confidence:.5,evidenceRefs:Array.isArray(e.evidenceRefs)?e.evidenceRefs:[]})):[]}a(Re,"parseConsensusItems");function mt(n){return Array.isArray(n)?n.map(e=>({title:e.title??"",priority:on(e.priority),goal:e.goal??e.description??"",scope:N(e.scope),deliverables:N(e.deliverables),dependencies:N(e.dependencies),risks:N(e.risks),successCriteria:N(e.successCriteria),relatedFindings:N(e.relatedFindings)})):[]}a(mt,"parseRoadmapPhases");function on(n){return n==="high"||n==="medium"||n==="low"?n:"medium"}a(on,"validatePriority");function N(n){return Array.isArray(n)?n.filter(e=>typeof e=="string"):[]}a(N,"toStringArray");function X(n){return n.length===0?"No claims to review.":n.map(e=>{let t=e.finding,r=e.evidenceRefs.length>0?`
20
+ `)}a(V,"formatFindingReviews");function oe(n,e){if(!e||e.trim().length===0)return b.warn("arena.parse_report_empty",{participant:n}),{participant:n,contextSummary:"(no response)",findings:[]};let t=ct(n,e);if(t&&t.findings.length>0)return t;try{let r=H(e),i=JSON.parse(r),o=i.findings;!Array.isArray(o)&&i.contextSummary===void 0&&i.kind&&i.title&&(o=[i]);let s={participant:n,contextSummary:i.contextSummary??i.context_summary??"",findings:Array.isArray(o)?o.map(dt):[]};if(s.findings.length>0)return s}catch(r){b.warn("arena.parse_report_json_fail",{participant:n,error:r.message,textLength:e.length,text:e.slice(0,500)});}return t?(b.warn("arena.parse_report_no_findings",{participant:n,textPreview:e.slice(0,200)}),t):lt(n,e)}a(oe,"parseReport");function ct(n,e){let t=e.match(/<report\b[^>]*>([\s\S]*?)<\/report>/i);if(!t)return;let r=t[1],i=ie(re(r,"contextSummary")??""),o=re(r,"findings")??"",s=[],c=0;for(let m of o.matchAll(/<finding\b([^>]*)>([\s\S]*?)<\/finding>/gi)){let d=Ze(m[1]),l=m[2],p=ie(re(l,"title")??""),g=ie(re(l,"summary")??""),u=[];for(let $ of l.matchAll(/<evidence\b([^>]*)>([\s\S]*?)<\/evidence>/gi)){let b=Ze($[1]);u.push({type:b.type??"doc",ref:b.ref??"",note:ie($[2].trim())});}let h=re(l,"affectedFiles")??"",y=[];for(let $ of h.matchAll(/<file>([\s\S]*?)<\/file>/gi))y.push(ie($[1].trim()));let w=ie(re(l,"suggestedChange")??"").trim(),A=Number(d.confidence);s.push({id:d.id||`f${c+1}`,kind:rn(d.kind),title:p||"Untitled",summary:g,severity:d.severity||void 0,confidence:Number.isFinite(A)?A:.5,evidence:u,affectedFiles:y,suggestedChange:w||void 0}),c++;}return {participant:n,contextSummary:i,findings:s}}a(ct,"tryParseReportXml");function re(n,e){let t=new RegExp(`<${e}\\b[^>]*>([\\s\\S]*?)<\\/${e}>`,"i");return n.match(t)?.[1]}a(re,"extractTag");function Ze(n){let e={};for(let t of n.matchAll(/(\w+)\s*=\s*"([^"]*)"/g))e[t[1]]=t[2];return e}a(Ze,"parseAttrs");function ie(n){return n.replace(/<!\[CDATA\[([\s\S]*?)\]\]>/g,"$1").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&apos;/g,"'").replace(/&amp;/g,"&").trim()}a(ie,"decodeXmlText");function dt(n,e){return {id:M(n.id)||`f${e+1}`,kind:rn(n.kind),title:M(n.title)||"Untitled",summary:M(n.summary),severity:n.severity||void 0,confidence:typeof n.confidence=="number"?n.confidence:.5,evidence:Array.isArray(n.evidence)?n.evidence.map(t=>({type:t.type??"doc",ref:t.ref??"",note:t.note??""})):[],affectedFiles:Array.isArray(n.affectedFiles)?n.affectedFiles:[],suggestedChange:n.suggestedChange||void 0}}a(dt,"parseFinding");function rn(n){return n==="strength"||n==="improvement"||n==="risk"||n==="question"?n:"improvement"}a(rn,"validateFindingKind");function lt(n,e){let t=e.split(/(?:^|\n)(?:#{1,3}\s+|\d+\.\s+|\*\*[^*]+\*\*\s*\n|---+\s*\n)/m).map(i=>i.trim()).filter(i=>i.length>20);if(t.length===0)return {participant:n,contextSummary:e.slice(0,200),findings:[{id:`${n}-f1`,kind:"improvement",title:"Analysis",summary:e.slice(0,3e3),confidence:.5,evidence:[],affectedFiles:[]}]};let r=t.slice(0,10).map((i,o)=>{let s=i.split(`
21
+ `)[0].slice(0,100),c=i.length>s.length?i.slice(s.length).trim():i;return {id:`${n}-f${o+1}`,kind:pt(i),title:s.replace(/^[-*•]\s*/,"").replace(/\*\*/g,""),summary:c.slice(0,1e3),confidence:.5,evidence:[],affectedFiles:ut(i)}});return {participant:n,contextSummary:e.slice(0,200),findings:r}}a(lt,"extractFindingsFromFreeText");function pt(n){let e=n.toLowerCase();return /\b(risk|danger|vulnerab|security|breaking|regression|critical)\b/.test(e)?"risk":/\b(good|well|strength|clean|solid|nice|excellent|properly)\b/.test(e)?"strength":/\b(question|unclear|confirm|clarif|why|how come|wonder)\b/.test(e)?"question":"improvement"}a(pt,"classifyFindingKind");function ut(n){let e=n.match(/(?:^|\s)((?:src|lib|packages|app)\/[\w\-/.]+\.\w+)/gm);return e?[...new Set(e.map(t=>t.trim()))]:[]}a(ut,"extractFilePaths");function ae(n,e){try{let t=tn(e),r=JSON.parse(t);if(!Array.isArray(r)){let i=H(e),o=JSON.parse(i);return Array.isArray(o.reviews)?o.reviews.map(s=>en(n,s)):[]}return r.map(i=>en(n,i))}catch{return []}}a(ae,"parseReviews");function en(n,e){return {reviewer:n,findingId:e.findingId??e.finding_id??"",verdict:sn(e.verdict),reason:e.reason??"",extraEvidence:Array.isArray(e.extraEvidence)?e.extraEvidence:void 0}}a(en,"parseReview");function sn(n){return n==="agree"||n==="refine"||n==="disagree"||n==="needs_evidence"?n:"agree"}a(sn,"validateVerdict");function ce(n){try{let e=H(n),t=JSON.parse(e);if(typeof t!="object"||t===null)throw new Error("parsed JSON is not an object");return {summary:M(t.summary),subjectSummary:M(t.subjectSummary||t.changeSummary)||void 0,strengths:Re(t.strengths),improvements:Re(t.improvements),risks:Re(t.risks),openQuestions:Re(t.openQuestions),roadmap:mt(t.roadmap),nextActions:Array.isArray(t.nextActions)?t.nextActions.map(r=>({title:r.title??"",priority:on(r.priority),rationale:r.rationale??"",relatedFindings:Array.isArray(r.relatedFindings)?r.relatedFindings:[]})):[]}}catch{return {summary:n,strengths:[],improvements:[],risks:[],openQuestions:[],roadmap:[],nextActions:[]}}}a(ce,"parseConsensus");function Re(n){return Array.isArray(n)?n.map(e=>({title:M(e.title),summary:e.summary??"",support:Array.isArray(e.support)?e.support:[],challenge:Array.isArray(e.challenge)?e.challenge:[],confidence:typeof e.confidence=="number"?e.confidence:.5,evidenceRefs:Array.isArray(e.evidenceRefs)?e.evidenceRefs:[]})):[]}a(Re,"parseConsensusItems");function mt(n){return Array.isArray(n)?n.map(e=>({title:e.title??"",priority:on(e.priority),goal:e.goal??e.description??"",scope:N(e.scope),deliverables:N(e.deliverables),dependencies:N(e.dependencies),risks:N(e.risks),successCriteria:N(e.successCriteria),relatedFindings:N(e.relatedFindings)})):[]}a(mt,"parseRoadmapPhases");function on(n){return n==="high"||n==="medium"||n==="low"?n:"medium"}a(on,"validatePriority");function N(n){return Array.isArray(n)?n.filter(e=>typeof e=="string"):[]}a(N,"toStringArray");function X(n){return n.length===0?"No claims to review.":n.map(e=>{let t=e.finding,r=e.evidenceRefs.length>0?`
22
22
  Evidence: ${e.evidenceRefs.join(", ")}`:"",i=e.evidencePacketIds.length>0?`
23
23
  Evidence packets: ${e.evidencePacketIds.join(", ")}`:"";return `- [${e.claimId}] (${t.kind}${t.severity?`, ${t.severity}`:""}, status: ${e.status})
24
24
  ${K(t.title)}
@@ -41,7 +41,7 @@ ${t}`}).join(`
41
41
  `):"No claims processed."}a(de,"formatClaimSummaryForConsensus");function I(n){let e=[];if(e.push(`Claims under review: ${n.relevantClaimIds.join(", ")}`),n.evidencePackets.length>0){e.push(`
42
42
  Evidence:`);for(let t of n.evidencePackets){e.push(` [${t.packetId}] ${K(t.title)} (${t.source}): ${K(t.summary)}`);for(let r of t.excerpts.slice(0,2))e.push(` > ${r.ref}: ${K(r.snippet)}`);}}if(n.recentChallenges.length>0){e.push(`
43
43
  Prior challenges:`);for(let t of n.recentChallenges)e.push(` [${t.reviewer}] on ${t.claimId}: ${t.verdict} \u2014 ${K(t.reason)}`);}return e.join(`
44
- `)}a(I,"formatDigestForPrompt");function Q(n,e){try{let t=tn(e),r=JSON.parse(t);if(!Array.isArray(r)){let i=H(e),o=JSON.parse(i);return Array.isArray(o.challenges)?o.challenges.map(s=>nn(n,s)):[]}return r.map(i=>nn(n,i))}catch{return []}}a(Q,"parseChallenges");function nn(n,e){return {reviewer:n,claimId:U(e.claimId??e.claim_id),verdict:sn(e.verdict),reason:U(e.reason),supportingEvidenceRefs:Array.isArray(e.supportingEvidenceRefs)?e.supportingEvidenceRefs:void 0,requestedChecks:Array.isArray(e.requestedChecks)?e.requestedChecks.map(t=>({requestId:t.requestId??`req-${Date.now()}-${Math.random().toString(36).slice(2,6)}`,claimId:e.claimId??e.claim_id??"",requester:n,description:t.description??"",refs:Array.isArray(t.refs)?t.refs:void 0,priority:gt(t.priority)})):void 0}}a(nn,"parseChallenge");function gt(n){if(n==="high"||n==="medium"||n==="low")return n}a(gt,"validateCheckPriority");function z(n,e){try{let t=H(e),r=JSON.parse(t);return {participant:n,stance:ft(r.stance),summary:r.summary??r.argument??"",newEvidenceRefs:Array.isArray(r.newEvidenceRefs)?r.newEvidenceRefs:void 0}}catch{return {participant:n,stance:"uncertain",summary:e.slice(0,1e3)}}}a(z,"parseDebateTurn");function ft(n){return n==="support"||n==="oppose"||n==="narrow"||n==="uncertain"?n:"uncertain"}a(ft,"validateStance");function W(n,e){try{let t=H(e),r=JSON.parse(t);return {claimId:n,outcome:ht(r.outcome),rationale:U(r.rationale),finalSummary:U(r.finalSummary??r.summary),supportingEvidenceRefs:Array.isArray(r.supportingEvidenceRefs)?r.supportingEvidenceRefs:[]}}catch{return {claimId:n,outcome:"unresolved",rationale:"Failed to parse adjudication response",finalSummary:e.slice(0,500),supportingEvidenceRefs:[]}}}a(W,"parseAdjudication");function ht(n){return n==="accepted"||n==="accepted_with_revision"||n==="rejected"||n==="unresolved"?n:"unresolved"}a(ht,"validateAdjudicationOutcome");function an(n){try{let e=H(n),t=JSON.parse(e);if(typeof t!="object"||t===null)throw new Error("parsed JSON is not an object");return {phaseTitle:U(t.phaseTitle),objective:U(t.objective),targetFiles:N(t.targetFiles),codeChanges:N(t.codeChanges),interfaces:N(t.interfaces),migrationSteps:N(t.migrationSteps),validation:N(t.validation),effort:yt(t.effort),blockers:N(t.blockers),evidenceRefs:N(t.evidenceRefs)}}catch{return {phaseTitle:"",objective:n.slice(0,500),targetFiles:[],codeChanges:[],interfaces:[],migrationSteps:[],validation:[],effort:"medium",blockers:[],evidenceRefs:[]}}}a(an,"parseDetailExpansion");function yt(n){return n==="small"||n==="medium"||n==="large"?n:"medium"}a(yt,"validateEffort");var me=class{static{a(this,"ReviewStrategy");}researchSystemPrompt(e){return `You are ${e}, a reviewer in a multi-model review arena.
44
+ `)}a(I,"formatDigestForPrompt");function Q(n,e){try{let t=tn(e),r=JSON.parse(t);if(!Array.isArray(r)){let i=H(e),o=JSON.parse(i);return Array.isArray(o.challenges)?o.challenges.map(s=>nn(n,s)):[]}return r.map(i=>nn(n,i))}catch{return []}}a(Q,"parseChallenges");function nn(n,e){return {reviewer:n,claimId:M(e.claimId??e.claim_id),verdict:sn(e.verdict),reason:M(e.reason),supportingEvidenceRefs:Array.isArray(e.supportingEvidenceRefs)?e.supportingEvidenceRefs:void 0,requestedChecks:Array.isArray(e.requestedChecks)?e.requestedChecks.map(t=>({requestId:t.requestId??`req-${Date.now()}-${Math.random().toString(36).slice(2,6)}`,claimId:e.claimId??e.claim_id??"",requester:n,description:t.description??"",refs:Array.isArray(t.refs)?t.refs:void 0,priority:gt(t.priority)})):void 0}}a(nn,"parseChallenge");function gt(n){if(n==="high"||n==="medium"||n==="low")return n}a(gt,"validateCheckPriority");function z(n,e){try{let t=H(e),r=JSON.parse(t);return {participant:n,stance:ft(r.stance),summary:r.summary??r.argument??"",newEvidenceRefs:Array.isArray(r.newEvidenceRefs)?r.newEvidenceRefs:void 0}}catch{return {participant:n,stance:"uncertain",summary:e.slice(0,1e3)}}}a(z,"parseDebateTurn");function ft(n){return n==="support"||n==="oppose"||n==="narrow"||n==="uncertain"?n:"uncertain"}a(ft,"validateStance");function W(n,e){try{let t=H(e),r=JSON.parse(t);return {claimId:n,outcome:ht(r.outcome),rationale:M(r.rationale),finalSummary:M(r.finalSummary??r.summary),supportingEvidenceRefs:Array.isArray(r.supportingEvidenceRefs)?r.supportingEvidenceRefs:[]}}catch{return {claimId:n,outcome:"unresolved",rationale:"Failed to parse adjudication response",finalSummary:e.slice(0,500),supportingEvidenceRefs:[]}}}a(W,"parseAdjudication");function ht(n){return n==="accepted"||n==="accepted_with_revision"||n==="rejected"||n==="unresolved"?n:"unresolved"}a(ht,"validateAdjudicationOutcome");function an(n){try{let e=H(n),t=JSON.parse(e);if(typeof t!="object"||t===null)throw new Error("parsed JSON is not an object");return {phaseTitle:M(t.phaseTitle),objective:M(t.objective),targetFiles:N(t.targetFiles),codeChanges:N(t.codeChanges),interfaces:N(t.interfaces),migrationSteps:N(t.migrationSteps),validation:N(t.validation),effort:yt(t.effort),blockers:N(t.blockers),evidenceRefs:N(t.evidenceRefs)}}catch{return {phaseTitle:"",objective:n.slice(0,500),targetFiles:[],codeChanges:[],interfaces:[],migrationSteps:[],validation:[],effort:"medium",blockers:[],evidenceRefs:[]}}}a(an,"parseDetailExpansion");function yt(n){return n==="small"||n==="medium"||n==="large"?n:"medium"}a(yt,"validateEffort");var me=class{static{a(this,"ReviewStrategy");}researchSystemPrompt(e){return `You are ${e}, a reviewer in a multi-model review arena.
45
45
 
46
46
  You may have access to read-only tools to fetch additional context. The base context is intentionally lean \u2014 use tools to inspect details as needed.
47
47
 
@@ -508,7 +508,7 @@ Requirements:
508
508
  `)},crossReviewUserPrompt(d,l,p){return [Y(e),"",n.crossReviewUserPrompt(d,l,p)].join(`
509
509
  `)},parseCrossReviewResponse(d,l){return n.parseCrossReviewResponse(d,l)},consensusSystemPrompt(){return [n.consensusSystemPrompt(),"","\u2500\u2500 Moderator Perspective \u2500\u2500",o,"","\u2500\u2500 Scenario Support \u2500\u2500",m].join(`
510
510
  `)},consensusUserPrompt(d,l,p){return [Y(e),"",n.consensusUserPrompt(d,l,p)].join(`
511
- `)},parseConsensusResponse(d){return n.parseConsensusResponse(d)},preferredFindingKinds(){let d=n.preferredFindingKinds(),l=t.flatMap(h=>h.preferredFindingKinds),p=e.outputShape.emphasize,g=new Set,u=[];for(let h of [...p,...d,...l])g.has(h)||(g.add(h),u.push(h));return u},...M(n)?{verificationReviewUserPrompt(d,l,p,g){return [Y(e),"",n.verificationReviewUserPrompt(d,l,p,g)].join(`
511
+ `)},parseConsensusResponse(d){return n.parseConsensusResponse(d)},preferredFindingKinds(){let d=n.preferredFindingKinds(),l=t.flatMap(h=>h.preferredFindingKinds),p=e.outputShape.emphasize,g=new Set,u=[];for(let h of [...p,...d,...l])g.has(h)||(g.add(h),u.push(h));return u},...U(n)?{verificationReviewUserPrompt(d,l,p,g){return [Y(e),"",n.verificationReviewUserPrompt(d,l,p,g)].join(`
512
512
  `)},parseVerificationReviewResponse(d,l){return n.parseVerificationReviewResponse(d,l)},debateTurnUserPrompt(d,l,p,g){return [Y(e),"",n.debateTurnUserPrompt(d,l,p,g)].join(`
513
513
  `)},parseDebateTurnResponse(d,l){return n.parseDebateTurnResponse(d,l)},adjudicationUserPrompt(d,l,p,g){return [Y(e),"",n.adjudicationUserPrompt(d,l,p,g)].join(`
514
514
  `)},parseAdjudicationResponse(d){return n.parseAdjudicationResponse(d)},claimAwareConsensusUserPrompt(d,l,p,g){return [Y(e),"",n.claimAwareConsensusUserPrompt(d,l,p,g)].join(`
@@ -565,20 +565,20 @@ Analyze the user request above and output the arena plan as JSON.`}],maxTokens:1
565
565
  `)});}let h=s?["diff",`${i}...${o}`]:["diff","HEAD"],y=J(h);if(!y&&!s&&(y=J(["diff","--cached"])),y){let w=y.length>De,A=w?y.slice(0,De).slice(0,y.slice(0,De).lastIndexOf(`
566
566
  `)):y;t.push({id:"git-diff",kind:"diff",source:"git",title:"Diff",preview:A+(w?`
567
567
 
568
- ... TRUNCATED (${y.length} chars total). Use read_file to inspect specific files.`:""),metadata:{totalChars:y.length,truncated:w}});}if(!y&&!p){let w=J(["status","--short"]);w&&t.push({id:"git-status",kind:"doc",source:"git",title:"Git Status",preview:w});}return b.info("arena.provider.git",{artifactCount:t.length,hasCompare:s}),t}};function J(n){try{return execFileSync("git",n,{encoding:"utf-8",maxBuffer:1024*1024,timeout:1e4}).trim()}catch{return ""}}a(J,"git");function vn(n){if(!n)return;let e=n.replace(/\.{2,}/g,"");return e=e.replace(/[^a-zA-Z0-9/_\-~^.]/g,""),e||void 0}a(vn,"sanitizeRef");function _t(n){let e=new Map;for(let t of n){let r=t.split("/"),i=r.length>2?r.slice(0,2).join("/"):r[0];e.set(i,(e.get(i)??0)+1);}return [...e.entries()].sort((t,r)=>r[1]-t[1])}a(_t,"clusterByDirectory");h();var Rn=8e3,Lt=3e3,wn=400,xn=promisify(execFile),Fe={kind:"repo",async collect(n,e){let t=[],r=n.sources.find(s=>s.kind==="repo")?.targets??[],i=await An(".",2);i&&t.push({id:"repo-tree",kind:"tree",source:"repo",title:"Project Structure",preview:i});for(let s of r){if(!existsSync(s))continue;if(statSync(s).isDirectory()){let m=await An(s,3);m&&t.push({id:`repo-tree-${s}`,kind:"tree",source:"repo",title:`Directory: ${s}`,preview:m});for(let d of (await Ft(s)).slice(0,3)){let l=bn(d);l&&t.push({id:`repo-file-${d}`,kind:"file",source:"repo",title:d,ref:d,preview:Cn(l)});}}else {let m=bn(s);m&&t.push({id:`repo-file-${s}`,kind:"file",source:"repo",title:s,ref:s,preview:Cn(m)});}}if(r.length===0){let s=Mt(e).slice(0,5),c=await Promise.all(s.map(m=>It(m)));for(let m=0;m<s.length;m++){let d=s[m],l=c[m]??"";if(!l)continue;let p=l.split(`
568
+ ... TRUNCATED (${y.length} chars total). Use read_file to inspect specific files.`:""),metadata:{totalChars:y.length,truncated:w}});}if(!y&&!p){let w=J(["status","--short"]);w&&t.push({id:"git-status",kind:"doc",source:"git",title:"Git Status",preview:w});}return b.info("arena.provider.git",{artifactCount:t.length,hasCompare:s}),t}};function J(n){try{return execFileSync("git",n,{encoding:"utf-8",maxBuffer:1024*1024,timeout:1e4}).trim()}catch{return ""}}a(J,"git");function vn(n){if(!n)return;let e=n.replace(/\.{2,}/g,"");return e=e.replace(/[^a-zA-Z0-9/_\-~^.]/g,""),e||void 0}a(vn,"sanitizeRef");function _t(n){let e=new Map;for(let t of n){let r=t.split("/"),i=r.length>2?r.slice(0,2).join("/"):r[0];e.set(i,(e.get(i)??0)+1);}return [...e.entries()].sort((t,r)=>r[1]-t[1])}a(_t,"clusterByDirectory");h();var Rn=8e3,Lt=3e3,wn=400,xn=promisify(execFile),Fe={kind:"repo",async collect(n,e){let t=[],r=n.sources.find(s=>s.kind==="repo")?.targets??[],i=await An(".",2);i&&t.push({id:"repo-tree",kind:"tree",source:"repo",title:"Project Structure",preview:i});for(let s of r){if(!existsSync(s))continue;if(statSync(s).isDirectory()){let m=await An(s,3);m&&t.push({id:`repo-tree-${s}`,kind:"tree",source:"repo",title:`Directory: ${s}`,preview:m});for(let d of (await Ft(s)).slice(0,3)){let l=bn(d);l&&t.push({id:`repo-file-${d}`,kind:"file",source:"repo",title:d,ref:d,preview:Cn(l)});}}else {let m=bn(s);m&&t.push({id:`repo-file-${s}`,kind:"file",source:"repo",title:s,ref:s,preview:Cn(m)});}}if(r.length===0){let s=Ut(e).slice(0,5),c=await Promise.all(s.map(m=>It(m)));for(let m=0;m<s.length;m++){let d=s[m],l=c[m]??"";if(!l)continue;let p=l.split(`
569
569
  `).filter(Boolean).slice(0,10);for(let g of p)t.some(u=>u.ref===g)||t.push({id:`repo-grep-${d}-${g}`,kind:"grep",source:"repo",title:`Match: ${d} \u2192 ${g}`,ref:g,preview:g});}}if(!n.sources.some(s=>s.kind==="git")){let s=await Nt();s&&t.push({id:"repo-recent-activity",kind:"doc",source:"repo",title:"Recent Git Activity",preview:s});}return b.info("arena.provider.repo",{artifactCount:t.length}),t}};async function An(n,e){let t=[];return await $n(n,e,0,"",t,{n:0}),t.filter(Boolean).join(`
570
570
  `)}a(An,"buildTree");async function $n(n,e,t,r,i,o){if(t>=e||o.n>=wn)return;let s;try{s=(await readdir(n)).filter(c=>!c.startsWith(".")&&c!=="node_modules"&&c!=="dist"&&c!=="__pycache__");}catch{return}for(let c of s.slice(0,30)){if(o.n>=wn)return;o.n++;let m=join(n,c),d=false;try{d=(await stat(m)).isDirectory();}catch{continue}i.push(`${r}${d?"/":""} ${c}`),d&&t<e-1&&await $n(m,e,t+1,r+" ",i,o);}}a($n,"walkTree");async function Ft(n){let e=[];try{let t=await readdir(n),r=["index.ts","index.js","main.ts","main.js","mod.ts","__init__.py"];for(let i of r)t.includes(i)&&e.push(join(n,i));for(let i of t){let o=join(n,i);/\.(ts|js|tsx|jsx|py)$/.test(i)&&!e.includes(o)&&e.push(o);}}catch{}return e}a(Ft,"collectEntryFiles");function bn(n){try{return !existsSync(n)||statSync(n).size>5e5?null:readFileSync(n,"utf-8")}catch{return null}}a(bn,"safeReadFile");function Cn(n){if(n.length<=Rn)return n;let e=n.slice(0,Rn),t=e.lastIndexOf(`
571
571
  `);return e.slice(0,t)+`
572
- ... (truncated, ${n.length} chars total)`}a(Cn,"truncate");async function It(n){try{let{stdout:e}=await xn("grep",["-rl","--include=*.ts","--include=*.js","--include=*.py","--include=*.md","-i",n,"."],{encoding:"utf-8",maxBuffer:1048576,timeout:Lt});return e.trim()}catch(e){let t=e;return t?.code===1||b.warn("arena.provider.grep_failed",{pattern:n,code:t?.code,killed:t?.killed,signal:t?.signal}),""}}a(It,"safeGrep");async function Nt(){try{let{stdout:n}=await xn("git",["log","--oneline","-10"],{encoding:"utf-8",maxBuffer:1048576,timeout:1e4});return n.trim()}catch{return ""}}a(Nt,"gitLog");function Mt(n){let e=new Set(["the","a","an","is","are","was","were","be","been","have","has","do","does","did","will","would","could","should","may","might","to","of","in","for","on","with","at","by","from","about","and","but","or","not","this","that","my","your","what","how","review","discuss","plan","help","please","look","check","\u4E00\u4E0B","\u770B\u770B","\u5E2E","\u6211","\u7684","\u662F\u5426","\u600E\u4E48","\u5982\u4F55","\u8BA8\u8BBA","\u89C4\u5212","\u5BA1\u67E5"]);return n.split(/[\s,;:]+/).map(t=>t.toLowerCase().replace(/[^a-z0-9_\-/]/g,"")).filter(t=>t.length>2&&!e.has(t))}a(Mt,"extractSearchHints");h();var jn=1e4,Bt=new Set([".md",".txt",".rst",".adoc",".org"]),Ie={kind:"docs",collect(n,e){let t=[],i=n.sources.find(o=>o.kind==="docs")?.targets??[];for(let o of i){let s=_n(o);s&&t.push({id:`doc-${o}`,kind:"doc",source:"docs",title:o,ref:o,preview:Tn(s)});}if(i.length===0){let o=["docs","doc","design","specs","proposals","."],s=new Set;for(let c of o){if(!existsSync(c))continue;let m=On(c,2);for(let d of m){if(s.has(d))continue;s.add(d);let l=d.toLowerCase();if(e.toLowerCase().split(/\s+/).filter(h=>h.length>2).some(h=>l.includes(h))||s.size<=5){let h=_n(d);h&&t.push({id:`doc-${d}`,kind:"doc",source:"docs",title:d,ref:d,preview:Tn(h)});}}}}return b.info("arena.provider.docs",{artifactCount:t.length}),t}};function On(n,e,t=0){if(t>=e)return [];let r=[];try{let i=readdirSync(n);for(let o of i){if(o.startsWith(".")||o==="node_modules")continue;let s=join(n,o),c=statSync(s);c.isFile()&&Bt.has(extname(o).toLowerCase())?r.push(s):c.isDirectory()&&t<e-1&&r.push(...On(s,e,t+1));}}catch{}return r}a(On,"findDocFiles");function _n(n){try{return !existsSync(n)||statSync(n).size>5e5?null:readFileSync(n,"utf-8")}catch{return null}}a(_n,"safeReadDoc");function Tn(n){if(n.length<=jn)return n;let e=n.slice(0,jn),t=e.lastIndexOf(`
572
+ ... (truncated, ${n.length} chars total)`}a(Cn,"truncate");async function It(n){try{let{stdout:e}=await xn("grep",["-rl","--include=*.ts","--include=*.js","--include=*.py","--include=*.md","-i",n,"."],{encoding:"utf-8",maxBuffer:1048576,timeout:Lt});return e.trim()}catch(e){let t=e;return t?.code===1||b.warn("arena.provider.grep_failed",{pattern:n,code:t?.code,killed:t?.killed,signal:t?.signal}),""}}a(It,"safeGrep");async function Nt(){try{let{stdout:n}=await xn("git",["log","--oneline","-10"],{encoding:"utf-8",maxBuffer:1048576,timeout:1e4});return n.trim()}catch{return ""}}a(Nt,"gitLog");function Ut(n){let e=new Set(["the","a","an","is","are","was","were","be","been","have","has","do","does","did","will","would","could","should","may","might","to","of","in","for","on","with","at","by","from","about","and","but","or","not","this","that","my","your","what","how","review","discuss","plan","help","please","look","check","\u4E00\u4E0B","\u770B\u770B","\u5E2E","\u6211","\u7684","\u662F\u5426","\u600E\u4E48","\u5982\u4F55","\u8BA8\u8BBA","\u89C4\u5212","\u5BA1\u67E5"]);return n.split(/[\s,;:]+/).map(t=>t.toLowerCase().replace(/[^a-z0-9_\-/]/g,"")).filter(t=>t.length>2&&!e.has(t))}a(Ut,"extractSearchHints");h();var jn=1e4,Bt=new Set([".md",".txt",".rst",".adoc",".org"]),Ie={kind:"docs",collect(n,e){let t=[],i=n.sources.find(o=>o.kind==="docs")?.targets??[];for(let o of i){let s=_n(o);s&&t.push({id:`doc-${o}`,kind:"doc",source:"docs",title:o,ref:o,preview:Tn(s)});}if(i.length===0){let o=["docs","doc","design","specs","proposals","."],s=new Set;for(let c of o){if(!existsSync(c))continue;let m=On(c,2);for(let d of m){if(s.has(d))continue;s.add(d);let l=d.toLowerCase();if(e.toLowerCase().split(/\s+/).filter(h=>h.length>2).some(h=>l.includes(h))||s.size<=5){let h=_n(d);h&&t.push({id:`doc-${d}`,kind:"doc",source:"docs",title:d,ref:d,preview:Tn(h)});}}}}return b.info("arena.provider.docs",{artifactCount:t.length}),t}};function On(n,e,t=0){if(t>=e)return [];let r=[];try{let i=readdirSync(n);for(let o of i){if(o.startsWith(".")||o==="node_modules")continue;let s=join(n,o),c=statSync(s);c.isFile()&&Bt.has(extname(o).toLowerCase())?r.push(s):c.isDirectory()&&t<e-1&&r.push(...On(s,e,t+1));}}catch{}return r}a(On,"findDocFiles");function _n(n){try{return !existsSync(n)||statSync(n).size>5e5?null:readFileSync(n,"utf-8")}catch{return null}}a(_n,"safeReadDoc");function Tn(n){if(n.length<=jn)return n;let e=n.slice(0,jn),t=e.lastIndexOf(`
573
573
  `);return e.slice(0,t)+`
574
574
  ... (truncated, ${n.length} chars total)`}a(Tn,"truncate");h();var Ae={kind:"none",collect(n,e){return []}};var Yt={git:Oe,repo:Fe,docs:Ie,web:Ae,none:Ae},Ln=8e3;async function Fn(n,e,t={}){let r=[],i=[],o=new Set,{onProgress:s,signal:c}=t,m=[];for(let u of n.sources){if(o.has(u.kind))continue;o.add(u.kind);let h=Yt[u.kind];h&&(s?.({type:"evidence_started",source:u.kind}),m.push(Jt(h,n,e,c)));}let d=await Promise.all(m);for(let u of d)r.push(...u.artifacts),b.info("arena.evidence_collected",{source:u.kind,count:u.artifacts.length,durationMs:u.durationMs,timedOut:u.timedOut||void 0}),s?.({type:"evidence_collected",source:u.kind,count:u.artifacts.length,durationMs:u.durationMs,timedOut:u.timedOut});let l=r.find(u=>u.id==="git-branch");l&&i.push({label:"Branch",value:l.preview});let p=r.find(u=>u.id==="git-changed-files");p?.metadata?.totalCount&&i.push({label:"Changed Files",value:String(p.metadata.totalCount)});let g=r.filter(u=>u.source==="docs").length;return g>0&&i.push({label:"Documents",value:String(g)}),i.push({label:"Sources",value:[...o].join(", ")}),i.push({label:"Lenses",value:n.lenses.map(u=>u.name).join(", ")}),{artifacts:r,quickFacts:i}}a(Fn,"collectEvidence");async function Jt(n,e,t,r){let i=Date.now(),o=false,s,c,m=a(()=>{s&&(clearTimeout(s),s=void 0),c&&(r?.removeEventListener("abort",c),c=void 0);},"cleanup"),d=Promise.resolve().then(()=>n.collect(e,t)),l=new Promise(g=>{s=setTimeout(()=>{o=true,b.warn("arena.provider.timeout",{source:n.kind,ms:Ln}),g([]);},Ln),typeof s.unref=="function"&&s.unref(),r&&(c=a(()=>g([]),"abortHandler"),r.addEventListener("abort",c,{once:true}));}),p;try{p=await Promise.race([d,l]);}catch(g){b.warn("arena.provider.error",{source:n.kind,error:g.message}),p=[];}finally{m();}return {kind:n.kind,artifacts:p,durationMs:Date.now()-i,timedOut:o}}a(Jt,"runProviderWithTimeout");h();h();var In=15e3,he=3,Nn=resolve("."),le=[{name:"read_file",description:"Read a file from the repository. Use this when you need to see the full source of a file referenced in the context, or to check surrounding code (callers, type definitions, etc.).",inputSchema:{type:"object",properties:{path:{type:"string",description:"Relative file path from repo root"},offset:{type:"number",description:"Start line (1-based, optional)"},limit:{type:"number",description:"Max lines to read (optional, default 200)"}},required:["path"]}},{name:"grep_code",description:"Search for a pattern across the codebase. Use this to find callers, references, type definitions, or usages of symbols.",inputSchema:{type:"object",properties:{pattern:{type:"string",description:"Regex pattern to search for"},glob:{type:"string",description:"File glob filter, e.g. '*.ts' (optional)"}},required:["pattern"]}},{name:"list_files",description:"List files in a directory. Use this to understand project structure around relevant files.",inputSchema:{type:"object",properties:{path:{type:"string",description:"Directory path relative to repo root (default: '.')"}},required:[]}},{name:"git_show",description:"Show a git object (commit, file at a ref, etc.). Use for inspecting specific commits or viewing a file at a different branch/commit.",inputSchema:{type:"object",properties:{ref:{type:"string",description:"Git ref, e.g. 'HEAD~3', 'main:src/foo.ts', commit hash"}},required:["ref"]}},{name:"git_blame",description:"Show git blame for a file. Use to understand who changed what and when.",inputSchema:{type:"object",properties:{path:{type:"string",description:"File path"},lines:{type:"string",description:"Line range, e.g. '10,20' (optional)"}},required:["path"]}}];function be(n){try{switch(n.toolName){case "read_file":return Zt(n.args);case "grep_code":return er(n.args);case "list_files":return nr(n.args);case "git_show":return tr(n.args);case "git_blame":return rr(n.args);default:return `Unknown tool: ${n.toolName}`}}catch(e){return `Tool error: ${e.message}`}}a(be,"executeContextTool");function Ne(n){let e=resolve(n);return e===Nn||e.startsWith(Nn+"/")?e:null}a(Ne,"validatePath");function Zt(n){let e=n.path;if(!Ne(e))return `Error: path outside repository: ${e}`;if(!existsSync(e))return `Error: file not found: ${e}`;let r=readFileSync(e,"utf-8").split(`
575
575
  `),i=Math.max(0,(n.offset??1)-1),o=n.limit??200,c=r.slice(i,i+o).map((m,d)=>`${i+d+1} ${m}`).join(`
576
- `);return Un(c)}a(Zt,"executeReadFile");function er(n){let e=n.pattern,t=n.glob,r=["-rn","-E","--"];return t&&r.splice(1,0,`--include=${t}`),r.push(e,"."),Me("grep",r,80)||"No matches found."}a(er,"executeGrepCode");function nr(n){let e=n.path||".";if(!Ne(e))return `Error: path outside repository: ${e}`;try{let t=readdirSync(e),r=[];for(let i of t.slice(0,50)){let o=join(e,i);try{let s=statSync(o),c=s.isDirectory()?"d":"-",m=s.isDirectory()?"":` ${s.size}`;r.push(`${c} ${i}${m}`);}catch{r.push(`? ${i}`);}}return r.join(`
577
- `)||`Empty directory: ${e}`}catch{return `Directory not found: ${e}`}}a(nr,"executeListFiles");function tr(n){let e=ir(n.ref);if(!e)return "Error: invalid git ref";let t=Me("git",["show","--",e],200);return Un(t||`Could not resolve: ${e}`)}a(tr,"executeGitShow");function rr(n){let e=n.path;if(!Ne(e))return `Error: path outside repository: ${e}`;let t=n.lines,r=["blame"];return t&&/^\d+,\d+$/.test(t)&&r.push("-L",t),r.push("--",e),Me("git",r,50)||`Could not blame: ${e}`}a(rr,"executeGitBlame");function ir(n){if(!n||n.length>200)return null;let e=n.replace(/[^a-zA-Z0-9/_\-~^.:]/g,"");return /\.\.\/|;\s|&&|\|\||`|\$\(/.test(e)?null:e||null}a(ir,"sanitizeGitRef");function Me(n,e,t){try{let r=execFileSync(n,e,{encoding:"utf-8",maxBuffer:524288,timeout:1e4}).trim();if(t){let i=r.split(`
576
+ `);return Mn(c)}a(Zt,"executeReadFile");function er(n){let e=n.pattern,t=n.glob,r=["-rn","-E","--"];return t&&r.splice(1,0,`--include=${t}`),r.push(e,"."),Ue("grep",r,80)||"No matches found."}a(er,"executeGrepCode");function nr(n){let e=n.path||".";if(!Ne(e))return `Error: path outside repository: ${e}`;try{let t=readdirSync(e),r=[];for(let i of t.slice(0,50)){let o=join(e,i);try{let s=statSync(o),c=s.isDirectory()?"d":"-",m=s.isDirectory()?"":` ${s.size}`;r.push(`${c} ${i}${m}`);}catch{r.push(`? ${i}`);}}return r.join(`
577
+ `)||`Empty directory: ${e}`}catch{return `Directory not found: ${e}`}}a(nr,"executeListFiles");function tr(n){let e=ir(n.ref);if(!e)return "Error: invalid git ref";let t=Ue("git",["show","--",e],200);return Mn(t||`Could not resolve: ${e}`)}a(tr,"executeGitShow");function rr(n){let e=n.path;if(!Ne(e))return `Error: path outside repository: ${e}`;let t=n.lines,r=["blame"];return t&&/^\d+,\d+$/.test(t)&&r.push("-L",t),r.push("--",e),Ue("git",r,50)||`Could not blame: ${e}`}a(rr,"executeGitBlame");function ir(n){if(!n||n.length>200)return null;let e=n.replace(/[^a-zA-Z0-9/_\-~^.:]/g,"");return /\.\.\/|;\s|&&|\|\||`|\$\(/.test(e)?null:e||null}a(ir,"sanitizeGitRef");function Ue(n,e,t){try{let r=execFileSync(n,e,{encoding:"utf-8",maxBuffer:524288,timeout:1e4}).trim();if(t){let i=r.split(`
578
578
  `);if(i.length>t)return i.slice(0,t).join(`
579
579
  `)+`
580
- ... (${i.length-t} more lines)`}return r}catch{return ""}}a(Me,"execFileSafe");function Un(n){return n.length<=In?n:n.slice(0,In)+`
581
- ... (truncated)`}a(Un,"truncateResult");var Ue={repo_readonly:{name:"repo_readonly",toolNames:["read_file","grep_code","list_files"]},git:{name:"git",toolNames:["read_file","grep_code","list_files","git_show","git_blame"]},docs:{name:"docs",toolNames:["read_file","list_files"]},no_tools:{name:"no_tools",toolNames:[]}},Kn={git:"git",repo:"repo_readonly",docs:"docs",web:"no_tools",none:"no_tools"};function qn(n){let e=new Set;for(let t of n.sources){let r=t.toolPack??Kn[t.kind]??"no_tools",i=Ue[r]??Ue.no_tools;for(let o of i.toolNames)e.add(o);}return e.size===0?[]:le.filter(t=>e.has(t.name))}a(qn,"selectTools");function Ns(n){return n.sources.some(e=>{let t=Kn[e.kind],r=Ue[t];return r&&r.toolNames.length>0})}a(Ns,"hasTools");h();async function Js(n){return (await Ke(n)).map(t=>t.report)}a(Js,"runParticipantResearch");async function Ke(n){let{participants:e,strategy:t,topic:r,baseContext:i,enableContextTools:o,contextTools:s,signal:c,onProgress:m}=n,d=o?s??le:void 0,l=e.map(async p=>{m?.({type:"research_start",participant:p.name});let g=await F({...p.llm,enableStreaming:false}),u=[{role:"user",content:t.researchUserPrompt(r,i)}],h="",y=0,w=[],A=[],$=30;for(let P=0;P<=he;P++){if(y=P,u.length>=$){b.warn("arena.research_message_limit",{participant:p.name,messageCount:u.length,round:P});break}let x=await g.createMessage({systemPrompt:t.researchSystemPrompt(p.name),messages:u,tools:d,signal:c}),q=(x.toolCalls??[]).map(O=>O.toolName),D=x.toolCalls&&x.toolCalls.length>0;if(b.info("arena.research_round",{participant:p.name,round:P,toolCount:x.toolCalls?.length??0,toolNames:q,textLen:x.text?.length??0,stopReason:x.stopReason??"unknown"}),!D){h=x.text;break}m?.({type:"context_lookup",participant:p.name,tools:x.toolCalls.map(O=>`${O.toolName}(${JSON.stringify(O.args)})`)});let _=[];x.text&&_.push({type:"text",text:x.text});for(let O of x.toolCalls)_.push({type:"tool_use",id:O.id,name:O.toolName,input:O.args});u.push({role:"assistant",content:_});let L=[];for(let O of x.toolCalls){let ne=be(O),We={round:P,toolName:O.toolName,args:O.args,resultRef:Vn(O),keptAsEvidence:ne.length>50&&!ne.startsWith("Error:")&&!ne.startsWith("Tool error:")&&!ne.startsWith("Unknown tool:")};if(w.push(We),We.keptAsEvidence){let at=cr(p.name,O,ne,ar(O.toolName));A.push(at);}L.push({type:"tool_result",tool_use_id:O.id,content:ne});}let T=he-P,ue=T<=0;if(ue||T===1){let O=ue?"STOP. You have used your tool budget. Your NEXT response MUST be the findings JSON. Do NOT call any more tools \u2014 any further tool_use will be discarded.":"FINAL ROUND. Use the tool results below plus any prior context to output the findings JSON in your NEXT response. Do not call more tools.";L.unshift({type:"text",text:`[arena-research:${p.name}] ${O}`});}u.push({role:"user",content:L});}if(!h){b.warn("arena.research_force_conclude",{participant:p.name,totalRounds:y,messageCount:u.length});let P=await g.createMessage({systemPrompt:t.researchSystemPrompt(p.name),messages:[...u,{role:"user",content:`You have gathered enough context. Based on ALL the tool results above, output your findings NOW.
580
+ ... (${i.length-t} more lines)`}return r}catch{return ""}}a(Ue,"execFileSafe");function Mn(n){return n.length<=In?n:n.slice(0,In)+`
581
+ ... (truncated)`}a(Mn,"truncateResult");var Me={repo_readonly:{name:"repo_readonly",toolNames:["read_file","grep_code","list_files"]},git:{name:"git",toolNames:["read_file","grep_code","list_files","git_show","git_blame"]},docs:{name:"docs",toolNames:["read_file","list_files"]},no_tools:{name:"no_tools",toolNames:[]}},Kn={git:"git",repo:"repo_readonly",docs:"docs",web:"no_tools",none:"no_tools"};function qn(n){let e=new Set;for(let t of n.sources){let r=t.toolPack??Kn[t.kind]??"no_tools",i=Me[r]??Me.no_tools;for(let o of i.toolNames)e.add(o);}return e.size===0?[]:le.filter(t=>e.has(t.name))}a(qn,"selectTools");function Ns(n){return n.sources.some(e=>{let t=Kn[e.kind],r=Me[t];return r&&r.toolNames.length>0})}a(Ns,"hasTools");h();async function Js(n){return (await Ke(n)).map(t=>t.report)}a(Js,"runParticipantResearch");async function Ke(n){let{participants:e,strategy:t,topic:r,baseContext:i,enableContextTools:o,contextTools:s,signal:c,onProgress:m}=n,d=o?s??le:void 0,l=e.map(async p=>{m?.({type:"research_start",participant:p.name});let g=await F({...p.llm,enableStreaming:false}),u=[{role:"user",content:t.researchUserPrompt(r,i)}],h="",y=0,w=[],A=[],$=30;for(let P=0;P<=he;P++){if(y=P,u.length>=$){b.warn("arena.research_message_limit",{participant:p.name,messageCount:u.length,round:P});break}let x=await g.createMessage({systemPrompt:t.researchSystemPrompt(p.name),messages:u,tools:d,signal:c}),q=(x.toolCalls??[]).map(O=>O.toolName),D=x.toolCalls&&x.toolCalls.length>0;if(b.info("arena.research_round",{participant:p.name,round:P,toolCount:x.toolCalls?.length??0,toolNames:q,textLen:x.text?.length??0,stopReason:x.stopReason??"unknown"}),!D){h=x.text;break}m?.({type:"context_lookup",participant:p.name,tools:x.toolCalls.map(O=>`${O.toolName}(${JSON.stringify(O.args)})`)});let _=[];x.text&&_.push({type:"text",text:x.text});for(let O of x.toolCalls)_.push({type:"tool_use",id:O.id,name:O.toolName,input:O.args});u.push({role:"assistant",content:_});let L=[];for(let O of x.toolCalls){let ne=be(O),We={round:P,toolName:O.toolName,args:O.args,resultRef:Vn(O),keptAsEvidence:ne.length>50&&!ne.startsWith("Error:")&&!ne.startsWith("Tool error:")&&!ne.startsWith("Unknown tool:")};if(w.push(We),We.keptAsEvidence){let at=cr(p.name,O,ne,ar(O.toolName));A.push(at);}L.push({type:"tool_result",tool_use_id:O.id,content:ne});}let T=he-P,ue=T<=0;if(ue||T===1){let O=ue?"STOP. You have used your tool budget. Your NEXT response MUST be the findings JSON. Do NOT call any more tools \u2014 any further tool_use will be discarded.":"FINAL ROUND. Use the tool results below plus any prior context to output the findings JSON in your NEXT response. Do not call more tools.";L.unshift({type:"text",text:`[arena-research:${p.name}] ${O}`});}u.push({role:"user",content:L});}if(!h){b.warn("arena.research_force_conclude",{participant:p.name,totalRounds:y,messageCount:u.length});let P=await g.createMessage({systemPrompt:t.researchSystemPrompt(p.name),messages:[...u,{role:"user",content:`You have gathered enough context. Based on ALL the tool results above, output your findings NOW.
582
582
 
583
583
  Respond ONLY with the <report> XML element specified in the system prompt \u2014 output your highest-confidence findings (typically 5-15 for a substantive topic; each <summary> should be 80+ words with concrete evidence). Do NOT request any more tools. No prose outside the XML.`}]});b.info("arena.research_force_conclude_response",{participant:p.name,textLen:P.text?.length??0,stopReason:P.stopReason??"unknown"}),h=P.text;}if(b.info("arena.research_raw_response",{participant:p.name,textLength:h.length,text:h}),!h||h.trim().length===0){b.warn("arena.research_failed",{participant:p.name,totalRounds:y,messageCount:u.length});let P={participant:p.name,contextSummary:`(research failed: model returned empty response after ${y} tool rounds)`,findings:[]},x={participant:p.name,contextSummary:P.contextSummary,findings:[],toolTrace:w,evidencePackets:A,findingEvidenceLinks:[]};return m?.({type:"research_done",participant:p.name,report:P}),{report:P,dossier:x}}let b$1=t.parseResearchResponse(p.name,h),j=lr(b$1,A),C={participant:p.name,contextSummary:b$1.contextSummary,findings:b$1.findings,toolTrace:w,evidencePackets:A,findingEvidenceLinks:j};return m?.({type:"research_done",participant:p.name,report:b$1}),{report:b$1,dossier:C}});return Promise.all(l)}a(Ke,"runParticipantResearchWithDossiers");function Vn(n){return n.toolName==="read_file"&&n.args.path?`file:${n.args.path}`:n.toolName==="grep_code"&&n.args.pattern?`grep:${n.args.pattern}`:n.toolName==="list_files"&&n.args.path?`dir:${n.args.path}`:n.toolName==="git_show"&&n.args.ref?`git:${n.args.ref}`:n.toolName==="git_blame"&&n.args.path?`blame:${n.args.path}`:`${n.toolName}:${JSON.stringify(n.args).slice(0,60)}`}a(Vn,"buildResultRef");function or(n,e,t,r){return `pkt-${createHash("sha256").update(`${n}:${e}:${t}:${r.slice(0,200)}`).digest("hex").slice(0,12)}`}a(or,"generatePacketId");function ar(n){switch(n){case "git_show":case "git_blame":return "git";case "read_file":case "grep_code":case "list_files":return "repo";default:return "repo"}}a(ar,"inferSourceKind");function cr(n,e,t,r){let i=Vn(e),o=t.slice(0,500);return {packetId:or(n,r,i,o),participant:n,source:r,title:`${e.toolName}: ${dr(e.args)}`,refs:[i],summary:t.slice(0,200),excerpts:[{ref:i,snippet:o,note:`Result of ${e.toolName} call`}]}}a(cr,"buildEvidencePacketFromTool");function dr(n){let e=[];for(let[t,r]of Object.entries(n))typeof r=="string"?e.push(r.slice(0,60)):e.push(`${t}=${JSON.stringify(r)}`);return e.join(", ").slice(0,100)}a(dr,"formatToolArgs");function lr(n,e){let t=[];for(let r of n.findings){let i=[];for(let o of r.evidence){let s=`${o.type}:${o.ref}`;for(let c of e)c.refs.some(d=>!!(d===s||o.ref&&d.includes(o.ref)))&&!i.includes(c.packetId)&&i.push(c.packetId);}i.length>0&&t.push({findingId:r.id,evidencePacketIds:i});}return t}a(lr,"buildFindingEvidenceLinks");h();function Bn(n){let{dossiers:e,ledger:t,onProgress:r}=n,i=[];for(let o of e){let s=new Map;for(let c of o.findingEvidenceLinks)s.set(c.findingId,c.evidencePacketIds);for(let c of o.findings){let m=`${o.participant}:${c.id}`,d=s.get(c.id)??[],l=c.evidence.map(g=>`${g.type}:${g.ref}`),p={claimId:m,owner:o.participant,finding:c,evidenceRefs:l,evidencePacketIds:d,status:"proposed",challenges:[],debateRounds:[]};i.push(p),t.appendClaim(p);}}return r?.({type:"claims_registered",claimCount:i.length}),i}a(Bn,"registerClaims");function Yn(n,e){let t={high:0,medium:1,low:2};return [...n].sort((i,o)=>{let s=t[i.finding.severity??"medium"]??1,c=t[o.finding.severity??"medium"]??1;return s!==c?s-c:o.finding.confidence-i.finding.confidence}).slice(0,e)}a(Yn,"selectClaimsForReview");h();function G(n,e){let{round:t,relevantClaimIds:r}=e,i=new Set(r),o=n.getSnapshot(),s=new Set;for(let g of r){let u=n.getClaimById(g);if(u)for(let h of u.evidencePacketIds)s.add(h);}let c=[];for(let g of s){let u=n.getPacketById(g);u&&c.push(u);}let m=[];for(let g of o.dossiers)for(let u of g.toolTrace)u.keptAsEvidence&&m.push({participant:g.participant,toolName:u.toolName,ref:u.resultRef});let d=o.challenges.filter(g=>i.has(g.claimId)),l=o.requestedChecks.filter(g=>i.has(g.claimId)),p=o.adjudications.filter(g=>i.has(g.claimId));return {round:t,relevantClaimIds:r,evidencePackets:c,toolTraceSummary:m,recentChallenges:d,requestedChecks:l,priorAdjudications:p}}a(G,"buildDigest");function Z(n){return n?n.replace(/<\/?(?:system|assistant|user|system-reminder)[^>]*>/gi,"").replace(/^(?:IGNORE|DISREGARD|FORGET|OVERRIDE|SYSTEM|INSTRUCTION)[:\s].*/gim,"").replace(/\n{3,}/g,`
584
584
 
@@ -587,7 +587,7 @@ Respond ONLY with the <report> XML element specified in the system prompt \u2014
587
587
  ### Challenges`);for(let t of n.recentChallenges)e.push(`- [${t.reviewer}] on ${t.claimId}: ${t.verdict} \u2014 ${Z(t.reason)}`);}if(n.requestedChecks.length>0){e.push(`
588
588
  ### Requested Checks`);for(let t of n.requestedChecks){let r=t.priority?` (${t.priority})`:"";e.push(`- [${t.requestId}]${r}: ${Z(t.description)}`);}}if(n.priorAdjudications.length>0){e.push(`
589
589
  ### Prior Adjudications`);for(let t of n.priorAdjudications)e.push(`- ${t.claimId}: ${t.outcome} \u2014 ${Z(t.rationale)}`);}return e.join(`
590
- `)}a(Zs,"formatDigest");h();var qe={proposed:["under_review"],under_review:["verified","contested","rejected"],contested:["under_review","unresolved","verified","rejected"],verified:[],rejected:[],unresolved:[]};function pe(n,e){return qe[n.status].includes(e)?(n.status=e,true):false}a(pe,"transitionClaim");function pr(n,e,t){if(e.length===0)return n.status;let r=e.map(i=>i.verdict);return r.includes("disagree")||r.includes("needs_evidence")||t?"contested":r.includes("agree")?"verified":n.status}a(pr,"resolveClaimStatus");function Jn(n){return pe(n,"under_review")}a(Jn,"markUnderReview");function zn(n,e,t){let r=pr(n,e,t);pe(n,r);}a(zn,"applyReviewResult");function Ve(n){return pe(n,"unresolved")}a(Ve,"markUnresolved");function ro(n){return qe[n.status].length===0}a(ro,"isTerminal");function io(n){return qe[n.status]}a(io,"validTransitions");h();async function fo(n){let{participants:e,strategy:t,topic:r,reports:i,signal:o,onProgress:s}=n;s?.({type:"cross_review_start",round:1});let c=[],m=e.map(async l=>{let p=i.find(A=>A.participant===l.name),g=i.filter(A=>A.participant!==l.name);if(g.length===0)return [];if(!p)return [];let u=await F({...l.llm,enableStreaming:false}),h=t.crossReviewSystemPrompt(l.name),y=t.crossReviewUserPrompt(r,p,g),w=await u.createMessage({systemPrompt:h,messages:[{role:"user",content:y}],signal:o});if(b.info("arena.cross_review_raw_response",{participant:l.name,text:w.text,stopReason:w.stopReason}),w.stopReason==="length"){b.warn("arena.cross_review_truncated",{participant:l.name});let A=await u.createMessage({systemPrompt:h,messages:[{role:"user",content:y},{role:"assistant",content:w.text},{role:"user",content:"Your previous response was truncated. Please output the COMPLETE review JSON, using shorter comments. Respond ONLY with JSON."}],signal:o});b.info("arena.cross_review_retry",{participant:l.name,stopReason:A.stopReason}),w=A;}return t.parseCrossReviewResponse(l.name,w.text)}),d=await Promise.all(m);for(let l of d)c.push(...l);return s?.({type:"cross_review_done",reviews:c}),c}a(fo,"runCrossReview");async function Be(n){let{participants:e,strategy:t,topic:r,reports:i,ledger:o,limits:s,mode:c,signal:m,onProgress:d}=n,l=o.getAllClaims(),p=Yn(l,s.maxClaimsForReview);for(let b of p)Jn(b);let g=p.map(b=>b.claimId),u=G(o,{round:1,relevantClaimIds:g}),h=c==="planning"&&te(t);d?.(h?{type:"planning_merge_review_start"}:{type:"verification_start"});let y=M(t),w=[],A=[],$=e.map(async b$1=>{let j=i.find(D=>D.participant===b$1.name),C=i.filter(D=>D.participant!==b$1.name);if(!j||C.length===0)return;let P=p.filter(D=>D.owner!==b$1.name);if(P.length===0)return;let x=await F({...b$1.llm,enableStreaming:false}),q=t.crossReviewSystemPrompt(b$1.name);if(y){let D=h?t.mergeReviewUserPrompt(r,j,P,u):t.verificationReviewUserPrompt(r,j,P,u),_=await x.createMessage({systemPrompt:q,messages:[{role:"user",content:D}],signal:m});b.info("arena.verification_review_raw",{participant:b$1.name,stopReason:_.stopReason}),_.stopReason==="length"&&(_=await x.createMessage({systemPrompt:q,messages:[{role:"user",content:D},{role:"assistant",content:_.text},{role:"user",content:"Truncated. Output the COMPLETE JSON array, shorter comments. JSON only."}],signal:m}));let L=h?t.parseMergeReviewResponse(b$1.name,_.text):t.parseVerificationReviewResponse(b$1.name,_.text);for(let T of L)A.push(T),o.appendChallenge(T);for(let T of L)w.push({reviewer:T.reviewer,findingId:T.claimId,verdict:T.verdict,reason:T.reason,extraEvidence:T.supportingEvidenceRefs});}else {let D=t.crossReviewUserPrompt(r,j,C),_=await x.createMessage({systemPrompt:q,messages:[{role:"user",content:D}],signal:m});_.stopReason==="length"&&(_=await x.createMessage({systemPrompt:q,messages:[{role:"user",content:D},{role:"assistant",content:_.text},{role:"user",content:"Truncated. Output COMPLETE review JSON. Shorter comments. JSON only."}],signal:m}));let L=t.parseCrossReviewResponse(b$1.name,_.text);w.push(...L);for(let T of L){let ue=p.find(ee=>ee.finding.id===T.findingId||ee.claimId===T.findingId);if(ue){let ee={reviewer:T.reviewer,claimId:ue.claimId,verdict:T.verdict,reason:T.reason,supportingEvidenceRefs:T.extraEvidence};A.push(ee),o.appendChallenge(ee);}}}});await Promise.all($);for(let b of p){let j=o.getChallengesForClaim(b.claimId),C=o.getPendingChecksForClaim(b.claimId).length>0;zn(b,j,C);}return b.info("arena.verification_done",{reviewCount:w.length,challengeCount:A.length,claimStatuses:Object.fromEntries(p.map(b=>[b.claimId,b.status]))}),d?.(h?{type:"planning_merge_review_done",mergeCount:A.length}:{type:"verification_done",challengeCount:A.length}),d?.({type:"cross_review_done",reviews:w}),{reviews:w,challenges:A}}a(Be,"runVerificationReview");h();async function Wn(n){let{participants:e,strategy:t,topic:r,ledger:i,limits:o,maxRounds:s,signal:c,onProgress:m}=n,d=i.getClaimsByStatus("contested").slice(0,o.maxContestedClaimsForDebate);if(d.length===0)return b.info("arena.debate_skip",{reason:"no contested claims"}),[];b.info("arena.debate_start",{contestedCount:d.length,maxRounds:s});let l=[],p=M(t);for(let g of d){c?.throwIfAborted();let u=await ur({claim:g,participants:e,strategy:t,v2:p,topic:r,ledger:i,maxRounds:s,signal:c,onProgress:m});l.push(...u),g.debateRounds.push(...u);}return l}a(Wn,"runDebateRounds");async function ur(n){let{claim:e,participants:t,strategy:r,v2:i,topic:o,ledger:s,maxRounds:c,signal:m,onProgress:d}=n,l=t.find(y=>y.name===e.owner),p=mr(e,t);if(!l||!p)return b.warn("arena.debate_skip_claim",{claimId:e.claimId,reason:"cannot identify debaters"}),[];let g=[l,p],u=[],h=[];for(let y=1;y<=c;y++){m?.throwIfAborted(),d?.({type:"debate_round_start",round:y,claims:[e.claimId]});let w=G(s,{round:y,relevantClaimIds:[e.claimId]}),A=g.map(async P=>{let x=await F({...P.llm,enableStreaming:false}),q=r.crossReviewSystemPrompt(P.name),D;i?D=r.debateTurnUserPrompt(o,e,h,w):D=gr(o,e,h);let _=await x.createMessage({systemPrompt:q,messages:[{role:"user",content:D}],signal:m});return b.info("arena.debate_turn",{participant:P.name,claimId:e.claimId,round:y,stopReason:_.stopReason}),i?r.parseDebateTurnResponse(P.name,_.text):z(P.name,_.text)}),$=await Promise.all(A);h.push(...$);let b$1=$.every(P=>P.stance==="support"||P.stance==="narrow"),j=b$1?`Converged in round ${y}: ${$.map(P=>`${P.participant}=${P.stance}`).join(", ")}`:void 0,C={round:y,claimId:e.claimId,participants:$,resolved:b$1,resolutionNote:j};if(u.push(C),d?.({type:"debate_round_done",round:y,resolved:b$1?1:0}),b$1){b.info("arena.debate_converged",{claimId:e.claimId,round:y});break}}return u}a(ur,"debateClaim");function mr(n,e){let t=n.challenges.find(o=>o.verdict==="disagree"),r=n.challenges.find(o=>o.verdict==="needs_evidence"),i=t??r??n.challenges[0];if(i)return e.find(o=>o.name===i.reviewer)}a(mr,"findPrimaryChallenger");function gr(n,e,t){let r=t.length>0?t.map(i=>`[${i.participant}] ${i.stance}: ${i.summary}`).join(`
590
+ `)}a(Zs,"formatDigest");h();var qe={proposed:["under_review"],under_review:["verified","contested","rejected"],contested:["under_review","unresolved","verified","rejected"],verified:[],rejected:[],unresolved:[]};function pe(n,e){return qe[n.status].includes(e)?(n.status=e,true):false}a(pe,"transitionClaim");function pr(n,e,t){if(e.length===0)return n.status;let r=e.map(i=>i.verdict);return r.includes("disagree")||r.includes("needs_evidence")||t?"contested":r.includes("agree")?"verified":n.status}a(pr,"resolveClaimStatus");function Jn(n){return pe(n,"under_review")}a(Jn,"markUnderReview");function zn(n,e,t){let r=pr(n,e,t);pe(n,r);}a(zn,"applyReviewResult");function Ve(n){return pe(n,"unresolved")}a(Ve,"markUnresolved");function ro(n){return qe[n.status].length===0}a(ro,"isTerminal");function io(n){return qe[n.status]}a(io,"validTransitions");h();async function fo(n){let{participants:e,strategy:t,topic:r,reports:i,signal:o,onProgress:s}=n;s?.({type:"cross_review_start",round:1});let c=[],m=e.map(async l=>{let p=i.find(A=>A.participant===l.name),g=i.filter(A=>A.participant!==l.name);if(g.length===0)return [];if(!p)return [];let u=await F({...l.llm,enableStreaming:false}),h=t.crossReviewSystemPrompt(l.name),y=t.crossReviewUserPrompt(r,p,g),w=await u.createMessage({systemPrompt:h,messages:[{role:"user",content:y}],signal:o});if(b.info("arena.cross_review_raw_response",{participant:l.name,text:w.text,stopReason:w.stopReason}),w.stopReason==="length"){b.warn("arena.cross_review_truncated",{participant:l.name});let A=await u.createMessage({systemPrompt:h,messages:[{role:"user",content:y},{role:"assistant",content:w.text},{role:"user",content:"Your previous response was truncated. Please output the COMPLETE review JSON, using shorter comments. Respond ONLY with JSON."}],signal:o});b.info("arena.cross_review_retry",{participant:l.name,stopReason:A.stopReason}),w=A;}return t.parseCrossReviewResponse(l.name,w.text)}),d=await Promise.all(m);for(let l of d)c.push(...l);return s?.({type:"cross_review_done",reviews:c}),c}a(fo,"runCrossReview");async function Be(n){let{participants:e,strategy:t,topic:r,reports:i,ledger:o,limits:s,mode:c,signal:m,onProgress:d}=n,l=o.getAllClaims(),p=Yn(l,s.maxClaimsForReview);for(let b of p)Jn(b);let g=p.map(b=>b.claimId),u=G(o,{round:1,relevantClaimIds:g}),h=c==="planning"&&te(t);d?.(h?{type:"planning_merge_review_start"}:{type:"verification_start"});let y=U(t),w=[],A=[],$=e.map(async b$1=>{let j=i.find(D=>D.participant===b$1.name),C=i.filter(D=>D.participant!==b$1.name);if(!j||C.length===0)return;let P=p.filter(D=>D.owner!==b$1.name);if(P.length===0)return;let x=await F({...b$1.llm,enableStreaming:false}),q=t.crossReviewSystemPrompt(b$1.name);if(y){let D=h?t.mergeReviewUserPrompt(r,j,P,u):t.verificationReviewUserPrompt(r,j,P,u),_=await x.createMessage({systemPrompt:q,messages:[{role:"user",content:D}],signal:m});b.info("arena.verification_review_raw",{participant:b$1.name,stopReason:_.stopReason}),_.stopReason==="length"&&(_=await x.createMessage({systemPrompt:q,messages:[{role:"user",content:D},{role:"assistant",content:_.text},{role:"user",content:"Truncated. Output the COMPLETE JSON array, shorter comments. JSON only."}],signal:m}));let L=h?t.parseMergeReviewResponse(b$1.name,_.text):t.parseVerificationReviewResponse(b$1.name,_.text);for(let T of L)A.push(T),o.appendChallenge(T);for(let T of L)w.push({reviewer:T.reviewer,findingId:T.claimId,verdict:T.verdict,reason:T.reason,extraEvidence:T.supportingEvidenceRefs});}else {let D=t.crossReviewUserPrompt(r,j,C),_=await x.createMessage({systemPrompt:q,messages:[{role:"user",content:D}],signal:m});_.stopReason==="length"&&(_=await x.createMessage({systemPrompt:q,messages:[{role:"user",content:D},{role:"assistant",content:_.text},{role:"user",content:"Truncated. Output COMPLETE review JSON. Shorter comments. JSON only."}],signal:m}));let L=t.parseCrossReviewResponse(b$1.name,_.text);w.push(...L);for(let T of L){let ue=p.find(ee=>ee.finding.id===T.findingId||ee.claimId===T.findingId);if(ue){let ee={reviewer:T.reviewer,claimId:ue.claimId,verdict:T.verdict,reason:T.reason,supportingEvidenceRefs:T.extraEvidence};A.push(ee),o.appendChallenge(ee);}}}});await Promise.all($);for(let b of p){let j=o.getChallengesForClaim(b.claimId),C=o.getPendingChecksForClaim(b.claimId).length>0;zn(b,j,C);}return b.info("arena.verification_done",{reviewCount:w.length,challengeCount:A.length,claimStatuses:Object.fromEntries(p.map(b=>[b.claimId,b.status]))}),d?.(h?{type:"planning_merge_review_done",mergeCount:A.length}:{type:"verification_done",challengeCount:A.length}),d?.({type:"cross_review_done",reviews:w}),{reviews:w,challenges:A}}a(Be,"runVerificationReview");h();async function Wn(n){let{participants:e,strategy:t,topic:r,ledger:i,limits:o,maxRounds:s,signal:c,onProgress:m}=n,d=i.getClaimsByStatus("contested").slice(0,o.maxContestedClaimsForDebate);if(d.length===0)return b.info("arena.debate_skip",{reason:"no contested claims"}),[];b.info("arena.debate_start",{contestedCount:d.length,maxRounds:s});let l=[],p=U(t);for(let g of d){c?.throwIfAborted();let u=await ur({claim:g,participants:e,strategy:t,v2:p,topic:r,ledger:i,maxRounds:s,signal:c,onProgress:m});l.push(...u),g.debateRounds.push(...u);}return l}a(Wn,"runDebateRounds");async function ur(n){let{claim:e,participants:t,strategy:r,v2:i,topic:o,ledger:s,maxRounds:c,signal:m,onProgress:d}=n,l=t.find(y=>y.name===e.owner),p=mr(e,t);if(!l||!p)return b.warn("arena.debate_skip_claim",{claimId:e.claimId,reason:"cannot identify debaters"}),[];let g=[l,p],u=[],h=[];for(let y=1;y<=c;y++){m?.throwIfAborted(),d?.({type:"debate_round_start",round:y,claims:[e.claimId]});let w=G(s,{round:y,relevantClaimIds:[e.claimId]}),A=g.map(async P=>{let x=await F({...P.llm,enableStreaming:false}),q=r.crossReviewSystemPrompt(P.name),D;i?D=r.debateTurnUserPrompt(o,e,h,w):D=gr(o,e,h);let _=await x.createMessage({systemPrompt:q,messages:[{role:"user",content:D}],signal:m});return b.info("arena.debate_turn",{participant:P.name,claimId:e.claimId,round:y,stopReason:_.stopReason}),i?r.parseDebateTurnResponse(P.name,_.text):z(P.name,_.text)}),$=await Promise.all(A);h.push(...$);let b$1=$.every(P=>P.stance==="support"||P.stance==="narrow"),j=b$1?`Converged in round ${y}: ${$.map(P=>`${P.participant}=${P.stance}`).join(", ")}`:void 0,C={round:y,claimId:e.claimId,participants:$,resolved:b$1,resolutionNote:j};if(u.push(C),d?.({type:"debate_round_done",round:y,resolved:b$1?1:0}),b$1){b.info("arena.debate_converged",{claimId:e.claimId,round:y});break}}return u}a(ur,"debateClaim");function mr(n,e){let t=n.challenges.find(o=>o.verdict==="disagree"),r=n.challenges.find(o=>o.verdict==="needs_evidence"),i=t??r??n.challenges[0];if(i)return e.find(o=>o.name===i.reviewer)}a(mr,"findPrimaryChallenger");function gr(n,e,t){let r=t.length>0?t.map(i=>`[${i.participant}] ${i.stance}: ${i.summary}`).join(`
591
591
  `):"No prior turns.";return `## Topic: ${n}
592
592
 
593
593
  ## Contested Claim
@@ -599,7 +599,7 @@ ${r}
599
599
 
600
600
  State your position on this claim. Build on prior turns: cite specific evidence, acknowledge counter-arguments, and explain your reasoning in 150-300 words. Brevity here means missed nuance \u2014 depth wins.
601
601
  Respond ONLY with JSON:
602
- {"stance": "support|oppose|narrow|uncertain", "summary": "your argument", "newEvidenceRefs": ["optional"]}`}a(gr,"buildFallbackDebatePrompt");h();async function Gn(n){let{concluder:e,strategy:t,topic:r,ledger:i,signal:o,onProgress:s}=n,c=[],m=M(t),d=i.getClaimsByStatus("contested"),l=i.getClaimsByStatus("verified");if(d.length===0&&l.length===0)return b.info("arena.adjudication_skip",{reason:"no claims to adjudicate"}),[];b.info("arena.adjudication_start",{contested:d.length,verified:l.length});let p=await F({...e.llm,enableStreaming:false});for(let y of d){o?.throwIfAborted();let w=G(i,{round:0,relevantClaimIds:[y.claimId]}),A=t.consensusSystemPrompt(),$;m?$=t.adjudicationUserPrompt(r,y,y.debateRounds,w):$=hr(r,y);let b$1=await p.createMessage({systemPrompt:A,messages:[{role:"user",content:$}],signal:o});b.info("arena.adjudication_response",{claimId:y.claimId,stopReason:b$1.stopReason});let j;m?(j=t.parseAdjudicationResponse(b$1.text),j.claimId=y.claimId):j=W(y.claimId,b$1.text),i.appendAdjudication(j),c.push(j),fr(y,j);}for(let y of l){let w={claimId:y.claimId,outcome:"accepted",rationale:"Verified by peer review without contest",finalSummary:y.finding.summary,supportingEvidenceRefs:y.evidenceRefs};i.appendAdjudication(w),c.push(w);}let g=i.getClaimsByStatus("proposed","under_review");for(let y of g)Ve(y);let u=c.filter(y=>y.outcome==="accepted"||y.outcome==="accepted_with_revision").length,h=i.getClaimsByStatus("unresolved").length;return b.info("arena.adjudication_done",{total:c.length,accepted:u,unresolved:h}),s?.({type:"adjudication_done",accepted:u,unresolved:h}),c}a(Gn,"runAdjudication");function fr(n,e){switch(e.outcome){case "accepted":case "accepted_with_revision":pe(n,"verified");break;case "rejected":pe(n,"rejected");break;case "unresolved":Ve(n);break}}a(fr,"applyAdjudicationOutcome");function hr(n,e){let t=e.challenges.length>0?e.challenges.map(i=>`[${i.reviewer}] ${i.verdict}: ${i.reason}`).join(`
602
+ {"stance": "support|oppose|narrow|uncertain", "summary": "your argument", "newEvidenceRefs": ["optional"]}`}a(gr,"buildFallbackDebatePrompt");h();async function Gn(n){let{concluder:e,strategy:t,topic:r,ledger:i,signal:o,onProgress:s}=n,c=[],m=U(t),d=i.getClaimsByStatus("contested"),l=i.getClaimsByStatus("verified");if(d.length===0&&l.length===0)return b.info("arena.adjudication_skip",{reason:"no claims to adjudicate"}),[];b.info("arena.adjudication_start",{contested:d.length,verified:l.length});let p=await F({...e.llm,enableStreaming:false});for(let y of d){o?.throwIfAborted();let w=G(i,{round:0,relevantClaimIds:[y.claimId]}),A=t.consensusSystemPrompt(),$;m?$=t.adjudicationUserPrompt(r,y,y.debateRounds,w):$=hr(r,y);let b$1=await p.createMessage({systemPrompt:A,messages:[{role:"user",content:$}],signal:o});b.info("arena.adjudication_response",{claimId:y.claimId,stopReason:b$1.stopReason});let j;m?(j=t.parseAdjudicationResponse(b$1.text),j.claimId=y.claimId):j=W(y.claimId,b$1.text),i.appendAdjudication(j),c.push(j),fr(y,j);}for(let y of l){let w={claimId:y.claimId,outcome:"accepted",rationale:"Verified by peer review without contest",finalSummary:y.finding.summary,supportingEvidenceRefs:y.evidenceRefs};i.appendAdjudication(w),c.push(w);}let g=i.getClaimsByStatus("proposed","under_review");for(let y of g)Ve(y);let u=c.filter(y=>y.outcome==="accepted"||y.outcome==="accepted_with_revision").length,h=i.getClaimsByStatus("unresolved").length;return b.info("arena.adjudication_done",{total:c.length,accepted:u,unresolved:h}),s?.({type:"adjudication_done",accepted:u,unresolved:h}),c}a(Gn,"runAdjudication");function fr(n,e){switch(e.outcome){case "accepted":case "accepted_with_revision":pe(n,"verified");break;case "rejected":pe(n,"rejected");break;case "unresolved":Ve(n);break}}a(fr,"applyAdjudicationOutcome");function hr(n,e){let t=e.challenges.length>0?e.challenges.map(i=>`[${i.reviewer}] ${i.verdict}: ${i.reason}`).join(`
603
603
  `):"No challenges.",r=e.debateRounds.length>0?e.debateRounds.map(i=>`Round ${i.round}:
604
604
  `+i.participants.map(o=>` [${o.participant}] ${o.stance}: ${o.summary}`).join(`
605
605
  `)+`
@@ -620,22 +620,22 @@ ${r}
620
620
 
621
621
  As moderator, adjudicate this claim based on all available evidence.
622
622
  Respond ONLY with JSON:
623
- {"outcome": "accepted|accepted_with_revision|rejected|unresolved", "rationale": "...", "finalSummary": "revised claim summary if needed", "supportingEvidenceRefs": ["..."]}`}a(hr,"buildFallbackAdjudicationPrompt");h();async function Ye(n){let{concluder:e,strategy:t,topic:r,reports:i,reviews:o,claimSummary:s,signal:c,onProgress:m}=n;m?.({type:"consensus_start"});let d=await F({...e.llm,enableStreaming:false}),l=t.consensusSystemPrompt(),p;M(t)&&s?(p=t.claimAwareConsensusUserPrompt(r,i,o,s),b.info("arena.consensus_claim_aware",{verified:s.verified.length,unresolved:s.unresolved.length,contested:s.contested.length,rejected:s.rejected.length})):p=t.consensusUserPrompt(r,i,o);let u=await d.createMessage({systemPrompt:l,messages:[{role:"user",content:p}],signal:c});if(b.info("arena.consensus_raw_response",{text:u.text,stopReason:u.stopReason}),u.stopReason==="length"){b.warn("arena.consensus_truncated",{textLen:u.text?.length??0,maxTokens:e.llm.maxTokens});let y=await d.createMessage({systemPrompt:l,messages:[{role:"user",content:p},{role:"assistant",content:u.text},{role:"user",content:"Your previous response was truncated. Please output a COMPLETE but more concise version of the consensus JSON. Keep all sections but use shorter summaries. Respond ONLY with the complete JSON object."}],signal:c});b.info("arena.consensus_retry_response",{textLen:y.text?.length??0,stopReason:y.stopReason}),y.stopReason==="length"&&b.warn("arena.consensus_still_truncated",{textLen:y.text?.length??0});let w=t.parseConsensusResponse(y.text);return m?.({type:"consensus_done",consensus:w}),w}let h=t.parseConsensusResponse(u.text);return m?.({type:"consensus_done",consensus:h}),h}a(Ye,"buildConsensus");h();var yr=50,vr=200,Rr=100,Ce=class{static{a(this,"ArenaLedger");}ledger;index;constructor(){this.ledger={dossiers:[],evidencePackets:[],toolTraces:[],claims:[],challenges:[],requestedChecks:[],adjudications:[]},this.index={claimsById:new Map,packetsById:new Map,requestsById:new Map};}checkGrowth(){let e=this.ledger.claims.length,t=this.ledger.evidencePackets.length,r=this.ledger.challenges.length;(e===yr||t===vr||r===Rr)&&b.warn("arena.ledger_growth",{claims:e,packets:t,challenges:r,toolTraces:this.ledger.toolTraces.length});}appendDossier(e){this.ledger.dossiers.push(e);for(let t of e.evidencePackets)this.appendEvidencePacket(t);for(let t of e.toolTrace)this.ledger.toolTraces.push(t);}appendEvidencePacket(e){this.index.packetsById.has(e.packetId)||(this.ledger.evidencePackets.push(e),this.index.packetsById.set(e.packetId,e));}appendClaim(e){this.ledger.claims.push(e),this.index.claimsById.set(e.claimId,e),this.checkGrowth();}appendChallenge(e){this.ledger.challenges.push(e);let t=this.index.claimsById.get(e.claimId);if(t&&t.challenges.push(e),this.checkGrowth(),e.requestedChecks)for(let r of e.requestedChecks)this.appendRequestedCheck(r);}appendRequestedCheck(e){this.index.requestsById.has(e.requestId)||(this.ledger.requestedChecks.push(e),this.index.requestsById.set(e.requestId,e));}appendAdjudication(e){this.ledger.adjudications.push(e);let t=this.index.claimsById.get(e.claimId);t&&(t.adjudication=e);}getSnapshot(){return this.ledger}getClaimById(e){return this.index.claimsById.get(e)}getPacketById(e){return this.index.packetsById.get(e)}getAllClaims(){return this.ledger.claims}getClaimsByStatus(...e){let t=new Set(e);return this.ledger.claims.filter(r=>t.has(r.status))}getClaimsByOwner(e){return this.ledger.claims.filter(t=>t.owner===e)}getChallengesForClaim(e){return this.ledger.challenges.filter(t=>t.claimId===e)}getPendingChecks(){return this.ledger.requestedChecks}getPendingChecksForClaim(e){return this.ledger.requestedChecks.filter(t=>t.claimId===e)}getPacketsForClaim(e){let t=this.index.claimsById.get(e);return t?t.evidencePacketIds.map(r=>this.index.packetsById.get(r)).filter(r=>r!==void 0):[]}getDossiers(){return this.ledger.dossiers}getDossierByParticipant(e){let t=this.ledger.dossiers.filter(r=>r.participant===e);return t[t.length-1]}};h();h();var wr=3;async function Hn(n){let{concluder:e,strategy:t,topic:r,phases:i,ledger:o,limits:s,signal:c,onProgress:m}=n,d=n.enableContextTools!==false?n.contextTools??le:void 0,l=i.slice(0,s.maxExpandedPhasesPerRun);m?.({type:"roadmap_expansion_start",phaseCount:l.length}),b.info("arena.detail_expansion_start",{phaseCount:l.length});let p=[],g=await F({...e.llm,enableStreaming:false}),u=t.detailExpansionSystemPrompt();for(let h of l){c?.throwIfAborted();let y=h.relatedFindings??[],w=G(o,{round:1,relevantClaimIds:y}),$=[{role:"user",content:t.detailExpansionUserPrompt(r,h,w)}],b$1="",j=d?Math.min(wr,he):0;for(let P=0;P<=j;P++){let x=await g.createMessage({systemPrompt:u,messages:$,tools:d,signal:c}),q=x.toolCalls&&x.toolCalls.length>0;if(b.info("arena.detail_expansion_round",{phase:h.title,round:P,toolCount:x.toolCalls?.length??0,stopReason:x.stopReason}),!q){b$1=x.text;break}let D=[];x.text&&D.push({type:"text",text:x.text});for(let L of x.toolCalls)D.push({type:"tool_use",id:L.id,name:L.toolName,input:L.args});$.push({role:"assistant",content:D});let _=[];for(let L of x.toolCalls){let T=be(L);_.push({type:"tool_result",tool_use_id:L.id,content:T.slice(0,15e3)});}$.push({role:"user",content:_}),P===j&&(b$1=x.text);}b$1||(b$1=""),b.info("arena.detail_expansion_phase",{phase:h.title,textLen:b$1.length});let C=t.parseDetailExpansionResponse(b$1);C.phaseTitle||(C.phaseTitle=h.title),C.targetFiles.length===0&&C.codeChanges.length===0&&b.warn("arena.detail_expansion_sparse",{phase:h.title,objective:C.objective.slice(0,200)}),p.push(C);}return b.info("arena.detail_expansion_done",{detailCount:p.length}),m?.({type:"roadmap_expansion_done",detailCount:p.length}),p}a(Hn,"runDetailExpansion");h();function Ar(n){return n.replace(/[\x00-\x7F]/g,"").length/Math.max(n.length,1)<.15?"":/[\u4e00-\u9fff\u3400-\u4dbf]/.test(n)?"IMPORTANT: The user's query is in Chinese. You MUST respond in Chinese (\u4E2D\u6587). All text output \u2014 summaries, findings, titles, descriptions, rationale \u2014 must be written in Chinese. JSON field values must be in Chinese.":/[\u3040-\u309f\u30a0-\u30ff]/.test(n)?"IMPORTANT: The user's query is in Japanese. You MUST respond in Japanese (\u65E5\u672C\u8A9E). All text output must be in Japanese. JSON field values must be in Japanese.":/[\uac00-\ud7af]/.test(n)?"IMPORTANT: The user's query is in Korean. You MUST respond in Korean (\uD55C\uAD6D\uC5B4). All text output must be in Korean. JSON field values must be in Korean.":/[\u0400-\u04ff]/.test(n)?"IMPORTANT: The user's query is in Russian. You MUST respond in Russian (\u0440\u0443\u0441\u0441\u043A\u0438\u0439). All text output must be in Russian. JSON field values must be in Russian.":/[\u0600-\u06ff]/.test(n)?"IMPORTANT: The user's query is in Arabic. You MUST respond in Arabic (\u0627\u0644\u0639\u0631\u0628\u064A\u0629). All text output must be in Arabic. JSON field values must be in Arabic.":"IMPORTANT: Respond in the same language as the user's query. All text output \u2014 summaries, findings, titles, descriptions \u2014 must match the query language."}a(Ar,"detectLanguageInstruction");function Xn(n,e){let t=Ar(e);return t?{researchSystemPrompt(r){return `${t}
623
+ {"outcome": "accepted|accepted_with_revision|rejected|unresolved", "rationale": "...", "finalSummary": "revised claim summary if needed", "supportingEvidenceRefs": ["..."]}`}a(hr,"buildFallbackAdjudicationPrompt");h();async function Ye(n){let{concluder:e,strategy:t,topic:r,reports:i,reviews:o,claimSummary:s,signal:c,onProgress:m}=n;m?.({type:"consensus_start"});let d=await F({...e.llm,enableStreaming:false}),l=t.consensusSystemPrompt(),p;U(t)&&s?(p=t.claimAwareConsensusUserPrompt(r,i,o,s),b.info("arena.consensus_claim_aware",{verified:s.verified.length,unresolved:s.unresolved.length,contested:s.contested.length,rejected:s.rejected.length})):p=t.consensusUserPrompt(r,i,o);let u=await d.createMessage({systemPrompt:l,messages:[{role:"user",content:p}],signal:c});if(b.info("arena.consensus_raw_response",{text:u.text,stopReason:u.stopReason}),u.stopReason==="length"){b.warn("arena.consensus_truncated",{textLen:u.text?.length??0,maxTokens:e.llm.maxTokens});let y=await d.createMessage({systemPrompt:l,messages:[{role:"user",content:p},{role:"assistant",content:u.text},{role:"user",content:"Your previous response was truncated. Please output a COMPLETE but more concise version of the consensus JSON. Keep all sections but use shorter summaries. Respond ONLY with the complete JSON object."}],signal:c});b.info("arena.consensus_retry_response",{textLen:y.text?.length??0,stopReason:y.stopReason}),y.stopReason==="length"&&b.warn("arena.consensus_still_truncated",{textLen:y.text?.length??0});let w=t.parseConsensusResponse(y.text);return m?.({type:"consensus_done",consensus:w}),w}let h=t.parseConsensusResponse(u.text);return m?.({type:"consensus_done",consensus:h}),h}a(Ye,"buildConsensus");h();var yr=50,vr=200,Rr=100,Ce=class{static{a(this,"ArenaLedger");}ledger;index;constructor(){this.ledger={dossiers:[],evidencePackets:[],toolTraces:[],claims:[],challenges:[],requestedChecks:[],adjudications:[]},this.index={claimsById:new Map,packetsById:new Map,requestsById:new Map};}checkGrowth(){let e=this.ledger.claims.length,t=this.ledger.evidencePackets.length,r=this.ledger.challenges.length;(e===yr||t===vr||r===Rr)&&b.warn("arena.ledger_growth",{claims:e,packets:t,challenges:r,toolTraces:this.ledger.toolTraces.length});}appendDossier(e){this.ledger.dossiers.push(e);for(let t of e.evidencePackets)this.appendEvidencePacket(t);for(let t of e.toolTrace)this.ledger.toolTraces.push(t);}appendEvidencePacket(e){this.index.packetsById.has(e.packetId)||(this.ledger.evidencePackets.push(e),this.index.packetsById.set(e.packetId,e));}appendClaim(e){this.ledger.claims.push(e),this.index.claimsById.set(e.claimId,e),this.checkGrowth();}appendChallenge(e){this.ledger.challenges.push(e);let t=this.index.claimsById.get(e.claimId);if(t&&t.challenges.push(e),this.checkGrowth(),e.requestedChecks)for(let r of e.requestedChecks)this.appendRequestedCheck(r);}appendRequestedCheck(e){this.index.requestsById.has(e.requestId)||(this.ledger.requestedChecks.push(e),this.index.requestsById.set(e.requestId,e));}appendAdjudication(e){this.ledger.adjudications.push(e);let t=this.index.claimsById.get(e.claimId);t&&(t.adjudication=e);}getSnapshot(){return this.ledger}getClaimById(e){return this.index.claimsById.get(e)}getPacketById(e){return this.index.packetsById.get(e)}getAllClaims(){return this.ledger.claims}getClaimsByStatus(...e){let t=new Set(e);return this.ledger.claims.filter(r=>t.has(r.status))}getClaimsByOwner(e){return this.ledger.claims.filter(t=>t.owner===e)}getChallengesForClaim(e){return this.ledger.challenges.filter(t=>t.claimId===e)}getPendingChecks(){return this.ledger.requestedChecks}getPendingChecksForClaim(e){return this.ledger.requestedChecks.filter(t=>t.claimId===e)}getPacketsForClaim(e){let t=this.index.claimsById.get(e);return t?t.evidencePacketIds.map(r=>this.index.packetsById.get(r)).filter(r=>r!==void 0):[]}getDossiers(){return this.ledger.dossiers}getDossierByParticipant(e){let t=this.ledger.dossiers.filter(r=>r.participant===e);return t[t.length-1]}};h();h();var wr=3;async function Hn(n){let{concluder:e,strategy:t,topic:r,phases:i,ledger:o,limits:s,signal:c,onProgress:m}=n,d=n.enableContextTools!==false?n.contextTools??le:void 0,l=i.slice(0,s.maxExpandedPhasesPerRun);m?.({type:"roadmap_expansion_start",phaseCount:l.length}),b.info("arena.detail_expansion_start",{phaseCount:l.length});let p=[],g=await F({...e.llm,enableStreaming:false}),u=t.detailExpansionSystemPrompt();for(let h of l){c?.throwIfAborted();let y=h.relatedFindings??[],w=G(o,{round:1,relevantClaimIds:y}),$=[{role:"user",content:t.detailExpansionUserPrompt(r,h,w)}],b$1="",j=d?Math.min(wr,he):0;for(let P=0;P<=j;P++){let x=await g.createMessage({systemPrompt:u,messages:$,tools:d,signal:c}),q=x.toolCalls&&x.toolCalls.length>0;if(b.info("arena.detail_expansion_round",{phase:h.title,round:P,toolCount:x.toolCalls?.length??0,stopReason:x.stopReason}),!q){b$1=x.text;break}let D=[];x.text&&D.push({type:"text",text:x.text});for(let L of x.toolCalls)D.push({type:"tool_use",id:L.id,name:L.toolName,input:L.args});$.push({role:"assistant",content:D});let _=[];for(let L of x.toolCalls){let T=be(L);_.push({type:"tool_result",tool_use_id:L.id,content:T.slice(0,15e3)});}$.push({role:"user",content:_}),P===j&&(b$1=x.text);}b$1||(b$1=""),b.info("arena.detail_expansion_phase",{phase:h.title,textLen:b$1.length});let C=t.parseDetailExpansionResponse(b$1);C.phaseTitle||(C.phaseTitle=h.title),C.targetFiles.length===0&&C.codeChanges.length===0&&b.warn("arena.detail_expansion_sparse",{phase:h.title,objective:C.objective.slice(0,200)}),p.push(C);}return b.info("arena.detail_expansion_done",{detailCount:p.length}),m?.({type:"roadmap_expansion_done",detailCount:p.length}),p}a(Hn,"runDetailExpansion");h();function Ar(n){return n.replace(/[\x00-\x7F]/g,"").length/Math.max(n.length,1)<.15?"":/[\u4e00-\u9fff\u3400-\u4dbf]/.test(n)?"IMPORTANT: The user's query is in Chinese. You MUST respond in Chinese (\u4E2D\u6587). All text output \u2014 summaries, findings, titles, descriptions, rationale \u2014 must be written in Chinese. JSON field values must be in Chinese.":/[\u3040-\u309f\u30a0-\u30ff]/.test(n)?"IMPORTANT: The user's query is in Japanese. You MUST respond in Japanese (\u65E5\u672C\u8A9E). All text output must be in Japanese. JSON field values must be in Japanese.":/[\uac00-\ud7af]/.test(n)?"IMPORTANT: The user's query is in Korean. You MUST respond in Korean (\uD55C\uAD6D\uC5B4). All text output must be in Korean. JSON field values must be in Korean.":/[\u0400-\u04ff]/.test(n)?"IMPORTANT: The user's query is in Russian. You MUST respond in Russian (\u0440\u0443\u0441\u0441\u043A\u0438\u0439). All text output must be in Russian. JSON field values must be in Russian.":/[\u0600-\u06ff]/.test(n)?"IMPORTANT: The user's query is in Arabic. You MUST respond in Arabic (\u0627\u0644\u0639\u0631\u0628\u064A\u0629). All text output must be in Arabic. JSON field values must be in Arabic.":"IMPORTANT: Respond in the same language as the user's query. All text output \u2014 summaries, findings, titles, descriptions \u2014 must match the query language."}a(Ar,"detectLanguageInstruction");function Xn(n,e){let t=Ar(e);return t?{researchSystemPrompt(r){return `${t}
624
624
 
625
625
  ${n.researchSystemPrompt(r)}`},researchUserPrompt(r,i){return n.researchUserPrompt(r,i)},parseResearchResponse(r,i){return n.parseResearchResponse(r,i)},crossReviewSystemPrompt(r){return `${t}
626
626
 
627
627
  ${n.crossReviewSystemPrompt(r)}`},crossReviewUserPrompt(r,i,o){return n.crossReviewUserPrompt(r,i,o)},parseCrossReviewResponse(r,i){return n.parseCrossReviewResponse(r,i)},consensusSystemPrompt(){return `${t}
628
628
 
629
- ${n.consensusSystemPrompt()}`},consensusUserPrompt(r,i,o){return n.consensusUserPrompt(r,i,o)},parseConsensusResponse(r){return n.parseConsensusResponse(r)},preferredFindingKinds(){return n.preferredFindingKinds()},...M(n)?{verificationReviewUserPrompt(r,i,o,s){return n.verificationReviewUserPrompt(r,i,o,s)},parseVerificationReviewResponse(r,i){return n.parseVerificationReviewResponse(r,i)},debateTurnUserPrompt(r,i,o,s){return n.debateTurnUserPrompt(r,i,o,s)},parseDebateTurnResponse(r,i){return n.parseDebateTurnResponse(r,i)},adjudicationUserPrompt(r,i,o,s){return n.adjudicationUserPrompt(r,i,o,s)},parseAdjudicationResponse(r){return n.parseAdjudicationResponse(r)},claimAwareConsensusUserPrompt(r,i,o,s){return n.claimAwareConsensusUserPrompt(r,i,o,s)}}:{}}:n}a(Xn,"withLanguage");var Qn=class{static{a(this,"Arena");}config;strategy;limits;constructor(e){if(e.participants.length<2)throw new Error("Arena requires at least 2 participants");let t=e.mode??"review",r=Xe[t];this.config={mode:t,maxDiscussionRounds:e.maxDiscussionRounds??r.maxDiscussionRounds,...e},this.limits=e.executionLimits??Qe,this.strategy=e.strategy??gn(t);}async run(e,t){let r=this.config.participants.map(C=>C.name),i=this.config.signal;b.info("arena.start",{mode:this.config.mode,participants:r}),i?.throwIfAborted();let o=this.config.participants[0].llm,s=await hn(e,o,t,i);this.config.onProgress?.({type:"plan_resolved",plan:s}),b.info("arena.plan",{mode:s.mode,lenses:s.lenses.map(C=>C.name),sources:s.sources.map(C=>C.kind),subject:s.subject.label,confidence:s.confidence}),!t?.mode&&s.mode!==this.config.mode&&(this.config.mode=s.mode),i?.throwIfAborted();let c=this.config.onProgress,{artifacts:m,quickFacts:d}=await Fn(s,e,{signal:i,onProgress:a(C=>{C.type==="evidence_started"?c?.({type:"evidence_started",source:C.source}):c?.({type:"evidence_source_done",source:C.source,count:C.count??0,durationMs:C.durationMs??0,timedOut:C.timedOut??false});},"onProgress")});c?.({type:"evidence_collected",artifacts:m}),b.info("arena.evidence",{artifactCount:m.length,sources:s.sources.map(C=>C.kind)});let l={plan:s,artifacts:m,quickFacts:d};this.strategy=this.config.strategy??fn(s),this.strategy=Xn(this.strategy,e);let p=this.config.enableContextTools!==false?qn(s):void 0;i?.throwIfAborted(),b.info("arena.research_phase",{participants:r});let g=await Ke({participants:this.config.participants,strategy:this.strategy,topic:e,baseContext:l,enableContextTools:this.config.enableContextTools??true,contextTools:p,signal:i,onProgress:this.config.onProgress}),u=g.map(C=>C.report),h=g.map(C=>C.dossier);i?.throwIfAborted();let y=new Ce;for(let C of h)y.appendDossier(C);let w=Bn({dossiers:h,ledger:y,onProgress:this.config.onProgress});b.info("arena.claims_registered",{claimCount:w.length,byOwner:Object.fromEntries(r.map(C=>[C,w.filter(P=>P.owner===C).length]))}),i?.throwIfAborted();let A=this.config.concluder??r[0],$=this.config.participants.find(C=>C.name===A);!$&&this.config.concluder&&b.warn("arena.concluder_not_found",{requested:this.config.concluder,fallback:this.config.participants[0].name});let b$1=$??this.config.participants[0],j=this.config.enableContextTools!==false;return this.config.mode==="planning"?this.runPlanningPath({topic:e,participantNames:r,plan:s,baseContext:l,reports:u,dossiers:h,ledger:y,concluder:b$1,contextTools:p,enableContextTools:j,signal:i}):this.runReviewDiscussionPath({topic:e,participantNames:r,plan:s,baseContext:l,reports:u,dossiers:h,ledger:y,concluder:b$1,signal:i})}async runPlanningPath(e){let{topic:t,participantNames:r,plan:i,baseContext:o,reports:s,dossiers:c,ledger:m,concluder:d,contextTools:l,enableContextTools:p,signal:g}=e;b.info("arena.planning_merge_review_phase");let{reviews:u}=await Be({participants:this.config.participants,strategy:this.strategy,topic:t,reports:s,ledger:m,limits:this.limits,mode:"planning",signal:g,onProgress:this.config.onProgress});g?.throwIfAborted();let h=m.getAllClaims(),y={verified:h.filter(A=>A.status==="verified"),contested:h.filter(A=>A.status==="contested"),unresolved:h.filter(A=>A.status==="unresolved"),rejected:h.filter(A=>A.status==="rejected")};b.info("arena.planning_consensus_phase",{concluder:d.name});let w=await Ye({concluder:d,strategy:this.strategy,topic:t,reports:s,reviews:u,claimSummary:y,signal:g,onProgress:this.config.onProgress});if(g?.throwIfAborted(),w.roadmap.length>0&&te(this.strategy)){b.info("arena.detail_expansion_phase",{phaseCount:w.roadmap.length});try{let A=await Hn({concluder:d,strategy:this.strategy,topic:t,phases:w.roadmap,ledger:m,limits:this.limits,enableContextTools:p,contextTools:l,signal:g,onProgress:this.config.onProgress});w.roadmapDetails=A;}catch(A){b.warn("arena.detail_expansion_failed",{error:A.message,phaseCount:w.roadmap.length});}}return {topic:t,mode:this.config.mode,participants:r,plan:i,baseContext:o,reports:s,dossiers:c,claims:h,reviews:u,consensus:w}}async runReviewDiscussionPath(e){let{topic:t,participantNames:r,plan:i,baseContext:o,reports:s,dossiers:c,ledger:m,concluder:d,signal:l}=e;b.info("arena.verification_review_phase");let{reviews:p}=await Be({participants:this.config.participants,strategy:this.strategy,topic:t,reports:s,ledger:m,limits:this.limits,signal:l,onProgress:this.config.onProgress});l?.throwIfAborted(),b.info("arena.debate_phase");let g=await Wn({participants:this.config.participants,strategy:this.strategy,topic:t,ledger:m,limits:this.limits,maxRounds:this.config.maxDiscussionRounds,signal:l,onProgress:this.config.onProgress});l?.throwIfAborted(),b.info("arena.adjudication_phase",{concluder:d.name});let u=await Gn({concluder:d,strategy:this.strategy,topic:t,ledger:m,signal:l,onProgress:this.config.onProgress});l?.throwIfAborted();let h=m.getAllClaims(),y={verified:h.filter(A=>A.status==="verified"),contested:h.filter(A=>A.status==="contested"),unresolved:h.filter(A=>A.status==="unresolved"),rejected:h.filter(A=>A.status==="rejected")};b.info("arena.consensus_phase",{concluder:d.name,verified:y.verified.length,unresolved:y.unresolved.length});let w=await Ye({concluder:d,strategy:this.strategy,topic:t,reports:s,reviews:p,claimSummary:y,signal:l,onProgress:this.config.onProgress});return {topic:t,mode:this.config.mode,participants:r,plan:i,baseContext:o,reports:s,dossiers:c,claims:h,reviews:p,debateRounds:g,adjudications:u,consensus:w}}};h();var ye=[{id:"openrouter",name:"OpenRouter (\u63A8\u8350 \u2014 \u652F\u6301\u6240\u6709\u6A21\u578B)",envKey:"OPENROUTER_API_KEY",provider:"openai",baseUrl:"https://openrouter.ai/api/v1",defaultModel:"anthropic/claude-sonnet-4.6",keyUrl:"https://openrouter.ai/keys",keyPrefix:"sk-or-",models:["anthropic/claude-opus-4.7","anthropic/claude-sonnet-4.6","anthropic/claude-haiku-4.5","openai/gpt-5","openai/gpt-5-mini","openai/gpt-4o","openai/o4-mini","openai/o3","google/gemini-2.5-pro","google/gemini-2.5-flash","deepseek/deepseek-chat","deepseek/deepseek-reasoner","qwen/qwen3-coder","meta-llama/llama-4-maverick"]},{id:"anthropic",name:"Anthropic (\u76F4\u8FDE Claude API)",envKey:"ANTHROPIC_API_KEY",provider:"anthropic",baseUrl:"https://api.anthropic.com",defaultModel:"claude-sonnet-4-6",keyUrl:"https://console.anthropic.com/settings/keys",keyPrefix:"sk-ant-",models:["claude-opus-4-7","claude-sonnet-4-6","claude-haiku-4-5"]},{id:"openai",name:"OpenAI",envKey:"OPENAI_API_KEY",provider:"openai",baseUrl:"https://api.openai.com/v1",defaultModel:"gpt-5",keyUrl:"https://platform.openai.com/api-keys",keyPrefix:"sk-",models:["gpt-5","gpt-5-mini","gpt-5-nano","gpt-4o","o4-mini","o3"]},{id:"deepseek",name:"DeepSeek (\u5B98\u65B9\u76F4\u8FDE)",envKey:"DEEPSEEK_API_KEY",provider:"openai",baseUrl:"https://api.deepseek.com/v1",defaultModel:"deepseek-v4-pro",keyUrl:"https://platform.deepseek.com/api_keys",keyPrefix:"sk-",models:["deepseek-v4-pro","deepseek-v4-flash","deepseek-chat"]},{id:"gemini",name:"Google Gemini (\u5B98\u65B9\u76F4\u8FDE)",envKey:"GEMINI_API_KEY",provider:"openai",baseUrl:"https://generativelanguage.googleapis.com/v1beta/openai",defaultModel:"gemini-2.5-pro",keyUrl:"https://aistudio.google.com/apikey",keyPrefix:"",models:["gemini-2.5-pro","gemini-2.5-flash","gemini-2.0-flash"]},{id:"ollama",name:"Ollama (\u672C\u5730\uFF0C\u65E0\u9700 Key)",envKey:"",provider:"openai",baseUrl:"http://localhost:11434/v1",defaultModel:"llama3.1",keyUrl:"https://ollama.com/library",keyPrefix:"",models:["llama3.1","qwen2.5-coder","deepseek-r1","mistral","gemma3"],noKey:true},{id:"custom",name:"\u81EA\u5B9A\u4E49 (\u4EFB\u4F55 OpenAI \u517C\u5BB9 API)",envKey:"",provider:"openai",baseUrl:"",defaultModel:"",keyUrl:"",keyPrefix:"",models:[]}],Pr=[{prefix:"anthropic/",take:4},{prefix:"openai/",take:5},{prefix:"google/",take:3},{prefix:"deepseek/",take:3},{prefix:"x-ai/",take:2},{prefix:"qwen/",take:2},{prefix:"meta-llama/",take:2},{prefix:"mistralai/",take:1}];function Sr(n){let e=c();if(e.length===0)return n;let t=/(?:-guard|-embedding|-rerank|-vision-only|:free)/i,r=[];for(let{prefix:i,take:o}of Pr){let s=e.filter(c=>c.id.startsWith(i)).filter(c=>!t.test(c.id)&&!c.id.includes("-preview")).slice(0,o);r.push(...s.map(c=>c.id));}return r.length>0?r:n}a(Sr,"buildOpenRouterModelList");function kr(n){return n.id==="openrouter"?Sr(n.models):n.models}a(kr,"resolveProviderModels");function Sa(){let n=[];for(let e of ye){if(!e.envKey)continue;let t=process.env[e.envKey];t&&t.trim()&&n.push({provider:e,envKey:e.envKey,apiKey:t.trim()});}return n}a(Sa,"detectEnvKeys");function ka(n,e){for(let t of ye)if(t.keyPrefix&&n.startsWith(t.keyPrefix))return t;if(e){for(let t of ye)if(t.baseUrl&&e.startsWith(t.baseUrl))return t}for(let t of ye){if(!t.envKey)continue;let r=process.env[t.envKey];if(r&&r.trim()===n)return t}}a(ka,"detectProviderFromApiKey");function xa(n,e){if(n)return n;if(e)return e;for(let t of ye){if(!t.envKey)continue;let r=process.env[t.envKey];if(r&&r.trim())return r.trim()}}a(xa,"resolveApiKey");var Zn={"anthropic/claude-opus-4.7":32e3,"anthropic/claude-opus-4-7":32e3,"claude-opus-4-7":32e3,"anthropic/claude-sonnet-4.6":16e3,"anthropic/claude-sonnet-4-6":16e3,"claude-sonnet-4-6":16e3,"anthropic/claude-haiku-4.5":8192,"anthropic/claude-haiku-4-5":8192,"claude-haiku-4-5":8192,"openai/gpt-5":32e3,"openai/gpt-5-mini":32e3,"openai/gpt-5-nano":16e3,"gpt-5":32e3,"gpt-5-mini":32e3,"gpt-5-nano":16e3,"openai/gpt-4o":16384,"gpt-4o":16384,"openai/o4-mini":1e5,"o4-mini":1e5,"openai/o3":1e5,o3:1e5,"google/gemini-2.5-pro":65536,"google/gemini-2.5-flash":65536,"gemini-2.5-pro":65536,"gemini-2.5-flash":65536,"gemini-2.0-flash":8192,"deepseek/deepseek-v3.2":8192,"deepseek/deepseek-r1":8192,"deepseek-v4-flash":8192,"deepseek-v4-pro":65536,"deepseek-chat":8192,"qwen/qwen3-coder":16384,"meta-llama/llama-4-maverick":32e3},et={"deepseek-v4-pro":1e6,"deepseek-v4-flash":1e6,"deepseek-chat":1e6,"deepseek/deepseek-chat":1e6,"deepseek/deepseek-v4-pro":1e6,"deepseek/deepseek-v4-flash":1e6};function ze(n){if(Zn[n])return Zn[n];if(n.includes("/")){let e=c().find(t=>t.id===n);if(e&&e.maxOutputTokens>0)return e.maxOutputTokens}}a(ze,"resolveMaxOutput");function xr(n){if(et[n])return et[n];if(n.includes("/")){let e=c().find(t=>t.id===n);if(e&&e.contextLength>0)return e.contextLength}}a(xr,"resolveContextWindow");function $r(n,e,t=[]){let r=e.lastIndexOf("/"),i=r>=0?e.slice(r+1):e,o=n.toLowerCase(),s=i.toLowerCase().startsWith(`${o}-`)?i:`${o}-${i}`,c=new Set(t);if(!c.has(s))return s;for(let m=2;;m++){let d=`${s}-${m}`;if(!c.has(d))return d}}a($r,"deriveModelPoolKey");function $a(n,e){let t=kr(n),r=[];return t.map(i=>{let o=$r(n.id,i,r);return r.push(o),{key:o,label:jr(i),provider:n.provider,model:i,baseUrl:n.baseUrl,apiKey:e,maxOutputTokens:ze(i),maxContextTokens:xr(i)}})}a($a,"buildModelPool");function jr(n){let e=n.lastIndexOf("/"),t=e>=0?n.slice(e+1):n,r=t.split("-");if(r[0]==="claude"){let i=r[1]??"";return `Claude ${i.charAt(0).toUpperCase()+i.slice(1)}`}return t.startsWith("gpt-")?`GPT-${r.slice(1).join("-")}`:t.startsWith("gemini-")?`Gemini ${r.slice(1).join("-")}`:t.charAt(0).toUpperCase()+t.slice(1)}a(jr,"modelDisplayName");function ja(n){let e=join(homedir(),".code-shell"),t=join(e,"settings.json");mkdirSync(e,{recursive:true});let r={};if(existsSync(t))try{r=JSON.parse(readFileSync(t,"utf-8"));}catch{}let i=Array.isArray(r.providers)?r.providers:[],o=i;n.addedProvider&&(i.some(g=>g?.key===n.addedProvider.key)||(o=[...i,n.addedProvider]));let s=Array.isArray(r.models)?r.models:[],c=new Set(s.map(p=>p?.key)),m=n.addedModels.filter(p=>!c.has(p.key)),d={...r,activeKey:n.activeKey,model:{...typeof r.model=="object"&&r.model?r.model:{},provider:n.activeMirror.provider,name:n.activeMirror.model,apiKey:n.activeMirror.apiKey,baseUrl:n.activeMirror.baseUrl},providers:o,models:[...s,...m]},l=`${t}.${process.pid}.tmp`;writeFileSync(l,JSON.stringify(d,null,2)+`
629
+ ${n.consensusSystemPrompt()}`},consensusUserPrompt(r,i,o){return n.consensusUserPrompt(r,i,o)},parseConsensusResponse(r){return n.parseConsensusResponse(r)},preferredFindingKinds(){return n.preferredFindingKinds()},...U(n)?{verificationReviewUserPrompt(r,i,o,s){return n.verificationReviewUserPrompt(r,i,o,s)},parseVerificationReviewResponse(r,i){return n.parseVerificationReviewResponse(r,i)},debateTurnUserPrompt(r,i,o,s){return n.debateTurnUserPrompt(r,i,o,s)},parseDebateTurnResponse(r,i){return n.parseDebateTurnResponse(r,i)},adjudicationUserPrompt(r,i,o,s){return n.adjudicationUserPrompt(r,i,o,s)},parseAdjudicationResponse(r){return n.parseAdjudicationResponse(r)},claimAwareConsensusUserPrompt(r,i,o,s){return n.claimAwareConsensusUserPrompt(r,i,o,s)}}:{}}:n}a(Xn,"withLanguage");var Qn=class{static{a(this,"Arena");}config;strategy;limits;constructor(e){if(e.participants.length<2)throw new Error("Arena requires at least 2 participants");let t=e.mode??"review",r=Xe[t];this.config={mode:t,maxDiscussionRounds:e.maxDiscussionRounds??r.maxDiscussionRounds,...e},this.limits=e.executionLimits??Qe,this.strategy=e.strategy??gn(t);}async run(e,t){let r=this.config.participants.map(C=>C.name),i=this.config.signal;b.info("arena.start",{mode:this.config.mode,participants:r}),i?.throwIfAborted();let o=this.config.participants[0].llm,s=await hn(e,o,t,i);this.config.onProgress?.({type:"plan_resolved",plan:s}),b.info("arena.plan",{mode:s.mode,lenses:s.lenses.map(C=>C.name),sources:s.sources.map(C=>C.kind),subject:s.subject.label,confidence:s.confidence}),!t?.mode&&s.mode!==this.config.mode&&(this.config.mode=s.mode),i?.throwIfAborted();let c=this.config.onProgress,{artifacts:m,quickFacts:d}=await Fn(s,e,{signal:i,onProgress:a(C=>{C.type==="evidence_started"?c?.({type:"evidence_started",source:C.source}):c?.({type:"evidence_source_done",source:C.source,count:C.count??0,durationMs:C.durationMs??0,timedOut:C.timedOut??false});},"onProgress")});c?.({type:"evidence_collected",artifacts:m}),b.info("arena.evidence",{artifactCount:m.length,sources:s.sources.map(C=>C.kind)});let l={plan:s,artifacts:m,quickFacts:d};this.strategy=this.config.strategy??fn(s),this.strategy=Xn(this.strategy,e);let p=this.config.enableContextTools!==false?qn(s):void 0;i?.throwIfAborted(),b.info("arena.research_phase",{participants:r});let g=await Ke({participants:this.config.participants,strategy:this.strategy,topic:e,baseContext:l,enableContextTools:this.config.enableContextTools??true,contextTools:p,signal:i,onProgress:this.config.onProgress}),u=g.map(C=>C.report),h=g.map(C=>C.dossier);i?.throwIfAborted();let y=new Ce;for(let C of h)y.appendDossier(C);let w=Bn({dossiers:h,ledger:y,onProgress:this.config.onProgress});b.info("arena.claims_registered",{claimCount:w.length,byOwner:Object.fromEntries(r.map(C=>[C,w.filter(P=>P.owner===C).length]))}),i?.throwIfAborted();let A=this.config.concluder??r[0],$=this.config.participants.find(C=>C.name===A);!$&&this.config.concluder&&b.warn("arena.concluder_not_found",{requested:this.config.concluder,fallback:this.config.participants[0].name});let b$1=$??this.config.participants[0],j=this.config.enableContextTools!==false;return this.config.mode==="planning"?this.runPlanningPath({topic:e,participantNames:r,plan:s,baseContext:l,reports:u,dossiers:h,ledger:y,concluder:b$1,contextTools:p,enableContextTools:j,signal:i}):this.runReviewDiscussionPath({topic:e,participantNames:r,plan:s,baseContext:l,reports:u,dossiers:h,ledger:y,concluder:b$1,signal:i})}async runPlanningPath(e){let{topic:t,participantNames:r,plan:i,baseContext:o,reports:s,dossiers:c,ledger:m,concluder:d,contextTools:l,enableContextTools:p,signal:g}=e;b.info("arena.planning_merge_review_phase");let{reviews:u}=await Be({participants:this.config.participants,strategy:this.strategy,topic:t,reports:s,ledger:m,limits:this.limits,mode:"planning",signal:g,onProgress:this.config.onProgress});g?.throwIfAborted();let h=m.getAllClaims(),y={verified:h.filter(A=>A.status==="verified"),contested:h.filter(A=>A.status==="contested"),unresolved:h.filter(A=>A.status==="unresolved"),rejected:h.filter(A=>A.status==="rejected")};b.info("arena.planning_consensus_phase",{concluder:d.name});let w=await Ye({concluder:d,strategy:this.strategy,topic:t,reports:s,reviews:u,claimSummary:y,signal:g,onProgress:this.config.onProgress});if(g?.throwIfAborted(),w.roadmap.length>0&&te(this.strategy)){b.info("arena.detail_expansion_phase",{phaseCount:w.roadmap.length});try{let A=await Hn({concluder:d,strategy:this.strategy,topic:t,phases:w.roadmap,ledger:m,limits:this.limits,enableContextTools:p,contextTools:l,signal:g,onProgress:this.config.onProgress});w.roadmapDetails=A;}catch(A){b.warn("arena.detail_expansion_failed",{error:A.message,phaseCount:w.roadmap.length});}}return {topic:t,mode:this.config.mode,participants:r,plan:i,baseContext:o,reports:s,dossiers:c,claims:h,reviews:u,consensus:w}}async runReviewDiscussionPath(e){let{topic:t,participantNames:r,plan:i,baseContext:o,reports:s,dossiers:c,ledger:m,concluder:d,signal:l}=e;b.info("arena.verification_review_phase");let{reviews:p}=await Be({participants:this.config.participants,strategy:this.strategy,topic:t,reports:s,ledger:m,limits:this.limits,signal:l,onProgress:this.config.onProgress});l?.throwIfAborted(),b.info("arena.debate_phase");let g=await Wn({participants:this.config.participants,strategy:this.strategy,topic:t,ledger:m,limits:this.limits,maxRounds:this.config.maxDiscussionRounds,signal:l,onProgress:this.config.onProgress});l?.throwIfAborted(),b.info("arena.adjudication_phase",{concluder:d.name});let u=await Gn({concluder:d,strategy:this.strategy,topic:t,ledger:m,signal:l,onProgress:this.config.onProgress});l?.throwIfAborted();let h=m.getAllClaims(),y={verified:h.filter(A=>A.status==="verified"),contested:h.filter(A=>A.status==="contested"),unresolved:h.filter(A=>A.status==="unresolved"),rejected:h.filter(A=>A.status==="rejected")};b.info("arena.consensus_phase",{concluder:d.name,verified:y.verified.length,unresolved:y.unresolved.length});let w=await Ye({concluder:d,strategy:this.strategy,topic:t,reports:s,reviews:p,claimSummary:y,signal:l,onProgress:this.config.onProgress});return {topic:t,mode:this.config.mode,participants:r,plan:i,baseContext:o,reports:s,dossiers:c,claims:h,reviews:p,debateRounds:g,adjudications:u,consensus:w}}};h();var ye=[{id:"openrouter",name:"OpenRouter (\u63A8\u8350 \u2014 \u652F\u6301\u6240\u6709\u6A21\u578B)",envKey:"OPENROUTER_API_KEY",provider:"openai",baseUrl:"https://openrouter.ai/api/v1",keyUrl:"https://openrouter.ai/keys",keyPrefix:"sk-or-",models:["anthropic/claude-sonnet-4.6","anthropic/claude-opus-4.7","anthropic/claude-haiku-4.5","openai/gpt-5","openai/gpt-5-mini","openai/gpt-4o","openai/o4-mini","openai/o3","google/gemini-2.5-pro","google/gemini-2.5-flash","deepseek/deepseek-chat","deepseek/deepseek-reasoner","qwen/qwen3-coder","meta-llama/llama-4-maverick"]},{id:"anthropic",name:"Anthropic (\u76F4\u8FDE Claude API)",envKey:"ANTHROPIC_API_KEY",provider:"anthropic",baseUrl:"https://api.anthropic.com",keyUrl:"https://console.anthropic.com/settings/keys",keyPrefix:"sk-ant-",models:["claude-sonnet-4-6","claude-opus-4-7","claude-haiku-4-5"]},{id:"openai",name:"OpenAI",envKey:"OPENAI_API_KEY",provider:"openai",baseUrl:"https://api.openai.com/v1",keyUrl:"https://platform.openai.com/api-keys",keyPrefix:"sk-",models:["gpt-5","gpt-5-mini","gpt-5-nano","gpt-4o","o4-mini","o3"]},{id:"deepseek",name:"DeepSeek (\u5B98\u65B9\u76F4\u8FDE)",envKey:"DEEPSEEK_API_KEY",provider:"openai",baseUrl:"https://api.deepseek.com/v1",keyUrl:"https://platform.deepseek.com/api_keys",keyPrefix:"sk-",models:["deepseek-v4-pro","deepseek-v4-flash","deepseek-chat"]},{id:"zai",name:"Z.AI (GLM \u5B98\u65B9)",envKey:"ZAI_API_KEY",provider:"openai",baseUrl:"https://api.z.ai/api/paas/v4",keyUrl:"https://z.ai/manage-apikey/apikey-list",keyPrefix:"",models:["glm-5.1","glm-4.6","glm-4.5-air"]},{id:"gemini",name:"Google Gemini (\u5B98\u65B9\u76F4\u8FDE)",envKey:"GEMINI_API_KEY",provider:"openai",baseUrl:"https://generativelanguage.googleapis.com/v1beta/openai",keyUrl:"https://aistudio.google.com/apikey",keyPrefix:"",models:["gemini-2.5-pro","gemini-2.5-flash","gemini-2.0-flash"]},{id:"ollama",name:"Ollama (\u672C\u5730\uFF0C\u65E0\u9700 Key)",envKey:"",provider:"openai",baseUrl:"http://localhost:11434/v1",keyUrl:"https://ollama.com/library",keyPrefix:"",models:["llama3.1","qwen2.5-coder","deepseek-r1","mistral","gemma3"],noKey:true},{id:"custom",name:"\u81EA\u5B9A\u4E49 (\u4EFB\u4F55 OpenAI \u517C\u5BB9 API)",envKey:"",provider:"openai",baseUrl:"",keyUrl:"",keyPrefix:"",models:[]}],Pr=[{prefix:"anthropic/",take:4},{prefix:"openai/",take:5},{prefix:"google/",take:3},{prefix:"deepseek/",take:3},{prefix:"x-ai/",take:2},{prefix:"qwen/",take:2},{prefix:"meta-llama/",take:2},{prefix:"mistralai/",take:1}];function Sr(n){let e=c();if(e.length===0)return n;let t=/(?:-guard|-embedding|-rerank|-vision-only|:free)/i,r=[];for(let{prefix:i,take:o}of Pr){let s=e.filter(c=>c.id.startsWith(i)).filter(c=>!t.test(c.id)&&!c.id.includes("-preview")).slice(0,o);r.push(...s.map(c=>c.id));}return r.length>0?r:n}a(Sr,"buildOpenRouterModelList");function kr(n){return n.id==="openrouter"?Sr(n.models):n.models}a(kr,"resolveProviderModels");function Sa(){let n=[];for(let e of ye){if(!e.envKey)continue;let t=process.env[e.envKey];t&&t.trim()&&n.push({provider:e,envKey:e.envKey,apiKey:t.trim()});}return n}a(Sa,"detectEnvKeys");function ka(n,e){for(let t of ye)if(t.keyPrefix&&n.startsWith(t.keyPrefix))return t;if(e){for(let t of ye)if(t.baseUrl&&e.startsWith(t.baseUrl))return t}for(let t of ye){if(!t.envKey)continue;let r=process.env[t.envKey];if(r&&r.trim()===n)return t}}a(ka,"detectProviderFromApiKey");function xa(n,e){if(n)return n;if(e)return e;for(let t of ye){if(!t.envKey)continue;let r=process.env[t.envKey];if(r&&r.trim())return r.trim()}}a(xa,"resolveApiKey");var Zn={"anthropic/claude-opus-4.7":32e3,"anthropic/claude-opus-4-7":32e3,"claude-opus-4-7":32e3,"anthropic/claude-sonnet-4.6":16e3,"anthropic/claude-sonnet-4-6":16e3,"claude-sonnet-4-6":16e3,"anthropic/claude-haiku-4.5":8192,"anthropic/claude-haiku-4-5":8192,"claude-haiku-4-5":8192,"openai/gpt-5":32e3,"openai/gpt-5-mini":32e3,"openai/gpt-5-nano":16e3,"gpt-5":32e3,"gpt-5-mini":32e3,"gpt-5-nano":16e3,"openai/gpt-4o":16384,"gpt-4o":16384,"openai/o4-mini":1e5,"o4-mini":1e5,"openai/o3":1e5,o3:1e5,"google/gemini-2.5-pro":65536,"google/gemini-2.5-flash":65536,"gemini-2.5-pro":65536,"gemini-2.5-flash":65536,"gemini-2.0-flash":8192,"deepseek/deepseek-v3.2":8192,"deepseek/deepseek-r1":8192,"deepseek-v4-flash":8192,"deepseek-v4-pro":65536,"deepseek-chat":8192,"qwen/qwen3-coder":16384,"meta-llama/llama-4-maverick":32e3},et={"deepseek-v4-pro":1e6,"deepseek-v4-flash":1e6,"deepseek-chat":1e6,"deepseek/deepseek-chat":1e6,"deepseek/deepseek-v4-pro":1e6,"deepseek/deepseek-v4-flash":1e6};function ze(n){if(Zn[n])return Zn[n];if(n.includes("/")){let e=c().find(t=>t.id===n);if(e&&e.maxOutputTokens>0)return e.maxOutputTokens}}a(ze,"resolveMaxOutput");function xr(n){if(et[n])return et[n];if(n.includes("/")){let e=c().find(t=>t.id===n);if(e&&e.contextLength>0)return e.contextLength}}a(xr,"resolveContextWindow");function $r(n,e,t=[]){let r=e.lastIndexOf("/"),i=r>=0?e.slice(r+1):e,o=n.toLowerCase(),s=i.toLowerCase().startsWith(`${o}-`)?i:`${o}-${i}`,c=new Set(t);if(!c.has(s))return s;for(let m=2;;m++){let d=`${s}-${m}`;if(!c.has(d))return d}}a($r,"deriveModelPoolKey");function $a(n,e){let t=kr(n),r=[];return t.map(i=>{let o=$r(n.id,i,r);return r.push(o),{key:o,label:jr(i),provider:n.provider,model:i,baseUrl:n.baseUrl,apiKey:e,maxOutputTokens:ze(i),maxContextTokens:xr(i)}})}a($a,"buildModelPool");function jr(n){let e=n.lastIndexOf("/"),t=e>=0?n.slice(e+1):n,r=t.split("-");if(r[0]==="claude"){let i=r[1]??"";return `Claude ${i.charAt(0).toUpperCase()+i.slice(1)}`}return t.startsWith("gpt-")?`GPT-${r.slice(1).join("-")}`:t.startsWith("gemini-")?`Gemini ${r.slice(1).join("-")}`:t.charAt(0).toUpperCase()+t.slice(1)}a(jr,"modelDisplayName");function ja(n){let e=join(homedir(),".code-shell"),t=join(e,"settings.json");mkdirSync(e,{recursive:true});let r={};if(existsSync(t))try{r=JSON.parse(readFileSync(t,"utf-8"));}catch{}let i=Array.isArray(r.providers)?r.providers:[],o=i;n.addedProvider&&(i.some(g=>g?.key===n.addedProvider.key)||(o=[...i,n.addedProvider]));let s=Array.isArray(r.models)?r.models:[],c=new Set(s.map(p=>p?.key)),m=n.addedModels.filter(p=>!c.has(p.key)),d={...r,activeKey:n.activeKey,model:{...typeof r.model=="object"&&r.model?r.model:{},provider:n.activeMirror.provider,name:n.activeMirror.model,apiKey:n.activeMirror.apiKey,baseUrl:n.activeMirror.baseUrl},providers:o,models:[...s,...m]},l=`${t}.${process.pid}.tmp`;writeFileSync(l,JSON.stringify(d,null,2)+`
630
630
  `,"utf-8");try{renameSync(l,t);}catch{writeFileSync(t,JSON.stringify(d,null,2)+`
631
631
  `,"utf-8");}}a(ja,"appendOnboardingResult");function _a(n){let e=join(homedir(),".code-shell"),t=join(e,"settings.json"),r={};if(existsSync(t))try{r=JSON.parse(readFileSync(t,"utf-8"));}catch{}let i={...r,arena:{participants:n}};writeFileSync(t,JSON.stringify(i,null,2)+`
632
632
  `,"utf-8");}a(_a,"saveArenaSettingsByKeys");h();var it={claude:{provider:"openai",model:"anthropic/claude-opus-4.6",maxOutputTokens:32e3},"claude-sonnet":{provider:"openai",model:"anthropic/claude-sonnet-4.6",maxOutputTokens:16e3},"claude-haiku":{provider:"openai",model:"anthropic/claude-haiku-4.5",maxOutputTokens:8192},gpt:{provider:"openai",model:"openai/gpt-5.4",maxOutputTokens:32e3},gpt4o:{provider:"openai",model:"openai/gpt-4o",maxOutputTokens:16384},o4:{provider:"openai",model:"openai/o4-mini",maxOutputTokens:1e5},o3:{provider:"openai",model:"openai/o3",maxOutputTokens:1e5},deepseek:{provider:"openai",model:"deepseek/deepseek-v3.2",maxOutputTokens:8192},"deepseek-r1":{provider:"openai",model:"deepseek/deepseek-r1",maxOutputTokens:8192},gemini:{provider:"openai",model:"google/gemini-3.1-pro-preview",maxOutputTokens:65536},"gemini-2.5":{provider:"openai",model:"google/gemini-2.5-pro",maxOutputTokens:65536},"gemini-flash":{provider:"openai",model:"google/gemini-3-flash-preview",maxOutputTokens:65536},qwen:{provider:"openai",model:"qwen/qwen3-235b-a22b",maxOutputTokens:8192},"qwen-coder":{provider:"openai",model:"qwen/qwen3-coder",maxOutputTokens:16384},llama:{provider:"openai",model:"meta-llama/llama-4-maverick",maxOutputTokens:32e3},devstral:{provider:"openai",model:"mistralai/devstral-medium",maxOutputTokens:24e3}};function La(n){let e=it[n];if(e)return e.maxOutputTokens;let t=Object.values(it).find(r=>r.model===n);return t?t.maxOutputTokens:ze(n)??8192}a(La,"getMaxOutputTokens");h();function _r(n){let e=n.mode.charAt(0).toUpperCase()+n.mode.slice(1),t=[];t.push(""),t.push(R.bold(` \u2550\u2550\u2550 ${e} Conclusion \u2550\u2550\u2550`)),t.push(""),n.consensus.summary&&(t.push(` ${n.consensus.summary}`),t.push("")),n.mode==="planning"&&(t.push(...st(n.consensus.roadmap)),n.consensus.roadmapDetails&&n.consensus.roadmapDetails.length>0&&t.push(...Er(n.consensus.roadmapDetails)));for(let i of Or(n))t.push(...Tr(i.title,i.items,i.color,i.icon));if(n.mode!=="planning"&&t.push(...st(n.consensus.roadmap)),n.consensus.nextActions.length>0){t.push(R.bold.white(`
633
633
  Next Actions:`));for(let i of n.consensus.nextActions){let o=i.priority==="high"?R.red("HIGH"):i.priority==="medium"?R.yellow("MED"):R.dim("LOW");t.push(` ${R.white("\u2192")} [${o}${R.white("]")} ${i.title}`),i.rationale&&t.push(R.dim(` ${i.rationale}`));}}t.push("");let r=n.plan?` | Lenses: ${n.plan.lenses.map(i=>i.name).join(", ")} | Sources: ${n.plan.sources.map(i=>i.kind).join(", ")}`:"";return t.push(R.dim(` Mode: ${e} | Findings: ${Dr(n)} | Models: ${n.participants.join(", ")}`+r)),t.push(""),t.join(`
634
- `)}a(_r,"formatArenaResult");function Ua(n){console.log(_r(n));}a(Ua,"printArenaResult");function Tr(n,e,t,r){if(e.length===0)return [];let i=[];i.push(t(`
634
+ `)}a(_r,"formatArenaResult");function Ma(n){console.log(_r(n));}a(Ma,"printArenaResult");function Tr(n,e,t,r){if(e.length===0)return [];let i=[];i.push(t(`
635
635
  ${n}:`));for(let o of e)i.push(t(` ${r} ${o.title}`)),o.summary&&i.push(R.dim(` ${o.summary}`)),o.challenge.length>0&&i.push(R.dim(` Challenged by: ${o.challenge.join(", ")}`));return i}a(Tr,"formatConsensusSection");function Dr(n){return n.reports.reduce((e,t)=>e+t.findings.length,0)}a(Dr,"countFindings");function st(n){if(n.length===0)return [];let e=[];e.push(R.bold.white(`
636
636
  Roadmap:`));for(let[t,r]of n.entries()){let i=r.priority==="high"?R.red("HIGH"):r.priority==="medium"?R.yellow("MED"):R.dim("LOW");e.push(` ${R.white("\u2192")} Phase ${t+1}: ${r.title} [${i}${R.white("]")}`),r.goal&&e.push(R.dim(` Goal: ${r.goal}`)),r.scope.length>0&&e.push(R.dim(` Scope: ${r.scope.join("; ")}`)),r.deliverables.length>0&&e.push(R.dim(` Deliverables: ${r.deliverables.join("; ")}`)),r.dependencies.length>0&&e.push(R.dim(` Dependencies: ${r.dependencies.join("; ")}`)),r.risks.length>0&&e.push(R.dim(` Risks: ${r.risks.join("; ")}`)),r.successCriteria.length>0&&e.push(R.dim(` Success: ${r.successCriteria.join("; ")}`));}return e}a(st,"formatRoadmapSection");function Er(n){let e=[];e.push(R.bold.white(`
637
637
  Implementation Details:`));for(let t of n){let r=t.effort==="large"?R.red("L"):t.effort==="medium"?R.yellow("M"):R.green("S");if(e.push(`
638
638
  ${R.white("\u25B8")} ${t.phaseTitle} [${r}]`),t.objective&&e.push(R.dim(` ${t.objective}`)),t.targetFiles.length>0&&e.push(R.dim(` Files: ${t.targetFiles.join(", ")}`)),t.codeChanges.length>0)for(let i of t.codeChanges)e.push(R.dim(` \u2022 ${i}`));if(t.interfaces.length>0&&e.push(R.dim(` Interfaces: ${t.interfaces.join("; ")}`)),t.migrationSteps.length>0){e.push(R.dim(" Migration:"));for(let[i,o]of t.migrationSteps.entries())e.push(R.dim(` ${i+1}. ${o}`));}t.validation.length>0&&e.push(R.dim(` Validation: ${t.validation.join("; ")}`)),t.blockers.length>0&&e.push(R.red(` Blockers: ${t.blockers.join("; ")}`));}return e}a(Er,"formatRoadmapDetailsSection");function Or(n){let e=new Set(["strength","improvement","risk","question"]),t=["risk","improvement","strength","question"],r=(n.plan?.outputShape?.emphasize??[]).filter(o=>e.has(o));return Lr([...r,...t]).map(o=>{switch(o){case "strength":return {kind:o,title:"Strengths",items:n.consensus.strengths,color:R.green,icon:"\u2713"};case "improvement":return {kind:o,title:"Improvements",items:n.consensus.improvements,color:R.yellow,icon:"\u2192"};case "risk":return {kind:o,title:"Risks",items:n.consensus.risks,color:R.red,icon:"\u26A0"};case "question":return {kind:o,title:"Open Questions",items:n.consensus.openQuestions,color:R.cyan,icon:"?"}}}).filter(o=>o!=null).filter(o=>o.items.length>0)}a(Or,"getOrderedConsensusSections");function Lr(n){let e=new Set,t=[];for(let r of n)e.has(r)||(e.add(r),t.push(r));return t}a(Lr,"dedupeFindingKinds");function Fr(n){return e=>{switch(e.type){case "plan_resolved":n(R.dim(`Plan: ${e.plan.mode} | lenses: ${e.plan.lenses.map(t=>t.name).join(", ")} | sources: ${e.plan.sources.map(t=>t.kind).join(", ")}`+(e.plan.confidence!=="high"?` (${e.plan.confidence} confidence)`:"")));break;case "evidence_started":n(R.dim(` \xB7 collecting from ${e.source}\u2026`));break;case "evidence_source_done":{let t=e.timedOut?R.yellow(" (timed out)"):"";n(R.dim(` \xB7 ${e.source}: ${e.count} artifacts in ${e.durationMs}ms${t}`));break}case "evidence_collected":n(R.dim(`Evidence: ${e.artifacts.length} artifacts collected`));break;case "research_start":n(R.dim(`\u23F3 ${e.participant} researching...`));break;case "research_done":{let t=e.report.findings.length;n(`${e.participant}: ${R.green("done")} (${t} findings)`);break}case "context_lookup":for(let t of e.tools)n(R.dim(` \u{1F50D} ${e.participant}: ${t}`));break;case "claims_registered":n(R.dim(`${e.claimCount} claims registered`));break;case "cross_review_start":n(R.dim("\u2500\u2500 Cross Review \u2500\u2500"));break;case "cross_review_done":n(R.dim(`${e.reviews.length} peer reviews collected`));break;case "verification_start":n(R.dim("\u2500\u2500 Verification Review \u2500\u2500"));break;case "verification_done":n(R.dim(`${e.challengeCount} challenges raised`));break;case "debate_round_start":n(R.dim(`\u2500\u2500 Debate Round ${e.round} (${e.claims.length} claims) \u2500\u2500`));break;case "debate_round_done":n(R.dim(`Round ${e.round}: ${e.resolved} resolved`));break;case "adjudication_done":n(R.dim(`Adjudication: ${e.accepted} accepted, ${e.unresolved} unresolved`));break;case "planning_merge_review_start":n(R.dim("\u2500\u2500 Planning Merge Review \u2500\u2500"));break;case "planning_merge_review_done":n(R.dim(`${e.mergeCount} merge suggestions collected`));break;case "roadmap_expansion_start":n(R.dim(`\u2500\u2500 Expanding ${e.phaseCount} roadmap phases \u2500\u2500`));break;case "roadmap_expansion_done":n(R.dim(`${e.detailCount} phase details generated`));break;case "consensus_start":n(R.dim("\u23F3 Building consensus..."));break;}}}a(Fr,"createProgressRenderer");function Ka(n){Fr(e=>console.log(` ${e}`))(n);}a(Ka,"renderProgress");h();function Ya(n){let e=[],t=n.mode.charAt(0).toUpperCase()+n.mode.slice(1);e.push(`## Arena ${t} Result`),e.push(`**Topic:** ${n.topic}`),e.push(`**Models:** ${n.participants.join(" vs ")}`),e.push("");let r=n.consensus;if(r.subjectSummary){let i=n.plan.outputShape.overviewLabel??(n.mode==="review"?"What Changed":n.mode==="planning"?"Current Scope":"Problem Framing");e.push(`### ${i}`),e.push(r.subjectSummary),e.push("");}if(r.summary&&(e.push("### Overall Assessment"),e.push(r.summary),e.push("")),n.mode==="planning"&&r.roadmap.length>0){e.push("### Roadmap");for(let[i,o]of r.roadmap.entries())e.push(...ot(i,o));if(e.push(""),r.roadmapDetails&&r.roadmapDetails.length>0){e.push("### Implementation Details");for(let i of r.roadmapDetails)e.push(...Ir(i));e.push("");}}for(let i of Nr(n)){e.push(`### ${i.title}`);for(let o of i.items)e.push(`- **${o.title}**: ${o.summary}`);e.push("");}if(n.mode!=="planning"&&r.roadmap.length>0){e.push("### Roadmap");for(let[i,o]of r.roadmap.entries())e.push(...ot(i,o));e.push("");}if(r.nextActions.length>0){e.push("### Next Actions");for(let i of r.nextActions){let o=i.priority==="high"?"\u{1F534}":i.priority==="medium"?"\u{1F7E1}":"\u26AA";e.push(`- ${o} **${i.title}**: ${i.rationale}`);}e.push("");}if(n.reports.some(i=>i.findings.length>0)){e.push("---"),e.push("### Participant Findings");for(let i of n.reports){if(i.findings.length===0){e.push(`
639
639
  **${i.participant}**: ${i.contextSummary||"(no findings)"}`);continue}e.push(`
640
640
  **${i.participant}** (${i.findings.length} findings)`),i.contextSummary&&e.push(`> ${i.contextSummary}`);for(let o of i.findings){let s=o.severity?`/${o.severity}`:"";e.push(`- [${o.kind}${s}] **${o.title}**: ${o.summary}`);}}}return e.join(`
641
- `)}a(Ya,"formatArenaResultForSession");function ot(n,e){let t=e.priority==="high"?"High":e.priority==="medium"?"Medium":"Low",r=[`#### Phase ${n+1}: ${e.title} (${t} priority)`];return e.goal&&r.push(`Goal: ${e.goal}`),e.scope.length>0&&r.push(`Scope: ${e.scope.join("; ")}`),e.deliverables.length>0&&r.push(`Deliverables: ${e.deliverables.join("; ")}`),e.dependencies.length>0&&r.push(`Dependencies: ${e.dependencies.join("; ")}`),e.risks.length>0&&r.push(`Risks: ${e.risks.join("; ")}`),e.successCriteria.length>0&&r.push(`Success Criteria: ${e.successCriteria.join("; ")}`),r.push(""),r}a(ot,"formatRoadmapPhase");function Ir(n){let e=n.effort==="large"?"Large":n.effort==="small"?"Small":"Medium",t=[`#### ${n.phaseTitle} (${e} effort)`];if(n.objective&&t.push(n.objective),n.targetFiles.length>0&&t.push(`**Target files:** ${n.targetFiles.map(r=>"`"+r+"`").join(", ")}`),n.codeChanges.length>0){t.push("**Code changes:**");for(let r of n.codeChanges)t.push(`- ${r}`);}if(n.interfaces.length>0&&t.push(`**Interfaces:** ${n.interfaces.join("; ")}`),n.migrationSteps.length>0){t.push("**Migration steps:**");for(let[r,i]of n.migrationSteps.entries())t.push(`${r+1}. ${i}`);}return n.validation.length>0&&t.push(`**Validation:** ${n.validation.join("; ")}`),n.blockers.length>0&&t.push(`**Blockers:** ${n.blockers.join("; ")}`),t.push(""),t}a(Ir,"formatPhaseDetail");function Nr(n){let e=new Set(["strength","improvement","risk","question"]),t=["risk","improvement","strength","question"],r=(n.plan?.outputShape?.emphasize??[]).filter(s=>e.has(s));return Mr([...r,...t]).map(s=>{switch(s){case "strength":return {kind:s,title:"\u2713 Strengths",items:n.consensus.strengths};case "improvement":return {kind:s,title:"\u2192 Improvements",items:n.consensus.improvements};case "risk":return {kind:s,title:"\u26A0 Risks",items:n.consensus.risks};case "question":return {kind:s,title:"? Open Questions",items:n.consensus.openQuestions}}}).filter(s=>s!=null).filter(s=>s.items.length>0)}a(Nr,"getOrderedConsensusSections");function Mr(n){let e=new Set,t=[];for(let r of n)e.has(r)||(e.add(r),t.push(r));return t}a(Mr,"dedupeFindingKinds");export{Ve as A,ro as B,io as C,fo as D,Be as E,Wn as F,Gn as G,Ye as H,Ce as I,Qn as J,Sa as K,ka as L,xa as M,$a as N,ja as O,_a as P,it as Q,La as R,_r as S,Ua as T,Fr as U,Ka as V,Ya as W,He as a,F as b,M as c,me as d,ge as e,fe as f,Ai as g,dn as h,we as i,ln as j,gn as k,fn as l,hn as m,Fn as n,qn as o,Ns as p,Js as q,Ke as r,Bn as s,Yn as t,G as u,Zs as v,pe as w,pr as x,Jn as y,zn as z};
641
+ `)}a(Ya,"formatArenaResultForSession");function ot(n,e){let t=e.priority==="high"?"High":e.priority==="medium"?"Medium":"Low",r=[`#### Phase ${n+1}: ${e.title} (${t} priority)`];return e.goal&&r.push(`Goal: ${e.goal}`),e.scope.length>0&&r.push(`Scope: ${e.scope.join("; ")}`),e.deliverables.length>0&&r.push(`Deliverables: ${e.deliverables.join("; ")}`),e.dependencies.length>0&&r.push(`Dependencies: ${e.dependencies.join("; ")}`),e.risks.length>0&&r.push(`Risks: ${e.risks.join("; ")}`),e.successCriteria.length>0&&r.push(`Success Criteria: ${e.successCriteria.join("; ")}`),r.push(""),r}a(ot,"formatRoadmapPhase");function Ir(n){let e=n.effort==="large"?"Large":n.effort==="small"?"Small":"Medium",t=[`#### ${n.phaseTitle} (${e} effort)`];if(n.objective&&t.push(n.objective),n.targetFiles.length>0&&t.push(`**Target files:** ${n.targetFiles.map(r=>"`"+r+"`").join(", ")}`),n.codeChanges.length>0){t.push("**Code changes:**");for(let r of n.codeChanges)t.push(`- ${r}`);}if(n.interfaces.length>0&&t.push(`**Interfaces:** ${n.interfaces.join("; ")}`),n.migrationSteps.length>0){t.push("**Migration steps:**");for(let[r,i]of n.migrationSteps.entries())t.push(`${r+1}. ${i}`);}return n.validation.length>0&&t.push(`**Validation:** ${n.validation.join("; ")}`),n.blockers.length>0&&t.push(`**Blockers:** ${n.blockers.join("; ")}`),t.push(""),t}a(Ir,"formatPhaseDetail");function Nr(n){let e=new Set(["strength","improvement","risk","question"]),t=["risk","improvement","strength","question"],r=(n.plan?.outputShape?.emphasize??[]).filter(s=>e.has(s));return Ur([...r,...t]).map(s=>{switch(s){case "strength":return {kind:s,title:"\u2713 Strengths",items:n.consensus.strengths};case "improvement":return {kind:s,title:"\u2192 Improvements",items:n.consensus.improvements};case "risk":return {kind:s,title:"\u26A0 Risks",items:n.consensus.risks};case "question":return {kind:s,title:"? Open Questions",items:n.consensus.openQuestions}}}).filter(s=>s!=null).filter(s=>s.items.length>0)}a(Nr,"getOrderedConsensusSections");function Ur(n){let e=new Set,t=[];for(let r of n)e.has(r)||(e.add(r),t.push(r));return t}a(Ur,"dedupeFindingKinds");export{Ve as A,ro as B,io as C,fo as D,Be as E,Wn as F,Gn as G,Ye as H,Ce as I,Qn as J,Sa as K,ka as L,xa as M,$a as N,ja as O,_a as P,it as Q,La as R,_r as S,Ma as T,Fr as U,Ka as V,Ya as W,He as a,F as b,U as c,me as d,ge as e,fe as f,Ai as g,dn as h,we as i,ln as j,gn as k,fn as l,hn as m,Fn as n,qn as o,Ns as p,Js as q,Ke as r,Bn as s,Yn as t,G as u,Zs as v,pe as w,pr as x,Jn as y,zn as z};
@@ -0,0 +1,2 @@
1
+ import {a as a$1,c,b as b$1}from'./chunk-P6JSTIFM.js';import {h,a}from'./chunk-3QP5BQ3L.js';import {existsSync,readFileSync}from'fs';import {fileURLToPath}from'url';import {dirname,join}from'path';h();h();var _=/(?:^|[-_/])(?:embed(?:ding)?|whisper|tts|audio|image|dall-?e|moderation|rerank|guard|vision-only|realtime|transcribe|search-preview|search-api|sora|computer-use|deep-research|codex|chat-latest)(?:$|[-_/])/i,N=a(e=>e.startsWith("ft:"),"isFineTunedId"),K=a(e=>/-\d{4}-\d{2}-\d{2}$/.test(e),"isDatedSnapshotId"),l=a(e=>!_.test(e)&&!N(e)&&!K(e),"isChatLike"),u=a(e=>e?{Authorization:`Bearer ${e}`}:{},"bearer"),f={openai:{label:"OpenAI",defaultBaseUrl:"https://api.openai.com/v1",modelsPath:"/models",protocol:"openai-compat",authHeader:u,chatFilter:l},anthropic:{label:"Anthropic",defaultBaseUrl:"https://api.anthropic.com/v1",modelsPath:"/models",protocol:"anthropic-style",authHeader:a(e=>e?{"x-api-key":e,"anthropic-version":"2023-06-01"}:{"anthropic-version":"2023-06-01"},"authHeader"),chatFilter:l},deepseek:{label:"DeepSeek",defaultBaseUrl:"https://api.deepseek.com/v1",modelsPath:"/models",protocol:"openai-compat",authHeader:u,chatFilter:l},zai:{label:"Z.AI (GLM)",defaultBaseUrl:"https://api.z.ai/api/paas/v4",modelsPath:"/models",protocol:"openai-compat",authHeader:u,chatFilter:l},xai:{label:"xAI (Grok)",defaultBaseUrl:"https://api.x.ai/v1",modelsPath:"/models",protocol:"openai-compat",authHeader:u,chatFilter:l},mistral:{label:"Mistral",defaultBaseUrl:"https://api.mistral.ai/v1",modelsPath:"/models",protocol:"openai-compat",authHeader:u,chatFilter:l},groq:{label:"Groq",defaultBaseUrl:"https://api.groq.com/openai/v1",modelsPath:"/models",protocol:"openai-compat",authHeader:u,chatFilter:l},google:{label:"Google Gemini",defaultBaseUrl:"https://generativelanguage.googleapis.com/v1beta/openai",modelsPath:"https://generativelanguage.googleapis.com/v1beta/models",protocol:"gemini",authHeader:u,authQuery:a(e=>e?{key:e}:{},"authQuery"),chatFilter:a(e=>l(e)&&/gemini/i.test(e),"chatFilter")},openrouter:{label:"OpenRouter",defaultBaseUrl:"https://openrouter.ai/api/v1",modelsPath:"/models",protocol:"openai-compat",authHeader:u,chatFilter:l},ollama:{label:"Ollama (local)",defaultBaseUrl:"http://localhost:11434",modelsPath:"/api/tags",protocol:"ollama",authHeader:a(()=>({}),"authHeader"),chatFilter:l},custom:{label:"Custom",defaultBaseUrl:"",modelsPath:"/models",protocol:"openai-compat",authHeader:u,chatFilter:l}};function O(e){return f[e]??f.custom}a(O,"getKindMeta");h();var L={fetchedAt:"2026-05-14",source:"https://api-docs.deepseek.com/quick_start/pricing",count:4,models:[{id:"deepseek-v4-pro",name:"DeepSeek V4 Pro",contextLength:1e6,maxOutputTokens:384e3,inputPricePerMillion:1.74,outputPricePerMillion:3.48,modalities:["text"],thinking:true},{id:"deepseek-v4-flash",name:"DeepSeek V4 Flash",contextLength:1e6,maxOutputTokens:384e3,inputPricePerMillion:.14,outputPricePerMillion:.28,modalities:["text"],thinking:true},{id:"deepseek-chat",name:"DeepSeek Chat (legacy, deprecating)",contextLength:128e3,maxOutputTokens:8192,inputPricePerMillion:.14,outputPricePerMillion:.28,modalities:["text"]},{id:"deepseek-reasoner",name:"DeepSeek Reasoner (legacy, deprecating)",contextLength:128e3,maxOutputTokens:8192,inputPricePerMillion:.14,outputPricePerMillion:.28,modalities:["text"],thinking:true}]};var S={fetchedAt:"2026-05-14",source:"https://docs.z.ai/guides/llm/glm-5.1 + https://docs.z.ai/guides/overview/pricing",count:5,models:[{id:"glm-5.1",name:"GLM-5.1",contextLength:2e5,maxOutputTokens:128e3,inputPricePerMillion:1.4,outputPricePerMillion:4.4,modalities:["text"],thinking:true},{id:"glm-4.6",name:"GLM-4.6",contextLength:2e5,maxOutputTokens:128e3,inputPricePerMillion:.6,outputPricePerMillion:2.2,modalities:["text"],thinking:true},{id:"glm-4.5",name:"GLM-4.5",contextLength:128e3,maxOutputTokens:96e3,inputPricePerMillion:.6,outputPricePerMillion:2.2,modalities:["text"],thinking:true},{id:"glm-4.5-air",name:"GLM-4.5 Air",contextLength:128e3,maxOutputTokens:96e3,inputPricePerMillion:.2,outputPricePerMillion:1.1,modalities:["text"],thinking:true},{id:"glm-4.5-flash",name:"GLM-4.5 Flash (free tier)",contextLength:128e3,maxOutputTokens:96e3,inputPricePerMillion:0,outputPricePerMillion:0,modalities:["text"]}]};var v={fetchedAt:"2026-05-15",source:"OpenRouter model pages (openrouter.ai/openai/*) + developers.openai.com docs. OpenRouter mirrors OpenAI's published context/output limits per variant.",count:18,models:[{id:"gpt-5.5",name:"GPT-5.5",contextLength:922e3,maxOutputTokens:128e3,inputPricePerMillion:5,outputPricePerMillion:30,modalities:["text","image"],thinking:true},{id:"gpt-5.5-pro",name:"GPT-5.5 Pro",contextLength:922e3,maxOutputTokens:128e3,inputPricePerMillion:30,outputPricePerMillion:180,modalities:["text","image"],thinking:true},{id:"gpt-5.4",name:"GPT-5.4",contextLength:922e3,maxOutputTokens:128e3,inputPricePerMillion:2.5,outputPricePerMillion:15,modalities:["text","image"],thinking:true},{id:"gpt-5.4-pro",name:"GPT-5.4 Pro",contextLength:922e3,maxOutputTokens:128e3,inputPricePerMillion:30,outputPricePerMillion:180,modalities:["text","image"],thinking:true},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini",contextLength:4e5,maxOutputTokens:128e3,inputPricePerMillion:.75,outputPricePerMillion:4.5,modalities:["text","image"],thinking:true},{id:"gpt-5.4-nano",name:"GPT-5.4 Nano",contextLength:4e5,maxOutputTokens:128e3,inputPricePerMillion:.2,outputPricePerMillion:1.25,modalities:["text","image"],thinking:true},{id:"gpt-5.2",name:"GPT-5.2",contextLength:4e5,maxOutputTokens:128e3,inputPricePerMillion:1.75,outputPricePerMillion:14,modalities:["text","image"],thinking:true},{id:"gpt-5.2-pro",name:"GPT-5.2 Pro",contextLength:4e5,maxOutputTokens:128e3,modalities:["text","image"],thinking:true},{id:"gpt-5.1",name:"GPT-5.1",contextLength:4e5,maxOutputTokens:128e3,inputPricePerMillion:1.25,outputPricePerMillion:10,modalities:["text","image"],thinking:true},{id:"gpt-5",name:"GPT-5",contextLength:4e5,maxOutputTokens:128e3,inputPricePerMillion:1.25,outputPricePerMillion:10,modalities:["text","image"],thinking:true},{id:"gpt-5-pro",name:"GPT-5 Pro",contextLength:4e5,maxOutputTokens:128e3,modalities:["text","image"],thinking:true},{id:"gpt-5-mini",name:"GPT-5 Mini",contextLength:4e5,maxOutputTokens:128e3,inputPricePerMillion:.25,outputPricePerMillion:2,modalities:["text","image"],thinking:true},{id:"gpt-5-nano",name:"GPT-5 Nano",contextLength:4e5,maxOutputTokens:128e3,inputPricePerMillion:.05,outputPricePerMillion:.4,modalities:["text","image"],thinking:true},{id:"gpt-4.1",name:"GPT-4.1",contextLength:1e6,maxOutputTokens:32768,modalities:["text","image"]},{id:"gpt-4.1-mini",name:"GPT-4.1 Mini",contextLength:1e6,maxOutputTokens:32768,modalities:["text","image"]},{id:"o3",name:"o3",contextLength:2e5,maxOutputTokens:1e5,inputPricePerMillion:2,outputPricePerMillion:8,modalities:["text","image"],thinking:true},{id:"o3-pro",name:"o3-pro",contextLength:2e5,maxOutputTokens:1e5,modalities:["text","image"],thinking:true},{id:"o4-mini",name:"o4-mini",contextLength:2e5,maxOutputTokens:1e5,inputPricePerMillion:1.1,outputPricePerMillion:4.4,modalities:["text","image"],thinking:true}]};var b={fetchedAt:"2026-05-15",source:"https://ai.google.dev/gemini-api/docs/models + https://ai.google.dev/gemini-api/docs/gemini-3",count:6,models:[{id:"gemini-3.1-pro-preview",name:"Gemini 3.1 Pro (preview)",contextLength:1048576,maxOutputTokens:65536,modalities:["text","image","audio","video"],thinking:true},{id:"gemini-3-pro-preview",name:"Gemini 3 Pro (preview)",contextLength:1048576,maxOutputTokens:65536,modalities:["text","image","audio","video"],thinking:true},{id:"gemini-3.1-flash-lite",name:"Gemini 3.1 Flash-Lite",contextLength:1048576,maxOutputTokens:65536,modalities:["text","image","audio","video"],thinking:true},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash (preview)",contextLength:1048576,maxOutputTokens:65536,modalities:["text","image","audio","video"],thinking:true},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro",contextLength:1048576,maxOutputTokens:65536,inputPricePerMillion:1.25,outputPricePerMillion:10,modalities:["text","image","audio","video"],thinking:true},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash",contextLength:1e6,maxOutputTokens:65536,inputPricePerMillion:.3,outputPricePerMillion:2.5,modalities:["text","image","audio","video"],thinking:true},{id:"gemini-2.5-flash-lite",name:"Gemini 2.5 Flash-Lite",contextLength:1e6,maxOutputTokens:65536,modalities:["text","image","audio","video"],thinking:true}]};var w={deepseek:L,zai:S,openai:v,google:b};function P(e){return w[e]?.models??[]}a(P,"listStaticModels");function x(e){return w[e]!==void 0}a(x,"hasStaticCatalog");var q=dirname(fileURLToPath(import.meta.url)),y=join(q,"..","data","openrouter-models.json");async function Me(e,i){let a=O(e.kind);if(!i.refresh){let n=a$1(i.cacheDir,e.key);if(n&&!c(n))return {...n,fromCache:true}}if(e.kind==="openrouter")return W(e.key,i.cacheDir);try{let n=e.modelsPath??a.modelsPath,t=new URL(Z(e.baseUrl,n)),s=a.authHeader(e.apiKey??"");if(a.authQuery){let p=a.authQuery(e.apiKey??"");for(let[A,C]of Object.entries(p))t.searchParams.set(A,C);}let o=await fetch(t.toString(),{headers:{Accept:"application/json",...s},signal:AbortSignal.timeout(i.timeoutMs??2e4)});if(!o.ok){let p=o.status===401||o.status===403;return d(e.key,i.cacheDir,`HTTP ${o.status}`,p?void 0:e.kind)}let m=await o.json(),R=V(m,a.protocol).filter(p=>a.chatFilter(p.id)),G=Q(R),F=J(e.kind,G);return b$1(i.cacheDir,e.key,F)}catch(n){let t=n.message||String(n);return d(e.key,i.cacheDir,t,e.kind)}}a(Me,"fetchModelList");function J(e,i){if(!x(e))return i;let a=P(e),n=new Map(a.map(o=>[o.id,o])),t=new Set(i.map(o=>o.id)),s=i.map(o=>{let m=n.get(o.id);return m?{id:o.id,contextLength:o.contextLength>0?o.contextLength:m.contextLength,maxOutputTokens:o.maxOutputTokens>0?o.maxOutputTokens:m.maxOutputTokens}:o});for(let o of a)t.has(o.id)||s.push({id:o.id,contextLength:o.contextLength,maxOutputTokens:o.maxOutputTokens});return s}a(J,"enrichFromStaticCatalog");function Q(e){let i=a(a=>{let n=a.match(/(?:^|[^\d])(\d+\.\d+)(?!\d)/);if(n)return Number(n[1]);let t=a.match(/(?:^|[^\d])(\d{1,2})-(\d{1,2})(?!\d)/);if(t)return +`${t[1]}.${t[2]}`;let s=a.match(/(?:^|[^\d])(\d{1,2})(?!\d)/);return s?Number(s[1]):-1},"versionOf");return [...e].sort((a,n)=>{let t=i(a.id),s=i(n.id);return t!==s?s-t:a.id.length!==n.id.length?a.id.length-n.id.length:a.id.localeCompare(n.id)})}a(Q,"sortByRecency");function V(e,i){switch(i){case "ollama":return (e.models??[]).map(t=>({id:t.name,contextLength:0,maxOutputTokens:0}));case "anthropic-style":return (e.data??[]).map(t=>({id:t.id,contextLength:t.context_window??2e5,maxOutputTokens:t.max_output_tokens??0}));case "gemini":return (e.models??[]).map(t=>({id:t.name.replace(/^models\//,""),contextLength:t.inputTokenLimit??0,maxOutputTokens:t.outputTokenLimit??0}));case "openai-compat":return (e.data??[]).map(t=>({id:t.id,contextLength:t.context_window??t.context_length??0,maxOutputTokens:t.max_completion_tokens??0}))}return i}a(V,"normalize");function W(e,i){if(!existsSync(y))return d(e,i,"openrouter snapshot missing");try{let n=(JSON.parse(readFileSync(y,"utf-8")).models??[]).map(t=>({id:t.id,contextLength:t.contextLength??0,maxOutputTokens:t.maxOutputTokens??0}));return b$1(i,e,n)}catch(a){return d(e,i,a.message)}}a(W,"loadOpenRouterSnapshot");function d(e,i,a,n){let t=a$1(i,e);if(t)return {...t,error:a,fromCache:true};if(n&&x(n)){let s=P(n).map(o=>({id:o.id,contextLength:o.contextLength,maxOutputTokens:o.maxOutputTokens}));return {fetchedAt:new Date().toISOString(),providerKey:e,models:s,error:a}}return {fetchedAt:new Date().toISOString(),providerKey:e,models:[],error:a}}a(d,"errorResult");function Z(e,i){return !e||/^https?:\/\//i.test(i)?i:`${e.replace(/\/$/,"")}${i.startsWith("/")?"":"/"}${i}`}a(Z,"joinUrl");
2
+ export{f as a,Me as b};