blade-code 0.7.8 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/dist/blade.js +2 -2
  2. package/dist/{chunk-rnfd5ebv.js → chunk-06h100e2.js} +1 -1
  3. package/dist/chunk-07jvw0kn.js +1 -0
  4. package/dist/chunk-0dj326ms.js +5 -0
  5. package/dist/chunk-14erxdhd.js +1 -0
  6. package/dist/{chunk-48q9msfk.js → chunk-1pt090dg.js} +38 -38
  7. package/dist/{chunk-cjmxggke.js → chunk-1smf2dj3.js} +2 -2
  8. package/dist/chunk-34pdtz4q.js +3 -0
  9. package/dist/chunk-3gw66r7a.js +2 -0
  10. package/dist/chunk-49g067ek.js +41 -0
  11. package/dist/chunk-6es6av6j.js +2 -0
  12. package/dist/{chunk-g7caymjr.js → chunk-9ad7tt9s.js} +1 -1
  13. package/dist/{chunk-jm2xhnrv.js → chunk-9xkjb87h.js} +1 -1
  14. package/dist/chunk-a12tmmfr.js +1 -0
  15. package/dist/chunk-bggvft3z.js +1 -0
  16. package/dist/{chunk-0e0z8yc1.js → chunk-bm8vwfez.js} +2 -2
  17. package/dist/chunk-bxbagv76.js +9 -0
  18. package/dist/chunk-ctqf59q1.js +2 -0
  19. package/dist/chunk-d08wbxjr.js +1 -0
  20. package/dist/chunk-d4ex0qvs.js +2 -0
  21. package/dist/{chunk-f9ybv4ph.js → chunk-dr06x0cw.js} +1 -1
  22. package/dist/chunk-e4a240t7.js +34 -0
  23. package/dist/{chunk-4dmdn3a9.js → chunk-gsfkrr25.js} +1 -1
  24. package/dist/chunk-gytwh5y1.js +6 -0
  25. package/dist/chunk-hjx5n3dw.js +3 -0
  26. package/dist/chunk-hrnd3wjg.js +6 -0
  27. package/dist/chunk-j39q2kx7.js +1 -0
  28. package/dist/{chunk-4745ktjj.js → chunk-jakzknh3.js} +299 -299
  29. package/dist/chunk-jqr2pknb.js +151 -0
  30. package/dist/{chunk-t70aqrm4.js → chunk-jt62ctz7.js} +1 -1
  31. package/dist/{chunk-t2spryz0.js → chunk-kawv31m3.js} +1 -1
  32. package/dist/chunk-n8ymp6nd.js +1 -0
  33. package/dist/{chunk-s4mke0t6.js → chunk-nned222j.js} +1 -1
  34. package/dist/chunk-qwdbqjh7.js +22 -0
  35. package/dist/chunk-syj3anec.js +6 -0
  36. package/dist/chunk-tv4r86ez.js +24 -0
  37. package/dist/chunk-twem6p0g.js +2 -0
  38. package/dist/chunk-v3ctg84r.js +1 -0
  39. package/dist/chunk-v5rn5r1h.js +1 -0
  40. package/dist/{chunk-fb7amc2s.js → chunk-wmes2tt9.js} +1 -1
  41. package/dist/chunk-xhnyy54e.js +2 -0
  42. package/dist/{chunk-9kejtkey.js → chunk-ychj0e5q.js} +1 -1
  43. package/dist/{chunk-71n472hj.js → chunk-ydb9myhe.js} +1 -1
  44. package/dist/{chunk-6hn2jgw5.js → chunk-yhpm9azy.js} +1 -1
  45. package/dist/{chunk-g6ted982.js → chunk-yqxw7zz4.js} +1 -1
  46. package/dist/web/assets/{FilePreview-DRKRs8i2.js → FilePreview-DvgnEspB.js} +1 -1
  47. package/dist/web/assets/{MarkdownRenderer-DFqPpAnM.js → MarkdownRenderer-e1ZUy6jV.js} +1 -1
  48. package/dist/web/assets/{McpModal-CX5-hlNv.js → McpModal-Raois2g1.js} +1 -1
  49. package/dist/web/assets/SettingsModal-Dzuatoea.js +1 -0
  50. package/dist/web/assets/{SettingsStore-jup_Kikq.js → SettingsStore-BxDA0Usw.js} +1 -1
  51. package/dist/web/assets/{SkillsModal-DaAUrwXO.js → SkillsModal-Cg2-befH.js} +1 -1
  52. package/dist/web/assets/{TerminalPanel-DzlllDH7.js → TerminalPanel-CEoQI9Lu.js} +1 -1
  53. package/dist/web/assets/index-BvGeIa_-.js +16 -0
  54. package/dist/web/assets/index-DDJnZJcp.css +1 -0
  55. package/dist/web/index.html +2 -2
  56. package/package.json +4 -11
  57. package/dist/chunk-1w6tqkxd.js +0 -34
  58. package/dist/chunk-2049tv49.js +0 -41
  59. package/dist/chunk-5be6qr2v.js +0 -2
  60. package/dist/chunk-67vzgcs5.js +0 -2
  61. package/dist/chunk-6811kbxn.js +0 -1
  62. package/dist/chunk-6js5wp6t.js +0 -1
  63. package/dist/chunk-6kp3z956.js +0 -9
  64. package/dist/chunk-78txnq4n.js +0 -151
  65. package/dist/chunk-7r1hm0qz.js +0 -6
  66. package/dist/chunk-a7yjnqhd.js +0 -3
  67. package/dist/chunk-bwaqaktn.js +0 -1
  68. package/dist/chunk-cb82rf5h.js +0 -1
  69. package/dist/chunk-ce11m8bq.js +0 -1
  70. package/dist/chunk-e4rhdg3h.js +0 -1
  71. package/dist/chunk-faq7ay4j.js +0 -24
  72. package/dist/chunk-ky8ctbdc.js +0 -1
  73. package/dist/chunk-mpskff34.js +0 -1
  74. package/dist/chunk-pd1yqxcv.js +0 -9
  75. package/dist/chunk-phhmmybg.js +0 -2
  76. package/dist/chunk-qnevwq1q.js +0 -2
  77. package/dist/chunk-r1spf93b.js +0 -26
  78. package/dist/chunk-z4c68ve0.js +0 -6
  79. package/dist/chunk-z9zbcenc.js +0 -6
  80. package/dist/web/assets/SettingsModal-CfR_q6N7.js +0 -1
  81. package/dist/web/assets/index-BJTSF3fc.js +0 -9
  82. package/dist/web/assets/index-CL6apjgo.css +0 -1
