switchboard-router 0.9.3 → 0.9.6

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 (136) hide show
  1. package/app/.next/static/chunks/{1321-6bd6f91d24e9863e.js → 1321-d31d839184ff87c5.js} +1 -1
  2. package/app/.next/static/chunks/app/(dashboard)/dashboard/agent-library/page-40f3ca16440f8e17.js +1 -0
  3. package/app/{.next-cli-build/static/chunks/app/(dashboard)/dashboard/skills/page-b1e9603ce7be0155.js → .next/static/chunks/app/(dashboard)/dashboard/skills/page-645e7c5ec034fe8c.js} +1 -1
  4. package/app/.next/static/css/196a6347b9104610.css +1 -0
  5. package/app/.next-cli-build/BUILD_ID +1 -1
  6. package/app/.next-cli-build/app-path-routes-manifest.json +12 -12
  7. package/app/.next-cli-build/build-manifest.json +2 -2
  8. package/app/.next-cli-build/prerender-manifest.json +3 -3
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/agent-library/page.js +1 -1
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/agent-library/page_client-reference-manifest.js +1 -1
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/routing/page_client-reference-manifest.js +1 -1
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/page_client-reference-manifest.js +1 -1
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  27. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  28. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  29. package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  30. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  31. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/[id]/page_client-reference-manifest.js +1 -1
  32. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js +1 -1
  33. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  34. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  35. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  36. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  37. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  38. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  39. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  40. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  41. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  42. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  43. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  44. package/app/.next-cli-build/server/app/_not-found.html +1 -1
  45. package/app/.next-cli-build/server/app/_not-found.rsc +4 -4
  46. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +4 -4
  47. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +4 -4
  48. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  49. package/app/.next-cli-build/server/app/api/agent-library/catalog/route.js +1 -1
  50. package/app/.next-cli-build/server/app/api/cli-tools/aider-settings/route.js +2 -2
  51. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +5 -5
  52. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  53. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +1 -1
  54. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +1 -1
  55. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +2 -2
  56. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +1 -1
  57. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +2 -2
  58. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +1 -1
  59. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +2 -2
  60. package/app/.next-cli-build/server/app/api/cli-tools/gemini-cli-settings/route.js +2 -2
  61. package/app/.next-cli-build/server/app/api/cli-tools/grok-settings/route.js +2 -2
  62. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +2 -2
  63. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +1 -1
  64. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +2 -2
  65. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
  66. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +1 -1
  67. package/app/.next-cli-build/server/app/api/cli-tools/pi-settings/route.js +1 -1
  68. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js +1 -1
  69. package/app/.next-cli-build/server/app/api/v1/models/info/route.js +1 -1
  70. package/app/.next-cli-build/server/app/api/v1/models/route.js +1 -1
  71. package/app/.next-cli-build/server/app/api/v1/route.js +1 -1
  72. package/app/.next-cli-build/server/app/api/v1beta/models/route.js +1 -1
  73. package/app/.next-cli-build/server/app/api/version/route.js +1 -1
  74. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  75. package/app/.next-cli-build/server/app/callback.html +1 -1
  76. package/app/.next-cli-build/server/app/callback.rsc +4 -4
  77. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +4 -4
  78. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +2 -2
  79. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +4 -4
  80. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  81. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  82. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +4 -4
  83. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +4 -4
  84. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  85. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +4 -4
  86. package/app/.next-cli-build/server/app/index.html +1 -1
  87. package/app/.next-cli-build/server/app/index.rsc +4 -4
  88. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +4 -4
  89. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +4 -4
  90. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +2 -2
  91. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  92. package/app/.next-cli-build/server/app/landing.html +1 -1
  93. package/app/.next-cli-build/server/app/landing.rsc +4 -4
  94. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +4 -4
  95. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +2 -2
  96. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +4 -4
  97. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  98. package/app/.next-cli-build/server/app/login.html +1 -1
  99. package/app/.next-cli-build/server/app/login.rsc +4 -4
  100. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +4 -4
  101. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +2 -2
  102. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +4 -4
  103. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  104. package/app/.next-cli-build/server/app-paths-manifest.json +12 -12
  105. package/app/.next-cli-build/server/chunks/1350.js +1 -1
  106. package/app/.next-cli-build/server/chunks/194.js +1 -1
  107. package/app/.next-cli-build/server/chunks/369.js +2 -2
  108. package/app/.next-cli-build/server/chunks/5920.js +2 -2
  109. package/app/.next-cli-build/server/chunks/6985.js +1 -1
  110. package/app/.next-cli-build/server/chunks/7454.js +1 -1
  111. package/app/.next-cli-build/server/chunks/869.js +1 -1
  112. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  113. package/app/.next-cli-build/server/pages/404.html +1 -1
  114. package/app/.next-cli-build/server/pages/500.html +1 -1
  115. package/app/.next-cli-build/server/server-reference-manifest.js +1 -1
  116. package/app/.next-cli-build/server/server-reference-manifest.json +1 -1
  117. package/app/.next-cli-build/static/chunks/{1321-6bd6f91d24e9863e.js → 1321-d31d839184ff87c5.js} +1 -1
  118. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/agent-library/page-40f3ca16440f8e17.js +1 -0
  119. package/app/{.next/static/chunks/app/(dashboard)/dashboard/skills/page-b1e9603ce7be0155.js → .next-cli-build/static/chunks/app/(dashboard)/dashboard/skills/page-645e7c5ec034fe8c.js} +1 -1
  120. package/app/.next-cli-build/static/css/196a6347b9104610.css +1 -0
  121. package/app/open-sse/identity/tls/bin/darwin/arm64/switchboard-claude-tls +0 -0
  122. package/app/open-sse/identity/tls/bin/darwin/x64/switchboard-claude-tls +0 -0
  123. package/app/open-sse/identity/tls/bin/linux/arm64/switchboard-claude-tls +0 -0
  124. package/app/open-sse/identity/tls/bin/linux/x64/switchboard-claude-tls +0 -0
  125. package/app/open-sse/identity/tls/bin/win32/arm64/switchboard-claude-tls.exe +0 -0
  126. package/app/open-sse/identity/tls/bin/win32/x64/switchboard-claude-tls.exe +0 -0
  127. package/app/package.json +1 -1
  128. package/package.json +1 -1
  129. package/app/.next/static/chunks/app/(dashboard)/dashboard/agent-library/page-cf3bc192f7a27304.js +0 -1
  130. package/app/.next/static/css/c5928b380ef8a163.css +0 -1
  131. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/agent-library/page-cf3bc192f7a27304.js +0 -1
  132. package/app/.next-cli-build/static/css/c5928b380ef8a163.css +0 -1
  133. /package/app/.next/static/{kGdbG3TEpkBeoqsRS2Mre → Dj3B1SY51GKVJr4nnDlac}/_buildManifest.js +0 -0
  134. /package/app/.next/static/{kGdbG3TEpkBeoqsRS2Mre → Dj3B1SY51GKVJr4nnDlac}/_ssgManifest.js +0 -0
  135. /package/app/.next-cli-build/static/{kGdbG3TEpkBeoqsRS2Mre → Dj3B1SY51GKVJr4nnDlac}/_buildManifest.js +0 -0
  136. /package/app/.next-cli-build/static/{kGdbG3TEpkBeoqsRS2Mre → Dj3B1SY51GKVJr4nnDlac}/_ssgManifest.js +0 -0
@@ -42,13 +42,13 @@ ${e.length} files in ${g.length} dirs:
42
42
  `,b.slice(0,10)))h+=` ${a}
43
43
  `;b.length>10&&(h+=` +${b.length-10}
44
44
  `),h+="\n"}return g.length>20&&(h+=`+${g.length-20} more dirs
45
- `),h.replace(/\n+$/,"")}t.filterName="search-list";let u=/^Result of search in '[^']*' \(total (\d+) files?\):/,v=/^diff --git /m,w=/^@@ /m,x=/^On branch |^nothing to commit|^Changes (not |to be )|^Untracked files:/m,y=/^[*|/\\ ]*commit [0-9a-f]{7,40}(\s|$|[([<{])/im,z=/^[ MADRCU?!][ MADRCU?!] \S/m,A=/^(npm (warn|error|ERR!)|yarn (warn|error)|\s*Compiling\s+\S+|\s*Downloading\s+\S+|added \d+ package|\[ERROR\]|BUILD (SUCCESS|FAILED)|\s*Finished\s+|Successfully (installed|built)|ERROR:)/im,B=/[├└]──|│ /,C=/^[-dlbcps][rwx-]{9}/m,D=/^total \d+$/m;function E(a){return null!==j(a)}function F(a){let b=a.trim();return 0!==b.length&&(!!/^[A-Za-z]:[\\/]/.test(b)||!b.includes(":")&&(b.startsWith(".")||b.startsWith("/")||b.includes("/")||b.includes("\\")))}function G(a,b){if(!b||!a)return null;if(a.conversationState){var c=a;let b={bytesBefore:0,bytesAfter:0,hits:[]};try{let a=c.conversationState,d=[...Array.isArray(a?.history)?a.history:[]];for(let c of(a?.currentMessage&&d.push(a.currentMessage),d)){let a=c?.userInputMessage?.userInputMessageContext?.toolResults;if(Array.isArray(a)){for(let c of a)if("error"!==c.status&&Array.isArray(c.content)){for(let a of c.content)if(a&&"string"==typeof a.text){if(H(a.text))continue;a.text=I(a.text,b,"kiro-tool-result")}}}}}catch(a){return console.warn("[RTK] compressKiroFormat error:",a.message),null}return b}let d=Array.isArray(a.messages)?a.messages:Array.isArray(a.input)?a.input:null;if(!d)return null;let e={bytesBefore:0,bytesAfter:0,hits:[]};try{for(let a=0;a<d.length;a++){let b=d[a];if(b){if("function_call_output"===b.type){if(!0===b.is_error||"error"===b.status)continue;if("string"==typeof b.output){if(H(b.output))continue;b.output=I(b.output,e,"openai-responses-string")}else if(Array.isArray(b.output))for(let a=0;a<b.output.length;a++){let c=b.output[a];if(c&&"input_text"===c.type&&"string"==typeof c.text){if(H(c.text))continue;c.text=I(c.text,e,"openai-responses-array")}}continue}if("tool"===b.role&&"string"==typeof b.content){if(!0===b.is_error||H(b.content))continue;b.content=I(b.content,e,"openai-tool");continue}if(Array.isArray(b.content)){if("tool"===b.role){if(!0===b.is_error)continue;for(let a=0;a<b.content.length;a++){let c=b.content[a];if(c&&"text"===c.type&&"string"==typeof c.text){if(H(c.text))continue;c.text=I(c.text,e,"openai-tool-array")}}continue}for(let a=0;a<b.content.length;a++){let c=b.content[a];if(c&&"tool_result"===c.type&&!0!==c.is_error){if("string"==typeof c.content){if(H(c.content))continue;c.content=I(c.content,e,"claude-string")}else if(Array.isArray(c.content))for(let a=0;a<c.content.length;a++){let b=c.content[a];if(b&&"text"===b.type&&"string"==typeof b.text){if(H(b.text))continue;b.text=I(b.text,e,"claude-array")}}}}}}}}catch(a){return console.warn("[RTK] compressMessages error:",a.message),null}return e}function H(a){return"string"==typeof a&&!(a.length<8)&&(/^\s*(Error|Exception|Traceback|TypeError|ReferenceError|SyntaxError|Failed)\b/m.test(a)||/\bat\s+\S+\s+\([^)]+:\d+:\d+\)/.test(a))}function I(a,b,c){let d=a.length;if(b.bytesBefore+=d,d<500||d>0xa00000)return b.bytesAfter+=d,a;let h=function(a){var b,c;let d,h,j=a.length>1024?a.slice(0,1024):a,n=a.split("\n");if(y.test(j))return g;if(v.test(j)||w.test(j))return e;if(x.test(j))return f;if(A.test(j))return i;if(!((d=j.split("\n").filter(a=>a.trim())).length<3)&&d.filter(a=>z.test(a)).length/d.length>=.6)return f;let G=j.split("\n").filter(a=>a.trim().length>0);return G.slice(0,5).some(E)?k:G.length>=3&&G.every(F)?l:B.test(j)?p:D.test(j)||(b=j,h=new RegExp((c=C).source,c.flags.includes("g")?c.flags:c.flags+"g"),(b.match(h)||[]).length>=3)?o:u.test(j)?t:n.length>=250&&function(a){let b=0,c=0;for(let d of a.slice(0,100))0!==d.length&&(c++,s.test(d)&&b++);return!(c<5)&&b/c>=.7}(n)?r:G.length>=5?m:a.split("\n").length>=250?q:null}(a);if(!h)return b.bytesAfter+=d,a;let j=function(a,b){if("function"!=typeof a)return b;try{let c=a(b);if("string"!=typeof c)return b;return c}catch(d){let c=a.filterName||a.name||"anonymous";return console.warn(`[rtk] warning: filter '${c}' panicked — passing through raw output: ${d?.message||d}`),b}}(h,a);return!j||0===j.length||j.length>=d?(b.bytesAfter+=d,a):(b.bytesAfter+=j.length,b.hits.push({shape:c,filter:h.filterName||h.name,saved:d-j.length}),j)}function J(a){if(!a||!a.hits||0===a.hits.length)return null;let b=a.bytesBefore-a.bytesAfter,c=a.bytesBefore>0?(b/a.bytesBefore*100).toFixed(1):"0",d=Array.from(new Set(a.hits.map(a=>a.filter))).join(",");return`[RTK] saved ${b}B / ${a.bytesBefore}B (${c}%) via [${d}] hits=${a.hits.length}`}},1160:(a,b,c)=>{c.d(b,{BP:()=>l,Eh:()=>h,n8:()=>k,sk:()=>i});let d={DEBUG:0,INFO:1,WARN:2,ERROR:3},e=d[String(("u">typeof process?process.env?.LOG_LEVEL:void 0)||"").toUpperCase()]??d.INFO,f=["\uD83D\uDFE2","\uD83D\uDD35","\uD83D\uDFE3","\uD83D\uDFE1","\uD83D\uDFE0","\uD83D\uDD34","⚪","\uD83D\uDFE4"],g=0;function h(){let a=f[g%f.length];return g++,a}function i(a){let b=String(a??"");if(!b)return h();let c=0,d=Math.min(b.length,128);for(let a=0;a<d;a++)c=31*c+b.charCodeAt(a)|0;return f[Math.abs(c)%f.length]}function j(a,b,c){let d=a?`${a} `:"";return`[${new Date().toLocaleTimeString("en-US",{hour12:!1,hour:"2-digit",minute:"2-digit",second:"2-digit"})}] ${d}${b} ${c}`}function k(a,b,c){e>d.INFO||console.log(j(a,b,c))}function l(a,b,c){console.log(j(a,b,c))}},2735:(a,b,c)=>{c.d(b,{c:()=>i});var d=c(17717),e=c(48664),f=c(19956),g=c(60290),h=c(6755);function i(a,b,c="",e=!1){if(!c.includes("claude-cli")||!a.messages?.length)return null;let f=a.messages,h=a=>"string"==typeof a?a:Array.isArray(a)?a.filter(a=>"text"===a.type).map(a=>a.text).join(" "):"",j=!1,m=!1,n=f[f.length-1];if(n?.role==="assistant"&&n.content?.[0]?.text==="{"&&(j=!0),j||"Warmup"===h(f[0]?.content)&&(j=!0),j||1!==f.length||f[0]?.role!=="user"||"count"===h(f[0]?.content)&&(j=!0),!j&&g.C8?.length){let a=f.filter(a=>"user"===a.role).map(a=>h(a.content)).join(" ");g.C8.some(b=>a.includes(b))&&(j=!0)}if(!j&&e){let b=f.find(a=>"system"===a.role),c=h(b?.content),d=Array.isArray(a.system)?a.system.filter(a=>"text"===a.type).map(a=>a.text).join(" "):"string"==typeof a.system?a.system:"";(c||d).includes("isNewTopic")&&(j=!0,m=!0)}if(!j)return null;let o=(0,d.Tz)(a),p=!1!==a.stream;if(m){let a=f.find(a=>"user"===a.role),c=JSON.stringify({isNewTopic:!0,title:h(a?.content).trim().split(/\s+/).slice(0,3).join(" ")});return p?l(o,b,c):k(o,b,c)}return p?l(o,b):k(o,b)}function j(a,b="CLI Command Execution: Clear Terminal"){return{id:`chatcmpl-${Date.now()}`,object:"chat.completion",created:Math.floor(Date.now()/1e3),model:a,choices:[{index:0,message:{role:"assistant",content:b},finish_reason:"stop"}],usage:{prompt_tokens:1,completion_tokens:1,total_tokens:2}}}function k(a,b,c){let d=j(b,c);if(a===f.h.OPENAI)return{success:!0,response:new Response(JSON.stringify(d),{headers:{"Content-Type":"application/json"}})};let g=(0,e.Ws)(a);g.model=b;let h=m(d),i=[];for(let b of h){let c=(0,e.Y8)(f.h.OPENAI,a,b,g);c?.length>0&&i.push(...c)}let k=(0,e.Y8)(f.h.OPENAI,a,null,g);return k?.length>0&&i.push(...k),{success:!0,response:new Response(JSON.stringify(function(a,b){if(!a||0===a.length)return j("unknown");let c=a[a.length-1];if(b===f.h.CLAUDE&&a.find(a=>"message_stop"===a.type)){a.find(a=>"content_block_delta"===a.type);let b=a.find(a=>"message_delta"===a.type),d=a.find(a=>"message_start"===a.type);if(d?.message){c=d.message;let a=d.message.usage,e=b?.usage;(a||e)&&(c.usage={...a||{},...e||{},...a?.cache_read_input_tokens!==void 0?{cache_read_input_tokens:a.cache_read_input_tokens}:{},...a?.cache_creation_input_tokens!==void 0?{cache_creation_input_tokens:a.cache_creation_input_tokens}:{},...a?.input_tokens!==void 0?{input_tokens:a.input_tokens}:{}})}}return c}(i,a)),{headers:{"Content-Type":"application/json"}})}}function l(a,b,c){let d=j(b,c),g=(0,e.Ws)(a);g.model=b;let i=m(d),k=[];for(let b of i){let c=(0,e.Y8)(f.h.OPENAI,a,b,g);if(c?.length>0)for(let b of c)k.push((0,h.v8)(b,a))}let l=(0,e.Y8)(f.h.OPENAI,a,null,g);if(l?.length>0)for(let b of l)k.push((0,h.v8)(b,a));return k.push("data: [DONE]\n\n"),{success:!0,response:new Response(k.join(""),{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}})}}function m(a){let{id:b,created:c,model:d,choices:e}=a;return[{id:b,object:"chat.completion.chunk",created:c,model:d,choices:[{index:0,delta:{role:"assistant",content:e[0].message.content},finish_reason:null}]},{id:b,object:"chat.completion.chunk",created:c,model:d,choices:[{index:0,delta:{},finish_reason:"stop"}],usage:a.usage}]}},6755:(a,b,c)=>{c.d(b,{i5:()=>q,l2:()=>r,lm:()=>g.lm,v8:()=>h.v8});var d=c(48664),e=c(19956),f=c(12407),g=c(67677),h=c(45894),i=c(48330),j=c(12828),k=c(1160);c(4905);var l=c(83611);let m=new TextEncoder,n="translate",o="passthrough";function p(a={}){let{mode:b=n,targetFormat:c,sourceFormat:q,provider:r=null,reqLogger:s=null,toolNameMap:t=null,model:u=null,connectionId:v=null,body:w=null,onStreamComplete:x=null,clientKeyId:y=null}=a,z="",A=null,B=new TextDecoder("utf-8",{fatal:!1}),C=b===n?{...(0,d.Ws)(q),provider:r,toolNameMap:t,model:u}:null,D=0,E="",F="",G=null,H=0,I=0,J={},K=null,L=!1,M=!1,N=!1,O=(0,l.H)();function P(a){if(j.T&&a&&(H++,a.startsWith("event:"))){let b=a.slice(6).trim();J[b]=(J[b]||0)+1}}function Q(a,b){let c;if(!a.trim())return;let d=a.split(/\r?\n/);for(let a of d)P(a.trim());let f=d.filter(a=>a.startsWith("data:")),i=f.map(a=>a.slice(5).replace(/^ /,"")).join("\n"),j=!1;if(f.length>0)if("[DONE]"===i.trim()){if(N)return;N=!0,c="data: [DONE]\n\n"}else try{let a=JSON.parse(i.trim()),b=(0,h.A4)(a),d=!1;if(t?.size>0&&a?.type==="content_block_start"&&a?.content_block?.type==="tool_use"){let b=t.get(a.content_block.name);b&&(a.content_block={...a.content_block,name:b},d=!0)}let f=!1;if(void 0!==a.choices&&(a.object||(a.object="chat.completion.chunk",f=!0),a.created||(a.created=Math.floor(Date.now()/1e3),f=!0)),void 0!==a.prompt_filter_results&&(delete a.prompt_filter_results,f=!0),a?.choices)for(let b of a.choices)void 0!==b.content_filter_results&&(delete b.content_filter_results,f=!0);if(a?.choices)for(let b of a.choices)b.delta?.tool_calls&&Array.isArray(b.delta.tool_calls)&&0===b.delta.tool_calls.length&&(delete b.delta.tool_calls,f=!0);if(!(0,h.c2)(a,e.h.OPENAI))return;let k=a.choices?.[0]?.delta;if("string"==typeof k?.content){let{content:a,reasoning:b}=O(k.content);b&&(k.reasoning_content=(k.reasoning_content||"")+b),a!==k.content&&(!k.reasoning_content||a&&a.trim()?k.content=a||"":delete k.content,f=!0)}let l=k?.content,m=k?.reasoning_content;l&&"string"==typeof l&&(D+=l.length,E+=l),m&&"string"==typeof m&&(D+=m.length,F+=m);let n=(0,g.f5)(a);n&&(A=(0,g._L)(A,n));let o=a.choices?.[0]?.finish_reason;if(o&&!(0,g.Gh)(a.usage)){let b=(0,g.OF)(w,D,e.h.OPENAI);a.usage=(0,g.WL)(b,e.h.OPENAI),c=`data: ${JSON.stringify(a)}
45
+ `),h.replace(/\n+$/,"")}t.filterName="search-list";let u=/^Result of search in '[^']*' \(total (\d+) files?\):/,v=/^diff --git /m,w=/^@@ /m,x=/^On branch |^nothing to commit|^Changes (not |to be )|^Untracked files:/m,y=/^[*|/\\ ]*commit [0-9a-f]{7,40}(\s|$|[([<{])/im,z=/^[ MADRCU?!][ MADRCU?!] \S/m,A=/^(npm (warn|error|ERR!)|yarn (warn|error)|\s*Compiling\s+\S+|\s*Downloading\s+\S+|added \d+ package|\[ERROR\]|BUILD (SUCCESS|FAILED)|\s*Finished\s+|Successfully (installed|built)|ERROR:)/im,B=/[├└]──|│ /,C=/^[-dlbcps][rwx-]{9}/m,D=/^total \d+$/m;function E(a){return null!==j(a)}function F(a){let b=a.trim();return 0!==b.length&&(!!/^[A-Za-z]:[\\/]/.test(b)||!b.includes(":")&&(b.startsWith(".")||b.startsWith("/")||b.includes("/")||b.includes("\\")))}function G(a,b){if(!b||!a)return null;if(a.conversationState){var c=a;let b={bytesBefore:0,bytesAfter:0,hits:[]};try{let a=c.conversationState,d=[...Array.isArray(a?.history)?a.history:[]];for(let c of(a?.currentMessage&&d.push(a.currentMessage),d)){let a=c?.userInputMessage?.userInputMessageContext?.toolResults;if(Array.isArray(a)){for(let c of a)if("error"!==c.status&&Array.isArray(c.content)){for(let a of c.content)if(a&&"string"==typeof a.text){if(H(a.text))continue;a.text=I(a.text,b,"kiro-tool-result")}}}}}catch(a){return console.warn("[RTK] compressKiroFormat error:",a.message),null}return b}let d=Array.isArray(a.messages)?a.messages:Array.isArray(a.input)?a.input:null;if(!d)return null;let e={bytesBefore:0,bytesAfter:0,hits:[]};try{for(let a=0;a<d.length;a++){let b=d[a];if(b){if("function_call_output"===b.type){if(!0===b.is_error||"error"===b.status)continue;if("string"==typeof b.output){if(H(b.output))continue;b.output=I(b.output,e,"openai-responses-string")}else if(Array.isArray(b.output))for(let a=0;a<b.output.length;a++){let c=b.output[a];if(c&&"input_text"===c.type&&"string"==typeof c.text){if(H(c.text))continue;c.text=I(c.text,e,"openai-responses-array")}}continue}if("tool"===b.role&&"string"==typeof b.content){if(!0===b.is_error||H(b.content))continue;b.content=I(b.content,e,"openai-tool");continue}if(Array.isArray(b.content)){if("tool"===b.role){if(!0===b.is_error)continue;for(let a=0;a<b.content.length;a++){let c=b.content[a];if(c&&"text"===c.type&&"string"==typeof c.text){if(H(c.text))continue;c.text=I(c.text,e,"openai-tool-array")}}continue}for(let a=0;a<b.content.length;a++){let c=b.content[a];if(c&&"tool_result"===c.type&&!0!==c.is_error){if("string"==typeof c.content){if(H(c.content))continue;c.content=I(c.content,e,"claude-string")}else if(Array.isArray(c.content))for(let a=0;a<c.content.length;a++){let b=c.content[a];if(b&&"text"===b.type&&"string"==typeof b.text){if(H(b.text))continue;b.text=I(b.text,e,"claude-array")}}}}}}}}catch(a){return console.warn("[RTK] compressMessages error:",a.message),null}return e}function H(a){return"string"==typeof a&&!(a.length<8)&&(/^\s*(Error|Exception|Traceback|TypeError|ReferenceError|SyntaxError|Failed)\b/m.test(a)||/\bat\s+\S+\s+\([^)]+:\d+:\d+\)/.test(a))}function I(a,b,c){let d=a.length;if(b.bytesBefore+=d,d<500||d>0xa00000)return b.bytesAfter+=d,a;let h=function(a){var b,c;let d,h,j=a.length>1024?a.slice(0,1024):a,n=a.split("\n");if(y.test(j))return g;if(v.test(j)||w.test(j))return e;if(x.test(j))return f;if(A.test(j))return i;if(!((d=j.split("\n").filter(a=>a.trim())).length<3)&&d.filter(a=>z.test(a)).length/d.length>=.6)return f;let G=j.split("\n").filter(a=>a.trim().length>0);return G.slice(0,5).some(E)?k:G.length>=3&&G.every(F)?l:B.test(j)?p:D.test(j)||(b=j,h=new RegExp((c=C).source,c.flags.includes("g")?c.flags:c.flags+"g"),(b.match(h)||[]).length>=3)?o:u.test(j)?t:n.length>=250&&function(a){let b=0,c=0;for(let d of a.slice(0,100))0!==d.length&&(c++,s.test(d)&&b++);return!(c<5)&&b/c>=.7}(n)?r:G.length>=5?m:a.split("\n").length>=250?q:null}(a);if(!h)return b.bytesAfter+=d,a;let j=function(a,b){if("function"!=typeof a)return b;try{let c=a(b);if("string"!=typeof c)return b;return c}catch(d){let c=a.filterName||a.name||"anonymous";return console.warn(`[rtk] warning: filter '${c}' panicked — passing through raw output: ${d?.message||d}`),b}}(h,a);return!j||0===j.length||j.length>=d?(b.bytesAfter+=d,a):(b.bytesAfter+=j.length,b.hits.push({shape:c,filter:h.filterName||h.name,saved:d-j.length}),j)}function J(a){if(!a||!a.hits||0===a.hits.length)return null;let b=a.bytesBefore-a.bytesAfter,c=a.bytesBefore>0?(b/a.bytesBefore*100).toFixed(1):"0",d=Array.from(new Set(a.hits.map(a=>a.filter))).join(",");return`[RTK] saved ${b}B / ${a.bytesBefore}B (${c}%) via [${d}] hits=${a.hits.length}`}},1160:(a,b,c)=>{c.d(b,{BP:()=>l,Eh:()=>h,n8:()=>k,sk:()=>i});let d={DEBUG:0,INFO:1,WARN:2,ERROR:3},e=d[String(("u">typeof process?process.env?.LOG_LEVEL:void 0)||"").toUpperCase()]??d.INFO,f=["\uD83D\uDFE2","\uD83D\uDD35","\uD83D\uDFE3","\uD83D\uDFE1","\uD83D\uDFE0","\uD83D\uDD34","⚪","\uD83D\uDFE4"],g=0;function h(){let a=f[g%f.length];return g++,a}function i(a){let b=String(a??"");if(!b)return h();let c=0,d=Math.min(b.length,128);for(let a=0;a<d;a++)c=31*c+b.charCodeAt(a)|0;return f[Math.abs(c)%f.length]}function j(a,b,c){let d=a?`${a} `:"";return`[${new Date().toLocaleTimeString("en-US",{hour12:!1,hour:"2-digit",minute:"2-digit",second:"2-digit"})}] ${d}${b} ${c}`}function k(a,b,c){e>d.INFO||console.log(j(a,b,c))}function l(a,b,c){console.log(j(a,b,c))}},2735:(a,b,c)=>{c.d(b,{c:()=>i});var d=c(17717),e=c(48664),f=c(19956),g=c(60290),h=c(6755);function i(a,b,c="",e=!1){if(!c.includes("claude-cli")||!a.messages?.length)return null;let f=a.messages,h=a=>"string"==typeof a?a:Array.isArray(a)?a.filter(a=>"text"===a.type).map(a=>a.text).join(" "):"",j=!1,m=!1,n=f[f.length-1];if(n?.role==="assistant"&&n.content?.[0]?.text==="{"&&(j=!0),j||"Warmup"===h(f[0]?.content)&&(j=!0),j||1!==f.length||f[0]?.role!=="user"||"count"===h(f[0]?.content)&&(j=!0),!j&&g.C8?.length){let a=f.filter(a=>"user"===a.role).map(a=>h(a.content)).join(" ");g.C8.some(b=>a.includes(b))&&(j=!0)}if(!j&&e){let b=f.find(a=>"system"===a.role),c=h(b?.content),d=Array.isArray(a.system)?a.system.filter(a=>"text"===a.type).map(a=>a.text).join(" "):"string"==typeof a.system?a.system:"";(c||d).includes("isNewTopic")&&(j=!0,m=!0)}if(!j)return null;let o=(0,d.Tz)(a),p=!1!==a.stream;if(m){let a=f.find(a=>"user"===a.role),c=JSON.stringify({isNewTopic:!0,title:h(a?.content).trim().split(/\s+/).slice(0,3).join(" ")});return p?l(o,b,c):k(o,b,c)}return p?l(o,b):k(o,b)}function j(a,b="CLI Command Execution: Clear Terminal"){return{id:`chatcmpl-${Date.now()}`,object:"chat.completion",created:Math.floor(Date.now()/1e3),model:a,choices:[{index:0,message:{role:"assistant",content:b},finish_reason:"stop"}],usage:{prompt_tokens:1,completion_tokens:1,total_tokens:2}}}function k(a,b,c){let d=j(b,c);if(a===f.h.OPENAI)return{success:!0,response:new Response(JSON.stringify(d),{headers:{"Content-Type":"application/json"}})};let g=(0,e.Ws)(a);g.model=b;let h=m(d),i=[];for(let b of h){let c=(0,e.Y8)(f.h.OPENAI,a,b,g);c?.length>0&&i.push(...c)}let k=(0,e.Y8)(f.h.OPENAI,a,null,g);return k?.length>0&&i.push(...k),{success:!0,response:new Response(JSON.stringify(function(a,b){if(!a||0===a.length)return j("unknown");let c=a[a.length-1];if(b===f.h.CLAUDE&&a.find(a=>"message_stop"===a.type)){a.find(a=>"content_block_delta"===a.type);let b=a.find(a=>"message_delta"===a.type),d=a.find(a=>"message_start"===a.type);if(d?.message){c=d.message;let a=d.message.usage,e=b?.usage;(a||e)&&(c.usage={...a||{},...e||{},...a?.cache_read_input_tokens!==void 0?{cache_read_input_tokens:a.cache_read_input_tokens}:{},...a?.cache_creation_input_tokens!==void 0?{cache_creation_input_tokens:a.cache_creation_input_tokens}:{},...a?.input_tokens!==void 0?{input_tokens:a.input_tokens}:{}})}}return c}(i,a)),{headers:{"Content-Type":"application/json"}})}}function l(a,b,c){let d=j(b,c),g=(0,e.Ws)(a);g.model=b;let i=m(d),k=[];for(let b of i){let c=(0,e.Y8)(f.h.OPENAI,a,b,g);if(c?.length>0)for(let b of c)k.push((0,h.v8)(b,a))}let l=(0,e.Y8)(f.h.OPENAI,a,null,g);if(l?.length>0)for(let b of l)k.push((0,h.v8)(b,a));return k.push("data: [DONE]\n\n"),{success:!0,response:new Response(k.join(""),{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}})}}function m(a){let{id:b,created:c,model:d,choices:e}=a;return[{id:b,object:"chat.completion.chunk",created:c,model:d,choices:[{index:0,delta:{role:"assistant",content:e[0].message.content},finish_reason:null}]},{id:b,object:"chat.completion.chunk",created:c,model:d,choices:[{index:0,delta:{},finish_reason:"stop"}],usage:a.usage}]}},6755:(a,b,c)=>{c.d(b,{i5:()=>q,l2:()=>r,lm:()=>g.lm,v8:()=>h.v8});var d=c(48664),e=c(19956),f=c(12407),g=c(67677),h=c(45894),i=c(48330),j=c(12828),k=c(1160);c(4905);var l=c(83611);let m=new TextEncoder,n="translate",o="passthrough";function p(a={}){let{mode:b=n,targetFormat:c,sourceFormat:q,provider:r=null,reqLogger:s=null,toolNameMap:t=null,model:u=null,connectionId:v=null,body:w=null,onStreamComplete:x=null,clientKeyId:y=null}=a,z="",A=null,B=new TextDecoder("utf-8",{fatal:!1}),C=b===n?{...(0,d.Ws)(q),provider:r,toolNameMap:t,model:u}:null,D=0,E="",F="",G=null,H=0,I=0,J={},K=null,L=!1,M=!1,N=(0,l.H)();function O(a){if(j.T&&a&&(H++,a.startsWith("event:"))){let b=a.slice(6).trim();J[b]=(J[b]||0)+1}}function P(a,b){let c;if(!a.trim())return;let d=a.split(/\r?\n/);for(let a of d)O(a.trim());let f=d.filter(a=>a.startsWith("data:")),i=f.map(a=>a.slice(5).replace(/^ /,"")).join("\n"),j=!1;if(f.length>0)if("[DONE]"===i.trim()){if(M)return;M=!0,c="data: [DONE]\n\n"}else try{let a=JSON.parse(i.trim()),b=(0,h.A4)(a),d=!1;if(t?.size>0&&a?.type==="content_block_start"&&a?.content_block?.type==="tool_use"){let b=t.get(a.content_block.name);b&&(a.content_block={...a.content_block,name:b},d=!0)}let f=!1;if(void 0!==a.choices&&(a.object||(a.object="chat.completion.chunk",f=!0),a.created||(a.created=Math.floor(Date.now()/1e3),f=!0)),void 0!==a.prompt_filter_results&&(delete a.prompt_filter_results,f=!0),a?.choices)for(let b of a.choices)void 0!==b.content_filter_results&&(delete b.content_filter_results,f=!0);if(a?.choices)for(let b of a.choices)b.delta?.tool_calls&&Array.isArray(b.delta.tool_calls)&&0===b.delta.tool_calls.length&&(delete b.delta.tool_calls,f=!0);if(!(0,h.c2)(a,e.h.OPENAI))return;let k=a.choices?.[0]?.delta;if("string"==typeof k?.content){let{content:a,reasoning:b}=N(k.content);b&&(k.reasoning_content=(k.reasoning_content||"")+b),a!==k.content&&(!k.reasoning_content||a&&a.trim()?k.content=a||"":delete k.content,f=!0)}let l=k?.content,m=k?.reasoning_content;l&&"string"==typeof l&&(D+=l.length,E+=l),m&&"string"==typeof m&&(D+=m.length,F+=m);let n=(0,g.f5)(a);n&&(A=(0,g._L)(A,n));let o=a.choices?.[0]?.finish_reason;if(o&&!(0,g.Gh)(a.usage)){let b=(0,g.OF)(w,D,e.h.OPENAI);a.usage=(0,g.WL)(b,e.h.OPENAI),c=`data: ${JSON.stringify(a)}
46
46
 
