@swifty.js/swifty 0.0.36 → 0.0.37
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/README.md +8 -8
- package/dist/{acp-ZU5LZRUP.js → acp-R22FJPVN.js} +1 -1
- package/dist/{agent-YDU6HB4S.js → agent-WOWGQDBG.js} +1 -1
- package/dist/anthropic-3DXT42SN.js +4 -0
- package/dist/{chunk-MTAGHTBG.js → chunk-ENZ5LHRN.js} +4 -4
- package/dist/{chunk-RDVRYI56.js → chunk-FOPUR6OB.js} +11 -11
- package/dist/{chunk-EEEW3GG4.js → chunk-LW273HD5.js} +1 -1
- package/dist/{chunk-Q3NPRV5P.js → chunk-QBGGDF62.js} +1 -1
- package/dist/{chunk-MNP6IJ7C.js → chunk-R62BGTT4.js} +2 -2
- package/dist/chunk-S2VEXEVV.js +4 -0
- package/dist/{chunk-H56UQALW.js → chunk-VN7HK3YD.js} +1 -1
- package/dist/chunk-YBS5ATGZ.js +4 -0
- package/dist/esm-VBV56AO5.js +229 -0
- package/dist/lib/{agent-ZMIS6IH6.js → agent-ZSFK66FQ.js} +2 -2
- package/dist/lib/{anthropic-FKIGL7NL.js → anthropic-GD3ILYG6.js} +1 -1
- package/dist/lib/{chunk-YUDCYSKO.js → chunk-5OJV33Y2.js} +17 -9
- package/dist/lib/{chunk-LRN4MOQ3.js → chunk-GWZDEU27.js} +0 -5
- package/dist/lib/{chunk-ALQHMYOZ.js → chunk-LKFJIK6F.js} +0 -3
- package/dist/lib/{chunk-PJ7354ZG.js → chunk-O35GIE35.js} +1 -1
- package/dist/lib/{chunk-6V7RW6HA.js → chunk-TD7Z6L4D.js} +10 -13
- package/dist/lib/index.d.ts +215 -491
- package/dist/lib/index.js +17 -358
- package/dist/lib/{openai-ZWIYIBLC.js → openai-N6X7XUQJ.js} +1 -1
- package/dist/lib/{providers-5SJFTU2G.js → providers-WQ3UOLMF.js} +1 -1
- package/dist/lib/{tool-filter-QU4LOZII.js → tool-filter-S3ZZOXFD.js} +1 -1
- package/dist/main.js +164 -164
- package/dist/{openai-7LMX5HKW.js → openai-XMJVVTTX.js} +1 -1
- package/dist/{providers-FQCJFM3Q.js → providers-NWLGMQOZ.js} +1 -1
- package/dist/{server-C6H5ZWUG.js → server-TINTK5DM.js} +1 -1
- package/dist/{tool-filter-U5SSL3LR.js → tool-filter-QETBQPHL.js} +1 -1
- package/package.json +2 -2
- package/dist/anthropic-GDT73MMP.js +0 -4
- package/dist/chunk-I7XJSLRI.js +0 -4
- package/dist/chunk-UJGMTIYO.js +0 -4
- package/dist/esm-PDXUGWFK.js +0 -229
|
@@ -31,4 +31,4 @@ new OpenAI({ apiKey, dangerouslyAllowBrowser: true });
|
|
|
31
31
|
|
|
32
32
|
https://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety
|
|
33
33
|
`);this.baseURL=m.baseURL,this.timeout=m.timeout??eo.DEFAULT_TIMEOUT,this.logger=m.logger??console;let w="warn";this.logLevel=w,this.logLevel=wn(m.logLevel,"ClientOptions.logLevel",this)??wn(le("OPENAI_LOG"),"process.env['OPENAI_LOG']",this)??w,this.fetchOptions=m.fetchOptions,this.maxRetries=m.maxRetries??2,this.fetch=m.fetch??Cs(),x(this,ys,mo,"f");let P=t?void 0:le("OPENAI_CUSTOM_HEADERS");if(P){let b={};for(let I of P.split(`
|
|
34
|
-
`)){let $=I.indexOf(":");$>=0&&(b[I.substring(0,$).trim()]=I.substring($+1).trim())}m.defaultHeaders=d([b,m.defaultHeaders])}this._options=m,this._provider=_,p&&(this._workloadIdentityAuth=new Ts(p,this.fetch)),this.apiKey=typeof n=="string"?n:null,this.adminAPIKey=o,this.organization=a,this.project=l,this.webhookSecret=f}withOptions(e){let t=this._options.provider,s=e.provider??t,n={...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this._options.apiKey,adminAPIKey:this.adminAPIKey,workloadIdentity:this._options.workloadIdentity,organization:this.organization,project:this.project,webhookSecret:this.webhookSecret};return s&&(delete n.apiKey,delete n.adminAPIKey,delete n.workloadIdentity,delete n.baseURL,s!==t&&(delete n.organization,delete n.project,delete n.defaultHeaders)),new this.constructor({...n,...e,provider:s})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t},s={bearerAuth:!0,adminAPIKeyAuth:!0}){if(!(e.get("authorization")||e.get("api-key"))&&!(t.has("authorization")||t.has("api-key"))&&!(this._workloadIdentityAuth&&s.bearerAuth))throw new Error('Could not resolve authentication method. Expected either apiKey or adminAPIKey to be set. Or for one of the "Authorization" or "api-key" headers to be explicitly omitted')}async authHeaders(e,t={bearerAuth:!0,adminAPIKeyAuth:!0}){return d([t.bearerAuth?await this.bearerAuth(e):null,t.adminAPIKeyAuth?await this.adminAPIKeyAuth(e):null])}async bearerAuth(e){if(this._workloadIdentityAuth)return d([{Authorization:`Bearer ${await this._workloadIdentityAuth.getToken()}`}]);if(this.apiKey!=null)return d([{Authorization:`Bearer ${this.apiKey}`}])}async adminAPIKeyAuth(e){if(this.adminAPIKey!=null)return d([{Authorization:`Bearer ${this.adminAPIKey}`}])}stringifyQuery(e){return xo(e)}getUserAgent(){return`${this.constructor.name}/JS ${Ee}`}defaultIdempotencyKey(){return`stainless-node-retry-${Je()}`}makeStatusError(e,t,s,n){return F.generate(e,t,s,n)}async _callApiKey(){if(this._provider)return!1;let e=this._options.apiKey;if(typeof e!="function")return!1;let t;try{t=await e()}catch(s){throw s instanceof g?s:new g(`Failed to get token from 'apiKey' function: ${s.message}`,{cause:s})}if(typeof t!="string"||!t)throw new g(`Expected 'apiKey' function argument to return a string but it returned ${t}`);return this.apiKey=t,!0}buildURL(e,t,s){let n=!c(this,Zn,"m",_i).call(this)&&s||this.baseURL,o=no(e)?new URL(e):new URL(n+(n.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),a=this.defaultQuery(),l=Object.fromEntries(o.searchParams);return(!pn(a)||!pn(l))&&(t={...l,...a,...t}),typeof t=="object"&&t&&!Array.isArray(t)&&(o.search=this.stringifyQuery(t)),o.toString()}async prepareOptions(e){if(this._provider)return;(e.__security??{bearerAuth:!0}).bearerAuth&&await this._callApiKey()}async prepareRequest(e,{url:t,options:s}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,s){return this.request(Promise.resolve(s).then(n=>({method:e,path:t,...n})))}request(e,t=null){return new Ge(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,s){let n=await e,o=n.maxRetries??this.maxRetries;t==null&&(t=o),await this.prepareOptions(n);let{req:a,url:l,timeout:f}=await this.buildRequest(n,{retryCount:o-t}),p=n.__metadata?.hasStreamingBody===!0;await this.prepareRequest(a,{url:l,options:n}),await this._provider?.prepareRequest?.(a,{url:l,options:n});let h="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),_=s===void 0?"":`, retryOf: ${s}`,m=Date.now();if(K(this).debug(`[${h}] sending request`,Ae({retryOfRequestLogID:s,method:n.method,url:l,options:n,headers:a.headers})),n.signal?.aborted)throw new M;let w=n.__security??{bearerAuth:!0},P=new AbortController,b=await this.fetchWithAuth(l,a,f,P,w).catch(Jr),I=Date.now();if(b instanceof globalThis.Error){let E=`retrying, ${t} attempts remaining`;if(n.signal?.aborted)throw new M;let y=Wr(b)||/timed? ?out/i.test(String(b)+("cause"in b?String(b.cause):""));if(t&&!p)return K(this).info(`[${h}] connection ${y?"timed out":"failed"} - ${E}`),K(this).debug(`[${h}] connection ${y?"timed out":"failed"} (${E})`,Ae({retryOfRequestLogID:s,url:l,durationMs:I-m,message:b.message})),this.retryRequest(n,t,s??h);let C=p?"error; streaming body cannot be retried":"error; no more retries left";throw K(this).info(`[${h}] connection ${y?"timed out":"failed"} - ${C}`),K(this).debug(`[${h}] connection ${y?"timed out":"failed"} (${C})`,Ae({retryOfRequestLogID:s,url:l,durationMs:I-m,message:b.message})),b instanceof Xe||b instanceof Xr?b:y?new $e:new ke({message:Nu(b),cause:b})}let $=[...b.headers.entries()].filter(([E])=>E==="x-request-id").map(([E,y])=>", "+E+": "+JSON.stringify(y)).join(""),A=`[${h}${_}${$}] ${a.method} ${l} ${b.ok?"succeeded":"failed"} with status ${b.status} in ${I-m}ms`;if(!b.ok){if(b.status===401&&this._workloadIdentityAuth&&w.bearerAuth&&!n.__metadata?.hasStreamingBody&&!n.__metadata?.workloadIdentityTokenRefreshed)return await fn(b.body),this._workloadIdentityAuth.invalidateToken(),this.makeRequest({...n,__metadata:{...n.__metadata,workloadIdentityTokenRefreshed:!0}},t,s??h);let E=await this.shouldRetry(b);if(t&&E&&!p){let N=`retrying, ${t} attempts remaining`;return await fn(b.body),K(this).info(`${A} - ${N}`),K(this).debug(`[${h}] response error (${N})`,Ae({retryOfRequestLogID:s,url:b.url,status:b.status,headers:b.headers,durationMs:I-m})),this.retryRequest(n,t,s??h,b.headers)}let y=E?p?"error; streaming body cannot be retried":"error; no more retries left":"error; not retryable";K(this).info(`${A} - ${y}`);let C=await b.text().catch(N=>Jr(N).message),k=ao(C),L=k?void 0:C;throw K(this).debug(`[${h}] response error (${y})`,Ae({retryOfRequestLogID:s,url:b.url,status:b.status,headers:b.headers,message:L,durationMs:Date.now()-m})),this.makeStatusError(b.status,k,L,b.headers)}return K(this).info(A),K(this).debug(`[${h}] response start`,Ae({retryOfRequestLogID:s,url:b.url,status:b.status,headers:b.headers,durationMs:I-m})),{response:b,options:n,controller:P,requestLogID:h,retryOfRequestLogID:s,startTime:m}}getAPIList(e,t,s){return this.requestAPIList(t,s&&"then"in s?s.then(n=>({method:"get",path:e,...n})):{method:"get",path:e,...s})}requestAPIList(e,t){let s=this.makeRequest(t,null,void 0);return new es(this,s,e)}async fetchWithAuth(e,t,s,n,o={bearerAuth:!0,adminAPIKeyAuth:!0}){if(this._workloadIdentityAuth&&o.bearerAuth){let l=t.headers,f=l.get("Authorization");if(!f||f===`Bearer ${ju}`){let p=await this._workloadIdentityAuth.getToken();l.set("Authorization",`Bearer ${p}`)}}return await this.fetchWithTimeout(e,t,s,n)}async fetchWithTimeout(e,t,s,n){let{signal:o,method:a,...l}=t||{},f=this._makeAbort(n);o&&o.addEventListener("abort",f,{once:!0});let p=setTimeout(f,s),h=globalThis.ReadableStream&&l.body instanceof globalThis.ReadableStream||typeof l.body=="object"&&l.body!==null&&Symbol.asyncIterator in l.body,_={signal:n.signal,...h?{duplex:"half"}:{},method:"GET",...l};a&&(_.method=a.toUpperCase());try{return await this.fetch.call(void 0,e,_)}finally{clearTimeout(p)}}async shouldRetry(e){let t=e.headers.get("x-should-retry");return t==="true"?!0:t==="false"?!1:e.status===408||e.status===409||e.status===429||e.status>=500}async retryRequest(e,t,s,n){let o,a=n?.get("retry-after-ms");if(a){let f=parseFloat(a);Number.isNaN(f)||(o=f)}let l=n?.get("retry-after");if(l&&!o){let f=parseFloat(l);Number.isNaN(f)?o=Date.parse(l)-Date.now():o=f*1e3}if(o===void 0){let f=e.maxRetries??this.maxRetries;o=this.calculateDefaultRetryTimeoutMillis(t,f)}return await he(o),this.makeRequest(e,t-1,s)}calculateDefaultRetryTimeoutMillis(e,t){let o=t-e,a=Math.min(.5*Math.pow(2,o),8),l=1-Math.random()*.25;return a*l*1e3}async buildRequest(e,{retryCount:t=0}={}){let s={...e},{method:n,path:o,query:a,defaultBaseURL:l}=s,f=this.buildURL(o,a,l);"timeout"in s&&io("timeout",s.timeout),s.timeout=s.timeout??this.timeout;let{bodyHeaders:p,body:h,isStreamingBody:_}=this.buildBody({options:s});_&&(e.__metadata={...e.__metadata,hasStreamingBody:!0});let m=await this.buildHeaders({options:e,method:n,bodyHeaders:p,retryCount:t});return{req:{method:n,headers:m,...s.signal&&{signal:s.signal},...globalThis.ReadableStream&&h instanceof globalThis.ReadableStream&&{duplex:"half"},...h&&{body:h},...this.fetchOptions??{},...s.fetchOptions??{}},url:f,timeout:s.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:s,retryCount:n}){let o={};this.idempotencyHeader&&t!=="get"&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),o[this.idempotencyHeader]=e.idempotencyKey);let a=d([o,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(n),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...fo(),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project},this._provider?void 0:await this.authHeaders(e,e.__security??{bearerAuth:!0}),this._options.defaultHeaders,s,e.headers]);return this._provider||this.validateHeaders(a,e.__security??{bearerAuth:!0}),a.values}_makeAbort(e){return()=>e.abort()}buildBody({options:e}){let{body:t,headers:s}=e;if(!t)return t===void 0&&"body"in e?{...c(this,ys,"f").call(this,{body:t,headers:d([s])}),isStreamingBody:!1}:{bodyHeaders:void 0,body:void 0,isStreamingBody:!1};let n=d([s]),o=typeof globalThis.ReadableStream<"u"&&t instanceof globalThis.ReadableStream,a=!o&&(typeof t=="string"||t instanceof ArrayBuffer||ArrayBuffer.isView(t)||typeof globalThis.Blob<"u"&&t instanceof globalThis.Blob||t instanceof URLSearchParams||t instanceof FormData);return ArrayBuffer.isView(t)||t instanceof ArrayBuffer||t instanceof DataView||typeof t=="string"&&n.values.has("content-type")||globalThis.Blob&&t instanceof globalThis.Blob||t instanceof FormData||t instanceof URLSearchParams||o?{bodyHeaders:void 0,body:t,isStreamingBody:!a}:typeof t=="object"&&(Symbol.asyncIterator in t||Symbol.iterator in t&&"next"in t&&typeof t.next=="function")?{bodyHeaders:void 0,body:Gr(t),isStreamingBody:!0}:typeof t=="object"&&n.values.get("content-type")==="application/x-www-form-urlencoded"?{bodyHeaders:{"content-type":"application/x-www-form-urlencoded"},body:this.stringifyQuery(t),isStreamingBody:!1}:{...c(this,ys,"f").call(this,{body:t,headers:n}),isStreamingBody:!1}}};eo=R,ys=new WeakMap,Zn=new WeakSet,_i=function(){return this._provider!==void 0||this.baseURL!=="https://api.openai.com/v1"};R.OpenAI=eo;R.DEFAULT_TIMEOUT=6e5;R.OpenAIError=g;R.APIError=F;R.APIConnectionError=ke;R.APIConnectionTimeoutError=$e;R.APIUserAbortError=M;R.NotFoundError=$t;R.ConflictError=Et;R.RateLimitError=vt;R.BadRequestError=Ct;R.AuthenticationError=St;R.InternalServerError=Tt;R.PermissionDeniedError=kt;R.UnprocessableEntityError=Ot;R.InvalidWebhookSignatureError=fe;R.toFile=Fs;R.toStreamingFile=js;R.Completions=ct;R.Chat=Le;R.Embeddings=pt;R.Files=ft;R.Images=yt;R.Audio=_e;R.Moderations=At;R.Models=gt;R.FineTuning=de;R.Graders=qe;R.VectorStores=Se;R.Webhooks=Pt;R.Beta=ie;R.Batches=nt;R.Uploads=We;R.Admin=Ne;R.Responses=ge;R.Realtime=Re;R.Conversations=ze;R.Evals=De;R.Containers=Ue;R.Skills=Ce;R.Videos=It;function Nu(r){if(Fu(r))return"Connection error. This may be caused by passing an undici dispatcher, such as ProxyAgent, that is incompatible with the fetch implementation. If you are using undici's ProxyAgent, pass the fetch implementation from the same undici package: import { fetch, ProxyAgent } from 'undici'; new OpenAI({ fetch, fetchOptions: { dispatcher: new ProxyAgent(...) } });"}function Fu(r){let e=r;for(let t=0;t<8&&e&&typeof e=="object";t++){let s=e;if(s.code==="UND_ERR_INVALID_ARG"&&typeof s.message=="string"&&s.message.includes("invalid onRequestStart method"))return!0;e=s.cause}return!1}var en=ro({module:"llm"});function Mu(r){switch(r.type){case"scroll":return{type:"scroll",x:r.x,y:r.y,scrollX:r.scroll_x,scrollY:r.scroll_y,...r.keys?.length?{keys:r.keys}:{}};case"click":case"double_click":case"drag":case"move":{let{keys:e,...t}=r;return{...t,...e?.length?{keys:e}:{}}}default:return{...r}}}function Ku(r){return{actions:(r.actions??(r.action?[r.action]:[])).map(Mu),pendingSafetyChecks:r.pending_safety_checks.map(t=>({id:t.id,...t.code?{code:t.code}:{},...t.message?{message:t.message}:{}})),status:r.status}}function Bu(r){if("type"in r&&r.type==="computer")return{...r};if("input_schema"in r){let e=r;return{type:"function",name:e.name,description:e.description,parameters:e.input_schema,strict:e.strict??!1}}if("type"in r&&r.type==="function"&&"parameters"in r)return{...r};throw new Error("OpenAI Responses received a tool schema serialized for another protocol.")}function Uu(r){if("input_schema"in r){let e=r;return{type:"function",function:{name:e.name,description:e.description,parameters:e.input_schema,strict:e.strict??!1}}}if("function"in r)return{...r};throw new Error("OpenAI Chat Completions received a tool schema serialized for another protocol.")}var yi=class{protocol="openai";client;model;systemPrompt;maxOutputTokens;thinkingLevel;config;constructor(e,t){let s=an(e);if(!s)throw new Is("OpenAI API key not found, set OPENAI_API_KEY in ~/.swifty/config.yaml, or via OPENAI_API_KEY env variable.");this.client=new R({apiKey:s,baseURL:e.base_url}),this.model=e.model,this.systemPrompt=t,this.maxOutputTokens=on(e),this.config={...e},this.thinkingLevel=tn(e)}async*stream(e,t,s){let n=Xu(cn(e.getMessages())),o=[];o.push({role:"system",content:this.systemPrompt});for(let w of n)o.push(w);let a=t.map(Bu),l=rn(this.getThinkingLevel(),this.config),f={model:this.model,input:o,stream:!0,max_output_tokens:this.maxOutputTokens,...a.length>0?{tools:a}:{},...l!==null?{reasoning:{effort:l,...l!=="none"?{summary:"auto"}:{}}}:{}},p=0,h=0,_=0,m=0;try{let w=await this.client.responses.create(f,{...s?{signal:s}:{}}),P="",b="",I="",$="",A="",E=!1;for await(let y of w)if(y.type==="response.output_text.delta")yield{type:"text_delta",text:y.delta};else if(y.type==="response.reasoning_summary_text.delta")A+=y.delta,yield{type:"thinking_delta",text:y.delta};else if(y.type==="response.reasoning_summary_text.done")yield{type:"thinking_complete",thinking:A,signature:$};else if(y.type==="response.function_call_arguments.delta")I+=y.delta,yield{type:"tool_call_delta",text:y.delta};else if(y.type==="response.output_item.added")y.item.type==="function_call"?(P=y.item.name,b=y.item.call_id,I="",yield{type:"tool_call_start",toolName:P,toolId:b}):y.item.type==="computer_call"?yield{type:"tool_call_start",toolName:"ComputerUse",toolId:y.item.call_id}:y.item.type==="reasoning"&&($=y.item.id??"",A="");else if(y.type==="response.output_item.done")if(y.item.type==="function_call"&&P){let C={};if(I)try{let k=JSON.parse(I);C=ue(k)?ws(k):{}}catch(k){en.error({err:k},"llm operation failed"),C={}}yield{type:"tool_call_complete",toolId:b,toolName:P,arguments:C},P="",b="",I=""}else y.item.type==="computer_call"&&(yield{type:"tool_call_complete",toolId:y.item.call_id,toolName:"ComputerUse",arguments:Ku(y.item),providerItemId:y.item.id});else if(y.type==="response.completed"||y.type==="response.incomplete"){E=!0;let C=y.response.usage;C&&(h=C.output_tokens,_=C.input_tokens_details?.cached_tokens??0,p=Math.max(0,C.input_tokens-_));let k="end_turn",L=y.response;if(y.type==="response.incomplete"||L.status==="incomplete"){let j=L.incomplete_details;if(j?.reason==="max_output_tokens")k="max_tokens";else throw new Rt(`Response incomplete: ${j?.reason??"unknown reason"}`)}yield{type:"stream_end",stopReason:k,usage:{inputTokens:p,outputTokens:h,cacheReadInputTokens:_,cacheCreationInputTokens:m}}}else if(y.type==="response.failed"){let C=y.response.error,k=`${C?.code??"unknown"}: ${C?.message??"Response failed"}`;throw to(k)?new xs(k):new Rt(k)}else if(y.type==="error"){let C=`${y.code??"unknown"}: ${y.message}`;throw to(C)?new xs(C):new Rt(C)}if(!E)throw new Ps("OpenAI Responses stream ended before a terminal response event")}catch(w){throw en.error({err:w},"llm operation failed"),Ii(w)}}setSystemPrompt(e){this.systemPrompt=e}setMaxOutputTokens(e){this.maxOutputTokens=e}setThinkingLevel(e){return this.thinkingLevel=nn(this.config,e),this.thinkingLevel}getThinkingLevel(){return this.thinkingLevel}getSupportedThinkingLevels(){return sn(this.config)}};function gs(r){if(!ue(r)||r.type!=="image"||!ue(r.source))return null;if(r.source.type==="url")return oe(r.source,"url")||null;if(r.source.type!=="base64")return null;let e=oe(r.source,"media_type"),t=oe(r.source,"data");return e&&t?`data:${e};base64,${t}`:null}function zu(r){if(!ue(r)||r.type!=="document"||!ue(r.source))return null;let e=typeof r.title=="string"&&r.title?r.title:"tool-result";if(r.source.type==="url"){let t=oe(r.source,"url");return t?{type:"input_file",file_url:t}:null}if(r.source.type==="base64"){let t=oe(r.source,"data");return t?{type:"input_file",file_data:t,filename:`${e}.pdf`}:null}if(r.source.type==="text"){let t=oe(r.source,"data");return t?{type:"input_file",file_data:Buffer.from(t,"utf-8").toString("base64"),filename:`${e}.txt`}:null}return null}function Du(r){if(!ue(r)||r.type!=="document"||!ue(r.source))return null;let e=typeof r.title=="string"&&r.title?r.title:"tool-result";if(r.source.type==="base64"){let t=oe(r.source,"data");return t?{type:"file",file:{file_data:t,filename:`${e}.pdf`}}:null}if(r.source.type==="text"){let t=oe(r.source,"data");return t?{type:"file",file:{file_data:Buffer.from(t,"utf-8").toString("base64"),filename:`${e}.txt`}}:null}return null}function qu(r){if(!r.contentBlocks?.length)return r.content;let e=[];r.content&&e.push({type:"input_text",text:r.content});for(let t of r.contentBlocks){let s=gs(t);if(s){e.push({type:"input_image",image_url:s,detail:"auto"});continue}let n=zu(t);n&&e.push(n)}return e.length>0?e:r.content}function Hu(r){if(!Array.isArray(r.actions))return[];let e=[];for(let t of r.actions)if(!(!ue(t)||typeof t.type!="string")){if(t.type==="scroll"){e.push({type:"scroll",x:Number(t.x),y:Number(t.y),scroll_x:Number(t.scrollX),scroll_y:Number(t.scrollY),...Array.isArray(t.keys)?{keys:t.keys.map(String)}:{}});continue}e.push(t)}return e}function gi(r){return Array.isArray(r.pendingSafetyChecks)?r.pendingSafetyChecks.flatMap(e=>!ue(e)||typeof e.id!="string"?[]:[{id:e.id,...typeof e.code=="string"?{code:e.code}:{},...typeof e.message=="string"?{message:e.message}:{}}]):[]}function Wu(r){for(let e of r.contentBlocks??[]){let t=gs(e);if(t)return t}}function Ju(r){if(!r.contentBlocks?.length)return[];let e=[];for(let t of r.contentBlocks){let s=gs(t);if(s){e.push({type:"image_url",image_url:{url:s}});continue}let n=Du(t);n&&e.push(n)}return e.length===0?[]:[{type:"text",text:`[Rich content returned by tool call ${r.toolUseId}]`},...e]}function Ai(r){if(typeof r=="string")return r;let e=[];for(let t of r)if(t.type==="text")e.push({type:"input_text",text:oe(t,"text")});else{let s=gs(t);s&&e.push({type:"input_image",image_url:s,detail:"auto"})}return e}function bi(r){if(typeof r=="string")return r;let e=[];for(let t of r)if(t.type==="text")e.push({type:"text",text:oe(t,"text")});else{let s=gs(t);s&&e.push({type:"image_url",image_url:{url:s}})}return e}function Xu(r){let e=[],t=new Map;for(let s of r)for(let n of s.toolUses??[])n.toolName==="ComputerUse"&&t.set(n.toolUseId,n);for(let s of r){if(s.thinkingBlocks)for(let n of s.thinkingBlocks)e.push({type:"reasoning",id:n.signature,summary:[{type:"summary_text",text:n.thinking}]});if(s.toolUses&&s.toolUses.length>0){let n=typeof s.content=="string"?s.content:Hr(s.content);n&&e.push({role:"assistant",content:n});for(let o of s.toolUses)if(o.toolName==="ComputerUse"){let a=o.arguments.status;e.push({type:"computer_call",id:o.providerItemId??o.toolUseId,call_id:o.toolUseId,status:a==="in_progress"||a==="incomplete"?a:"completed",actions:Hu(o.arguments),pending_safety_checks:gi(o.arguments)})}else e.push({type:"function_call",name:o.toolName,call_id:o.toolUseId,arguments:JSON.stringify(o.arguments)})}else if(s.toolResults&&s.toolResults.length>0){for(let n of s.toolResults){let o=t.get(n.toolUseId);if(o){let a=Wu(n);e.push({type:"computer_call_output",call_id:n.toolUseId,output:{type:"computer_screenshot",...a?{image_url:a}:{}},acknowledged_safety_checks:gi(o.arguments)}),(n.isError||!a)&&e.push({role:"user",content:n.content})}else e.push({type:"function_call_output",call_id:n.toolUseId,output:qu(n)})}s.content.length>0&&e.push({role:"user",content:Ai(s.content)})}else s.role==="assistant"?e.push({role:"assistant",content:typeof s.content=="string"?s.content:Hr(s.content)}):e.push({role:s.role,content:Ai(s.content)})}return e}function to(r){return/context_length_exceeded/i.test(r)||/maximum\scontext\slength/i.test(r)||/prompts?\s+too\s+long/i.test(r)}var wi=class{protocol="openai-compat";client;model;systemPrompt;maxOutputTokens;thinkingLevel;config;constructor(e,t){let s=an(e);if(!s)throw new Is("OpenAI API key not found. Set OPENAI_API_KEY in ~/.swifty/config.yaml, or via OPENAI_API_KEY env variable.");this.client=new R({apiKey:s,baseURL:e.base_url}),this.model=e.model,this.systemPrompt=t,this.maxOutputTokens=on(e),this.config={...e},this.thinkingLevel=tn(e)}setSystemPrompt(e){this.systemPrompt=e}setMaxOutputTokens(e){this.maxOutputTokens=e}setThinkingLevel(e){return this.thinkingLevel=nn(this.config,e),this.thinkingLevel}getThinkingLevel(){return this.thinkingLevel}getSupportedThinkingLevels(){return sn(this.config)}async*stream(e,t,s){let n=[{role:"system",content:this.systemPrompt},...Vu(cn(e.getMessages()))],o=t.map(Uu),a=rn(this.getThinkingLevel(),this.config),l={model:this.model,messages:n,stream:!0,stream_options:{include_usage:!0},max_tokens:this.maxOutputTokens,...o.length>0?{tools:o}:{},...a!==null?{reasoning_effort:a}:{}},f=0,p=0,h=0,_=0;try{let m=await this.client.chat.completions.create(l,{...s?{signal:s}:{}}),w=new Map,P=null,b="";for await(let $ of m){if($.usage&&(p=$.usage.completion_tokens??0,h=$.usage.prompt_tokens_details?.cached_tokens??0,f=Math.max(0,($.usage.prompt_tokens??0)-h)),$.choices.length===0)continue;let A=$.choices[0].delta;A.content&&(yield{type:"text_delta",text:A.content});let E=oe(ws(A),"reasoning_content");if(E&&(b+=E,yield{type:"thinking_delta",text:E}),A.tool_calls)for(let y of A.tool_calls){w.has(y.index)||(w.set(y.index,{id:y.id??"",name:y.function?.name??"",args:""}),y.id&&(yield{type:"tool_call_start",toolName:y.function?.name??"",toolId:y.id??""}));let C=w.get(y.index);C&&(y.id&&(C.id=y.id),y.function?.name&&(C.name=y.function.name),y.function?.arguments&&(C.args+=y.function.arguments,yield{type:"tool_call_delta",text:y.function.arguments}))}if($.choices[0].finish_reason){P=$.choices[0].finish_reason,b&&(yield{type:"thinking_complete",thinking:b,signature:""},b="");for(let y of w.values()){let C={},k=y.args;if(k){try{let L=JSON.parse(k);C=ue(L)?ws(L):{}}catch(L){en.error({err:L},"llm operation failed"),C={}}yield{type:"tool_call_complete",toolName:y.name,toolId:y.id,arguments:C}}}}}if(P===null)throw new Ps("Chat Completions stream ended before a finish reason");let I;P==="length"?I="max_tokens":P==="tool_calls"||w.size>0?I="tool_use":I="end_turn",yield{type:"stream_end",stopReason:I,usage:{inputTokens:f,outputTokens:p,cacheReadInputTokens:h,cacheCreationInputTokens:_}}}catch(m){throw en.error({err:m},"llm operation failed"),Ii(m)}}};function Ii(r){if(r instanceof Rt)return r;if(r instanceof R.APIError){if(r.status===413||r.status===400&&to(r.message))return new xs(`Context Too Long: ${r.message}`);if(r.status===401)return new Is(`Invalid API key: ${r.message}`);if(r.status===429){let e=r.headers;return new so("Rate limit error, please wait.",e instanceof Headers?e.get("retry-after")??void 0:void 0)}return new Rt(`OpenAI API error (${un(r.status)}): ${r.message}`)}return new Ps(`Network error: ${r instanceof Error?r.message:un(r)}`)}function Vu(r){let e=[];for(let t of r){let s=t.thinkingBlocks?.map(o=>o.thinking).join("")??"",n=typeof t.content=="string"?t.content:Hr(t.content);if(t.toolUses&&t.toolUses.length>0)e.push({role:"assistant",content:n||null,...s?{reasoning_content:s}:{},tool_calls:t.toolUses.map(o=>({id:o.toolUseId,type:"function",function:{name:o.toolName,arguments:JSON.stringify(o.arguments)}}))});else if(t.toolResults&&t.toolResults.length>0){let o=[];for(let a of t.toolResults)e.push({role:"tool",tool_call_id:a.toolUseId,content:a.content}),o.push(...Ju(a));if(t.content.length>0){let a=bi(t.content);o.push(...typeof a=="string"?[{type:"text",text:a}]:a)}o.length>0&&e.push({role:"user",content:o})}else t.role==="assistant"?e.push({role:"assistant",content:n,...s?{reasoning_content:s}:{}}):t.role==="system"?e.push({role:"system",content:typeof t.content=="string"?t.content:Hr(t.content)}):e.push({role:"user",content:bi(t.content)})}return e}export{yi as OpenAIClient,wi as OpenAICompatClient,Vu as buildChatCompletionMessages,Xu as buildOpenAIInput};
|
|
34
|
+
`)){let $=I.indexOf(":");$>=0&&(b[I.substring(0,$).trim()]=I.substring($+1).trim())}m.defaultHeaders=d([b,m.defaultHeaders])}this._options=m,this._provider=_,p&&(this._workloadIdentityAuth=new Ts(p,this.fetch)),this.apiKey=typeof n=="string"?n:null,this.adminAPIKey=o,this.organization=a,this.project=l,this.webhookSecret=f}withOptions(e){let t=this._options.provider,s=e.provider??t,n={...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this._options.apiKey,adminAPIKey:this.adminAPIKey,workloadIdentity:this._options.workloadIdentity,organization:this.organization,project:this.project,webhookSecret:this.webhookSecret};return s&&(delete n.apiKey,delete n.adminAPIKey,delete n.workloadIdentity,delete n.baseURL,s!==t&&(delete n.organization,delete n.project,delete n.defaultHeaders)),new this.constructor({...n,...e,provider:s})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t},s={bearerAuth:!0,adminAPIKeyAuth:!0}){if(!(e.get("authorization")||e.get("api-key"))&&!(t.has("authorization")||t.has("api-key"))&&!(this._workloadIdentityAuth&&s.bearerAuth))throw new Error('Could not resolve authentication method. Expected either apiKey or adminAPIKey to be set. Or for one of the "Authorization" or "api-key" headers to be explicitly omitted')}async authHeaders(e,t={bearerAuth:!0,adminAPIKeyAuth:!0}){return d([t.bearerAuth?await this.bearerAuth(e):null,t.adminAPIKeyAuth?await this.adminAPIKeyAuth(e):null])}async bearerAuth(e){if(this._workloadIdentityAuth)return d([{Authorization:`Bearer ${await this._workloadIdentityAuth.getToken()}`}]);if(this.apiKey!=null)return d([{Authorization:`Bearer ${this.apiKey}`}])}async adminAPIKeyAuth(e){if(this.adminAPIKey!=null)return d([{Authorization:`Bearer ${this.adminAPIKey}`}])}stringifyQuery(e){return xo(e)}getUserAgent(){return`${this.constructor.name}/JS ${Ee}`}defaultIdempotencyKey(){return`stainless-node-retry-${Je()}`}makeStatusError(e,t,s,n){return F.generate(e,t,s,n)}async _callApiKey(){if(this._provider)return!1;let e=this._options.apiKey;if(typeof e!="function")return!1;let t;try{t=await e()}catch(s){throw s instanceof g?s:new g(`Failed to get token from 'apiKey' function: ${s.message}`,{cause:s})}if(typeof t!="string"||!t)throw new g(`Expected 'apiKey' function argument to return a string but it returned ${t}`);return this.apiKey=t,!0}buildURL(e,t,s){let n=!c(this,Zn,"m",_i).call(this)&&s||this.baseURL,o=no(e)?new URL(e):new URL(n+(n.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),a=this.defaultQuery(),l=Object.fromEntries(o.searchParams);return(!pn(a)||!pn(l))&&(t={...l,...a,...t}),typeof t=="object"&&t&&!Array.isArray(t)&&(o.search=this.stringifyQuery(t)),o.toString()}async prepareOptions(e){if(this._provider)return;(e.__security??{bearerAuth:!0}).bearerAuth&&await this._callApiKey()}async prepareRequest(e,{url:t,options:s}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,s){return this.request(Promise.resolve(s).then(n=>({method:e,path:t,...n})))}request(e,t=null){return new Ge(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,s){let n=await e,o=n.maxRetries??this.maxRetries;t==null&&(t=o),await this.prepareOptions(n);let{req:a,url:l,timeout:f}=await this.buildRequest(n,{retryCount:o-t}),p=n.__metadata?.hasStreamingBody===!0;await this.prepareRequest(a,{url:l,options:n}),await this._provider?.prepareRequest?.(a,{url:l,options:n});let h="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),_=s===void 0?"":`, retryOf: ${s}`,m=Date.now();if(K(this).debug(`[${h}] sending request`,Ae({retryOfRequestLogID:s,method:n.method,url:l,options:n,headers:a.headers})),n.signal?.aborted)throw new M;let w=n.__security??{bearerAuth:!0},P=new AbortController,b=await this.fetchWithAuth(l,a,f,P,w).catch(Jr),I=Date.now();if(b instanceof globalThis.Error){let E=`retrying, ${t} attempts remaining`;if(n.signal?.aborted)throw new M;let y=Wr(b)||/timed? ?out/i.test(String(b)+("cause"in b?String(b.cause):""));if(t&&!p)return K(this).info(`[${h}] connection ${y?"timed out":"failed"} - ${E}`),K(this).debug(`[${h}] connection ${y?"timed out":"failed"} (${E})`,Ae({retryOfRequestLogID:s,url:l,durationMs:I-m,message:b.message})),this.retryRequest(n,t,s??h);let C=p?"error; streaming body cannot be retried":"error; no more retries left";throw K(this).info(`[${h}] connection ${y?"timed out":"failed"} - ${C}`),K(this).debug(`[${h}] connection ${y?"timed out":"failed"} (${C})`,Ae({retryOfRequestLogID:s,url:l,durationMs:I-m,message:b.message})),b instanceof Xe||b instanceof Xr?b:y?new $e:new ke({message:Nu(b),cause:b})}let $=[...b.headers.entries()].filter(([E])=>E==="x-request-id").map(([E,y])=>", "+E+": "+JSON.stringify(y)).join(""),A=`[${h}${_}${$}] ${a.method} ${l} ${b.ok?"succeeded":"failed"} with status ${b.status} in ${I-m}ms`;if(!b.ok){if(b.status===401&&this._workloadIdentityAuth&&w.bearerAuth&&!n.__metadata?.hasStreamingBody&&!n.__metadata?.workloadIdentityTokenRefreshed)return await fn(b.body),this._workloadIdentityAuth.invalidateToken(),this.makeRequest({...n,__metadata:{...n.__metadata,workloadIdentityTokenRefreshed:!0}},t,s??h);let E=await this.shouldRetry(b);if(t&&E&&!p){let N=`retrying, ${t} attempts remaining`;return await fn(b.body),K(this).info(`${A} - ${N}`),K(this).debug(`[${h}] response error (${N})`,Ae({retryOfRequestLogID:s,url:b.url,status:b.status,headers:b.headers,durationMs:I-m})),this.retryRequest(n,t,s??h,b.headers)}let y=E?p?"error; streaming body cannot be retried":"error; no more retries left":"error; not retryable";K(this).info(`${A} - ${y}`);let C=await b.text().catch(N=>Jr(N).message),k=ao(C),L=k?void 0:C;throw K(this).debug(`[${h}] response error (${y})`,Ae({retryOfRequestLogID:s,url:b.url,status:b.status,headers:b.headers,message:L,durationMs:Date.now()-m})),this.makeStatusError(b.status,k,L,b.headers)}return K(this).info(A),K(this).debug(`[${h}] response start`,Ae({retryOfRequestLogID:s,url:b.url,status:b.status,headers:b.headers,durationMs:I-m})),{response:b,options:n,controller:P,requestLogID:h,retryOfRequestLogID:s,startTime:m}}getAPIList(e,t,s){return this.requestAPIList(t,s&&"then"in s?s.then(n=>({method:"get",path:e,...n})):{method:"get",path:e,...s})}requestAPIList(e,t){let s=this.makeRequest(t,null,void 0);return new es(this,s,e)}async fetchWithAuth(e,t,s,n,o={bearerAuth:!0,adminAPIKeyAuth:!0}){if(this._workloadIdentityAuth&&o.bearerAuth){let l=t.headers,f=l.get("Authorization");if(!f||f===`Bearer ${ju}`){let p=await this._workloadIdentityAuth.getToken();l.set("Authorization",`Bearer ${p}`)}}return await this.fetchWithTimeout(e,t,s,n)}async fetchWithTimeout(e,t,s,n){let{signal:o,method:a,...l}=t||{},f=this._makeAbort(n);o&&o.addEventListener("abort",f,{once:!0});let p=setTimeout(f,s),h=globalThis.ReadableStream&&l.body instanceof globalThis.ReadableStream||typeof l.body=="object"&&l.body!==null&&Symbol.asyncIterator in l.body,_={signal:n.signal,...h?{duplex:"half"}:{},method:"GET",...l};a&&(_.method=a.toUpperCase());try{return await this.fetch.call(void 0,e,_)}finally{clearTimeout(p)}}async shouldRetry(e){let t=e.headers.get("x-should-retry");return t==="true"?!0:t==="false"?!1:e.status===408||e.status===409||e.status===429||e.status>=500}async retryRequest(e,t,s,n){let o,a=n?.get("retry-after-ms");if(a){let f=parseFloat(a);Number.isNaN(f)||(o=f)}let l=n?.get("retry-after");if(l&&!o){let f=parseFloat(l);Number.isNaN(f)?o=Date.parse(l)-Date.now():o=f*1e3}if(o===void 0){let f=e.maxRetries??this.maxRetries;o=this.calculateDefaultRetryTimeoutMillis(t,f)}return await he(o),this.makeRequest(e,t-1,s)}calculateDefaultRetryTimeoutMillis(e,t){let o=t-e,a=Math.min(.5*Math.pow(2,o),8),l=1-Math.random()*.25;return a*l*1e3}async buildRequest(e,{retryCount:t=0}={}){let s={...e},{method:n,path:o,query:a,defaultBaseURL:l}=s,f=this.buildURL(o,a,l);"timeout"in s&&io("timeout",s.timeout),s.timeout=s.timeout??this.timeout;let{bodyHeaders:p,body:h,isStreamingBody:_}=this.buildBody({options:s});_&&(e.__metadata={...e.__metadata,hasStreamingBody:!0});let m=await this.buildHeaders({options:e,method:n,bodyHeaders:p,retryCount:t});return{req:{method:n,headers:m,...s.signal&&{signal:s.signal},...globalThis.ReadableStream&&h instanceof globalThis.ReadableStream&&{duplex:"half"},...h&&{body:h},...this.fetchOptions??{},...s.fetchOptions??{}},url:f,timeout:s.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:s,retryCount:n}){let o={};this.idempotencyHeader&&t!=="get"&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),o[this.idempotencyHeader]=e.idempotencyKey);let a=d([o,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(n),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...fo(),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project},this._provider?void 0:await this.authHeaders(e,e.__security??{bearerAuth:!0}),this._options.defaultHeaders,s,e.headers]);return this._provider||this.validateHeaders(a,e.__security??{bearerAuth:!0}),a.values}_makeAbort(e){return()=>e.abort()}buildBody({options:e}){let{body:t,headers:s}=e;if(!t)return t===void 0&&"body"in e?{...c(this,ys,"f").call(this,{body:t,headers:d([s])}),isStreamingBody:!1}:{bodyHeaders:void 0,body:void 0,isStreamingBody:!1};let n=d([s]),o=typeof globalThis.ReadableStream<"u"&&t instanceof globalThis.ReadableStream,a=!o&&(typeof t=="string"||t instanceof ArrayBuffer||ArrayBuffer.isView(t)||typeof globalThis.Blob<"u"&&t instanceof globalThis.Blob||t instanceof URLSearchParams||t instanceof FormData);return ArrayBuffer.isView(t)||t instanceof ArrayBuffer||t instanceof DataView||typeof t=="string"&&n.values.has("content-type")||globalThis.Blob&&t instanceof globalThis.Blob||t instanceof FormData||t instanceof URLSearchParams||o?{bodyHeaders:void 0,body:t,isStreamingBody:!a}:typeof t=="object"&&(Symbol.asyncIterator in t||Symbol.iterator in t&&"next"in t&&typeof t.next=="function")?{bodyHeaders:void 0,body:Gr(t),isStreamingBody:!0}:typeof t=="object"&&n.values.get("content-type")==="application/x-www-form-urlencoded"?{bodyHeaders:{"content-type":"application/x-www-form-urlencoded"},body:this.stringifyQuery(t),isStreamingBody:!1}:{...c(this,ys,"f").call(this,{body:t,headers:n}),isStreamingBody:!1}}};eo=R,ys=new WeakMap,Zn=new WeakSet,_i=function(){return this._provider!==void 0||this.baseURL!=="https://api.openai.com/v1"};R.OpenAI=eo;R.DEFAULT_TIMEOUT=6e5;R.OpenAIError=g;R.APIError=F;R.APIConnectionError=ke;R.APIConnectionTimeoutError=$e;R.APIUserAbortError=M;R.NotFoundError=$t;R.ConflictError=Et;R.RateLimitError=vt;R.BadRequestError=Ct;R.AuthenticationError=St;R.InternalServerError=Tt;R.PermissionDeniedError=kt;R.UnprocessableEntityError=Ot;R.InvalidWebhookSignatureError=fe;R.toFile=Fs;R.toStreamingFile=js;R.Completions=ct;R.Chat=Le;R.Embeddings=pt;R.Files=ft;R.Images=yt;R.Audio=_e;R.Moderations=At;R.Models=gt;R.FineTuning=de;R.Graders=qe;R.VectorStores=Se;R.Webhooks=Pt;R.Beta=ie;R.Batches=nt;R.Uploads=We;R.Admin=Ne;R.Responses=ge;R.Realtime=Re;R.Conversations=ze;R.Evals=De;R.Containers=Ue;R.Skills=Ce;R.Videos=It;function Nu(r){if(Fu(r))return"Connection error. This may be caused by passing an undici dispatcher, such as ProxyAgent, that is incompatible with the fetch implementation. If you are using undici's ProxyAgent, pass the fetch implementation from the same undici package: import { fetch, ProxyAgent } from 'undici'; new OpenAI({ fetch, fetchOptions: { dispatcher: new ProxyAgent(...) } });"}function Fu(r){let e=r;for(let t=0;t<8&&e&&typeof e=="object";t++){let s=e;if(s.code==="UND_ERR_INVALID_ARG"&&typeof s.message=="string"&&s.message.includes("invalid onRequestStart method"))return!0;e=s.cause}return!1}var en=ro({module:"llm"});function Mu(r){switch(r.type){case"scroll":return{type:"scroll",x:r.x,y:r.y,scrollX:r.scroll_x,scrollY:r.scroll_y,...r.keys?.length?{keys:r.keys}:{}};case"click":case"double_click":case"drag":case"move":{let{keys:e,...t}=r;return{...t,...e?.length?{keys:e}:{}}}default:return{...r}}}function Ku(r){return{actions:(r.actions??(r.action?[r.action]:[])).map(Mu),pendingSafetyChecks:r.pending_safety_checks.map(t=>({id:t.id,...t.code?{code:t.code}:{},...t.message?{message:t.message}:{}})),status:r.status}}function Bu(r){if("input_schema"in r){let e=r;return{type:"function",name:e.name,description:e.description,parameters:e.input_schema,strict:e.strict??!1}}if("type"in r&&r.type==="function"&&"parameters"in r)return{...r};throw new Error("OpenAI Responses received a tool schema serialized for another protocol.")}function Uu(r){if("input_schema"in r){let e=r;return{type:"function",function:{name:e.name,description:e.description,parameters:e.input_schema,strict:e.strict??!1}}}if("function"in r)return{...r};throw new Error("OpenAI Chat Completions received a tool schema serialized for another protocol.")}var yi=class{protocol="openai";client;model;systemPrompt;maxOutputTokens;thinkingLevel;config;constructor(e,t){let s=an(e);if(!s)throw new Is("OpenAI API key not found, set OPENAI_API_KEY in ~/.swifty/config.yaml, or via OPENAI_API_KEY env variable.");this.client=new R({apiKey:s,baseURL:e.base_url}),this.model=e.model,this.systemPrompt=t,this.maxOutputTokens=on(e),this.config={...e},this.thinkingLevel=tn(e)}async*stream(e,t,s){let n=Xu(cn(e.getMessages())),o=[];o.push({role:"system",content:this.systemPrompt});for(let w of n)o.push(w);let a=t.map(Bu),l=rn(this.getThinkingLevel(),this.config),f={model:this.model,input:o,stream:!0,max_output_tokens:this.maxOutputTokens,...a.length>0?{tools:a}:{},...l!==null?{reasoning:{effort:l,...l!=="none"?{summary:"auto"}:{}}}:{}},p=0,h=0,_=0,m=0;try{let w=await this.client.responses.create(f,{...s?{signal:s}:{}}),P="",b="",I="",$="",A="",E=!1;for await(let y of w)if(y.type==="response.output_text.delta")yield{type:"text_delta",text:y.delta};else if(y.type==="response.reasoning_summary_text.delta")A+=y.delta,yield{type:"thinking_delta",text:y.delta};else if(y.type==="response.reasoning_summary_text.done")yield{type:"thinking_complete",thinking:A,signature:$};else if(y.type==="response.function_call_arguments.delta")I+=y.delta,yield{type:"tool_call_delta",text:y.delta};else if(y.type==="response.output_item.added")y.item.type==="function_call"?(P=y.item.name,b=y.item.call_id,I="",yield{type:"tool_call_start",toolName:P,toolId:b}):y.item.type==="computer_call"?yield{type:"tool_call_start",toolName:"ComputerUse",toolId:y.item.call_id}:y.item.type==="reasoning"&&($=y.item.id??"",A="");else if(y.type==="response.output_item.done")if(y.item.type==="function_call"&&P){let C={};if(I)try{let k=JSON.parse(I);C=ue(k)?ws(k):{}}catch(k){en.error({err:k},"llm operation failed"),C={}}yield{type:"tool_call_complete",toolId:b,toolName:P,arguments:C},P="",b="",I=""}else y.item.type==="computer_call"&&(yield{type:"tool_call_complete",toolId:y.item.call_id,toolName:"ComputerUse",arguments:Ku(y.item),providerItemId:y.item.id});else if(y.type==="response.completed"||y.type==="response.incomplete"){E=!0;let C=y.response.usage;C&&(h=C.output_tokens,_=C.input_tokens_details?.cached_tokens??0,p=Math.max(0,C.input_tokens-_));let k="end_turn",L=y.response;if(y.type==="response.incomplete"||L.status==="incomplete"){let j=L.incomplete_details;if(j?.reason==="max_output_tokens")k="max_tokens";else throw new Rt(`Response incomplete: ${j?.reason??"unknown reason"}`)}yield{type:"stream_end",stopReason:k,usage:{inputTokens:p,outputTokens:h,cacheReadInputTokens:_,cacheCreationInputTokens:m}}}else if(y.type==="response.failed"){let C=y.response.error,k=`${C?.code??"unknown"}: ${C?.message??"Response failed"}`;throw to(k)?new xs(k):new Rt(k)}else if(y.type==="error"){let C=`${y.code??"unknown"}: ${y.message}`;throw to(C)?new xs(C):new Rt(C)}if(!E)throw new Ps("OpenAI Responses stream ended before a terminal response event")}catch(w){throw en.error({err:w},"llm operation failed"),Ii(w)}}setSystemPrompt(e){this.systemPrompt=e}setMaxOutputTokens(e){this.maxOutputTokens=e}setThinkingLevel(e){return this.thinkingLevel=nn(this.config,e),this.thinkingLevel}getThinkingLevel(){return this.thinkingLevel}getSupportedThinkingLevels(){return sn(this.config)}};function gs(r){if(!ue(r)||r.type!=="image"||!ue(r.source))return null;if(r.source.type==="url")return oe(r.source,"url")||null;if(r.source.type!=="base64")return null;let e=oe(r.source,"media_type"),t=oe(r.source,"data");return e&&t?`data:${e};base64,${t}`:null}function zu(r){if(!ue(r)||r.type!=="document"||!ue(r.source))return null;let e=typeof r.title=="string"&&r.title?r.title:"tool-result";if(r.source.type==="url"){let t=oe(r.source,"url");return t?{type:"input_file",file_url:t}:null}if(r.source.type==="base64"){let t=oe(r.source,"data");return t?{type:"input_file",file_data:t,filename:`${e}.pdf`}:null}if(r.source.type==="text"){let t=oe(r.source,"data");return t?{type:"input_file",file_data:Buffer.from(t,"utf-8").toString("base64"),filename:`${e}.txt`}:null}return null}function Du(r){if(!ue(r)||r.type!=="document"||!ue(r.source))return null;let e=typeof r.title=="string"&&r.title?r.title:"tool-result";if(r.source.type==="base64"){let t=oe(r.source,"data");return t?{type:"file",file:{file_data:t,filename:`${e}.pdf`}}:null}if(r.source.type==="text"){let t=oe(r.source,"data");return t?{type:"file",file:{file_data:Buffer.from(t,"utf-8").toString("base64"),filename:`${e}.txt`}}:null}return null}function qu(r){if(!r.contentBlocks?.length)return r.content;let e=[];r.content&&e.push({type:"input_text",text:r.content});for(let t of r.contentBlocks){let s=gs(t);if(s){e.push({type:"input_image",image_url:s,detail:"auto"});continue}let n=zu(t);n&&e.push(n)}return e.length>0?e:r.content}function Hu(r){if(!Array.isArray(r.actions))return[];let e=[];for(let t of r.actions)if(!(!ue(t)||typeof t.type!="string")){if(t.type==="scroll"){e.push({type:"scroll",x:Number(t.x),y:Number(t.y),scroll_x:Number(t.scrollX),scroll_y:Number(t.scrollY),...Array.isArray(t.keys)?{keys:t.keys.map(String)}:{}});continue}e.push(t)}return e}function gi(r){return Array.isArray(r.pendingSafetyChecks)?r.pendingSafetyChecks.flatMap(e=>!ue(e)||typeof e.id!="string"?[]:[{id:e.id,...typeof e.code=="string"?{code:e.code}:{},...typeof e.message=="string"?{message:e.message}:{}}]):[]}function Wu(r){for(let e of r.contentBlocks??[]){let t=gs(e);if(t)return t}}function Ju(r){if(!r.contentBlocks?.length)return[];let e=[];for(let t of r.contentBlocks){let s=gs(t);if(s){e.push({type:"image_url",image_url:{url:s}});continue}let n=Du(t);n&&e.push(n)}return e.length===0?[]:[{type:"text",text:`[Rich content returned by tool call ${r.toolUseId}]`},...e]}function Ai(r){if(typeof r=="string")return r;let e=[];for(let t of r)if(t.type==="text")e.push({type:"input_text",text:oe(t,"text")});else{let s=gs(t);s&&e.push({type:"input_image",image_url:s,detail:"auto"})}return e}function bi(r){if(typeof r=="string")return r;let e=[];for(let t of r)if(t.type==="text")e.push({type:"text",text:oe(t,"text")});else{let s=gs(t);s&&e.push({type:"image_url",image_url:{url:s}})}return e}function Xu(r){let e=[],t=new Map;for(let s of r)for(let n of s.toolUses??[])n.toolName==="ComputerUse"&&t.set(n.toolUseId,n);for(let s of r){if(s.thinkingBlocks)for(let n of s.thinkingBlocks)e.push({type:"reasoning",id:n.signature,summary:[{type:"summary_text",text:n.thinking}]});if(s.toolUses&&s.toolUses.length>0){let n=typeof s.content=="string"?s.content:Hr(s.content);n&&e.push({role:"assistant",content:n});for(let o of s.toolUses)if(o.toolName==="ComputerUse"){let a=o.arguments.status;e.push({type:"computer_call",id:o.providerItemId??o.toolUseId,call_id:o.toolUseId,status:a==="in_progress"||a==="incomplete"?a:"completed",actions:Hu(o.arguments),pending_safety_checks:gi(o.arguments)})}else e.push({type:"function_call",name:o.toolName,call_id:o.toolUseId,arguments:JSON.stringify(o.arguments)})}else if(s.toolResults&&s.toolResults.length>0){for(let n of s.toolResults){let o=t.get(n.toolUseId);if(o){let a=Wu(n);e.push({type:"computer_call_output",call_id:n.toolUseId,output:{type:"computer_screenshot",...a?{image_url:a}:{}},acknowledged_safety_checks:gi(o.arguments)}),(n.isError||!a)&&e.push({role:"user",content:n.content})}else e.push({type:"function_call_output",call_id:n.toolUseId,output:qu(n)})}s.content.length>0&&e.push({role:"user",content:Ai(s.content)})}else s.role==="assistant"?e.push({role:"assistant",content:typeof s.content=="string"?s.content:Hr(s.content)}):e.push({role:s.role,content:Ai(s.content)})}return e}function to(r){return/context_length_exceeded/i.test(r)||/maximum\scontext\slength/i.test(r)||/prompts?\s+too\s+long/i.test(r)}var wi=class{protocol="openai-compat";client;model;systemPrompt;maxOutputTokens;thinkingLevel;config;constructor(e,t){let s=an(e);if(!s)throw new Is("OpenAI API key not found. Set OPENAI_API_KEY in ~/.swifty/config.yaml, or via OPENAI_API_KEY env variable.");this.client=new R({apiKey:s,baseURL:e.base_url}),this.model=e.model,this.systemPrompt=t,this.maxOutputTokens=on(e),this.config={...e},this.thinkingLevel=tn(e)}setSystemPrompt(e){this.systemPrompt=e}setMaxOutputTokens(e){this.maxOutputTokens=e}setThinkingLevel(e){return this.thinkingLevel=nn(this.config,e),this.thinkingLevel}getThinkingLevel(){return this.thinkingLevel}getSupportedThinkingLevels(){return sn(this.config)}async*stream(e,t,s){let n=[{role:"system",content:this.systemPrompt},...Vu(cn(e.getMessages()))],o=t.map(Uu),a=rn(this.getThinkingLevel(),this.config),l={model:this.model,messages:n,stream:!0,stream_options:{include_usage:!0},max_tokens:this.maxOutputTokens,...o.length>0?{tools:o}:{},...a!==null?{reasoning_effort:a}:{}},f=0,p=0,h=0,_=0;try{let m=await this.client.chat.completions.create(l,{...s?{signal:s}:{}}),w=new Map,P=null,b="";for await(let $ of m){if($.usage&&(p=$.usage.completion_tokens??0,h=$.usage.prompt_tokens_details?.cached_tokens??0,f=Math.max(0,($.usage.prompt_tokens??0)-h)),$.choices.length===0)continue;let A=$.choices[0].delta;A.content&&(yield{type:"text_delta",text:A.content});let E=oe(ws(A),"reasoning_content");if(E&&(b+=E,yield{type:"thinking_delta",text:E}),A.tool_calls)for(let y of A.tool_calls){w.has(y.index)||(w.set(y.index,{id:y.id??"",name:y.function?.name??"",args:""}),y.id&&(yield{type:"tool_call_start",toolName:y.function?.name??"",toolId:y.id??""}));let C=w.get(y.index);C&&(y.id&&(C.id=y.id),y.function?.name&&(C.name=y.function.name),y.function?.arguments&&(C.args+=y.function.arguments,yield{type:"tool_call_delta",text:y.function.arguments}))}if($.choices[0].finish_reason){P=$.choices[0].finish_reason,b&&(yield{type:"thinking_complete",thinking:b,signature:""},b="");for(let y of w.values()){let C={},k=y.args;if(k){try{let L=JSON.parse(k);C=ue(L)?ws(L):{}}catch(L){en.error({err:L},"llm operation failed"),C={}}yield{type:"tool_call_complete",toolName:y.name,toolId:y.id,arguments:C}}}}}if(P===null)throw new Ps("Chat Completions stream ended before a finish reason");let I;P==="length"?I="max_tokens":P==="tool_calls"||w.size>0?I="tool_use":I="end_turn",yield{type:"stream_end",stopReason:I,usage:{inputTokens:f,outputTokens:p,cacheReadInputTokens:h,cacheCreationInputTokens:_}}}catch(m){throw en.error({err:m},"llm operation failed"),Ii(m)}}};function Ii(r){if(r instanceof Rt)return r;if(r instanceof R.APIError){if(r.status===413||r.status===400&&to(r.message))return new xs(`Context Too Long: ${r.message}`);if(r.status===401)return new Is(`Invalid API key: ${r.message}`);if(r.status===429){let e=r.headers;return new so("Rate limit error, please wait.",e instanceof Headers?e.get("retry-after")??void 0:void 0)}return new Rt(`OpenAI API error (${un(r.status)}): ${r.message}`)}return new Ps(`Network error: ${r instanceof Error?r.message:un(r)}`)}function Vu(r){let e=[];for(let t of r){let s=t.thinkingBlocks?.map(o=>o.thinking).join("")??"",n=typeof t.content=="string"?t.content:Hr(t.content);if(t.toolUses&&t.toolUses.length>0)e.push({role:"assistant",content:n||null,...s?{reasoning_content:s}:{},tool_calls:t.toolUses.map(o=>({id:o.toolUseId,type:"function",function:{name:o.toolName,arguments:JSON.stringify(o.arguments)}}))});else if(t.toolResults&&t.toolResults.length>0){let o=[];for(let a of t.toolResults)e.push({role:"tool",tool_call_id:a.toolUseId,content:a.content}),o.push(...Ju(a));if(t.content.length>0){let a=bi(t.content);o.push(...typeof a=="string"?[{type:"text",text:a}]:a)}o.length>0&&e.push({role:"user",content:o})}else t.role==="assistant"?e.push({role:"assistant",content:n,...s?{reasoning_content:s}:{}}):t.role==="system"?e.push({role:"system",content:typeof t.content=="string"?t.content:Hr(t.content)}):e.push({role:"user",content:bi(t.content)})}return e}export{yi as OpenAIClient,wi as OpenAICompatClient,Vu as buildChatCompletionMessages,Xu as buildOpenAIInput};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire as __swiftyCreateRequire } from "node:module";
|
|
3
3
|
const require = __swiftyCreateRequire(import.meta.url);
|
|
4
|
-
import{b as a,c as b}from"./chunk-
|
|
4
|
+
import{b as a,c as b}from"./chunk-LW273HD5.js";import"./chunk-XGUH7SGV.js";import"./chunk-NCZR3AGA.js";import"./chunk-35X3GW25.js";import"./chunk-G2TE2QZM.js";import"./chunk-FZORZF22.js";import"./chunk-YKWIZE5D.js";import"./chunk-LC7ZWLIH.js";import"./chunk-IZ7QOBSB.js";export{b as createTelemetryRuntime,a as parseExporterTypes};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire as __swiftyCreateRequire } from "node:module";
|
|
3
3
|
const require = __swiftyCreateRequire(import.meta.url);
|
|
4
|
-
import{b as a,c as b}from"./chunk-
|
|
4
|
+
import{b as a,c as b}from"./chunk-R62BGTT4.js";import"./chunk-FOPUR6OB.js";import"./chunk-S2VEXEVV.js";import"./chunk-ENZ5LHRN.js";import"./chunk-LW273HD5.js";import"./chunk-XGUH7SGV.js";import"./chunk-VN7HK3YD.js";import"./chunk-QBGGDF62.js";import"./chunk-NDPYUGE5.js";import"./chunk-5W2TCASL.js";import"./chunk-325L2ILZ.js";import"./chunk-44LPRRYU.js";import"./chunk-NCZR3AGA.js";import"./chunk-QQVDL4QT.js";import"./chunk-35X3GW25.js";import"./chunk-G2TE2QZM.js";import"./chunk-FZORZF22.js";import"./chunk-YKWIZE5D.js";import"./chunk-LC7ZWLIH.js";import"./chunk-IZ7QOBSB.js";export{b as RemoteServer,a as createRemoteAgent};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire as __swiftyCreateRequire } from "node:module";
|
|
3
3
|
const require = __swiftyCreateRequire(import.meta.url);
|
|
4
|
-
import{b as a,c as b,d as c,e as d,f as e,g as f,h as g,i as h}from"./chunk-
|
|
4
|
+
import{b as a,c as b,d as c,e as d,f as e,g as f,h as g,i as h}from"./chunk-S2VEXEVV.js";import"./chunk-IZ7QOBSB.js";export{e as ASYNC_AGENT_ALLOWED_TOOLS,d as CUSTOM_AGENT_DISALLOWED_TOOLS,g as FORK_QUERY_SOURCE,a as MAIN_AGENT_ONLY_TOOLS,b as SUBAGENT_DISALLOWED_TOOLS,c as TEAMMATE_DISALLOWED_TOOLS,h as cloneRegistryForFork,f as filterToolsForAgent};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@swifty.js/swifty",
|
|
3
|
-
"version": "0.0.
|
|
4
|
-
"description": "Swifty is a terminal-based AI coding agent. It provides an interactive
|
|
3
|
+
"version": "0.0.37",
|
|
4
|
+
"description": "Swifty is a terminal-based AI coding agent. It provides an interactive UI (terminal user interface) for conversing with large language models, executing code, manipulating files, and orchestrating multi-agent workflows, all from the command line.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agent",
|
|
7
7
|
"cli",
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { createRequire as __swiftyCreateRequire } from "node:module";
|
|
3
|
-
const require = __swiftyCreateRequire(import.meta.url);
|
|
4
|
-
import{g as M}from"./chunk-7JQHFZRD.js";import{a as Z}from"./chunk-H56UQALW.js";import{a as X}from"./chunk-Q3NPRV5P.js";import{A as J,B as I,C as V,D as q,E as Q,k as B,m as O,n as U,o as j,p as $,q as K,r as F,t as C,u as E,z as D}from"./chunk-NDPYUGE5.js";import"./chunk-325L2ILZ.js";import{f as N,k as H,l as z,m as G,n as d,o as W,s as Y}from"./chunk-44LPRRYU.js";import{D as w,f as R}from"./chunk-NCZR3AGA.js";import"./chunk-IZ7QOBSB.js";function oe(o){for(let t=o.length-1;t>=0;t--){let e=o[t];if(e.defer_loading!==!0){e.cache_control={type:"ephemeral"};return}}}function ne(o){return o.some(t=>"defer_loading"in t&&t.defer_loading===!0)}var re="computer-use-2025-11-24";function se(o){if("type"in o&&o.type==="computer_20251124")return{...o};if("input_schema"in o){let t=o,{cache_control:e,...n}=t;return{...n,type:"custom",...t.defer_loading!==!0&&e?{cache_control:e}:{}}}throw new Error("Anthropic received a tool schema serialized for another protocol.")}var T=N({module:"llm"});var ie=3e3,ae=w.object({max_input_tokens:w.coerce.number()});async function Te(o){if(o.protocol!=="anthropic")return 0;let t=E(o),n=`${o.base_url.replace(/\/+$/,"")}/v1/models/${encodeURIComponent(o.model)}`,r=new AbortController,s=setTimeout(()=>{r.abort()},ie);try{let c=await fetch(n,{method:"GET",headers:{"anthropic-version":"2023-06-01",...t?{"x-api-key":t}:{}},signal:r.signal});if(!c.ok)return 0;let v=await c.json(),{success:p,error:u,data:h}=await R(ae,v);if(!p)return T.warn({message:u.message},"model context window schema validation failed"),0;let m=h.max_input_tokens;return Math.max(m,0)}catch(c){return T.error({err:c},"failed to fetch model context window"),0}finally{clearTimeout(s)}}function y(o){return typeof o=="string"?[{type:"text",text:o}]:o.map(t=>{let e=X(t);if(!e||e.type==="tool_reference")throw new Error(`Unsupported user content block: ${Y(t,"type","unknown")}`);return e})}function le(o){let t=[];for(let e of o)if(e.role==="assistant"){let n=[];if(e.thinkingBlocks)for(let s of e.thinkingBlocks)n.push({type:"thinking",thinking:s.thinking,signature:s.signature});let r=typeof e.content=="string"?e.content:H(e.content);if(r&&n.push({type:"text",text:r}),e.toolUses)for(let s of e.toolUses)n.push({type:"tool_use",id:s.toolUseId,name:s.toolName==="ComputerUse"?"computer":s.toolName,input:s.arguments});n.length===0&&n.push({type:"text",text:""}),t.push({role:"assistant",content:n})}else if(e.toolResults&&e.toolResults.length>0){let n=[];for(let r of e.toolResults)n.push({type:"tool_result",tool_use_id:r.toolUseId,is_error:r.isError,content:r.contentBlocks?.length?r.contentBlocks:r.content});e.content.length>0&&n.push(...y(e.content)),t.push({role:"user",content:n})}else{if(t.length===0){t.push({role:"user",content:y(e.content)});continue}let n=!1,r=t[t.length-1],s=r.content;r.role==="user"&&(typeof s=="string"||Array.isArray(s)&&s.length>0&&(s[0].type==="text"||s[0].type==="image"))&&(n=!0),n?(typeof s=="string"&&(s=r.content=s.trim().length>0?[{type:"text",text:s}]:[]),s.push(...y(e.content))):t.push({role:"user",content:y(e.content)})}return t}var ee=class{protocol="anthropic";client;model;thinkingLevel;systemPrompt;maxOutputTokens;config;constructor(t,e){let n=E(t);if(!n)throw new I("Anthropic API key not found, set ANTHROPIC_API_KEY in ~/.swifty/config.yaml, or via ANTHROPIC_API_KEY env variable.");this.client=new M({apiKey:n,baseURL:t.base_url}),this.model=t.model,this.config={...t},this.thinkingLevel=O(t),this.systemPrompt=e,this.maxOutputTokens=C(t)}setSystemPrompt(t){this.systemPrompt=t}setMaxOutputTokens(t){this.config={...this.config,max_output_tokens:t},this.maxOutputTokens=C(this.config),this.setThinkingLevel(this.thinkingLevel)}setThinkingLevel(t){return this.thinkingLevel=F(this.config,t),this.thinkingLevel}getThinkingLevel(){return this.thinkingLevel}getSupportedThinkingLevels(){return K(this.config)}async*stream(t,e,n){let r=le(D(t.getMessages())),s=ne(e),c=e.map(se),v=c.some(l=>"type"in l&&l.type==="computer_20251124");oe(c),ce(r);let p={model:this.model,max_tokens:this.maxOutputTokens,stream:!0,system:[{type:"text",text:this.systemPrompt,cache_control:{type:"ephemeral"}}],messages:r,...c.length>0?{tools:c}:{}},u=this.getThinkingLevel();if(this.config.reasoning!==!1)if(u==="off")p.thinking={type:"disabled"};else if(this.config.thinking_mode==="adaptive"){let l=$(u,this.config);l!==null&&(p.thinking={type:"adaptive"},p.output_config={effort:l})}else{let l=j(u,this.config);l!==null&&l!=="none"&&(p.thinking={type:"enabled",budget_tokens:Math.min(U(l),this.maxOutputTokens-B)})}let h=0,m=0,x=0,A=0,S="end_turn",b="",L="",P=!1;try{let l=[...s?[Z]:[],...v?[re]:[]],te=this.client.messages.stream(p,{...n?{signal:n}:{},...l.length>0?{headers:{"anthropic-beta":l.join(",")}}:{}}),g="",k="",f="";for await(let a of te)switch(a.type){case"content_block_start":{let i=a.content_block;i.type==="thinking"?(P=!0,b="",L=""):i.type==="tool_use"&&(k=i.id,g=i.name==="computer"?"ComputerUse":i.name,f="",yield{type:"tool_call_start",toolName:g,toolId:k});break}case"content_block_delta":{let i=a.delta;i.type==="thinking_delta"?(b+=i.thinking,yield{type:"thinking_delta",text:i.thinking}):i.type==="signature_delta"?L+=i.signature:i.type==="text_delta"?yield{type:"text_delta",text:i.text}:i.type==="input_json_delta"&&(f+=i.partial_json,yield{type:"tool_call_delta",text:i.partial_json});break}case"content_block_stop":{if(P&&(yield{type:"thinking_complete",thinking:b,signature:L},P=!1),g){let i={};if(f)try{let _=JSON.parse(f);i=z(_)?G(_):{}}catch(_){T.error({err:_},"llm operation failed"),i={}}yield{type:"tool_call_complete",toolId:k,toolName:g,arguments:i},g="",k="",f=""}break}case"message_delta":{a.delta.stop_reason&&(S=a.delta.stop_reason),a.usage.output_tokens&&(m=a.usage.output_tokens,a.usage.input_tokens&&(h=a.usage.input_tokens),a.usage.cache_read_input_tokens&&(x=a.usage.cache_read_input_tokens),a.usage.cache_creation_input_tokens&&(A=a.usage.cache_creation_input_tokens));break}case"message_start":{h=a.message.usage.input_tokens,m=a.message.usage.output_tokens,x=a.message.usage.cache_read_input_tokens??0,A=a.message.usage.cache_creation_input_tokens??0;break}}yield{type:"stream_end",stopReason:S,usage:{inputTokens:h,outputTokens:m,cacheReadInputTokens:x,cacheCreationInputTokens:A}}}catch(l){throw T.error({err:l},"llm operation failed"),pe(l)}}};function ce(o){for(let t=o.length-1;t>=0;t--){if(o[t].role!=="user")continue;let e=o[t].content;if(typeof e=="string"&&e.length===0||Array.isArray(e)&&e.length===0)return;typeof e=="string"&&(e=o[t].content=[{type:"text",text:e}]);let n=e[e.length-1];for(let r=e.length-1;r>=0;r--)if(e[r].type!=="image"){n=e[r];break}Reflect.set(n,"cache_control",{type:"ephemeral"});return}}function pe(o){if(o instanceof M.APIError){if(o.status===413||/prompts?\s+too\s+long/i.test(o.message))return new Q(`Prompt too long: ${o.message}`);if(o.status===401)return new I(`Invalid API key: ${o.message}`);if(o.status===429){let t=o.headers,e=t instanceof Headers?t.get("retry-after"):void 0,n="Rate Limited";if(e){let r=Number.parseInt(d(e));Number.isNaN(r)?n+=", please wait.":n+=`, retry after ${d(r)}s.`}else n+=", please wait.";return new V(n,e?d(e):void 0)}return new J(`Anthropic API error (${d(o.status)}): ${o.message}`)}return new q(`Network error: ${W(o)}`)}export{ee as AnthropicClient,le as buildAnthropicMessages,Te as fetchModelContextWindow,ce as markLastUserTailForCache,oe as markToolsForCache,ne as needsToolSearchBeta};
|
package/dist/chunk-I7XJSLRI.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { createRequire as __swiftyCreateRequire } from "node:module";
|
|
3
|
-
const require = __swiftyCreateRequire(import.meta.url);
|
|
4
|
-
import{c as r}from"./chunk-IZ7QOBSB.js";var c=r((p,o)=>{"use strict";o.exports=(t,s=process.argv)=>{let e=t.startsWith("-")?"":t.length===1?"-":"--",i=s.indexOf(e+t),n=s.indexOf("--");return i!==-1&&(n===-1||i<n)}});export{c as a};
|
package/dist/chunk-UJGMTIYO.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { createRequire as __swiftyCreateRequire } from "node:module";
|
|
3
|
-
const require = __swiftyCreateRequire(import.meta.url);
|
|
4
|
-
var d=class{tools=new Map;discovered=new Set;mcpLoadingMode="eager";exposeToolSearch=!1;exposeMcpCall=!1;register(e){this.tools.set(e.name,e)}unregister(e){this.tools.delete(e),this.discovered.delete(e)}get(e){return this.tools.get(e)}listTools(){return[...this.tools.values()]}getAllSchemas(e,o){let t=e??"anthropic",a=t==="openai"||t==="openai-compat",r=this.mcpLoadingMode==="native"&&!a,n=[];for(let i of this.tools.values()){if(o&&!o(i.name)||i.name==="ToolSearch"&&!this.exposeToolSearch||i.name==="McpCall"&&!this.exposeMcpCall)continue;let c=!!i.deferred&&!this.discovered.has(i.name);if(c&&!r)continue;let p=e?i.providerSchema?.(t):void 0;if(p){n.push(p);continue}let s=i.schema();t==="openai"?n.push({strict:s.strict??!1,type:"function",name:s.name,description:s.description,parameters:s.input_schema}):t==="openai-compat"?n.push({type:"function",function:{name:s.name,description:s.description,parameters:s.input_schema,strict:s.strict??!1}}):n.push({...s,type:"custom",...c?{defer_loading:!0}:{}})}return n}getDeferredToolNames(){let e=[];for(let o of this.tools.values())o.deferred&&!this.discovered.has(o.name)&&e.push(o.name);return e.sort()}getDeferredTools(){return[...this.tools.values()].filter(e=>e.deferred&&!this.discovered.has(e.name))}searchDeferred(e,o=5){let t=e.toLowerCase(),a=[];for(let r of this.tools.values())if(!(!r.deferred||this.discovered.has(r.name))&&(r.name.toLowerCase().includes(t)||r.description.toLowerCase().includes(t))&&(a.push(r),a.length>=o))break;return a}findDeferredByNames(e){let o=new Map;for(let[t,a]of this.tools)o.set(t.toLowerCase(),a);return e.map(t=>o.get(t.toLowerCase())).filter(t=>t?.deferred??!1)}markDiscovered(e){this.discovered.add(e)}isDiscovered(e){return this.discovered.has(e)}};var h=new Set(["ComputerUse","AskUserQuestion","ExitPlanMode"]),m=new Set([...h,"Agent","TaskStop"]),v=new Set(["TeamCreate","TeamDelete"]),T=new Set(["ExitPlanMode","Agent","AskUserQuestion","TaskStop"]),f=new Set(["ReadFile","Grep","Glob","Bash","JavaScript","PowerShell","EditFile","WriteFile","LoadSkill","SyntheticOutput","ToolSearch","EnterWorktree","ExitWorktree","McpCall"]);function g(l){return l.startsWith("mcp__")}function L(l,e,o,t,a=!1){let r=new Set(o??[]),n=new Set(e??[]),i=n.size>0&&!(n.size===1&&n.has("*")),c=new d;c.mcpLoadingMode=l.mcpLoadingMode;for(let p of l.listTools()){let s=p.name;if(g(s)){!r.has(s)&&(!i||n.has(s))&&c.register(p);continue}m.has(s)||a&&T.has(s)||t&&!f.has(s)||r.has(s)||i&&!n.has(s)||c.register(p)}return c}var u="agent:builtin:fork";function O(l){let e=new d;e.mcpLoadingMode=l.mcpLoadingMode;for(let o of l.listTools())if(!h.has(o.name))if(o.name==="Agent"&&"querySource"in o){let t=Object.create(Object.getPrototypeOf(o),Object.getOwnPropertyDescriptors(o));t.querySource=u,e.register(t)}else e.register(o);return e}export{d as a,h as b,m as c,v as d,T as e,f,L as g,u as h,O as i};
|