package/dist/blade.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{n as B}from"./chunk-fb7amc2s.js";import{fa as D,ga as F}from"./chunk-0e0z8yc1.js";import"./chunk-faq7ay4j.js";import"./chunk-r1spf93b.js";import"./chunk-2049tv49.js";import"./chunk-t70aqrm4.js";import{Bb as q,zb as E}from"./chunk-4dmdn3a9.js";import{Yb as H}from"./chunk-a7yjnqhd.js";import{$b as J}from"./chunk-f9ybv4ph.js";var X=process.argv.slice(2),$=v(X),w=$!==null;if($!==null)H.setGlobalDebug($);function v(Q){for(let W=0;W<Q.length;W+=1){let T=Q[W];if(T==="--debug"||T==="-d"){let N=Q[W+1];return N&&!N.startsWith("-")?N:!0}if(T.startsWith("--debug="))return T.slice(8)||!0}return null}function C(Q){return Q.length===1&&(Q[0]==="--version"||Q[0]==="-V")}function z(Q,...W){return Q.some((T)=>W.some((N)=>T===N||T.startsWith(`${N}=`)))}async function f(){if(C(X)){let{getVersion:K}=await import("./chunk-ce11m8bq.js");console.log(K());return}let Q=D(process.cwd());if(F(Q),E(q()),process.getuid&&process.getuid()===0){let K=!!process.env.SUDO_USER,U=!!process.env.BLADE_ALLOW_ROOT;if(K&&!U)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(z(X,"--headless")){let{handleHeadlessMode:K}=await import("./chunk-z9zbcenc.js");if(await K())return}if(B(),z(X,"--print","-p")){let{handlePrintMode:K}=await import("./chunk-z4c68ve0.js");if(await K())return}if(X.includes("--acp")){let{runAcpIntegration:K}=await import("./chunk-pd1yqxcv.js");await K();return}let[{default:W},{hideBin:T},{cliConfig:N,globalOptions:G},{loadConfiguration:I,validateOutput:L,validatePermissions:M},{doctorCommands:_},{installCommands:y},{mcpCommands:R},{serveCommand:S},{updateCommands:k},{webCommand:O}]=await Promise.all([import("yargs"),import("yargs/helpers"),import("./chunk-cb82rf5h.js"),import("./chunk-ky8ctbdc.js"),import("./chunk-rnfd5ebv.js"),import("./chunk-t2spryz0.js"),import("./chunk-9kejtkey.js"),import("./chunk-6js5wp6t.js"),import("./chunk-6hn2jgw5.js"),import("./chunk-71n472hj.js")]),x=W(T(process.argv)).scriptName(N.scriptName).usage(N.usage).version(N.version).locale(N.locale).showHelpOnFail(N.showHelpOnFail).demandCommand(0,"").recommendCommands().strict(N.strict).parserConfiguration({"populate--":!0}).options(G).middleware([I,M,L]).command(R).command(_).command(k).command(y).command(O).command(S).completion("completion",!1).help("help","Show help").alias("help","h").alias("version","V").fail((K,U,Z)=>{if(U){if(console.error("An error occurred:"),console.error(U.message),w&&U.stack)console.error(`
2
+ import{n as B}from"./chunk-wmes2tt9.js";import{ea as D,fa as F}from"./chunk-bm8vwfez.js";import"./chunk-tv4r86ez.js";import"./chunk-qwdbqjh7.js";import"./chunk-49g067ek.js";import"./chunk-ctqf59q1.js";import"./chunk-jt62ctz7.js";import{Gb as E,Ib as q}from"./chunk-gsfkrr25.js";import{Sb as H}from"./chunk-34pdtz4q.js";import"./chunk-hjx5n3dw.js";import{ec as J}from"./chunk-dr06x0cw.js";var X=process.argv.slice(2),$=v(X),w=$!==null;if($!==null)H.setGlobalDebug($);function v(Q){for(let W=0;W<Q.length;W+=1){let T=Q[W];if(T==="--debug"||T==="-d"){let N=Q[W+1];return N&&!N.startsWith("-")?N:!0}if(T.startsWith("--debug="))return T.slice(8)||!0}return null}function C(Q){return Q.length===1&&(Q[0]==="--version"||Q[0]==="-V")}function z(Q,...W){return Q.some((T)=>W.some((N)=>T===N||T.startsWith(`${N}=`)))}async function f(){if(C(X)){let{getVersion:K}=await import("./chunk-bggvft3z.js");console.log(K());return}let Q=D(process.cwd());if(F(Q),E(q()),process.getuid&&process.getuid()===0){let K=!!process.env.SUDO_USER,U=!!process.env.BLADE_ALLOW_ROOT;if(K&&!U)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(z(X,"--headless")){let{handleHeadlessMode:K}=await import("./chunk-hrnd3wjg.js");if(await K())return}if(B(),z(X,"--print","-p")){let{handlePrintMode:K}=await import("./chunk-gytwh5y1.js");if(await K())return}if(X.includes("--acp")){let{runAcpIntegration:K}=await import("./chunk-bxbagv76.js");await K();return}let[{default:W},{hideBin:T},{cliConfig:N,globalOptions:G},{loadConfiguration:I,validateOutput:L,validatePermissions:M},{doctorCommands:_},{installCommands:y},{mcpCommands:R},{serveCommand:S},{updateCommands:k},{webCommand:O}]=await Promise.all([import("yargs"),import("yargs/helpers"),import("./chunk-n8ymp6nd.js"),import("./chunk-14erxdhd.js"),import("./chunk-06h100e2.js"),import("./chunk-kawv31m3.js"),import("./chunk-ychj0e5q.js"),import("./chunk-d08wbxjr.js"),import("./chunk-yhpm9azy.js"),import("./chunk-ydb9myhe.js")]),x=W(T(process.argv)).scriptName(N.scriptName).usage(N.usage).version(N.version).locale(N.locale).showHelpOnFail(N.showHelpOnFail).demandCommand(0,"").recommendCommands().strict(N.strict).parserConfiguration({"populate--":!0}).options(G).middleware([I,M,L]).command(R).command(_).command(k).command(y).command(O).command(S).completion("completion",!1).help("help","Show help").alias("help","h").alias("version","V").fail((K,U,Z)=>{if(U){if(console.error("An error occurred:"),console.error(U.message),w&&U.stack)console.error(`
3
3
  Stack trace:`),console.error(U.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:`),Z.showHelp(),process.exit(1)}).command("$0",!1,()=>{},async(K)=>{let U=K._.slice(1),Z=U.length>0?U.join(" "):void 0,V=import("./chunk-e4rhdg3h.js").then(({checkVersionOnStartup:A})=>A()),[{render:b},{createElement:P},{AppWrapper:h}]=await Promise.all([import("ink"),import("react"),import("./chunk-78txnq4n.js")]),Y={...K,initialMessage:Z,debug:K.debug,print:Boolean(K.print),versionCheckPromise:V};delete Y._,delete Y.$0,delete Y.message,b(P(h,Y),{patchConsole:!0,exitOnCtrlC:!1,alternateBuffer:!1})});try{await x.parse()}catch(K){console.error("Error: Parse error:",K),process.exit(1)}}if(J.main==J.module)f().catch(console.error);export{f as main};
5
+ Hint: Did you mean:`),Z.showHelp(),process.exit(1)}).command("$0",!1,()=>{},async(K)=>{let U=K._.slice(1),Z=U.length>0?U.join(" "):void 0,V=import("./chunk-v3ctg84r.js").then(({checkVersionOnStartup:A})=>A()),[{render:b},{createElement:P},{AppWrapper:h}]=await Promise.all([import("ink"),import("react"),import("./chunk-jqr2pknb.js")]),Y={...K,initialMessage:Z,debug:K.debug,print:Boolean(K.print),versionCheckPromise:V};delete Y._,delete Y.$0,delete Y.message,b(P(h,Y),{patchConsole:!0,exitOnCtrlC:!1,alternateBuffer:!1})});try{await x.parse()}catch(K){console.error("Error: Parse error:",K),process.exit(1)}}if(J.main==J.module)f().catch(console.error);export{f as main};
@@ -1,3 +1,3 @@
1
- import{Fa as t}from"./chunk-r1spf93b.js";import{Bb as r}from"./chunk-4dmdn3a9.js";import"./chunk-a7yjnqhd.js";import{$b as s}from"./chunk-f9ybv4ph.js";var m={command:"doctor",describe:"Check the health of your Blade installation",handler:async()=>{console.log(`Running Blade health check...
1
+ import{Ea as t}from"./chunk-qwdbqjh7.js";import{Ib as r}from"./chunk-gsfkrr25.js";import"./chunk-34pdtz4q.js";import"./chunk-hjx5n3dw.js";import{ec as s}from"./chunk-dr06x0cw.js";var m={command:"doctor",describe:"Check the health of your Blade installation",handler:async()=>{console.log(`Running Blade health check...
2
2
  `);let e=0;try{await t.getInstance().initialize(),console.log("[OK] Configuration: OK")}catch(o){console.log("[FAIL] Configuration: FAILED"),console.log(` Error: ${o instanceof Error?o.message:"未知错误"}`),e++}let n=process.version;if(parseInt(n.slice(1).split(".")[0])>=18)console.log(`[OK] Node.js version: ${n}`);else console.log(`[WARN] Node.js version: ${n} (recommended: v18+)`),e++;try{let o=await import("fs/promises"),i=r();await o.access(i,(await import("fs")).constants.R_OK|(await import("fs")).constants.W_OK),console.log("[OK] File system permissions: OK")}catch(o){console.log("[FAIL] File system permissions: FAILED"),console.log(" Error: Cannot read/write in current directory"),e++}try{await import("ink"),console.log("[OK] Dependencies: OK")}catch(o){console.log("[FAIL] Dependencies: FAILED"),console.log(" Error: Missing required dependencies"),e++}if(console.log(`
3
3
  Health Check Summary:`),e===0)console.log("All checks passed! Blade is ready to use.");else console.log(`Warning: Found ${e} issue(s). Please resolve them for optimal performance.`),process.exit(1)}};export{m as doctorCommands};
@@ -0,0 +1 @@
1
+ import{$a as e,Wa as a,Xa as b,Za as c,_a as d,ab as f,bb as g,cb as h,db as i,eb as j,fb as k,gb as l,hb as m,ib as n,jb as o,mb as p,nb as q,ob as r}from"./chunk-1pt090dg.js";import"./chunk-9xkjb87h.js";import"./chunk-49g067ek.js";import"./chunk-ctqf59q1.js";import"./chunk-jt62ctz7.js";import"./chunk-gsfkrr25.js";import"./chunk-0dj326ms.js";import"./chunk-34pdtz4q.js";import"./chunk-hjx5n3dw.js";import"./chunk-dr06x0cw.js";export{g as saveUserMessage,i as saveToolUse,j as saveToolResult,k as saveCompaction,h as saveAssistantMessage,d as isRootSystemPrompt,l as handleTaskListUpdate,m as handleSkillActivation,n as extractModelSwitch,r as executeLoopGenerator,f as drainLoop,c as checkStopHook,a as checkOutputRecovery,b as checkIncompleteIntent,q as checkAndCompactInLoop,o as applyToolDomainEffects,p as StreamingToolExecutor,e as ConversationState};
@@ -0,0 +1,5 @@
1
+ import{Tb as f}from"./chunk-34pdtz4q.js";import{dc as x}from"./chunk-hjx5n3dw.js";var S={openrouter:{"HTTP-Referer":"https://github.com/echoVic/blade-code","X-Title":"Blade"},cerebras:{"X-Cerebras-3rd-Party-Integration":"blade"}},w=(e)=>S[e]||{};var z=new Set(["user-cancel","interrupt","sibling-error","timeout"]);function g(e){return typeof e==="string"&&z.has(e)}function J(e){if(!e.aborted)return;if(g(e.reason))return e.reason;return"user-cancel"}function Z(e){if(g(e))return!0;if(!(e instanceof Error))return!1;if(e.name==="AbortError")return!0;if(e instanceof DOMException&&e.name==="AbortError")return!0;if(e.message.includes("aborted"))return!0;return!1}function Q(...e){let t=e.filter(Boolean);if(t.length===0)return new AbortController().signal;if(t.length===1)return t[0];let o=AbortSignal;if(typeof o.any==="function")return o.any(t);for(let s of t)if(s.aborted)return s;let r=new AbortController,i=new Map;for(let s of t){let a=()=>{r.abort(s.reason);for(let[l,n]of i)l.removeEventListener("abort",n)};i.set(s,a)}for(let[s,a]of i)s.addEventListener("abort",a,{once:!0});return r.signal}function C(e,t,o){let r=o?.throwOnAbort??!1;if(t?.aborted){if(r)return Promise.reject(new DOMException("Aborted","AbortError"));return Promise.resolve()}return new Promise((i,s)=>{let a,l=setTimeout(()=>{if(t&&a)t.removeEventListener("abort",a);i()},e);if(t)a=()=>{if(clearTimeout(l),r)s(new DOMException("Aborted","AbortError"));else i()},t.addEventListener("abort",a,{once:!0})})}var D=f("Chat"),q={input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}};function k(e){if(typeof e==="string")return e;return e.filter((t)=>t.type==="text").map((t)=>t.text).join(`
2
+ `)}function j(e){if(!e)return{};try{let t=JSON.parse(e);return t&&typeof t==="object"&&!Array.isArray(t)?t:{}}catch{return D.warn("[PiAIChatService] Invalid historical tool arguments",{value:e}),{}}}function B(e){let t=e.match(/^data:([^;,]+);base64,(.+)$/s);return t?{mimeType:t[1],data:t[2]}:void 0}async function F(e,t){let o=B(e);if(o)return{type:"image",...o};if(!/^https?:\/\//i.test(e))return{type:"text",text:`[Unsupported image source: ${e}]`};let r=await fetch(e,{signal:t});if(!r.ok)throw Error(`Failed to load image ${e}: HTTP ${r.status}`);return{type:"image",mimeType:r.headers.get("content-type")?.split(";")[0]??"image/png",data:Buffer.from(await r.arrayBuffer()).toString("base64")}}async function R(e,t,o,r,i){let s=e.filter((n)=>n.role==="system").map((n)=>k(n.content)).filter(Boolean).join(`
3
+
4
+ `),a=[];for(let n of e){if(n.role==="system")continue;if(n.role==="user"){let p=typeof n.content==="string"?n.content:await Promise.all(n.content.map((c)=>c.type==="text"?Promise.resolve({type:"text",text:c.text}):F(c.image_url.url,r)));a.push({role:"user",content:p,timestamp:Date.now()});continue}if(n.role==="assistant"){let p=[];if(n.reasoningContent?.trim())p.push({type:"thinking",thinking:n.reasoningContent});let c=k(n.content);if(c)p.push({type:"text",text:c});for(let u of n.tool_calls??[]){if(!("function"in u))continue;p.push({type:"toolCall",id:u.id,name:u.function.name,arguments:j(u.function.arguments)})}a.push({role:"assistant",content:p,api:t.api,provider:t.provider,model:t.id,usage:q,stopReason:n.tool_calls?.length?"toolUse":"stop",timestamp:Date.now()});continue}a.push({role:"toolResult",toolCallId:n.tool_call_id??"",toolName:n.name??"unknown",content:[{type:"text",text:k(n.content)}],isError:!1,timestamp:Date.now()})}let l=o?.filter((n)=>!i||n.name===i).map((n)=>({name:n.name,description:n.description,parameters:n.parameters}));return{...s?{systemPrompt:s}:{},messages:a,...l?.length?{tools:l}:{}}}function P(e){let t=[];for(let o=0;o<e.length;o++){let r=e[o];if(r.role==="tool")continue;let i=r.role==="assistant"&&r.tool_calls?.length?r.tool_calls:void 0;if(!i){t.push(r);continue}let s=[],a=o+1;while(a<e.length&&e[a].role==="tool")s.push(e[a++]);let l=new Set(i.map((c)=>c.id)),n=s.filter((c)=>c.tool_call_id&&l.has(c.tool_call_id)),p=new Set(n.map((c)=>c.tool_call_id));if(l.size===i.length&&n.length===l.size&&p.size===l.size)t.push(r,...n);o=a-1}return t}function O(e){return e.some((t)=>t.role==="assistant"&&Boolean(t.tool_calls?.length)&&!t.reasoningContent?.trim())}function A(e,t){return{...e,...t.baseUrl?{baseUrl:t.baseUrl}:{},...t.maxOutputTokens?{maxTokens:t.maxOutputTokens}:{}}}function y(e){let t=x();return{models:t.models,model:A(t.getModel(e.provider,e.model),e)}}function I(e,t){let o=x();return A(o.getModel(t.provider,t.model),e)}function W(e){if(!e.reasoningEnabled)return;return e.reasoningLevel??"high"}function $(e,t,o,r){let i=r?void 0:W(o);if(!i){if(t.api==="anthropic-messages")e.thinkingEnabled=!1;return}switch(t.api){case"anthropic-messages":e.thinkingEnabled=!0,e.effort=i;break;case"google-generative-ai":case"google-vertex":e.thinking={enabled:!0};break;case"bedrock-converse-stream":case"pi-messages":e.reasoning=i;break;default:e.reasoningEffort=i}}function L(e,t,o){if(!o)return;switch(t){case"anthropic-messages":case"bedrock-converse-stream":e.toolChoice={type:"tool",name:o};break;case"openai-completions":case"mistral-conversations":case"pi-messages":e.toolChoice={type:"function",function:{name:o}};break;case"openai-responses":case"openai-codex-responses":case"azure-openai-responses":e.toolChoice={type:"function",name:o};break;case"google-generative-ai":case"google-vertex":e.toolChoice="any";break}}function _(e,t,o,r,i=!1){let s={apiKey:e.apiKey,headers:e.customHeaders,signal:o,temperature:e.temperature??0,maxTokens:e.maxOutputTokens,timeoutMs:e.timeout,maxRetries:0,cacheRetention:e.enablePromptCaching?"short":"none"};if($(s,t,e,i),L(s,t.api,r?.toolChoice?.toolName),t.api==="azure-openai-responses")s.azureBaseUrl=e.baseUrl,s.azureApiVersion=e.apiVersion,s.azureDeploymentName=t.id;return s}function v(e){return{promptTokens:e.input+e.cacheRead+e.cacheWrite,completionTokens:e.output,totalTokens:e.totalTokens,costUsd:e.cost.total,...e.reasoning!==void 0?{reasoningTokens:e.reasoning}:{},...e.cacheWrite>0?{cacheCreationInputTokens:e.cacheWrite}:{},...e.cacheRead>0?{cacheReadInputTokens:e.cacheRead}:{}}}function M(e){let t=e instanceof Error?e.message.toLowerCase():String(e).toLowerCase();if(["prompt_too_long","prompt is too long","maximum context length","context length exceeded","context_length_exceeded","request too large"].some((i)=>t.includes(i)))return!1;if(t.match(/\b(?:status(?:\s+code)?|http)[:\s]+(408|409|429|5\d\d)\b/))return!0;return["timeout","timed out","econnreset","econnrefused","enotfound","eai_again","etimedout","fetch failed","network error","socket hang up"].some((i)=>t.includes(i))}async function*E(e,t,o,r){let i=e.stream(t,o,r),s=0;for await(let a of i)switch(a.type){case"text_delta":yield{content:a.delta};break;case"thinking_delta":yield{reasoningContent:a.delta};break;case"toolcall_end":yield{toolCalls:[{index:s++,id:a.toolCall.id,type:"function",function:{name:a.toolCall.name,arguments:JSON.stringify(a.toolCall.arguments)}}]};break;case"done":yield{finishReason:a.reason,usage:v(a.message.usage)};break;case"error":throw Error(a.error.errorMessage??`Request ${a.reason==="aborted"?"aborted":"failed"}`)}}var N=f("Chat");class T{config;models;model;constructor(e){let t=y(e);this.config={...e,maxContextTokens:t.model.contextWindow,maxOutputTokens:e.maxOutputTokens??t.model.maxTokens},this.models=t.models,this.model=t.model,N.debug("[PiAIChatService] Initialized",{provider:this.model.provider,model:this.model.id,api:this.model.api})}async chat(e,t,o,r){let i="",s="",a=[],l,n;for await(let p of this.streamChat(e,t,o,r)){i+=p.content??"",s+=p.reasoningContent??"";for(let c of p.toolCalls??[])if(c.id&&c.type==="function"&&c.function?.name)a.push(c);l=p.usage??l,n=p.finishReason??n}return{content:i,...s?{reasoningContent:s}:{},...a.length>0?{toolCalls:a}:{},usage:l,finishReason:n}}async*streamChat(e,t,o,r){let i=r?.toolChoice?.toolName;if(i&&!t?.some((m)=>m.name===i))throw Error(`Required tool is unavailable: ${i}`);let s=P(e),a=Boolean(i)||O(s),l=await R(s,this.model,t,o,i),n=(m)=>E(this.models,m,l,_(this.config,m,o,r,a)),p=this.config.maxRetries??2,c,u=!1;for(let m=0;m<=p;m++)try{for await(let d of n(this.model))u=!0,yield d;return}catch(d){if(c=d,await this.handleAbort(o),u||!M(d))throw d;if(m<p)await C(1000*2**m,o,{throwOnAbort:!0})}for(let m of this.config.fallbackModels??[]){yield{modelFallback:!0};let d=!1;try{let h=I(this.config,m);for await(let U of n(h))d=!0,yield U;return}catch(h){if(c=h,await this.handleAbort(o),d||!M(h))throw h}}throw c}async handleAbort(e){if(e?.aborted)await C(0,e,{throwOnAbort:!0})}getConfig(){return{...this.config}}updateConfig(e){let t={...this.config,...e},o=y(t);this.config={...t,maxContextTokens:o.model.contextWindow,maxOutputTokens:t.maxOutputTokens??o.model.maxTokens},this.models=o.models,this.model=o.model}}var V=f("Service");async function xe(e){let t=e;if(t.provider){let o=w(t.provider);if(Object.keys(o).length>0)t={...t,customHeaders:{...o,...t.customHeaders}},V.debug(`Injected ${t.provider} specific headers:`,Object.keys(o))}return G(t)}function G(e){return new T(e)}
5
+ export{J as Mb,Z as Nb,Q as Ob,xe as Pb};
@@ -0,0 +1 @@
1
+ import{v as a,w as b,x as c}from"./chunk-syj3anec.js";import"./chunk-twem6p0g.js";import"./chunk-9ad7tt9s.js";import"./chunk-tv4r86ez.js";import"./chunk-qwdbqjh7.js";import"./chunk-ctqf59q1.js";import"./chunk-jt62ctz7.js";import"./chunk-gsfkrr25.js";import"./chunk-34pdtz4q.js";import"./chunk-hjx5n3dw.js";import"./chunk-dr06x0cw.js";export{a as validatePermissions,c as validateOutput,b as loadConfiguration};