47
47
  `,A=b,j=!0}else if(o&&A){let b=(0,g.O9)(A);a.usage=(0,g.WL)(b,e.h.OPENAI),c=`data: ${JSON.stringify(a)}
48
48
 
49
49
  `,j=!0}else(b||f||d)&&(c=`data: ${JSON.stringify(a)}
50
50
 
51
- `,j=!0)}catch{return}j||c||(c=d.map(a=>a.startsWith("data:")&&!a.startsWith("data: ")?"data: "+a.slice(5):a).join("\n")+"\n\n"),s?.appendConvertedChunk?.(c),b.enqueue(m.encode(c))}function R(a,b=!1){let c=z.split(/\r?\n\r?\n/);for(let b of(z=c.pop()||"",c))Q(b,a);b&&z&&(Q(z,a),z="")}return new TransformStream({transform(a,f){G||(G=Date.now());let j=B.decode(a,{stream:!0});if(z+=j,s?.appendProviderChunk?.(j),b===o)return void R(f);let k=z.split("\n");for(let a of(z=k.pop()||"",k)){let j=a.trim();if(P(j),b===n&&c===e.h.OPENAI_RESPONSES&&j.startsWith("event:")&&(K=j.slice(6).trim()),!j)continue;let k=(0,h.tV)(j,c);if(!k)continue;let l=c===e.h.OPENAI_RESPONSES,o=l&&q===e.h.OPENAI_RESPONSES,p=l?(0,i.yx)(K,k):null;if(l&&(0,i.nu)(p,k)&&(L=!0),"string"==typeof k?.choices?.[0]?.delta?.content){let a=k.choices[0].delta,{content:b,reasoning:c}=O(a.content);c&&(a.reasoning_content=(a.reasoning_content||"")+c),b!==a.content&&(!a.reasoning_content||b&&b.trim()?a.content=b||"":delete a.content)}if(k&&k.done&&c!==e.h.OLLAMA){if(o&&!L){let a=(0,i.u9)();s?.appendConvertedChunk?.(a),f.enqueue(m.encode(a)),L=!0,I++}if(o&&!N){let a="data: [DONE]\n\n";s?.appendConvertedChunk?.(a),f.enqueue(m.encode(a))}N=!0,o&&(M=!0);continue}if(k.delta?.text&&(D+=k.delta.text.length,E+=k.delta.text),k.delta?.thinking&&(D+=k.delta.thinking.length,F+=k.delta.thinking),k.choices?.[0]?.delta?.content&&(D+=k.choices[0].delta.content.length,E+=k.choices[0].delta.content),k.choices?.[0]?.delta?.reasoning_content&&(D+=k.choices[0].delta.reasoning_content.length,F+=k.choices[0].delta.reasoning_content),k.candidates?.[0]?.content?.parts)for(let a of k.candidates[0].content.parts)a.text&&"string"==typeof a.text&&(D+=a.text.length,!0===a.thought?F+=a.text:E+=a.text);let r=(0,g.f5)(k);if(r&&(C.usage=(0,g._L)(C.usage,r)),o&&p){let a=(0,h.v8)({event:p,data:k},q);s?.appendConvertedChunk?.(a),f.enqueue(m.encode(a)),K=null,I++;continue}K=null;let t=(0,d.Y8)(c,q,k,C);if(t?._openaiIntermediate)for(let a of t._openaiIntermediate){let b=(0,h.v8)(a,e.h.OPENAI);s?.appendOpenAIChunk?.(b)}if(t?.length>0)for(let a of t){if(null==a||!(0,h.c2)(a,q))continue;let b="message_delta"===a.type||a.choices?.[0]?.finish_reason;if(C.finishReason&&b&&!(0,g.Gh)(a.usage)&&D>0){let b=(0,g.OF)(w,D,q);a.usage=(0,g.WL)(b,q),C.usage=b}else if(C.finishReason&&b&&C.usage){let b=(0,g.O9)(C.usage);a.usage=(0,g.WL)(b,q)}let c=(0,h.v8)(a,q);s?.appendConvertedChunk?.(c),f.enqueue(m.encode(c)),I++}}},async flush(a){let l=Object.entries(J).map(([a,b])=>`${a}=${b}`).join(",")||"none";(0,j.s)("SSE",`flush | provider=${r} | model=${u} | recvLines=${H} | emitted=${I} | events=[${l}]`),(0,f.uw)(u,r,v,!1);try{let j=B.decode();if(j&&(z+=j),b===o){R(a,!0),!(0,g.Gh)(A)&&D>0&&(A=(0,g.OF)(w,D,e.h.OPENAI)),(0,g.Gh)(A)?(0,g.IF)(r,A,u,v,y):(0,f.E5)({model:u,provider:r,connectionId:v,tokens:null,status:"200 OK"}).catch(()=>{});let b="antigravity"===r||"gemini"===r||"vertex"===r;if(!N&&!b){let b="data: [DONE]\n\n";s?.appendConvertedChunk?.(b),a.enqueue(m.encode(b))}x&&await x({content:E,thinking:F},A,G);return}if(z.trim()){let b=(0,h.tV)(z.trim());if(b&&!b.done){let f=(0,d.Y8)(c,q,b,C);if(f?._openaiIntermediate)for(let a of f._openaiIntermediate){let b=(0,h.v8)(a,e.h.OPENAI);s?.appendOpenAIChunk?.(b)}if(f?.length>0)for(let b of f){if(null==b)continue;let c=(0,h.v8)(b,q);s?.appendConvertedChunk?.(c),a.enqueue(m.encode(c))}}}let k=(0,d.Y8)(c,q,null,C);if(k?._openaiIntermediate)for(let a of k._openaiIntermediate){let b=(0,h.v8)(a,e.h.OPENAI);s?.appendOpenAIChunk?.(b)}if(k?.length>0)for(let b of k){if(null==b)continue;let c=(0,h.v8)(b,q);s?.appendConvertedChunk?.(c),a.enqueue(m.encode(c))}let l=c===e.h.OPENAI_RESPONSES&&q===e.h.OPENAI_RESPONSES;if(l&&!L){let b=(0,i.u9)();s?.appendConvertedChunk?.(b),a.enqueue(m.encode(b)),L=!0}if(l&&!M&&!N){let b="data: [DONE]\n\n";s?.appendConvertedChunk?.(b),a.enqueue(m.encode(b)),M=!0,N=!0}!(0,g.Gh)(C?.usage)&&D>0&&(C.usage=(0,g.OF)(w,D,q)),(0,g.Gh)(C?.usage)?(0,g.IF)(C.provider||c,C.usage,u,v,y):(0,f.E5)({model:u,provider:r,connectionId:v,tokens:null,status:"200 OK"}).catch(()=>{}),x&&await x({content:E,thinking:F},C?.usage,G)}catch(b){let a=b?.message||String(b);(0,k.BP)("","✗",`FLUSH ERROR \xb7 ${r||c}/${u} \xb7 ${a}${b?.stack?`
51
+ `,j=!0)}catch{return}j||c||(c=d.map(a=>a.startsWith("data:")&&!a.startsWith("data: ")?"data: "+a.slice(5):a).join("\n")+"\n\n"),s?.appendConvertedChunk?.(c),b.enqueue(m.encode(c))}function Q(a,b=!1){let c=z.split(/\r?\n\r?\n/);for(let b of(z=c.pop()||"",c))P(b,a);b&&z&&(P(z,a),z="")}return new TransformStream({transform(a,f){G||(G=Date.now());let j=B.decode(a,{stream:!0});if(z+=j,s?.appendProviderChunk?.(j),b===o)return void Q(f);let k=z.split("\n");for(let a of(z=k.pop()||"",k)){let j=a.trim();if(O(j),b===n&&c===e.h.OPENAI_RESPONSES&&j.startsWith("event:")&&(K=j.slice(6).trim()),!j)continue;let k=(0,h.tV)(j,c);if(!k)continue;let l=c===e.h.OPENAI_RESPONSES,o=l&&q===e.h.OPENAI_RESPONSES,p=l?(0,i.yx)(K,k):null,r=l&&(0,i.nu)(p,k);if(r&&(L=!0),"string"==typeof k?.choices?.[0]?.delta?.content){let a=k.choices[0].delta,{content:b,reasoning:c}=N(a.content);c&&(a.reasoning_content=(a.reasoning_content||"")+c),b!==a.content&&(!a.reasoning_content||b&&b.trim()?a.content=b||"":delete a.content)}if(k&&k.done&&c!==e.h.OLLAMA){if(o&&!L){let a=(0,i.u9)();s?.appendConvertedChunk?.(a),f.enqueue(m.encode(a)),L=!0,I++}if((o||q===e.h.OPENAI)&&!M){let a="data: [DONE]\n\n";s?.appendConvertedChunk?.(a),f.enqueue(m.encode(a))}M=!0;continue}if(k.delta?.text&&(D+=k.delta.text.length,E+=k.delta.text),k.delta?.thinking&&(D+=k.delta.thinking.length,F+=k.delta.thinking),k.choices?.[0]?.delta?.content&&(D+=k.choices[0].delta.content.length,E+=k.choices[0].delta.content),k.choices?.[0]?.delta?.reasoning_content&&(D+=k.choices[0].delta.reasoning_content.length,F+=k.choices[0].delta.reasoning_content),k.candidates?.[0]?.content?.parts)for(let a of k.candidates[0].content.parts)a.text&&"string"==typeof a.text&&(D+=a.text.length,!0===a.thought?F+=a.text:E+=a.text);let t=(0,g.f5)(k);if(t&&(C.usage=(0,g._L)(C.usage,t)),o&&p){let a=(0,h.v8)({event:p,data:k},q);s?.appendConvertedChunk?.(a),f.enqueue(m.encode(a)),K=null,I++;continue}K=null;let u=(0,d.Y8)(c,q,k,C);if(u?._openaiIntermediate)for(let a of u._openaiIntermediate){let b=(0,h.v8)(a,e.h.OPENAI);s?.appendOpenAIChunk?.(b)}if(u?.length>0)for(let a of u){if(null==a||!(0,h.c2)(a,q))continue;let b="message_delta"===a.type||a.choices?.[0]?.finish_reason;if(C.finishReason&&b&&!(0,g.Gh)(a.usage)&&D>0){let b=(0,g.OF)(w,D,q);a.usage=(0,g.WL)(b,q),C.usage=b}else if(C.finishReason&&b&&C.usage){let b=(0,g.O9)(C.usage);a.usage=(0,g.WL)(b,q)}let c=(0,h.v8)(a,q);s?.appendConvertedChunk?.(c),f.enqueue(m.encode(c)),I++}if(r&&q===e.h.OPENAI&&!M){let a="data: [DONE]\n\n";s?.appendConvertedChunk?.(a),f.enqueue(m.encode(a)),M=!0}}},async flush(a){let l=Object.entries(J).map(([a,b])=>`${a}=${b}`).join(",")||"none";(0,j.s)("SSE",`flush | provider=${r} | model=${u} | recvLines=${H} | emitted=${I} | events=[${l}]`),(0,f.uw)(u,r,v,!1);try{let j=B.decode();if(j&&(z+=j),b===o){Q(a,!0),!(0,g.Gh)(A)&&D>0&&(A=(0,g.OF)(w,D,e.h.OPENAI)),(0,g.Gh)(A)?(0,g.IF)(r,A,u,v,y):(0,f.E5)({model:u,provider:r,connectionId:v,tokens:null,status:"200 OK"}).catch(()=>{});let b="antigravity"===r||"gemini"===r||"vertex"===r;if(!M&&!b){let b="data: [DONE]\n\n";s?.appendConvertedChunk?.(b),a.enqueue(m.encode(b))}x&&await x({content:E,thinking:F},A,G);return}if(z.trim()){let b=(0,h.tV)(z.trim());if(b&&!b.done){let f=(0,d.Y8)(c,q,b,C);if(f?._openaiIntermediate)for(let a of f._openaiIntermediate){let b=(0,h.v8)(a,e.h.OPENAI);s?.appendOpenAIChunk?.(b)}if(f?.length>0)for(let b of f){if(null==b)continue;let c=(0,h.v8)(b,q);s?.appendConvertedChunk?.(c),a.enqueue(m.encode(c))}}}let k=(0,d.Y8)(c,q,null,C);if(k?._openaiIntermediate)for(let a of k._openaiIntermediate){let b=(0,h.v8)(a,e.h.OPENAI);s?.appendOpenAIChunk?.(b)}if(k?.length>0)for(let b of k){if(null==b)continue;let c=(0,h.v8)(b,q);s?.appendConvertedChunk?.(c),a.enqueue(m.encode(c))}let l=c===e.h.OPENAI_RESPONSES&&q===e.h.OPENAI_RESPONSES;if(l&&!L){let b=(0,i.u9)();s?.appendConvertedChunk?.(b),a.enqueue(m.encode(b)),L=!0}if((l||q===e.h.OPENAI)&&!M){let b="data: [DONE]\n\n";s?.appendConvertedChunk?.(b),a.enqueue(m.encode(b)),M=!0}!(0,g.Gh)(C?.usage)&&D>0&&(C.usage=(0,g.OF)(w,D,q)),(0,g.Gh)(C?.usage)?(0,g.IF)(C.provider||c,C.usage,u,v,y):(0,f.E5)({model:u,provider:r,connectionId:v,tokens:null,status:"200 OK"}).catch(()=>{}),x&&await x({content:E,thinking:F},C?.usage,G)}catch(b){let a=b?.message||String(b);(0,k.BP)("","✗",`FLUSH ERROR \xb7 ${r||c}/${u} \xb7 ${a}${b?.stack?`
52
52
  ${b.stack}`:""}`)}}})}function q(a,b,c=null,d=null,e=null,f=null,g=null,h=null,i=null,j=null){return p({mode:n,targetFormat:a,sourceFormat:b,provider:c,reqLogger:d,toolNameMap:e,model:f,connectionId:g,body:h,onStreamComplete:i,clientKeyId:j})}function r(a=null,b=null,c=null,d=null,e=null,f=null,g=null,h=null){return p({mode:o,provider:a,reqLogger:b,toolNameMap:c,model:d,connectionId:e,body:f,onStreamComplete:g,clientKeyId:h})}},12197:(a,b,c)=>{c.d(b,{El:()=>i,f3:()=>o,mS:()=>h,u1:()=>j});var d=c(77598),e=c(12407),f=c(66573),g=c(92);let h="sb_vault_search",i=6144;function j(a){let b=Number(a);return Number.isFinite(b)?Math.max(7,b):7}let k=!1;async function l(a,b){try{var c;let h,i;if("string"!=typeof a)return a;let j=Buffer.byteLength(a,"utf8");if(b.stats.bytesBefore+=j,j<b.thresholdBytes||(0,g.mE)(a))return b.stats.bytesAfter+=j,a;let k=(c=b.conversationId,`vlt_${(0,d.createHash)("sha256").update(`${c}\0${Date.now()}\0${Math.random()}\0${a.length}`).digest("hex").slice(0,12)}`),l=function(a,b=4e3){if("string"!=typeof a||!a)return[];let c=Math.max(1,Math.floor(Number(b)||4e3)),d=[],e=a,g=0;for(;e&&g++<2e3;){if(e.length<=c){d.push(e),e="";break}let a=e.lastIndexOf("\n\n",c);a<.5*c&&(a=e.lastIndexOf("\n",c)),a<.5*c&&(a=-1);let b=a>0?e.slice(0,a):(0,f.Wg)(e,c);if(b||(b=(0,f.Wg)(e,c)),!b)break;d.push(b),e=e.slice(b.length)}return e||0===d.length?[]:d}(a);if(0===l.length)return b.stats.bytesAfter+=j,a;let m=!1;try{m=await (0,e.M8)({id:k,conversationId:b.conversationId,toolName:b.toolNameHint,content:a,chunks:l,ttlMs:b.ttlMs})}catch{}if(!m)return b.stats.bytesAfter+=j,a;let n=(h=(0,f.Wg)(a,500),i=a.length>h.length?"…":"",`[Switchboard vault] The full tool result (${a.length} chars) was moved to the conversation vault to save context. A preview is below. To read the rest, call the sb_vault_search tool with vault_id "${k}" and a query describing what you need.
53
53
 
54
54
  --- preview (first 500 chars) ---
@@ -1,4 +1,4 @@
1
- exports.id=5920,exports.ids=[5920],exports.modules={6979:(a,b,c)=>{"use strict";c.d(b,{F:()=>f,J:()=>e});var d=c(23211);function e(a,b="Unexpected error"){return a instanceof Error&&a.message?a.message:"string"==typeof a&&a?a:b}function f(a,b){return d.NextResponse.json({error:e(b)},{status:a})}},49120:(a,b,c)=>{"use strict";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()},57781:(a,b,c)=>{"use strict";c.d(b,{R:()=>h});var d=c(51455),e=c.n(d),f=c(76760),g=c.n(f);async function h(a,b,c="utf-8"){let d=g().dirname(a);await e().mkdir(d,{recursive:!0});let f=g().join(d,`.${g().basename(a)}.sb-tmp-${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`);try{await e().writeFile(f,b,c);try{let a=await e().open(f,"r+");try{await a.sync()}finally{await a.close()}}catch{}await e().rename(f,a)}catch(a){try{await e().unlink(f)}catch{}throw a}}},78335:()=>{},79754:(a,b,c)=>{"use strict";c.d(b,{vy:()=>aE,M1:()=>as,S7:()=>aP,nV:()=>au,il:()=>Q,Z:()=>aS,K6:()=>aT,bZ:()=>aI,o1:()=>R,CN:()=>$,ef:()=>P,n7:()=>_,M5:()=>J,FK:()=>aQ,e6:()=>aJ,BM:()=>S,Ss:()=>ac,eB:()=>H,j1:()=>aw,DZ:()=>K,C0:()=>aR,te:()=>ab});var d=c(51455),e=c.n(d),f=c(76760),g=c.n(f),h=c(73024),i=c.n(h),j=c(48161),k=c.n(j),l=c(49120);let m=".switchboard-managed.json",n={claude:{id:"claude",label:"Claude Code",supportsSkills:!0,supportsMcp:!0},codex:{id:"codex",label:"Codex CLI",supportsSkills:!0,supportsMcp:!0},opencode:{id:"opencode",label:"OpenCode",supportsSkills:!0,supportsMcp:!0},gemini:{id:"gemini",label:"Gemini CLI",supportsSkills:!0,supportsMcp:!0},cursor:{id:"cursor",label:"Cursor",supportsSkills:!0,supportsMcp:!0}};function o(a={}){if("project"===a.scope&&a.projectPath){let b=g().resolve(a.projectPath);return g().join(b,".switchboard","agent-library")}return g().join(l.nJ,"agent-library")}function p(a){return g().join(a,"skills")}function q(a){return g().join(a,"mcp","servers.json")}function r(a){return g().join(a,"settings.json")}function s(a){return g().join(a,"state.json")}function t(a){let b=String(a||"").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,80);return!b||"."===b||".."===b||b.includes("..")||!/[a-zA-Z0-9]/.test(b)?"":b}function u(a){let b=t(a);return b?b.startsWith("sb-")?b:`sb-${b}`:null}function v(a,b={}){let c=k().homedir(),d="project"===b.scope&&b.projectPath?g().resolve(b.projectPath):null;switch(a){case"claude":return d?g().join(d,".claude","skills"):g().join(c,".claude","skills");case"codex":return d?g().join(d,".agents","skills"):g().join(c,".agents","skills");case"opencode":return d?g().join(d,".opencode","skills"):g().join(c,".config","opencode","skills");case"gemini":return d?g().join(d,".gemini","skills"):g().join(c,".gemini","skills");case"cursor":return d?g().join(d,".cursor","skills"):g().join(c,".cursor","skills");default:return null}}function w(a,b={}){let c=k().homedir(),d="project"===b.scope&&b.projectPath?g().resolve(b.projectPath):null;switch(a){case"claude":if(d)return{path:g().join(d,".mcp.json"),format:"json",kind:"claude-project-mcp"};return{path:g().join(c,".claude.json"),format:"json",kind:"claude-user"};case"codex":return{path:d?g().join(d,".codex","config.toml"):g().join(c,".codex","config.toml"),format:"toml",kind:"codex"};case"opencode":return{path:d?g().join(d,"opencode.json"):g().join(c,".config","opencode","opencode.json"),format:"json",kind:"opencode"};case"gemini":return{path:d?g().join(d,".gemini","settings.json"):g().join(c,".gemini","settings.json"),format:"json",kind:"gemini"};case"cursor":return{path:d?g().join(d,".cursor","mcp.json"):g().join(c,".cursor","mcp.json"),format:"json",kind:"cursor"};default:return null}}function x(a){for(let b of[a,p(a),g().join(a,"mcp")])i().existsSync(b)||i().mkdirSync(b,{recursive:!0})}var y=c(57781);let z=Promise.resolve();function A(a){(0,h.mkdirSync)(g().dirname(a),{recursive:!0});let b=JSON.stringify({pid:process.pid,at:new Date().toISOString(),ts:Date.now()});try{let c=(0,h.openSync)(a,"wx");try{(0,h.writeFileSync)(c,b,"utf-8")}finally{(0,h.closeSync)(c)}return!0}catch(a){if(a?.code!=="EEXIST")throw a;return!1}}async function B(){let a,b=(a=o({scope:"global",projectPath:null}),g().join(a,".apply.lock")),c=Date.now()+3e4;for(;Date.now()<c;){if(A(b)||function(a){try{let b,c=(0,h.readFileSync)(a,"utf-8");try{b=JSON.parse(c)}catch{b={pid:parseInt(String(c).trim(),10),ts:0}}let d=Number(b.pid),e=Number(b.ts)||0,f=e>0&&Date.now()-e>3e5,g=!function(a){if(!a||!Number.isFinite(a)||a<=0)return!1;try{return process.kill(a,0),!0}catch{return!1}}(d);if(f||g){try{(0,h.unlinkSync)(a)}catch{}return A(a)}}catch{try{(0,h.unlinkSync)(a)}catch{}return A(a)}return!1}(b))return()=>{try{if(!(0,h.existsSync)(b))return;let a=(0,h.readFileSync)(b,"utf-8");try{JSON.parse(a).pid===process.pid&&(0,h.unlinkSync)(b)}catch{String(a).trim()===String(process.pid)&&(0,h.unlinkSync)(b)}}catch{}};await new Promise(a=>setTimeout(a,50))}let d=Error("Agent Library apply/clean is already running (lock timeout). Retry shortly.");throw d.code="lock_timeout",d}function C(a){let b,c,d=new Promise((a,d)=>{b=a,c=d});return z=z.then(async()=>{let d=await B();try{let c=await a();b(c)}catch(a){c(a)}finally{d()}}).catch(()=>{}),d}function D(){let a={};for(let b of Object.keys(n))a[b]={skills:!0,mcp:!0};return{enabled:!0,scope:"global",projectPath:null,linkMode:"win32"===process.platform?"copy":"symlink",neverOverwriteUser:!0,includeProductSkills:!0,requireCatalogConfirm:!0,targets:a}}function E(a,b){let c=a||{skills:!0,mcp:!0};return b&&"object"==typeof b?{skills:"boolean"==typeof b.skills?b.skills:!1!==c.skills,mcp:"boolean"==typeof b.mcp?b.mcp:!1!==c.mcp}:{...c}}function F(a={}){let b=D(),c={};for(let a of Object.keys(n))c[a]={...b.targets[a]||{skills:!0,mcp:!0}};if(a.targets&&"object"==typeof a.targets)for(let b of Object.keys(n)){let d=a.targets[b];d&&"object"==typeof d&&(c[b]=E(c[b],d))}let d="copy"===a.linkMode||"symlink"===a.linkMode?a.linkMode:b.linkMode,e="project"===a.scope?"project":"global",f=null;return"project"===e&&a.projectPath&&(f=String(a.projectPath).trim()||null),{enabled:!1!==a.enabled,scope:e,projectPath:f,linkMode:d,neverOverwriteUser:!1!==a.neverOverwriteUser,includeProductSkills:!1!==a.includeProductSkills,requireCatalogConfirm:!1!==a.requireCatalogConfirm,targets:c}}function G(a){if(!a.enabled){let a=Error("Agent Library sync is turned off in settings");throw a.code="disabled",a}if("project"===a.scope){let b,c=a.projectPath?String(a.projectPath).trim():"";if(!c){let a=Error("Project scope requires an absolute project path — set it before Apply");throw a.code="project_path_missing",a}if(!g().isAbsolute(c)){let a=Error("Project path must be absolute (e.g. /Users/you/my-app)");throw a.code="project_path_invalid",a}let d=g().resolve(c);if(!(0,h.existsSync)(d)){let a=Error(`Project path does not exist: ${d}`);throw a.code="project_path_missing",a}try{b=(0,h.statSync)(d)}catch{let a=Error(`Cannot access project path: ${d}`);throw a.code="project_path_invalid",a}if(!b.isDirectory()){let a=Error(`Project path is not a directory: ${d}`);throw a.code="project_path_invalid",a}}}function H(a){let b=a||D();return o({scope:b.scope,projectPath:b.projectPath})}function I(){return o({scope:"global",projectPath:null})}async function J(a){let b=I();x(b);let c=r(b),d=D();if((0,h.existsSync)(c))try{let a=await e().readFile(c,"utf-8");d=F(JSON.parse(a))}catch{d=D()}return x(H(d)),d}async function K(a,b){let c=I();x(c);let d=await J(c),e={...d.targets};if(b.targets&&"object"==typeof b.targets)for(let[a,c]of Object.entries(b.targets))n[a]&&(e[a]=E(d.targets[a],c));let f=F({...d,...b,targets:e});if(!1===b.neverOverwriteUser&&!0!==b.confirmAllowOverwrite&&(f.neverOverwriteUser=!0),!0===b.confirmAllowOverwrite&&!1===b.neverOverwriteUser&&(f.neverOverwriteUser=!1),"project"===f.scope)try{G({...f,enabled:!0})}catch(a){if(a?.code!=="project_path_missing"||b.projectPath){if(a?.code!=="disabled")throw a}else f.projectPath=null}return await (0,y.R)(r(c),JSON.stringify(f,null,2)),x(H(f)),f}async function L(a){let b=a||H(await J());x(b);let c=s(b);if(!(0,h.existsSync)(c))return{managedSkills:{},managedMcpKeys:{},lastSync:null,lastDoctor:null};try{return JSON.parse(await e().readFile(c,"utf-8"))}catch{return{managedSkills:{},managedMcpKeys:{},lastSync:null,lastDoctor:null}}}async function M(a,b){x(a),await (0,y.R)(s(a),JSON.stringify(b,null,2))}var N=c(82922);let O=[{id:"switchboard",name:"Switchboard (Entry)",description:"Setup, model discovery, combos & Auto routing. Start here — one /v1 endpoint, multi-provider gateway.",endpoint:"/v1",icon:"hub",isEntry:!0},{id:"switchboard-chat",name:"Chat",description:"Chat / code-gen via OpenAI, Anthropic, or Responses formats — streaming, tools, combo as model.",endpoint:"/v1/chat/completions",icon:"chat"}];async function P(a){x(a);let b=p(a),c=[];try{c=await e().readdir(b)}catch{return[]}let d=[];for(let a of c){let c=g().join(b,a,"SKILL.md");if(!(0,h.existsSync)(c))continue;let f="",i=a;try{let a=await e().readFile(c,"utf-8"),b=a.match(/^name:\s*(.+)$/m),d=a.match(/^description:\s*(.+)$/m);b&&(i=b[1].trim().replace(/^["']|["']$/g,"")),d&&(f=d[1].trim().replace(/^["']|["']$/g,""))}catch{}let j=await e().stat(c);d.push({id:a,title:i,description:f,path:g().join(b,a),source:"library",updatedAt:j.mtime.toISOString()})}return d.sort((a,b)=>a.id.localeCompare(b.id))}async function Q(a,b={}){x(a);let c=(0,N.XP)(),d=[];if(!c)return{ok:!1,results:d,error:"Product skills directory not found"};for(let c of O){let f=t(c.id),i=g().join(p(a),f),j=g().join(i,"SKILL.md");if((0,h.existsSync)(j)&&!b.force){d.push({id:f,action:"skipped_exists"});continue}let k=await (0,N.dr)(c.id);if(!k){d.push({id:f,action:"missing_source"});continue}await e().mkdir(i,{recursive:!0}),await e().writeFile(j,k,"utf-8"),d.push({id:f,action:"installed"})}return{ok:!0,results:d}}async function R(a,b){x(a);let c=t(b.id);if(!c)throw Error("Invalid skill id");let d=g().join(p(a),c);return await e().mkdir(d,{recursive:!0}),await e().writeFile(g().join(d,"SKILL.md"),b.markdown,"utf-8"),await e().writeFile(g().join(d,".source.json"),JSON.stringify({source:b.source||"manual",installedAt:new Date().toISOString(),...b.contentHash?{contentHash:b.contentHash}:{},...b.etag?{etag:b.etag}:{}},null,2),"utf-8"),{id:c,path:d}}async function S(a,b){let c=t(b);if(!c)throw Error("Invalid skill id");let d=g().resolve(p(a)),f=g().resolve(d,c);if(g().dirname(f)!==d)throw Error("Invalid skill path");return(0,h.existsSync)(f)?(await e().rm(f,{recursive:!0,force:!0}),{removed:!0,id:c}):{removed:!1}}function T(a){return g().join(g().dirname(a),`.sb-managed-${g().basename(a)}.json`)}async function U(a){let b=T(a);if((0,h.existsSync)(b))try{if((0,h.lstatSync)(b).isFile())return JSON.parse(await e().readFile(b,"utf-8"))}catch{}try{if(!(0,h.existsSync)(a))return null;let b=(0,h.lstatSync)(a);if(b.isSymbolicLink()||!b.isDirectory())return null;let c=g().join(a,m);if(!(0,h.existsSync)(c)||!(0,h.lstatSync)(c).isFile())return null;return JSON.parse(await e().readFile(c,"utf-8"))}catch{return null}}async function V(a,b){let c=JSON.stringify({managedBy:"switchboard",namespace:"sb",skillId:b.skillId,libraryPath:b.libraryPath,linkMode:b.linkMode,updatedAt:new Date().toISOString()},null,2),d=T(a);if(await e().mkdir(g().dirname(d),{recursive:!0}),await (0,y.R)(d,c),"copy"===b.linkMode)try{let b=(0,h.lstatSync)(a);b.isDirectory()&&!b.isSymbolicLink()&&await (0,y.R)(g().join(a,m),c)}catch{}}async function W(a){try{let b=T(a),c=(0,h.lstatSync)(b);c.isFile()&&!c.isSymbolicLink()&&await e().unlink(b)}catch{}try{let b=(0,h.lstatSync)(a);if(!b.isDirectory()||b.isSymbolicLink())return;let c=g().join(a,m),d=(0,h.lstatSync)(c);d.isFile()&&!d.isSymbolicLink()&&await e().unlink(c)}catch{}}async function X(a,b,c={}){let d=null;try{d=(0,h.lstatSync)(a)}catch{let b=await U(a);if(b?.managedBy==="switchboard")return{ok:!0,reason:"managed_sidecar_orphan",marker:b};return{ok:!0,reason:"missing"}}let e=await U(a);if(e?.managedBy==="switchboard")return{ok:!0,reason:"managed",marker:e};if(d.isSymbolicLink()&&c.libraryRoot)try{let b=(0,h.realpathSync)(a),d=g().resolve(c.libraryRoot),e=g().relative(d,b);if(e&&!e.startsWith("..")&&!g().isAbsolute(e))return{ok:!0,reason:"symlink_into_library"}}catch{return{ok:!0,reason:"broken_symlink"}}if(d.isSymbolicLink())try{(0,h.realpathSync)(a)}catch{return{ok:!0,reason:"broken_symlink"}}return b?{ok:!1,reason:"conflict_user_owned",message:"Path exists and is not Switchboard-managed. Skipping to protect your files."}:{ok:!0,reason:"overwrite_allowed",message:"User allowed overwrite of non-managed path"}}function Y(a){return"string"==typeof a&&a.startsWith("sb-")}function Z(a){let b=String(a||"").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/\./g,"-").replace(/^-+|-+$/g,"");return b&&"."!==b&&".."!==b&&/[a-zA-Z0-9]/.test(b)?b.startsWith("sb-")?b:`sb-${b}`:null}function $(a,b){let c=g().resolve(a),d=g().resolve(b),e=g().relative(d,c);return""===e||!e.startsWith("..")&&!g().isAbsolute(e)}async function _(a){x(a);let b=q(a);if(!(0,h.existsSync)(b))return[];try{let a=JSON.parse(await e().readFile(b,"utf-8"));return Array.isArray(a.servers)?a.servers:[]}catch{return[]}}async function aa(a,b){x(a);let c=q(a);await e().mkdir(g().dirname(c),{recursive:!0}),await (0,y.R)(c,JSON.stringify({version:1,updatedAt:new Date().toISOString(),note:"Switchboard Agent Library MCP catalog. Prefer ${ENV_VAR} references for secrets — never store raw API keys here if avoidable.",servers:b},null,2))}async function ab(a,b){let c=Z(b.id.replace(/^sb-/,""))||b.id;if(!c)throw Error("Invalid MCP server id");let d=b.transport||(b.url?"http":"stdio");if("stdio"===d&&!b.command)throw Error("stdio MCP server requires command");if(("http"===d||"sse"===d)&&!b.url)throw Error("http/sse MCP server requires url");let e={id:c,name:b.name||c,transport:d,command:b.command||void 0,args:Array.isArray(b.args)?b.args.map(String):void 0,env:b.env&&"object"==typeof b.env?Object.fromEntries(Object.entries(b.env).map(([a,b])=>[a,String(b)])):void 0,url:b.url||void 0,headers:b.headers&&"object"==typeof b.headers?Object.fromEntries(Object.entries(b.headers).map(([a,b])=>[a,String(b)])):void 0,enabled:!1!==b.enabled,notes:b.notes||void 0},f=await _(a),g=f.findIndex(a=>a.id===c);return g>=0?f[g]=e:f.push(e),await aa(a,f),e}async function ac(a,b){let c=Z(b.replace(/^sb-/,""))||b,d=await _(a),e=d.filter(a=>a.id!==c&&a.id!==b);return await aa(a,e),{removed:e.length<d.length}}async function ad(a,b,c){for(let d of(await e().mkdir(b,{recursive:!0}),await e().readdir(a,{withFileTypes:!0}))){let f,i=g().join(a,d.name),j=g().join(b,d.name);try{f=(0,h.lstatSync)(i)}catch{continue}if(f.isSymbolicLink()){if(!c)continue;try{let a=(0,h.realpathSync)(i),b=g().relative(g().resolve(c),a);if(b.startsWith("..")||g().isAbsolute(b))continue}catch{continue}try{let a=(0,h.realpathSync)(i);(0,h.lstatSync)(a).isDirectory()?await ad(a,j,c):await e().copyFile(a,j)}catch{}continue}f.isDirectory()?await ad(i,j,c):f.isFile()&&await e().copyFile(i,j)}}async function ae(a){let b;try{b=await e().lstat(a)}catch{return}b.isSymbolicLink()||b.isFile()?await e().unlink(a):b.isDirectory()&&await e().rm(a,{recursive:!0,force:!0})}async function af(a,b,c=!0){try{await e().lstat(a)}catch{return}let d=await X(a,!1!==c,{libraryRoot:b});if(!d.ok){let a=Error(d.message||"Path is not Switchboard-managed");throw a.code="conflict",a.reason=d.reason,a}}async function ag(a,b,c,d,f={}){await e().mkdir(g().dirname(b),{recursive:!0});let h=!1!==f.neverOverwriteUser;if("symlink"===c){await af(b,d,h);try{return await ae(b),await e().symlink(a,b,"dir"),{mode:"symlink"}}catch(c){if(c?.code==="conflict")throw c;return ah(a,b,d,c?.message,h)}}return ah(a,b,d,void 0,h)}async function ah(a,b,c,d,f=!0){let g=`${b}.sb-tmp-${process.pid}-${Date.now()}`,h=`${b}.sb-bak-${process.pid}-${Date.now()}`;try{await ae(g),await ad(a,g,c),await af(b,c,f);let i=!1;try{await e().lstat(b),i=!0}catch{i=!1}if(i){await ae(h);try{await e().rename(b,h)}catch{await ae(b)}}try{await e().rename(g,b)}catch(a){if(i)try{await e().lstat(h),await e().rename(h,b)}catch{}throw a}try{await ae(h)}catch{}return d?{mode:"copy",fallbackFrom:"symlink",warning:d||"symlink failed; used copy"}:{mode:"copy"}}catch(a){try{await ae(g)}catch{}throw a}}function ai(a){return String(a)}function aj(a){return String(a).replace(/\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g,(a,b)=>`{env:${b}}`)}function ak(a){return null!=a&&"object"==typeof a&&!Array.isArray(a)}function al(a,b){let c=a.transport||(a.url?"http":"stdio");if("codex"===b)return"stdio"===c?{command:a.command,args:a.args||[],env:a.env||{}}:{url:a.url,http_headers:a.headers||{}};if("opencode"===b)return"stdio"===c?{type:"local",command:[a.command,...a.args||[]],environment:Object.fromEntries(Object.entries(a.env||{}).map(([a,b])=>[a,aj(b)])),enabled:!0}:{type:"remote",url:a.url,headers:Object.fromEntries(Object.entries(a.headers||{}).map(([a,b])=>[a,aj(b)])),enabled:!0};if("gemini"===b)return"stdio"===c?{command:a.command,args:a.args||[],env:a.env||{}}:{url:a.url,type:"sse"===c?"sse":"http",headers:a.headers||{}};if("stdio"===c){let b={command:a.command,args:a.args||[]};return a.env&&Object.keys(a.env).length&&(b.env=Object.fromEntries(Object.entries(a.env).map(([a,b])=>[a,ai(b)]))),b}let d={url:a.url,type:"sse"===c?"sse":"http"};return a.headers&&Object.keys(a.headers).length&&(d.headers=Object.fromEntries(Object.entries(a.headers).map(([a,b])=>[a,ai(b)]))),d}async function am(a,b,c){let d=c.kind,f=new Set(c.previouslyManaged||[]),i={};if((0,h.existsSync)(a))try{i=JSON.parse(await e().readFile(a,"utf-8"))}catch{if(c.neverOverwriteUser)return{ok:!1,error:"mcp_parse_failed",message:`Cannot parse ${a}; refusing to overwrite`,path:a};i={}}let j="mcpServers";if("opencode"===d&&(j="mcp"),Object.prototype.hasOwnProperty.call(i,j)&&!ak(i[j])&&c.neverOverwriteUser)return{ok:!1,error:"mcp_shape_conflict",message:`${a}: "${j}" exists but is not a plain object; refusing to overwrite`,path:a};let k=ak(i[j])?{...i[j]}:{},l=b.filter(a=>!1!==a.enabled),m=new Set(l.map(a=>a.id)),n=[];for(let a of Object.keys(k))f.has(a)&&Y(a)&&!m.has(a)&&(delete k[a],n.push(a));let o=[],p=[];for(let a of l){let b=a.id;if(!Y(b)){p.push({key:b,reason:"not_namespaced"});continue}let e=al(a,"cursor"===d?"cursor":"gemini"===d?"gemini":"opencode"===d?"opencode":"claude"),g=Object.prototype.hasOwnProperty.call(k,b),h=f.has(b);if(g&&!h&&c.neverOverwriteUser){p.push({key:b,reason:"user_owned_or_unknown_sb_key"});continue}k[b]=e,o.push(b)}let q={...i,[j]:k};return c.dryRun||(await e().mkdir(g().dirname(a),{recursive:!0}),await (0,y.R)(a,JSON.stringify(q,null,2))),{ok:!0,path:a,written:o,removed:n,skipped:p,dryRun:!!c.dryRun}}async function an(a,b,c){let d="";(0,h.existsSync)(a)&&(d=await e().readFile(a,"utf-8"));let f=d.replace(/\n?# --- switchboard-agent-library-mcp-start ---[\s\S]*?# --- switchboard-agent-library-mcp-end ---\n?/g,"\n"),i=b.filter(a=>!1!==a.enabled&&Y(a.id));if(!i.length)return!c.dryRun&&(0,h.existsSync)(a)&&await (0,y.R)(a,f.trimEnd()+"\n"),{ok:!0,path:a,written:[],removed:c.previouslyManaged||[],dryRun:!!c.dryRun};let j=new Set(c.previouslyManaged||[]),k=[],l=[];for(let a of i){let b=RegExp(`\\[mcp_servers\\.${ao(a.id)}\\]`,"m").test(f);if(b&&!j.has(a.id)&&c.neverOverwriteUser){k.push({key:a.id,reason:"user_owned_toml_section"});continue}b&&j.has(a.id)&&(f=f.replace(RegExp(`\\n?\\[mcp_servers\\.${ao(a.id)}\\][\\s\\S]*?(?=\\n\\[|\\n*$)`,"g"),"\n")),l.push(a)}let m=["","# --- switchboard-agent-library-mcp-start ---","# Managed by Switchboard Agent Library. Do not edit this block by hand."];for(let a of l){var n,o,p;let b=al(a,"codex"),c=(n=a.id,/^[A-Za-z_][A-Za-z0-9_-]*$/.test(n)&&!n.includes(".")?n:ap(n));if(m.push(`[mcp_servers.${c}]`),b.command){if(m.push(`command = ${ap(b.command)}`),b.args?.length&&m.push(`args = ${(o=b.args,`[${o.map(a=>ap(a)).join(", ")}]`)}`),b.env&&Object.keys(b.env).length)for(let[a,d]of(m.push(`[mcp_servers.${c}.env]`),Object.entries(b.env)))m.push(`${a} = ${ap(ai(d))}`)}else if(b.url&&(m.push(`url = ${ap(b.url)}`),b.http_headers&&Object.keys(b.http_headers).length))for(let[a,d]of(m.push(`[mcp_servers.${c}.http_headers]`),Object.entries(b.http_headers))){m.push(`${(p=a,/^[A-Za-z_][A-Za-z0-9_]*$/.test(p)?p:ap(p))} = ${ap(ai(d))}`)}m.push("")}m.push("# --- switchboard-agent-library-mcp-end ---","");let q=(f.trimEnd()+"\n"+m.join("\n")).replace(/\n{3,}/g,"\n\n");return c.dryRun||(await e().mkdir(g().dirname(a),{recursive:!0}),await (0,y.R)(a,q)),{ok:!0,path:a,written:l.map(a=>a.id),removed:[],skipped:k,dryRun:!!c.dryRun}}function ao(a){return String(a).replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function ap(a){return JSON.stringify(String(a))}async function aq(a,b){let c=await X(a,!0,{libraryRoot:b});return c.ok?(await ae(a),await W(a),{ok:!0,reason:c.reason}):c}async function ar(a,b,c,d,f,h,i){for(let j of function(a,b={}){if("codex"!==a)return[];let c="project"===b.scope&&b.projectPath?g().resolve(b.projectPath):null;return[c?g().join(c,".codex","skills"):g().join(k().homedir(),".codex","skills")]}(a,d))if(j!==b)for(let b of c){let c=g().join(j,b);try{await e().lstat(c)}catch{continue}if(h){(await X(c,!0,{libraryRoot:f})).ok&&i.push({agent:a,skillId:b,dest:c,action:"would_remove_legacy"});continue}let d=await aq(c,f);i.push({agent:a,skillId:b,dest:c,action:d.ok?"removed_legacy":"skipped_legacy_conflict",...d.ok?{}:{reason:d.reason,message:d.message}})}}async function as(a,b={}){if(b.dryRun)return at(a,b);try{return await C(()=>at(a,b))}catch(a){if(a?.code==="lock_timeout")return{ok:!1,error:"lock_timeout",message:a.message};throw a}}async function at(a,b={}){let c=a||D();try{G(c)}catch(a){return{ok:!1,error:a?.code||"settings_invalid",message:a?.message||"Invalid settings"}}let d=H(c);x(d),c.includeProductSkills&&await Q(d);let f=await P(d),i=await _(d),j=await L(d),k={scope:c.scope,projectPath:c.projectPath},l=[],m=[],o=!b.mcpOnly,q=!b.skillsOnly;if(o)for(let[a,i]of Object.entries(n)){if(!i.supportsSkills)continue;if(c.targets[a]?.skills===!1){l.push({agent:a,action:"skipped_disabled"});continue}let m=v(a,k);if(!m)continue;for(let i of(b.dryRun||await e().mkdir(m,{recursive:!0}),f)){let e=u(i.id);if(!e)continue;let f=g().join(m,e),k=function(a,b){let c=t(b);return g().join(p(a),c)}(d,i.id);if(!(0,h.existsSync)(g().join(k,"SKILL.md"))){l.push({agent:a,skillId:i.id,action:"missing_source"});continue}let n=await X(f,c.neverOverwriteUser,{libraryRoot:d});if(!n.ok){l.push({agent:a,skillId:i.id,dest:f,action:"conflict",reason:n.reason,message:n.message});continue}if(b.dryRun){l.push({agent:a,skillId:i.id,dest:f,action:"would_sync",linkMode:c.linkMode});continue}try{let b=await ag(k,f,c.linkMode,d,{neverOverwriteUser:c.neverOverwriteUser});await V(f,{skillId:i.id,libraryPath:k,linkMode:b.mode}),l.push({agent:a,skillId:i.id,dest:f,action:"synced",...b}),j.managedSkills||(j.managedSkills={}),j.managedSkills[a]||(j.managedSkills[a]=[]),j.managedSkills[a].includes(e)||j.managedSkills[a].push(e)}catch(b){b?.code==="conflict"?l.push({agent:a,skillId:i.id,dest:f,action:"conflict",reason:b.reason||"conflict",message:b.message}):l.push({agent:a,skillId:i.id,dest:f,action:"error",error:b?.message||String(b)})}}let n=[...new Set([...j.managedSkills?.[a]||[],...f.map(a=>u(a.id)).filter(Boolean)])];await ar(a,m,n,k,d,!!b.dryRun,l);let o=[...j.managedSkills?.[a]||[]],q=new Set(f.map(a=>u(a.id))),r=[];for(let c of o){if(q.has(c)){r.push(c);continue}let e=g().join(m,c);if(b.dryRun){if(!(await X(e,!0,{libraryRoot:d})).ok){r.push(c);continue}l.push({agent:a,skillId:c,dest:e,action:"would_remove"});continue}if(!(await aq(e,d)).ok){r.push(c);continue}l.push({agent:a,skillId:c,dest:e,action:"removed_stale"})}j.managedSkills&&(j.managedSkills[a]=r)}if(q)for(let[a,d]of Object.entries(n)){if(!d.supportsMcp)continue;if(c.targets[a]?.mcp===!1){m.push({agent:a,action:"skipped_disabled"});continue}let e=w(a,k);if(!e)continue;let f=j.managedMcpKeys?.[a]||[];try{let d;d="toml"===e.format?await an(e.path,i,{neverOverwriteUser:c.neverOverwriteUser,dryRun:b.dryRun,previouslyManaged:f}):await am(e.path,i,{kind:e.kind,neverOverwriteUser:c.neverOverwriteUser,dryRun:b.dryRun,previouslyManaged:f}),m.push({agent:a,...d}),d.ok&&!b.dryRun&&(j.managedMcpKeys||(j.managedMcpKeys={}),j.managedMcpKeys[a]=[...d.written||[]])}catch(b){m.push({agent:a,ok:!1,error:b?.message||String(b),path:e.path})}}b.dryRun||(j.lastSync={at:new Date().toISOString(),skillCount:f.length,mcpCount:i.length,linkMode:c.linkMode,scope:c.scope},await M(d,j));let r=l.filter(a=>"conflict"===a.action);return{ok:!0,dryRun:!!b.dryRun,libraryRoot:d,settings:{linkMode:c.linkMode,scope:c.scope,neverOverwriteUser:c.neverOverwriteUser},skills:l,mcp:m,conflictCount:r.length,summary:{skillsSynced:l.filter(a=>"synced"===a.action||"would_sync"===a.action).length,skillsConflicts:r.length,mcpOk:m.filter(a=>a.ok).length,mcpFailed:m.filter(a=>!1===a.ok).length}}}async function au(a){try{return await C(()=>av(a))}catch(a){if(a?.code==="lock_timeout")return{ok:!1,error:"lock_timeout",message:a.message};throw a}}async function av(a){let b=a||await J();try{G({...b,enabled:!0})}catch(a){if(a?.code==="project_path_missing"||a?.code==="project_path_invalid")return{ok:!1,error:a.code,message:a.message}}let c=H(b),d=await L(c),e={scope:b.scope,projectPath:b.projectPath},f=[];for(let[a,h]of Object.entries(n)){if(h.supportsSkills&&b.targets[a]?.skills!==!1){let b=v(a,e),h=d.managedSkills?.[a]||[];if(b){for(let d of h){let e=g().join(b,d),h=await aq(e,c);h.ok?f.push({agent:a,type:"skill",dest:e,action:"removed"}):f.push({agent:a,type:"skill",dest:e,action:"skipped_conflict",reason:h.reason,message:h.message})}await ar(a,b,h,e,c,!1,f),d.managedSkills&&(d.managedSkills[a]=[])}}if(h.supportsMcp&&b.targets[a]?.mcp!==!1){let b=w(a,e),c=d.managedMcpKeys?.[a]||[];b&&("toml"===b.format?await an(b.path,[],{neverOverwriteUser:!0,previouslyManaged:c}):await am(b.path,[],{kind:b.kind,neverOverwriteUser:!0,previouslyManaged:c}),f.push({agent:a,type:"mcp",path:b.path,action:"cleared_managed"})),d.managedMcpKeys&&(d.managedMcpKeys[a]=[])}}return d.lastSync={at:new Date().toISOString(),cleaned:!0},await M(c,d),{ok:!0,results:f}}async function aw(a){let b=a||D(),c=H(b);x(c);let d=await P(c),e=await _(c),f={scope:b.scope,projectPath:b.projectPath},i=[],j=[];for(let[a,k]of(j.push({id:"library",ok:!0,message:`Library at ${c} (${d.length} skills, ${e.length} MCP servers)`}),"project"!==b.scope||b.projectPath||i.push({severity:"error",code:"project_path_missing",message:"Project scope selected but no project path set"}),Object.entries(n))){if(b.targets[a]?.skills!==!1&&k.supportsSkills){let b=v(a,f);for(let e of d){let d=u(e.id);if(!b)continue;let f=g().join(b,d),l=function(a){try{let b;try{b=(0,h.lstatSync)(a)}catch{return{exists:!1}}if(b.isSymbolicLink()){let b=null,c=!1;try{b=(0,h.readlinkSync)(a);try{(0,h.realpathSync)(a)}catch{c=!0}}catch{c=!0}return{exists:!0,type:"symlink",target:b,broken:c}}if(b.isDirectory())return{exists:!0,type:"directory"};return{exists:!0,type:"other"}}catch(a){return{exists:!1,error:a?.message}}}(f);l.exists?l.broken?i.push({severity:"error",code:"skill_broken_symlink",agent:a,skillId:e.id,path:f,message:`${k.label}: ${d} is a broken symlink — re-Apply`}):(await X(f,!0,{libraryRoot:c})).ok?j.push({id:`skill:${a}:${e.id}`,ok:!0,message:`${k.label} ← ${d} (${l.type})`}):i.push({severity:"error",code:"skill_conflict",agent:a,skillId:e.id,path:f,message:`${k.label}: ${d} exists but is not Switchboard-managed`}):i.push({severity:"warn",code:"skill_not_synced",agent:a,skillId:e.id,message:`${k.label}: ${d} not present — run Apply`})}}if(b.targets[a]?.mcp!==!1&&k.supportsMcp){let b=w(a,f);if(b){let c=(0,h.existsSync)(b.path);j.push({id:`mcp-file:${a}`,ok:!0,message:`${k.label} MCP config ${c?"found":"will be created"}: ${b.path}`})}}}for(let a of e)if(a.env)for(let[b,c]of Object.entries(a.env))"string"==typeof c&&c.length>12&&!c.includes("${")&&/^(sk-|ghp_|xox|AKIA|key-)/i.test(c)&&i.push({severity:"warn",code:"possible_secret_in_library",mcpId:a.id,envKey:b,message:`MCP ${a.id} env.${b} looks like a raw secret — prefer \${ENV_VAR} references`});let k={ok:0===i.filter(a=>"error"===a.severity).length,at:new Date().toISOString(),libraryRoot:c,linkMode:b.linkMode,platform:process.platform,checks:j,issues:i};try{await C(async()=>{let a=await L(c);a.lastDoctor=k,await M(c,a)})}catch(a){if(a?.code!=="lock_timeout")throw a;k.statePersistSkipped=!0}return k}var ax=c(71553),ay=c.n(ax),az=c(77030),aA=c.n(az),aB=c(77598),aC=c.n(aB);function aD(a){return aC().createHash("sha256").update(a,"utf-8").digest("hex")}let aE=[{id:"anthropic-frontend-design",name:"frontend-design (Anthropic)",description:"Production UI aesthetics — anti AI-slop",skillId:"frontend-design",rawUrl:"https://raw.githubusercontent.com/anthropics/skills/main/skills/frontend-design/SKILL.md",trusted:!0},{id:"anthropic-skill-creator",name:"skill-creator (Anthropic)",description:"Meta-skill to author new Agent Skills",skillId:"skill-creator",rawUrl:"https://raw.githubusercontent.com/anthropics/skills/main/skills/skill-creator/SKILL.md",trusted:!0},{id:"anthropic-webapp-testing",name:"webapp-testing (Anthropic)",description:"Playwright testing for local web apps",skillId:"webapp-testing",rawUrl:"https://raw.githubusercontent.com/anthropics/skills/main/skills/webapp-testing/SKILL.md",trusted:!0}],aF=["githubusercontent.com","github.com","raw.githubusercontent.com","gitlab.com","bitbucket.org","jsdelivr.net","cdn.jsdelivr.net"];async function aG(a){let b;try{b=new URL(a)}catch{return{ok:!1,error:"invalid_url",message:"Invalid URL"}}if("https:"!==b.protocol)return{ok:!1,error:"https_required",message:"Catalog URLs must use https://"};if(b.username||b.password)return{ok:!1,error:"credentials_forbidden",message:"URLs with embedded credentials are not allowed"};let c=b.hostname.toLowerCase();if("localhost"===c||c.endsWith(".local")||c.endsWith(".internal"))return{ok:!1,error:"private_host",message:"Local/private hosts are not allowed"};if(!aF.some(a=>c===a||c.endsWith(`.${a}`)))return{ok:!1,error:"host_not_allowlisted",message:`Host not allowlisted. Allowed: ${aF.join(", ")}`};try{for(let a of(await ay().lookup(c,{all:!0})))if(function(a){if(aA().isIPv4(a)){let b=a.split(".").map(Number);return 10===b[0]||127===b[0]||0===b[0]||169===b[0]&&254===b[1]||172===b[0]&&!!(b[1]>=16)&&!!(b[1]<=31)||192===b[0]&&168===b[1]}if(aA().isIPv6(a)){let b=a.toLowerCase();return!!("::1"===b||b.startsWith("fc")||b.startsWith("fd")||b.startsWith("fe80"))}return!0}(a.address))return{ok:!1,error:"private_ip",message:`Host resolves to private IP (${a.address})`}}catch(a){return{ok:!1,error:"dns_failed",message:a?.message||"DNS lookup failed"}}return{ok:!0,url:b}}async function aH(a,b={}){let c,d=await aG(a);if(!d.ok)return d;let e={Accept:"text/plain, text/markdown, */*"};b.etag&&(e["If-None-Match"]=b.etag);try{c=await fetch(d.url.toString(),{headers:e,signal:AbortSignal.timeout(b.timeoutMs??3e4),redirect:"error"})}catch(a){return{ok:!1,error:"fetch_failed",message:a?.message||"Failed to fetch skill"}}if(304===c.status)return{ok:!0,notModified:!0};if(!c.ok)return{ok:!1,error:"http_error",message:`HTTP ${c.status} fetching skill`};if(Number(c.headers.get("content-length")||0)>524288)return{ok:!1,error:"too_large",message:"Skill exceeds 524288 byte limit"};let f=await c.text();return f.length>524288?{ok:!1,error:"too_large",message:"Skill exceeds 524288 byte limit"}:!f||f.length<20?{ok:!1,error:"empty",message:"Remote skill content empty"}:/^---[\s\S]*?name:\s*/m.test(f)||/^#\s+/m.test(f)?/<html[\s>]/i.test(f)&&!f.includes("name:")?{ok:!1,error:"not_markdown",message:"URL returned HTML, not a skill markdown file"}:{ok:!0,markdown:f,etag:c.headers.get("etag")}:{ok:!1,error:"invalid_skill",message:"Content does not look like a SKILL.md"}}async function aI(a,b){if(b.requireConfirm&&!0!==b.confirmed)return{ok:!1,error:"confirmation_required",message:"Catalog installs require explicit confirmation. Remote content can instruct agents to run shell commands — review the markdown first."};let c=t(b.skillId);if(!c)return{ok:!1,error:"invalid_id",message:"Invalid skill id"};let d=await aH(b.url);if(!d.ok)return d;if(d.notModified||!("markdown"in d))return{ok:!1,error:"fetch_failed",message:"Unexpected empty response"};let{markdown:e,etag:f}=d;return{ok:!0,...await R(a,{id:c,markdown:e,source:`url:${b.url}`,contentHash:aD(e),etag:f||null}),warning:"Skill markdown stored in the library only. It is not active on agents until you click Apply Sync. Review SKILL.md for any shell/network instructions before enabling."}}async function aJ(a){let b=await aG(a);if(!b.ok)return b;try{let a=await fetch(b.url.toString(),{headers:{Accept:"text/plain, text/markdown, */*"},signal:AbortSignal.timeout(3e4),redirect:"error"});if(!a.ok)return{ok:!1,error:`HTTP ${a.status}`};let c=await a.text();return{ok:!0,preview:c.slice(0,4e3),truncated:c.length>4e3,bytes:c.length}}catch(a){return{ok:!1,error:a?.message||"fetch failed"}}}function aK(a,b){return g().join(p(a),b)}async function aL(a,b){try{let c=await e().readFile(g().join(aK(a,b),".source.json"),"utf-8"),d=JSON.parse(c);return d&&"object"==typeof d?d:null}catch{return null}}async function aM(a,b,c){await e().writeFile(g().join(aK(a,b),".source.json"),JSON.stringify(c,null,2),"utf-8")}function aN(a){let b="string"==typeof a?.source?a.source:"";return b.startsWith("url:")?b.slice(4):null}async function aO(a,b,c){return"string"==typeof c?.contentHash&&c.contentHash?c.contentHash:aD(await e().readFile(g().join(aK(a,b),"SKILL.md"),"utf-8"))}async function aP(a){let b=[];try{b=await e().readdir(p(a))}catch{return{results:[],skipped:0}}let c=[];for(let d of b){let b=await aL(a,d),e=aN(b);e&&b&&c.push({id:d,url:e,meta:b})}let d=c.slice(0,20),f=c.length-d.length;return{results:await Promise.all(d.map(async({id:b,url:c,meta:d})=>{try{let e=await aO(a,b,d),f=await aH(c,{timeoutMs:1e4,etag:"string"==typeof d.etag?d.etag:null});if(!f.ok)return{id:b,status:"error",message:f.message};let g=new Date().toISOString();if(f.notModified)return await aM(a,b,{...d,contentHash:e,lastChecked:g}),{id:b,status:"fresh"};let h=aD(f.markdown);return await aM(a,b,{...d,contentHash:e,etag:f.etag||d.etag||null,lastChecked:g}),{id:b,status:h===e?"fresh":"update"}}catch(a){return{id:b,status:"error",message:a?.message||"check failed"}}})),skipped:f}}async function aQ(a,b){let c=t(b);if(!c)return{ok:!1,error:"invalid_id",message:"Invalid skill id"};let d=aN(await aL(a,c));if(!d)return{ok:!1,error:"not_url_source",message:"Skill was not installed from a URL"};let e=await aH(d);return e.ok?!e.notModified&&"markdown"in e?{ok:!0,markdown:e.markdown,contentHash:aD(e.markdown)}:{ok:!1,error:"fetch_failed",message:"Unexpected empty response"}:e}async function aR(a,b,c){if(c?.confirmed!==!0)return{ok:!1,error:"confirmation_required",message:"Updates require explicit confirmation. Remote content can instruct agents to run shell commands — review the markdown first."};if("string"!=typeof c.expectedHash||!/^[a-f0-9]{64}$/.test(c.expectedHash))return{ok:!1,error:"expected_hash_required",message:"Preview first — expectedHash missing"};let d=t(b);if(!d)return{ok:!1,error:"invalid_id",message:"Invalid skill id"};let e=aN(await aL(a,d));if(!e)return{ok:!1,error:"not_url_source",message:"Skill was not installed from a URL"};let f=await aH(e);if(!f.ok)return f;if(f.notModified||!("markdown"in f))return{ok:!1,error:"fetch_failed",message:"Unexpected empty response"};let g=aD(f.markdown);return g!==c.expectedHash?{ok:!1,error:"content_changed",message:"Upstream content changed since preview — preview again before updating."}:{ok:!0,...await R(a,{id:d,markdown:f.markdown,source:`url:${e}`,contentHash:g,etag:f.etag||null}),warning:"Skill updated in the library only. Run Apply Sync to push the new version to agents."}}async function aS(a,b){let c=g().resolve(b),d=g().join(c,"skills");await e().mkdir(d,{recursive:!0});let f=await P(a);for(let b of(await e().writeFile(g().join(c,".switchboard-export.json"),JSON.stringify({managedBy:"switchboard",at:new Date().toISOString()},null,2),"utf-8"),f)){let c=g().join(p(a),b.id),f=b.id.startsWith("sb-")?b.id:`sb-${b.id}`,i=g().join(d,f);if((0,h.existsSync)(i)){let a=g().join(i,".switchboard-managed.json");if(!(0,h.existsSync)(a))continue;await e().rm(i,{recursive:!0,force:!0})}await ad(c,i,a),await e().writeFile(g().join(i,".switchboard-managed.json"),JSON.stringify({managedBy:"switchboard",skillId:b.id},null,2),"utf-8")}let i=await _(a),j=["# Generated by Switchboard Agent Library — import-friendly AgentSync layout","# Run: agentsync apply (optional; Switchboard can also Apply directly)","",'source_dir = "."','default_agents = ["claude", "codex", "gemini", "cursor", "opencode"]',"","[gitignore]","enabled = true",'marker = "Switchboard / AI Agent Symlinks"',"","[mcp]","enabled = true",'merge_strategy = "merge"',""];for(let a of i.filter(a=>!1!==a.enabled)){let b=a.id.replace(/^sb-/,"");j.push(`[mcp_servers.${b}]`),a.command&&(j.push(`command = ${JSON.stringify(a.command)}`),a.args?.length&&j.push(`args = [${a.args.map(a=>JSON.stringify(a)).join(", ")}]`)),a.url&&j.push(`url = ${JSON.stringify(a.url)}`),j.push("")}return await e().writeFile(g().join(c,"agentsync.toml"),j.join("\n"),"utf-8"),await e().writeFile(g().join(c,"mcp.switchboard.json"),JSON.stringify({servers:i},null,2),"utf-8"),await e().writeFile(g().join(c,"README.switchboard.md"),`# Switchboard Agent Library export
1
+ exports.id=5920,exports.ids=[5920],exports.modules={6979:(a,b,c)=>{"use strict";c.d(b,{F:()=>f,J:()=>e});var d=c(23211);function e(a,b="Unexpected error"){return a instanceof Error&&a.message?a.message:"string"==typeof a&&a?a:b}function f(a,b){return d.NextResponse.json({error:e(b)},{status:a})}},49120:(a,b,c)=>{"use strict";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()},57781:(a,b,c)=>{"use strict";c.d(b,{R:()=>h});var d=c(51455),e=c.n(d),f=c(76760),g=c.n(f);async function h(a,b,c="utf-8"){let d=g().dirname(a);await e().mkdir(d,{recursive:!0});let f=g().join(d,`.${g().basename(a)}.sb-tmp-${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`);try{await e().writeFile(f,b,c);try{let a=await e().open(f,"r+");try{await a.sync()}finally{await a.close()}}catch{}await e().rename(f,a)}catch(a){try{await e().unlink(f)}catch{}throw a}}},78335:()=>{},79754:(a,b,c)=>{"use strict";c.d(b,{vy:()=>aE,eo:()=>aF,M1:()=>as,S7:()=>aS,nV:()=>au,il:()=>Q,Z:()=>aV,K6:()=>aW,bZ:()=>aJ,o1:()=>R,CN:()=>$,ef:()=>P,n7:()=>_,M5:()=>J,FK:()=>aT,e6:()=>aK,BM:()=>S,Ss:()=>ac,eB:()=>H,gP:()=>aM,j1:()=>aw,DZ:()=>K,C0:()=>aU,te:()=>ab});var d=c(51455),e=c.n(d),f=c(76760),g=c.n(f),h=c(73024),i=c.n(h),j=c(48161),k=c.n(j),l=c(49120);let m=".switchboard-managed.json",n={claude:{id:"claude",label:"Claude Code",supportsSkills:!0,supportsMcp:!0},codex:{id:"codex",label:"Codex CLI",supportsSkills:!0,supportsMcp:!0},opencode:{id:"opencode",label:"OpenCode",supportsSkills:!0,supportsMcp:!0},gemini:{id:"gemini",label:"Gemini CLI",supportsSkills:!0,supportsMcp:!0},cursor:{id:"cursor",label:"Cursor",supportsSkills:!0,supportsMcp:!0}};function o(a={}){if("project"===a.scope&&a.projectPath){let b=g().resolve(a.projectPath);return g().join(b,".switchboard","agent-library")}return g().join(l.nJ,"agent-library")}function p(a){return g().join(a,"skills")}function q(a){return g().join(a,"mcp","servers.json")}function r(a){return g().join(a,"settings.json")}function s(a){return g().join(a,"state.json")}function t(a){let b=String(a||"").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,80);return!b||"."===b||".."===b||b.includes("..")||!/[a-zA-Z0-9]/.test(b)?"":b}function u(a){let b=t(a);return b?b.startsWith("sb-")?b:`sb-${b}`:null}function v(a,b={}){let c=k().homedir(),d="project"===b.scope&&b.projectPath?g().resolve(b.projectPath):null;switch(a){case"claude":return d?g().join(d,".claude","skills"):g().join(c,".claude","skills");case"codex":return d?g().join(d,".agents","skills"):g().join(c,".agents","skills");case"opencode":return d?g().join(d,".opencode","skills"):g().join(c,".config","opencode","skills");case"gemini":return d?g().join(d,".gemini","skills"):g().join(c,".gemini","skills");case"cursor":return d?g().join(d,".cursor","skills"):g().join(c,".cursor","skills");default:return null}}function w(a,b={}){let c=k().homedir(),d="project"===b.scope&&b.projectPath?g().resolve(b.projectPath):null;switch(a){case"claude":if(d)return{path:g().join(d,".mcp.json"),format:"json",kind:"claude-project-mcp"};return{path:g().join(c,".claude.json"),format:"json",kind:"claude-user"};case"codex":return{path:d?g().join(d,".codex","config.toml"):g().join(c,".codex","config.toml"),format:"toml",kind:"codex"};case"opencode":return{path:d?g().join(d,"opencode.json"):g().join(c,".config","opencode","opencode.json"),format:"json",kind:"opencode"};case"gemini":return{path:d?g().join(d,".gemini","settings.json"):g().join(c,".gemini","settings.json"),format:"json",kind:"gemini"};case"cursor":return{path:d?g().join(d,".cursor","mcp.json"):g().join(c,".cursor","mcp.json"),format:"json",kind:"cursor"};default:return null}}function x(a){for(let b of[a,p(a),g().join(a,"mcp")])i().existsSync(b)||i().mkdirSync(b,{recursive:!0})}var y=c(57781);let z=Promise.resolve();function A(a){(0,h.mkdirSync)(g().dirname(a),{recursive:!0});let b=JSON.stringify({pid:process.pid,at:new Date().toISOString(),ts:Date.now()});try{let c=(0,h.openSync)(a,"wx");try{(0,h.writeFileSync)(c,b,"utf-8")}finally{(0,h.closeSync)(c)}return!0}catch(a){if(a?.code!=="EEXIST")throw a;return!1}}async function B(){let a,b=(a=o({scope:"global",projectPath:null}),g().join(a,".apply.lock")),c=Date.now()+3e4;for(;Date.now()<c;){if(A(b)||function(a){try{let b,c=(0,h.readFileSync)(a,"utf-8");try{b=JSON.parse(c)}catch{b={pid:parseInt(String(c).trim(),10),ts:0}}let d=Number(b.pid),e=Number(b.ts)||0,f=e>0&&Date.now()-e>3e5,g=!function(a){if(!a||!Number.isFinite(a)||a<=0)return!1;try{return process.kill(a,0),!0}catch{return!1}}(d);if(f||g){try{(0,h.unlinkSync)(a)}catch{}return A(a)}}catch{try{(0,h.unlinkSync)(a)}catch{}return A(a)}return!1}(b))return()=>{try{if(!(0,h.existsSync)(b))return;let a=(0,h.readFileSync)(b,"utf-8");try{JSON.parse(a).pid===process.pid&&(0,h.unlinkSync)(b)}catch{String(a).trim()===String(process.pid)&&(0,h.unlinkSync)(b)}}catch{}};await new Promise(a=>setTimeout(a,50))}let d=Error("Agent Library apply/clean is already running (lock timeout). Retry shortly.");throw d.code="lock_timeout",d}function C(a){let b,c,d=new Promise((a,d)=>{b=a,c=d});return z=z.then(async()=>{let d=await B();try{let c=await a();b(c)}catch(a){c(a)}finally{d()}}).catch(()=>{}),d}function D(){let a={};for(let b of Object.keys(n))a[b]={skills:!0,mcp:!0};return{enabled:!0,scope:"global",projectPath:null,linkMode:"win32"===process.platform?"copy":"symlink",neverOverwriteUser:!0,includeProductSkills:!0,requireCatalogConfirm:!0,targets:a}}function E(a,b){let c=a||{skills:!0,mcp:!0};return b&&"object"==typeof b?{skills:"boolean"==typeof b.skills?b.skills:!1!==c.skills,mcp:"boolean"==typeof b.mcp?b.mcp:!1!==c.mcp}:{...c}}function F(a={}){let b=D(),c={};for(let a of Object.keys(n))c[a]={...b.targets[a]||{skills:!0,mcp:!0}};if(a.targets&&"object"==typeof a.targets)for(let b of Object.keys(n)){let d=a.targets[b];d&&"object"==typeof d&&(c[b]=E(c[b],d))}let d="copy"===a.linkMode||"symlink"===a.linkMode?a.linkMode:b.linkMode,e="project"===a.scope?"project":"global",f=null;return"project"===e&&a.projectPath&&(f=String(a.projectPath).trim()||null),{enabled:!1!==a.enabled,scope:e,projectPath:f,linkMode:d,neverOverwriteUser:!1!==a.neverOverwriteUser,includeProductSkills:!1!==a.includeProductSkills,requireCatalogConfirm:!1!==a.requireCatalogConfirm,targets:c}}function G(a){if(!a.enabled){let a=Error("Agent Library sync is turned off in settings");throw a.code="disabled",a}if("project"===a.scope){let b,c=a.projectPath?String(a.projectPath).trim():"";if(!c){let a=Error("Project scope requires an absolute project path — set it before Apply");throw a.code="project_path_missing",a}if(!g().isAbsolute(c)){let a=Error("Project path must be absolute (e.g. /Users/you/my-app)");throw a.code="project_path_invalid",a}let d=g().resolve(c);if(!(0,h.existsSync)(d)){let a=Error(`Project path does not exist: ${d}`);throw a.code="project_path_missing",a}try{b=(0,h.statSync)(d)}catch{let a=Error(`Cannot access project path: ${d}`);throw a.code="project_path_invalid",a}if(!b.isDirectory()){let a=Error(`Project path is not a directory: ${d}`);throw a.code="project_path_invalid",a}}}function H(a){let b=a||D();return o({scope:b.scope,projectPath:b.projectPath})}function I(){return o({scope:"global",projectPath:null})}async function J(a){let b=I();x(b);let c=r(b),d=D();if((0,h.existsSync)(c))try{let a=await e().readFile(c,"utf-8");d=F(JSON.parse(a))}catch{d=D()}return x(H(d)),d}async function K(a,b){let c=I();x(c);let d=await J(c),e={...d.targets};if(b.targets&&"object"==typeof b.targets)for(let[a,c]of Object.entries(b.targets))n[a]&&(e[a]=E(d.targets[a],c));let f=F({...d,...b,targets:e});if(!1===b.neverOverwriteUser&&!0!==b.confirmAllowOverwrite&&(f.neverOverwriteUser=!0),!0===b.confirmAllowOverwrite&&!1===b.neverOverwriteUser&&(f.neverOverwriteUser=!1),"project"===f.scope)try{G({...f,enabled:!0})}catch(a){if(a?.code!=="project_path_missing"||b.projectPath){if(a?.code!=="disabled")throw a}else f.projectPath=null}return await (0,y.R)(r(c),JSON.stringify(f,null,2)),x(H(f)),f}async function L(a){let b=a||H(await J());x(b);let c=s(b);if(!(0,h.existsSync)(c))return{managedSkills:{},managedMcpKeys:{},lastSync:null,lastDoctor:null};try{return JSON.parse(await e().readFile(c,"utf-8"))}catch{return{managedSkills:{},managedMcpKeys:{},lastSync:null,lastDoctor:null}}}async function M(a,b){x(a),await (0,y.R)(s(a),JSON.stringify(b,null,2))}var N=c(82922);let O=[{id:"switchboard",name:"Switchboard (Entry)",description:"Setup, model discovery, combos & Auto routing. Start here — one /v1 endpoint, multi-provider gateway.",endpoint:"/v1",icon:"hub",isEntry:!0},{id:"switchboard-chat",name:"Chat",description:"Chat / code-gen via OpenAI, Anthropic, or Responses formats — streaming, tools, combo as model.",endpoint:"/v1/chat/completions",icon:"chat"}];async function P(a){x(a);let b=p(a),c=[];try{c=await e().readdir(b)}catch{return[]}let d=[];for(let a of c){let c=g().join(b,a,"SKILL.md");if(!(0,h.existsSync)(c))continue;let f="",i=a;try{let a=await e().readFile(c,"utf-8"),b=a.match(/^name:\s*(.+)$/m),d=a.match(/^description:\s*(.+)$/m);b&&(i=b[1].trim().replace(/^["']|["']$/g,"")),d&&(f=d[1].trim().replace(/^["']|["']$/g,""))}catch{}let j=await e().stat(c);d.push({id:a,title:i,description:f,path:g().join(b,a),source:"library",updatedAt:j.mtime.toISOString()})}return d.sort((a,b)=>a.id.localeCompare(b.id))}async function Q(a,b={}){x(a);let c=(0,N.XP)(),d=[];if(!c)return{ok:!1,results:d,error:"Product skills directory not found"};for(let c of O){let f=t(c.id),i=g().join(p(a),f),j=g().join(i,"SKILL.md");if((0,h.existsSync)(j)&&!b.force){d.push({id:f,action:"skipped_exists"});continue}let k=await (0,N.dr)(c.id);if(!k){d.push({id:f,action:"missing_source"});continue}await e().mkdir(i,{recursive:!0}),await e().writeFile(j,k,"utf-8"),d.push({id:f,action:"installed"})}return{ok:!0,results:d}}async function R(a,b){x(a);let c=t(b.id);if(!c)throw Error("Invalid skill id");let d=g().join(p(a),c);return await e().mkdir(d,{recursive:!0}),await e().writeFile(g().join(d,"SKILL.md"),b.markdown,"utf-8"),await e().writeFile(g().join(d,".source.json"),JSON.stringify({source:b.source||"manual",installedAt:new Date().toISOString(),...b.contentHash?{contentHash:b.contentHash}:{},...b.etag?{etag:b.etag}:{}},null,2),"utf-8"),{id:c,path:d}}async function S(a,b){let c=t(b);if(!c)throw Error("Invalid skill id");let d=g().resolve(p(a)),f=g().resolve(d,c);if(g().dirname(f)!==d)throw Error("Invalid skill path");return(0,h.existsSync)(f)?(await e().rm(f,{recursive:!0,force:!0}),{removed:!0,id:c}):{removed:!1}}function T(a){return g().join(g().dirname(a),`.sb-managed-${g().basename(a)}.json`)}async function U(a){let b=T(a);if((0,h.existsSync)(b))try{if((0,h.lstatSync)(b).isFile())return JSON.parse(await e().readFile(b,"utf-8"))}catch{}try{if(!(0,h.existsSync)(a))return null;let b=(0,h.lstatSync)(a);if(b.isSymbolicLink()||!b.isDirectory())return null;let c=g().join(a,m);if(!(0,h.existsSync)(c)||!(0,h.lstatSync)(c).isFile())return null;return JSON.parse(await e().readFile(c,"utf-8"))}catch{return null}}async function V(a,b){let c=JSON.stringify({managedBy:"switchboard",namespace:"sb",skillId:b.skillId,libraryPath:b.libraryPath,linkMode:b.linkMode,updatedAt:new Date().toISOString()},null,2),d=T(a);if(await e().mkdir(g().dirname(d),{recursive:!0}),await (0,y.R)(d,c),"copy"===b.linkMode)try{let b=(0,h.lstatSync)(a);b.isDirectory()&&!b.isSymbolicLink()&&await (0,y.R)(g().join(a,m),c)}catch{}}async function W(a){try{let b=T(a),c=(0,h.lstatSync)(b);c.isFile()&&!c.isSymbolicLink()&&await e().unlink(b)}catch{}try{let b=(0,h.lstatSync)(a);if(!b.isDirectory()||b.isSymbolicLink())return;let c=g().join(a,m),d=(0,h.lstatSync)(c);d.isFile()&&!d.isSymbolicLink()&&await e().unlink(c)}catch{}}async function X(a,b,c={}){let d=null;try{d=(0,h.lstatSync)(a)}catch{let b=await U(a);if(b?.managedBy==="switchboard")return{ok:!0,reason:"managed_sidecar_orphan",marker:b};return{ok:!0,reason:"missing"}}let e=await U(a);if(e?.managedBy==="switchboard")return{ok:!0,reason:"managed",marker:e};if(d.isSymbolicLink()&&c.libraryRoot)try{let b=(0,h.realpathSync)(a),d=g().resolve(c.libraryRoot),e=g().relative(d,b);if(e&&!e.startsWith("..")&&!g().isAbsolute(e))return{ok:!0,reason:"symlink_into_library"}}catch{return{ok:!0,reason:"broken_symlink"}}if(d.isSymbolicLink())try{(0,h.realpathSync)(a)}catch{return{ok:!0,reason:"broken_symlink"}}return b?{ok:!1,reason:"conflict_user_owned",message:"Path exists and is not Switchboard-managed. Skipping to protect your files."}:{ok:!0,reason:"overwrite_allowed",message:"User allowed overwrite of non-managed path"}}function Y(a){return"string"==typeof a&&a.startsWith("sb-")}function Z(a){let b=String(a||"").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/\./g,"-").replace(/^-+|-+$/g,"");return b&&"."!==b&&".."!==b&&/[a-zA-Z0-9]/.test(b)?b.startsWith("sb-")?b:`sb-${b}`:null}function $(a,b){let c=g().resolve(a),d=g().resolve(b),e=g().relative(d,c);return""===e||!e.startsWith("..")&&!g().isAbsolute(e)}async function _(a){x(a);let b=q(a);if(!(0,h.existsSync)(b))return[];try{let a=JSON.parse(await e().readFile(b,"utf-8"));return Array.isArray(a.servers)?a.servers:[]}catch{return[]}}async function aa(a,b){x(a);let c=q(a);await e().mkdir(g().dirname(c),{recursive:!0}),await (0,y.R)(c,JSON.stringify({version:1,updatedAt:new Date().toISOString(),note:"Switchboard Agent Library MCP catalog. Prefer ${ENV_VAR} references for secrets — never store raw API keys here if avoidable.",servers:b},null,2))}async function ab(a,b){let c=Z(b.id.replace(/^sb-/,""))||b.id;if(!c)throw Error("Invalid MCP server id");let d=b.transport||(b.url?"http":"stdio");if("stdio"===d&&!b.command)throw Error("stdio MCP server requires command");if(("http"===d||"sse"===d)&&!b.url)throw Error("http/sse MCP server requires url");let e={id:c,name:b.name||c,transport:d,command:b.command||void 0,args:Array.isArray(b.args)?b.args.map(String):void 0,env:b.env&&"object"==typeof b.env?Object.fromEntries(Object.entries(b.env).map(([a,b])=>[a,String(b)])):void 0,url:b.url||void 0,headers:b.headers&&"object"==typeof b.headers?Object.fromEntries(Object.entries(b.headers).map(([a,b])=>[a,String(b)])):void 0,enabled:!1!==b.enabled,notes:b.notes||void 0},f=await _(a),g=f.findIndex(a=>a.id===c);return g>=0?f[g]=e:f.push(e),await aa(a,f),e}async function ac(a,b){let c=Z(b.replace(/^sb-/,""))||b,d=await _(a),e=d.filter(a=>a.id!==c&&a.id!==b);return await aa(a,e),{removed:e.length<d.length}}async function ad(a,b,c){for(let d of(await e().mkdir(b,{recursive:!0}),await e().readdir(a,{withFileTypes:!0}))){let f,i=g().join(a,d.name),j=g().join(b,d.name);try{f=(0,h.lstatSync)(i)}catch{continue}if(f.isSymbolicLink()){if(!c)continue;try{let a=(0,h.realpathSync)(i),b=g().relative(g().resolve(c),a);if(b.startsWith("..")||g().isAbsolute(b))continue}catch{continue}try{let a=(0,h.realpathSync)(i);(0,h.lstatSync)(a).isDirectory()?await ad(a,j,c):await e().copyFile(a,j)}catch{}continue}f.isDirectory()?await ad(i,j,c):f.isFile()&&await e().copyFile(i,j)}}async function ae(a){let b;try{b=await e().lstat(a)}catch{return}b.isSymbolicLink()||b.isFile()?await e().unlink(a):b.isDirectory()&&await e().rm(a,{recursive:!0,force:!0})}async function af(a,b,c=!0){try{await e().lstat(a)}catch{return}let d=await X(a,!1!==c,{libraryRoot:b});if(!d.ok){let a=Error(d.message||"Path is not Switchboard-managed");throw a.code="conflict",a.reason=d.reason,a}}async function ag(a,b,c,d,f={}){await e().mkdir(g().dirname(b),{recursive:!0});let h=!1!==f.neverOverwriteUser;if("symlink"===c){await af(b,d,h);try{return await ae(b),await e().symlink(a,b,"dir"),{mode:"symlink"}}catch(c){if(c?.code==="conflict")throw c;return ah(a,b,d,c?.message,h)}}return ah(a,b,d,void 0,h)}async function ah(a,b,c,d,f=!0){let g=`${b}.sb-tmp-${process.pid}-${Date.now()}`,h=`${b}.sb-bak-${process.pid}-${Date.now()}`;try{await ae(g),await ad(a,g,c),await af(b,c,f);let i=!1;try{await e().lstat(b),i=!0}catch{i=!1}if(i){await ae(h);try{await e().rename(b,h)}catch{await ae(b)}}try{await e().rename(g,b)}catch(a){if(i)try{await e().lstat(h),await e().rename(h,b)}catch{}throw a}try{await ae(h)}catch{}return d?{mode:"copy",fallbackFrom:"symlink",warning:d||"symlink failed; used copy"}:{mode:"copy"}}catch(a){try{await ae(g)}catch{}throw a}}function ai(a){return String(a)}function aj(a){return String(a).replace(/\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g,(a,b)=>`{env:${b}}`)}function ak(a){return null!=a&&"object"==typeof a&&!Array.isArray(a)}function al(a,b){let c=a.transport||(a.url?"http":"stdio");if("codex"===b)return"stdio"===c?{command:a.command,args:a.args||[],env:a.env||{}}:{url:a.url,http_headers:a.headers||{}};if("opencode"===b)return"stdio"===c?{type:"local",command:[a.command,...a.args||[]],environment:Object.fromEntries(Object.entries(a.env||{}).map(([a,b])=>[a,aj(b)])),enabled:!0}:{type:"remote",url:a.url,headers:Object.fromEntries(Object.entries(a.headers||{}).map(([a,b])=>[a,aj(b)])),enabled:!0};if("gemini"===b)return"stdio"===c?{command:a.command,args:a.args||[],env:a.env||{}}:{url:a.url,type:"sse"===c?"sse":"http",headers:a.headers||{}};if("stdio"===c){let b={command:a.command,args:a.args||[]};return a.env&&Object.keys(a.env).length&&(b.env=Object.fromEntries(Object.entries(a.env).map(([a,b])=>[a,ai(b)]))),b}let d={url:a.url,type:"sse"===c?"sse":"http"};return a.headers&&Object.keys(a.headers).length&&(d.headers=Object.fromEntries(Object.entries(a.headers).map(([a,b])=>[a,ai(b)]))),d}async function am(a,b,c){let d=c.kind,f=new Set(c.previouslyManaged||[]),i={};if((0,h.existsSync)(a))try{i=JSON.parse(await e().readFile(a,"utf-8"))}catch{if(c.neverOverwriteUser)return{ok:!1,error:"mcp_parse_failed",message:`Cannot parse ${a}; refusing to overwrite`,path:a};i={}}let j="mcpServers";if("opencode"===d&&(j="mcp"),Object.prototype.hasOwnProperty.call(i,j)&&!ak(i[j])&&c.neverOverwriteUser)return{ok:!1,error:"mcp_shape_conflict",message:`${a}: "${j}" exists but is not a plain object; refusing to overwrite`,path:a};let k=ak(i[j])?{...i[j]}:{},l=b.filter(a=>!1!==a.enabled),m=new Set(l.map(a=>a.id)),n=[];for(let a of Object.keys(k))f.has(a)&&Y(a)&&!m.has(a)&&(delete k[a],n.push(a));let o=[],p=[];for(let a of l){let b=a.id;if(!Y(b)){p.push({key:b,reason:"not_namespaced"});continue}let e=al(a,"cursor"===d?"cursor":"gemini"===d?"gemini":"opencode"===d?"opencode":"claude"),g=Object.prototype.hasOwnProperty.call(k,b),h=f.has(b);if(g&&!h&&c.neverOverwriteUser){p.push({key:b,reason:"user_owned_or_unknown_sb_key"});continue}k[b]=e,o.push(b)}let q={...i,[j]:k};return c.dryRun||(await e().mkdir(g().dirname(a),{recursive:!0}),await (0,y.R)(a,JSON.stringify(q,null,2))),{ok:!0,path:a,written:o,removed:n,skipped:p,dryRun:!!c.dryRun}}async function an(a,b,c){let d="";(0,h.existsSync)(a)&&(d=await e().readFile(a,"utf-8"));let f=d.replace(/\n?# --- switchboard-agent-library-mcp-start ---[\s\S]*?# --- switchboard-agent-library-mcp-end ---\n?/g,"\n"),i=b.filter(a=>!1!==a.enabled&&Y(a.id));if(!i.length)return!c.dryRun&&(0,h.existsSync)(a)&&await (0,y.R)(a,f.trimEnd()+"\n"),{ok:!0,path:a,written:[],removed:c.previouslyManaged||[],dryRun:!!c.dryRun};let j=new Set(c.previouslyManaged||[]),k=[],l=[];for(let a of i){let b=RegExp(`\\[mcp_servers\\.${ao(a.id)}\\]`,"m").test(f);if(b&&!j.has(a.id)&&c.neverOverwriteUser){k.push({key:a.id,reason:"user_owned_toml_section"});continue}b&&j.has(a.id)&&(f=f.replace(RegExp(`\\n?\\[mcp_servers\\.${ao(a.id)}\\][\\s\\S]*?(?=\\n\\[|\\n*$)`,"g"),"\n")),l.push(a)}let m=["","# --- switchboard-agent-library-mcp-start ---","# Managed by Switchboard Agent Library. Do not edit this block by hand."];for(let a of l){var n,o,p;let b=al(a,"codex"),c=(n=a.id,/^[A-Za-z_][A-Za-z0-9_-]*$/.test(n)&&!n.includes(".")?n:ap(n));if(m.push(`[mcp_servers.${c}]`),b.command){if(m.push(`command = ${ap(b.command)}`),b.args?.length&&m.push(`args = ${(o=b.args,`[${o.map(a=>ap(a)).join(", ")}]`)}`),b.env&&Object.keys(b.env).length)for(let[a,d]of(m.push(`[mcp_servers.${c}.env]`),Object.entries(b.env)))m.push(`${a} = ${ap(ai(d))}`)}else if(b.url&&(m.push(`url = ${ap(b.url)}`),b.http_headers&&Object.keys(b.http_headers).length))for(let[a,d]of(m.push(`[mcp_servers.${c}.http_headers]`),Object.entries(b.http_headers))){m.push(`${(p=a,/^[A-Za-z_][A-Za-z0-9_]*$/.test(p)?p:ap(p))} = ${ap(ai(d))}`)}m.push("")}m.push("# --- switchboard-agent-library-mcp-end ---","");let q=(f.trimEnd()+"\n"+m.join("\n")).replace(/\n{3,}/g,"\n\n");return c.dryRun||(await e().mkdir(g().dirname(a),{recursive:!0}),await (0,y.R)(a,q)),{ok:!0,path:a,written:l.map(a=>a.id),removed:[],skipped:k,dryRun:!!c.dryRun}}function ao(a){return String(a).replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function ap(a){return JSON.stringify(String(a))}async function aq(a,b){let c=await X(a,!0,{libraryRoot:b});return c.ok?(await ae(a),await W(a),{ok:!0,reason:c.reason}):c}async function ar(a,b,c,d,f,h,i){for(let j of function(a,b={}){if("codex"!==a)return[];let c="project"===b.scope&&b.projectPath?g().resolve(b.projectPath):null;return[c?g().join(c,".codex","skills"):g().join(k().homedir(),".codex","skills")]}(a,d))if(j!==b)for(let b of c){let c=g().join(j,b);try{await e().lstat(c)}catch{continue}if(h){(await X(c,!0,{libraryRoot:f})).ok&&i.push({agent:a,skillId:b,dest:c,action:"would_remove_legacy"});continue}let d=await aq(c,f);i.push({agent:a,skillId:b,dest:c,action:d.ok?"removed_legacy":"skipped_legacy_conflict",...d.ok?{}:{reason:d.reason,message:d.message}})}}async function as(a,b={}){if(b.dryRun)return at(a,b);try{return await C(()=>at(a,b))}catch(a){if(a?.code==="lock_timeout")return{ok:!1,error:"lock_timeout",message:a.message};throw a}}async function at(a,b={}){let c=a||D();try{G(c)}catch(a){return{ok:!1,error:a?.code||"settings_invalid",message:a?.message||"Invalid settings"}}let d=H(c);x(d),c.includeProductSkills&&await Q(d);let f=await P(d),i=await _(d),j=await L(d),k={scope:c.scope,projectPath:c.projectPath},l=[],m=[],o=!b.mcpOnly,q=!b.skillsOnly;if(o)for(let[a,i]of Object.entries(n)){if(!i.supportsSkills)continue;if(c.targets[a]?.skills===!1){l.push({agent:a,action:"skipped_disabled"});continue}let m=v(a,k);if(!m)continue;for(let i of(b.dryRun||await e().mkdir(m,{recursive:!0}),f)){let e=u(i.id);if(!e)continue;let f=g().join(m,e),k=function(a,b){let c=t(b);return g().join(p(a),c)}(d,i.id);if(!(0,h.existsSync)(g().join(k,"SKILL.md"))){l.push({agent:a,skillId:i.id,action:"missing_source"});continue}let n=await X(f,c.neverOverwriteUser,{libraryRoot:d});if(!n.ok){l.push({agent:a,skillId:i.id,dest:f,action:"conflict",reason:n.reason,message:n.message});continue}if(b.dryRun){l.push({agent:a,skillId:i.id,dest:f,action:"would_sync",linkMode:c.linkMode});continue}try{let b=await ag(k,f,c.linkMode,d,{neverOverwriteUser:c.neverOverwriteUser});await V(f,{skillId:i.id,libraryPath:k,linkMode:b.mode}),l.push({agent:a,skillId:i.id,dest:f,action:"synced",...b}),j.managedSkills||(j.managedSkills={}),j.managedSkills[a]||(j.managedSkills[a]=[]),j.managedSkills[a].includes(e)||j.managedSkills[a].push(e)}catch(b){b?.code==="conflict"?l.push({agent:a,skillId:i.id,dest:f,action:"conflict",reason:b.reason||"conflict",message:b.message}):l.push({agent:a,skillId:i.id,dest:f,action:"error",error:b?.message||String(b)})}}let n=[...new Set([...j.managedSkills?.[a]||[],...f.map(a=>u(a.id)).filter(Boolean)])];await ar(a,m,n,k,d,!!b.dryRun,l);let o=[...j.managedSkills?.[a]||[]],q=new Set(f.map(a=>u(a.id))),r=[];for(let c of o){if(q.has(c)){r.push(c);continue}let e=g().join(m,c);if(b.dryRun){if(!(await X(e,!0,{libraryRoot:d})).ok){r.push(c);continue}l.push({agent:a,skillId:c,dest:e,action:"would_remove"});continue}if(!(await aq(e,d)).ok){r.push(c);continue}l.push({agent:a,skillId:c,dest:e,action:"removed_stale"})}j.managedSkills&&(j.managedSkills[a]=r)}if(q)for(let[a,d]of Object.entries(n)){if(!d.supportsMcp)continue;if(c.targets[a]?.mcp===!1){m.push({agent:a,action:"skipped_disabled"});continue}let e=w(a,k);if(!e)continue;let f=j.managedMcpKeys?.[a]||[];try{let d;d="toml"===e.format?await an(e.path,i,{neverOverwriteUser:c.neverOverwriteUser,dryRun:b.dryRun,previouslyManaged:f}):await am(e.path,i,{kind:e.kind,neverOverwriteUser:c.neverOverwriteUser,dryRun:b.dryRun,previouslyManaged:f}),m.push({agent:a,...d}),d.ok&&!b.dryRun&&(j.managedMcpKeys||(j.managedMcpKeys={}),j.managedMcpKeys[a]=[...d.written||[]])}catch(b){m.push({agent:a,ok:!1,error:b?.message||String(b),path:e.path})}}b.dryRun||(j.lastSync={at:new Date().toISOString(),skillCount:f.length,mcpCount:i.length,linkMode:c.linkMode,scope:c.scope},await M(d,j));let r=l.filter(a=>"conflict"===a.action);return{ok:!0,dryRun:!!b.dryRun,libraryRoot:d,settings:{linkMode:c.linkMode,scope:c.scope,neverOverwriteUser:c.neverOverwriteUser},skills:l,mcp:m,conflictCount:r.length,summary:{skillsSynced:l.filter(a=>"synced"===a.action||"would_sync"===a.action).length,skillsConflicts:r.length,mcpOk:m.filter(a=>a.ok).length,mcpFailed:m.filter(a=>!1===a.ok).length}}}async function au(a){try{return await C(()=>av(a))}catch(a){if(a?.code==="lock_timeout")return{ok:!1,error:"lock_timeout",message:a.message};throw a}}async function av(a){let b=a||await J();try{G({...b,enabled:!0})}catch(a){if(a?.code==="project_path_missing"||a?.code==="project_path_invalid")return{ok:!1,error:a.code,message:a.message}}let c=H(b),d=await L(c),e={scope:b.scope,projectPath:b.projectPath},f=[];for(let[a,h]of Object.entries(n)){if(h.supportsSkills&&b.targets[a]?.skills!==!1){let b=v(a,e),h=d.managedSkills?.[a]||[];if(b){for(let d of h){let e=g().join(b,d),h=await aq(e,c);h.ok?f.push({agent:a,type:"skill",dest:e,action:"removed"}):f.push({agent:a,type:"skill",dest:e,action:"skipped_conflict",reason:h.reason,message:h.message})}await ar(a,b,h,e,c,!1,f),d.managedSkills&&(d.managedSkills[a]=[])}}if(h.supportsMcp&&b.targets[a]?.mcp!==!1){let b=w(a,e),c=d.managedMcpKeys?.[a]||[];b&&("toml"===b.format?await an(b.path,[],{neverOverwriteUser:!0,previouslyManaged:c}):await am(b.path,[],{kind:b.kind,neverOverwriteUser:!0,previouslyManaged:c}),f.push({agent:a,type:"mcp",path:b.path,action:"cleared_managed"})),d.managedMcpKeys&&(d.managedMcpKeys[a]=[])}}return d.lastSync={at:new Date().toISOString(),cleaned:!0},await M(c,d),{ok:!0,results:f}}async function aw(a){let b=a||D(),c=H(b);x(c);let d=await P(c),e=await _(c),f={scope:b.scope,projectPath:b.projectPath},i=[],j=[];for(let[a,k]of(j.push({id:"library",ok:!0,message:`Library at ${c} (${d.length} skills, ${e.length} MCP servers)`}),"project"!==b.scope||b.projectPath||i.push({severity:"error",code:"project_path_missing",message:"Project scope selected but no project path set"}),Object.entries(n))){if(b.targets[a]?.skills!==!1&&k.supportsSkills){let b=v(a,f);for(let e of d){let d=u(e.id);if(!b)continue;let f=g().join(b,d),l=function(a){try{let b;try{b=(0,h.lstatSync)(a)}catch{return{exists:!1}}if(b.isSymbolicLink()){let b=null,c=!1;try{b=(0,h.readlinkSync)(a);try{(0,h.realpathSync)(a)}catch{c=!0}}catch{c=!0}return{exists:!0,type:"symlink",target:b,broken:c}}if(b.isDirectory())return{exists:!0,type:"directory"};return{exists:!0,type:"other"}}catch(a){return{exists:!1,error:a?.message}}}(f);l.exists?l.broken?i.push({severity:"error",code:"skill_broken_symlink",agent:a,skillId:e.id,path:f,message:`${k.label}: ${d} is a broken symlink — re-Apply`}):(await X(f,!0,{libraryRoot:c})).ok?j.push({id:`skill:${a}:${e.id}`,ok:!0,message:`${k.label} ← ${d} (${l.type})`}):i.push({severity:"error",code:"skill_conflict",agent:a,skillId:e.id,path:f,message:`${k.label}: ${d} exists but is not Switchboard-managed`}):i.push({severity:"warn",code:"skill_not_synced",agent:a,skillId:e.id,message:`${k.label}: ${d} not present — run Apply`})}}if(b.targets[a]?.mcp!==!1&&k.supportsMcp){let b=w(a,f);if(b){let c=(0,h.existsSync)(b.path);j.push({id:`mcp-file:${a}`,ok:!0,message:`${k.label} MCP config ${c?"found":"will be created"}: ${b.path}`})}}}for(let a of e)if(a.env)for(let[b,c]of Object.entries(a.env))"string"==typeof c&&c.length>12&&!c.includes("${")&&/^(sk-|ghp_|xox|AKIA|key-)/i.test(c)&&i.push({severity:"warn",code:"possible_secret_in_library",mcpId:a.id,envKey:b,message:`MCP ${a.id} env.${b} looks like a raw secret — prefer \${ENV_VAR} references`});let k={ok:0===i.filter(a=>"error"===a.severity).length,at:new Date().toISOString(),libraryRoot:c,linkMode:b.linkMode,platform:process.platform,checks:j,issues:i};try{await C(async()=>{let a=await L(c);a.lastDoctor=k,await M(c,a)})}catch(a){if(a?.code!=="lock_timeout")throw a;k.statePersistSkipped=!0}return k}var ax=c(71553),ay=c.n(ax),az=c(77030),aA=c.n(az),aB=c(77598),aC=c.n(aB);function aD(a){return aC().createHash("sha256").update(a,"utf-8").digest("hex")}let aE=[{id:"anthropic-frontend-design",name:"frontend-design (Anthropic)",description:"Production UI aesthetics — anti AI-slop",skillId:"frontend-design",rawUrl:"https://raw.githubusercontent.com/anthropics/skills/main/skills/frontend-design/SKILL.md",trusted:!0},{id:"anthropic-skill-creator",name:"skill-creator (Anthropic)",description:"Meta-skill to author new Agent Skills",skillId:"skill-creator",rawUrl:"https://raw.githubusercontent.com/anthropics/skills/main/skills/skill-creator/SKILL.md",trusted:!0},{id:"anthropic-webapp-testing",name:"webapp-testing (Anthropic)",description:"Playwright testing for local web apps",skillId:"webapp-testing",rawUrl:"https://raw.githubusercontent.com/anthropics/skills/main/skills/webapp-testing/SKILL.md",trusted:!0}],aF=[{id:"executor",name:"Executor.sh (Tool Gateway)",description:"Unified MCP tool gateway for OpenAPI, GraphQL, MCP servers & sandboxed JavaScript functions (executor.sh)",transport:"stdio",command:"npx",args:["-y","executor","mcp"],notes:"Executor.sh tool execution gateway (https://executor.sh)",docsUrl:"https://executor.sh",featured:!0},{id:"filesystem",name:"Filesystem MCP",description:"Official Model Context Protocol local filesystem access server",transport:"stdio",command:"npx",args:["-y","@modelcontextprotocol/server-filesystem","."],notes:"Local workspace filesystem provider",docsUrl:"https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem"},{id:"github",name:"GitHub MCP",description:"GitHub issues, pull requests, commits, and repository operations",transport:"stdio",command:"npx",args:["-y","@modelcontextprotocol/server-github"],env:{GITHUB_PERSONAL_ACCESS_TOKEN:"${GITHUB_TOKEN}"},notes:"Requires GITHUB_TOKEN environment variable",docsUrl:"https://github.com/modelcontextprotocol/servers/tree/main/src/github"},{id:"fetch",name:"Fetch MCP",description:"Web content fetching and HTML to markdown converter",transport:"stdio",command:"npx",args:["-y","@modelcontextprotocol/server-fetch"],notes:"Web page extraction provider",docsUrl:"https://github.com/modelcontextprotocol/servers/tree/main/src/fetch"}],aG=["githubusercontent.com","github.com","raw.githubusercontent.com","gitlab.com","bitbucket.org","jsdelivr.net","cdn.jsdelivr.net"];async function aH(a){let b;try{b=new URL(a)}catch{return{ok:!1,error:"invalid_url",message:"Invalid URL"}}if("https:"!==b.protocol)return{ok:!1,error:"https_required",message:"Catalog URLs must use https://"};if(b.username||b.password)return{ok:!1,error:"credentials_forbidden",message:"URLs with embedded credentials are not allowed"};let c=b.hostname.toLowerCase();if("localhost"===c||c.endsWith(".local")||c.endsWith(".internal"))return{ok:!1,error:"private_host",message:"Local/private hosts are not allowed"};if(!aG.some(a=>c===a||c.endsWith(`.${a}`)))return{ok:!1,error:"host_not_allowlisted",message:`Host not allowlisted. Allowed: ${aG.join(", ")}`};try{for(let a of(await ay().lookup(c,{all:!0})))if(function(a){if(aA().isIPv4(a)){let b=a.split(".").map(Number);return 10===b[0]||127===b[0]||0===b[0]||169===b[0]&&254===b[1]||172===b[0]&&!!(b[1]>=16)&&!!(b[1]<=31)||192===b[0]&&168===b[1]}if(aA().isIPv6(a)){let b=a.toLowerCase();return!!("::1"===b||b.startsWith("fc")||b.startsWith("fd")||b.startsWith("fe80"))}return!0}(a.address))return{ok:!1,error:"private_ip",message:`Host resolves to private IP (${a.address})`}}catch(a){return{ok:!1,error:"dns_failed",message:a?.message||"DNS lookup failed"}}return{ok:!0,url:b}}async function aI(a,b={}){let c,d=await aH(a);if(!d.ok)return d;let e={Accept:"text/plain, text/markdown, */*"};b.etag&&(e["If-None-Match"]=b.etag);try{c=await fetch(d.url.toString(),{headers:e,signal:AbortSignal.timeout(b.timeoutMs??3e4),redirect:"error"})}catch(a){return{ok:!1,error:"fetch_failed",message:a?.message||"Failed to fetch skill"}}if(304===c.status)return{ok:!0,notModified:!0};if(!c.ok)return{ok:!1,error:"http_error",message:`HTTP ${c.status} fetching skill`};if(Number(c.headers.get("content-length")||0)>524288)return{ok:!1,error:"too_large",message:"Skill exceeds 524288 byte limit"};let f=await c.text();return f.length>524288?{ok:!1,error:"too_large",message:"Skill exceeds 524288 byte limit"}:!f||f.length<20?{ok:!1,error:"empty",message:"Remote skill content empty"}:/^---[\s\S]*?name:\s*/m.test(f)||/^#\s+/m.test(f)?/<html[\s>]/i.test(f)&&!f.includes("name:")?{ok:!1,error:"not_markdown",message:"URL returned HTML, not a skill markdown file"}:{ok:!0,markdown:f,etag:c.headers.get("etag")}:{ok:!1,error:"invalid_skill",message:"Content does not look like a SKILL.md"}}async function aJ(a,b){if(b.requireConfirm&&!0!==b.confirmed)return{ok:!1,error:"confirmation_required",message:"Catalog installs require explicit confirmation. Remote content can instruct agents to run shell commands — review the markdown first."};let c=t(b.skillId);if(!c)return{ok:!1,error:"invalid_id",message:"Invalid skill id"};let d=await aI(b.url);if(!d.ok)return d;if(d.notModified||!("markdown"in d))return{ok:!1,error:"fetch_failed",message:"Unexpected empty response"};let{markdown:e,etag:f}=d;return{ok:!0,...await R(a,{id:c,markdown:e,source:`url:${b.url}`,contentHash:aD(e),etag:f||null}),warning:"Skill markdown stored in the library only. It is not active on agents until you click Apply Sync. Review SKILL.md for any shell/network instructions before enabling."}}async function aK(a){let b=await aH(a);if(!b.ok)return b;try{let a=await fetch(b.url.toString(),{headers:{Accept:"text/plain, text/markdown, */*"},signal:AbortSignal.timeout(3e4),redirect:"error"});if(!a.ok)return{ok:!1,error:`HTTP ${a.status}`};let c=await a.text();return{ok:!0,preview:c.slice(0,4e3),truncated:c.length>4e3,bytes:c.length}}catch(a){return{ok:!1,error:a?.message||"fetch failed"}}}async function aL(a,b,c="main",d,e={}){let f=`${a}/${b}`,g=e.timeoutMs??15e3,h=[];async function i(c){let d=`https://api.github.com/repos/${a}/${b}/git/trees/${c}?recursive=1`,e=await aH(d);if(!e.ok)return null;try{let a=await fetch(e.url.toString(),{headers:{Accept:"application/vnd.github.v3+json","User-Agent":"Switchboard-Agent-Library/1.0"},signal:AbortSignal.timeout(g),redirect:"error"});if(!a.ok)return null;let b=await a.json();if(!b||!Array.isArray(b.tree))return null;return b.tree}catch{return null}}let j=c,k=await i(j);if(!k&&"main"===c){let a=await i("master");a&&(k=a,j="master")}if(k&&k.length>0)for(let c of k){if("blob"!==c.type)continue;let e=c.path;if("SKILL.md"!==e&&!e.endsWith("/SKILL.md")||d&&!e.startsWith(d))continue;let f=b;if("SKILL.md"===e)f=b;else{let a=e.split("/").filter(Boolean);f=a.length>1?a[a.length-2]:b}let g=t(f)||"skill",i=`https://raw.githubusercontent.com/${a}/${b}/${j}/${e}`;h.push({skillId:g,path:e,rawUrl:i})}if(0===h.length)for(let c of[{path:"SKILL.md",skillId:b},{path:`skills/${b}/SKILL.md`,skillId:b},...d?[{path:`${d.replace(/\/+$/,"")}/SKILL.md`,skillId:d.split("/").pop()||b}]:[],{path:"skills/ego-browser/SKILL.md",skillId:"ego-browser"},{path:`.claude/skills/${b}/SKILL.md`,skillId:b},{path:`.agents/skills/${b}/SKILL.md`,skillId:b}]){let d=`https://raw.githubusercontent.com/${a}/${b}/${j}/${c.path}`,e=await aI(d,{timeoutMs:5e3});if(e.ok&&"markdown"in e){let a=c.skillId,b="",f=e.markdown.match(/^name:\s*(.+)$/m),g=e.markdown.match(/^description:\s*(.+)$/m);f&&(a=f[1].trim().replace(/^["']|["']$/g,"")),g&&(b=g[1].trim().replace(/^["']|["']$/g,""));let i=t(f?f[1]:c.skillId)||c.skillId;h.push({skillId:i,path:c.path,rawUrl:d,title:a,description:b,preview:e.markdown.slice(0,4e3),bytes:e.markdown.length});break}}if(0===h.length)return{ok:!1,error:"no_skills_found",message:`No SKILL.md found in ${f} (branch: ${j})`};if(1===h.length&&!h[0].preview){let a=await aI(h[0].rawUrl,{timeoutMs:g});if(a.ok&&"markdown"in a){let b=a.markdown,c=b.match(/^name:\s*(.+)$/m),d=b.match(/^description:\s*(.+)$/m);c&&(h[0].title=c[1].trim().replace(/^["']|["']$/g,""),h[0].skillId=t(c[1])||h[0].skillId),d&&(h[0].description=d[1].trim().replace(/^["']|["']$/g,"")),h[0].preview=b.slice(0,4e3),h[0].bytes=b.length}}return{ok:!0,type:1===h.length?"single":"multiple",repo:f,branch:j,skills:h}}async function aM(a,b={}){let c=function(a){let b=String(a||"").trim();if(!b)return{type:"invalid",error:"Empty input"};if(!(b=(b=(b=(b=(b=b.replace(/^["'`]|["'`]$/g,"").trim()).replace(/^(?:npx\s+)?(?:skills|switchboard|agentsync|agent-library)\s+(?:add|install)\s+/i,"")).replace(/^(?:add|install)\s+/i,"")).split(/\s+/).filter(a=>!/^-(?:g|y|p|d|f|v)$|^--(?:global|yes|project|confirm|dry-run|force|verbose)$/i.test(a)).join(" ").trim()).replace(/^["'`]|["'`]$/g,"").trim()))return{type:"invalid",error:"Empty skill target"};if(/^https?:\/\//i.test(b)){let a;try{a=new URL(b)}catch{return{type:"invalid",error:"Invalid URL"}}let c=a.hostname.toLowerCase(),d=a.pathname.replace(/^\/+|\/+$/g,"").split("/").filter(Boolean);if("raw.githubusercontent.com"===c||c.endsWith(".githubusercontent.com")){if(d.length>=3){d[0];let a=d[1];d[2];let c=d.slice(3).join("/"),e="";if(c.endsWith("SKILL.md")){let b=c.split("/").filter(Boolean);e=b.length>1?b[b.length-2]:a}else e=a;return{type:"direct_url",url:b,suggestedId:t(e)||"skill"}}return{type:"direct_url",url:b}}if(("github.com"===c||"www.github.com"===c)&&d.length>=2){let a=d[0],b=d[1].replace(/\.git$/i,"");if("blob"===d[2]&&d.length>=4){let c=d[3],e=d.slice(4).join("/"),f=`https://raw.githubusercontent.com/${a}/${b}/${c}/${e}`,g=b;if(e.endsWith("SKILL.md")){let a=e.split("/").filter(Boolean);g=a.length>1?a[a.length-2]:b}return{type:"direct_url",url:f,suggestedId:t(g)||"skill"}}return"tree"===d[2]&&d.length>=4?{type:"github_repo",owner:a,repo:b,branch:d[3]||"main",subpath:d.slice(4).join("/")||void 0}:{type:"github_repo",owner:a,repo:b,branch:"main"}}let e="skill";if(d.length>0){let a=d[d.length-1];e="skill.md"===a.toLowerCase()&&d.length>1?d[d.length-2]:a.replace(/\.[^.]+$/,"")}return{type:"direct_url",url:b,suggestedId:t(e)||"skill"}}let c=(b=b.replace(/^(?:github:|github\.com\/)/i,"").trim()).match(/^([a-zA-Z0-9_.-]+)\/([a-zA-Z0-9_.-]+)(?:@([a-zA-Z0-9_.-]+))?(?:\/(.*))?$/);if(c){let a=c[1],b=c[2].replace(/\.git$/i,"");return{type:"github_repo",owner:a,repo:b,branch:c[3]||"main",subpath:c[4]||void 0}}return{type:"invalid",error:`Unrecognized skill format: "${a}"`}}(a);if("invalid"===c.type||!c)return{ok:!1,error:"invalid_input",message:c.error||"Invalid skill input"};if("direct_url"===c.type&&c.url){let a=await aI(c.url,b);if(!a.ok)return{ok:!1,error:a.error,message:a.message};if(a.notModified||!("markdown"in a))return{ok:!1,error:"empty_content",message:"Empty skill content"};let{markdown:d}=a,e=c.suggestedId||"skill",f="",g=d.match(/^name:\s*(.+)$/m),h=d.match(/^description:\s*(.+)$/m);return g&&(e=g[1].trim().replace(/^["']|["']$/g,"")),h&&(f=h[1].trim().replace(/^["']|["']$/g,"")),{ok:!0,type:"single",skills:[{skillId:t(g?g[1]:c.suggestedId)||"skill",title:e,description:f,rawUrl:c.url,preview:d.slice(0,4e3),bytes:d.length}]}}return"github_repo"===c.type&&c.owner&&c.repo?aL(c.owner,c.repo,c.branch||"main",c.subpath,b):{ok:!1,error:"unsupported",message:"Unsupported skill format"}}function aN(a,b){return g().join(p(a),b)}async function aO(a,b){try{let c=await e().readFile(g().join(aN(a,b),".source.json"),"utf-8"),d=JSON.parse(c);return d&&"object"==typeof d?d:null}catch{return null}}async function aP(a,b,c){await e().writeFile(g().join(aN(a,b),".source.json"),JSON.stringify(c,null,2),"utf-8")}function aQ(a){let b="string"==typeof a?.source?a.source:"";return b.startsWith("url:")?b.slice(4):null}async function aR(a,b,c){return"string"==typeof c?.contentHash&&c.contentHash?c.contentHash:aD(await e().readFile(g().join(aN(a,b),"SKILL.md"),"utf-8"))}async function aS(a){let b=[];try{b=await e().readdir(p(a))}catch{return{results:[],skipped:0}}let c=[];for(let d of b){let b=await aO(a,d),e=aQ(b);e&&b&&c.push({id:d,url:e,meta:b})}let d=c.slice(0,20),f=c.length-d.length;return{results:await Promise.all(d.map(async({id:b,url:c,meta:d})=>{try{let e=await aR(a,b,d),f=await aI(c,{timeoutMs:1e4,etag:"string"==typeof d.etag?d.etag:null});if(!f.ok)return{id:b,status:"error",message:f.message};let g=new Date().toISOString();if(f.notModified)return await aP(a,b,{...d,contentHash:e,lastChecked:g}),{id:b,status:"fresh"};let h=aD(f.markdown);return await aP(a,b,{...d,contentHash:e,etag:f.etag||d.etag||null,lastChecked:g}),{id:b,status:h===e?"fresh":"update"}}catch(a){return{id:b,status:"error",message:a?.message||"check failed"}}})),skipped:f}}async function aT(a,b){let c=t(b);if(!c)return{ok:!1,error:"invalid_id",message:"Invalid skill id"};let d=aQ(await aO(a,c));if(!d)return{ok:!1,error:"not_url_source",message:"Skill was not installed from a URL"};let e=await aI(d);return e.ok?!e.notModified&&"markdown"in e?{ok:!0,markdown:e.markdown,contentHash:aD(e.markdown)}:{ok:!1,error:"fetch_failed",message:"Unexpected empty response"}:e}async function aU(a,b,c){if(c?.confirmed!==!0)return{ok:!1,error:"confirmation_required",message:"Updates require explicit confirmation. Remote content can instruct agents to run shell commands — review the markdown first."};if("string"!=typeof c.expectedHash||!/^[a-f0-9]{64}$/.test(c.expectedHash))return{ok:!1,error:"expected_hash_required",message:"Preview first — expectedHash missing"};let d=t(b);if(!d)return{ok:!1,error:"invalid_id",message:"Invalid skill id"};let e=aQ(await aO(a,d));if(!e)return{ok:!1,error:"not_url_source",message:"Skill was not installed from a URL"};let f=await aI(e);if(!f.ok)return f;if(f.notModified||!("markdown"in f))return{ok:!1,error:"fetch_failed",message:"Unexpected empty response"};let g=aD(f.markdown);return g!==c.expectedHash?{ok:!1,error:"content_changed",message:"Upstream content changed since preview — preview again before updating."}:{ok:!0,...await R(a,{id:d,markdown:f.markdown,source:`url:${e}`,contentHash:g,etag:f.etag||null}),warning:"Skill updated in the library only. Run Apply Sync to push the new version to agents."}}async function aV(a,b){let c=g().resolve(b),d=g().join(c,"skills");await e().mkdir(d,{recursive:!0});let f=await P(a);for(let b of(await e().writeFile(g().join(c,".switchboard-export.json"),JSON.stringify({managedBy:"switchboard",at:new Date().toISOString()},null,2),"utf-8"),f)){let c=g().join(p(a),b.id),f=b.id.startsWith("sb-")?b.id:`sb-${b.id}`,i=g().join(d,f);if((0,h.existsSync)(i)){let a=g().join(i,".switchboard-managed.json");if(!(0,h.existsSync)(a))continue;await e().rm(i,{recursive:!0,force:!0})}await ad(c,i,a),await e().writeFile(g().join(i,".switchboard-managed.json"),JSON.stringify({managedBy:"switchboard",skillId:b.id},null,2),"utf-8")}let i=await _(a),j=["# Generated by Switchboard Agent Library — import-friendly AgentSync layout","# Run: agentsync apply (optional; Switchboard can also Apply directly)","",'source_dir = "."','default_agents = ["claude", "codex", "gemini", "cursor", "opencode"]',"","[gitignore]","enabled = true",'marker = "Switchboard / AI Agent Symlinks"',"","[mcp]","enabled = true",'merge_strategy = "merge"',""];for(let a of i.filter(a=>!1!==a.enabled)){let b=a.id.replace(/^sb-/,"");j.push(`[mcp_servers.${b}]`),a.command&&(j.push(`command = ${JSON.stringify(a.command)}`),a.args?.length&&j.push(`args = [${a.args.map(a=>JSON.stringify(a)).join(", ")}]`)),a.url&&j.push(`url = ${JSON.stringify(a.url)}`),j.push("")}return await e().writeFile(g().join(c,"agentsync.toml"),j.join("\n"),"utf-8"),await e().writeFile(g().join(c,"mcp.switchboard.json"),JSON.stringify({servers:i},null,2),"utf-8"),await e().writeFile(g().join(c,"README.switchboard.md"),`# Switchboard Agent Library export
2
2
 
3
3
  Exported from Switchboard Agent Library.
4
4
 
@@ -14,4 +14,4 @@ un-namespaced skill folder.
14
14
 
15
15
  ## Apply without AgentSync
16
16
  Use **Dashboard → Agent library → Apply sync** instead.
17
- `,"utf-8"),{ok:!0,path:c,skills:f.map(a=>a.id),mcpCount:i.length}}async function aT(a){let b=a||await J(),c=H(b);x(c),b.includeProductSkills&&await Q(c);let[d,e,f]=await Promise.all([P(c),_(c),L(c)]);return{settings:b,libraryRoot:c,skills:d,mcpServers:e,state:f,agents:n}}},82922:(a,b,c)=>{"use strict";c.d(b,{Ik:()=>l,XP:()=>j,dr:()=>k});var d=c(79748),e=c.n(d),f=c(33873),g=c.n(f),h=c(29021);let i=/^[a-z0-9][a-z0-9_-]*$/i;function j(){for(let a of[g().join(process.cwd(),"skills"),g().join(process.cwd(),"..","skills"),g().join(process.cwd(),"..","..","skills")])if((0,h.existsSync)(a))return a;return null}async function k(a){let b=function(a){if(!a||"string"!=typeof a||!i.test(a))return null;let b=j();if(!b)return null;let c=g().join(b,a,"SKILL.md"),d=g().resolve(c);return d.startsWith(g().resolve(b)+g().sep)?d:null}(a);if(!b)return null;try{return await e().readFile(b,"utf-8")}catch(a){if(a&&"ENOENT"===a.code)return null;throw a}}function l(a,b){let c=String(b||"").replace(/\/+$/,"");return c?String(a).replace(/(?:https?:\/\/[^\s)"']+\/)?skills\/([a-z0-9][a-z0-9_-]*)\/SKILL\.md/gi,`${c}/api/skills/$1`):a}},96487:()=>{}};
17
+ `,"utf-8"),{ok:!0,path:c,skills:f.map(a=>a.id),mcpCount:i.length}}async function aW(a){let b=a||await J(),c=H(b);x(c),b.includeProductSkills&&await Q(c);let[d,e,f]=await Promise.all([P(c),_(c),L(c)]);return{settings:b,libraryRoot:c,skills:d,mcpServers:e,state:f,agents:n}}},82922:(a,b,c)=>{"use strict";c.d(b,{Ik:()=>l,XP:()=>j,dr:()=>k});var d=c(79748),e=c.n(d),f=c(33873),g=c.n(f),h=c(29021);let i=/^[a-z0-9][a-z0-9_-]*$/i;function j(){for(let a of[g().join(process.cwd(),"skills"),g().join(process.cwd(),"..","skills"),g().join(process.cwd(),"..","..","skills")])if((0,h.existsSync)(a))return a;return null}async function k(a){let b=function(a){if(!a||"string"!=typeof a||!i.test(a))return null;let b=j();if(!b)return null;let c=g().join(b,a,"SKILL.md"),d=g().resolve(c);return d.startsWith(g().resolve(b)+g().sep)?d:null}(a);if(!b)return null;try{return await e().readFile(b,"utf-8")}catch(a){if(a&&"ENOENT"===a.code)return null;throw a}}function l(a,b){let c=String(b||"").replace(/\/+$/,"");return c?String(a).replace(/(?:https?:\/\/[^\s)"']+\/)?skills\/([a-z0-9][a-z0-9_-]*)\/SKILL\.md/gi,`${c}/api/skills/$1`):a}},96487:()=>{}};
@@ -1 +1 @@
1
- "use strict";exports.id=6985,exports.ids=[6985],exports.modules={16655:(a,b,c)=>{c.d(b,{oF:()=>d.oF,tm:()=>d.tm,vF:()=>d.vF});var d=c(15717)},19225:(a,b,c)=>{a.exports=c(44870)},32524:(a,b,c)=>{c.d(b,{HL:()=>i,pD:()=>h,u0:()=>j});let d=Object.freeze({"lite-llm":"llm",litellm:"llm"}),e=["opus","sonnet","haiku","fable","gemini","gpt","glm","deepseek","composer","kimi","qwen"],f=[{pattern:/ap-southeast|low-carbon-apac|\bapac\b/i,tag:"apac"},{pattern:/eu-west|europe|\beu\b/i,tag:"eu"},{pattern:/us-east|us-west|\bus\b/i,tag:"us"}],g=["bedrock","vertex","azure","openai"];function h(a){var b;let c,h,i,j,k,l,m,n=String(a||"").trim();if(!n)return"";let o=n.indexOf("/");if(o<0)return n;let p=d[c=String(n.slice(0,o)||"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").replace(/-+/g,"-")]||c.slice(0,10),q=n.slice(o+1).split("/").filter(Boolean),r=(h=q.join("/").toLowerCase(),i=e.find(a=>h.includes(a))||null,j=f.find(a=>a.pattern.test(h))?.tag||null,k=g.find(a=>h.includes(a))||null,l=h.match(/\b(\d+m)\b/i)?.[1]?.toLowerCase()||null,m=(b=i?h.match(RegExp(`${i}[-._]?(\\d+(?:[._-]\\d+)*)`,"i"))?.[1]:null)?b.replace(/[._-]/g,"."):null,{family:i,region:j,infra:k,variant:l,version:m}),s=[p];if(r.region&&s.push(r.region),r.infra&&s.push(r.infra),r.family){let a=r.variant?`${r.family} ${r.variant}`:r.version?`${r.family} ${r.version}`:r.family;s.push(a)}else if(q.length>0){let a=q[q.length-1].replace(/^anthropic\./i,"").replace(/[._]/g," ").trim();a&&s.push(a.slice(0,24))}return s.join(" | ")}function i(a){let b=a.map(a=>String(a||"").trim()).filter(Boolean).map(a=>({modelId:a,base:h(a)})),c=new Map;for(let a of b){let b=c.get(a.base)||[];b.push(a.modelId),c.set(a.base,b)}let d=new Map;for(let[a,b]of c.entries()){if(1===b.length){d.set(b[0],a);continue}let c=new Set;b.forEach((b,e)=>{let f=`${a} | ${function(a,b){let c=String(a||"").split("/").filter(Boolean);return c.length>=3?c[1].replace(/[._-]/g," ").trim().slice(0,20):2===c.length?c[1].replace(/^anthropic\./i,"").replace(/[._-]/g," ").trim().slice(0,20):(c[c.length-1]||`model-${b+1}`).replace(/^anthropic\./i,"").replace(/[._-]/g," ").trim().slice(0,20)||String(b+1)}(b,e)}`,g=2;for(;c.has(f);){let d=b.split("/").filter(Boolean).pop()||`alt-${g}`;f=`${a} | ${d.replace(/^anthropic\./i,"").replace(/[._-]/g," ").trim().slice(0,20)}`,c.has(f)&&(f=`${a} | ${e+1}`),g+=1}c.add(f),d.set(b,f)})}return d}function j(a,b){let c=String(a||"").trim();return c?b?.get(c)||h(c):""}},92280:(a,b,c)=>{Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(28208),e=c(47617),f=c(62018);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}},94709:(a,b,c)=>{c.r(b),c.d(b,{GET:()=>H,OPTIONS:()=>F,buildClaudeFullCatalogDiscoveryModels:()=>G,buildModelsList:()=>E});var d=c(81329),e=c(40615),f=c(15717),g=c(16655),h=c(19617),i=c(65089);c(4489);var j=c(58569),k=c(86925),l=c(9155),m=c(46052),n=c(41029);let o=new Map;async function p(a,b){let c=new AbortController,d=setTimeout(()=>c.abort(),1e4);try{let d=await (0,m.Fm)("https://api.githubcopilot.com/models",{method:"GET",headers:{Authorization:`Bearer ${a}`,"Content-Type":"application/json"},cache:"no-store",signal:b||c.signal,identity:"copilot",provider:"github",format:"openai"});if(!d.ok){let a=Error(`Copilot /models returned ${d.status}`);throw a.status=d.status,a}let e=await d.json();return Array.isArray(e?.data)?e.data:[]}finally{clearTimeout(d)}}async function q(a,b={}){let c,d=a?.providerSpecificData?.copilotToken||a?.accessToken;if(!d)return b.log?.debug?.("COPILOT_MODELS","No copilotToken/accessToken; skipping live fetch"),null;let e=a?.providerSpecificData?.copilotToken||a?.accessToken||"copilot-anonymous",f=Date.now();if(!b.forceRefresh){let a=o.get(e);if(a&&a.expiresAt>f)return{models:a.models}}try{c=await p(d,b.signal)}catch(d){if(!d||401!==d.status&&403!==d.status||!a.accessToken)return b.log?.warn?.("COPILOT_MODELS",`Live model fetch failed: ${d?.message||d}`),null;{b.log?.info?.("COPILOT_MODELS",`Got ${d.status}; refreshing Copilot token`);let e=await (0,n.jR)(a.accessToken);if(!e?.token)return b.log?.warn?.("COPILOT_MODELS","Token refresh did not return a token"),null;if("function"==typeof b.onCredentialsRefreshed)try{await b.onCredentialsRefreshed({copilotToken:e.token,copilotTokenExpiresAt:e.expiresAt})}catch(a){b.log?.warn?.("COPILOT_MODELS",`onCredentialsRefreshed failed: ${a?.message||a}`)}try{c=await p(e.token,b.signal)}catch(a){return b.log?.warn?.("COPILOT_MODELS",`Retry after refresh failed: ${a?.message||a}`),null}}}let g=function(a){let b=new Set,c=[];for(let d of a){if(!d||"object"!=typeof d||d.capabilities?.type!=="chat"||d.policy&&"enabled"!==d.policy.state)continue;let a=d.id;!a||b.has(a)||(b.add(a),c.push({id:a,name:d.name||a}))}return c}(c);return g.length?(o.set(e,{expiresAt:f+3e5,models:g}),{models:g}):null}var r=c(40694),s=c(58255),t=c(63123),u=c(67828),v=c(43904),w=c(32524),x=c(68393),y=c(39326);let z={kiro:async(a,b={})=>{let c=await (0,j.cW)({accessToken:a.accessToken,refreshToken:a.refreshToken,providerSpecificData:a.providerSpecificData||{}},{log:console,signal:b.signal});return c?.models?.length?{models:c.models}:null},qoder:async(a,b={})=>{let c=await (0,l.EV)({accessToken:a.accessToken,refreshToken:a.refreshToken,email:a.email,displayName:a.displayName,providerSpecificData:a.providerSpecificData||{}},{signal:b.signal});return c?.models?.length?{models:c.models.map(a=>({id:a.id,name:a.name}))}:null},kimchi:async(a,b={})=>{let c=await (0,k.av)({accessToken:a.accessToken,apiKey:a.apiKey,providerSpecificData:a.providerSpecificData||{}},{log:console,signal:b.signal});return c?.models?.length?{models:c.models}:null},github:async(a,b={})=>{let c=await q({accessToken:a.accessToken,refreshToken:a.refreshToken,providerSpecificData:a.providerSpecificData||{}},{log:console,signal:b.signal,onCredentialsRefreshed:async b=>{await (0,u.vN)(a.id,{copilotToken:b.copilotToken,copilotTokenExpiresAt:b.copilotTokenExpiresAt,existingProviderSpecificData:a.providerSpecificData||{}})}});return c?.models?.length?{models:c.models}:null},clinepass:async(a,b={})=>{let c=await (0,r.P)({accessToken:a.accessToken,apiKey:a.apiKey},{signal:b.signal});return c?.models?.length?{models:c.models}:null},"grok-cli":async(a,b={})=>{let c=await (0,y.B)(a.providerSpecificData||{}),d=await (0,t.M)({...a,connectionId:a.id},{log:console,signal:b.signal,proxyOptions:c,onCredentialsRefreshed:b=>(0,u.vN)(a.id,{...b,existingProviderSpecificData:a.providerSpecificData||{}})});return d?.models?.length?{models:d.models}:null}},A={image:"image",tts:"tts",embedding:"embedding",stt:"stt",imageToText:"imageToText",video:"video"};function B(a){let b=a?.kind||a?.type;return b&&A[b]||"llm"}async function C(a,b=null){if(!a?.apiKey)return[];let c="string"==typeof a?.providerSpecificData?.baseUrl?a.providerSpecificData.baseUrl.trim().replace(/\/$/,""):"";if(!c)return[];let d=`${c}/models`,f={"Content-Type":"application/json",[h.M]:"1"};if((0,e.mq)(a.provider))f.Authorization=`Bearer ${a.apiKey}`;else{if(!(0,e.gb)(a.provider))return[];d.endsWith("/messages/models")?d=d.slice(0,-9):d.endsWith("/messages")&&(d=`${d.slice(0,-9)}/models`),f["x-api-key"]=a.apiKey,f["anthropic-version"]="2023-06-01",f.Authorization=`Bearer ${a.apiKey}`}try{let a=new AbortController,c=setTimeout(()=>a.abort(),5e3);b&&"function"!=typeof AbortSignal.any&&b.addEventListener("abort",()=>{clearTimeout(c),a.abort(b.reason)},{once:!0});let e=b&&"function"==typeof AbortSignal.any?AbortSignal.any([b,a.signal]):a.signal;try{var g;let a=await fetch(d,{method:"GET",headers:f,cache:"no-store",signal:e});if(!a.ok)return[];let b=(g=await a.json(),Array.isArray(g)?g:g?.data||g?.models||g?.results||[]);return Array.from(new Set(b.map(a=>a?.id||a?.name||a?.model).filter(a=>"string"==typeof a&&""!==a.trim())))}finally{clearTimeout(c)}}catch{return[]}}function D(a,b){let c=e.Q2[a],d=Array.isArray(c?.serviceKinds)&&c.serviceKinds.length>0?c.serviceKinds:["llm"];return b.some(a=>d.includes(a))}async function E(a,{signal:b=null,skipCompatibleDiscovery:c=!1}={}){let h=[],j=!1;try{h=await (0,f.getProviderConnections)()}catch(a){j=!0,console.log("Could not fetch providers, returning all models")}let k=h.filter(a=>!1!==a.isActive),l=[];try{l=await (0,f.Uv)()}catch(a){console.log("Could not fetch combos")}let m=[];try{m=await (0,f.uv)()}catch(a){console.log("Could not fetch custom models")}let n={};try{n=await (0,f.OM)()}catch(a){console.log("Could not fetch model aliases")}let o={};try{o=await (0,g.vF)()}catch(a){console.log("Could not fetch disabled models")}let p=new Map(Object.entries(o).map(([a,b])=>[a,function(a,b=""){return new Set((Array.isArray(a)?a:[]).map(a=>(0,i.v)(a,b)).filter(Boolean))}(b,a)])),q=(a,b)=>{let c=p.get(a);return!!c&&function(a,b,c=""){return a.has((0,i.v)(b,c))}(c,b,a)},r=new Map;for(let a of k){if(b?.aborted)break;r.has(a.provider)||r.set(a.provider,a)}let t=r.get("cursor");t&&r.set("cursor",await (0,u.Yx)(t,{force:!0}));let w=new Map;if(!c){let a=Array.from(r.entries()).filter(([a])=>(0,e.mq)(a)||(0,e.gb)(a));await Promise.all(a.map(async([a,c])=>{w.set(a,await C(c,b))}))}let y=new Map,A=Array.from(r.entries()).filter(([b])=>D(b,a)&&!(0,e.mq)(b)&&!(0,e.gb)(b));await Promise.all(A.map(async([a,c])=>{let d=z[a];try{let e=d?await d(c,{signal:b}):await (0,s.Mz)(c,{signal:b,..."cursor"===a?{log:console}:{}});e?.models?.length&&y.set(a,e)}catch(b){console.log(`Live model fetch failed for ${a}: ${b?.message||b}`)}}));let F=[],G=a=>{if("string"!=typeof a)return!1;let b=a.indexOf("/");if(b<=0)return!1;let c=a.slice(0,b),d=(0,e.rs)(c);return!!d&&!!e.Q2[d]&&!r.has(d)},H=!j;for(let b of l){if(!function(a,b){let c=a?.kind||"llm";return b.includes(c)}(b,a))continue;if(H){let a=Array.isArray(b.models)?b.models:[];if(a.length>0&&a.every(G))continue}let c={id:b.name,object:"model",owned_by:"combo",name:b.name};("webSearch"===b.kind||"webFetch"===b.kind)&&(c.kind=b.kind),F.push(c)}if(a.includes("llm"))for(let[a,b]of Object.entries(n||{}))(0,x.Ng)(a)&&(H&&G(b)||F.push({id:a,object:"model",owned_by:"switchboard-alias",display_name:`Switchboard \xb7 ${a}`}));if(0===h.length){for(let[b,c]of Object.entries(d.PROVIDER_MODELS))if(D((0,e.rs)(b),a))for(let d of c)a.includes(B(d))&&(q(b,d.id)||F.push({id:`${b}/${d.id}`,object:"model",owned_by:b}));for(let b of m){if(!b?.id||b.type&&"llm"!==b.type||!a.includes("llm"))continue;let c=b.providerAlias;if(!c)continue;let d=String(b.id).trim();d&&F.push({id:`${c}/${d}`,object:"model",owned_by:c})}}else for(let[f,g]of r.entries()){if(b?.aborted)break;if(!D(f,a))continue;let h=d.Xg[f]||f,i=(g?.providerSpecificData?.prefix||(0,e.wG)(f)||h).trim(),j=d.PROVIDER_MODELS[h]||[],k=g?.providerSpecificData?.enabledModels,l=Array.isArray(k)&&k.length>0,o=(0,e.mq)(f)||(0,e.gb)(f),p=new Map(j.map(a=>[a.id,B(a)])),r=new Map,s=new Map,t=l?Array.from(new Set(k.filter(a=>"string"==typeof a&&""!==a.trim()))):j.map(a=>a.id);if(o&&!c){let a=w.get(f)||[];a.length>0&&(t=a)}let u=y.get(f);u?.models?.length&&(t=u.models.map(a=>a.id),r=new Map(u.models.filter(a=>a?.id).map(a=>[a.id,B(a)])),s=new Map(u.models.filter(a=>a?.id&&a.capabilities).map(a=>[a.id,a.capabilities])));let x=t.map(a=>a.startsWith(`${i}/`)?a.slice(i.length+1):a.startsWith(`${h}/`)?a.slice(h.length+1):a.startsWith(`${f}/`)?a.slice(f.length+1):a).filter(a=>"string"==typeof a&&""!==a.trim()),z=new Map;for(let b of Array.from(new Set([...x,...m.filter(b=>{if(!b?.id)return!1;let c=(0,d.CP)(b)||"llm";if(!a.includes(c)&&!("imageToText"===c&&a.includes("llm")))return!1;let e=b.providerAlias;return e===h||e===i||e===f}).map(a=>{let b=String(a.id).trim();return b&&z.set(b,(0,d.CP)(a)||"llm"),b}).filter(a=>""!==a),...Object.values(n||{}).filter(a=>"string"==typeof a&&!!a.includes("/")&&(a.startsWith(`${i}/`)||a.startsWith(`${h}/`)||a.startsWith(`${f}/`))).map(a=>a.startsWith(`${i}/`)?a.slice(i.length+1):a.startsWith(`${h}/`)?a.slice(h.length+1):a.startsWith(`${f}/`)?a.slice(f.length+1):a).filter(a=>"string"==typeof a&&""!==a.trim())]))){let c=z.get(b),d=r.get(b),e=c||d||p.get(b)||function(a){let b=String(a).toLowerCase();return/embed/.test(b)?"embedding":/tts|speech|audio|voice/.test(b)?"tts":/image|imagen|dall-?e|flux|sdxl|sd-|stable-diffusion/.test(b)?"image":"llm"}(b),f="imageToText"===e&&a.includes("llm");if(!a.includes(e)&&!f||q(i,b)||q(h,b))continue;let g={id:`${i}/${b}`,object:"model",owned_by:i},j=s.get(b)||(0,v.a0)(c||d);j&&(g.capabilities=j),F.push(g)}let A=e.Q2[f];a.includes("webSearch")&&A?.searchConfig&&F.push({id:`${i}/search`,object:"model",kind:"webSearch",owned_by:i}),a.includes("webFetch")&&A?.fetchConfig&&F.push({id:`${i}/fetch`,object:"model",kind:"webFetch",owned_by:i})}let I=[],J=new Set;for(let a of F)!a?.id||J.has(a.id)||(J.add(a.id),I.push(a));return I}async function F(){return new Response(null,{headers:{"Access-Control-Allow-Methods":"GET, OPTIONS","Access-Control-Allow-Headers":"*"}})}function G(a,b={}){let c=(0,x.OU)(b,a),d=(0,w.HL)(a);return a.map(a=>({id:(0,x.El)(a),object:"model",owned_by:"switchboard-catalog",display_name:c[a]||(0,w.u0)(a,d),description:a}))}async function H(a){try{if((0,x.at)(a?.headers)){let b=(0,x._1)(a?.headers),c=G(b,(0,x.LU)(a?.headers));return Response.json({object:"list",data:c})}let b=await E(["llm"],{signal:a?.signal,skipCompatibleDiscovery:(0,h.k)(a)});return Response.json({object:"list",data:b},{})}catch(a){return console.log("Error fetching models:",a),Response.json({error:{message:a.message,type:"server_error"}},{status:500})}}}};
1
+ "use strict";exports.id=6985,exports.ids=[6985],exports.modules={16655:(a,b,c)=>{c.d(b,{oF:()=>d.oF,tm:()=>d.tm,vF:()=>d.vF});var d=c(15717)},17090:(a,b,c)=>{c.r(b),c.d(b,{GET:()=>H,OPTIONS:()=>F,buildClaudeFullCatalogDiscoveryModels:()=>G,buildModelsList:()=>E});var d=c(81329),e=c(40615),f=c(15717),g=c(16655),h=c(19617),i=c(65089);c(4489);var j=c(58569),k=c(86925),l=c(9155),m=c(46052),n=c(41029);let o=new Map;async function p(a,b){let c=new AbortController,d=setTimeout(()=>c.abort(),1e4);try{let d=await (0,m.Fm)("https://api.githubcopilot.com/models",{method:"GET",headers:{Authorization:`Bearer ${a}`,"Content-Type":"application/json"},cache:"no-store",signal:b||c.signal,identity:"copilot",provider:"github",format:"openai"});if(!d.ok){let a=Error(`Copilot /models returned ${d.status}`);throw a.status=d.status,a}let e=await d.json();return Array.isArray(e?.data)?e.data:[]}finally{clearTimeout(d)}}async function q(a,b={}){let c,d=a?.providerSpecificData?.copilotToken||a?.accessToken;if(!d)return b.log?.debug?.("COPILOT_MODELS","No copilotToken/accessToken; skipping live fetch"),null;let e=a?.providerSpecificData?.copilotToken||a?.accessToken||"copilot-anonymous",f=Date.now();if(!b.forceRefresh){let a=o.get(e);if(a&&a.expiresAt>f)return{models:a.models}}try{c=await p(d,b.signal)}catch(d){if(!d||401!==d.status&&403!==d.status||!a.accessToken)return b.log?.warn?.("COPILOT_MODELS",`Live model fetch failed: ${d?.message||d}`),null;{b.log?.info?.("COPILOT_MODELS",`Got ${d.status}; refreshing Copilot token`);let e=await (0,n.jR)(a.accessToken);if(!e?.token)return b.log?.warn?.("COPILOT_MODELS","Token refresh did not return a token"),null;if("function"==typeof b.onCredentialsRefreshed)try{await b.onCredentialsRefreshed({copilotToken:e.token,copilotTokenExpiresAt:e.expiresAt})}catch(a){b.log?.warn?.("COPILOT_MODELS",`onCredentialsRefreshed failed: ${a?.message||a}`)}try{c=await p(e.token,b.signal)}catch(a){return b.log?.warn?.("COPILOT_MODELS",`Retry after refresh failed: ${a?.message||a}`),null}}}let g=function(a){let b=new Set,c=[];for(let d of a){if(!d||"object"!=typeof d||d.capabilities?.type!=="chat"||d.policy&&"enabled"!==d.policy.state)continue;let a=d.id;!a||b.has(a)||(b.add(a),c.push({id:a,name:d.name||a}))}return c}(c);return g.length?(o.set(e,{expiresAt:f+3e5,models:g}),{models:g}):null}var r=c(40694),s=c(58255),t=c(63123),u=c(67828),v=c(43904),w=c(32524),x=c(68393),y=c(39326);let z={kiro:async(a,b={})=>{let c=await (0,j.cW)({accessToken:a.accessToken,refreshToken:a.refreshToken,providerSpecificData:a.providerSpecificData||{}},{log:console,signal:b.signal});return c?.models?.length?{models:c.models}:null},qoder:async(a,b={})=>{let c=await (0,l.EV)({accessToken:a.accessToken,refreshToken:a.refreshToken,email:a.email,displayName:a.displayName,providerSpecificData:a.providerSpecificData||{}},{signal:b.signal});return c?.models?.length?{models:c.models.map(a=>({id:a.id,name:a.name}))}:null},kimchi:async(a,b={})=>{let c=await (0,k.av)({accessToken:a.accessToken,apiKey:a.apiKey,providerSpecificData:a.providerSpecificData||{}},{log:console,signal:b.signal});return c?.models?.length?{models:c.models}:null},github:async(a,b={})=>{let c=await q({accessToken:a.accessToken,refreshToken:a.refreshToken,providerSpecificData:a.providerSpecificData||{}},{log:console,signal:b.signal,onCredentialsRefreshed:async b=>{await (0,u.vN)(a.id,{copilotToken:b.copilotToken,copilotTokenExpiresAt:b.copilotTokenExpiresAt,existingProviderSpecificData:a.providerSpecificData||{}})}});return c?.models?.length?{models:c.models}:null},clinepass:async(a,b={})=>{let c=await (0,r.P)({accessToken:a.accessToken,apiKey:a.apiKey},{signal:b.signal});return c?.models?.length?{models:c.models}:null},"grok-cli":async(a,b={})=>{let c=await (0,y.B)(a.providerSpecificData||{}),d=await (0,t.M)({...a,connectionId:a.id},{log:console,signal:b.signal,proxyOptions:c,onCredentialsRefreshed:b=>(0,u.vN)(a.id,{...b,existingProviderSpecificData:a.providerSpecificData||{}})});return d?.models?.length?{models:d.models}:null}},A={image:"image",tts:"tts",embedding:"embedding",stt:"stt",imageToText:"imageToText",video:"video"};function B(a){let b=a?.kind||a?.type;return b&&A[b]||"llm"}async function C(a,b=null){if(!a?.apiKey)return[];let c="string"==typeof a?.providerSpecificData?.baseUrl?a.providerSpecificData.baseUrl.trim().replace(/\/$/,""):"";if(!c)return[];let d=`${c}/models`,f={"Content-Type":"application/json",[h.M]:"1"};if((0,e.mq)(a.provider))f.Authorization=`Bearer ${a.apiKey}`;else{if(!(0,e.gb)(a.provider))return[];d.endsWith("/messages/models")?d=d.slice(0,-9):d.endsWith("/messages")&&(d=`${d.slice(0,-9)}/models`),f["x-api-key"]=a.apiKey,f["anthropic-version"]="2023-06-01",f.Authorization=`Bearer ${a.apiKey}`}try{let a=new AbortController,c=setTimeout(()=>a.abort(),5e3);b&&"function"!=typeof AbortSignal.any&&b.addEventListener("abort",()=>{clearTimeout(c),a.abort(b.reason)},{once:!0});let e=b&&"function"==typeof AbortSignal.any?AbortSignal.any([b,a.signal]):a.signal;try{var g;let a=await fetch(d,{method:"GET",headers:f,cache:"no-store",signal:e});if(!a.ok)return[];let b=(g=await a.json(),Array.isArray(g)?g:g?.data||g?.models||g?.results||[]);return Array.from(new Set(b.map(a=>a?.id||a?.name||a?.model).filter(a=>"string"==typeof a&&""!==a.trim())))}finally{clearTimeout(c)}}catch{return[]}}function D(a,b){let c=e.Q2[a],d=Array.isArray(c?.serviceKinds)&&c.serviceKinds.length>0?c.serviceKinds:["llm"];return b.some(a=>d.includes(a))}async function E(a,{signal:b=null,skipCompatibleDiscovery:c=!1}={}){let h=[],j=!1;try{h=await (0,f.getProviderConnections)()}catch(a){j=!0,console.log("Could not fetch providers, returning all models")}let k=h.filter(a=>!1!==a.isActive),l=[];try{l=await (0,f.Uv)()}catch(a){console.log("Could not fetch combos")}let m=[];try{m=await (0,f.uv)()}catch(a){console.log("Could not fetch custom models")}let n={};try{n=await (0,f.OM)()}catch(a){console.log("Could not fetch model aliases")}let o={};try{o=await (0,g.vF)()}catch(a){console.log("Could not fetch disabled models")}let p=new Map(Object.entries(o).map(([a,b])=>[a,function(a,b=""){return new Set((Array.isArray(a)?a:[]).map(a=>(0,i.v)(a,b)).filter(Boolean))}(b,a)])),q=(a,b)=>{let c=p.get(a);return!!c&&function(a,b,c=""){return a.has((0,i.v)(b,c))}(c,b,a)},r=new Map;for(let a of k){if(b?.aborted)break;r.has(a.provider)||r.set(a.provider,a)}let t=r.get("cursor");t&&r.set("cursor",await (0,u.Yx)(t,{force:!0}));let w=new Map;if(!c){let a=Array.from(r.entries()).filter(([a])=>(0,e.mq)(a)||(0,e.gb)(a));await Promise.all(a.map(async([a,c])=>{w.set(a,await C(c,b))}))}let y=new Map,A=Array.from(r.entries()).filter(([b])=>D(b,a)&&!(0,e.mq)(b)&&!(0,e.gb)(b));await Promise.all(A.map(async([a,c])=>{let d=z[a];try{let e=d?await d(c,{signal:b}):await (0,s.Mz)(c,{signal:b,..."cursor"===a?{log:console}:{}});e?.models?.length&&y.set(a,e)}catch(b){console.log(`Live model fetch failed for ${a}: ${b?.message||b}`)}}));let F=[],G=a=>{if("string"!=typeof a)return!1;let b=a.indexOf("/");if(b<=0)return!1;let c=a.slice(0,b),d=(0,e.rs)(c);return!!d&&!!e.Q2[d]&&!r.has(d)},H=!j;for(let b of l){if(!function(a,b){let c=a?.kind||"llm";return b.includes(c)}(b,a))continue;if(H){let a=Array.isArray(b.models)?b.models:[];if(a.length>0&&a.every(G))continue}let c={id:b.name,object:"model",owned_by:"combo",name:b.name};("webSearch"===b.kind||"webFetch"===b.kind)&&(c.kind=b.kind),F.push(c)}if(a.includes("llm"))for(let[a,b]of Object.entries(n||{}))(0,x.Ng)(a)&&(H&&G(b)||F.push({id:a,object:"model",owned_by:"switchboard-alias",display_name:`Switchboard \xb7 ${a}`}));if(0===h.length){for(let[b,c]of Object.entries(d.PROVIDER_MODELS))if(D((0,e.rs)(b),a))for(let d of c)a.includes(B(d))&&(q(b,d.id)||F.push({id:`${b}/${d.id}`,object:"model",owned_by:b}));for(let b of m){if(!b?.id||b.type&&"llm"!==b.type||!a.includes("llm"))continue;let c=b.providerAlias;if(!c)continue;let d=String(b.id).trim();d&&F.push({id:`${c}/${d}`,object:"model",owned_by:c})}}else for(let[f,g]of r.entries()){if(b?.aborted)break;if(!D(f,a))continue;let h=d.Xg[f]||f,i=(g?.providerSpecificData?.prefix||(0,e.wG)(f)||h).trim(),j=d.PROVIDER_MODELS[h]||[],k=g?.providerSpecificData?.enabledModels,l=Array.isArray(k)&&k.length>0,o=(0,e.mq)(f)||(0,e.gb)(f),p=new Map(j.map(a=>[a.id,B(a)])),r=new Map,s=new Map,t=l?Array.from(new Set(k.filter(a=>"string"==typeof a&&""!==a.trim()))):j.map(a=>a.id);if(o&&!c){let a=w.get(f)||[];a.length>0&&(t=a)}let u=y.get(f);u?.models?.length&&(t=u.models.map(a=>a.id),r=new Map(u.models.filter(a=>a?.id).map(a=>[a.id,B(a)])),s=new Map(u.models.filter(a=>a?.id&&a.capabilities).map(a=>[a.id,a.capabilities])));let x=t.map(a=>a.startsWith(`${i}/`)?a.slice(i.length+1):a.startsWith(`${h}/`)?a.slice(h.length+1):a.startsWith(`${f}/`)?a.slice(f.length+1):a).filter(a=>"string"==typeof a&&""!==a.trim()),z=new Map;for(let b of Array.from(new Set([...x,...m.filter(b=>{if(!b?.id)return!1;let c=(0,d.CP)(b)||"llm";if(!a.includes(c)&&!("imageToText"===c&&a.includes("llm")))return!1;let e=b.providerAlias;return e===h||e===i||e===f}).map(a=>{let b=String(a.id).trim();return b&&z.set(b,(0,d.CP)(a)||"llm"),b}).filter(a=>""!==a),...Object.values(n||{}).filter(a=>"string"==typeof a&&!!a.includes("/")&&(a.startsWith(`${i}/`)||a.startsWith(`${h}/`)||a.startsWith(`${f}/`))).map(a=>a.startsWith(`${i}/`)?a.slice(i.length+1):a.startsWith(`${h}/`)?a.slice(h.length+1):a.startsWith(`${f}/`)?a.slice(f.length+1):a).filter(a=>"string"==typeof a&&""!==a.trim())]))){let c=z.get(b),d=r.get(b),e=c||d||p.get(b)||function(a){let b=String(a).toLowerCase();return/embed/.test(b)?"embedding":/tts|speech|audio|voice/.test(b)?"tts":/image|imagen|dall-?e|flux|sdxl|sd-|stable-diffusion/.test(b)?"image":"llm"}(b),f="imageToText"===e&&a.includes("llm");if(!a.includes(e)&&!f||q(i,b)||q(h,b))continue;let g={id:`${i}/${b}`,object:"model",owned_by:i},j=s.get(b)||(0,v.a0)(c||d);j&&(g.capabilities=j),F.push(g)}let A=e.Q2[f];a.includes("webSearch")&&A?.searchConfig&&F.push({id:`${i}/search`,object:"model",kind:"webSearch",owned_by:i}),a.includes("webFetch")&&A?.fetchConfig&&F.push({id:`${i}/fetch`,object:"model",kind:"webFetch",owned_by:i})}let I=[],J=new Set;for(let a of F)!a?.id||J.has(a.id)||(J.add(a.id),I.push(a));return I}async function F(){return new Response(null,{headers:{"Access-Control-Allow-Methods":"GET, OPTIONS","Access-Control-Allow-Headers":"*"}})}function G(a,b={}){let c=(0,x.OU)(b,a),d=(0,w.HL)(a);return a.map(a=>({id:(0,x.El)(a),object:"model",owned_by:"switchboard-catalog",display_name:c[a]||(0,w.u0)(a,d),description:a}))}async function H(a){try{if((0,x.at)(a?.headers)){let b=(0,x._1)(a?.headers),c=G(b,(0,x.LU)(a?.headers));return Response.json({object:"list",data:c})}let b=await E(["llm"],{signal:a?.signal,skipCompatibleDiscovery:(0,h.k)(a)});return Response.json({object:"list",data:b},{})}catch(a){return console.log("Error fetching models:",a),Response.json({error:{message:a.message,type:"server_error"}},{status:500})}}},19225:(a,b,c)=>{a.exports=c(44870)},32524:(a,b,c)=>{c.d(b,{HL:()=>i,pD:()=>h,u0:()=>j});let d=Object.freeze({"lite-llm":"llm",litellm:"llm"}),e=["opus","sonnet","haiku","fable","gemini","gpt","glm","deepseek","composer","kimi","qwen"],f=[{pattern:/ap-southeast|low-carbon-apac|\bapac\b/i,tag:"apac"},{pattern:/eu-west|europe|\beu\b/i,tag:"eu"},{pattern:/us-east|us-west|\bus\b/i,tag:"us"}],g=["bedrock","vertex","azure","openai"];function h(a){var b;let c,h,i,j,k,l,m,n=String(a||"").trim();if(!n)return"";let o=n.indexOf("/");if(o<0)return n;let p=d[c=String(n.slice(0,o)||"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").replace(/-+/g,"-")]||c.slice(0,10),q=n.slice(o+1).split("/").filter(Boolean),r=(h=q.join("/").toLowerCase(),i=e.find(a=>h.includes(a))||null,j=f.find(a=>a.pattern.test(h))?.tag||null,k=g.find(a=>h.includes(a))||null,l=h.match(/\b(\d+m)\b/i)?.[1]?.toLowerCase()||null,m=(b=i?h.match(RegExp(`${i}[-._]?(\\d+(?:[._-]\\d+)*)`,"i"))?.[1]:null)?b.replace(/[._-]/g,"."):null,{family:i,region:j,infra:k,variant:l,version:m}),s=[p];if(r.region&&s.push(r.region),r.infra&&s.push(r.infra),r.family){let a=r.variant?`${r.family} ${r.variant}`:r.version?`${r.family} ${r.version}`:r.family;s.push(a)}else if(q.length>0){let a=q[q.length-1].replace(/^anthropic\./i,"").replace(/[._]/g," ").trim();a&&s.push(a.slice(0,24))}return s.join(" | ")}function i(a){let b=a.map(a=>String(a||"").trim()).filter(Boolean).map(a=>({modelId:a,base:h(a)})),c=new Map;for(let a of b){let b=c.get(a.base)||[];b.push(a.modelId),c.set(a.base,b)}let d=new Map;for(let[a,b]of c.entries()){if(1===b.length){d.set(b[0],a);continue}let c=new Set;b.forEach((b,e)=>{let f=`${a} | ${function(a,b){let c=String(a||"").split("/").filter(Boolean);return c.length>=3?c[1].replace(/[._-]/g," ").trim().slice(0,20):2===c.length?c[1].replace(/^anthropic\./i,"").replace(/[._-]/g," ").trim().slice(0,20):(c[c.length-1]||`model-${b+1}`).replace(/^anthropic\./i,"").replace(/[._-]/g," ").trim().slice(0,20)||String(b+1)}(b,e)}`,g=2;for(;c.has(f);){let d=b.split("/").filter(Boolean).pop()||`alt-${g}`;f=`${a} | ${d.replace(/^anthropic\./i,"").replace(/[._-]/g," ").trim().slice(0,20)}`,c.has(f)&&(f=`${a} | ${e+1}`),g+=1}c.add(f),d.set(b,f)})}return d}function j(a,b){let c=String(a||"").trim();return c?b?.get(c)||h(c):""}},92280:(a,b,c)=>{Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(28208),e=c(47617),f=c(62018);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}}};
@@ -2,4 +2,4 @@ exports.id=7454,exports.ids=[7454],exports.modules={23628:(a,b,c)=>{"use strict"
2
2
  ${e}${n(t)}
3
3
  `}function s(a){let b=o(a,e);if(!b)return a;let c=(0,d.Tp)(p(a,e));if(c.errors.length)throw Error(`Invalid Aider YAML: ${c.errors[0].message}`);for(let a of["openai-api-base","openai-api-key","model","alias"])b[a]?.exists?c.setIn([a],b[a].value):c.deleteIn([a]);return c.toString()}function t(a,{baseUrl:b,models:c,defaultModel:e}){let g=o(a,f)?u(a):a,h=(0,d.Tp)(g||"");if(h.errors.length)throw Error(`Invalid Hermes YAML: ${h.errors[0].message}`);let k=i(c),l=j(e,k),m=q(h.getIn(["custom_providers"])),p=Array.isArray(m)?m:[],r=p.find(a=>a?.name==="switchboard"),s=q(h.getIn(["model"])),v=p.filter(a=>a?.name!=="switchboard"),w=Object.fromEntries(k.map(a=>[a,{}]));return v.push({name:"switchboard",base_url:b,key_env:"SWITCHBOARD_API_KEY",api_mode:"chat_completions",models:w}),h.setIn(["custom_providers"],v),h.setIn(["model"],{...s&&"object"==typeof s?s:{},default:l,provider:"custom:switchboard"}),`${h.toString().trimEnd()}
4
4
  ${f}${n({previousProvider:r??null,previousModel:s??null})}
5
- `}function u(a){let b=o(a,f),c=(0,d.Tp)(p(a,f));if(c.errors.length)throw Error(`Invalid Hermes YAML: ${c.errors[0].message}`);let e=q(c.getIn(["custom_providers"]));if(Array.isArray(e)){let a=e.filter(a=>a?.name!=="switchboard");b?.previousProvider&&a.push(b.previousProvider),a.length?c.setIn(["custom_providers"],a):c.deleteIn(["custom_providers"])}return"custom:switchboard"===q(c.getIn(["model","provider"]))&&(b?.previousModel?c.setIn(["model"],b.previousModel):c.deleteIn(["model"])),c.toString()}function v(a,{baseUrl:b,apiKey:c,models:d,defaultModel:e}){let f=i(d),g=j(e,f);return{...a,model:`switchboard/${g}`,provider:{...a.provider||{},switchboard:{npm:"@ai-sdk/openai-compatible",name:"Switchboard",options:{apiKey:c,baseURL:b},models:Object.fromEntries(f.map(a=>[a,{name:k(a)}]))}}}}function w(a,{baseUrl:b,apiKey:c,models:d,defaultModel:e}){let f=i(d),g=j(e,f),h=a.providers||{},l=a.models||{};return{providers:{...h,providers:{...h.providers||{},switchboard:{type:"openai-compatible",name:"Switchboard",baseUrl:b,apiKey:c,defaultModelId:g}}},models:{...l,providers:{...l.providers||{},switchboard:{provider:{name:"Switchboard",baseUrl:b,defaultModelId:g},models:Object.fromEntries(f.map(a=>[a,{id:a,name:k(a)}]))}}}}}function x(a,{models:b,defaultModel:c}){let d=i(b),e=j(c,d),f=Object.fromEntries(Object.entries(a?.modelConfigs?.modelDefinitions&&"object"==typeof a.modelConfigs.modelDefinitions?a.modelConfigs.modelDefinitions:{}).filter(([,a])=>a?.family!=="switchboard"));return{...a,model:{...a.model||{},name:e},experimental:{...a.experimental||{},dynamicModelConfiguration:!0},modelConfigs:{...a.modelConfigs||{},modelDefinitions:{...f,...Object.fromEntries(d.map(a=>[a,{displayName:`Switchboard \xb7 ${k(a)}`,family:"switchboard",tier:"custom",isPreview:!1,isVisible:!0,features:{thinking:!0,multimodalToolUse:!0}}]))}}}}},57781:(a,b,c)=>{"use strict";c.d(b,{R:()=>h});var d=c(51455),e=c.n(d),f=c(76760),g=c.n(f);async function h(a,b,c="utf-8"){let d=g().dirname(a);await e().mkdir(d,{recursive:!0});let f=g().join(d,`.${g().basename(a)}.sb-tmp-${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`);try{await e().writeFile(f,b,c);try{let a=await e().open(f,"r+");try{await a.sync()}finally{await a.close()}}catch{}await e().rename(f,a)}catch(a){try{await e().unlink(f)}catch{}throw a}}},68393:(a,b,c)=>{"use strict";c.d(b,{AD:()=>x,El:()=>v,JF:()=>r,LU:()=>u,Ng:()=>o,OU:()=>t,Ro:()=>h,_1:()=>s,ao:()=>l,at:()=>B,i6:()=>A,iO:()=>w,s8:()=>z,wN:()=>y});let d=Object.freeze({PASS_THROUGH:"pass-through",PROXY:"proxy",FULL_CATALOG:"full-catalog"}),e="x-switchboard-claude-mode",f="x-switchboard-claude-models",g="x-switchboard-claude-labels",h="x-switchboard-key",i="claude-switchboard-v1/",j=/^(?:claude|anthropic)-[a-z0-9][a-z0-9._-]*$/i,k=Object.freeze(["ANTHROPIC_DEFAULT_OPUS_MODEL","ANTHROPIC_DEFAULT_OPUS_MODEL_NAME","ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION","ANTHROPIC_DEFAULT_SONNET_MODEL","ANTHROPIC_DEFAULT_SONNET_MODEL_NAME","ANTHROPIC_DEFAULT_SONNET_MODEL_DESCRIPTION","ANTHROPIC_DEFAULT_FABLE_MODEL","ANTHROPIC_DEFAULT_FABLE_MODEL_NAME","ANTHROPIC_DEFAULT_FABLE_MODEL_DESCRIPTION","ANTHROPIC_DEFAULT_HAIKU_MODEL","ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME","ANTHROPIC_DEFAULT_HAIKU_MODEL_DESCRIPTION"]);function l(a){let b=String(a||"");if(!b)return"";let c=0x811c9dc5;for(let a=0;a<b.length;a+=1)c^=b.charCodeAt(a),c=Math.imul(c,0x1000193);return(c>>>0).toString(16).padStart(8,"0")}let m=a=>a.replace(/(^|-)([a-z])/g,(a,b,c)=>`${b}${c.toUpperCase()}`);function n(a,b){if("string"!=typeof a)return"";for(let c of a.split(/\r?\n/)){let a=c.indexOf(":");if(!(a<0)&&c.slice(0,a).trim().toLowerCase()===b)return c.slice(a+1).trim()}return""}function o(a){return"string"==typeof a&&j.test(a)}function p(a){if(!Array.isArray(a))throw TypeError("Claude catalog models must be an array.");let b=[],c=new Set;for(let d of a){if("string"!=typeof d)throw TypeError("Each Claude catalog model must be a string.");let a=d.trim();if(a){if(/\r|\n/.test(a))throw TypeError("Claude catalog model IDs cannot contain newlines.");c.has(a)||(c.add(a),b.push(a))}}return b}function q(a){if("string"!=typeof a||!a.trim())return[];try{return p(JSON.parse(decodeURIComponent(a)))}catch{return[]}}function r(a){return q(n(a,f))}function s(a){return q(a?.get(f))}function t(a,b){if(!a||"object"!=typeof a||Array.isArray(a))return{};let c=new Set(p(b)),d={};for(let[b,e]of Object.entries(a)){if(!c.has(b))continue;let a=String(e||"").trim().replace(/[·•—–]/g," | ").replace(/[\r\n]+/g," ").replace(/\s+/g," ");a&&(d[b]=a.slice(0,48))}return d}function u(a){var b=a?.get(g);if("string"!=typeof b||!b.trim())return{};try{let a=JSON.parse(decodeURIComponent(b));return a&&"object"==typeof a&&!Array.isArray(a)?a:{}}catch{return{}}}function v(a){let b=String(a||"").trim();if(!b)throw TypeError("A Switchboard model ID is required.");let c=b.split("/").map(encodeURIComponent).join("/");return`${i}${c}`}function w(a){if("string"!=typeof a||!a.startsWith(i))return null;let b=a.slice(i.length);if(!b)return null;try{let c=b.split("/").map(decodeURIComponent).join("/");return v(c)===a?c:null}catch{return null}}function x({baseUrl:a,gatewayKey:b,models:c=[],pickerLabels:h={}}){let i=String(a||"").trim().replace(/\/+$/,""),j=String(b||"").trim();if(!i)throw TypeError("A Switchboard endpoint is required.");if(!j)throw TypeError("A Switchboard API key is required.");let l=p(c),n=t(h,l),o=function(a=[],b={}){let c=p(a),h=[`${m(e)}: ${d.FULL_CATALOG}`,`${m(f)}: ${encodeURIComponent(JSON.stringify(p(c)))}`],i=function(a,b={}){let c=t(b,a);return 0===Object.keys(c).length?"":encodeURIComponent(JSON.stringify(c))}(c,b);return i&&h.push(`${m(g)}: ${i}`),h.join("\n")}(l,n);if(new TextEncoder().encode(o).byteLength>7168)throw TypeError("This catalog is too large for Claude Code request headers. Remove models or shorten picker labels.");let q={ANTHROPIC_API_KEY:"",ANTHROPIC_AUTH_TOKEN:j,ANTHROPIC_BASE_URL:i.endsWith("/v1")?i:`${i}/v1`,ANTHROPIC_CUSTOM_HEADERS:o,ANTHROPIC_CUSTOM_MODEL_OPTION:"",CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY:"1"};for(let a of k)q[a]="";return{env:q,pickerLabels:n}}function y(a){return n(a,e).toLowerCase()===d.PASS_THROUGH}function z(a){let b=n(a,e).toLowerCase();return b===d.FULL_CATALOG||b===d.PROXY}function A(a){return a?.get(e)?.trim().toLowerCase()===d.PASS_THROUGH}function B(a){let b=a?.get(e)?.trim().toLowerCase();return b===d.FULL_CATALOG||b===d.PROXY}},78335:()=>{},92770:(a,b,c)=>{"use strict";c.r(b),c.d(b,{DELETE:()=>S,GET:()=>O,POST:()=>Q});var d=c(49796),e=c(23211),f=c(79646),g=c(28354),h=c(79748),i=c.n(h),j=c(33873),k=c.n(j),l=c(21820),m=c.n(l),n=c(63294),o=c(23628),p=c(95510),q=c(68393),r=c(24424);let s=(0,g.promisify)(f.exec),t="switchboard",u=Promise.resolve(),v=a=>{let b=u.then(a,a);return u=b.catch(()=>{}),b},w=()=>k().join(m().homedir(),".pi","agent"),x=()=>k().join(w(),"models.json"),y=()=>k().join(w(),"settings.json"),z=()=>k().join(w(),"switchboard-backup.json"),A=()=>k().join(w(),"models.yml"),B=async()=>{try{let a="win32"===m().platform();return await s(a?"where pi":"which pi",{windowsHide:!0}),!0}catch{try{return await i().access(w()),!0}catch{return!1}}},C=async(a,b)=>{try{let b=await i().readFile(a,"utf-8"),c=JSON.parse(b);if(!c||"object"!=typeof c||Array.isArray(c))throw TypeError(`${a} must contain a JSON object`);return c}catch(a){if("ENOENT"===a.code)return b;throw a}},D=()=>C(x(),{providers:{}}),E=()=>C(y(),{}),F=async(a,b)=>{try{let b=await i().readFile(a,"utf-8"),c=""===b.trim()?{}:(0,n.qg)(b);if(!c||"object"!=typeof c||Array.isArray(c))throw TypeError(`${a} must contain a YAML object`);return c}catch(a){if("ENOENT"===a.code)return b;throw a}},G=()=>F(A(),{providers:{}}),H=a=>Array.isArray(a)?a.map(H):a&&"object"==typeof a?Object.fromEntries(Object.keys(a).sort().map(b=>[b,H(a[b])])):a,I=(a,b)=>JSON.stringify(H(a))===JSON.stringify(H(b)),J=a=>a&&"object"==typeof a&&"boolean"==typeof a.exists,K=a=>{if(null==a)return null;if(1===a.version&&"restored"===a.state)return a;if(1!==a.version||!J(a.provider)||!["defaultProvider","defaultModel","enabledModels"].every(b=>J(a.settings?.[b]))||!a.managedProvider||!a.managedSettings)throw Error("Unsupported or invalid Pi Switchboard backup file");return a},L=async(a,b,c,d)=>{await i().mkdir(w(),{recursive:!0}),await (0,p.M_)([{filePath:z(),content:d?JSON.stringify(d,null,2):null,secret:!0},{filePath:A(),content:(0,n.As)(a),secret:!0},{filePath:x(),content:JSON.stringify(b,null,2),secret:!0},{filePath:y(),content:JSON.stringify(c,null,2),secret:!0}])},M=(a,b,c)=>{("defaultProvider"!==c&&"defaultModel"!==c||a.defaultProvider===t)&&I(a[c],b?.managedSettings?.[c])&&(0,p.S3)(a,{[c]:b.settings?.[c]})};async function N(){try{if(!await B())return e.NextResponse.json({installed:!1,settings:null,message:"Pi is not installed"});let[a,b,c]=await Promise.all([G(),D(),E()]),d=a?.providers?.[t]||null,f=d||b?.providers?.[t]||null,g=Array.isArray(d?.models)?d.models:Array.isArray(b?.providers?.[t]?.models)?b.providers[t].models:[],h=g.map(a=>a?.id).filter(Boolean),i=Object.fromEntries(g.filter(a=>a?.id&&a?.name).map(a=>[a.id,a.name])),j=(c.defaultProvider===t&&h.includes(c.defaultModel)?c.defaultModel:null)||h[0]||null,k=f?.baseUrl||null,l=!!(f&&(a=>{try{let b=new URL(String(a||"")).hostname.toLowerCase();return"localhost"===b||"0.0.0.0"===b||/^127(?:\.\d{1,3}){3}$/.test(b)}catch{return!1}})(k)),m=l&&h.length>0;return e.NextResponse.json({installed:!0,hasSwitchboard:l,settings:{baseUrl:k,model:j,defaultModel:j,models:h,pickerLabels:i,apiKeySet:!!f?.apiKey,provider:t,scopeConfigured:m},configPath:A(),settingsPath:y()})}catch(a){return console.log("Error checking pi settings:",a),e.NextResponse.json({error:"Failed to check pi settings"},{status:500})}}async function O(){return v(N)}async function P(a){try{let b,c;try{b=await a.json()}catch{return e.NextResponse.json({error:"Invalid JSON body"},{status:400})}let{baseUrl:d,apiKey:f,model:g,models:h,defaultModel:i,pickerLabels:j}=b||{},[k,l,m,n]=await Promise.all([G(),D(),E(),C(z(),null)]),r=K(n),s=r?.state==="restored"?null:r,u=Array.isArray(k?.providers?.[t]?.models)?k.providers[t].models:Array.isArray(l?.providers?.[t]?.models)?l.providers[t].models:[],v=void 0===h?[g,...u.map(a=>a?.id)]:h,w=(0,o.rP)(v),x=void 0===j||j&&"object"==typeof j&&!Array.isArray(j)&&Object.values(j).every(a=>"string"==typeof a);if(!(0,o.uI)(d)||!(0,o.iU)(f)||0===w.length||!x)return e.NextResponse.json({error:"baseUrl, models, API key, or picker labels are invalid"},{status:400});let B=(c=String(d||"").replace(/\/+$/,"")).endsWith("/v1")?c:`${c}/v1`,F=f||"sk_switchboard",H=(0,o.F2)(i||g,w),I=(0,q.OU)(j,w),J=a=>{(!a.providers||"object"!=typeof a.providers||Array.isArray(a.providers))&&(a.providers={})};J(k),J(l);let M={baseUrl:B,api:"openai-completions",apiKey:F,authHeader:!0,compat:{supportsDeveloperRole:!1,supportsReasoningEffort:!0,supportsUsageInStreaming:!0},models:(0,o.L6)(w,u,I)},N={...M,discovery:{type:"openai-models-list"}},O=s?.version===1?s:{version:1,state:"active",provider:(0,p.EA)(k.providers,[t])[t],legacyProvider:(0,p.EA)(l.providers,[t])[t],settings:(0,p.EA)(m,["defaultProvider","defaultModel","enabledModels"])};k.providers[t]=N,l.providers[t]=M,m.defaultProvider=t,m.defaultModel=H;let P=((a,b)=>{if(!Array.isArray(a)||0===a.length)return;let c=a.filter(a=>"string"!=typeof a||!a.startsWith(`${t}/`));if(0!==c.length)return[...c,...b]})(m.enabledModels,w.map(a=>`${t}/${a}`));return P?m.enabledModels=P:delete m.enabledModels,O.managedProvider=N,O.managedLegacyProvider=M,O.managedSettings={defaultProvider:t,defaultModel:H,enabledModels:m.enabledModels},await L(k,l,m,O),e.NextResponse.json({success:!0,message:`Pi configured with ${w.length} model${1===w.length?"":"s"}. ${H} is the default; use /model to switch.`,pickerLabels:Object.fromEntries(M.models.map(a=>[a.id,a.name])),configPath:A(),settingsPath:y()})}catch(a){return console.log("Error updating pi settings:",a),e.NextResponse.json({error:"Failed to update pi settings"},{status:500})}}async function Q(a){return v(()=>P(a))}async function R(){try{let[a,b,c,d]=await Promise.all([G(),D(),E(),C(z(),null)]),f=K(d);if(f?.state==="restored")return e.NextResponse.json({success:!0,message:"No Switchboard Pi settings to reset"});let g=a?.providers?.[t],h=b?.providers?.[t],i=!!(g||h),j=c.defaultProvider===t||Array.isArray(c.enabledModels)&&c.enabledModels.some(a=>"string"==typeof a&&a.startsWith(`${t}/`));if(!f&&!i&&!j)return e.NextResponse.json({success:!0,message:"No Switchboard Pi settings to reset"});return g&&(!f?.managedProvider||I(g,f.managedProvider))&&(f?.version===1?(0,p.S3)(a.providers,{[t]:f.provider}):delete a.providers[t]),h&&(!f?.managedLegacyProvider||I(h,f.managedLegacyProvider))&&(f?.version===1?(0,p.S3)(b.providers,{[t]:f.legacyProvider??f.provider}):delete b.providers[t]),f?.version===1?(M(c,f,"defaultModel"),M(c,f,"defaultProvider"),M(c,f,"enabledModels")):c.defaultProvider===t&&(delete c.defaultProvider,delete c.defaultModel),!f&&Array.isArray(c.enabledModels)&&(c.enabledModels=c.enabledModels.filter(a=>"string"!=typeof a||!a.startsWith(`${t}/`)),0===c.enabledModels.length&&delete c.enabledModels),await L(a,b,c,{version:1,state:"restored"}),e.NextResponse.json({success:!0,message:"Switchboard provider removed and previous Pi model settings restored"})}catch(a){return console.log("Error resetting pi settings:",a),e.NextResponse.json({error:"Failed to reset pi settings"},{status:500})}}async function S(){return v(R)}(0,r.D)([O,Q,S]),(0,d.A)(O,"007395b32228f1995e14b80c69092d9fac419b68cd",null),(0,d.A)(Q,"406e496b6a44c680227ffcbfed86a71b4019b67c62",null),(0,d.A)(S,"006f5a5cf0b4992a8a1f027d388e8189d102a88bfd",null)},95510:(a,b,c)=>{"use strict";c.d(b,{EA:()=>i,M_:()=>h,S3:()=>j,Yb:()=>g});var d=c(51455),e=c.n(d),f=c(57781);async function g(a,b,{secret:c=!1}={}){if(await (0,f.R)(a,b,c?{encoding:"utf-8",mode:384}:"utf-8"),c)try{await e().chmod(a,384)}catch{}}async function h(a){let b=await Promise.all(a.map(async({filePath:a})=>{try{return{exists:!0,value:await e().readFile(a)}}catch(a){if(a?.code==="ENOENT")return{exists:!1,value:null};throw a}})),c=async({filePath:a,content:b,secret:c=!1})=>{if(null!==b)return void await g(a,b,{secret:c});try{await e().unlink(a)}catch(a){if(a?.code!=="ENOENT")throw a}};try{for(let b of a)await c(b)}catch(e){let d=(await Promise.allSettled(a.map(({filePath:a,secret:d=!1},e)=>c({filePath:a,content:b[e].exists?b[e].value:null,secret:d})))).filter(a=>"rejected"===a.status);if(d.length>0)throw AggregateError([e,...d.map(a=>a.reason)],"Failed to replace CLI files and roll them back cleanly");throw e}}function i(a,b){return Object.fromEntries(b.map(b=>[b,{exists:Object.hasOwn(a,b),value:a[b]}]))}function j(a,b){for(let[c,d]of Object.entries(b||{}))d?.exists?a[c]=d.value:delete a[c]}},96487:()=>{}};
5
+ `}function u(a){let b=o(a,f),c=(0,d.Tp)(p(a,f));if(c.errors.length)throw Error(`Invalid Hermes YAML: ${c.errors[0].message}`);let e=q(c.getIn(["custom_providers"]));if(Array.isArray(e)){let a=e.filter(a=>a?.name!=="switchboard");b?.previousProvider&&a.push(b.previousProvider),a.length?c.setIn(["custom_providers"],a):c.deleteIn(["custom_providers"])}return"custom:switchboard"===q(c.getIn(["model","provider"]))&&(b?.previousModel?c.setIn(["model"],b.previousModel):c.deleteIn(["model"])),c.toString()}function v(a,{baseUrl:b,apiKey:c,models:d,defaultModel:e}){let f=i(d),g=j(e,f);return{...a,model:`switchboard/${g}`,provider:{...a.provider||{},switchboard:{npm:"@ai-sdk/openai-compatible",name:"Switchboard",options:{apiKey:c,baseURL:b},models:Object.fromEntries(f.map(a=>[a,{name:k(a)}]))}}}}function w(a,{baseUrl:b,apiKey:c,models:d,defaultModel:e}){let f=i(d),g=j(e,f),h=a.providers||{},l=a.models||{};return{providers:{...h,providers:{...h.providers||{},switchboard:{type:"openai-compatible",name:"Switchboard",baseUrl:b,apiKey:c,defaultModelId:g}}},models:{...l,providers:{...l.providers||{},switchboard:{provider:{name:"Switchboard",baseUrl:b,defaultModelId:g},models:Object.fromEntries(f.map(a=>[a,{id:a,name:k(a)}]))}}}}}function x(a,{models:b,defaultModel:c}){let d=i(b),e=j(c,d),f=Object.fromEntries(Object.entries(a?.modelConfigs?.modelDefinitions&&"object"==typeof a.modelConfigs.modelDefinitions?a.modelConfigs.modelDefinitions:{}).filter(([,a])=>a?.family!=="switchboard"));return{...a,model:{...a.model||{},name:e},experimental:{...a.experimental||{},dynamicModelConfiguration:!0},modelConfigs:{...a.modelConfigs||{},modelDefinitions:{...f,...Object.fromEntries(d.map(a=>[a,{displayName:`Switchboard \xb7 ${k(a)}`,family:"switchboard",tier:"custom",isPreview:!1,isVisible:!0,features:{thinking:!0,multimodalToolUse:!0}}]))}}}}},57781:(a,b,c)=>{"use strict";c.d(b,{R:()=>h});var d=c(51455),e=c.n(d),f=c(76760),g=c.n(f);async function h(a,b,c="utf-8"){let d=g().dirname(a);await e().mkdir(d,{recursive:!0});let f=g().join(d,`.${g().basename(a)}.sb-tmp-${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`);try{await e().writeFile(f,b,c);try{let a=await e().open(f,"r+");try{await a.sync()}finally{await a.close()}}catch{}await e().rename(f,a)}catch(a){try{await e().unlink(f)}catch{}throw a}}},68393:(a,b,c)=>{"use strict";c.d(b,{AD:()=>x,El:()=>v,JF:()=>r,LU:()=>u,Ng:()=>o,OU:()=>t,Ro:()=>h,_1:()=>s,ao:()=>l,at:()=>B,i6:()=>A,iO:()=>w,s8:()=>z,wN:()=>y});let d=Object.freeze({PASS_THROUGH:"pass-through",PROXY:"proxy",FULL_CATALOG:"full-catalog"}),e="x-switchboard-claude-mode",f="x-switchboard-claude-models",g="x-switchboard-claude-labels",h="x-switchboard-key",i="claude-switchboard-v1/",j=/^(?:claude|anthropic)-[a-z0-9][a-z0-9._-]*$/i,k=Object.freeze(["ANTHROPIC_DEFAULT_OPUS_MODEL","ANTHROPIC_DEFAULT_OPUS_MODEL_NAME","ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION","ANTHROPIC_DEFAULT_SONNET_MODEL","ANTHROPIC_DEFAULT_SONNET_MODEL_NAME","ANTHROPIC_DEFAULT_SONNET_MODEL_DESCRIPTION","ANTHROPIC_DEFAULT_FABLE_MODEL","ANTHROPIC_DEFAULT_FABLE_MODEL_NAME","ANTHROPIC_DEFAULT_FABLE_MODEL_DESCRIPTION","ANTHROPIC_DEFAULT_HAIKU_MODEL","ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME","ANTHROPIC_DEFAULT_HAIKU_MODEL_DESCRIPTION"]);function l(a){let b=String(a||"");if(!b)return"";let c=0x811c9dc5;for(let a=0;a<b.length;a+=1)c^=b.charCodeAt(a),c=Math.imul(c,0x1000193);return(c>>>0).toString(16).padStart(8,"0")}let m=a=>a.replace(/(^|-)([a-z])/g,(a,b,c)=>`${b}${c.toUpperCase()}`);function n(a,b){if("string"!=typeof a)return"";for(let c of a.split(/\r?\n/)){let a=c.indexOf(":");if(!(a<0)&&c.slice(0,a).trim().toLowerCase()===b)return c.slice(a+1).trim()}return""}function o(a){return"string"==typeof a&&j.test(a)}function p(a){if(!Array.isArray(a))throw TypeError("Claude catalog models must be an array.");let b=[],c=new Set;for(let d of a){if("string"!=typeof d)throw TypeError("Each Claude catalog model must be a string.");let a=d.trim();if(a){if(/\r|\n/.test(a))throw TypeError("Claude catalog model IDs cannot contain newlines.");c.has(a)||(c.add(a),b.push(a))}}return b}function q(a){if("string"!=typeof a||!a.trim())return[];try{return p(JSON.parse(decodeURIComponent(a)))}catch{return[]}}function r(a){return q(n(a,f))}function s(a){return q(a?.get(f))}function t(a,b){if(!a||"object"!=typeof a||Array.isArray(a))return{};let c=new Set(p(b)),d={};for(let[b,e]of Object.entries(a)){if(!c.has(b))continue;let a=String(e||"").trim().replace(/[·•—–]/g," | ").replace(/[\r\n]+/g," ").replace(/\s+/g," ");a&&(d[b]=a.slice(0,48))}return d}function u(a){var b=a?.get(g);if("string"!=typeof b||!b.trim())return{};try{let a=JSON.parse(decodeURIComponent(b));return a&&"object"==typeof a&&!Array.isArray(a)?a:{}}catch{return{}}}function v(a){let b=String(a||"").trim();if(!b)throw TypeError("A Switchboard model ID is required.");let c=b.split("/").map(encodeURIComponent).join("/");return`${i}${c}`}function w(a){if("string"!=typeof a||!a.startsWith(i))return null;let b=a.slice(i.length);if(!b)return null;try{let c=b.split("/").map(decodeURIComponent).join("/");return v(c)===a?c:null}catch{return null}}function x({baseUrl:a,gatewayKey:b,models:c=[],pickerLabels:h={}}){let i=String(a||"").trim().replace(/\/+$/,""),j=String(b||"").trim();if(!i)throw TypeError("A Switchboard endpoint is required.");if(!j)throw TypeError("A Switchboard API key is required.");let l=p(c),n=t(h,l),o=function(a=[],b={}){let c=p(a),h=[`${m(e)}: ${d.FULL_CATALOG}`,`${m(f)}: ${encodeURIComponent(JSON.stringify(p(c)))}`],i=function(a,b={}){let c=t(b,a);return 0===Object.keys(c).length?"":encodeURIComponent(JSON.stringify(c))}(c,b);return i&&h.push(`${m(g)}: ${i}`),h.join("\n")}(l,n);if(new TextEncoder().encode(o).byteLength>7168)throw TypeError("This catalog is too large for Claude Code request headers. Remove models or shorten picker labels.");let q={ANTHROPIC_API_KEY:"",ANTHROPIC_AUTH_TOKEN:j,ANTHROPIC_BASE_URL:i.endsWith("/v1")?i:`${i}/v1`,ANTHROPIC_CUSTOM_HEADERS:o,ANTHROPIC_CUSTOM_MODEL_OPTION:"",CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY:"1"};for(let a of k)q[a]="";return{env:q,pickerLabels:n}}function y(a){return n(a,e).toLowerCase()===d.PASS_THROUGH}function z(a){let b=n(a,e).toLowerCase();return b===d.FULL_CATALOG||b===d.PROXY}function A(a){return a?.get(e)?.trim().toLowerCase()===d.PASS_THROUGH}function B(a){let b=a?.get(e)?.trim().toLowerCase();return b===d.FULL_CATALOG||b===d.PROXY}},78335:()=>{},92770:(a,b,c)=>{"use strict";c.r(b),c.d(b,{DELETE:()=>S,GET:()=>O,POST:()=>Q});var d=c(49796),e=c(23211),f=c(79646),g=c(28354),h=c(79748),i=c.n(h),j=c(33873),k=c.n(j),l=c(21820),m=c.n(l),n=c(63294),o=c(23628),p=c(95510),q=c(68393),r=c(24424);let s=(0,g.promisify)(f.exec),t="switchboard",u=Promise.resolve(),v=a=>{let b=u.then(a,a);return u=b.catch(()=>{}),b},w=()=>k().join(m().homedir(),".pi","agent"),x=()=>k().join(w(),"models.json"),y=()=>k().join(w(),"settings.json"),z=()=>k().join(w(),"switchboard-backup.json"),A=()=>k().join(w(),"models.yml"),B=async()=>{try{let a="win32"===m().platform();return await s(a?"where pi":"which pi",{windowsHide:!0}),!0}catch{try{return await i().access(w()),!0}catch{return!1}}},C=async(a,b)=>{try{let b=await i().readFile(a,"utf-8"),c=JSON.parse(b);if(!c||"object"!=typeof c||Array.isArray(c))throw TypeError(`${a} must contain a JSON object`);return c}catch(a){if("ENOENT"===a.code)return b;throw a}},D=()=>C(x(),{providers:{}}),E=()=>C(y(),{}),F=async(a,b)=>{try{let b=await i().readFile(a,"utf-8"),c=""===b.trim()?{}:(0,n.qg)(b);if(!c||"object"!=typeof c||Array.isArray(c))throw TypeError(`${a} must contain a YAML object`);return c}catch(a){if("ENOENT"===a.code)return b;throw a}},G=()=>F(A(),{providers:{}}),H=a=>Array.isArray(a)?a.map(H):a&&"object"==typeof a?Object.fromEntries(Object.keys(a).sort().map(b=>[b,H(a[b])])):a,I=(a,b)=>JSON.stringify(H(a))===JSON.stringify(H(b)),J=a=>a&&"object"==typeof a&&"boolean"==typeof a.exists,K=a=>{if(null==a)return null;if(1===a.version&&"restored"===a.state)return a;if(1!==a.version||!J(a.provider)||!["defaultProvider","defaultModel","enabledModels"].every(b=>J(a.settings?.[b]))||!a.managedProvider||!a.managedSettings)throw Error("Unsupported or invalid Pi Switchboard backup file");return a},L=async(a,b,c,d)=>{await i().mkdir(w(),{recursive:!0}),await (0,p.M_)([{filePath:z(),content:d?JSON.stringify(d,null,2):null,secret:!0},{filePath:A(),content:(0,n.As)(a),secret:!0},{filePath:x(),content:JSON.stringify(b,null,2),secret:!0},{filePath:y(),content:JSON.stringify(c,null,2),secret:!0}])},M=(a,b,c)=>{("defaultProvider"!==c&&"defaultModel"!==c||a.defaultProvider===t)&&I(a[c],b?.managedSettings?.[c])&&(0,p.S3)(a,{[c]:b.settings?.[c]})};async function N(){try{if(!await B())return e.NextResponse.json({installed:!1,settings:null,message:"Pi is not installed"});let[a,b,c]=await Promise.all([G(),D(),E()]),d=a?.providers?.[t]||null,f=d||b?.providers?.[t]||null,g=Array.isArray(d?.models)?d.models:Array.isArray(b?.providers?.[t]?.models)?b.providers[t].models:[],h=g.map(a=>a?.id).filter(Boolean),i=Object.fromEntries(g.filter(a=>a?.id&&a?.name).map(a=>[a.id,a.name])),j=(c.defaultProvider===t&&h.includes(c.defaultModel)?c.defaultModel:null)||h[0]||null,k=f?.baseUrl||null,l=!!(f&&(a=>{try{let b=new URL(String(a||"")).hostname.toLowerCase();return"localhost"===b||"0.0.0.0"===b||/^127(?:\.\d{1,3}){3}$/.test(b)}catch{return!1}})(k)),m=l&&h.length>0;return e.NextResponse.json({installed:!0,hasSwitchboard:l,settings:{baseUrl:k,model:j,defaultModel:j,models:h,pickerLabels:i,apiKeySet:!!f?.apiKey,provider:t,scopeConfigured:m},configPath:A(),settingsPath:y()})}catch(a){return console.log("Error checking pi settings:",a),e.NextResponse.json({error:"Failed to check pi settings"},{status:500})}}async function O(){return v(N)}async function P(a){try{let b,c;try{b=await a.json()}catch{return e.NextResponse.json({error:"Invalid JSON body"},{status:400})}let{baseUrl:d,apiKey:f,model:g,models:h,defaultModel:i,pickerLabels:j}=b||{},[k,l,m,n]=await Promise.all([G(),D(),E(),C(z(),null)]),r=K(n),s=r?.state==="restored"?null:r,u=Array.isArray(k?.providers?.[t]?.models)?k.providers[t].models:Array.isArray(l?.providers?.[t]?.models)?l.providers[t].models:[],v=void 0===h?[g,...u.map(a=>a?.id)]:h,w=(0,o.rP)(v),x=void 0===j||j&&"object"==typeof j&&!Array.isArray(j)&&Object.values(j).every(a=>"string"==typeof a);if(!(0,o.uI)(d)||!(0,o.iU)(f)||0===w.length||!x)return e.NextResponse.json({error:"baseUrl, models, API key, or picker labels are invalid"},{status:400});let B=(c=String(d||"").replace(/\/+$/,"")).endsWith("/v1")?c:`${c}/v1`,F=f||"sk_switchboard",H=(0,o.F2)(i||g,w),I=(0,q.OU)(j,w),J=a=>{(!a.providers||"object"!=typeof a.providers||Array.isArray(a.providers))&&(a.providers={})};J(k),J(l);let M={baseUrl:B,api:"openai-completions",apiKey:F,authHeader:!0,compat:{supportsDeveloperRole:!1,supportsReasoningEffort:!0,supportsUsageInStreaming:!0},models:(0,o.L6)(w,u,I)},N={...M,discovery:{type:"openai-models-list"}},O=s?.version===1?s:{version:1,state:"active",provider:(0,p.EA)(k.providers,[t])[t],legacyProvider:(0,p.EA)(l.providers,[t])[t],settings:(0,p.EA)(m,["defaultProvider","defaultModel","enabledModels"])};k.providers[t]=N,l.providers[t]=M,m.defaultProvider=t,m.defaultModel=H;let P=((a,b)=>{if(!Array.isArray(a)||0===a.length)return;let c=a.filter(a=>"string"!=typeof a||!a.startsWith(`${t}/`));if(0!==c.length)return[...c,...b]})(m.enabledModels,w.map(a=>`${t}/${a}`));return P?m.enabledModels=P:delete m.enabledModels,O.managedProvider=N,O.managedLegacyProvider=M,O.managedSettings={defaultProvider:t,defaultModel:H,enabledModels:m.enabledModels},await L(k,l,m,O),e.NextResponse.json({success:!0,message:`Pi configured with ${w.length} model${1===w.length?"":"s"}. ${H} is the default; use /model to switch.`,pickerLabels:Object.fromEntries(M.models.map(a=>[a.id,a.name])),configPath:A(),settingsPath:y()})}catch(a){return console.log("Error updating pi settings:",a),e.NextResponse.json({error:"Failed to update pi settings"},{status:500})}}async function Q(a){return v(()=>P(a))}async function R(){try{let[a,b,c,d]=await Promise.all([G(),D(),E(),C(z(),null)]),f=K(d);if(f?.state==="restored")return e.NextResponse.json({success:!0,message:"No Switchboard Pi settings to reset"});let g=a?.providers?.[t],h=b?.providers?.[t],i=!!(g||h),j=c.defaultProvider===t||Array.isArray(c.enabledModels)&&c.enabledModels.some(a=>"string"==typeof a&&a.startsWith(`${t}/`));if(!f&&!i&&!j)return e.NextResponse.json({success:!0,message:"No Switchboard Pi settings to reset"});return g&&(!f?.managedProvider||I(g,f.managedProvider))&&(f?.version===1?(0,p.S3)(a.providers,{[t]:f.provider}):delete a.providers[t]),h&&(!f?.managedLegacyProvider||I(h,f.managedLegacyProvider))&&(f?.version===1?(0,p.S3)(b.providers,{[t]:f.legacyProvider??f.provider}):delete b.providers[t]),f?.version===1?(M(c,f,"defaultModel"),M(c,f,"defaultProvider"),M(c,f,"enabledModels")):c.defaultProvider===t&&(delete c.defaultProvider,delete c.defaultModel),!f&&Array.isArray(c.enabledModels)&&(c.enabledModels=c.enabledModels.filter(a=>"string"!=typeof a||!a.startsWith(`${t}/`)),0===c.enabledModels.length&&delete c.enabledModels),await L(a,b,c,{version:1,state:"restored"}),e.NextResponse.json({success:!0,message:"Switchboard provider removed and previous Pi model settings restored"})}catch(a){return console.log("Error resetting pi settings:",a),e.NextResponse.json({error:"Failed to reset pi settings"},{status:500})}}async function S(){return v(R)}(0,r.D)([O,Q,S]),(0,d.A)(O,"000af73a6d0c31a712df8ae850726aee337308742d",null),(0,d.A)(Q,"40ecdaa08db16867fefc7dbd541c9cb4eb5c1d86a4",null),(0,d.A)(S,"001665d98aaf1ef1fdda4b198e4c3706636f8acf35",null)},95510:(a,b,c)=>{"use strict";c.d(b,{EA:()=>i,M_:()=>h,S3:()=>j,Yb:()=>g});var d=c(51455),e=c.n(d),f=c(57781);async function g(a,b,{secret:c=!1}={}){if(await (0,f.R)(a,b,c?{encoding:"utf-8",mode:384}:"utf-8"),c)try{await e().chmod(a,384)}catch{}}async function h(a){let b=await Promise.all(a.map(async({filePath:a})=>{try{return{exists:!0,value:await e().readFile(a)}}catch(a){if(a?.code==="ENOENT")return{exists:!1,value:null};throw a}})),c=async({filePath:a,content:b,secret:c=!1})=>{if(null!==b)return void await g(a,b,{secret:c});try{await e().unlink(a)}catch(a){if(a?.code!=="ENOENT")throw a}};try{for(let b of a)await c(b)}catch(e){let d=(await Promise.allSettled(a.map(({filePath:a,secret:d=!1},e)=>c({filePath:a,content:b[e].exists?b[e].value:null,secret:d})))).filter(a=>"rejected"===a.status);if(d.length>0)throw AggregateError([e,...d.map(a=>a.reason)],"Failed to replace CLI files and roll them back cleanly");throw e}}function i(a,b){return Object.fromEntries(b.map(b=>[b,{exists:Object.hasOwn(a,b),value:a[b]}]))}function j(a,b){for(let[c,d]of Object.entries(b||{}))d?.exists?a[c]=d.value:delete a[c]}},96487:()=>{}};
@@ -1 +1 @@
1
- "use strict";exports.id=869,exports.ids=[869],exports.modules={4489:(a,b,c)=>{c.d(b,{ki:()=>e});let d=new Set(["chat","text","language","model"]);function e(a){if("string"!=typeof a||!a)return a;let b=a.toLowerCase();return d.has(b)?"llm":b}},4630:(a,b,c)=>{c.d(b,{Ak:()=>e,Yg:()=>h,sr:()=>d.sr,xq:()=>d.xq});var d=c(45350);function e(a){return(a?.providerSpecificData?.baseUrl?.trim()||"http://localhost:11434").replace(/\/$/,"")}let f=d.xq["xiaomi-tokenplan"]?.regions||{},g=d.xq["xiaomi-tokenplan"]?.defaultRegion;function h(a){return f[a?.providerSpecificData?.region]||f[g]}},27335:(a,b,c)=>{c.d(b,{Xg:()=>r,vq:()=>f.vq,fZ:()=>j,cY:()=>t,ez:()=>n,ux:()=>m,OA:()=>o,kt:()=>p,KC:()=>s,SM:()=>i});var d=c(4630),e=c(58976),f=c(45350),g=c(6595);let h="-review";function i(a){return f.vq[a]||[]}function j(a){let b=f.vq[a];return b?.[0]?.id||null}let k=new Set(["kr","kiro"]);function l(a,b,c){if(!a)return;let d=a.find(a=>a.id===b);if(d)return d;if(!k.has(c))return;let e=(0,g.Kq)(b);if(e!==b)return a.find(a=>a.id===e)}function m(a,b){let c=f.vq[a];return c?(0,g.gr)(l(c,b,a)):null}function n(a,b){let c=f.vq[a];return c?(0,g.ec)(l(c,b,a)):null}function o(a,b){let c=f.vq[a];if(!c)return null;let d=l(c,b,a);return d?.kind||d?.type||null}function p(a,b){let c="string"==typeof b?b.match(/\([^()]+\)\s*$/):null,d=c?c[0]:"",e=d?b.slice(0,c.index).trim():b,g=l(f.vq[a],e,a);return g?.upstreamModelId?g.upstreamModelId+d:g?.id?g.id+d:"cx"===a&&"string"==typeof e&&e.endsWith(h)?e.slice(0,-h.length)+d:e+d}let q=Object.fromEntries(e.A.filter(a=>a.alias&&a.alias!==a.id).map(a=>[a.id,a.alias])),r=Object.fromEntries(Object.keys(d.xq).map(a=>[a,q[a]||a]));function s(a){let b=r[a]||a;return f.vq[b]||[]}function t(a,b){return(0,g.g5)(l(f.vq[a],b,a))}},30869:(a,b,c)=>{c.d(b,{UY:()=>h,eh:()=>f.eh,fg:()=>e.fg,h0:()=>g,oc:()=>i});var d=c(39006),e=c(40615),f=c(81329);d.rE;let g={npmPackageName:"switchboard-router",installCmd:"npm i -g switchboard-router",installCmdLatest:"npm i -g switchboard-router@latest --prefer-online",shutdownCountdownSec:3,exitDelayMs:2200,statusPort:20129,statusPollIntervalMs:1e3,statusLogTailLines:8,installRetries:3,installRetryDelayMs:5e3,lingerAfterDoneMs:3e4,waitForExitMinMs:5e3,waitForExitMaxMs:2e4,waitForExitCheckMs:500,statusStartupTimeoutMs:2e3,appPort:20128},h={maxLines:200,pollIntervalMs:1e3},i={tickIntervalMs:6e4,pingLeadMs:5e3,refreshAheadMs:3e5,failureCooldownMs:9e5,providers:{claude:{settingsKey:"claudeAutoPing",quotaKey:"session (5h)",pingModel:"claude-haiku-4-5-20251001",pingText:"hi",pingMaxTokens:1},codex:{settingsKey:"codexAutoPing",quotaKey:"session",pingWhenResetAtSlides:!0,resetAtDriftMs:3e4,minPingIntervalMs:6e5,skipWhenBlockingQuotaExhausted:!0,pingModel:"gpt-5.5",pingText:"hi",pingInstructions:"Reply with OK.",pingReasoningEffort:"none"}}}},39006:a=>{a.exports=JSON.parse('{"UU":"switchboard-app","rE":"0.9.3"}')},40615:(a,b,c)=>{c.d(b,{Q2:()=>s,js:()=>w,DI:()=>n,fg:()=>k,Pd:()=>o,IS:()=>h,nJ:()=>i,zN:()=>j,JH:()=>m,jO:()=>y,wb:()=>x,br:()=>l,wG:()=>v,zt:()=>t,gb:()=>q,gC:()=>r,mq:()=>p,rs:()=>u});var d=c(58976);let e="⚠️ Risk Notice: This provider uses a subscription/OAuth session not officially licensed for proxy/router use. Account may be restricted or banned. Use at your own risk.";Object.fromEntries(d.A.filter(a=>a.display).map(a=>{let b;return[a.id,"RISK_NOTICE"===(b=a.display).deprecationNotice?{...b,deprecationNotice:e}:b]}));let f=["serviceKinds","ttsConfig","sttConfig","embeddingConfig","imageConfig","imageToTextConfig","videoConfig","musicConfig","searchViaChat","searchConfig","fetchConfig","modelsFetcher","mediaPriority","hiddenKinds"],g=a=>Object.fromEntries(d.A.filter(b=>b.category===a).map(a=>[a.id,function(a){let b={};for(let c of(a.media&&Object.assign(b,a.media),f))void 0!==a[c]&&(b[c]=a[c]);let c={...a.display||{}};return"RISK_NOTICE"===c.deprecationNotice&&(c.deprecationNotice=e),{...c,id:a.id,alias:a.uiAlias||a.alias,...a.aliases?.length?{aliases:a.aliases}:{},...a.hidden?{hidden:!0}:{},...b,...void 0!==a.priority?{priority:a.priority}:{},...a.hasFree?{hasFree:!0}:{},...a.thinkingConfig?{thinkingConfig:a.thinkingConfig}:{},...a.regions?{regions:a.regions,defaultRegion:a.defaultRegion}:{},...a.hasProviderSpecificData?{hasProviderSpecificData:!0}:{},...a.noAuth?{noAuth:!0}:{},...a.passthroughModels?{passthroughModels:!0}:{},...a.hasOAuth?{hasOAuth:!0}:{},...a.authModes?{authModes:a.authModes}:{},...a.authType?{authType:a.authType}:{},...a.authHint?{authHint:a.authHint}:{}}}(a)])),h=g("free"),i=g("freeTier"),j=g("oauth"),k=g("apikey"),l=g("webCookie"),m="openai-compatible-",n="anthropic-compatible-",o="custom-embedding-";function p(a){return"string"==typeof a&&a.startsWith(m)}function q(a){return"string"==typeof a&&a.startsWith(n)}function r(a){return"string"==typeof a&&a.startsWith(o)}let s={...h,...i,...j,...k,...l};function t(a){for(let b of Object.values(s))if(b.alias===a||b.id===a||b.aliases?.includes(a))return b;return null}function u(a){let b=t(a);return b?.id||a}function v(a){let b=s[a];return b?.alias||a}let w=Object.values(s).reduce((a,b)=>(a[b.alias]=b.id,a),{});Object.values(s).reduce((a,b)=>(a[b.id]=b.alias,a),{});let x=d.A.filter(a=>a.features?.usage).map(a=>a.id),y=d.A.filter(a=>a.features?.usageApikey).map(a=>a.id)},81329:(a,b,c)=>{c.d(b,{CP:()=>h,PROVIDER_MODELS:()=>d.vq,Xg:()=>d.Xg,eh:()=>g});var d=c(27335),e=c(40615),f=c(4489);Object.entries(e.Q2).filter(([,a])=>a.passthroughModels).map(([a])=>a);let g=Object.entries(d.vq).flatMap(([a,b])=>b.map(b=>({provider:a,model:b.id,name:b.name}))),h=(a,b=null)=>{let c=a?.kind||a?.type||b;return c?(0,f.ki)(c):c}}};
1
+ "use strict";exports.id=869,exports.ids=[869],exports.modules={4489:(a,b,c)=>{c.d(b,{ki:()=>e});let d=new Set(["chat","text","language","model"]);function e(a){if("string"!=typeof a||!a)return a;let b=a.toLowerCase();return d.has(b)?"llm":b}},4630:(a,b,c)=>{c.d(b,{Ak:()=>e,Yg:()=>h,sr:()=>d.sr,xq:()=>d.xq});var d=c(45350);function e(a){return(a?.providerSpecificData?.baseUrl?.trim()||"http://localhost:11434").replace(/\/$/,"")}let f=d.xq["xiaomi-tokenplan"]?.regions||{},g=d.xq["xiaomi-tokenplan"]?.defaultRegion;function h(a){return f[a?.providerSpecificData?.region]||f[g]}},27335:(a,b,c)=>{c.d(b,{Xg:()=>r,vq:()=>f.vq,fZ:()=>j,cY:()=>t,ez:()=>n,ux:()=>m,OA:()=>o,kt:()=>p,KC:()=>s,SM:()=>i});var d=c(4630),e=c(58976),f=c(45350),g=c(6595);let h="-review";function i(a){return f.vq[a]||[]}function j(a){let b=f.vq[a];return b?.[0]?.id||null}let k=new Set(["kr","kiro"]);function l(a,b,c){if(!a)return;let d=a.find(a=>a.id===b);if(d)return d;if(!k.has(c))return;let e=(0,g.Kq)(b);if(e!==b)return a.find(a=>a.id===e)}function m(a,b){let c=f.vq[a];return c?(0,g.gr)(l(c,b,a)):null}function n(a,b){let c=f.vq[a];return c?(0,g.ec)(l(c,b,a)):null}function o(a,b){let c=f.vq[a];if(!c)return null;let d=l(c,b,a);return d?.kind||d?.type||null}function p(a,b){let c="string"==typeof b?b.match(/\([^()]+\)\s*$/):null,d=c?c[0]:"",e=d?b.slice(0,c.index).trim():b,g=l(f.vq[a],e,a);return g?.upstreamModelId?g.upstreamModelId+d:g?.id?g.id+d:"cx"===a&&"string"==typeof e&&e.endsWith(h)?e.slice(0,-h.length)+d:e+d}let q=Object.fromEntries(e.A.filter(a=>a.alias&&a.alias!==a.id).map(a=>[a.id,a.alias])),r=Object.fromEntries(Object.keys(d.xq).map(a=>[a,q[a]||a]));function s(a){let b=r[a]||a;return f.vq[b]||[]}function t(a,b){return(0,g.g5)(l(f.vq[a],b,a))}},30869:(a,b,c)=>{c.d(b,{UY:()=>h,eh:()=>f.eh,fg:()=>e.fg,h0:()=>g,oc:()=>i});var d=c(39006),e=c(40615),f=c(81329);d.rE;let g={npmPackageName:"switchboard-router",installCmd:"npm i -g switchboard-router",installCmdLatest:"npm i -g switchboard-router@latest --prefer-online",shutdownCountdownSec:3,exitDelayMs:2200,statusPort:20129,statusPollIntervalMs:1e3,statusLogTailLines:8,installRetries:3,installRetryDelayMs:5e3,lingerAfterDoneMs:3e4,waitForExitMinMs:5e3,waitForExitMaxMs:2e4,waitForExitCheckMs:500,statusStartupTimeoutMs:2e3,appPort:20128},h={maxLines:200,pollIntervalMs:1e3},i={tickIntervalMs:6e4,pingLeadMs:5e3,refreshAheadMs:3e5,failureCooldownMs:9e5,providers:{claude:{settingsKey:"claudeAutoPing",quotaKey:"session (5h)",pingModel:"claude-haiku-4-5-20251001",pingText:"hi",pingMaxTokens:1},codex:{settingsKey:"codexAutoPing",quotaKey:"session",pingWhenResetAtSlides:!0,resetAtDriftMs:3e4,minPingIntervalMs:6e5,skipWhenBlockingQuotaExhausted:!0,pingModel:"gpt-5.5",pingText:"hi",pingInstructions:"Reply with OK.",pingReasoningEffort:"none"}}}},39006:a=>{a.exports=JSON.parse('{"UU":"switchboard-app","rE":"0.9.6"}')},40615:(a,b,c)=>{c.d(b,{Q2:()=>s,js:()=>w,DI:()=>n,fg:()=>k,Pd:()=>o,IS:()=>h,nJ:()=>i,zN:()=>j,JH:()=>m,jO:()=>y,wb:()=>x,br:()=>l,wG:()=>v,zt:()=>t,gb:()=>q,gC:()=>r,mq:()=>p,rs:()=>u});var d=c(58976);let e="⚠️ Risk Notice: This provider uses a subscription/OAuth session not officially licensed for proxy/router use. Account may be restricted or banned. Use at your own risk.";Object.fromEntries(d.A.filter(a=>a.display).map(a=>{let b;return[a.id,"RISK_NOTICE"===(b=a.display).deprecationNotice?{...b,deprecationNotice:e}:b]}));let f=["serviceKinds","ttsConfig","sttConfig","embeddingConfig","imageConfig","imageToTextConfig","videoConfig","musicConfig","searchViaChat","searchConfig","fetchConfig","modelsFetcher","mediaPriority","hiddenKinds"],g=a=>Object.fromEntries(d.A.filter(b=>b.category===a).map(a=>[a.id,function(a){let b={};for(let c of(a.media&&Object.assign(b,a.media),f))void 0!==a[c]&&(b[c]=a[c]);let c={...a.display||{}};return"RISK_NOTICE"===c.deprecationNotice&&(c.deprecationNotice=e),{...c,id:a.id,alias:a.uiAlias||a.alias,...a.aliases?.length?{aliases:a.aliases}:{},...a.hidden?{hidden:!0}:{},...b,...void 0!==a.priority?{priority:a.priority}:{},...a.hasFree?{hasFree:!0}:{},...a.thinkingConfig?{thinkingConfig:a.thinkingConfig}:{},...a.regions?{regions:a.regions,defaultRegion:a.defaultRegion}:{},...a.hasProviderSpecificData?{hasProviderSpecificData:!0}:{},...a.noAuth?{noAuth:!0}:{},...a.passthroughModels?{passthroughModels:!0}:{},...a.hasOAuth?{hasOAuth:!0}:{},...a.authModes?{authModes:a.authModes}:{},...a.authType?{authType:a.authType}:{},...a.authHint?{authHint:a.authHint}:{}}}(a)])),h=g("free"),i=g("freeTier"),j=g("oauth"),k=g("apikey"),l=g("webCookie"),m="openai-compatible-",n="anthropic-compatible-",o="custom-embedding-";function p(a){return"string"==typeof a&&a.startsWith(m)}function q(a){return"string"==typeof a&&a.startsWith(n)}function r(a){return"string"==typeof a&&a.startsWith(o)}let s={...h,...i,...j,...k,...l};function t(a){for(let b of Object.values(s))if(b.alias===a||b.id===a||b.aliases?.includes(a))return b;return null}function u(a){let b=t(a);return b?.id||a}function v(a){let b=s[a];return b?.alias||a}let w=Object.values(s).reduce((a,b)=>(a[b.alias]=b.id,a),{});Object.values(s).reduce((a,b)=>(a[b.id]=b.alias,a),{});let x=d.A.filter(a=>a.features?.usage).map(a=>a.id),y=d.A.filter(a=>a.features?.usageApikey).map(a=>a.id)},81329:(a,b,c)=>{c.d(b,{CP:()=>h,PROVIDER_MODELS:()=>d.vq,Xg:()=>d.Xg,eh:()=>g});var d=c(27335),e=c(40615),f=c(4489);Object.entries(e.Q2).filter(([,a])=>a.passthroughModels).map(([a])=>a);let g=Object.entries(d.vq).flatMap(([a,b])=>b.map(b=>({provider:a,model:b.id,name:b.name}))),h=(a,b=null)=>{let c=a?.kind||a?.type||b;return c?(0,f.ki)(c):c}}};
@@ -1 +1 @@
1
- globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/kGdbG3TEpkBeoqsRS2Mre/_buildManifest.js","static/kGdbG3TEpkBeoqsRS2Mre/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-57b54315eb9fa808.js","static/chunks/4bd1b696-8a4ab4fdf0ae305a.js","static/chunks/3794-d7cddff008311ab3.js","static/chunks/main-app-83fef838b21a8d19.js"],rootMainFilesTree:{},pages:{"/_app":[]}};
1
+ globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/Dj3B1SY51GKVJr4nnDlac/_buildManifest.js","static/Dj3B1SY51GKVJr4nnDlac/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-57b54315eb9fa808.js","static/chunks/4bd1b696-8a4ab4fdf0ae305a.js","static/chunks/3794-d7cddff008311ab3.js","static/chunks/main-app-83fef838b21a8d19.js"],rootMainFilesTree:{},pages:{"/_app":[]}};