switchboard-router 0.6.30 → 0.6.31

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 (118) hide show
  1. package/app/.next-cli-build/BUILD_ID +1 -1
  2. package/app/.next-cli-build/app-path-routes-manifest.json +6 -6
  3. package/app/.next-cli-build/build-manifest.json +2 -2
  4. package/app/.next-cli-build/prerender-manifest.json +3 -3
  5. package/app/.next-cli-build/server/app/(dashboard)/dashboard/agent-library/page_client-reference-manifest.js +1 -1
  6. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  7. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  8. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/routing/page_client-reference-manifest.js +1 -1
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/page_client-reference-manifest.js +1 -1
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js +3 -3
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/[id]/page_client-reference-manifest.js +1 -1
  27. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  28. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  29. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  30. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  31. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  32. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  33. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  34. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  35. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  36. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  37. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  38. package/app/.next-cli-build/server/app/_not-found.html +1 -1
  39. package/app/.next-cli-build/server/app/_not-found.rsc +3 -3
  40. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +3 -3
  41. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
  42. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  43. package/app/.next-cli-build/server/app/api/cli-tools/aider-settings/route.js +2 -2
  44. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +5 -5
  45. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +1 -1
  46. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +1 -1
  47. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +1 -1
  48. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
  49. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +1 -1
  50. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +1 -1
  51. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +1 -1
  52. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +2 -2
  53. package/app/.next-cli-build/server/app/api/cli-tools/gemini-cli-settings/route.js +2 -2
  54. package/app/.next-cli-build/server/app/api/cli-tools/grok-settings/route.js +2 -2
  55. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +2 -2
  56. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +1 -1
  57. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +2 -2
  58. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
  59. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +2 -2
  60. package/app/.next-cli-build/server/app/api/cli-tools/pi-settings/route.js +1 -1
  61. package/app/.next-cli-build/server/app/api/v1/models/info/route.js +1 -1
  62. package/app/.next-cli-build/server/app/api/v1beta/models/route.js +1 -1
  63. package/app/.next-cli-build/server/app/api/version/route.js +1 -1
  64. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  65. package/app/.next-cli-build/server/app/callback.html +1 -1
  66. package/app/.next-cli-build/server/app/callback.rsc +3 -3
  67. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +3 -3
  68. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
  69. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +3 -3
  70. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  71. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  72. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +3 -3
  73. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
  74. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  75. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +3 -3
  76. package/app/.next-cli-build/server/app/index.html +1 -1
  77. package/app/.next-cli-build/server/app/index.rsc +3 -3
  78. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +3 -3
  79. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +3 -3
  80. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
  81. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  82. package/app/.next-cli-build/server/app/landing.html +1 -1
  83. package/app/.next-cli-build/server/app/landing.rsc +3 -3
  84. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +3 -3
  85. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
  86. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +3 -3
  87. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  88. package/app/.next-cli-build/server/app/login.html +1 -1
  89. package/app/.next-cli-build/server/app/login.rsc +3 -3
  90. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +3 -3
  91. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
  92. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +3 -3
  93. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  94. package/app/.next-cli-build/server/app-paths-manifest.json +6 -6
  95. package/app/.next-cli-build/server/chunks/1350.js +1 -1
  96. package/app/.next-cli-build/server/chunks/1421.js +1 -1
  97. package/app/.next-cli-build/server/chunks/194.js +1 -1
  98. package/app/.next-cli-build/server/chunks/6985.js +1 -1
  99. package/app/.next-cli-build/server/chunks/7454.js +1 -1
  100. package/app/.next-cli-build/server/chunks/869.js +1 -1
  101. package/app/.next-cli-build/server/chunks/8998.js +4 -4
  102. package/app/.next-cli-build/server/chunks/9062.js +1 -1
  103. package/app/.next-cli-build/server/chunks/9696.js +1 -1
  104. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  105. package/app/.next-cli-build/server/middleware.js +8 -8
  106. package/app/.next-cli-build/server/pages/404.html +1 -1
  107. package/app/.next-cli-build/server/pages/500.html +1 -1
  108. package/app/.next-cli-build/server/server-reference-manifest.js +1 -1
  109. package/app/.next-cli-build/server/server-reference-manifest.json +1 -1
  110. package/app/.next-cli-build/static/chunks/1321-91e485d6232fe450.js +1 -0
  111. package/app/.next-cli-build/static/chunks/{5497-53b1dd3f23fb96bc.js → 5497-0cbb034d03b47b7c.js} +1 -1
  112. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-463c649c2ddabc82.js +10 -0
  113. package/app/package.json +1 -1
  114. package/package.json +1 -1
  115. package/app/.next-cli-build/static/chunks/1321-5250bb46aa281ab5.js +0 -1
  116. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-1ec149c6b914249d.js +0 -10
  117. /package/app/.next-cli-build/static/{dTnRQJQsV_UGBAsupqJ2u → _G05wV0ToAcQtfhzFIbzm}/_buildManifest.js +0 -0
  118. /package/app/.next-cli-build/static/{dTnRQJQsV_UGBAsupqJ2u → _G05wV0ToAcQtfhzFIbzm}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- "use strict";exports.id=1350,exports.ids=[1350],exports.modules={21350:(a,b,c)=>{c.r(b),c.d(b,{DELETE:()=>Q,GET:()=>O,POST:()=>P});var d=c(49796),e=c(23211),f=c(79748),g=c.n(f),h=c(33873),i=c.n(h),j=c(21820),k=c.n(j),l=c(55511),m=c.n(l),n=c(28286),o=c(30869),p=c(54603),q=c(24424);let r=o.h0.appPort,s=`http://localhost:${r}/api/mcp/`,t=null,u=async()=>(t||(t=await (0,p.Xj)("switchboard-cli-auth")),t),v=async a=>{let b=await u();for(let c of a)"string"==typeof c?.url&&c.url.startsWith(s)&&(c.headers={...c.headers||{},"x-switchboard-cli-token":b});return a},w="gateway",x={coworkEgressAllowedHosts:["*"],disabledBuiltinTools:[],isLocalDevMcpEnabled:!0,isDesktopExtensionEnabled:!0,isDesktopExtensionDirectoryEnabled:!0,isDesktopExtensionSignatureRequired:!1,isClaudeCodeForDesktopEnabled:!0,disableEssentialTelemetry:!0,disableNonessentialTelemetry:!0,disableNonessentialServices:!0},y=()=>{if("darwin"===k().platform()){let a=i().join(k().homedir(),"Library","Application Support");return[i().join(a,"Claude-3p"),i().join(a,"Claude")]}if("win32"===k().platform()){let a=process.env.LOCALAPPDATA||i().join(k().homedir(),"AppData","Local"),b=process.env.APPDATA||i().join(k().homedir(),"AppData","Roaming");return[i().join(a,"Claude-3p"),i().join(b,"Claude-3p"),i().join(a,"Claude"),i().join(b,"Claude")]}return[i().join(k().homedir(),".config","Claude-3p"),i().join(k().homedir(),".config","Claude")]},z=async()=>{let a=y();for(let b of a)try{return await g().access(i().join(b,"configLibrary")),b}catch{}return a[0]},A=()=>y()[0],B=async()=>i().join(await z(),"configLibrary"),C=()=>i().join(A(),"configLibrary"),D=async()=>i().join(await B(),"_meta.json"),E=()=>{if("darwin"===k().platform())return i().join(k().homedir(),"Library","Application Support","Claude");if("win32"===k().platform()){let a=process.env.APPDATA||i().join(k().homedir(),"AppData","Roaming");return i().join(a,"Claude")}return i().join(k().homedir(),".config","Claude")},F=()=>i().join(E(),"claude_desktop_config.json"),G=async()=>{try{let a=(await g().readFile(F(),"utf-8")).replace(/,(\s*[}\]])/g,"$1");return JSON.parse(a)||{}}catch(a){return{}}},H=async a=>{await g().mkdir(E(),{recursive:!0}),await g().writeFile(F(),JSON.stringify(a,null,2))},I=async()=>{let a=await G();return"3p"!==a.deploymentMode&&(a.deploymentMode="3p",await H(a),!0)},J=async()=>{let a=await G();if(!a.mcpServers||"object"!=typeof a.mcpServers)return;let b=new Set(n.LOCAL_STDIO_PLUGINS.map(a=>a.name));for(let c of Object.keys(a.mcpServers))b.has(c)&&delete a.mcpServers[c];0===Object.keys(a.mcpServers).length&&delete a.mcpServers,await H(a)},K=async()=>{for(let a of[...y(),...(()=>{if("darwin"===k().platform())return["/Applications/Claude.app",i().join(k().homedir(),"Applications","Claude.app")];if("win32"===k().platform()){let a=process.env.LOCALAPPDATA||i().join(k().homedir(),"AppData","Local"),b=process.env.ProgramFiles||"C:\\Program Files";return[i().join(a,"AnthropicClaude"),i().join(b,"Claude"),i().join(b,"AnthropicClaude")]}return[]})()])try{return await g().access(a),!0}catch{}return!1},L=async a=>{try{let b=(await g().readFile(a,"utf-8")).replace(/,(\s*[}\]])/g,"$1");return JSON.parse(b)}catch(a){return null}},M=async()=>{let a=i().join(C(),"_meta.json"),b=await L(a);if(!b||!b.appliedId){let c=await L(await D());if(c?.appliedId)b=c;else{let a=m().randomUUID();b={appliedId:a,entries:[{id:a,name:"Default"}]}}await g().mkdir(C(),{recursive:!0}),await g().writeFile(a,JSON.stringify(b,null,2))}return b};async function N(a){let b=i().join(A(),"config.json"),c={};try{c=JSON.parse(await g().readFile(b,"utf-8"))||{}}catch(a){if("ENOENT"!==a.code)return{error:a.code}}let d={};for(let b of a)b?.name&&(d[b.name]=!0);return c.operonSkipMcpApprovals=d,await g().mkdir(A(),{recursive:!0}),await g().writeFile(b,JSON.stringify(c,null,2)),{written:Object.keys(d).length}}async function O(){try{if(!await K())return e.NextResponse.json({installed:!1,config:null,message:"Claude Desktop (Cowork mode) not detected"});let a=await L(await D()),b=a?.appliedId||null,c=await B(),d=b?i().join(c,`${b}.json`):null,f=d?await L(d):null,g=f?.inferenceGatewayBaseUrl||null,h=Array.isArray(f?.inferenceModels)?f.inferenceModels.map(a=>"string"==typeof a?a:a?.name).filter(Boolean):[],j=Array.isArray(f?.managedMcpServers)?f.managedMcpServers:[],k=!!(f?.inferenceProvider===w&&g),l=new Set(n.LOCAL_STDIO_PLUGINS.map(a=>a.name)),m=j.filter(a=>l.has(a.name)&&"string"==typeof a.url&&a.url.includes("/api/mcp/")).map(a=>a.name),o=j.filter(a=>a.custom||!l.has(a.name)&&"string"==typeof a.url&&a.url.includes("/api/mcp/")).map(a=>({name:a.name,url:a.url,transport:a.transport,custom:!0}));return e.NextResponse.json({installed:!0,config:f,hasSwitchboard:k,configPath:d,cowork:{appliedId:b,baseUrl:g,models:h,provider:f?.inferenceProvider||null,plugins:j.filter(a=>!a.custom&&!(l.has(a.name)&&"string"==typeof a.url&&a.url.includes("/api/mcp/"))).map(a=>{let b=a.toolPolicy?Object.keys(a.toolPolicy):[],c=`${a.name}-`,d=new Set;for(let a of b){let b=a;for(;b.startsWith(c);)b=b.slice(c.length);d.add(b)}let e=n.DEFAULT_PLUGINS.find(b=>b.name===a.name),f=e&&Array.isArray(e.toolNames)?e.toolNames:Array.from(d);return{name:a.name,url:a.url,transport:a.transport,oauth:!!a.oauth,toolNames:f}}),localPlugins:m,customPlugins:o},defaultPlugins:n.DEFAULT_PLUGINS,localStdioPlugins:n.LOCAL_STDIO_PLUGINS})}catch(a){return console.log("Error reading cowork settings:",a),e.NextResponse.json({error:"Failed to read cowork settings"},{status:500})}}async function P(a){try{let{baseUrl:b,apiKey:c,models:d,plugins:f,localPlugins:h,customPlugins:j}=await a.json();if(!b||!c)return e.NextResponse.json({error:"baseUrl and apiKey are required"},{status:400});let k=Array.isArray(d)?d.filter(a=>"string"==typeof a&&a.trim()):[];if(0===k.length)return e.NextResponse.json({error:"At least one model is required"},{status:400});let l=Array.isArray(f)?f:n.DEFAULT_PLUGINS,m=Array.isArray(h)?h:[],o=(Array.isArray(j)?j:[]).filter(a=>a?.url),p=await v((a=>{let b=Array.isArray(a)?a:[],c=[];for(let a of b){let b=n.LOCAL_STDIO_PLUGINS.find(b=>b.name===a);if(!b)continue;let d={name:b.name,url:`http://localhost:${r}/api/mcp/${b.name}/sse`,transport:"sse"};if(Array.isArray(b.toolNames)&&b.toolNames.length>0){let a=`${b.name}-`,c={};for(let d of b.toolNames)c[d]="allow",c[`${a}${d}`]="allow";d.toolPolicy=c}c.push(d)}return c})(m)),q=await v((a=>{if(!Array.isArray(a))return[];let b=[];for(let c of a)c?.name&&c?.url&&b.push({name:c.name,url:c.url,transport:c.transport||"sse",custom:!0});return b})(o)),s=[...(0,n.buildManagedMcpServers)(l),...p,...q],t=await I(),u=await M(),y=i().join(C(),`${u.appliedId}.json`),z={...x,inferenceProvider:w,inferenceGatewayBaseUrl:b,inferenceGatewayApiKey:c,inferenceModels:k.map(a=>({name:a}))};s.length>0&&(z.managedMcpServers=s),await g().writeFile(y,JSON.stringify(z,null,2));let A=null;try{A=await N(s)}catch(a){A={error:a.message}}try{await J()}catch{}return e.NextResponse.json({success:!0,bootstrapped:t,message:t?"Cowork enabled (3p mode set). Quit & reopen Claude Desktop.":"Cowork settings applied. Quit & reopen Claude Desktop.",configPath:y,skipApprovals:A,localMcp:{applied:m,via:"3p-sse-bridge"}})}catch(a){return console.log("Error applying cowork settings:",a),e.NextResponse.json({error:"Failed to apply cowork settings"},{status:500})}}async function Q(){try{let a=await L(await D());if(!a?.appliedId)return e.NextResponse.json({success:!0,message:"No active config to reset"});let b=i().join(await B(),`${a.appliedId}.json`);try{await g().writeFile(b,JSON.stringify({},null,2))}catch(a){if("ENOENT"!==a.code)throw a}try{await N([])}catch{}try{await J()}catch{}return e.NextResponse.json({success:!0,message:"Cowork config reset"})}catch(a){return console.log("Error resetting cowork settings:",a),e.NextResponse.json({error:"Failed to reset cowork settings"},{status:500})}}(0,q.D)([O,P,Q]),(0,d.A)(O,"00e8d2d4d7ba260dc77e9a59991d9bbcec292c75c4",null),(0,d.A)(P,"4002a18173c8cac5c6e93f7fadcdd5038db9c2fae8",null),(0,d.A)(Q,"006aaee2283e8da744d2d3dde33f3310537cd95267",null)},28286:a=>{a.exports={DEFAULT_PLUGINS:[{name:"exa",title:"Exa",description:"Real-time web search and code documentation",url:"https://mcp.exa.ai/mcp",transport:"http",oauth:!1,toolNames:["web_search_exa","web_fetch_exa"]},{name:"tavily",title:"Tavily",description:"Real-time web search optimized for LLM agents",url:"https://mcp.tavily.com/mcp",transport:"http",oauth:!0,toolNames:["tavily_search","tavily_extract","tavily_crawl","tavily_map"]}],LOCAL_STDIO_PLUGINS:[{name:"browsermcp",title:"Browser MCP",description:"Control your running Chrome (requires Chrome extension)",extensionUrl:"https://chromewebstore.google.com/detail/browser-mcp-automate-your/bjfgambnhccakkhmkepdoekmckoijdlc",command:"npx",args:["-y","@browsermcp/mcp@latest"],toolNames:["browser_navigate","browser_snapshot","browser_click","browser_type","browser_screenshot","browser_get_console_logs","browser_wait","browser_press_key","browser_go_back","browser_go_forward"]}],buildManagedMcpServers:function(a){let b=Array.isArray(a)?a:[],c=[],d=new Set;for(let a of b){if(!a?.name||!a?.url||d.has(a.name))continue;d.add(a.name);let b={name:a.name,url:a.url,transport:a.transport||(/\/sse(\b|\/)/i.test(a.url)?"sse":"http")};if(a.oauth&&(b.oauth=!0),Array.isArray(a.toolNames)&&a.toolNames.length>0){let c=`${a.name}-`,d=new Set;for(let b of a.toolNames){if("string"!=typeof b||!b)continue;let a=b;for(;a.startsWith(c);)a=a.slice(c.length);d.add(a)}let e={};for(let a of d)e[a]="allow",e[`${c}${a}`]="allow";b.toolPolicy=e}c.push(b)}return c}}},49120:(a,b,c)=>{c.d(b,{nJ:()=>p,ok:()=>o});var d=c(73024),e=c.n(d),f=c(33873),g=c.n(f),h=c(21820),i=c.n(h);let j="switchboard";function k(a){if("win32"===process.platform){let b=process.env.APPDATA||g().join(i().homedir(),"AppData","Roaming");return g().join(b,a)}return g().join(i().homedir(),`.${a}`)}let l=["db/data.sqlite","machine-id","jwt-secret","auth","db.json"];function m(a){return l.some(b=>e().existsSync(g().join(a,b)))}function n(){let a=k(j);if(m(a))return a;let b=k("9router");return m(b)?(console.warn(`[DATA_DIR] using legacy data directory '${b}' (set DATA_DIR='${a}' to switch)`),b):a}function o(){let a=process.env.DATA_DIR;if(!a)return n();if("win32"===process.platform&&/^\//.test(a))return console.warn(`[DATA_DIR] '${a}' is a Unix path on Windows → fallback to default`),n();try{return e().mkdirSync(a,{recursive:!0}),a}catch(b){if(b?.code==="EACCES"||b?.code==="EPERM")return console.warn(`[DATA_DIR] '${a}' not writable → fallback ~/.${j}`),n();throw b}}let p=o()},54603:(a,b,c)=>{c.d(b,{Xj:()=>q});var d=c(96930),e=c(73024),f=c.n(e),g=c(76760),h=c.n(g),i=c(77598),j=c.n(i),k=c(49120);let l=h().join(k.nJ,"machine-id"),m=h().join(k.nJ,"auth"),n=h().join(m,"cli-secret"),o=null,p=null;async function q(a=null){let b=a||function(){if(process.env.MACHINE_ID_SALT)return process.env.MACHINE_ID_SALT;let a=h().join(m,"machine-id-salt");try{let b=f().readFileSync(a,"utf8").trim();if(b)return b}catch{}let b=j().randomBytes(32).toString("hex");try{f().mkdirSync(m,{recursive:!0,mode:448}),f().writeFileSync(a,b,{mode:384})}catch{}return b}(),c=function(){if(o)return o;try{if(o=f().readFileSync(l,"utf8").trim())return o}catch{}try{o=(0,d.machineIdSync)()}catch{o=j().randomUUID()}try{f().mkdirSync(k.nJ,{recursive:!0}),f().writeFileSync(l,o,{mode:384})}catch{}return o}(),e="switchboard-cli-auth"===b?function(){if(p)return p;try{if(p=f().readFileSync(n,"utf8").trim())return p}catch{}p=j().randomBytes(32).toString("hex");try{f().mkdirSync(m,{recursive:!0}),f().writeFileSync(n,p,{mode:384})}catch{}return p}():"";return j().createHash("sha256").update(c+b+e).digest("hex").substring(0,16)}}};
1
+ "use strict";exports.id=1350,exports.ids=[1350],exports.modules={21350:(a,b,c)=>{c.r(b),c.d(b,{DELETE:()=>Q,GET:()=>O,POST:()=>P});var d=c(49796),e=c(23211),f=c(79748),g=c.n(f),h=c(33873),i=c.n(h),j=c(21820),k=c.n(j),l=c(55511),m=c.n(l),n=c(28286),o=c(30869),p=c(54603),q=c(24424);let r=o.h0.appPort,s=`http://localhost:${r}/api/mcp/`,t=null,u=async()=>(t||(t=await (0,p.Xj)("switchboard-cli-auth")),t),v=async a=>{let b=await u();for(let c of a)"string"==typeof c?.url&&c.url.startsWith(s)&&(c.headers={...c.headers||{},"x-switchboard-cli-token":b});return a},w="gateway",x={coworkEgressAllowedHosts:["*"],disabledBuiltinTools:[],isLocalDevMcpEnabled:!0,isDesktopExtensionEnabled:!0,isDesktopExtensionDirectoryEnabled:!0,isDesktopExtensionSignatureRequired:!1,isClaudeCodeForDesktopEnabled:!0,disableEssentialTelemetry:!0,disableNonessentialTelemetry:!0,disableNonessentialServices:!0},y=()=>{if("darwin"===k().platform()){let a=i().join(k().homedir(),"Library","Application Support");return[i().join(a,"Claude-3p"),i().join(a,"Claude")]}if("win32"===k().platform()){let a=process.env.LOCALAPPDATA||i().join(k().homedir(),"AppData","Local"),b=process.env.APPDATA||i().join(k().homedir(),"AppData","Roaming");return[i().join(a,"Claude-3p"),i().join(b,"Claude-3p"),i().join(a,"Claude"),i().join(b,"Claude")]}return[i().join(k().homedir(),".config","Claude-3p"),i().join(k().homedir(),".config","Claude")]},z=async()=>{let a=y();for(let b of a)try{return await g().access(i().join(b,"configLibrary")),b}catch{}return a[0]},A=()=>y()[0],B=async()=>i().join(await z(),"configLibrary"),C=()=>i().join(A(),"configLibrary"),D=async()=>i().join(await B(),"_meta.json"),E=()=>{if("darwin"===k().platform())return i().join(k().homedir(),"Library","Application Support","Claude");if("win32"===k().platform()){let a=process.env.APPDATA||i().join(k().homedir(),"AppData","Roaming");return i().join(a,"Claude")}return i().join(k().homedir(),".config","Claude")},F=()=>i().join(E(),"claude_desktop_config.json"),G=async()=>{try{let a=(await g().readFile(F(),"utf-8")).replace(/,(\s*[}\]])/g,"$1");return JSON.parse(a)||{}}catch(a){return{}}},H=async a=>{await g().mkdir(E(),{recursive:!0}),await g().writeFile(F(),JSON.stringify(a,null,2))},I=async()=>{let a=await G();return"3p"!==a.deploymentMode&&(a.deploymentMode="3p",await H(a),!0)},J=async()=>{let a=await G();if(!a.mcpServers||"object"!=typeof a.mcpServers)return;let b=new Set(n.LOCAL_STDIO_PLUGINS.map(a=>a.name));for(let c of Object.keys(a.mcpServers))b.has(c)&&delete a.mcpServers[c];0===Object.keys(a.mcpServers).length&&delete a.mcpServers,await H(a)},K=async()=>{for(let a of[...y(),...(()=>{if("darwin"===k().platform())return["/Applications/Claude.app",i().join(k().homedir(),"Applications","Claude.app")];if("win32"===k().platform()){let a=process.env.LOCALAPPDATA||i().join(k().homedir(),"AppData","Local"),b=process.env.ProgramFiles||"C:\\Program Files";return[i().join(a,"AnthropicClaude"),i().join(b,"Claude"),i().join(b,"AnthropicClaude")]}return[]})()])try{return await g().access(a),!0}catch{}return!1},L=async a=>{try{let b=(await g().readFile(a,"utf-8")).replace(/,(\s*[}\]])/g,"$1");return JSON.parse(b)}catch(a){return null}},M=async()=>{let a=i().join(C(),"_meta.json"),b=await L(a);if(!b||!b.appliedId){let c=await L(await D());if(c?.appliedId)b=c;else{let a=m().randomUUID();b={appliedId:a,entries:[{id:a,name:"Default"}]}}await g().mkdir(C(),{recursive:!0}),await g().writeFile(a,JSON.stringify(b,null,2))}return b};async function N(a){let b=i().join(A(),"config.json"),c={};try{c=JSON.parse(await g().readFile(b,"utf-8"))||{}}catch(a){if("ENOENT"!==a.code)return{error:a.code}}let d={};for(let b of a)b?.name&&(d[b.name]=!0);return c.operonSkipMcpApprovals=d,await g().mkdir(A(),{recursive:!0}),await g().writeFile(b,JSON.stringify(c,null,2)),{written:Object.keys(d).length}}async function O(){try{if(!await K())return e.NextResponse.json({installed:!1,config:null,message:"Claude Desktop (Cowork mode) not detected"});let a=await L(await D()),b=a?.appliedId||null,c=await B(),d=b?i().join(c,`${b}.json`):null,f=d?await L(d):null,g=f?.inferenceGatewayBaseUrl||null,h=Array.isArray(f?.inferenceModels)?f.inferenceModels.map(a=>"string"==typeof a?a:a?.name).filter(Boolean):[],j=Array.isArray(f?.managedMcpServers)?f.managedMcpServers:[],k=!!(f?.inferenceProvider===w&&g),l=new Set(n.LOCAL_STDIO_PLUGINS.map(a=>a.name)),m=j.filter(a=>l.has(a.name)&&"string"==typeof a.url&&a.url.includes("/api/mcp/")).map(a=>a.name),o=j.filter(a=>a.custom||!l.has(a.name)&&"string"==typeof a.url&&a.url.includes("/api/mcp/")).map(a=>({name:a.name,url:a.url,transport:a.transport,custom:!0}));return e.NextResponse.json({installed:!0,config:f,hasSwitchboard:k,configPath:d,cowork:{appliedId:b,baseUrl:g,models:h,provider:f?.inferenceProvider||null,plugins:j.filter(a=>!a.custom&&!(l.has(a.name)&&"string"==typeof a.url&&a.url.includes("/api/mcp/"))).map(a=>{let b=a.toolPolicy?Object.keys(a.toolPolicy):[],c=`${a.name}-`,d=new Set;for(let a of b){let b=a;for(;b.startsWith(c);)b=b.slice(c.length);d.add(b)}let e=n.DEFAULT_PLUGINS.find(b=>b.name===a.name),f=e&&Array.isArray(e.toolNames)?e.toolNames:Array.from(d);return{name:a.name,url:a.url,transport:a.transport,oauth:!!a.oauth,toolNames:f}}),localPlugins:m,customPlugins:o},defaultPlugins:n.DEFAULT_PLUGINS,localStdioPlugins:n.LOCAL_STDIO_PLUGINS})}catch(a){return console.log("Error reading cowork settings:",a),e.NextResponse.json({error:"Failed to read cowork settings"},{status:500})}}async function P(a){try{let{baseUrl:b,apiKey:c,models:d,plugins:f,localPlugins:h,customPlugins:j}=await a.json();if(!b||!c)return e.NextResponse.json({error:"baseUrl and apiKey are required"},{status:400});let k=Array.isArray(d)?d.filter(a=>"string"==typeof a&&a.trim()):[];if(0===k.length)return e.NextResponse.json({error:"At least one model is required"},{status:400});let l=Array.isArray(f)?f:n.DEFAULT_PLUGINS,m=Array.isArray(h)?h:[],o=(Array.isArray(j)?j:[]).filter(a=>a?.url),p=await v((a=>{let b=Array.isArray(a)?a:[],c=[];for(let a of b){let b=n.LOCAL_STDIO_PLUGINS.find(b=>b.name===a);if(!b)continue;let d={name:b.name,url:`http://localhost:${r}/api/mcp/${b.name}/sse`,transport:"sse"};if(Array.isArray(b.toolNames)&&b.toolNames.length>0){let a=`${b.name}-`,c={};for(let d of b.toolNames)c[d]="allow",c[`${a}${d}`]="allow";d.toolPolicy=c}c.push(d)}return c})(m)),q=await v((a=>{if(!Array.isArray(a))return[];let b=[];for(let c of a)c?.name&&c?.url&&b.push({name:c.name,url:c.url,transport:c.transport||"sse",custom:!0});return b})(o)),s=[...(0,n.buildManagedMcpServers)(l),...p,...q],t=await I(),u=await M(),y=i().join(C(),`${u.appliedId}.json`),z={...x,inferenceProvider:w,inferenceGatewayBaseUrl:b,inferenceGatewayApiKey:c,inferenceModels:k.map(a=>({name:a}))};s.length>0&&(z.managedMcpServers=s),await g().writeFile(y,JSON.stringify(z,null,2));let A=null;try{A=await N(s)}catch(a){A={error:a.message}}try{await J()}catch{}return e.NextResponse.json({success:!0,bootstrapped:t,message:t?"Cowork enabled (3p mode set). Quit & reopen Claude Desktop.":"Cowork settings applied. Quit & reopen Claude Desktop.",configPath:y,skipApprovals:A,localMcp:{applied:m,via:"3p-sse-bridge"}})}catch(a){return console.log("Error applying cowork settings:",a),e.NextResponse.json({error:"Failed to apply cowork settings"},{status:500})}}async function Q(){try{let a=await L(await D());if(!a?.appliedId)return e.NextResponse.json({success:!0,message:"No active config to reset"});let b=i().join(await B(),`${a.appliedId}.json`);try{await g().writeFile(b,JSON.stringify({},null,2))}catch(a){if("ENOENT"!==a.code)throw a}try{await N([])}catch{}try{await J()}catch{}return e.NextResponse.json({success:!0,message:"Cowork config reset"})}catch(a){return console.log("Error resetting cowork settings:",a),e.NextResponse.json({error:"Failed to reset cowork settings"},{status:500})}}(0,q.D)([O,P,Q]),(0,d.A)(O,"00bc17e5b9b79737e80ac6fa06ce1e44b028bdcca1",null),(0,d.A)(P,"406d853f4b24d24856112b05583d5279041930aa54",null),(0,d.A)(Q,"0028d81076eb3ce61f09fd3aadb9570f0ce17dd23d",null)},28286:a=>{a.exports={DEFAULT_PLUGINS:[{name:"exa",title:"Exa",description:"Real-time web search and code documentation",url:"https://mcp.exa.ai/mcp",transport:"http",oauth:!1,toolNames:["web_search_exa","web_fetch_exa"]},{name:"tavily",title:"Tavily",description:"Real-time web search optimized for LLM agents",url:"https://mcp.tavily.com/mcp",transport:"http",oauth:!0,toolNames:["tavily_search","tavily_extract","tavily_crawl","tavily_map"]}],LOCAL_STDIO_PLUGINS:[{name:"browsermcp",title:"Browser MCP",description:"Control your running Chrome (requires Chrome extension)",extensionUrl:"https://chromewebstore.google.com/detail/browser-mcp-automate-your/bjfgambnhccakkhmkepdoekmckoijdlc",command:"npx",args:["-y","@browsermcp/mcp@latest"],toolNames:["browser_navigate","browser_snapshot","browser_click","browser_type","browser_screenshot","browser_get_console_logs","browser_wait","browser_press_key","browser_go_back","browser_go_forward"]}],buildManagedMcpServers:function(a){let b=Array.isArray(a)?a:[],c=[],d=new Set;for(let a of b){if(!a?.name||!a?.url||d.has(a.name))continue;d.add(a.name);let b={name:a.name,url:a.url,transport:a.transport||(/\/sse(\b|\/)/i.test(a.url)?"sse":"http")};if(a.oauth&&(b.oauth=!0),Array.isArray(a.toolNames)&&a.toolNames.length>0){let c=`${a.name}-`,d=new Set;for(let b of a.toolNames){if("string"!=typeof b||!b)continue;let a=b;for(;a.startsWith(c);)a=a.slice(c.length);d.add(a)}let e={};for(let a of d)e[a]="allow",e[`${c}${a}`]="allow";b.toolPolicy=e}c.push(b)}return c}}},49120:(a,b,c)=>{c.d(b,{nJ:()=>p,ok:()=>o});var d=c(73024),e=c.n(d),f=c(33873),g=c.n(f),h=c(21820),i=c.n(h);let j="switchboard";function k(a){if("win32"===process.platform){let b=process.env.APPDATA||g().join(i().homedir(),"AppData","Roaming");return g().join(b,a)}return g().join(i().homedir(),`.${a}`)}let l=["db/data.sqlite","machine-id","jwt-secret","auth","db.json"];function m(a){return l.some(b=>e().existsSync(g().join(a,b)))}function n(){let a=k(j);if(m(a))return a;let b=k("9router");return m(b)?(console.warn(`[DATA_DIR] using legacy data directory '${b}' (set DATA_DIR='${a}' to switch)`),b):a}function o(){let a=process.env.DATA_DIR;if(!a)return n();if("win32"===process.platform&&/^\//.test(a))return console.warn(`[DATA_DIR] '${a}' is a Unix path on Windows → fallback to default`),n();try{return e().mkdirSync(a,{recursive:!0}),a}catch(b){if(b?.code==="EACCES"||b?.code==="EPERM")return console.warn(`[DATA_DIR] '${a}' not writable → fallback ~/.${j}`),n();throw b}}let p=o()},54603:(a,b,c)=>{c.d(b,{Xj:()=>q});var d=c(96930),e=c(73024),f=c.n(e),g=c(76760),h=c.n(g),i=c(77598),j=c.n(i),k=c(49120);let l=h().join(k.nJ,"machine-id"),m=h().join(k.nJ,"auth"),n=h().join(m,"cli-secret"),o=null,p=null;async function q(a=null){let b=a||function(){if(process.env.MACHINE_ID_SALT)return process.env.MACHINE_ID_SALT;let a=h().join(m,"machine-id-salt");try{let b=f().readFileSync(a,"utf8").trim();if(b)return b}catch{}let b=j().randomBytes(32).toString("hex");try{f().mkdirSync(m,{recursive:!0,mode:448}),f().writeFileSync(a,b,{mode:384})}catch{}return b}(),c=function(){if(o)return o;try{if(o=f().readFileSync(l,"utf8").trim())return o}catch{}try{o=(0,d.machineIdSync)()}catch{o=j().randomUUID()}try{f().mkdirSync(k.nJ,{recursive:!0}),f().writeFileSync(l,o,{mode:384})}catch{}return o}(),e="switchboard-cli-auth"===b?function(){if(p)return p;try{if(p=f().readFileSync(n,"utf8").trim())return p}catch{}p=j().randomBytes(32).toString("hex");try{f().mkdirSync(m,{recursive:!0}),f().writeFileSync(n,p,{mode:384})}catch{}return p}():"";return j().createHash("sha256").update(c+b+e).digest("hex").substring(0,16)}}};
@@ -1 +1 @@
1
- "use strict";exports.id=1421,exports.ids=[1421],exports.modules={38238:(a,b,c)=>{c.d(b,{P:()=>i});var d=c(44776),e=c(30869),f=c(41460),g=c(43157);async function h(){let a=null;try{let b=await (0,d.PX)();a=b.find(a=>!1!==a.isActive)?.key||null}catch{}let b={"Content-Type":"application/json"};return a&&(b.Authorization=`Bearer ${a}`),b[f.nF]=await (0,f.cb)(),b}async function i(a,b,c=`http://127.0.0.1:${process.env.PORT||e.h0.appPort}`,d={}){let f=await h();d.connectionId&&(f["x-connection-id"]=d.connectionId,f["x-switchboard-strict-connection"]="1");let j=Date.now(),k=function(a,b=null){let c=Number.isFinite(Number(a))?Number(a):6e4,d=AbortSignal.timeout(Math.max(1,Math.floor(c)));return(0,g.O)(b,d)}(d.timeoutMs||6e4,d.signal);if("embedding"===b){let b=await fetch(`${c}/api/v1/embeddings`,{method:"POST",headers:f,body:JSON.stringify({model:a,input:"test"}),signal:k}),d=Date.now()-j,e=await b.text().catch(()=>""),g=null;try{g=e?JSON.parse(e):null}catch{}if(!b.ok){let a=g?.error?.message||g?.error||e;return{ok:!1,latencyMs:d,error:`HTTP ${b.status}${a?`: ${String(a).slice(0,240)}`:""}`,status:b.status}}return Array.isArray(g?.data)&&g.data.length>0&&Array.isArray(g.data[0]?.embedding)?{ok:!0,latencyMs:d,error:null,status:b.status}:{ok:!1,latencyMs:d,status:b.status,error:"Provider returned no embedding data"}}if("image"===b){let b=await fetch(`${c}/api/v1/images/generations`,{method:"POST",headers:f,body:JSON.stringify({model:a,prompt:"test"}),signal:k}),d=Date.now()-j,e=await b.text().catch(()=>""),g=null;try{g=e?JSON.parse(e):null}catch{}if(!b.ok){let a=g?.error?.message||g?.msg||g?.message||g?.error||e;return{ok:!1,latencyMs:d,error:`HTTP ${b.status}${a?`: ${String(a).slice(0,240)}`:""}`,status:b.status}}return Array.isArray(g?.data)&&g.data.length>0?{ok:!0,latencyMs:d,error:null,status:b.status}:{ok:!1,latencyMs:d,status:b.status,error:"Provider returned no image data for this model"}}if("stt"===b){let b,d,e,g,h=new FormData,i=(e=new DataView(d=new ArrayBuffer(44+(b=2*Math.max(1,Math.floor(4e3))))),(g=(a,b)=>{for(let c=0;c<b.length;c+=1)e.setUint8(a+c,b.charCodeAt(c))})(0,"RIFF"),e.setUint32(4,36+b,!0),g(8,"WAVE"),g(12,"fmt "),e.setUint32(16,16,!0),e.setUint16(20,1,!0),e.setUint16(22,1,!0),e.setUint32(24,16e3,!0),e.setUint32(28,32e3,!0),e.setUint16(32,2,!0),e.setUint16(34,16,!0),g(36,"data"),e.setUint32(40,b,!0),new Blob([d],{type:"audio/wav"}));h.append("file",i,"test.wav"),h.append("model",a);let l=await fetch(`${c}/api/v1/audio/transcriptions`,{method:"POST",headers:Object.fromEntries(Object.entries(f).filter(([a])=>"content-type"!==a.toLowerCase())),body:h,signal:k}),m=Date.now()-j,n=await l.text().catch(()=>""),o=null;try{o=n?JSON.parse(n):null}catch{}if(!l.ok){let a=o?.error?.message||o?.msg||o?.message||o?.error||n;return{ok:!1,latencyMs:m,error:`HTTP ${l.status}${a?`: ${String(a).slice(0,240)}`:""}`,status:l.status}}return("string"==typeof o?.text?o.text:"").trim()?{ok:!0,latencyMs:m,error:null,status:l.status}:{ok:!1,latencyMs:m,status:l.status,error:"Provider returned no transcription text for this model"}}let l=await fetch(`${c}/api/v1/chat/completions`,{method:"POST",headers:f,body:JSON.stringify({model:a,max_tokens:16,stream:!1,messages:[{role:"user",content:"hi"}]}),signal:k}),m=Date.now()-j,n=await l.text().catch(()=>""),o=null;try{o=n?JSON.parse(n):null}catch{}if(!l.ok){let a=o?.error?.message||o?.msg||o?.message||o?.error||n;return{ok:!1,latencyMs:m,error:`HTTP ${l.status}${a?`: ${String(a).slice(0,240)}`:""}`,status:l.status}}let p=o?.status,q=o?.msg||o?.message;if(null!=p&&"200"!==String(p)&&"0"!==String(p)&&q)return{ok:!1,latencyMs:m,status:l.status,error:`Provider status ${p}: ${String(q).slice(0,240)}`};if(o?.error){let a=o?.error?.message||o?.error||"Provider returned an error";return{ok:!1,latencyMs:m,status:l.status,error:String(a).slice(0,240)}}return Array.isArray(o?.choices)&&o.choices.length>0?{ok:!0,latencyMs:m,error:null,status:l.status}:{ok:!1,latencyMs:m,status:l.status,error:"Provider returned no completion choices for this model"}}},41460:(a,b,c)=>{c.d(b,{cb:()=>h,gN:()=>i,nF:()=>f});var d=c(54603),e=c(38044);let f="x-switchboard-cli-token",g=null;async function h(){return g||(g=await (0,d.Xj)("switchboard-cli-auth")),g}async function i(a){let b=a?.headers?.get?.(f);return!!b&&(0,e.lO)(b,await h())}},43157:(a,b,c)=>{c.d(b,{O:()=>d});function d(...a){let b=a.filter(a=>a&&"object"==typeof a);if(0===b.length)return;if(1===b.length)return b[0];if("function"==typeof AbortSignal.any)return AbortSignal.any(b);let c=new AbortController,e=a=>{try{c.abort(a?.target?.reason)}catch{}};for(let a of b){if(a.aborted){e({target:a});break}a.addEventListener("abort",e,{once:!0})}return c.signal}},47293:(a,b,c)=>{c.d(b,{A:()=>f});let d=new Uint8Array(16);var e=c(50122);let f=function(a,b,c){return b||a||!crypto.randomUUID?function(a,b,c){let f=(a=a||{}).random??a.rng?.()??crypto.getRandomValues(d);if(f.length<16)throw Error("Random bytes length must be >= 16");if(f[6]=15&f[6]|64,f[8]=63&f[8]|128,b){if((c=c||0)<0||c+16>b.length)throw RangeError(`UUID byte range ${c}:${c+15} is out of buffer bounds`);for(let a=0;a<16;++a)b[c+a]=f[a];return b}return(0,e.k)(f)}(a,b,c):crypto.randomUUID()}},50122:(a,b,c)=>{c.d(b,{k:()=>e});let d=[];for(let a=0;a<256;++a)d.push((a+256).toString(16).slice(1));function e(a,b=0){return(d[a[b+0]]+d[a[b+1]]+d[a[b+2]]+d[a[b+3]]+"-"+d[a[b+4]]+d[a[b+5]]+"-"+d[a[b+6]]+d[a[b+7]]+"-"+d[a[b+8]]+d[a[b+9]]+"-"+d[a[b+10]]+d[a[b+11]]+d[a[b+12]]+d[a[b+13]]+d[a[b+14]]+d[a[b+15]]).toLowerCase()}},54603:(a,b,c)=>{c.d(b,{Xj:()=>q});var d=c(96930),e=c(73024),f=c.n(e),g=c(76760),h=c.n(g),i=c(77598),j=c.n(i),k=c(49120);let l=h().join(k.nJ,"machine-id"),m=h().join(k.nJ,"auth"),n=h().join(m,"cli-secret"),o=null,p=null;async function q(a=null){let b=a||function(){if(process.env.MACHINE_ID_SALT)return process.env.MACHINE_ID_SALT;let a=h().join(m,"machine-id-salt");try{let b=f().readFileSync(a,"utf8").trim();if(b)return b}catch{}let b=j().randomBytes(32).toString("hex");try{f().mkdirSync(m,{recursive:!0,mode:448}),f().writeFileSync(a,b,{mode:384})}catch{}return b}(),c=function(){if(o)return o;try{if(o=f().readFileSync(l,"utf8").trim())return o}catch{}try{o=(0,d.machineIdSync)()}catch{o=j().randomUUID()}try{f().mkdirSync(k.nJ,{recursive:!0}),f().writeFileSync(l,o,{mode:384})}catch{}return o}(),e="switchboard-cli-auth"===b?function(){if(p)return p;try{if(p=f().readFileSync(n,"utf8").trim())return p}catch{}p=j().randomBytes(32).toString("hex");try{f().mkdirSync(m,{recursive:!0}),f().writeFileSync(n,p,{mode:384})}catch{}return p}():"";return j().createHash("sha256").update(c+b+e).digest("hex").substring(0,16)}},60849:(a,b,c)=>{c.d(b,{rb:()=>d,rn:()=>j,v4:()=>g.v,CM:()=>f,aS:()=>t,a7:()=>q,m1:()=>r});let d={defaultConcurrency:4,maxConcurrency:16,defaultBatchSize:50,maxBatchSize:200,defaultTimeoutMs:2e4,maxTimeoutMs:6e4};function e(a,b,c){let d=Number(a);return Number.isFinite(d)?Math.max(1,Math.min(c,Math.floor(d))):b}function f(a={}){return{concurrency:e(a.concurrency,d.defaultConcurrency,d.maxConcurrency),batchSize:e(a.batchSize,d.defaultBatchSize,d.maxBatchSize),timeoutMs:e(a.timeoutMs,d.defaultTimeoutMs,d.maxTimeoutMs)}}var g=c(65089),h=c(77598);let i=["provider","authType","apiType","baseUrl","resourceUrl","region","projectId","accountId","azureEndpoint","apiVersion","deployment","organization","chatgptAccountId","workspaceId","tenantId"];function j(a={}){let b={...a.providerSpecificData||{},...a};delete b.providerSpecificData;let c={};for(let a of i){let d=function(a){if("string"!=typeof a)return null==a?null:String(a);let b=a.trim();return b?/^https?:\/\//i.test(b)?b.replace(/\/+$/g,"").toLowerCase():b:null}(b[a]);null!=d&&(c[a]=d)}let d=JSON.stringify(c,Object.keys(c).sort()),e=(0,h.createHash)("sha256").update(d).digest("hex").slice(0,24);return`pmp:v1:${e}`}var k=c(38238);function l(a){if(a?.ok===!0)return{status:"ok",failureClass:null};let b=a?"string"==typeof a?a:String(a.error||a.message||a.failureMessage||""):"",c=b.toLowerCase(),d=function(a,b){let c=Number(a?.status||a?.statusCode||a?.httpStatus);if(Number.isFinite(c)&&c>0)return c;let d=String(b||"").match(/\bHTTP\s+(\d{3})\b/i);return d?Number(d[1]):null}(a,b),e=String(a?.name||"").toLowerCase();return e.includes("abort")||e.includes("timeout")||c.includes("abortsignal.timeout")||c.includes("timed out")||c.includes("timeout")||c.includes("etimedout")?{status:"retryable",failureClass:"timeout"}:c.includes("fetch failed")||c.includes("network")||c.includes("econnreset")||c.includes("econnrefused")||c.includes("enotfound")||c.includes("socket hang up")?{status:"retryable",failureClass:"unknown"}:401===d?{status:"retryable",failureClass:"auth"}:429===d?{status:"retryable",failureClass:"throttled"}:d>=500?{status:"retryable",failureClass:"server_error"}:404===d||c.includes("model not found")||c.includes("no such model")||c.includes("unknown model")||c.includes("does not exist")||c.includes("not a valid model")||c.includes("invalid model")||c.includes("model identifier is invalid")||c.includes("model is deprecated")||c.includes("model is no longer supported")||c.includes("error_model_no_longer_supported")?{status:"dead",failureClass:"not_found"}:403===d||c.includes("access denied")||c.includes("permission denied")||c.includes("forbidden")||c.includes("not permitted")||c.includes("not authorized for model")||c.includes("model blocked")||c.includes("model is blocked")||c.includes("error_model_blocked")?{status:"dead",failureClass:"access_denied"}:{status:"retryable",failureClass:"unknown"}}function m(a){return a?.name||a?.id||a?.modelId||a?.model||""}async function n(a,b){let c=String(a?.id||a?.modelId||a?.model||a?.name||"").trim(),d=String(a?.kind||a?.type||"llm").trim()||"llm",e=(0,g.v)(c,b.providerAlias),f=a.fullModel||`${b.providerAlias}/${c}`,h=new Date().toISOString(),i=Date.now();try{let g=await b.ping(f,d,b.baseUrl,{timeoutMs:b.timeoutMs,signal:b.signal,connectionId:b.connectionId}),j=l(g);return{modelId:c,canonicalId:e,name:m(a)||c,kind:d,fullModel:f,ok:!0===g.ok,latencyMs:g.latencyMs??Date.now()-i,status:g.status??null,error:g.error||null,probeStatus:j.status,failureClass:j.failureClass,failureMessage:g.error||null,checkedAt:h}}catch(j){if(b.signal?.aborted)throw j;let g=l(j);return{modelId:c,canonicalId:e,name:m(a)||c,kind:d,fullModel:f,ok:!1,latencyMs:Date.now()-i,status:null,error:j?.message||"Probe failed",probeStatus:g.status,failureClass:g.failureClass,failureMessage:j?.message||"Probe failed",checkedAt:h}}}async function o(a,b){let c=await n(a,b);return b.onResult&&await b.onResult(c),c}async function p(a,b){let c=Array(a.length),d=0,e=Array.from({length:Math.min(b.concurrency,a.length)},async()=>{for(;d<a.length;){let e=d;d+=1,c[e]=await o(a[e],b)}});return await Promise.all(e),c}async function q(a){let b=f(a||{}),c=(Array.isArray(a?.models)?a.models:[]).slice(0,b.batchSize),d={...b,providerAlias:a.providerAlias,baseUrl:a.baseUrl,ping:a.ping||k.P,onResult:a.onResult,signal:a.signal,connectionId:a.connectionId};if(!d.providerAlias)throw Error("providerAlias required");if(0===c.length)return{results:[],caps:b};if(a.warmup&&c.length>1){let[a,...e]=c;return{results:[await o(a,d),...await p(e,d)],caps:b}}return{results:await p(c,d),caps:b}}async function r(a){let b=f(a||{}),c=Array.isArray(a?.models)?a.models:[],d=[];for(let e=0;e<c.length;e+=b.batchSize){let f=c.slice(e,e+b.batchSize),g=await q({...a,...b,models:f,warmup:a.warmup&&0===e});d.push(...g.results)}return{results:d,caps:b}}function s(a,b){return`${a||"llm"}|${b}`}function t(a){let b=Array.isArray(a?.models)?a.models:[],c=Array.isArray(a?.probes)?a.probes:[],d=a?.providerAlias||"",e=Math.max(0,Number(a?.freshOkMs||0)),f=a?.skipFreshOk===!0&&e>0,h=Date.now(),i=new Map;for(let a of c)a?.modelId&&i.set(s(a.kind||"llm",a.modelId),a);let j=new Set,k=[],l=[],m=[],n=[],o=0,p=0;for(let a of b){let b=String("string"==typeof a?a:a?.id||a?.modelId||a?.model||a?.name||"").trim();if(!b){o+=1;continue}let c=String(("string"==typeof a?"llm":a?.kind||a?.type||"llm")||"llm").trim()||"llm",q=(0,g.v)(b,d);if(!q){o+=1;continue}let r=s(c,q);if(j.has(r)){p+=1;continue}j.add(r);let t=i.get(r),u={id:b,modelId:b,canonicalId:q,name:"string"==typeof a?b:a?.name||a?.displayName||a?.display_name||b,kind:c,type:c,fullModel:"object"==typeof a?a.fullModel:void 0};if(t?.status==="dead"){l.push({...u,checkedAt:t.checkedAt,failureClass:t.failureClass||null});continue}if(t?.status==="ok"){n.push({...u,latencyMs:t.latencyMs??null,checkedAt:t.checkedAt});let a=t.checkedAt?Date.parse(t.checkedAt):NaN;if(f&&Number.isFinite(a)&&h-a<=e){m.push({...u,latencyMs:t.latencyMs??null,checkedAt:t.checkedAt});continue}}k.push(u)}return{eligible:k,skippedDead:l,skippedFreshOk:m,cachedOk:n,stats:{total:b.length,invalid:o,duplicates:p,skippedDead:l.length,skippedFreshOk:m.length,cachedOk:n.length,eligible:k.length}}}}};
1
+ "use strict";exports.id=1421,exports.ids=[1421],exports.modules={38238:(a,b,c)=>{c.d(b,{P:()=>i});var d=c(44776),e=c(30869),f=c(41460),g=c(43157);async function h(){let a=null;try{let b=await (0,d.PX)();a=b.find(a=>!1!==a.isActive)?.key||null}catch{}let b={"Content-Type":"application/json"};return a&&(b.Authorization=`Bearer ${a}`),b[f.nF]=await (0,f.cb)(),b}async function i(a,b,c=`http://127.0.0.1:${process.env.PORT||e.h0.appPort}`,d={}){let f=await h();d.connectionId&&(f["x-connection-id"]=d.connectionId,f["x-switchboard-strict-connection"]="1");let j=Date.now(),k=function(a,b=null){let c=Number.isFinite(Number(a))?Number(a):6e4,d=AbortSignal.timeout(Math.max(1,Math.floor(c)));return(0,g.O)(b,d)}(d.timeoutMs||6e4,d.signal);if("embedding"===b){let b=await fetch(`${c}/api/v1/embeddings`,{method:"POST",headers:f,body:JSON.stringify({model:a,input:"test"}),signal:k}),d=Date.now()-j,e=await b.text().catch(()=>""),g=null;try{g=e?JSON.parse(e):null}catch{}if(!b.ok){let a=g?.error?.message||g?.error||e;return{ok:!1,latencyMs:d,error:`HTTP ${b.status}${a?`: ${String(a).slice(0,240)}`:""}`,status:b.status}}return Array.isArray(g?.data)&&g.data.length>0&&Array.isArray(g.data[0]?.embedding)?{ok:!0,latencyMs:d,error:null,status:b.status}:{ok:!1,latencyMs:d,status:b.status,error:"Provider returned no embedding data"}}if("image"===b){let b=await fetch(`${c}/api/v1/images/generations`,{method:"POST",headers:f,body:JSON.stringify({model:a,prompt:"test"}),signal:k}),d=Date.now()-j,e=await b.text().catch(()=>""),g=null;try{g=e?JSON.parse(e):null}catch{}if(!b.ok){let a=g?.error?.message||g?.msg||g?.message||g?.error||e;return{ok:!1,latencyMs:d,error:`HTTP ${b.status}${a?`: ${String(a).slice(0,240)}`:""}`,status:b.status}}return Array.isArray(g?.data)&&g.data.length>0?{ok:!0,latencyMs:d,error:null,status:b.status}:{ok:!1,latencyMs:d,status:b.status,error:"Provider returned no image data for this model"}}if("stt"===b){let b,d,e,g,h=new FormData,i=(e=new DataView(d=new ArrayBuffer(44+(b=2*Math.max(1,Math.floor(4e3))))),(g=(a,b)=>{for(let c=0;c<b.length;c+=1)e.setUint8(a+c,b.charCodeAt(c))})(0,"RIFF"),e.setUint32(4,36+b,!0),g(8,"WAVE"),g(12,"fmt "),e.setUint32(16,16,!0),e.setUint16(20,1,!0),e.setUint16(22,1,!0),e.setUint32(24,16e3,!0),e.setUint32(28,32e3,!0),e.setUint16(32,2,!0),e.setUint16(34,16,!0),g(36,"data"),e.setUint32(40,b,!0),new Blob([d],{type:"audio/wav"}));h.append("file",i,"test.wav"),h.append("model",a);let l=await fetch(`${c}/api/v1/audio/transcriptions`,{method:"POST",headers:Object.fromEntries(Object.entries(f).filter(([a])=>"content-type"!==a.toLowerCase())),body:h,signal:k}),m=Date.now()-j,n=await l.text().catch(()=>""),o=null;try{o=n?JSON.parse(n):null}catch{}if(!l.ok){let a=o?.error?.message||o?.msg||o?.message||o?.error||n;return{ok:!1,latencyMs:m,error:`HTTP ${l.status}${a?`: ${String(a).slice(0,240)}`:""}`,status:l.status}}return("string"==typeof o?.text?o.text:"").trim()?{ok:!0,latencyMs:m,error:null,status:l.status}:{ok:!1,latencyMs:m,status:l.status,error:"Provider returned no transcription text for this model"}}let l=await fetch(`${c}/api/v1/chat/completions`,{method:"POST",headers:f,body:JSON.stringify({model:a,max_tokens:16,stream:!1,messages:[{role:"user",content:"hi"}]}),signal:k}),m=Date.now()-j,n=await l.text().catch(()=>""),o=null;try{o=n?JSON.parse(n):null}catch{}if(!l.ok){let a=o?.error?.message||o?.msg||o?.message||o?.error||n;return{ok:!1,latencyMs:m,error:`HTTP ${l.status}${a?`: ${String(a).slice(0,240)}`:""}`,status:l.status}}let p=o?.status,q=o?.msg||o?.message;if(null!=p&&"200"!==String(p)&&"0"!==String(p)&&q)return{ok:!1,latencyMs:m,status:l.status,error:`Provider status ${p}: ${String(q).slice(0,240)}`};if(o?.error){let a=o?.error?.message||o?.error||"Provider returned an error";return{ok:!1,latencyMs:m,status:l.status,error:String(a).slice(0,240)}}return Array.isArray(o?.choices)&&o.choices.length>0?{ok:!0,latencyMs:m,error:null,status:l.status}:{ok:!1,latencyMs:m,status:l.status,error:"Provider returned no completion choices for this model"}}},41460:(a,b,c)=>{c.d(b,{cb:()=>h,gN:()=>i,nF:()=>f});var d=c(54603),e=c(38044);let f="x-switchboard-cli-token",g=null;async function h(){return g||(g=await (0,d.Xj)("switchboard-cli-auth")),g}async function i(a){let b=a?.headers?.get?.(f);return!!b&&(0,e.lO)(b,await h())}},43157:(a,b,c)=>{c.d(b,{O:()=>d});function d(...a){let b=a.filter(a=>a&&"object"==typeof a);if(0===b.length)return;if(1===b.length)return b[0];if("function"==typeof AbortSignal.any)return AbortSignal.any(b);let c=new AbortController,e=a=>{try{c.abort(a?.target?.reason)}catch{}};for(let a of b){if(a.aborted){e({target:a});break}a.addEventListener("abort",e,{once:!0})}return c.signal}},47293:(a,b,c)=>{c.d(b,{A:()=>f});let d=new Uint8Array(16);var e=c(50122);let f=function(a,b,c){return b||a||!crypto.randomUUID?function(a,b,c){let f=(a=a||{}).random??a.rng?.()??crypto.getRandomValues(d);if(f.length<16)throw Error("Random bytes length must be >= 16");if(f[6]=15&f[6]|64,f[8]=63&f[8]|128,b){if((c=c||0)<0||c+16>b.length)throw RangeError(`UUID byte range ${c}:${c+15} is out of buffer bounds`);for(let a=0;a<16;++a)b[c+a]=f[a];return b}return(0,e.k)(f)}(a,b,c):crypto.randomUUID()}},50122:(a,b,c)=>{c.d(b,{k:()=>e});let d=[];for(let a=0;a<256;++a)d.push((a+256).toString(16).slice(1));function e(a,b=0){return(d[a[b+0]]+d[a[b+1]]+d[a[b+2]]+d[a[b+3]]+"-"+d[a[b+4]]+d[a[b+5]]+"-"+d[a[b+6]]+d[a[b+7]]+"-"+d[a[b+8]]+d[a[b+9]]+"-"+d[a[b+10]]+d[a[b+11]]+d[a[b+12]]+d[a[b+13]]+d[a[b+14]]+d[a[b+15]]).toLowerCase()}},54603:(a,b,c)=>{c.d(b,{Xj:()=>q});var d=c(96930),e=c(73024),f=c.n(e),g=c(76760),h=c.n(g),i=c(77598),j=c.n(i),k=c(49120);let l=h().join(k.nJ,"machine-id"),m=h().join(k.nJ,"auth"),n=h().join(m,"cli-secret"),o=null,p=null;async function q(a=null){let b=a||function(){if(process.env.MACHINE_ID_SALT)return process.env.MACHINE_ID_SALT;let a=h().join(m,"machine-id-salt");try{let b=f().readFileSync(a,"utf8").trim();if(b)return b}catch{}let b=j().randomBytes(32).toString("hex");try{f().mkdirSync(m,{recursive:!0,mode:448}),f().writeFileSync(a,b,{mode:384})}catch{}return b}(),c=function(){if(o)return o;try{if(o=f().readFileSync(l,"utf8").trim())return o}catch{}try{o=(0,d.machineIdSync)()}catch{o=j().randomUUID()}try{f().mkdirSync(k.nJ,{recursive:!0}),f().writeFileSync(l,o,{mode:384})}catch{}return o}(),e="switchboard-cli-auth"===b?function(){if(p)return p;try{if(p=f().readFileSync(n,"utf8").trim())return p}catch{}p=j().randomBytes(32).toString("hex");try{f().mkdirSync(m,{recursive:!0}),f().writeFileSync(n,p,{mode:384})}catch{}return p}():"";return j().createHash("sha256").update(c+b+e).digest("hex").substring(0,16)}},60849:(a,b,c)=>{c.d(b,{rb:()=>d,rn:()=>j,v4:()=>g.v,CM:()=>f,aS:()=>u,a7:()=>q,m1:()=>r});let d={defaultConcurrency:4,maxConcurrency:16,defaultBatchSize:50,maxBatchSize:200,defaultTimeoutMs:2e4,maxTimeoutMs:6e4};function e(a,b,c){let d=Number(a);return Number.isFinite(d)?Math.max(1,Math.min(c,Math.floor(d))):b}function f(a={}){return{concurrency:e(a.concurrency,d.defaultConcurrency,d.maxConcurrency),batchSize:e(a.batchSize,d.defaultBatchSize,d.maxBatchSize),timeoutMs:e(a.timeoutMs,d.defaultTimeoutMs,d.maxTimeoutMs)}}var g=c(65089),h=c(77598);let i=["provider","authType","apiType","baseUrl","resourceUrl","region","projectId","accountId","azureEndpoint","apiVersion","deployment","organization","chatgptAccountId","workspaceId","tenantId"];function j(a={}){let b={...a.providerSpecificData||{},...a};delete b.providerSpecificData;let c={};for(let a of i){let d=function(a){if("string"!=typeof a)return null==a?null:String(a);let b=a.trim();return b?/^https?:\/\//i.test(b)?b.replace(/\/+$/g,"").toLowerCase():b:null}(b[a]);null!=d&&(c[a]=d)}let d=JSON.stringify(c,Object.keys(c).sort()),e=(0,h.createHash)("sha256").update(d).digest("hex").slice(0,24);return`pmp:v1:${e}`}var k=c(38238);function l(a){if(a?.ok===!0)return{status:"ok",failureClass:null};let b=a?"string"==typeof a?a:String(a.error||a.message||a.failureMessage||""):"",c=b.toLowerCase(),d=function(a,b){let c=Number(a?.status||a?.statusCode||a?.httpStatus);if(Number.isFinite(c)&&c>0)return c;let d=String(b||"").match(/\bHTTP\s+(\d{3})\b/i);return d?Number(d[1]):null}(a,b),e=String(a?.name||"").toLowerCase();return e.includes("abort")||e.includes("timeout")||c.includes("abortsignal.timeout")||c.includes("timed out")||c.includes("timeout")||c.includes("etimedout")?{status:"retryable",failureClass:"timeout"}:c.includes("fetch failed")||c.includes("network")||c.includes("econnreset")||c.includes("econnrefused")||c.includes("enotfound")||c.includes("socket hang up")?{status:"retryable",failureClass:"unknown"}:401===d?{status:"retryable",failureClass:"auth"}:429===d?{status:"retryable",failureClass:"throttled"}:d>=500?{status:"retryable",failureClass:"server_error"}:404===d||c.includes("model not found")||c.includes("no such model")||c.includes("unknown model")||c.includes("does not exist")||c.includes("not a valid model")||c.includes("invalid model")||c.includes("model identifier is invalid")||c.includes("model is deprecated")||c.includes("model is no longer supported")||c.includes("error_model_no_longer_supported")?{status:"dead",failureClass:"not_found"}:403===d||c.includes("access denied")||c.includes("permission denied")||c.includes("forbidden")||c.includes("not permitted")||c.includes("not authorized for model")||c.includes("model blocked")||c.includes("model is blocked")||c.includes("error_model_blocked")?{status:"dead",failureClass:"access_denied"}:{status:"retryable",failureClass:"unknown"}}function m(a){return a?.name||a?.id||a?.modelId||a?.model||""}async function n(a,b){let c=String(a?.id||a?.modelId||a?.model||a?.name||"").trim(),d=String(a?.kind||a?.type||"llm").trim()||"llm",e=(0,g.v)(c,b.providerAlias),f=a.fullModel||`${b.providerAlias}/${c}`,h=new Date().toISOString(),i=Date.now();try{let g=await b.ping(f,d,b.baseUrl,{timeoutMs:b.timeoutMs,signal:b.signal,connectionId:b.connectionId}),j=l(g);return{modelId:c,canonicalId:e,name:m(a)||c,kind:d,fullModel:f,ok:!0===g.ok,latencyMs:g.latencyMs??Date.now()-i,status:g.status??null,error:g.error||null,probeStatus:j.status,failureClass:j.failureClass,failureMessage:g.error||null,checkedAt:h}}catch(j){if(b.signal?.aborted)throw j;let g=l(j);return{modelId:c,canonicalId:e,name:m(a)||c,kind:d,fullModel:f,ok:!1,latencyMs:Date.now()-i,status:null,error:j?.message||"Probe failed",probeStatus:g.status,failureClass:g.failureClass,failureMessage:j?.message||"Probe failed",checkedAt:h}}}async function o(a,b){let c=await n(a,b);return b.onResult&&await b.onResult(c),c}async function p(a,b){let c=Array(a.length),d=0,e=Array.from({length:Math.min(b.concurrency,a.length)},async()=>{for(;d<a.length;){let e=d;d+=1,c[e]=await o(a[e],b)}});return await Promise.all(e),c}async function q(a){let b=f(a||{}),c=(Array.isArray(a?.models)?a.models:[]).slice(0,b.batchSize),d={...b,providerAlias:a.providerAlias,baseUrl:a.baseUrl,ping:a.ping||k.P,onResult:a.onResult,signal:a.signal,connectionId:a.connectionId};if(!d.providerAlias)throw Error("providerAlias required");if(0===c.length)return{results:[],caps:b};if(a.warmup&&c.length>1){let[a,...e]=c;return{results:[await o(a,d),...await p(e,d)],caps:b}}return{results:await p(c,d),caps:b}}async function r(a){let b=f(a||{}),c=Array.isArray(a?.models)?a.models:[],d=[];for(let e=0;e<c.length;e+=b.batchSize){let f=c.slice(e,e+b.batchSize),g=await q({...a,...b,models:f,warmup:a.warmup&&0===e});d.push(...g.results)}return{results:d,caps:b}}var s=c(4489);function t(a,b){return`${a||"llm"}|${b}`}function u(a){let b=Array.isArray(a?.models)?a.models:[],c=Array.isArray(a?.probes)?a.probes:[],d=a?.providerAlias||"",e=Math.max(0,Number(a?.freshOkMs||0)),f=a?.skipFreshOk===!0&&e>0,h=Date.now(),i=new Map;for(let a of c)a?.modelId&&i.set(t(a.kind||"llm",a.modelId),a);let j=new Set,k=[],l=[],m=[],n=[],o=0,p=0;for(let a of b){let b=String("string"==typeof a?a:a?.id||a?.modelId||a?.model||a?.name||"").trim();if(!b){o+=1;continue}let c=String(("string"==typeof a?"llm":(0,s.ki)(a?.kind||a?.type||"llm"))||"llm").trim()||"llm",q=(0,g.v)(b,d);if(!q){o+=1;continue}let r=t(c,q);if(j.has(r)){p+=1;continue}j.add(r);let u=i.get(r),v={id:b,modelId:b,canonicalId:q,name:"string"==typeof a?b:a?.name||a?.displayName||a?.display_name||b,kind:c,type:c,fullModel:"object"==typeof a?a.fullModel:void 0};if(u?.status==="dead"){l.push({...v,checkedAt:u.checkedAt,failureClass:u.failureClass||null});continue}if(u?.status==="ok"){n.push({...v,latencyMs:u.latencyMs??null,checkedAt:u.checkedAt});let a=u.checkedAt?Date.parse(u.checkedAt):NaN;if(f&&Number.isFinite(a)&&h-a<=e){m.push({...v,latencyMs:u.latencyMs??null,checkedAt:u.checkedAt});continue}}k.push(v)}return{eligible:k,skippedDead:l,skippedFreshOk:m,cachedOk:n,stats:{total:b.length,invalid:o,duplicates:p,skippedDead:l.length,skippedFreshOk:m.length,cachedOk:n.length,eligible:k.length}}}}};