blade-code 0.10.27 → 0.10.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/blade.js +2 -2
- package/dist/chunk-03633tsz.js +10 -0
- package/dist/{chunk-0vsaphkr.js → chunk-0pbvrw1c.js} +1 -1
- package/dist/{chunk-z3kc23wz.js → chunk-0pcwv1h8.js} +1 -1
- package/dist/{chunk-1c4j6q7j.js → chunk-0xhd2mzm.js} +2 -2
- package/dist/{chunk-kahzw9qn.js → chunk-1e9cpchh.js} +39 -39
- package/dist/chunk-1kxz32m6.js +1 -0
- package/dist/chunk-1sregjyz.js +1 -0
- package/dist/{chunk-eeg6jn2c.js → chunk-1ycv8b9t.js} +1 -1
- package/dist/{chunk-99h83wjf.js → chunk-287fabvz.js} +2 -2
- package/dist/chunk-2byq2qja.js +1 -0
- package/dist/{chunk-z4d3t2bb.js → chunk-2gre3vrn.js} +2 -2
- package/dist/{chunk-sp1j3ng5.js → chunk-2ycs4wce.js} +1 -1
- package/dist/chunk-3t5gqr9e.js +1 -0
- package/dist/{chunk-gwxwpwqk.js → chunk-4y6pjd2n.js} +1 -1
- package/dist/{chunk-76fnqb4r.js → chunk-5wkv5g4v.js} +1 -1
- package/dist/{chunk-cx5daedg.js → chunk-69r9j0ms.js} +1 -1
- package/dist/{chunk-czs2rxyr.js → chunk-6qdwp1t3.js} +1 -1
- package/dist/{chunk-bmxzx4xg.js → chunk-6vfctcqp.js} +1 -1
- package/dist/chunk-6znn1a5v.js +1 -0
- package/dist/{chunk-k6gsac91.js → chunk-70kccy7a.js} +1 -1
- package/dist/{chunk-jvg2vnc3.js → chunk-78bknnzt.js} +2 -2
- package/dist/chunk-7hjz5jjn.js +9 -0
- package/dist/{chunk-7v0w3625.js → chunk-8djaj8m7.js} +2 -2
- package/dist/chunk-8k9ark1n.js +1 -0
- package/dist/chunk-98rbxm1y.js +22 -0
- package/dist/{chunk-9reqa9g1.js → chunk-9ev9k5bd.js} +2 -2
- package/dist/{chunk-y0c3knp9.js → chunk-a1a4351m.js} +2 -2
- package/dist/{chunk-ezarz0ye.js → chunk-a1ftc84p.js} +1 -1
- package/dist/{chunk-erwmqhkw.js → chunk-ae7f5mh9.js} +1 -1
- package/dist/{chunk-a09g8k55.js → chunk-apq6qqjg.js} +2 -2
- package/dist/{chunk-1thq2kns.js → chunk-axcaxcgk.js} +2 -2
- package/dist/chunk-br9230a2.js +2 -0
- package/dist/chunk-cbyewxx4.js +3 -0
- package/dist/{chunk-hxb7wg07.js → chunk-d6a4qw1m.js} +1 -1
- package/dist/{chunk-e1r2zqv3.js → chunk-djzy4zgc.js} +2 -2
- package/dist/chunk-dny4h2gz.js +4 -0
- package/dist/{chunk-yh81njxg.js → chunk-dx5996qr.js} +1 -1
- package/dist/{chunk-y4fj9way.js → chunk-ecvk8npm.js} +1 -1
- package/dist/{chunk-5wemkcp3.js → chunk-gbmnbckj.js} +2 -2
- package/dist/{chunk-y2ra5akr.js → chunk-gpa4y0xk.js} +1 -1
- package/dist/chunk-hb9yjfja.js +1 -0
- package/dist/{chunk-17k72zar.js → chunk-hbhcj665.js} +2 -2
- package/dist/{chunk-18ck4nnw.js → chunk-j9djsqqy.js} +2 -2
- package/dist/chunk-jk66yar2.js +1 -0
- package/dist/chunk-jvtzyba4.js +2 -0
- package/dist/{chunk-j4gvwm9w.js → chunk-k3wmp1xm.js} +1 -1
- package/dist/chunk-k52a3bq6.js +1 -0
- package/dist/chunk-n1qmwjmc.js +1 -0
- package/dist/chunk-p2j0wcca.js +111 -0
- package/dist/{chunk-kvgrg5p2.js → chunk-p2yb40zk.js} +1 -1
- package/dist/{chunk-d893y03w.js → chunk-p4hf7agx.js} +2 -2
- package/dist/chunk-q4fy74fz.js +2 -0
- package/dist/chunk-qewf02br.js +1 -0
- package/dist/chunk-qsj712zc.js +1 -0
- package/dist/{chunk-14hspehn.js → chunk-rf3jf275.js} +3 -3
- package/dist/{chunk-00ta2sme.js → chunk-rqvejn8x.js} +2 -2
- package/dist/chunk-ry7226b5.js +6 -0
- package/dist/{chunk-ymgnh4an.js → chunk-sh2kjand.js} +1 -1
- package/dist/{chunk-1zsz19bn.js → chunk-sjbqm4be.js} +1 -1
- package/dist/{chunk-39yvdt2g.js → chunk-stmsk0kz.js} +2 -2
- package/dist/{chunk-emwawshv.js → chunk-t0n90d7w.js} +1 -1
- package/dist/{chunk-v1kac601.js → chunk-taj3qfn3.js} +1 -1
- package/dist/{chunk-q24xmkqy.js → chunk-tct2ybbh.js} +2 -2
- package/dist/{chunk-h79p49hc.js → chunk-tdevyej4.js} +1 -1
- package/dist/{chunk-z2kfx8g0.js → chunk-wn60hv0w.js} +358 -350
- package/dist/chunk-x1a5wv45.js +1 -0
- package/dist/{chunk-600hfjag.js → chunk-x3dche8v.js} +2 -2
- package/dist/{chunk-b9akah7k.js → chunk-xqapcfw3.js} +1 -1
- package/dist/{chunk-77y8cb2q.js → chunk-yv2sdpxk.js} +1 -1
- package/dist/chunk-z516a7nx.js +1 -0
- package/dist/web/assets/ChatView-BtSSERlQ.js +18 -0
- package/dist/web/assets/{CodeBlockHighlighter-B8-o1K2L.js → CodeBlockHighlighter-CAuanOO0.js} +1 -1
- package/dist/web/assets/{FilePreview-BvUxzULZ.js → FilePreview-BKQ-EBj3.js} +1 -1
- package/dist/web/assets/{MarkdownRenderer-C-X3g9Ky.js → MarkdownRenderer-BdYjJ_NM.js} +3 -3
- package/dist/web/assets/{SettingsModal-Dhjw1__j.js → SettingsModal-CB6hM8fT.js} +1 -1
- package/dist/web/assets/{TaskSwitcher-BAHVGLmL.js → TaskSwitcher-sSD4B7C_.js} +1 -1
- package/dist/web/assets/{TerminalPanel-D3cC-lXf.js → TerminalPanel-ZnEoQU6o.js} +1 -1
- package/dist/web/assets/{index-D88fYWls.js → index-DtOztVFd.js} +7 -7
- package/dist/web/assets/session-events-C2PMff2v.js +22 -0
- package/dist/web/index.html +2 -2
- package/package.json +4 -1
- package/dist/chunk-1pjvzcrj.js +0 -2
- package/dist/chunk-2rdk9rzv.js +0 -1
- package/dist/chunk-4dnvydyv.js +0 -4
- package/dist/chunk-4qk4v6aw.js +0 -1
- package/dist/chunk-7kfnsts1.js +0 -1
- package/dist/chunk-awz9bn56.js +0 -1
- package/dist/chunk-cpk6vwyh.js +0 -1
- package/dist/chunk-dyf9jrds.js +0 -9
- package/dist/chunk-fgczbyhy.js +0 -1
- package/dist/chunk-g11e47n1.js +0 -1
- package/dist/chunk-hszqdsn3.js +0 -1
- package/dist/chunk-kbpg9amg.js +0 -100
- package/dist/chunk-m6crkryd.js +0 -6
- package/dist/chunk-pvf84eht.js +0 -1
- package/dist/chunk-rtct70pm.js +0 -3
- package/dist/chunk-rvz8yka7.js +0 -1
- package/dist/chunk-t3hahveb.js +0 -1
- package/dist/chunk-v874kevz.js +0 -22
- package/dist/chunk-wa33kkb2.js +0 -1
- package/dist/chunk-wawmjv8r.js +0 -10
- package/dist/chunk-wzxkfpec.js +0 -2
- package/dist/chunk-xg9fzft1.js +0 -1
- package/dist/chunk-yc8rrjsr.js +0 -1
- package/dist/web/assets/ChatView-B4Le8nGL.js +0 -7
- package/dist/web/assets/session-events-BoJrjSZ2.js +0 -22
package/dist/blade.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{
|
|
2
|
+
import{Rc as W}from"./chunk-9ev9k5bd.js";import{Uc as F,Vc as M}from"./chunk-djzy4zgc.js";import"./chunk-8djaj8m7.js";import"./chunk-v508x7cg.js";import"./chunk-sh2kjand.js";import"./chunk-rf3jf275.js";import"./chunk-70kccy7a.js";import"./chunk-2gre3vrn.js";import"./chunk-xqapcfw3.js";import"./chunk-k3wmp1xm.js";import"./chunk-br9230a2.js";import{yf as N,zf as B}from"./chunk-2ycs4wce.js";import{Cf as T}from"./chunk-p4hf7agx.js";import"./chunk-0xhd2mzm.js";import"./chunk-69r9j0ms.js";import"./chunk-q4fy74fz.js";import"./chunk-stmsk0kz.js";import"./chunk-5wkv5g4v.js";import"./chunk-rqvejn8x.js";import{gg as J}from"./chunk-0pcwv1h8.js";import v from"node:path";var E=process.argv.slice(2),I=u(E),p=I!==null;if(I!==null)T.setGlobalDebug(I);function u(Q){for(let Y=0;Y<Q.length;Y+=1){let U=Q[Y];if(U==="--debug"||U==="-d"){let X=Q[Y+1];return X&&!X.startsWith("-")?X:!0}if(U.startsWith("--debug="))return U.slice(8)||!0}return null}function c(Q){return Q.length===1&&(Q[0]==="--version"||Q[0]==="-V")}function q(Q,...Y){return Q.some((U)=>Y.some((X)=>U===X||U.startsWith(`${X}=`)))}function m(Q,...Y){let U=[];for(let X=0;X<Q.length;X+=1){let G=Q[X],z=Y.find(($)=>G.startsWith(`${$}=`));if(z){let $=G.slice(z.length+1);if($)U.push($);continue}if(Y.includes(G)){let $=Q[X+1];if($&&!$.startsWith("-"))U.push($),X+=1}}return U}async function t(){if(c(E)){let{getVersion:K}=await import("./chunk-k52a3bq6.js");console.log(K());return}let Q=process.cwd(),Y=F(Q);M(Y),N(B());let U=m(E,"--plugin-dir","--pluginDir");if(U.length>0){let{configureInvocationPluginDirs:K}=await import("./chunk-qewf02br.js");K(U.map((Z)=>v.resolve(Q,Z)))}if(q(E,"--trust-workspace","--trustWorkspace")){let{WorkspaceTrustService:K}=await import("./chunk-hb9yjfja.js");await K.getInstance().trust(B())}if(process.getuid&&process.getuid()===0){let K=!!process.env.SUDO_USER,Z=!!process.env.BLADE_ALLOW_ROOT;if(K&&!Z)console.error(""),console.error("Error: 请不要使用 sudo 运行 blade"),console.error(""),console.error("原因:"),console.error(" 使用 sudo 会创建属于 root 的配置文件,"),console.error(" 导致普通用户无法访问。"),console.error(""),console.error("正确用法:"),console.error(" blade # 直接运行,不要加 sudo"),console.error(""),console.error("如果遇到权限错误,请运行:"),console.error(" sudo chown -R $USER:$USER ~/.blade/"),console.error(""),console.error("如果你确实需要以 root 运行(容器/CI),设置环境变量:"),console.error(" BLADE_ALLOW_ROOT=1 blade"),console.error(""),process.exit(1)}if(q(E,"--headless")){let{handleHeadlessMode:K}=await import("./chunk-ry7226b5.js");if(await K())return}if(W(),q(E,"--print","-p")){let{handlePrintMode:K}=await import("./chunk-7hjz5jjn.js");if(await K())return}if(E.includes("--acp")){let{runAcpIntegration:K}=await import("./chunk-98rbxm1y.js");await K();return}let[{default:X},{hideBin:G},{cliConfig:z,globalOptions:$},{loadConfiguration:_,validateOutput:D,validatePermissions:R},{doctorCommands:S},{installCommands:k},{mcpCommands:O},{projectsCommands:y},{scheduleCommands:b},{serveCommand:V},{updateCommands:P},{webCommand:x}]=await Promise.all([import("yargs"),import("yargs/helpers"),import("./chunk-n1qmwjmc.js"),import("./chunk-1sregjyz.js"),import("./chunk-gbmnbckj.js"),import("./chunk-6qdwp1t3.js"),import("./chunk-dx5996qr.js"),import("./chunk-ae7f5mh9.js"),import("./chunk-ecvk8npm.js"),import("./chunk-3t5gqr9e.js"),import("./chunk-gpa4y0xk.js"),import("./chunk-03633tsz.js")]),A=X(G(process.argv)).scriptName(z.scriptName).usage(z.usage).version(z.version).locale(z.locale).showHelpOnFail(z.showHelpOnFail).demandCommand(0,"").recommendCommands().strict(z.strict).parserConfiguration({"populate--":!0}).options($).middleware([_,R,D]).command(O).command(y).command(b).command(S).command(P).command(k).command(x).command(V).completion("completion",!1).help("help","Show help").alias("help","h").alias("version","V").fail((K,Z,L)=>{if(Z){if(console.error("An error occurred:"),console.error(Z.message),p&&Z.stack)console.error(`
|
|
3
3
|
Stack trace:`),console.error(Z.stack);else console.error(`
|
|
4
4
|
Run with --debug to show the stack trace.`);process.exit(1)}if(K)console.error("Error: Invalid arguments:"),console.error(K),console.error(`
|
|
5
|
-
Hint: Did you mean:`),L.showHelp(),process.exit(1)}).command("$0",!1,()=>{},async(K)=>{let Z=K._.slice(1),L=Z.length>0?Z.join(" "):void 0,h=import("./chunk-
|
|
5
|
+
Hint: Did you mean:`),L.showHelp(),process.exit(1)}).command("$0",!1,()=>{},async(K)=>{let Z=K._.slice(1),L=Z.length>0?Z.join(" "):void 0,h=import("./chunk-qsj712zc.js").then(({checkVersionOnStartup:C})=>C()),[{render:w},{createElement:f},{AppWrapper:j}]=await Promise.all([import("ink"),import("react"),import("./chunk-1e9cpchh.js")]),H={...K,initialMessage:L,debug:K.debug,print:Boolean(K.print),versionCheckPromise:h};delete H._,delete H.$0,delete H.message,w(f(j,H),{patchConsole:!0,exitOnCtrlC:!1,alternateBuffer:!1})});try{await A.parse()}catch(K){console.error("Error: Parse error:",K),process.exit(1)}}if(J.main==J.module)t().catch(console.error);export{t as main};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import{f as Q,g as R,h as T,i as W}from"./chunk-cbyewxx4.js";import"./chunk-yv2sdpxk.js";import"./chunk-taj3qfn3.js";import"./chunk-a1ftc84p.js";import"./chunk-sjbqm4be.js";import"./chunk-wn60hv0w.js";import"./chunk-4y6pjd2n.js";import"./chunk-t0n90d7w.js";import"./chunk-apq6qqjg.js";import"./chunk-dny4h2gz.js";import"./chunk-p2j0wcca.js";import"./chunk-jvtzyba4.js";import"./chunk-x3dche8v.js";import"./chunk-djzy4zgc.js";import{kd as M}from"./chunk-8djaj8m7.js";import"./chunk-v508x7cg.js";import"./chunk-sh2kjand.js";import"./chunk-hbhcj665.js";import"./chunk-j9djsqqy.js";import"./chunk-tdevyej4.js";import"./chunk-78bknnzt.js";import"./chunk-tct2ybbh.js";import"./chunk-0pbvrw1c.js";import"./chunk-1ycv8b9t.js";import"./chunk-6vfctcqp.js";import"./chunk-rf3jf275.js";import"./chunk-70kccy7a.js";import"./chunk-2gre3vrn.js";import"./chunk-xqapcfw3.js";import"./chunk-k3wmp1xm.js";import"./chunk-br9230a2.js";import"./chunk-2ycs4wce.js";import"./chunk-p4hf7agx.js";import"./chunk-0xhd2mzm.js";import"./chunk-69r9j0ms.js";import{Rf as J}from"./chunk-q4fy74fz.js";import"./chunk-stmsk0kz.js";import"./chunk-5wkv5g4v.js";import"./chunk-rqvejn8x.js";import"./chunk-0pcwv1h8.js";import b from"chalk";import H from"open";var $=`
|
|
2
|
+
____ _ _
|
|
3
|
+
| __ )| | __ _ __| | ___
|
|
4
|
+
| _ \\| |/ _\` |/ _\` |/ _ \\
|
|
5
|
+
| |_) | | (_| | (_| | __/
|
|
6
|
+
|____/|_|\\__,_|\\__,_|\\___|
|
|
7
|
+
`,E={command:"web",describe:"Start Blade server and open web interface",builder:Q,handler:async(X)=>{let F=R(X);if(await M(),!process.env.BLADE_SERVER_PASSWORD)console.log(b.yellow("[WARN] BLADE_SERVER_PASSWORD is not set; server is unsecured.")),console.log(b.gray(` Set this environment variable to enable Basic Auth.
|
|
8
|
+
`));let C=await W.listenAsync(F);if(console.log(b.cyan($)),console.log(b.gray(` v${J()}
|
|
9
|
+
`)),F.hostname==="0.0.0.0"){let q=`http://localhost:${C.port}`;console.log(b.blue.bold(" Local access: "),b.white(q));let Y=T();for(let Z of Y)console.log(b.blue.bold(" Network access: "),b.white(`http://${Z}:${C.port}`));H(q).catch(()=>{})}else{let q=C.url.toString();console.log(b.blue.bold(" Web interface: "),b.white(q)),H(q).catch(()=>{})}console.log(""),console.log(b.gray(` Press Ctrl+C to stop the server.
|
|
10
|
+
`)),await new Promise(()=>{}),await C.stop()}};export{E as webCommand};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
var i="verification",E="goal-verification",e="review";function t(n){return n==="verification"||n==="goal-verification"}function o(n){return t(n)||n==="review"}
|
|
2
|
-
export{i as
|
|
2
|
+
export{i as ge,E as he,e as ie,t as je,o as ke};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import{createRequire as a}from"node:module";var c=a(import.meta.url);
|
|
2
|
-
export{c as
|
|
2
|
+
export{c as gg};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Lf as N,Of as M}from"./chunk-69r9j0ms.js";import{eg as H}from"./chunk-rqvejn8x.js";import{createModels as _,createProvider as Y,envApiKeyAuth as x,getSupportedThinkingLevels as E}from"@earendil-works/pi-ai";import{anthropicMessagesApi as F}from"@earendil-works/pi-ai/api/anthropic-messages.lazy";import{openAICompletionsApi as U}from"@earendil-works/pi-ai/api/openai-completions.lazy";import{builtinProviders as P}from"@earendil-works/pi-ai/providers/all";var K=/^[a-z][a-z0-9._-]{0,63}$/,z=/^[A-Z_][A-Z0-9_]*$/,s=new Set(["openai-completions","anthropic-messages"]);function B(u){return typeof u==="string"&&s.has(u)}function X(u,$){let h=`modelProviders.${u}`,b=[];if(!K.test(u))b.push(`${h}: id must match ${K.source}`);if(!$.name?.trim())b.push(`${h}: name must not be empty`);if(!B($.wireApi))b.push(`${h}: wireApi must be openai-completions or anthropic-messages`);try{let w=new URL($.baseUrl);if(!["http:","https:"].includes(w.protocol))b.push(`${h}: baseUrl must be an absolute HTTP(S) URL`)}catch{b.push(`${h}: baseUrl must be an absolute HTTP(S) URL`)}if($.apiKeyEnv!==void 0&&!z.test($.apiKeyEnv))b.push(`${h}: apiKeyEnv must be a valid environment variable name`);if("apiKey"in $)b.push(`${h}: API keys must be stored separately in auth.json`);return b}function J(u,$){let h=$.trim().replace(/\/+$/,"");if(u==="anthropic-messages"&&/\/v1$/i.test(h))return h.slice(0,-3);return h}import{promises as Z}from"node:fs";import j from"node:path";import{Mutex as R}from"async-mutex";import T from"write-file-atomic";class Q{filePath;mutex=new R;constructor(u=j.join(H(),"auth.json")){this.filePath=u}async read(u){return(await this.readAll())[u]}async list(){let u=await this.readAll();return Object.entries(u).map(([$,h])=>({providerId:$,type:h.type}))}async modify(u,$){return this.mutex.runExclusive(async()=>{let h=await this.readAll(),b=h[u],w=await $(b);if(w===void 0)return b;return h[u]=w,await this.writeAll(h),w})}async delete(u){await this.mutex.runExclusive(async()=>{let $=await this.readAll();if(!(u in $))return;delete $[u],await this.writeAll($)})}async readAll(){try{let u=await Z.readFile(this.filePath,"utf8"),$=JSON.parse(u);return $&&typeof $==="object"&&!Array.isArray($)?$:{}}catch(u){if(u.code==="ENOENT")return{};throw u}}async writeAll(u){let $=j.dirname(this.filePath);await Z.mkdir($,{recursive:!0,mode:448}),await Z.chmod($,448),await T(this.filePath,`${JSON.stringify(u,null,2)}
|
|
2
2
|
`,{mode:384}),await Z.chmod(this.filePath,384)}}var q="openai-compatible",G="anthropic-compatible",D="https://api.openai.com/v1",V="https://api.anthropic.com",A=128000,C=32768,t={input:0,output:0,cacheRead:0,cacheWrite:0},f=["openai","anthropic","deepseek","google","moonshotai","moonshotai-cn","zai","zai-coding-cn"];class L{credentials;models;compatibleModels=new Map;anthropicCompatibleModels=new Map;customProviderConfigs=new Map;customProviderModels=new Map;reservedProviderIds=new Set;constructor(u=new Q){this.credentials=u,this.models=_({credentials:u});for(let $ of P())this.models.setProvider($);this.installOpenAICompatibleProvider(),this.installAnthropicCompatibleProvider();for(let $ of this.models.getProviders())this.reservedProviderIds.add($.id)}async listProviders(){return Promise.all(this.models.getProviders().map(async(u)=>{let $=u.getModels(),h=this.customProviderConfigs.get(u.id),b=this.getFactoryWireApi(u.id);return{id:u.id,name:u.name,modelCount:$.length,defaultBaseUrl:u.baseUrl??$[0]?.baseUrl,supportsApiKey:Boolean(u.auth.apiKey),supportsOAuth:Boolean(u.auth.oauth),configured:b?!1:Boolean(await this.models.checkAuth(u.id)),custom:Boolean(h),factoryWireApi:b,wireApi:h?.wireApi,apiKeyEnv:h?.apiKeyEnv}}))}listModels(u){return this.models.getModels(u).map(($)=>this.toCatalogEntry($))}getModel(u,$){let h=this.models.getModel(u,$);if(!h&&u===q)this.registerOpenAICompatibleModel($),h=this.models.getModel(u,$);if(!h&&u===G)this.registerAnthropicCompatibleModel($),h=this.models.getModel(u,$);if(!h&&this.customProviderConfigs.has(u))this.registerCustomProviderModel(u,$),h=this.models.getModel(u,$);if(!h)throw Error(`Unknown pi-ai model: ${u}/${$}`);return h}resolveConfig(u){let $=this.getModel(u.provider,u.model),h=u.overrides;return{...$,...h?.baseUrl?{baseUrl:J($.api,h.baseUrl)}:{},...h?.maxOutputTokens?{maxTokens:h.maxOutputTokens}:{}}}async setApiKey(u,$){this.requireProvider(u),await this.credentials.modify(u,async()=>({type:"api_key",key:$}))}async clearCredential(u){this.requireProvider(u),await this.credentials.delete(u)}async isConfigured(u){return this.requireProvider(u),Boolean(await this.models.checkAuth(u))}isReservedProviderId(u){return this.reservedProviderIds.has(u)}configureModelProviders(u,$){for(let h of this.customProviderConfigs.keys())this.models.deleteProvider(h);this.customProviderConfigs.clear(),this.customProviderModels.clear();for(let[h,b]of Object.entries(u)){let w=$.filter((k)=>k.provider===h).map((k)=>k.model);this.registerModelProvider(h,b,w)}}registerModelProvider(u,$,h=[]){if(this.isReservedProviderId(u))throw Error(`modelProviders.${u}: built-in provider ids cannot be overridden`);let b=X(u,$);if(b.length>0)throw Error(b.join("; "));let w={...$,name:$.name.trim(),baseUrl:J($.wireApi,$.baseUrl),...$.apiKeyEnv?{apiKeyEnv:$.apiKeyEnv.trim()}:{}};this.customProviderConfigs.set(u,w);let k=new Map;for(let y of new Set(h)){let W=y.trim();if(!W)continue;k.set(W,this.createCompatibleModel(u,W,w.wireApi,w.baseUrl))}this.customProviderModels.set(u,k),this.installCustomProvider(u)}unregisterModelProvider(u){if(!this.customProviderConfigs.has(u))return;this.customProviderConfigs.delete(u),this.customProviderModels.delete(u),this.models.deleteProvider(u)}requireProvider(u){if(!this.models.getProvider(u))throw Error(`Unknown pi-ai provider: ${u}`)}registerOpenAICompatibleModel(u){let $=u.trim();if(!$)throw Error("OpenAI-compatible model ID must not be empty");if(this.compatibleModels.has($))return;let h=this.createCompatibleModel(q,$,"openai-completions",D);this.compatibleModels.set($,h),this.installOpenAICompatibleProvider()}registerAnthropicCompatibleModel(u){let $=u.trim();if(!$)throw Error("Anthropic-compatible model ID must not be empty");if(this.anthropicCompatibleModels.has($))return;let h=this.createCompatibleModel(G,$,"anthropic-messages",V);this.anthropicCompatibleModels.set($,h),this.installAnthropicCompatibleProvider()}registerCustomProviderModel(u,$){let h=$.trim();if(!h)throw Error("Custom provider model ID must not be empty");let b=this.customProviderConfigs.get(u),w=this.customProviderModels.get(u);if(!b||!w||w.has(h))return;w.set(h,this.createCompatibleModel(u,h,b.wireApi,b.baseUrl)),this.installCustomProvider(u)}createCompatibleModel(u,$,h,b){let w=this.models.getModels().filter((y)=>y.provider!==u&&!this.customProviderConfigs.has(y.provider)&&y.id===$),k=f.flatMap((y)=>w.filter((W)=>W.provider===y))[0]??w[0];return{id:$,name:k?.name??$,api:h,provider:u,baseUrl:b,reasoning:k?.reasoning??!1,input:k?[...k.input]:["text"],cost:{...t},contextWindow:k?.contextWindow??A,maxTokens:k?.maxTokens??C,...k?.thinkingLevelMap?{thinkingLevelMap:{...k.thinkingLevelMap}}:{}}}installOpenAICompatibleProvider(){this.models.setProvider(Y({id:q,name:"Custom OpenAI Endpoint",baseUrl:D,auth:{apiKey:x("OpenAI-compatible API key",["OPENAI_COMPATIBLE_API_KEY","BLADE_API_KEY"])},models:[...this.compatibleModels.values()],api:U()}))}installAnthropicCompatibleProvider(){this.models.setProvider(Y({id:G,name:"Custom Anthropic Endpoint",baseUrl:V,auth:{apiKey:x("Anthropic-compatible API key",["ANTHROPIC_API_KEY","BLADE_API_KEY"])},models:[...this.anthropicCompatibleModels.values()],api:F()}))}installCustomProvider(u){let $=this.customProviderConfigs.get(u),h=this.customProviderModels.get(u);if(!$||!h)return;let b=$.apiKeyEnv?[$.apiKeyEnv]:[];this.models.setProvider(Y({id:u,name:$.name,baseUrl:$.baseUrl,auth:{apiKey:x(`${$.name} API key`,b)},models:[...h.values()],api:$.wireApi==="anthropic-messages"?F():U()}))}getFactoryWireApi(u){if(u===q)return"openai-completions";if(u===G)return"anthropic-messages";return}toCatalogEntry(u){return{id:u.id,name:u.name,provider:u.provider,api:u.api,baseUrl:u.baseUrl,reasoning:u.reasoning,supportedReasoningEfforts:E(u),supportedServiceTiers:M(u),supportedResponseVerbosities:N(u),input:[...u.input],contextWindow:u.contextWindow,maxTokens:u.maxTokens,cost:{...u.cost}}}}var S;function hu(){return S??=new L,S}
|
|
3
|
-
export{K as
|
|
3
|
+
export{K as Ff,X as Gf,J as Hf,L as If,hu as Jf};
|