From 4eedb951416decf3b19057b32737044a657e00e8 Mon Sep 17 00:00:00 2001 From: Mark Ayers Date: Mon, 23 Feb 2026 13:29:59 -0500 Subject: [PATCH 1/2] feat: add Claude 4.6 models and update default Add Sonnet 4.6 and Opus 4.6 to the model dropdown, mark 4.5 Sonnet/Opus as legacy, and change the default to Sonnet 4.6. Existing users on the old default are auto-migrated; explicit model choices are preserved. Co-Authored-By: Claude Opus 4.6 --- main.js | 38 +++++++++++++++++++------------------- src/main.ts | 5 +++++ src/settings.ts | 2 +- src/settingsTab.ts | 6 ++++-- 4 files changed, 29 insertions(+), 22 deletions(-) diff --git a/main.js b/main.js index bd40fc4..9473ae3 100644 --- a/main.js +++ b/main.js @@ -1,12 +1,12 @@ -var{defineProperty:R0,getOwnPropertyNames:C5,getOwnPropertyDescriptor:U5}=Object,q5=Object.prototype.hasOwnProperty;var O2=new WeakMap,O5=(w)=>{var X=O2.get(w),Z;if(X)return X;if(X=R0({},"__esModule",{value:!0}),w&&typeof w==="object"||typeof w==="function")C5(w).map(($)=>!q5.call(X,$)&&R0(X,$,{get:()=>w[$],enumerable:!(Z=U5(w,$))||Z.enumerable}));return O2.set(w,X),X};var H5=(w,X)=>{for(var Z in X)R0(w,Z,{get:X[Z],enumerable:!0,configurable:!0,set:($)=>X[Z]=()=>$})};var z1={};H5(z1,{default:()=>x2});module.exports=O5(z1);var x5=require("obsidian");var Cw=require("obsidian");function V(w,X,Z,$,z){if($==="m")throw TypeError("Private method is not writable");if($==="a"&&!z)throw TypeError("Private accessor was defined without a setter");if(typeof X==="function"?w!==X||!z:!X.has(w))throw TypeError("Cannot write private member to an object whose class did not declare it");return $==="a"?z.call(w,Z):z?z.value=Z:X.set(w,Z),Z}function Y(w,X,Z,$){if(Z==="a"&&!$)throw TypeError("Private accessor was defined without a getter");if(typeof X==="function"?w!==X||!$:!X.has(w))throw TypeError("Cannot read private member from an object whose class did not declare it");return Z==="m"?$:Z==="a"?$.call(w):$?$.value:X.get(w)}var k0=function(){let{crypto:w}=globalThis;if(w?.randomUUID)return k0=w.randomUUID.bind(w),w.randomUUID();let X=new Uint8Array(1),Z=w?()=>w.getRandomValues(X)[0]:()=>Math.random()*255&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,($)=>(+$^Z()&15>>+$/4).toString(16))};function b(w){return typeof w==="object"&&w!==null&&(("name"in w)&&w.name==="AbortError"||("message"in w)&&String(w.message).includes("FetchRequestCanceledException"))}var qw=(w)=>{if(w instanceof Error)return w;if(typeof w==="object"&&w!==null){try{if(Object.prototype.toString.call(w)==="[object Error]"){let X=Error(w.message,w.cause?{cause:w.cause}:{});if(w.stack)X.stack=w.stack;if(w.cause&&!X.cause)X.cause=w.cause;if(w.name)X.name=w.name;return X}}catch{}try{return Error(JSON.stringify(w))}catch{}}return Error(w)};class N extends Error{}class M extends N{constructor(w,X,Z,$){super(`${M.makeMessage(w,X,Z)}`);this.status=w,this.headers=$,this.requestID=$?.get("request-id"),this.error=X}static makeMessage(w,X,Z){let $=X?.message?typeof X.message==="string"?X.message:JSON.stringify(X.message):X?JSON.stringify(X):Z;if(w&&$)return`${w} ${$}`;if(w)return`${w} status code (no body)`;if($)return $;return"(no status code or body)"}static generate(w,X,Z,$){if(!w||!$)return new t({message:Z,cause:qw(X)});let z=X;if(w===400)return new Hw(w,z,Z,$);if(w===401)return new Dw(w,z,Z,$);if(w===403)return new Mw(w,z,Z,$);if(w===404)return new Aw(w,z,Z,$);if(w===409)return new Tw(w,z,Z,$);if(w===422)return new Ew(w,z,Z,$);if(w===429)return new Fw(w,z,Z,$);if(w>=500)return new Sw(w,z,Z,$);return new M(w,z,Z,$)}}class S extends M{constructor({message:w}={}){super(void 0,void 0,w||"Request was aborted.",void 0)}}class t extends M{constructor({message:w,cause:X}){super(void 0,void 0,w||"Connection error.",void 0);if(X)this.cause=X}}class Ow extends t{constructor({message:w}={}){super({message:w??"Request timed out."})}}class Hw extends M{}class Dw extends M{}class Mw extends M{}class Aw extends M{}class Tw extends M{}class Ew extends M{}class Fw extends M{}class Sw extends M{}var M5=/^[a-z][a-z0-9+.-]*:/i,H2=(w)=>{return M5.test(w)},h0=(w)=>(h0=Array.isArray,h0(w)),b0=h0;function W0(w){if(typeof w!=="object")return{};return w??{}}function D2(w){if(!w)return!0;for(let X in w)return!1;return!0}function M2(w,X){return Object.prototype.hasOwnProperty.call(w,X)}var A2=(w,X)=>{if(typeof X!=="number"||!Number.isInteger(X))throw new N(`${w} must be an integer`);if(X<0)throw new N(`${w} must be a positive integer`);return X};var Y0=(w)=>{try{return JSON.parse(w)}catch(X){return}};var T2=(w)=>new Promise((X)=>setTimeout(X,w));var u="0.78.0";var I2=()=>{return typeof window<"u"&&typeof window.document<"u"&&typeof navigator<"u"};function A5(){if(typeof Deno<"u"&&Deno.build!=null)return"deno";if(typeof EdgeRuntime<"u")return"edge";if(Object.prototype.toString.call(typeof globalThis.process<"u"?globalThis.process:0)==="[object process]")return"node";return"unknown"}var T5=()=>{let w=A5();if(w==="deno")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":u,"X-Stainless-OS":F2(Deno.build.os),"X-Stainless-Arch":E2(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":typeof Deno.version==="string"?Deno.version:Deno.version?.deno??"unknown"};if(typeof EdgeRuntime<"u")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":u,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if(w==="node")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":u,"X-Stainless-OS":F2(globalThis.process.platform??"unknown"),"X-Stainless-Arch":E2(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};let X=E5();if(X)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":u,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${X.browser}`,"X-Stainless-Runtime-Version":X.version};return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":u,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};function E5(){if(typeof navigator>"u"||!navigator)return null;let w=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(let{key:X,pattern:Z}of w){let $=Z.exec(navigator.userAgent);if($){let z=$[1]||0,W=$[2]||0,K=$[3]||0;return{browser:X,version:`${z}.${W}.${K}`}}}return null}var E2=(w)=>{if(w==="x32")return"x32";if(w==="x86_64"||w==="x64")return"x64";if(w==="arm")return"arm";if(w==="aarch64"||w==="arm64")return"arm64";if(w)return`other:${w}`;return"unknown"},F2=(w)=>{if(w=w.toLowerCase(),w.includes("ios"))return"iOS";if(w==="android")return"Android";if(w==="darwin")return"MacOS";if(w==="win32")return"Windows";if(w==="freebsd")return"FreeBSD";if(w==="openbsd")return"OpenBSD";if(w==="linux")return"Linux";if(w)return`Other:${w}`;return"Unknown"},S2,L2=()=>{return S2??(S2=T5())};function j2(){if(typeof fetch<"u")return fetch;throw Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new Anthropic({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}function g0(...w){let X=globalThis.ReadableStream;if(typeof X>"u")throw Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new X(...w)}function K0(w){let X=Symbol.asyncIterator in w?w[Symbol.asyncIterator]():w[Symbol.iterator]();return g0({start(){},async pull(Z){let{done:$,value:z}=await X.next();if($)Z.close();else Z.enqueue(z)},async cancel(){await X.return?.()}})}function Iw(w){if(w[Symbol.asyncIterator])return w;let X=w.getReader();return{async next(){try{let Z=await X.read();if(Z?.done)X.releaseLock();return Z}catch(Z){throw X.releaseLock(),Z}},async return(){let Z=X.cancel();return X.releaseLock(),await Z,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}async function B2(w){if(w===null||typeof w!=="object")return;if(w[Symbol.asyncIterator]){await w[Symbol.asyncIterator]().return?.();return}let X=w.getReader(),Z=X.cancel();X.releaseLock(),await Z}var P2=({headers:w,body:X})=>{return{bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(X)}};function R2(w){let X=0;for(let z of w)X+=z.length;let Z=new Uint8Array(X),$=0;for(let z of w)Z.set(z,$),$+=z.length;return Z}var y2;function Lw(w){let X;return(y2??(X=new globalThis.TextEncoder,y2=X.encode.bind(X)))(w)}var f2;function _0(w){let X;return(f2??(X=new globalThis.TextDecoder,f2=X.decode.bind(X)))(w)}var I,L;class p{constructor(){I.set(this,void 0),L.set(this,void 0),V(this,I,new Uint8Array,"f"),V(this,L,null,"f")}decode(w){if(w==null)return[];let X=w instanceof ArrayBuffer?new Uint8Array(w):typeof w==="string"?Lw(w):w;V(this,I,R2([Y(this,I,"f"),X]),"f");let Z=[],$;while(($=I5(Y(this,I,"f"),Y(this,L,"f")))!=null){if($.carriage&&Y(this,L,"f")==null){V(this,L,$.index,"f");continue}if(Y(this,L,"f")!=null&&($.index!==Y(this,L,"f")+1||$.carriage)){Z.push(_0(Y(this,I,"f").subarray(0,Y(this,L,"f")-1))),V(this,I,Y(this,I,"f").subarray(Y(this,L,"f")),"f"),V(this,L,null,"f");continue}let z=Y(this,L,"f")!==null?$.preceding-1:$.preceding,W=_0(Y(this,I,"f").subarray(0,z));Z.push(W),V(this,I,Y(this,I,"f").subarray($.index),"f"),V(this,L,null,"f")}return Z}flush(){if(!Y(this,I,"f").length)return[];return this.decode(` -`)}}I=new WeakMap,L=new WeakMap;p.NEWLINE_CHARS=new Set([` -`,"\r"]);p.NEWLINE_REGEXP=/\r\n|[\n\r]/g;function I5(w,X){for(let z=X??0;z{if(!w)return;if(M2(V0,w))return w;F(Z).warn(`${X} was set to ${JSON.stringify(w)}, expected one of ${JSON.stringify(Object.keys(V0))}`);return};function jw(){}function J0(w,X,Z){if(!X||V0[w]>V0[Z])return jw;else return X[w].bind(X)}var L5={error:jw,warn:jw,info:jw,debug:jw},h2=new WeakMap;function F(w){let X=w.logger,Z=w.logLevel??"off";if(!X)return L5;let $=h2.get(X);if($&&$[0]===Z)return $[1];let z={error:J0("error",X,Z),warn:J0("warn",X,Z),info:J0("info",X,Z),debug:J0("debug",X,Z)};return h2.set(X,[Z,z]),z}var g=(w)=>{if(w.options)w.options={...w.options},delete w.options.headers;if(w.headers)w.headers=Object.fromEntries((w.headers instanceof Headers?[...w.headers]:Object.entries(w.headers)).map(([X,Z])=>[X,X.toLowerCase()==="x-api-key"||X.toLowerCase()==="authorization"||X.toLowerCase()==="cookie"||X.toLowerCase()==="set-cookie"?"***":Z]));if("retryOfRequestLogID"in w){if(w.retryOfRequestLogID)w.retryOf=w.retryOfRequestLogID;delete w.retryOfRequestLogID}return w};var Bw;class j{constructor(w,X,Z){this.iterator=w,Bw.set(this,void 0),this.controller=X,V(this,Bw,Z,"f")}static fromSSEResponse(w,X,Z){let $=!1,z=Z?F(Z):console;async function*W(){if($)throw new N("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");$=!0;let K=!1;try{for await(let J of j5(w,X)){if(J.event==="completion")try{yield JSON.parse(J.data)}catch(Q){throw z.error("Could not parse message into JSON:",J.data),z.error("From chunk:",J.raw),Q}if(J.event==="message_start"||J.event==="message_delta"||J.event==="message_stop"||J.event==="content_block_start"||J.event==="content_block_delta"||J.event==="content_block_stop")try{yield JSON.parse(J.data)}catch(Q){throw z.error("Could not parse message into JSON:",J.data),z.error("From chunk:",J.raw),Q}if(J.event==="ping")continue;if(J.event==="error")throw new M(void 0,Y0(J.data)??J.data,void 0,w.headers)}K=!0}catch(J){if(b(J))return;throw J}finally{if(!K)X.abort()}}return new j(W,X,Z)}static fromReadableStream(w,X,Z){let $=!1;async function*z(){let K=new p,J=Iw(w);for await(let Q of J)for(let G of K.decode(Q))yield G;for(let Q of K.flush())yield Q}async function*W(){if($)throw new N("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");$=!0;let K=!1;try{for await(let J of z()){if(K)continue;if(J)yield JSON.parse(J)}K=!0}catch(J){if(b(J))return;throw J}finally{if(!K)X.abort()}}return new j(W,X,Z)}[(Bw=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){let w=[],X=[],Z=this.iterator(),$=(z)=>{return{next:()=>{if(z.length===0){let W=Z.next();w.push(W),X.push(W)}return z.shift()}}};return[new j(()=>$(w),this.controller,Y(this,Bw,"f")),new j(()=>$(X),this.controller,Y(this,Bw,"f"))]}toReadableStream(){let w=this,X;return g0({async start(){X=w[Symbol.asyncIterator]()},async pull(Z){try{let{value:$,done:z}=await X.next();if(z)return Z.close();let W=Lw(JSON.stringify($)+` -`);Z.enqueue(W)}catch($){Z.error($)}},async cancel(){await X.return?.()}})}}async function*j5(w,X){if(!w.body){if(X.abort(),typeof globalThis.navigator<"u"&&globalThis.navigator.product==="ReactNative")throw new N("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new N("Attempted to iterate over a response with no body")}let Z=new b2,$=new p,z=Iw(w.body);for await(let W of B5(z))for(let K of $.decode(W)){let J=Z.decode(K);if(J)yield J}for(let W of $.flush()){let K=Z.decode(W);if(K)yield K}}async function*B5(w){let X=new Uint8Array;for await(let Z of w){if(Z==null)continue;let $=Z instanceof ArrayBuffer?new Uint8Array(Z):typeof Z==="string"?Lw(Z):Z,z=new Uint8Array(X.length+$.length);z.set(X),z.set($,X.length),X=z;let W;while((W=k2(X))!==-1)yield X.slice(0,W),X=X.slice(W)}if(X.length>0)yield X}class b2{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(w){if(w.endsWith("\r"))w=w.substring(0,w.length-1);if(!w){if(!this.event&&!this.data.length)return null;let z={event:this.event,data:this.data.join(` -`),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],z}if(this.chunks.push(w),w.startsWith(":"))return null;let[X,Z,$]=P5(w,":");if($.startsWith(" "))$=$.substring(1);if(X==="event")this.event=$;else if(X==="data")this.data.push($);return null}}function P5(w,X){let Z=w.indexOf(X);if(Z!==-1)return[w.substring(0,Z),X,w.substring(Z+X.length)];return[w,"",""]}async function Q0(w,X){let{response:Z,requestLogID:$,retryOfRequestLogID:z,startTime:W}=X,K=await(async()=>{if(X.options.stream){if(F(w).debug("response",Z.status,Z.url,Z.headers,Z.body),X.options.__streamClass)return X.options.__streamClass.fromSSEResponse(Z,X.controller);return j.fromSSEResponse(Z,X.controller)}if(Z.status===204)return null;if(X.options.__binaryResponse)return Z;let Q=Z.headers.get("content-type")?.split(";")[0]?.trim();if(Q?.includes("application/json")||Q?.endsWith("+json")){if(Z.headers.get("content-length")==="0")return;let U=await Z.json();return v0(U,Z)}return await Z.text()})();return F(w).debug(`[${$}] response parsed`,g({retryOfRequestLogID:z,url:Z.url,status:Z.status,body:K,durationMs:Date.now()-W})),K}function v0(w,X){if(!w||typeof w!=="object"||Array.isArray(w))return w;return Object.defineProperty(w,"_request_id",{value:X.headers.get("request-id"),enumerable:!1})}var Pw;class s extends Promise{constructor(w,X,Z=Q0){super(($)=>{$(null)});this.responsePromise=X,this.parseResponse=Z,Pw.set(this,void 0),V(this,Pw,w,"f")}_thenUnwrap(w){return new s(Y(this,Pw,"f"),this.responsePromise,async(X,Z)=>v0(w(await this.parseResponse(X,Z),Z),Z.response))}asResponse(){return this.responsePromise.then((w)=>w.response)}async withResponse(){let[w,X]=await Promise.all([this.parse(),this.asResponse()]);return{data:w,response:X,request_id:X.headers.get("request-id")}}parse(){if(!this.parsedPromise)this.parsedPromise=this.responsePromise.then((w)=>this.parseResponse(Y(this,Pw,"f"),w));return this.parsedPromise}then(w,X){return this.parse().then(w,X)}catch(w){return this.parse().catch(w)}finally(w){return this.parse().finally(w)}}Pw=new WeakMap;var N0;class c0{constructor(w,X,Z,$){N0.set(this,void 0),V(this,N0,w,"f"),this.options=$,this.response=X,this.body=Z}hasNextPage(){if(!this.getPaginatedItems().length)return!1;return this.nextPageRequestOptions()!=null}async getNextPage(){let w=this.nextPageRequestOptions();if(!w)throw new N("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await Y(this,N0,"f").requestAPIList(this.constructor,w)}async*iterPages(){let w=this;yield w;while(w.hasNextPage())w=await w.getNextPage(),yield w}async*[(N0=new WeakMap,Symbol.asyncIterator)](){for await(let w of this.iterPages())for(let X of w.getPaginatedItems())yield X}}class G0 extends s{constructor(w,X,Z){super(w,X,async($,z)=>new Z($,z.response,await Q0($,z),z.options))}async*[Symbol.asyncIterator](){let w=await this;for await(let X of w)yield X}}class f extends c0{constructor(w,X,Z,$){super(w,X,Z,$);this.data=Z.data||[],this.has_more=Z.has_more||!1,this.first_id=Z.first_id||null,this.last_id=Z.last_id||null}getPaginatedItems(){return this.data??[]}hasNextPage(){if(this.has_more===!1)return!1;return super.hasNextPage()}nextPageRequestOptions(){if(this.options.query?.before_id){let X=this.first_id;if(!X)return null;return{...this.options,query:{...W0(this.options.query),before_id:X}}}let w=this.last_id;if(!w)return null;return{...this.options,query:{...W0(this.options.query),after_id:w}}}}class yw extends c0{constructor(w,X,Z,$){super(w,X,Z,$);this.data=Z.data||[],this.has_more=Z.has_more||!1,this.next_page=Z.next_page||null}getPaginatedItems(){return this.data??[]}hasNextPage(){if(this.has_more===!1)return!1;return super.hasNextPage()}nextPageRequestOptions(){let w=this.next_page;if(!w)return null;return{...this.options,query:{...W0(this.options.query),page:w}}}}var u0=()=>{if(typeof File>"u"){let{process:w}=globalThis,X=typeof w?.versions?.node==="string"&&parseInt(w.versions.node.split("."))<20;throw Error("`File` is not defined as a global, which is required for file uploads."+(X?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};function r(w,X,Z){return u0(),new File(w,X??"unknown_file",Z)}function fw(w,X){let Z=typeof w==="object"&&w!==null&&(("name"in w)&&w.name&&String(w.name)||("url"in w)&&w.url&&String(w.url)||("filename"in w)&&w.filename&&String(w.filename)||("path"in w)&&w.path&&String(w.path))||"";return X?Z.split(/[\\/]/).pop()||void 0:Z}var p0=(w)=>w!=null&&typeof w==="object"&&typeof w[Symbol.asyncIterator]==="function";var $w=async(w,X,Z=!0)=>{return{...w,body:await R5(w.body,X,Z)}},g2=new WeakMap;function f5(w){let X=typeof w==="function"?w:w.fetch,Z=g2.get(X);if(Z)return Z;let $=(async()=>{try{let z="Response"in X?X.Response:(await X("data:,")).constructor,W=new FormData;if(W.toString()===await new z(W).text())return!1;return!0}catch{return!0}})();return g2.set(X,$),$}var R5=async(w,X,Z=!0)=>{if(!await f5(X))throw TypeError("The provided fetch function does not support file uploads with the current global FormData class.");let $=new FormData;return await Promise.all(Object.entries(w||{}).map(([z,W])=>m0($,z,W,Z))),$},k5=(w)=>w instanceof Blob&&("name"in w);var m0=async(w,X,Z,$)=>{if(Z===void 0)return;if(Z==null)throw TypeError(`Received null for "${X}"; to pass null in FormData, you must use the string 'null'`);if(typeof Z==="string"||typeof Z==="number"||typeof Z==="boolean")w.append(X,String(Z));else if(Z instanceof Response){let z={},W=Z.headers.get("Content-Type");if(W)z={type:W};w.append(X,r([await Z.blob()],fw(Z,$),z))}else if(p0(Z))w.append(X,r([await new Response(K0(Z)).blob()],fw(Z,$)));else if(k5(Z))w.append(X,r([Z],fw(Z,$),{type:Z.type}));else if(Array.isArray(Z))await Promise.all(Z.map((z)=>m0(w,X+"[]",z,$)));else if(typeof Z==="object")await Promise.all(Object.entries(Z).map(([z,W])=>m0(w,`${X}[${z}]`,W,$)));else throw TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${Z} instead`)};var _2=(w)=>w!=null&&typeof w==="object"&&typeof w.size==="number"&&typeof w.type==="string"&&typeof w.text==="function"&&typeof w.slice==="function"&&typeof w.arrayBuffer==="function",h5=(w)=>w!=null&&typeof w==="object"&&typeof w.name==="string"&&typeof w.lastModified==="number"&&_2(w),b5=(w)=>w!=null&&typeof w==="object"&&typeof w.url==="string"&&typeof w.blob==="function";async function x0(w,X,Z){if(u0(),w=await w,X||(X=fw(w,!0)),h5(w)){if(w instanceof File&&X==null&&Z==null)return w;return r([await w.arrayBuffer()],X??w.name,{type:w.type,lastModified:w.lastModified,...Z})}if(b5(w)){let z=await w.blob();return X||(X=new URL(w.url).pathname.split(/[\\/]/).pop()),r(await i0(z),X,Z)}let $=await i0(w);if(!Z?.type){let z=$.find((W)=>typeof W==="object"&&("type"in W)&&W.type);if(typeof z==="string")Z={...Z,type:z}}return r($,X,Z)}async function i0(w){let X=[];if(typeof w==="string"||ArrayBuffer.isView(w)||w instanceof ArrayBuffer)X.push(w);else if(_2(w))X.push(w instanceof Blob?w:await w.arrayBuffer());else if(p0(w))for await(let Z of w)X.push(...await i0(Z));else{let Z=w?.constructor?.name;throw Error(`Unexpected data type: ${typeof w}${Z?`; constructor: ${Z}`:""}${g5(w)}`)}return X}function g5(w){if(typeof w!=="object"||w===null)return"";return`; props: [${Object.getOwnPropertyNames(w).map((Z)=>`"${Z}"`).join(", ")}]`}class O{constructor(w){this._client=w}}var d2=Symbol.for("brand.privateNullableHeaders");function*d5(w){if(!w)return;if(d2 in w){let{values:$,nulls:z}=w;yield*$.entries();for(let W of z)yield[W,null];return}let X=!1,Z;if(w instanceof Headers)Z=w.entries();else if(b0(w))Z=w;else X=!0,Z=Object.entries(w??{});for(let $ of Z){let z=$[0];if(typeof z!=="string")throw TypeError("expected header name to be a string");let W=b0($[1])?$[1]:[$[1]],K=!1;for(let J of W){if(J===void 0)continue;if(X&&!K)K=!0,yield[z,null];yield[z,J]}}}var x=(w)=>{let X=new Headers,Z=new Set;for(let $ of w){let z=new Set;for(let[W,K]of d5($)){let J=W.toLowerCase();if(!z.has(J))X.delete(W),z.add(J);if(K===null)X.delete(W),Z.add(J);else X.append(W,K),Z.delete(J)}}return{[d2]:!0,values:X,nulls:Z}};var Rw=Symbol("anthropic.sdk.stainlessHelper");function C0(w){return typeof w==="object"&&w!==null&&Rw in w}function l0(w,X){let Z=new Set;if(w){for(let $ of w)if(C0($))Z.add($[Rw])}if(X)for(let $ of X){if(C0($))Z.add($[Rw]);if(Array.isArray($.content)){for(let z of $.content)if(C0(z))Z.add(z[Rw])}}return Array.from(Z)}function U0(w,X){let Z=l0(w,X);if(Z.length===0)return{};return{"x-stainless-helper":Z.join(", ")}}function v2(w){if(C0(w))return{"x-stainless-helper":w[Rw]};return{}}function m2(w){return w.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}var c2=Object.freeze(Object.create(null)),v5=(w=m2)=>function(Z,...$){if(Z.length===1)return Z[0];let z=!1,W=[],K=Z.reduce((C,T,U)=>{if(/[?#]/.test(T))z=!0;let E=$[U],o=(z?encodeURIComponent:w)(""+E);if(U!==$.length&&(E==null||typeof E==="object"&&E.toString===Object.getPrototypeOf(Object.getPrototypeOf(E.hasOwnProperty??c2)??c2)?.toString))o=E+"",W.push({start:C.length+T.length,length:o.length,error:`Value of type ${Object.prototype.toString.call(E).slice(8,-1)} is not a valid path parameter`});return C+T+(U===$.length?"":o)},""),J=K.split(/[?#]/,1)[0],Q=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi,G;while((G=Q.exec(J))!==null)W.push({start:G.index,length:G[0].length,error:`Value "${G[0]}" can't be safely passed as a path parameter`});if(W.sort((C,T)=>C.start-T.start),W.length>0){let C=0,T=W.reduce((U,E)=>{let o=" ".repeat(E.start-C),Uw="^".repeat(E.length);return C=E.start+E.length,U+o+Uw},"");throw new N(`Path parameters result in path with invalid segments: -${W.map((U)=>U.error).join(` +var{defineProperty:B0,getOwnPropertyNames:X1,getOwnPropertyDescriptor:Z1}=Object,$1=Object.prototype.hasOwnProperty;var J4=new WeakMap,W1=(w)=>{var X=J4.get(w),Z;if(X)return X;if(X=B0({},"__esModule",{value:!0}),w&&typeof w==="object"||typeof w==="function")X1(w).map(($)=>!$1.call(X,$)&&B0(X,$,{get:()=>w[$],enumerable:!(Z=Z1(w,$))||Z.enumerable}));return J4.set(w,X),X};var Y1=(w,X)=>{for(var Z in X)B0(w,Z,{get:X[Z],enumerable:!0,configurable:!0,set:($)=>X[Z]=()=>$})};var m1={};Y1(m1,{default:()=>W4});module.exports=W1(m1);var w1=require("obsidian");var Gw=require("obsidian");function V(w,X,Z,$,W){if($==="m")throw TypeError("Private method is not writable");if($==="a"&&!W)throw TypeError("Private accessor was defined without a setter");if(typeof X==="function"?w!==X||!W:!X.has(w))throw TypeError("Cannot write private member to an object whose class did not declare it");return $==="a"?W.call(w,Z):W?W.value=Z:X.set(w,Z),Z}function K(w,X,Z,$){if(Z==="a"&&!$)throw TypeError("Private accessor was defined without a getter");if(typeof X==="function"?w!==X||!$:!X.has(w))throw TypeError("Cannot read private member from an object whose class did not declare it");return Z==="m"?$:Z==="a"?$.call(w):$?$.value:X.get(w)}var I0=function(){let{crypto:w}=globalThis;if(w?.randomUUID)return I0=w.randomUUID.bind(w),w.randomUUID();let X=new Uint8Array(1),Z=w?()=>w.getRandomValues(X)[0]:()=>Math.random()*255&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,($)=>(+$^Z()&15>>+$/4).toString(16))};function h(w){return typeof w==="object"&&w!==null&&(("name"in w)&&w.name==="AbortError"||("message"in w)&&String(w.message).includes("FetchRequestCanceledException"))}var xw=(w)=>{if(w instanceof Error)return w;if(typeof w==="object"&&w!==null){try{if(Object.prototype.toString.call(w)==="[object Error]"){let X=Error(w.message,w.cause?{cause:w.cause}:{});if(w.stack)X.stack=w.stack;if(w.cause&&!X.cause)X.cause=w.cause;if(w.name)X.name=w.name;return X}}catch{}try{return Error(JSON.stringify(w))}catch{}}return Error(w)};class N extends Error{}class E extends N{constructor(w,X,Z,$){super(`${E.makeMessage(w,X,Z)}`);this.status=w,this.headers=$,this.requestID=$?.get("request-id"),this.error=X}static makeMessage(w,X,Z){let $=X?.message?typeof X.message==="string"?X.message:JSON.stringify(X.message):X?JSON.stringify(X):Z;if(w&&$)return`${w} ${$}`;if(w)return`${w} status code (no body)`;if($)return $;return"(no status code or body)"}static generate(w,X,Z,$){if(!w||!$)return new a({message:Z,cause:xw(X)});let W=X;if(w===400)return new Hw(w,W,Z,$);if(w===401)return new Uw(w,W,Z,$);if(w===403)return new qw(w,W,Z,$);if(w===404)return new Dw(w,W,Z,$);if(w===409)return new Fw(w,W,Z,$);if(w===422)return new Ew(w,W,Z,$);if(w===429)return new Mw(w,W,Z,$);if(w>=500)return new Aw(w,W,Z,$);return new E(w,W,Z,$)}}class S extends E{constructor({message:w}={}){super(void 0,void 0,w||"Request was aborted.",void 0)}}class a extends E{constructor({message:w,cause:X}){super(void 0,void 0,w||"Connection error.",void 0);if(X)this.cause=X}}class Ow extends a{constructor({message:w}={}){super({message:w??"Request timed out."})}}class Hw extends E{}class Uw extends E{}class qw extends E{}class Dw extends E{}class Fw extends E{}class Ew extends E{}class Mw extends E{}class Aw extends E{}var z1=/^[a-z][a-z0-9+.-]*:/i,V4=(w)=>{return z1.test(w)},P0=(w)=>(P0=Array.isArray,P0(w)),j0=P0;function X0(w){if(typeof w!=="object")return{};return w??{}}function Q4(w){if(!w)return!0;for(let X in w)return!1;return!0}function N4(w,X){return Object.prototype.hasOwnProperty.call(w,X)}var G4=(w,X)=>{if(typeof X!=="number"||!Number.isInteger(X))throw new N(`${w} must be an integer`);if(X<0)throw new N(`${w} must be a positive integer`);return X};var Z0=(w)=>{try{return JSON.parse(w)}catch(X){return}};var C4=(w)=>new Promise((X)=>setTimeout(X,w));var u="0.71.2";var U4=()=>{return typeof window<"u"&&typeof window.document<"u"&&typeof navigator<"u"};function J1(){if(typeof Deno<"u"&&Deno.build!=null)return"deno";if(typeof EdgeRuntime<"u")return"edge";if(Object.prototype.toString.call(typeof globalThis.process<"u"?globalThis.process:0)==="[object process]")return"node";return"unknown"}var V1=()=>{let w=J1();if(w==="deno")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":u,"X-Stainless-OS":O4(Deno.build.os),"X-Stainless-Arch":x4(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":typeof Deno.version==="string"?Deno.version:Deno.version?.deno??"unknown"};if(typeof EdgeRuntime<"u")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":u,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if(w==="node")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":u,"X-Stainless-OS":O4(globalThis.process.platform??"unknown"),"X-Stainless-Arch":x4(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};let X=Q1();if(X)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":u,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${X.browser}`,"X-Stainless-Runtime-Version":X.version};return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":u,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};function Q1(){if(typeof navigator>"u"||!navigator)return null;let w=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(let{key:X,pattern:Z}of w){let $=Z.exec(navigator.userAgent);if($){let W=$[1]||0,Y=$[2]||0,z=$[3]||0;return{browser:X,version:`${W}.${Y}.${z}`}}}return null}var x4=(w)=>{if(w==="x32")return"x32";if(w==="x86_64"||w==="x64")return"x64";if(w==="arm")return"arm";if(w==="aarch64"||w==="arm64")return"arm64";if(w)return`other:${w}`;return"unknown"},O4=(w)=>{if(w=w.toLowerCase(),w.includes("ios"))return"iOS";if(w==="android")return"Android";if(w==="darwin")return"MacOS";if(w==="win32")return"Windows";if(w==="freebsd")return"FreeBSD";if(w==="openbsd")return"OpenBSD";if(w==="linux")return"Linux";if(w)return`Other:${w}`;return"Unknown"},H4,q4=()=>{return H4??(H4=V1())};function D4(){if(typeof fetch<"u")return fetch;throw Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new Anthropic({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}function y0(...w){let X=globalThis.ReadableStream;if(typeof X>"u")throw Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new X(...w)}function $0(w){let X=Symbol.asyncIterator in w?w[Symbol.asyncIterator]():w[Symbol.iterator]();return y0({start(){},async pull(Z){let{done:$,value:W}=await X.next();if($)Z.close();else Z.enqueue(W)},async cancel(){await X.return?.()}})}function Tw(w){if(w[Symbol.asyncIterator])return w;let X=w.getReader();return{async next(){try{let Z=await X.read();if(Z?.done)X.releaseLock();return Z}catch(Z){throw X.releaseLock(),Z}},async return(){let Z=X.cancel();return X.releaseLock(),await Z,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}async function F4(w){if(w===null||typeof w!=="object")return;if(w[Symbol.asyncIterator]){await w[Symbol.asyncIterator]().return?.();return}let X=w.getReader(),Z=X.cancel();X.releaseLock(),await Z}var E4=({headers:w,body:X})=>{return{bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(X)}};function T4(w){let X=0;for(let W of w)X+=W.length;let Z=new Uint8Array(X),$=0;for(let W of w)Z.set(W,$),$+=W.length;return Z}var M4;function Sw(w){let X;return(M4??(X=new globalThis.TextEncoder,M4=X.encode.bind(X)))(w)}var A4;function R0(w){let X;return(A4??(X=new globalThis.TextDecoder,A4=X.decode.bind(X)))(w)}var L,B;class p{constructor(){L.set(this,void 0),B.set(this,void 0),V(this,L,new Uint8Array,"f"),V(this,B,null,"f")}decode(w){if(w==null)return[];let X=w instanceof ArrayBuffer?new Uint8Array(w):typeof w==="string"?Sw(w):w;V(this,L,T4([K(this,L,"f"),X]),"f");let Z=[],$;while(($=C1(K(this,L,"f"),K(this,B,"f")))!=null){if($.carriage&&K(this,B,"f")==null){V(this,B,$.index,"f");continue}if(K(this,B,"f")!=null&&($.index!==K(this,B,"f")+1||$.carriage)){Z.push(R0(K(this,L,"f").subarray(0,K(this,B,"f")-1))),V(this,L,K(this,L,"f").subarray(K(this,B,"f")),"f"),V(this,B,null,"f");continue}let W=K(this,B,"f")!==null?$.preceding-1:$.preceding,Y=R0(K(this,L,"f").subarray(0,W));Z.push(Y),V(this,L,K(this,L,"f").subarray($.index),"f"),V(this,B,null,"f")}return Z}flush(){if(!K(this,L,"f").length)return[];return this.decode(` +`)}}L=new WeakMap,B=new WeakMap;p.NEWLINE_CHARS=new Set([` +`,"\r"]);p.NEWLINE_REGEXP=/\r\n|[\n\r]/g;function C1(w,X){for(let W=X??0;W{if(!w)return;if(N4(Y0,w))return w;T(Z).warn(`${X} was set to ${JSON.stringify(w)}, expected one of ${JSON.stringify(Object.keys(Y0))}`);return};function Lw(){}function W0(w,X,Z){if(!X||Y0[w]>Y0[Z])return Lw;else return X[w].bind(X)}var x1={error:Lw,warn:Lw,info:Lw,debug:Lw},L4=new WeakMap;function T(w){let X=w.logger,Z=w.logLevel??"off";if(!X)return x1;let $=L4.get(X);if($&&$[0]===Z)return $[1];let W={error:W0("error",X,Z),warn:W0("warn",X,Z),info:W0("info",X,Z),debug:W0("debug",X,Z)};return L4.set(X,[Z,W]),W}var _=(w)=>{if(w.options)w.options={...w.options},delete w.options.headers;if(w.headers)w.headers=Object.fromEntries((w.headers instanceof Headers?[...w.headers]:Object.entries(w.headers)).map(([X,Z])=>[X,X.toLowerCase()==="x-api-key"||X.toLowerCase()==="authorization"||X.toLowerCase()==="cookie"||X.toLowerCase()==="set-cookie"?"***":Z]));if("retryOfRequestLogID"in w){if(w.retryOfRequestLogID)w.retryOf=w.retryOfRequestLogID;delete w.retryOfRequestLogID}return w};var Bw;class I{constructor(w,X,Z){this.iterator=w,Bw.set(this,void 0),this.controller=X,V(this,Bw,Z,"f")}static fromSSEResponse(w,X,Z){let $=!1,W=Z?T(Z):console;async function*Y(){if($)throw new N("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");$=!0;let z=!1;try{for await(let J of O1(w,X)){if(J.event==="completion")try{yield JSON.parse(J.data)}catch(Q){throw W.error("Could not parse message into JSON:",J.data),W.error("From chunk:",J.raw),Q}if(J.event==="message_start"||J.event==="message_delta"||J.event==="message_stop"||J.event==="content_block_start"||J.event==="content_block_delta"||J.event==="content_block_stop")try{yield JSON.parse(J.data)}catch(Q){throw W.error("Could not parse message into JSON:",J.data),W.error("From chunk:",J.raw),Q}if(J.event==="ping")continue;if(J.event==="error")throw new E(void 0,Z0(J.data)??J.data,void 0,w.headers)}z=!0}catch(J){if(h(J))return;throw J}finally{if(!z)X.abort()}}return new I(Y,X,Z)}static fromReadableStream(w,X,Z){let $=!1;async function*W(){let z=new p,J=Tw(w);for await(let Q of J)for(let G of z.decode(Q))yield G;for(let Q of z.flush())yield Q}async function*Y(){if($)throw new N("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");$=!0;let z=!1;try{for await(let J of W()){if(z)continue;if(J)yield JSON.parse(J)}z=!0}catch(J){if(h(J))return;throw J}finally{if(!z)X.abort()}}return new I(Y,X,Z)}[(Bw=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){let w=[],X=[],Z=this.iterator(),$=(W)=>{return{next:()=>{if(W.length===0){let Y=Z.next();w.push(Y),X.push(Y)}return W.shift()}}};return[new I(()=>$(w),this.controller,K(this,Bw,"f")),new I(()=>$(X),this.controller,K(this,Bw,"f"))]}toReadableStream(){let w=this,X;return y0({async start(){X=w[Symbol.asyncIterator]()},async pull(Z){try{let{value:$,done:W}=await X.next();if(W)return Z.close();let Y=Sw(JSON.stringify($)+` +`);Z.enqueue(Y)}catch($){Z.error($)}},async cancel(){await X.return?.()}})}}async function*O1(w,X){if(!w.body){if(X.abort(),typeof globalThis.navigator<"u"&&globalThis.navigator.product==="ReactNative")throw new N("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new N("Attempted to iterate over a response with no body")}let Z=new B4,$=new p,W=Tw(w.body);for await(let Y of H1(W))for(let z of $.decode(Y)){let J=Z.decode(z);if(J)yield J}for(let Y of $.flush()){let z=Z.decode(Y);if(z)yield z}}async function*H1(w){let X=new Uint8Array;for await(let Z of w){if(Z==null)continue;let $=Z instanceof ArrayBuffer?new Uint8Array(Z):typeof Z==="string"?Sw(Z):Z,W=new Uint8Array(X.length+$.length);W.set(X),W.set($,X.length),X=W;let Y;while((Y=S4(X))!==-1)yield X.slice(0,Y),X=X.slice(Y)}if(X.length>0)yield X}class B4{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(w){if(w.endsWith("\r"))w=w.substring(0,w.length-1);if(!w){if(!this.event&&!this.data.length)return null;let W={event:this.event,data:this.data.join(` +`),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],W}if(this.chunks.push(w),w.startsWith(":"))return null;let[X,Z,$]=U1(w,":");if($.startsWith(" "))$=$.substring(1);if(X==="event")this.event=$;else if(X==="data")this.data.push($);return null}}function U1(w,X){let Z=w.indexOf(X);if(Z!==-1)return[w.substring(0,Z),X,w.substring(Z+X.length)];return[w,"",""]}async function K0(w,X){let{response:Z,requestLogID:$,retryOfRequestLogID:W,startTime:Y}=X,z=await(async()=>{if(X.options.stream){if(T(w).debug("response",Z.status,Z.url,Z.headers,Z.body),X.options.__streamClass)return X.options.__streamClass.fromSSEResponse(Z,X.controller);return I.fromSSEResponse(Z,X.controller)}if(Z.status===204)return null;if(X.options.__binaryResponse)return Z;let Q=Z.headers.get("content-type")?.split(";")[0]?.trim();if(Q?.includes("application/json")||Q?.endsWith("+json")){let F=await Z.json();return k0(F,Z)}return await Z.text()})();return T(w).debug(`[${$}] response parsed`,_({retryOfRequestLogID:W,url:Z.url,status:Z.status,body:z,durationMs:Date.now()-Y})),z}function k0(w,X){if(!w||typeof w!=="object"||Array.isArray(w))return w;return Object.defineProperty(w,"_request_id",{value:X.headers.get("request-id"),enumerable:!1})}var Iw;class t extends Promise{constructor(w,X,Z=K0){super(($)=>{$(null)});this.responsePromise=X,this.parseResponse=Z,Iw.set(this,void 0),V(this,Iw,w,"f")}_thenUnwrap(w){return new t(K(this,Iw,"f"),this.responsePromise,async(X,Z)=>k0(w(await this.parseResponse(X,Z),Z),Z.response))}asResponse(){return this.responsePromise.then((w)=>w.response)}async withResponse(){let[w,X]=await Promise.all([this.parse(),this.asResponse()]);return{data:w,response:X,request_id:X.headers.get("request-id")}}parse(){if(!this.parsedPromise)this.parsedPromise=this.responsePromise.then((w)=>this.parseResponse(K(this,Iw,"f"),w));return this.parsedPromise}then(w,X){return this.parse().then(w,X)}catch(w){return this.parse().catch(w)}finally(w){return this.parse().finally(w)}}Iw=new WeakMap;var z0;class b0{constructor(w,X,Z,$){z0.set(this,void 0),V(this,z0,w,"f"),this.options=$,this.response=X,this.body=Z}hasNextPage(){if(!this.getPaginatedItems().length)return!1;return this.nextPageRequestOptions()!=null}async getNextPage(){let w=this.nextPageRequestOptions();if(!w)throw new N("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await K(this,z0,"f").requestAPIList(this.constructor,w)}async*iterPages(){let w=this;yield w;while(w.hasNextPage())w=await w.getNextPage(),yield w}async*[(z0=new WeakMap,Symbol.asyncIterator)](){for await(let w of this.iterPages())for(let X of w.getPaginatedItems())yield X}}class J0 extends t{constructor(w,X,Z){super(w,X,async($,W)=>new Z($,W.response,await K0($,W),W.options))}async*[Symbol.asyncIterator](){let w=await this;for await(let X of w)yield X}}class R extends b0{constructor(w,X,Z,$){super(w,X,Z,$);this.data=Z.data||[],this.has_more=Z.has_more||!1,this.first_id=Z.first_id||null,this.last_id=Z.last_id||null}getPaginatedItems(){return this.data??[]}hasNextPage(){if(this.has_more===!1)return!1;return super.hasNextPage()}nextPageRequestOptions(){if(this.options.query?.before_id){let X=this.first_id;if(!X)return null;return{...this.options,query:{...X0(this.options.query),before_id:X}}}let w=this.last_id;if(!w)return null;return{...this.options,query:{...X0(this.options.query),after_id:w}}}}class Pw extends b0{constructor(w,X,Z,$){super(w,X,Z,$);this.data=Z.data||[],this.has_more=Z.has_more||!1,this.next_page=Z.next_page||null}getPaginatedItems(){return this.data??[]}hasNextPage(){if(this.has_more===!1)return!1;return super.hasNextPage()}nextPageRequestOptions(){let w=this.next_page;if(!w)return null;return{...this.options,query:{...X0(this.options.query),page:w}}}}var _0=()=>{if(typeof File>"u"){let{process:w}=globalThis,X=typeof w?.versions?.node==="string"&&parseInt(w.versions.node.split("."))<20;throw Error("`File` is not defined as a global, which is required for file uploads."+(X?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};function s(w,X,Z){return _0(),new File(w,X??"unknown_file",Z)}function jw(w){return(typeof w==="object"&&w!==null&&(("name"in w)&&w.name&&String(w.name)||("url"in w)&&w.url&&String(w.url)||("filename"in w)&&w.filename&&String(w.filename)||("path"in w)&&w.path&&String(w.path))||"").split(/[\\/]/).pop()||void 0}var g0=(w)=>w!=null&&typeof w==="object"&&typeof w[Symbol.asyncIterator]==="function";var $w=async(w,X)=>{return{...w,body:await F1(w.body,X)}},I4=new WeakMap;function D1(w){let X=typeof w==="function"?w:w.fetch,Z=I4.get(X);if(Z)return Z;let $=(async()=>{try{let W="Response"in X?X.Response:(await X("data:,")).constructor,Y=new FormData;if(Y.toString()===await new W(Y).text())return!1;return!0}catch{return!0}})();return I4.set(X,$),$}var F1=async(w,X)=>{if(!await D1(X))throw TypeError("The provided fetch function does not support file uploads with the current global FormData class.");let Z=new FormData;return await Promise.all(Object.entries(w||{}).map(([$,W])=>h0(Z,$,W))),Z},E1=(w)=>w instanceof Blob&&("name"in w);var h0=async(w,X,Z)=>{if(Z===void 0)return;if(Z==null)throw TypeError(`Received null for "${X}"; to pass null in FormData, you must use the string 'null'`);if(typeof Z==="string"||typeof Z==="number"||typeof Z==="boolean")w.append(X,String(Z));else if(Z instanceof Response){let $={},W=Z.headers.get("Content-Type");if(W)$={type:W};w.append(X,s([await Z.blob()],jw(Z),$))}else if(g0(Z))w.append(X,s([await new Response($0(Z)).blob()],jw(Z)));else if(E1(Z))w.append(X,s([Z],jw(Z),{type:Z.type}));else if(Array.isArray(Z))await Promise.all(Z.map(($)=>h0(w,X+"[]",$)));else if(typeof Z==="object")await Promise.all(Object.entries(Z).map(([$,W])=>h0(w,`${X}[${$}]`,W)));else throw TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${Z} instead`)};var P4=(w)=>w!=null&&typeof w==="object"&&typeof w.size==="number"&&typeof w.type==="string"&&typeof w.text==="function"&&typeof w.slice==="function"&&typeof w.arrayBuffer==="function",M1=(w)=>w!=null&&typeof w==="object"&&typeof w.name==="string"&&typeof w.lastModified==="number"&&P4(w),A1=(w)=>w!=null&&typeof w==="object"&&typeof w.url==="string"&&typeof w.blob==="function";async function V0(w,X,Z){if(_0(),w=await w,X||(X=jw(w)),M1(w)){if(w instanceof File&&X==null&&Z==null)return w;return s([await w.arrayBuffer()],X??w.name,{type:w.type,lastModified:w.lastModified,...Z})}if(A1(w)){let W=await w.blob();return X||(X=new URL(w.url).pathname.split(/[\\/]/).pop()),s(await d0(W),X,Z)}let $=await d0(w);if(!Z?.type){let W=$.find((Y)=>typeof Y==="object"&&("type"in Y)&&Y.type);if(typeof W==="string")Z={...Z,type:W}}return s($,X,Z)}async function d0(w){let X=[];if(typeof w==="string"||ArrayBuffer.isView(w)||w instanceof ArrayBuffer)X.push(w);else if(P4(w))X.push(w instanceof Blob?w:await w.arrayBuffer());else if(g0(w))for await(let Z of w)X.push(...await d0(Z));else{let Z=w?.constructor?.name;throw Error(`Unexpected data type: ${typeof w}${Z?`; constructor: ${Z}`:""}${T1(w)}`)}return X}function T1(w){if(typeof w!=="object"||w===null)return"";return`; props: [${Object.getOwnPropertyNames(w).map((Z)=>`"${Z}"`).join(", ")}]`}class U{constructor(w){this._client=w}}var j4=Symbol.for("brand.privateNullableHeaders");function*L1(w){if(!w)return;if(j4 in w){let{values:$,nulls:W}=w;yield*$.entries();for(let Y of W)yield[Y,null];return}let X=!1,Z;if(w instanceof Headers)Z=w.entries();else if(j0(w))Z=w;else X=!0,Z=Object.entries(w??{});for(let $ of Z){let W=$[0];if(typeof W!=="string")throw TypeError("expected header name to be a string");let Y=j0($[1])?$[1]:[$[1]],z=!1;for(let J of Y){if(J===void 0)continue;if(X&&!z)z=!0,yield[W,null];yield[W,J]}}}var C=(w)=>{let X=new Headers,Z=new Set;for(let $ of w){let W=new Set;for(let[Y,z]of L1($)){let J=Y.toLowerCase();if(!W.has(J))X.delete(Y),W.add(J);if(z===null)X.delete(Y),Z.add(J);else X.append(Y,z),Z.delete(J)}}return{[j4]:!0,values:X,nulls:Z}};function R4(w){return w.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}var y4=Object.freeze(Object.create(null)),B1=(w=R4)=>function(Z,...$){if(Z.length===1)return Z[0];let W=!1,Y=[],z=Z.reduce((x,F,O)=>{if(/[?#]/.test(F))W=!0;let A=$[O],o=(W?encodeURIComponent:w)(""+A);if(O!==$.length&&(A==null||typeof A==="object"&&A.toString===Object.getPrototypeOf(Object.getPrototypeOf(A.hasOwnProperty??y4)??y4)?.toString))o=A+"",Y.push({start:x.length+F.length,length:o.length,error:`Value of type ${Object.prototype.toString.call(A).slice(8,-1)} is not a valid path parameter`});return x+F+(O===$.length?"":o)},""),J=z.split(/[?#]/,1)[0],Q=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi,G;while((G=Q.exec(J))!==null)Y.push({start:G.index,length:G[0].length,error:`Value "${G[0]}" can't be safely passed as a path parameter`});if(Y.sort((x,F)=>x.start-F.start),Y.length>0){let x=0,F=Y.reduce((O,A)=>{let o=" ".repeat(A.start-x),Cw="^".repeat(A.length);return x=A.start+A.length,O+o+Cw},"");throw new N(`Path parameters result in path with invalid segments: +${Y.map((O)=>O.error).join(` `)} -${K} -${T}`)}return K},q=v5(m2);class kw extends O{list(w={},X){let{betas:Z,...$}=w??{};return this._client.getAPIList("/v1/files",f,{query:$,...X,headers:x([{"anthropic-beta":[...Z??[],"files-api-2025-04-14"].toString()},X?.headers])})}delete(w,X={},Z){let{betas:$}=X??{};return this._client.delete(q`/v1/files/${w}`,{...Z,headers:x([{"anthropic-beta":[...$??[],"files-api-2025-04-14"].toString()},Z?.headers])})}download(w,X={},Z){let{betas:$}=X??{};return this._client.get(q`/v1/files/${w}/content`,{...Z,headers:x([{"anthropic-beta":[...$??[],"files-api-2025-04-14"].toString(),Accept:"application/binary"},Z?.headers]),__binaryResponse:!0})}retrieveMetadata(w,X={},Z){let{betas:$}=X??{};return this._client.get(q`/v1/files/${w}`,{...Z,headers:x([{"anthropic-beta":[...$??[],"files-api-2025-04-14"].toString()},Z?.headers])})}upload(w,X){let{betas:Z,...$}=w;return this._client.post("/v1/files",$w({body:$,...X,headers:x([{"anthropic-beta":[...Z??[],"files-api-2025-04-14"].toString()},v2($.file),X?.headers])},this._client))}}class hw extends O{retrieve(w,X={},Z){let{betas:$}=X??{};return this._client.get(q`/v1/models/${w}?beta=true`,{...Z,headers:x([{...$?.toString()!=null?{"anthropic-beta":$?.toString()}:void 0},Z?.headers])})}list(w={},X){let{betas:Z,...$}=w??{};return this._client.getAPIList("/v1/models?beta=true",f,{query:$,...X,headers:x([{...Z?.toString()!=null?{"anthropic-beta":Z?.toString()}:void 0},X?.headers])})}}var q0={"claude-opus-4-20250514":8192,"claude-opus-4-0":8192,"claude-4-opus-20250514":8192,"anthropic.claude-opus-4-20250514-v1:0":8192,"claude-opus-4@20250514":8192,"claude-opus-4-1-20250805":8192,"anthropic.claude-opus-4-1-20250805-v1:0":8192,"claude-opus-4-1@20250805":8192};function u2(w){return w?.output_format??w?.output_config?.format}function n0(w,X,Z){let $=u2(X);if(!X||!("parse"in($??{})))return{...w,content:w.content.map((z)=>{if(z.type==="text"){let W=Object.defineProperty({...z},"parsed_output",{value:null,enumerable:!1});return Object.defineProperty(W,"parsed",{get(){return Z.logger.warn("The `parsed` property on `text` blocks is deprecated, please use `parsed_output` instead."),null},enumerable:!1})}return z}),parsed_output:null};return a0(w,X,Z)}function a0(w,X,Z){let $=null,z=w.content.map((W)=>{if(W.type==="text"){let K=u5(X,W.text);if($===null)$=K;let J=Object.defineProperty({...W},"parsed_output",{value:K,enumerable:!1});return Object.defineProperty(J,"parsed",{get(){return Z.logger.warn("The `parsed` property on `text` blocks is deprecated, please use `parsed_output` instead."),K},enumerable:!1})}return W});return{...w,content:z,parsed_output:$}}function u5(w,X){let Z=u2(w);if(Z?.type!=="json_schema")return null;try{if("parse"in Z)return Z.parse(X);return JSON.parse(X)}catch($){throw new N(`Failed to parse structured output: ${$}`)}}var p5=(w)=>{let X=0,Z=[];while(X{if(w.length===0)return w;let X=w[w.length-1];switch(X.type){case"separator":return w=w.slice(0,w.length-1),zw(w);break;case"number":let Z=X.value[X.value.length-1];if(Z==="."||Z==="-")return w=w.slice(0,w.length-1),zw(w);case"string":let $=w[w.length-2];if($?.type==="delimiter")return w=w.slice(0,w.length-1),zw(w);else if($?.type==="brace"&&$.value==="{")return w=w.slice(0,w.length-1),zw(w);break;case"delimiter":return w=w.slice(0,w.length-1),zw(w);break}return w},i5=(w)=>{let X=[];if(w.map((Z)=>{if(Z.type==="brace")if(Z.value==="{")X.push("}");else X.splice(X.lastIndexOf("}"),1);if(Z.type==="paren")if(Z.value==="[")X.push("]");else X.splice(X.lastIndexOf("]"),1)}),X.length>0)X.reverse().map((Z)=>{if(Z==="}")w.push({type:"brace",value:"}"});else if(Z==="]")w.push({type:"paren",value:"]"})});return w},l5=(w)=>{let X="";return w.map((Z)=>{switch(Z.type){case"string":X+='"'+Z.value+'"';break;default:X+=Z.value;break}}),X},O0=(w)=>JSON.parse(l5(i5(zw(p5(w)))));var P,i,Ww,bw,H0,gw,_w,D0,dw,_,vw,M0,A0,e,T0,E0,cw,o0,p2,F0,t0,s0,r0,i2,l2="__json_buf";function n2(w){return w.type==="tool_use"||w.type==="server_tool_use"||w.type==="mcp_tool_use"}class mw{constructor(w,X){P.add(this),this.messages=[],this.receivedMessages=[],i.set(this,void 0),Ww.set(this,null),this.controller=new AbortController,bw.set(this,void 0),H0.set(this,()=>{}),gw.set(this,()=>{}),_w.set(this,void 0),D0.set(this,()=>{}),dw.set(this,()=>{}),_.set(this,{}),vw.set(this,!1),M0.set(this,!1),A0.set(this,!1),e.set(this,!1),T0.set(this,void 0),E0.set(this,void 0),cw.set(this,void 0),F0.set(this,(Z)=>{if(V(this,M0,!0,"f"),b(Z))Z=new S;if(Z instanceof S)return V(this,A0,!0,"f"),this._emit("abort",Z);if(Z instanceof N)return this._emit("error",Z);if(Z instanceof Error){let $=new N(Z.message);return $.cause=Z,this._emit("error",$)}return this._emit("error",new N(String(Z)))}),V(this,bw,new Promise((Z,$)=>{V(this,H0,Z,"f"),V(this,gw,$,"f")}),"f"),V(this,_w,new Promise((Z,$)=>{V(this,D0,Z,"f"),V(this,dw,$,"f")}),"f"),Y(this,bw,"f").catch(()=>{}),Y(this,_w,"f").catch(()=>{}),V(this,Ww,w,"f"),V(this,cw,X?.logger??console,"f")}get response(){return Y(this,T0,"f")}get request_id(){return Y(this,E0,"f")}async withResponse(){V(this,e,!0,"f");let w=await Y(this,bw,"f");if(!w)throw Error("Could not resolve a `Response` object");return{data:this,response:w,request_id:w.headers.get("request-id")}}static fromReadableStream(w){let X=new mw(null);return X._run(()=>X._fromReadableStream(w)),X}static createMessage(w,X,Z,{logger:$}={}){let z=new mw(X,{logger:$});for(let W of X.messages)z._addMessageParam(W);return V(z,Ww,{...X,stream:!0},"f"),z._run(()=>z._createMessage(w,{...X,stream:!0},{...Z,headers:{...Z?.headers,"X-Stainless-Helper-Method":"stream"}})),z}_run(w){w().then(()=>{this._emitFinal(),this._emit("end")},Y(this,F0,"f"))}_addMessageParam(w){this.messages.push(w)}_addMessage(w,X=!0){if(this.receivedMessages.push(w),X)this._emit("message",w)}async _createMessage(w,X,Z){let $=Z?.signal,z;if($){if($.aborted)this.controller.abort();z=this.controller.abort.bind(this.controller),$.addEventListener("abort",z)}try{Y(this,P,"m",t0).call(this);let{response:W,data:K}=await w.create({...X,stream:!0},{...Z,signal:this.controller.signal}).withResponse();this._connected(W);for await(let J of K)Y(this,P,"m",s0).call(this,J);if(K.controller.signal?.aborted)throw new S;Y(this,P,"m",r0).call(this)}finally{if($&&z)$.removeEventListener("abort",z)}}_connected(w){if(this.ended)return;V(this,T0,w,"f"),V(this,E0,w?.headers.get("request-id"),"f"),Y(this,H0,"f").call(this,w),this._emit("connect")}get ended(){return Y(this,vw,"f")}get errored(){return Y(this,M0,"f")}get aborted(){return Y(this,A0,"f")}abort(){this.controller.abort()}on(w,X){return(Y(this,_,"f")[w]||(Y(this,_,"f")[w]=[])).push({listener:X}),this}off(w,X){let Z=Y(this,_,"f")[w];if(!Z)return this;let $=Z.findIndex((z)=>z.listener===X);if($>=0)Z.splice($,1);return this}once(w,X){return(Y(this,_,"f")[w]||(Y(this,_,"f")[w]=[])).push({listener:X,once:!0}),this}emitted(w){return new Promise((X,Z)=>{if(V(this,e,!0,"f"),w!=="error")this.once("error",Z);this.once(w,X)})}async done(){V(this,e,!0,"f"),await Y(this,_w,"f")}get currentMessage(){return Y(this,i,"f")}async finalMessage(){return await this.done(),Y(this,P,"m",o0).call(this)}async finalText(){return await this.done(),Y(this,P,"m",p2).call(this)}_emit(w,...X){if(Y(this,vw,"f"))return;if(w==="end")V(this,vw,!0,"f"),Y(this,D0,"f").call(this);let Z=Y(this,_,"f")[w];if(Z)Y(this,_,"f")[w]=Z.filter(($)=>!$.once),Z.forEach(({listener:$})=>$(...X));if(w==="abort"){let $=X[0];if(!Y(this,e,"f")&&!Z?.length)Promise.reject($);Y(this,gw,"f").call(this,$),Y(this,dw,"f").call(this,$),this._emit("end");return}if(w==="error"){let $=X[0];if(!Y(this,e,"f")&&!Z?.length)Promise.reject($);Y(this,gw,"f").call(this,$),Y(this,dw,"f").call(this,$),this._emit("end")}}_emitFinal(){if(this.receivedMessages.at(-1))this._emit("finalMessage",Y(this,P,"m",o0).call(this))}async _fromReadableStream(w,X){let Z=X?.signal,$;if(Z){if(Z.aborted)this.controller.abort();$=this.controller.abort.bind(this.controller),Z.addEventListener("abort",$)}try{Y(this,P,"m",t0).call(this),this._connected(null);let z=j.fromReadableStream(w,this.controller);for await(let W of z)Y(this,P,"m",s0).call(this,W);if(z.controller.signal?.aborted)throw new S;Y(this,P,"m",r0).call(this)}finally{if(Z&&$)Z.removeEventListener("abort",$)}}[(i=new WeakMap,Ww=new WeakMap,bw=new WeakMap,H0=new WeakMap,gw=new WeakMap,_w=new WeakMap,D0=new WeakMap,dw=new WeakMap,_=new WeakMap,vw=new WeakMap,M0=new WeakMap,A0=new WeakMap,e=new WeakMap,T0=new WeakMap,E0=new WeakMap,cw=new WeakMap,F0=new WeakMap,P=new WeakSet,o0=function(){if(this.receivedMessages.length===0)throw new N("stream ended without producing a Message with role=assistant");return this.receivedMessages.at(-1)},p2=function(){if(this.receivedMessages.length===0)throw new N("stream ended without producing a Message with role=assistant");let X=this.receivedMessages.at(-1).content.filter((Z)=>Z.type==="text").map((Z)=>Z.text);if(X.length===0)throw new N("stream ended without producing a content block with type=text");return X.join(" ")},t0=function(){if(this.ended)return;V(this,i,void 0,"f")},s0=function(X){if(this.ended)return;let Z=Y(this,P,"m",i2).call(this,X);switch(this._emit("streamEvent",X,Z),X.type){case"content_block_delta":{let $=Z.content.at(-1);switch(X.delta.type){case"text_delta":{if($.type==="text")this._emit("text",X.delta.text,$.text||"");break}case"citations_delta":{if($.type==="text")this._emit("citation",X.delta.citation,$.citations??[]);break}case"input_json_delta":{if(n2($)&&$.input)this._emit("inputJson",X.delta.partial_json,$.input);break}case"thinking_delta":{if($.type==="thinking")this._emit("thinking",X.delta.thinking,$.thinking);break}case"signature_delta":{if($.type==="thinking")this._emit("signature",$.signature);break}case"compaction_delta":{if($.type==="compaction"&&$.content)this._emit("compaction",$.content);break}default:a2(X.delta)}break}case"message_stop":{this._addMessageParam(Z),this._addMessage(n0(Z,Y(this,Ww,"f"),{logger:Y(this,cw,"f")}),!0);break}case"content_block_stop":{this._emit("contentBlock",Z.content.at(-1));break}case"message_start":{V(this,i,Z,"f");break}case"content_block_start":case"message_delta":break}},r0=function(){if(this.ended)throw new N("stream has ended, this shouldn't happen");let X=Y(this,i,"f");if(!X)throw new N("request ended without sending any chunks");return V(this,i,void 0,"f"),n0(X,Y(this,Ww,"f"),{logger:Y(this,cw,"f")})},i2=function(X){let Z=Y(this,i,"f");if(X.type==="message_start"){if(Z)throw new N(`Unexpected event order, got ${X.type} before receiving "message_stop"`);return X.message}if(!Z)throw new N(`Unexpected event order, got ${X.type} before "message_start"`);switch(X.type){case"message_stop":return Z;case"message_delta":if(Z.container=X.delta.container,Z.stop_reason=X.delta.stop_reason,Z.stop_sequence=X.delta.stop_sequence,Z.usage.output_tokens=X.usage.output_tokens,Z.context_management=X.context_management,X.usage.input_tokens!=null)Z.usage.input_tokens=X.usage.input_tokens;if(X.usage.cache_creation_input_tokens!=null)Z.usage.cache_creation_input_tokens=X.usage.cache_creation_input_tokens;if(X.usage.cache_read_input_tokens!=null)Z.usage.cache_read_input_tokens=X.usage.cache_read_input_tokens;if(X.usage.server_tool_use!=null)Z.usage.server_tool_use=X.usage.server_tool_use;if(X.usage.iterations!=null)Z.usage.iterations=X.usage.iterations;return Z;case"content_block_start":return Z.content.push(X.content_block),Z;case"content_block_delta":{let $=Z.content.at(X.index);switch(X.delta.type){case"text_delta":{if($?.type==="text")Z.content[X.index]={...$,text:($.text||"")+X.delta.text};break}case"citations_delta":{if($?.type==="text")Z.content[X.index]={...$,citations:[...$.citations??[],X.delta.citation]};break}case"input_json_delta":{if($&&n2($)){let z=$[l2]||"";z+=X.delta.partial_json;let W={...$};if(Object.defineProperty(W,l2,{value:z,enumerable:!1,writable:!0}),z)try{W.input=O0(z)}catch(K){let J=new N(`Unable to parse tool parameter JSON from model. Please retry your request or adjust your prompt. Error: ${K}. JSON: ${z}`);Y(this,F0,"f").call(this,J)}Z.content[X.index]=W}break}case"thinking_delta":{if($?.type==="thinking")Z.content[X.index]={...$,thinking:$.thinking+X.delta.thinking};break}case"signature_delta":{if($?.type==="thinking")Z.content[X.index]={...$,signature:X.delta.signature};break}case"compaction_delta":{if($?.type==="compaction")Z.content[X.index]={...$,content:($.content||"")+X.delta.content};break}default:a2(X.delta)}return Z}case"content_block_stop":return Z}},Symbol.asyncIterator)](){let w=[],X=[],Z=!1;return this.on("streamEvent",($)=>{let z=X.shift();if(z)z.resolve($);else w.push($)}),this.on("end",()=>{Z=!0;for(let $ of X)$.resolve(void 0);X.length=0}),this.on("abort",($)=>{Z=!0;for(let z of X)z.reject($);X.length=0}),this.on("error",($)=>{Z=!0;for(let z of X)z.reject($);X.length=0}),{next:async()=>{if(!w.length){if(Z)return{value:void 0,done:!0};return new Promise((z,W)=>X.push({resolve:z,reject:W})).then((z)=>z?{value:z,done:!1}:{value:void 0,done:!0})}return{value:w.shift(),done:!1}},return:async()=>{return this.abort(),{value:void 0,done:!0}}}}toReadableStream(){return new j(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function a2(w){}class Yw extends Error{constructor(w){let X=typeof w==="string"?w:w.map((Z)=>{if(Z.type==="text")return Z.text;return`[${Z.type}]`}).join(" ");super(X);this.name="ToolError",this.content=w}}var o2=1e5,t2=`You have been working on the task described above but have not yet completed it. Write a continuation summary that will allow you (or another instance of yourself) to resume work efficiently in a future context window where the conversation history will be replaced with this summary. Your summary should be structured, concise, and actionable. Include: +${z} +${F}`)}return z},H=B1(R4);class yw extends U{list(w={},X){let{betas:Z,...$}=w??{};return this._client.getAPIList("/v1/files",R,{query:$,...X,headers:C([{"anthropic-beta":[...Z??[],"files-api-2025-04-14"].toString()},X?.headers])})}delete(w,X={},Z){let{betas:$}=X??{};return this._client.delete(H`/v1/files/${w}`,{...Z,headers:C([{"anthropic-beta":[...$??[],"files-api-2025-04-14"].toString()},Z?.headers])})}download(w,X={},Z){let{betas:$}=X??{};return this._client.get(H`/v1/files/${w}/content`,{...Z,headers:C([{"anthropic-beta":[...$??[],"files-api-2025-04-14"].toString(),Accept:"application/binary"},Z?.headers]),__binaryResponse:!0})}retrieveMetadata(w,X={},Z){let{betas:$}=X??{};return this._client.get(H`/v1/files/${w}`,{...Z,headers:C([{"anthropic-beta":[...$??[],"files-api-2025-04-14"].toString()},Z?.headers])})}upload(w,X){let{betas:Z,...$}=w;return this._client.post("/v1/files",$w({body:$,...X,headers:C([{"anthropic-beta":[...Z??[],"files-api-2025-04-14"].toString()},X?.headers])},this._client))}}class Rw extends U{retrieve(w,X={},Z){let{betas:$}=X??{};return this._client.get(H`/v1/models/${w}?beta=true`,{...Z,headers:C([{...$?.toString()!=null?{"anthropic-beta":$?.toString()}:void 0},Z?.headers])})}list(w={},X){let{betas:Z,...$}=w??{};return this._client.getAPIList("/v1/models?beta=true",R,{query:$,...X,headers:C([{...Z?.toString()!=null?{"anthropic-beta":Z?.toString()}:void 0},X?.headers])})}}var Q0={"claude-opus-4-20250514":8192,"claude-opus-4-0":8192,"claude-4-opus-20250514":8192,"anthropic.claude-opus-4-20250514-v1:0":8192,"claude-opus-4@20250514":8192,"claude-opus-4-1-20250805":8192,"anthropic.claude-opus-4-1-20250805-v1:0":8192,"claude-opus-4-1@20250805":8192};function v0(w,X,Z){if(!X||!("parse"in(X.output_format??{})))return{...w,content:w.content.map(($)=>{if($.type==="text"){let W=Object.defineProperty({...$},"parsed_output",{value:null,enumerable:!1});return Object.defineProperty(W,"parsed",{get(){return Z.logger.warn("The `parsed` property on `text` blocks is deprecated, please use `parsed_output` instead."),null},enumerable:!1})}return $}),parsed_output:null};return c0(w,X,Z)}function c0(w,X,Z){let $=null,W=w.content.map((Y)=>{if(Y.type==="text"){let z=j1(X,Y.text);if($===null)$=z;let J=Object.defineProperty({...Y},"parsed_output",{value:z,enumerable:!1});return Object.defineProperty(J,"parsed",{get(){return Z.logger.warn("The `parsed` property on `text` blocks is deprecated, please use `parsed_output` instead."),z},enumerable:!1})}return Y});return{...w,content:W,parsed_output:$}}function j1(w,X){if(w.output_format?.type!=="json_schema")return null;try{if("parse"in w.output_format)return w.output_format.parse(X);return JSON.parse(X)}catch(Z){throw new N(`Failed to parse structured output: ${Z}`)}}var y1=(w)=>{let X=0,Z=[];while(X{if(w.length===0)return w;let X=w[w.length-1];switch(X.type){case"separator":return w=w.slice(0,w.length-1),Ww(w);break;case"number":let Z=X.value[X.value.length-1];if(Z==="."||Z==="-")return w=w.slice(0,w.length-1),Ww(w);case"string":let $=w[w.length-2];if($?.type==="delimiter")return w=w.slice(0,w.length-1),Ww(w);else if($?.type==="brace"&&$.value==="{")return w=w.slice(0,w.length-1),Ww(w);break;case"delimiter":return w=w.slice(0,w.length-1),Ww(w);break}return w},R1=(w)=>{let X=[];if(w.map((Z)=>{if(Z.type==="brace")if(Z.value==="{")X.push("}");else X.splice(X.lastIndexOf("}"),1);if(Z.type==="paren")if(Z.value==="[")X.push("]");else X.splice(X.lastIndexOf("]"),1)}),X.length>0)X.reverse().map((Z)=>{if(Z==="}")w.push({type:"brace",value:"}"});else if(Z==="]")w.push({type:"paren",value:"]"})});return w},f1=(w)=>{let X="";return w.map((Z)=>{switch(Z.type){case"string":X+='"'+Z.value+'"';break;default:X+=Z.value;break}}),X},N0=(w)=>JSON.parse(f1(R1(Ww(y1(w)))));var j,i,Yw,fw,G0,kw,bw,C0,hw,g,_w,x0,O0,r,H0,U0,gw,m0,f4,q0,u0,p0,i0,k4,b4="__json_buf";function h4(w){return w.type==="tool_use"||w.type==="server_tool_use"||w.type==="mcp_tool_use"}class dw{constructor(w,X){j.add(this),this.messages=[],this.receivedMessages=[],i.set(this,void 0),Yw.set(this,null),this.controller=new AbortController,fw.set(this,void 0),G0.set(this,()=>{}),kw.set(this,()=>{}),bw.set(this,void 0),C0.set(this,()=>{}),hw.set(this,()=>{}),g.set(this,{}),_w.set(this,!1),x0.set(this,!1),O0.set(this,!1),r.set(this,!1),H0.set(this,void 0),U0.set(this,void 0),gw.set(this,void 0),q0.set(this,(Z)=>{if(V(this,x0,!0,"f"),h(Z))Z=new S;if(Z instanceof S)return V(this,O0,!0,"f"),this._emit("abort",Z);if(Z instanceof N)return this._emit("error",Z);if(Z instanceof Error){let $=new N(Z.message);return $.cause=Z,this._emit("error",$)}return this._emit("error",new N(String(Z)))}),V(this,fw,new Promise((Z,$)=>{V(this,G0,Z,"f"),V(this,kw,$,"f")}),"f"),V(this,bw,new Promise((Z,$)=>{V(this,C0,Z,"f"),V(this,hw,$,"f")}),"f"),K(this,fw,"f").catch(()=>{}),K(this,bw,"f").catch(()=>{}),V(this,Yw,w,"f"),V(this,gw,X?.logger??console,"f")}get response(){return K(this,H0,"f")}get request_id(){return K(this,U0,"f")}async withResponse(){V(this,r,!0,"f");let w=await K(this,fw,"f");if(!w)throw Error("Could not resolve a `Response` object");return{data:this,response:w,request_id:w.headers.get("request-id")}}static fromReadableStream(w){let X=new dw(null);return X._run(()=>X._fromReadableStream(w)),X}static createMessage(w,X,Z,{logger:$}={}){let W=new dw(X,{logger:$});for(let Y of X.messages)W._addMessageParam(Y);return V(W,Yw,{...X,stream:!0},"f"),W._run(()=>W._createMessage(w,{...X,stream:!0},{...Z,headers:{...Z?.headers,"X-Stainless-Helper-Method":"stream"}})),W}_run(w){w().then(()=>{this._emitFinal(),this._emit("end")},K(this,q0,"f"))}_addMessageParam(w){this.messages.push(w)}_addMessage(w,X=!0){if(this.receivedMessages.push(w),X)this._emit("message",w)}async _createMessage(w,X,Z){let $=Z?.signal,W;if($){if($.aborted)this.controller.abort();W=this.controller.abort.bind(this.controller),$.addEventListener("abort",W)}try{K(this,j,"m",u0).call(this);let{response:Y,data:z}=await w.create({...X,stream:!0},{...Z,signal:this.controller.signal}).withResponse();this._connected(Y);for await(let J of z)K(this,j,"m",p0).call(this,J);if(z.controller.signal?.aborted)throw new S;K(this,j,"m",i0).call(this)}finally{if($&&W)$.removeEventListener("abort",W)}}_connected(w){if(this.ended)return;V(this,H0,w,"f"),V(this,U0,w?.headers.get("request-id"),"f"),K(this,G0,"f").call(this,w),this._emit("connect")}get ended(){return K(this,_w,"f")}get errored(){return K(this,x0,"f")}get aborted(){return K(this,O0,"f")}abort(){this.controller.abort()}on(w,X){return(K(this,g,"f")[w]||(K(this,g,"f")[w]=[])).push({listener:X}),this}off(w,X){let Z=K(this,g,"f")[w];if(!Z)return this;let $=Z.findIndex((W)=>W.listener===X);if($>=0)Z.splice($,1);return this}once(w,X){return(K(this,g,"f")[w]||(K(this,g,"f")[w]=[])).push({listener:X,once:!0}),this}emitted(w){return new Promise((X,Z)=>{if(V(this,r,!0,"f"),w!=="error")this.once("error",Z);this.once(w,X)})}async done(){V(this,r,!0,"f"),await K(this,bw,"f")}get currentMessage(){return K(this,i,"f")}async finalMessage(){return await this.done(),K(this,j,"m",m0).call(this)}async finalText(){return await this.done(),K(this,j,"m",f4).call(this)}_emit(w,...X){if(K(this,_w,"f"))return;if(w==="end")V(this,_w,!0,"f"),K(this,C0,"f").call(this);let Z=K(this,g,"f")[w];if(Z)K(this,g,"f")[w]=Z.filter(($)=>!$.once),Z.forEach(({listener:$})=>$(...X));if(w==="abort"){let $=X[0];if(!K(this,r,"f")&&!Z?.length)Promise.reject($);K(this,kw,"f").call(this,$),K(this,hw,"f").call(this,$),this._emit("end");return}if(w==="error"){let $=X[0];if(!K(this,r,"f")&&!Z?.length)Promise.reject($);K(this,kw,"f").call(this,$),K(this,hw,"f").call(this,$),this._emit("end")}}_emitFinal(){if(this.receivedMessages.at(-1))this._emit("finalMessage",K(this,j,"m",m0).call(this))}async _fromReadableStream(w,X){let Z=X?.signal,$;if(Z){if(Z.aborted)this.controller.abort();$=this.controller.abort.bind(this.controller),Z.addEventListener("abort",$)}try{K(this,j,"m",u0).call(this),this._connected(null);let W=I.fromReadableStream(w,this.controller);for await(let Y of W)K(this,j,"m",p0).call(this,Y);if(W.controller.signal?.aborted)throw new S;K(this,j,"m",i0).call(this)}finally{if(Z&&$)Z.removeEventListener("abort",$)}}[(i=new WeakMap,Yw=new WeakMap,fw=new WeakMap,G0=new WeakMap,kw=new WeakMap,bw=new WeakMap,C0=new WeakMap,hw=new WeakMap,g=new WeakMap,_w=new WeakMap,x0=new WeakMap,O0=new WeakMap,r=new WeakMap,H0=new WeakMap,U0=new WeakMap,gw=new WeakMap,q0=new WeakMap,j=new WeakSet,m0=function(){if(this.receivedMessages.length===0)throw new N("stream ended without producing a Message with role=assistant");return this.receivedMessages.at(-1)},f4=function(){if(this.receivedMessages.length===0)throw new N("stream ended without producing a Message with role=assistant");let X=this.receivedMessages.at(-1).content.filter((Z)=>Z.type==="text").map((Z)=>Z.text);if(X.length===0)throw new N("stream ended without producing a content block with type=text");return X.join(" ")},u0=function(){if(this.ended)return;V(this,i,void 0,"f")},p0=function(X){if(this.ended)return;let Z=K(this,j,"m",k4).call(this,X);switch(this._emit("streamEvent",X,Z),X.type){case"content_block_delta":{let $=Z.content.at(-1);switch(X.delta.type){case"text_delta":{if($.type==="text")this._emit("text",X.delta.text,$.text||"");break}case"citations_delta":{if($.type==="text")this._emit("citation",X.delta.citation,$.citations??[]);break}case"input_json_delta":{if(h4($)&&$.input)this._emit("inputJson",X.delta.partial_json,$.input);break}case"thinking_delta":{if($.type==="thinking")this._emit("thinking",X.delta.thinking,$.thinking);break}case"signature_delta":{if($.type==="thinking")this._emit("signature",$.signature);break}default:_4(X.delta)}break}case"message_stop":{this._addMessageParam(Z),this._addMessage(v0(Z,K(this,Yw,"f"),{logger:K(this,gw,"f")}),!0);break}case"content_block_stop":{this._emit("contentBlock",Z.content.at(-1));break}case"message_start":{V(this,i,Z,"f");break}case"content_block_start":case"message_delta":break}},i0=function(){if(this.ended)throw new N("stream has ended, this shouldn't happen");let X=K(this,i,"f");if(!X)throw new N("request ended without sending any chunks");return V(this,i,void 0,"f"),v0(X,K(this,Yw,"f"),{logger:K(this,gw,"f")})},k4=function(X){let Z=K(this,i,"f");if(X.type==="message_start"){if(Z)throw new N(`Unexpected event order, got ${X.type} before receiving "message_stop"`);return X.message}if(!Z)throw new N(`Unexpected event order, got ${X.type} before "message_start"`);switch(X.type){case"message_stop":return Z;case"message_delta":if(Z.container=X.delta.container,Z.stop_reason=X.delta.stop_reason,Z.stop_sequence=X.delta.stop_sequence,Z.usage.output_tokens=X.usage.output_tokens,Z.context_management=X.context_management,X.usage.input_tokens!=null)Z.usage.input_tokens=X.usage.input_tokens;if(X.usage.cache_creation_input_tokens!=null)Z.usage.cache_creation_input_tokens=X.usage.cache_creation_input_tokens;if(X.usage.cache_read_input_tokens!=null)Z.usage.cache_read_input_tokens=X.usage.cache_read_input_tokens;if(X.usage.server_tool_use!=null)Z.usage.server_tool_use=X.usage.server_tool_use;return Z;case"content_block_start":return Z.content.push(X.content_block),Z;case"content_block_delta":{let $=Z.content.at(X.index);switch(X.delta.type){case"text_delta":{if($?.type==="text")Z.content[X.index]={...$,text:($.text||"")+X.delta.text};break}case"citations_delta":{if($?.type==="text")Z.content[X.index]={...$,citations:[...$.citations??[],X.delta.citation]};break}case"input_json_delta":{if($&&h4($)){let W=$[b4]||"";W+=X.delta.partial_json;let Y={...$};if(Object.defineProperty(Y,b4,{value:W,enumerable:!1,writable:!0}),W)try{Y.input=N0(W)}catch(z){let J=new N(`Unable to parse tool parameter JSON from model. Please retry your request or adjust your prompt. Error: ${z}. JSON: ${W}`);K(this,q0,"f").call(this,J)}Z.content[X.index]=Y}break}case"thinking_delta":{if($?.type==="thinking")Z.content[X.index]={...$,thinking:$.thinking+X.delta.thinking};break}case"signature_delta":{if($?.type==="thinking")Z.content[X.index]={...$,signature:X.delta.signature};break}default:_4(X.delta)}return Z}case"content_block_stop":return Z}},Symbol.asyncIterator)](){let w=[],X=[],Z=!1;return this.on("streamEvent",($)=>{let W=X.shift();if(W)W.resolve($);else w.push($)}),this.on("end",()=>{Z=!0;for(let $ of X)$.resolve(void 0);X.length=0}),this.on("abort",($)=>{Z=!0;for(let W of X)W.reject($);X.length=0}),this.on("error",($)=>{Z=!0;for(let W of X)W.reject($);X.length=0}),{next:async()=>{if(!w.length){if(Z)return{value:void 0,done:!0};return new Promise((W,Y)=>X.push({resolve:W,reject:Y})).then((W)=>W?{value:W,done:!1}:{value:void 0,done:!0})}return{value:w.shift(),done:!1}},return:async()=>{return this.abort(),{value:void 0,done:!0}}}}toReadableStream(){return new I(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function _4(w){}var g4=1e5,d4=`You have been working on the task described above but have not yet completed it. Write a continuation summary that will allow you (or another instance of yourself) to resume work efficiently in a future context window where the conversation history will be replaced with this summary. Your summary should be structured, concise, and actionable. Include: 1. Task Overview The user's core request and success criteria Any clarifications or constraints they specified @@ -28,24 +28,24 @@ User preferences or style requirements Domain-specific details that aren't obvious Any promises made to the user Be concise but complete—err on the side of including information that would prevent duplicate work or repeated mistakes. Write in a way that enables immediate resumption of the task. -Wrap your summary in tags.`;var uw,Kw,ww,A,pw,B,d,l,iw,s2,e0;function r2(){let w,X;return{promise:new Promise(($,z)=>{w=$,X=z}),resolve:w,reject:X}}class lw{constructor(w,X,Z){uw.add(this),this.client=w,Kw.set(this,!1),ww.set(this,!1),A.set(this,void 0),pw.set(this,void 0),B.set(this,void 0),d.set(this,void 0),l.set(this,void 0),iw.set(this,0),V(this,A,{params:{...X,messages:structuredClone(X.messages)}},"f");let z=["BetaToolRunner",...l0(X.tools,X.messages)].join(", ");V(this,pw,{...Z,headers:x([{"x-stainless-helper":z},Z?.headers])},"f"),V(this,l,r2(),"f")}async*[(Kw=new WeakMap,ww=new WeakMap,A=new WeakMap,pw=new WeakMap,B=new WeakMap,d=new WeakMap,l=new WeakMap,iw=new WeakMap,uw=new WeakSet,s2=async function(){let X=Y(this,A,"f").params.compactionControl;if(!X||!X.enabled)return!1;let Z=0;if(Y(this,B,"f")!==void 0)try{let Q=await Y(this,B,"f");Z=Q.usage.input_tokens+(Q.usage.cache_creation_input_tokens??0)+(Q.usage.cache_read_input_tokens??0)+Q.usage.output_tokens}catch{return!1}let $=X.contextTokenThreshold??o2;if(Z<$)return!1;let z=X.model??Y(this,A,"f").params.model,W=X.summaryPrompt??t2,K=Y(this,A,"f").params.messages;if(K[K.length-1].role==="assistant"){let Q=K[K.length-1];if(Array.isArray(Q.content)){let G=Q.content.filter((C)=>C.type!=="tool_use");if(G.length===0)K.pop();else Q.content=G}}let J=await this.client.beta.messages.create({model:z,messages:[...K,{role:"user",content:[{type:"text",text:W}]}],max_tokens:Y(this,A,"f").params.max_tokens},{headers:{"x-stainless-helper":"compaction"}});if(J.content[0]?.type!=="text")throw new N("Expected text response for compaction");return Y(this,A,"f").params.messages=[{role:"user",content:J.content}],!0},Symbol.asyncIterator)](){var w;if(Y(this,Kw,"f"))throw new N("Cannot iterate over a consumed stream");V(this,Kw,!0,"f"),V(this,ww,!0,"f"),V(this,d,void 0,"f");try{while(!0){let X;try{if(Y(this,A,"f").params.max_iterations&&Y(this,iw,"f")>=Y(this,A,"f").params.max_iterations)break;V(this,ww,!1,"f"),V(this,d,void 0,"f"),V(this,iw,(w=Y(this,iw,"f"),w++,w),"f"),V(this,B,void 0,"f");let{max_iterations:Z,compactionControl:$,...z}=Y(this,A,"f").params;if(z.stream)X=this.client.beta.messages.stream({...z},Y(this,pw,"f")),V(this,B,X.finalMessage(),"f"),Y(this,B,"f").catch(()=>{}),yield X;else V(this,B,this.client.beta.messages.create({...z,stream:!1},Y(this,pw,"f")),"f"),yield Y(this,B,"f");if(!await Y(this,uw,"m",s2).call(this)){if(!Y(this,ww,"f")){let{role:J,content:Q}=await Y(this,B,"f");Y(this,A,"f").params.messages.push({role:J,content:Q})}let K=await Y(this,uw,"m",e0).call(this,Y(this,A,"f").params.messages.at(-1));if(K)Y(this,A,"f").params.messages.push(K);else if(!Y(this,ww,"f"))break}}finally{if(X)X.abort()}}if(!Y(this,B,"f"))throw new N("ToolRunner concluded without a message from the server");Y(this,l,"f").resolve(await Y(this,B,"f"))}catch(X){throw V(this,Kw,!1,"f"),Y(this,l,"f").promise.catch(()=>{}),Y(this,l,"f").reject(X),V(this,l,r2(),"f"),X}}setMessagesParams(w){if(typeof w==="function")Y(this,A,"f").params=w(Y(this,A,"f").params);else Y(this,A,"f").params=w;V(this,ww,!0,"f"),V(this,d,void 0,"f")}async generateToolResponse(){let w=await Y(this,B,"f")??this.params.messages.at(-1);if(!w)return null;return Y(this,uw,"m",e0).call(this,w)}done(){return Y(this,l,"f").promise}async runUntilDone(){if(!Y(this,Kw,"f"))for await(let w of this);return this.done()}get params(){return Y(this,A,"f").params}pushMessages(...w){this.setMessagesParams((X)=>({...X,messages:[...X.messages,...w]}))}then(w,X){return this.runUntilDone().then(w,X)}}e0=async function(X){if(Y(this,d,"f")!==void 0)return Y(this,d,"f");return V(this,d,n5(Y(this,A,"f").params,X),"f"),Y(this,d,"f")};async function n5(w,X=w.messages.at(-1)){if(!X||X.role!=="assistant"||!X.content||typeof X.content==="string")return null;let Z=X.content.filter((z)=>z.type==="tool_use");if(Z.length===0)return null;return{role:"user",content:await Promise.all(Z.map(async(z)=>{let W=w.tools.find((K)=>("name"in K?K.name:K.mcp_server_name)===z.name);if(!W||!("run"in W))return{type:"tool_result",tool_use_id:z.id,content:`Error: Tool '${z.name}' not found`,is_error:!0};try{let K=z.input;if("parse"in W&&W.parse)K=W.parse(K);let J=await W.run(K);return{type:"tool_result",tool_use_id:z.id,content:J}}catch(K){return{type:"tool_result",tool_use_id:z.id,content:K instanceof Yw?K.content:`Error: ${K instanceof Error?K.message:String(K)}`,is_error:!0}}}))}}class Jw{constructor(w,X){this.iterator=w,this.controller=X}async*decoder(){let w=new p;for await(let X of this.iterator)for(let Z of w.decode(X))yield JSON.parse(Z);for(let X of w.flush())yield JSON.parse(X)}[Symbol.asyncIterator](){return this.decoder()}static fromResponse(w,X){if(!w.body){if(X.abort(),typeof globalThis.navigator<"u"&&globalThis.navigator.product==="ReactNative")throw new N("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new N("Attempted to iterate over a response with no body")}return new Jw(Iw(w.body),X)}}class nw extends O{create(w,X){let{betas:Z,...$}=w;return this._client.post("/v1/messages/batches?beta=true",{body:$,...X,headers:x([{"anthropic-beta":[...Z??[],"message-batches-2024-09-24"].toString()},X?.headers])})}retrieve(w,X={},Z){let{betas:$}=X??{};return this._client.get(q`/v1/messages/batches/${w}?beta=true`,{...Z,headers:x([{"anthropic-beta":[...$??[],"message-batches-2024-09-24"].toString()},Z?.headers])})}list(w={},X){let{betas:Z,...$}=w??{};return this._client.getAPIList("/v1/messages/batches?beta=true",f,{query:$,...X,headers:x([{"anthropic-beta":[...Z??[],"message-batches-2024-09-24"].toString()},X?.headers])})}delete(w,X={},Z){let{betas:$}=X??{};return this._client.delete(q`/v1/messages/batches/${w}?beta=true`,{...Z,headers:x([{"anthropic-beta":[...$??[],"message-batches-2024-09-24"].toString()},Z?.headers])})}cancel(w,X={},Z){let{betas:$}=X??{};return this._client.post(q`/v1/messages/batches/${w}/cancel?beta=true`,{...Z,headers:x([{"anthropic-beta":[...$??[],"message-batches-2024-09-24"].toString()},Z?.headers])})}async results(w,X={},Z){let $=await this.retrieve(w);if(!$.results_url)throw new N(`No batch \`results_url\`; Has it finished processing? ${$.processing_status} - ${$.id}`);let{betas:z}=X??{};return this._client.get($.results_url,{...Z,headers:x([{"anthropic-beta":[...z??[],"message-batches-2024-09-24"].toString(),Accept:"application/binary"},Z?.headers]),stream:!0,__binaryResponse:!0})._thenUnwrap((W,K)=>Jw.fromResponse(K.response,K.controller))}}var e2={"claude-1.3":"November 6th, 2024","claude-1.3-100k":"November 6th, 2024","claude-instant-1.1":"November 6th, 2024","claude-instant-1.1-100k":"November 6th, 2024","claude-instant-1.2":"November 6th, 2024","claude-3-sonnet-20240229":"July 21st, 2025","claude-3-opus-20240229":"January 5th, 2026","claude-2.1":"July 21st, 2025","claude-2.0":"July 21st, 2025","claude-3-7-sonnet-latest":"February 19th, 2026","claude-3-7-sonnet-20250219":"February 19th, 2026"},o5=["claude-opus-4-6"];class n extends O{constructor(){super(...arguments);this.batches=new nw(this._client)}create(w,X){let Z=w5(w),{betas:$,...z}=Z;if(z.model in e2)console.warn(`The model '${z.model}' is deprecated and will reach end-of-life on ${e2[z.model]} -Please migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`);if(z.model in o5&&z.thinking&&z.thinking.type==="enabled")console.warn(`Using Claude with ${z.model} and 'thinking.type=enabled' is deprecated. Use 'thinking.type=adaptive' instead which results in better model performance in our testing: https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking`);let W=this._client._options.timeout;if(!z.stream&&W==null){let J=q0[z.model]??void 0;W=this._client.calculateNonstreamingTimeout(z.max_tokens,J)}let K=U0(z.tools,z.messages);return this._client.post("/v1/messages?beta=true",{body:z,timeout:W??600000,...X,headers:x([{...$?.toString()!=null?{"anthropic-beta":$?.toString()}:void 0},K,X?.headers]),stream:Z.stream??!1})}parse(w,X){return X={...X,headers:x([{"anthropic-beta":[...w.betas??[],"structured-outputs-2025-12-15"].toString()},X?.headers])},this.create(w,X).then((Z)=>a0(Z,w,{logger:this._client.logger??console}))}stream(w,X){return mw.createMessage(this,w,X)}countTokens(w,X){let Z=w5(w),{betas:$,...z}=Z;return this._client.post("/v1/messages/count_tokens?beta=true",{body:z,...X,headers:x([{"anthropic-beta":[...$??[],"token-counting-2024-11-01"].toString()},X?.headers])})}toolRunner(w,X){return new lw(this._client,w,X)}}function w5(w){if(!w.output_format)return w;if(w.output_config?.format)throw new N("Both output_format and output_config.format were provided. Please use only output_config.format (output_format is deprecated).");let{output_format:X,...Z}=w;return{...Z,output_config:{...w.output_config,format:X}}}n.Batches=nw;n.BetaToolRunner=lw;n.ToolError=Yw;class aw extends O{create(w,X={},Z){let{betas:$,...z}=X??{};return this._client.post(q`/v1/skills/${w}/versions?beta=true`,$w({body:z,...Z,headers:x([{"anthropic-beta":[...$??[],"skills-2025-10-02"].toString()},Z?.headers])},this._client))}retrieve(w,X,Z){let{skill_id:$,betas:z}=X;return this._client.get(q`/v1/skills/${$}/versions/${w}?beta=true`,{...Z,headers:x([{"anthropic-beta":[...z??[],"skills-2025-10-02"].toString()},Z?.headers])})}list(w,X={},Z){let{betas:$,...z}=X??{};return this._client.getAPIList(q`/v1/skills/${w}/versions?beta=true`,yw,{query:z,...Z,headers:x([{"anthropic-beta":[...$??[],"skills-2025-10-02"].toString()},Z?.headers])})}delete(w,X,Z){let{skill_id:$,betas:z}=X;return this._client.delete(q`/v1/skills/${$}/versions/${w}?beta=true`,{...Z,headers:x([{"anthropic-beta":[...z??[],"skills-2025-10-02"].toString()},Z?.headers])})}}class Vw extends O{constructor(){super(...arguments);this.versions=new aw(this._client)}create(w={},X){let{betas:Z,...$}=w??{};return this._client.post("/v1/skills?beta=true",$w({body:$,...X,headers:x([{"anthropic-beta":[...Z??[],"skills-2025-10-02"].toString()},X?.headers])},this._client,!1))}retrieve(w,X={},Z){let{betas:$}=X??{};return this._client.get(q`/v1/skills/${w}?beta=true`,{...Z,headers:x([{"anthropic-beta":[...$??[],"skills-2025-10-02"].toString()},Z?.headers])})}list(w={},X){let{betas:Z,...$}=w??{};return this._client.getAPIList("/v1/skills?beta=true",yw,{query:$,...X,headers:x([{"anthropic-beta":[...Z??[],"skills-2025-10-02"].toString()},X?.headers])})}delete(w,X={},Z){let{betas:$}=X??{};return this._client.delete(q`/v1/skills/${w}?beta=true`,{...Z,headers:x([{"anthropic-beta":[...$??[],"skills-2025-10-02"].toString()},Z?.headers])})}}Vw.Versions=aw;class k extends O{constructor(){super(...arguments);this.models=new hw(this._client),this.messages=new n(this._client),this.files=new kw(this._client),this.skills=new Vw(this._client)}}k.Models=hw;k.Messages=n;k.Files=kw;k.Skills=Vw;class Qw extends O{create(w,X){let{betas:Z,...$}=w;return this._client.post("/v1/complete",{body:$,timeout:this._client._options.timeout??600000,...X,headers:x([{...Z?.toString()!=null?{"anthropic-beta":Z?.toString()}:void 0},X?.headers]),stream:w.stream??!1})}}function X5(w){return w?.output_config?.format}function w2(w,X,Z){let $=X5(X);if(!X||!("parse"in($??{})))return{...w,content:w.content.map((z)=>{if(z.type==="text")return Object.defineProperty({...z},"parsed_output",{value:null,enumerable:!1});return z}),parsed_output:null};return X2(w,X,Z)}function X2(w,X,Z){let $=null,z=w.content.map((W)=>{if(W.type==="text"){let K=e5(X,W.text);if($===null)$=K;return Object.defineProperty({...W},"parsed_output",{value:K,enumerable:!1})}return W});return{...w,content:z,parsed_output:$}}function e5(w,X){let Z=X5(w);if(Z?.type!=="json_schema")return null;try{if("parse"in Z)return Z.parse(X);return JSON.parse(X)}catch($){throw new N(`Failed to parse structured output: ${$}`)}}var y,a,Nw,ow,S0,tw,sw,I0,rw,v,ew,L0,j0,Xw,B0,P0,w0,Z2,Z5,$2,z2,W2,Y2,$5,z5="__json_buf";function W5(w){return w.type==="tool_use"||w.type==="server_tool_use"}class X0{constructor(w,X){y.add(this),this.messages=[],this.receivedMessages=[],a.set(this,void 0),Nw.set(this,null),this.controller=new AbortController,ow.set(this,void 0),S0.set(this,()=>{}),tw.set(this,()=>{}),sw.set(this,void 0),I0.set(this,()=>{}),rw.set(this,()=>{}),v.set(this,{}),ew.set(this,!1),L0.set(this,!1),j0.set(this,!1),Xw.set(this,!1),B0.set(this,void 0),P0.set(this,void 0),w0.set(this,void 0),$2.set(this,(Z)=>{if(V(this,L0,!0,"f"),b(Z))Z=new S;if(Z instanceof S)return V(this,j0,!0,"f"),this._emit("abort",Z);if(Z instanceof N)return this._emit("error",Z);if(Z instanceof Error){let $=new N(Z.message);return $.cause=Z,this._emit("error",$)}return this._emit("error",new N(String(Z)))}),V(this,ow,new Promise((Z,$)=>{V(this,S0,Z,"f"),V(this,tw,$,"f")}),"f"),V(this,sw,new Promise((Z,$)=>{V(this,I0,Z,"f"),V(this,rw,$,"f")}),"f"),Y(this,ow,"f").catch(()=>{}),Y(this,sw,"f").catch(()=>{}),V(this,Nw,w,"f"),V(this,w0,X?.logger??console,"f")}get response(){return Y(this,B0,"f")}get request_id(){return Y(this,P0,"f")}async withResponse(){V(this,Xw,!0,"f");let w=await Y(this,ow,"f");if(!w)throw Error("Could not resolve a `Response` object");return{data:this,response:w,request_id:w.headers.get("request-id")}}static fromReadableStream(w){let X=new X0(null);return X._run(()=>X._fromReadableStream(w)),X}static createMessage(w,X,Z,{logger:$}={}){let z=new X0(X,{logger:$});for(let W of X.messages)z._addMessageParam(W);return V(z,Nw,{...X,stream:!0},"f"),z._run(()=>z._createMessage(w,{...X,stream:!0},{...Z,headers:{...Z?.headers,"X-Stainless-Helper-Method":"stream"}})),z}_run(w){w().then(()=>{this._emitFinal(),this._emit("end")},Y(this,$2,"f"))}_addMessageParam(w){this.messages.push(w)}_addMessage(w,X=!0){if(this.receivedMessages.push(w),X)this._emit("message",w)}async _createMessage(w,X,Z){let $=Z?.signal,z;if($){if($.aborted)this.controller.abort();z=this.controller.abort.bind(this.controller),$.addEventListener("abort",z)}try{Y(this,y,"m",z2).call(this);let{response:W,data:K}=await w.create({...X,stream:!0},{...Z,signal:this.controller.signal}).withResponse();this._connected(W);for await(let J of K)Y(this,y,"m",W2).call(this,J);if(K.controller.signal?.aborted)throw new S;Y(this,y,"m",Y2).call(this)}finally{if($&&z)$.removeEventListener("abort",z)}}_connected(w){if(this.ended)return;V(this,B0,w,"f"),V(this,P0,w?.headers.get("request-id"),"f"),Y(this,S0,"f").call(this,w),this._emit("connect")}get ended(){return Y(this,ew,"f")}get errored(){return Y(this,L0,"f")}get aborted(){return Y(this,j0,"f")}abort(){this.controller.abort()}on(w,X){return(Y(this,v,"f")[w]||(Y(this,v,"f")[w]=[])).push({listener:X}),this}off(w,X){let Z=Y(this,v,"f")[w];if(!Z)return this;let $=Z.findIndex((z)=>z.listener===X);if($>=0)Z.splice($,1);return this}once(w,X){return(Y(this,v,"f")[w]||(Y(this,v,"f")[w]=[])).push({listener:X,once:!0}),this}emitted(w){return new Promise((X,Z)=>{if(V(this,Xw,!0,"f"),w!=="error")this.once("error",Z);this.once(w,X)})}async done(){V(this,Xw,!0,"f"),await Y(this,sw,"f")}get currentMessage(){return Y(this,a,"f")}async finalMessage(){return await this.done(),Y(this,y,"m",Z2).call(this)}async finalText(){return await this.done(),Y(this,y,"m",Z5).call(this)}_emit(w,...X){if(Y(this,ew,"f"))return;if(w==="end")V(this,ew,!0,"f"),Y(this,I0,"f").call(this);let Z=Y(this,v,"f")[w];if(Z)Y(this,v,"f")[w]=Z.filter(($)=>!$.once),Z.forEach(({listener:$})=>$(...X));if(w==="abort"){let $=X[0];if(!Y(this,Xw,"f")&&!Z?.length)Promise.reject($);Y(this,tw,"f").call(this,$),Y(this,rw,"f").call(this,$),this._emit("end");return}if(w==="error"){let $=X[0];if(!Y(this,Xw,"f")&&!Z?.length)Promise.reject($);Y(this,tw,"f").call(this,$),Y(this,rw,"f").call(this,$),this._emit("end")}}_emitFinal(){if(this.receivedMessages.at(-1))this._emit("finalMessage",Y(this,y,"m",Z2).call(this))}async _fromReadableStream(w,X){let Z=X?.signal,$;if(Z){if(Z.aborted)this.controller.abort();$=this.controller.abort.bind(this.controller),Z.addEventListener("abort",$)}try{Y(this,y,"m",z2).call(this),this._connected(null);let z=j.fromReadableStream(w,this.controller);for await(let W of z)Y(this,y,"m",W2).call(this,W);if(z.controller.signal?.aborted)throw new S;Y(this,y,"m",Y2).call(this)}finally{if(Z&&$)Z.removeEventListener("abort",$)}}[(a=new WeakMap,Nw=new WeakMap,ow=new WeakMap,S0=new WeakMap,tw=new WeakMap,sw=new WeakMap,I0=new WeakMap,rw=new WeakMap,v=new WeakMap,ew=new WeakMap,L0=new WeakMap,j0=new WeakMap,Xw=new WeakMap,B0=new WeakMap,P0=new WeakMap,w0=new WeakMap,$2=new WeakMap,y=new WeakSet,Z2=function(){if(this.receivedMessages.length===0)throw new N("stream ended without producing a Message with role=assistant");return this.receivedMessages.at(-1)},Z5=function(){if(this.receivedMessages.length===0)throw new N("stream ended without producing a Message with role=assistant");let X=this.receivedMessages.at(-1).content.filter((Z)=>Z.type==="text").map((Z)=>Z.text);if(X.length===0)throw new N("stream ended without producing a content block with type=text");return X.join(" ")},z2=function(){if(this.ended)return;V(this,a,void 0,"f")},W2=function(X){if(this.ended)return;let Z=Y(this,y,"m",$5).call(this,X);switch(this._emit("streamEvent",X,Z),X.type){case"content_block_delta":{let $=Z.content.at(-1);switch(X.delta.type){case"text_delta":{if($.type==="text")this._emit("text",X.delta.text,$.text||"");break}case"citations_delta":{if($.type==="text")this._emit("citation",X.delta.citation,$.citations??[]);break}case"input_json_delta":{if(W5($)&&$.input)this._emit("inputJson",X.delta.partial_json,$.input);break}case"thinking_delta":{if($.type==="thinking")this._emit("thinking",X.delta.thinking,$.thinking);break}case"signature_delta":{if($.type==="thinking")this._emit("signature",$.signature);break}default:Y5(X.delta)}break}case"message_stop":{this._addMessageParam(Z),this._addMessage(w2(Z,Y(this,Nw,"f"),{logger:Y(this,w0,"f")}),!0);break}case"content_block_stop":{this._emit("contentBlock",Z.content.at(-1));break}case"message_start":{V(this,a,Z,"f");break}case"content_block_start":case"message_delta":break}},Y2=function(){if(this.ended)throw new N("stream has ended, this shouldn't happen");let X=Y(this,a,"f");if(!X)throw new N("request ended without sending any chunks");return V(this,a,void 0,"f"),w2(X,Y(this,Nw,"f"),{logger:Y(this,w0,"f")})},$5=function(X){let Z=Y(this,a,"f");if(X.type==="message_start"){if(Z)throw new N(`Unexpected event order, got ${X.type} before receiving "message_stop"`);return X.message}if(!Z)throw new N(`Unexpected event order, got ${X.type} before "message_start"`);switch(X.type){case"message_stop":return Z;case"message_delta":if(Z.stop_reason=X.delta.stop_reason,Z.stop_sequence=X.delta.stop_sequence,Z.usage.output_tokens=X.usage.output_tokens,X.usage.input_tokens!=null)Z.usage.input_tokens=X.usage.input_tokens;if(X.usage.cache_creation_input_tokens!=null)Z.usage.cache_creation_input_tokens=X.usage.cache_creation_input_tokens;if(X.usage.cache_read_input_tokens!=null)Z.usage.cache_read_input_tokens=X.usage.cache_read_input_tokens;if(X.usage.server_tool_use!=null)Z.usage.server_tool_use=X.usage.server_tool_use;return Z;case"content_block_start":return Z.content.push({...X.content_block}),Z;case"content_block_delta":{let $=Z.content.at(X.index);switch(X.delta.type){case"text_delta":{if($?.type==="text")Z.content[X.index]={...$,text:($.text||"")+X.delta.text};break}case"citations_delta":{if($?.type==="text")Z.content[X.index]={...$,citations:[...$.citations??[],X.delta.citation]};break}case"input_json_delta":{if($&&W5($)){let z=$[z5]||"";z+=X.delta.partial_json;let W={...$};if(Object.defineProperty(W,z5,{value:z,enumerable:!1,writable:!0}),z)W.input=O0(z);Z.content[X.index]=W}break}case"thinking_delta":{if($?.type==="thinking")Z.content[X.index]={...$,thinking:$.thinking+X.delta.thinking};break}case"signature_delta":{if($?.type==="thinking")Z.content[X.index]={...$,signature:X.delta.signature};break}default:Y5(X.delta)}return Z}case"content_block_stop":return Z}},Symbol.asyncIterator)](){let w=[],X=[],Z=!1;return this.on("streamEvent",($)=>{let z=X.shift();if(z)z.resolve($);else w.push($)}),this.on("end",()=>{Z=!0;for(let $ of X)$.resolve(void 0);X.length=0}),this.on("abort",($)=>{Z=!0;for(let z of X)z.reject($);X.length=0}),this.on("error",($)=>{Z=!0;for(let z of X)z.reject($);X.length=0}),{next:async()=>{if(!w.length){if(Z)return{value:void 0,done:!0};return new Promise((z,W)=>X.push({resolve:z,reject:W})).then((z)=>z?{value:z,done:!1}:{value:void 0,done:!0})}return{value:w.shift(),done:!1}},return:async()=>{return this.abort(),{value:void 0,done:!0}}}}toReadableStream(){return new j(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function Y5(w){}class Z0 extends O{create(w,X){return this._client.post("/v1/messages/batches",{body:w,...X})}retrieve(w,X){return this._client.get(q`/v1/messages/batches/${w}`,X)}list(w={},X){return this._client.getAPIList("/v1/messages/batches",f,{query:w,...X})}delete(w,X){return this._client.delete(q`/v1/messages/batches/${w}`,X)}cancel(w,X){return this._client.post(q`/v1/messages/batches/${w}/cancel`,X)}async results(w,X){let Z=await this.retrieve(w);if(!Z.results_url)throw new N(`No batch \`results_url\`; Has it finished processing? ${Z.processing_status} - ${Z.id}`);return this._client.get(Z.results_url,{...X,headers:x([{Accept:"application/binary"},X?.headers]),stream:!0,__binaryResponse:!0})._thenUnwrap(($,z)=>Jw.fromResponse(z.response,z.controller))}}class Zw extends O{constructor(){super(...arguments);this.batches=new Z0(this._client)}create(w,X){if(w.model in K5)console.warn(`The model '${w.model}' is deprecated and will reach end-of-life on ${K5[w.model]} -Please migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`);if(w.model in X1&&w.thinking&&w.thinking.type==="enabled")console.warn(`Using Claude with ${w.model} and 'thinking.type=enabled' is deprecated. Use 'thinking.type=adaptive' instead which results in better model performance in our testing: https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking`);let Z=this._client._options.timeout;if(!w.stream&&Z==null){let z=q0[w.model]??void 0;Z=this._client.calculateNonstreamingTimeout(w.max_tokens,z)}let $=U0(w.tools,w.messages);return this._client.post("/v1/messages",{body:w,timeout:Z??600000,...X,headers:x([$,X?.headers]),stream:w.stream??!1})}parse(w,X){return this.create(w,X).then((Z)=>X2(Z,w,{logger:this._client.logger??console}))}stream(w,X){return X0.createMessage(this,w,X,{logger:this._client.logger??console})}countTokens(w,X){return this._client.post("/v1/messages/count_tokens",{body:w,...X})}}var K5={"claude-1.3":"November 6th, 2024","claude-1.3-100k":"November 6th, 2024","claude-instant-1.1":"November 6th, 2024","claude-instant-1.1-100k":"November 6th, 2024","claude-instant-1.2":"November 6th, 2024","claude-3-sonnet-20240229":"July 21st, 2025","claude-3-opus-20240229":"January 5th, 2026","claude-2.1":"July 21st, 2025","claude-2.0":"July 21st, 2025","claude-3-7-sonnet-latest":"February 19th, 2026","claude-3-7-sonnet-20250219":"February 19th, 2026","claude-3-5-haiku-latest":"February 19th, 2026","claude-3-5-haiku-20241022":"February 19th, 2026"},X1=["claude-opus-4-6"];Zw.Batches=Z0;class Gw extends O{retrieve(w,X={},Z){let{betas:$}=X??{};return this._client.get(q`/v1/models/${w}`,{...Z,headers:x([{...$?.toString()!=null?{"anthropic-beta":$?.toString()}:void 0},Z?.headers])})}list(w={},X){let{betas:Z,...$}=w??{};return this._client.getAPIList("/v1/models",f,{query:$,...X,headers:x([{...Z?.toString()!=null?{"anthropic-beta":Z?.toString()}:void 0},X?.headers])})}}var $0=(w)=>{if(typeof globalThis.process<"u")return globalThis.process.env?.[w]?.trim()??void 0;if(typeof globalThis.Deno<"u")return globalThis.Deno.env?.get?.(w)?.trim();return};var K2,J2,y0,J5,V5="\\n\\nHuman:",Q5="\\n\\nAssistant:";class H{constructor({baseURL:w=$0("ANTHROPIC_BASE_URL"),apiKey:X=$0("ANTHROPIC_API_KEY")??null,authToken:Z=$0("ANTHROPIC_AUTH_TOKEN")??null,...$}={}){K2.add(this),y0.set(this,void 0);let z={apiKey:X,authToken:Z,...$,baseURL:w||"https://api.anthropic.com"};if(!z.dangerouslyAllowBrowser&&I2())throw new N(`It looks like you're running in a browser-like environment. +Wrap your summary in tags.`;var vw,Kw,e,M,cw,P,d,l,mw,v4,l0;function c4(){let w,X;return{promise:new Promise(($,W)=>{w=$,X=W}),resolve:w,reject:X}}class uw{constructor(w,X,Z){vw.add(this),this.client=w,Kw.set(this,!1),e.set(this,!1),M.set(this,void 0),cw.set(this,void 0),P.set(this,void 0),d.set(this,void 0),l.set(this,void 0),mw.set(this,0),V(this,M,{params:{...X,messages:structuredClone(X.messages)}},"f"),V(this,cw,{...Z,headers:C([{"x-stainless-helper":"BetaToolRunner"},Z?.headers])},"f"),V(this,l,c4(),"f")}async*[(Kw=new WeakMap,e=new WeakMap,M=new WeakMap,cw=new WeakMap,P=new WeakMap,d=new WeakMap,l=new WeakMap,mw=new WeakMap,vw=new WeakSet,v4=async function(){let X=K(this,M,"f").params.compactionControl;if(!X||!X.enabled)return!1;let Z=0;if(K(this,P,"f")!==void 0)try{let Q=await K(this,P,"f");Z=Q.usage.input_tokens+(Q.usage.cache_creation_input_tokens??0)+(Q.usage.cache_read_input_tokens??0)+Q.usage.output_tokens}catch{return!1}let $=X.contextTokenThreshold??g4;if(Z<$)return!1;let W=X.model??K(this,M,"f").params.model,Y=X.summaryPrompt??d4,z=K(this,M,"f").params.messages;if(z[z.length-1].role==="assistant"){let Q=z[z.length-1];if(Array.isArray(Q.content)){let G=Q.content.filter((x)=>x.type!=="tool_use");if(G.length===0)z.pop();else Q.content=G}}let J=await this.client.beta.messages.create({model:W,messages:[...z,{role:"user",content:[{type:"text",text:Y}]}],max_tokens:K(this,M,"f").params.max_tokens},{headers:{"x-stainless-helper":"compaction"}});if(J.content[0]?.type!=="text")throw new N("Expected text response for compaction");return K(this,M,"f").params.messages=[{role:"user",content:J.content}],!0},Symbol.asyncIterator)](){var w;if(K(this,Kw,"f"))throw new N("Cannot iterate over a consumed stream");V(this,Kw,!0,"f"),V(this,e,!0,"f"),V(this,d,void 0,"f");try{while(!0){let X;try{if(K(this,M,"f").params.max_iterations&&K(this,mw,"f")>=K(this,M,"f").params.max_iterations)break;V(this,e,!1,"f"),V(this,d,void 0,"f"),V(this,mw,(w=K(this,mw,"f"),w++,w),"f"),V(this,P,void 0,"f");let{max_iterations:Z,compactionControl:$,...W}=K(this,M,"f").params;if(W.stream)X=this.client.beta.messages.stream({...W},K(this,cw,"f")),V(this,P,X.finalMessage(),"f"),K(this,P,"f").catch(()=>{}),yield X;else V(this,P,this.client.beta.messages.create({...W,stream:!1},K(this,cw,"f")),"f"),yield K(this,P,"f");if(!await K(this,vw,"m",v4).call(this)){if(!K(this,e,"f")){let{role:J,content:Q}=await K(this,P,"f");K(this,M,"f").params.messages.push({role:J,content:Q})}let z=await K(this,vw,"m",l0).call(this,K(this,M,"f").params.messages.at(-1));if(z)K(this,M,"f").params.messages.push(z);else if(!K(this,e,"f"))break}}finally{if(X)X.abort()}}if(!K(this,P,"f"))throw new N("ToolRunner concluded without a message from the server");K(this,l,"f").resolve(await K(this,P,"f"))}catch(X){throw V(this,Kw,!1,"f"),K(this,l,"f").promise.catch(()=>{}),K(this,l,"f").reject(X),V(this,l,c4(),"f"),X}}setMessagesParams(w){if(typeof w==="function")K(this,M,"f").params=w(K(this,M,"f").params);else K(this,M,"f").params=w;V(this,e,!0,"f"),V(this,d,void 0,"f")}async generateToolResponse(){let w=await K(this,P,"f")??this.params.messages.at(-1);if(!w)return null;return K(this,vw,"m",l0).call(this,w)}done(){return K(this,l,"f").promise}async runUntilDone(){if(!K(this,Kw,"f"))for await(let w of this);return this.done()}get params(){return K(this,M,"f").params}pushMessages(...w){this.setMessagesParams((X)=>({...X,messages:[...X.messages,...w]}))}then(w,X){return this.runUntilDone().then(w,X)}}l0=async function(X){if(K(this,d,"f")!==void 0)return K(this,d,"f");return V(this,d,k1(K(this,M,"f").params,X),"f"),K(this,d,"f")};async function k1(w,X=w.messages.at(-1)){if(!X||X.role!=="assistant"||!X.content||typeof X.content==="string")return null;let Z=X.content.filter((W)=>W.type==="tool_use");if(Z.length===0)return null;return{role:"user",content:await Promise.all(Z.map(async(W)=>{let Y=w.tools.find((z)=>("name"in z?z.name:z.mcp_server_name)===W.name);if(!Y||!("run"in Y))return{type:"tool_result",tool_use_id:W.id,content:`Error: Tool '${W.name}' not found`,is_error:!0};try{let z=W.input;if("parse"in Y&&Y.parse)z=Y.parse(z);let J=await Y.run(z);return{type:"tool_result",tool_use_id:W.id,content:J}}catch(z){return{type:"tool_result",tool_use_id:W.id,content:`Error: ${z instanceof Error?z.message:String(z)}`,is_error:!0}}}))}}class zw{constructor(w,X){this.iterator=w,this.controller=X}async*decoder(){let w=new p;for await(let X of this.iterator)for(let Z of w.decode(X))yield JSON.parse(Z);for(let X of w.flush())yield JSON.parse(X)}[Symbol.asyncIterator](){return this.decoder()}static fromResponse(w,X){if(!w.body){if(X.abort(),typeof globalThis.navigator<"u"&&globalThis.navigator.product==="ReactNative")throw new N("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new N("Attempted to iterate over a response with no body")}return new zw(Tw(w.body),X)}}class pw extends U{create(w,X){let{betas:Z,...$}=w;return this._client.post("/v1/messages/batches?beta=true",{body:$,...X,headers:C([{"anthropic-beta":[...Z??[],"message-batches-2024-09-24"].toString()},X?.headers])})}retrieve(w,X={},Z){let{betas:$}=X??{};return this._client.get(H`/v1/messages/batches/${w}?beta=true`,{...Z,headers:C([{"anthropic-beta":[...$??[],"message-batches-2024-09-24"].toString()},Z?.headers])})}list(w={},X){let{betas:Z,...$}=w??{};return this._client.getAPIList("/v1/messages/batches?beta=true",R,{query:$,...X,headers:C([{"anthropic-beta":[...Z??[],"message-batches-2024-09-24"].toString()},X?.headers])})}delete(w,X={},Z){let{betas:$}=X??{};return this._client.delete(H`/v1/messages/batches/${w}?beta=true`,{...Z,headers:C([{"anthropic-beta":[...$??[],"message-batches-2024-09-24"].toString()},Z?.headers])})}cancel(w,X={},Z){let{betas:$}=X??{};return this._client.post(H`/v1/messages/batches/${w}/cancel?beta=true`,{...Z,headers:C([{"anthropic-beta":[...$??[],"message-batches-2024-09-24"].toString()},Z?.headers])})}async results(w,X={},Z){let $=await this.retrieve(w);if(!$.results_url)throw new N(`No batch \`results_url\`; Has it finished processing? ${$.processing_status} - ${$.id}`);let{betas:W}=X??{};return this._client.get($.results_url,{...Z,headers:C([{"anthropic-beta":[...W??[],"message-batches-2024-09-24"].toString(),Accept:"application/binary"},Z?.headers]),stream:!0,__binaryResponse:!0})._thenUnwrap((Y,z)=>zw.fromResponse(z.response,z.controller))}}var m4={"claude-1.3":"November 6th, 2024","claude-1.3-100k":"November 6th, 2024","claude-instant-1.1":"November 6th, 2024","claude-instant-1.1-100k":"November 6th, 2024","claude-instant-1.2":"November 6th, 2024","claude-3-sonnet-20240229":"July 21st, 2025","claude-3-opus-20240229":"January 5th, 2026","claude-2.1":"July 21st, 2025","claude-2.0":"July 21st, 2025","claude-3-7-sonnet-latest":"February 19th, 2026","claude-3-7-sonnet-20250219":"February 19th, 2026"};class ww extends U{constructor(){super(...arguments);this.batches=new pw(this._client)}create(w,X){let{betas:Z,...$}=w;if($.model in m4)console.warn(`The model '${$.model}' is deprecated and will reach end-of-life on ${m4[$.model]} +Please migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`);let W=this._client._options.timeout;if(!$.stream&&W==null){let Y=Q0[$.model]??void 0;W=this._client.calculateNonstreamingTimeout($.max_tokens,Y)}return this._client.post("/v1/messages?beta=true",{body:$,timeout:W??600000,...X,headers:C([{...Z?.toString()!=null?{"anthropic-beta":Z?.toString()}:void 0},X?.headers]),stream:w.stream??!1})}parse(w,X){return X={...X,headers:C([{"anthropic-beta":[...w.betas??[],"structured-outputs-2025-11-13"].toString()},X?.headers])},this.create(w,X).then((Z)=>c0(Z,w,{logger:this._client.logger??console}))}stream(w,X){return dw.createMessage(this,w,X)}countTokens(w,X){let{betas:Z,...$}=w;return this._client.post("/v1/messages/count_tokens?beta=true",{body:$,...X,headers:C([{"anthropic-beta":[...Z??[],"token-counting-2024-11-01"].toString()},X?.headers])})}toolRunner(w,X){return new uw(this._client,w,X)}}ww.Batches=pw;ww.BetaToolRunner=uw;class iw extends U{create(w,X={},Z){let{betas:$,...W}=X??{};return this._client.post(H`/v1/skills/${w}/versions?beta=true`,$w({body:W,...Z,headers:C([{"anthropic-beta":[...$??[],"skills-2025-10-02"].toString()},Z?.headers])},this._client))}retrieve(w,X,Z){let{skill_id:$,betas:W}=X;return this._client.get(H`/v1/skills/${$}/versions/${w}?beta=true`,{...Z,headers:C([{"anthropic-beta":[...W??[],"skills-2025-10-02"].toString()},Z?.headers])})}list(w,X={},Z){let{betas:$,...W}=X??{};return this._client.getAPIList(H`/v1/skills/${w}/versions?beta=true`,Pw,{query:W,...Z,headers:C([{"anthropic-beta":[...$??[],"skills-2025-10-02"].toString()},Z?.headers])})}delete(w,X,Z){let{skill_id:$,betas:W}=X;return this._client.delete(H`/v1/skills/${$}/versions/${w}?beta=true`,{...Z,headers:C([{"anthropic-beta":[...W??[],"skills-2025-10-02"].toString()},Z?.headers])})}}class Jw extends U{constructor(){super(...arguments);this.versions=new iw(this._client)}create(w={},X){let{betas:Z,...$}=w??{};return this._client.post("/v1/skills?beta=true",$w({body:$,...X,headers:C([{"anthropic-beta":[...Z??[],"skills-2025-10-02"].toString()},X?.headers])},this._client))}retrieve(w,X={},Z){let{betas:$}=X??{};return this._client.get(H`/v1/skills/${w}?beta=true`,{...Z,headers:C([{"anthropic-beta":[...$??[],"skills-2025-10-02"].toString()},Z?.headers])})}list(w={},X){let{betas:Z,...$}=w??{};return this._client.getAPIList("/v1/skills?beta=true",Pw,{query:$,...X,headers:C([{"anthropic-beta":[...Z??[],"skills-2025-10-02"].toString()},X?.headers])})}delete(w,X={},Z){let{betas:$}=X??{};return this._client.delete(H`/v1/skills/${w}?beta=true`,{...Z,headers:C([{"anthropic-beta":[...$??[],"skills-2025-10-02"].toString()},Z?.headers])})}}Jw.Versions=iw;class k extends U{constructor(){super(...arguments);this.models=new Rw(this._client),this.messages=new ww(this._client),this.files=new yw(this._client),this.skills=new Jw(this._client)}}k.Models=Rw;k.Messages=ww;k.Files=yw;k.Skills=Jw;class Vw extends U{create(w,X){let{betas:Z,...$}=w;return this._client.post("/v1/complete",{body:$,timeout:this._client._options.timeout??600000,...X,headers:C([{...Z?.toString()!=null?{"anthropic-beta":Z?.toString()}:void 0},X?.headers]),stream:w.stream??!1})}}var y,n,lw,D0,nw,ow,F0,aw,v,tw,E0,M0,Xw,A0,T0,n0,u4,o0,a0,t0,s0,p4,i4="__json_buf";function l4(w){return w.type==="tool_use"||w.type==="server_tool_use"}class sw{constructor(){y.add(this),this.messages=[],this.receivedMessages=[],n.set(this,void 0),this.controller=new AbortController,lw.set(this,void 0),D0.set(this,()=>{}),nw.set(this,()=>{}),ow.set(this,void 0),F0.set(this,()=>{}),aw.set(this,()=>{}),v.set(this,{}),tw.set(this,!1),E0.set(this,!1),M0.set(this,!1),Xw.set(this,!1),A0.set(this,void 0),T0.set(this,void 0),o0.set(this,(w)=>{if(V(this,E0,!0,"f"),h(w))w=new S;if(w instanceof S)return V(this,M0,!0,"f"),this._emit("abort",w);if(w instanceof N)return this._emit("error",w);if(w instanceof Error){let X=new N(w.message);return X.cause=w,this._emit("error",X)}return this._emit("error",new N(String(w)))}),V(this,lw,new Promise((w,X)=>{V(this,D0,w,"f"),V(this,nw,X,"f")}),"f"),V(this,ow,new Promise((w,X)=>{V(this,F0,w,"f"),V(this,aw,X,"f")}),"f"),K(this,lw,"f").catch(()=>{}),K(this,ow,"f").catch(()=>{})}get response(){return K(this,A0,"f")}get request_id(){return K(this,T0,"f")}async withResponse(){V(this,Xw,!0,"f");let w=await K(this,lw,"f");if(!w)throw Error("Could not resolve a `Response` object");return{data:this,response:w,request_id:w.headers.get("request-id")}}static fromReadableStream(w){let X=new sw;return X._run(()=>X._fromReadableStream(w)),X}static createMessage(w,X,Z){let $=new sw;for(let W of X.messages)$._addMessageParam(W);return $._run(()=>$._createMessage(w,{...X,stream:!0},{...Z,headers:{...Z?.headers,"X-Stainless-Helper-Method":"stream"}})),$}_run(w){w().then(()=>{this._emitFinal(),this._emit("end")},K(this,o0,"f"))}_addMessageParam(w){this.messages.push(w)}_addMessage(w,X=!0){if(this.receivedMessages.push(w),X)this._emit("message",w)}async _createMessage(w,X,Z){let $=Z?.signal,W;if($){if($.aborted)this.controller.abort();W=this.controller.abort.bind(this.controller),$.addEventListener("abort",W)}try{K(this,y,"m",a0).call(this);let{response:Y,data:z}=await w.create({...X,stream:!0},{...Z,signal:this.controller.signal}).withResponse();this._connected(Y);for await(let J of z)K(this,y,"m",t0).call(this,J);if(z.controller.signal?.aborted)throw new S;K(this,y,"m",s0).call(this)}finally{if($&&W)$.removeEventListener("abort",W)}}_connected(w){if(this.ended)return;V(this,A0,w,"f"),V(this,T0,w?.headers.get("request-id"),"f"),K(this,D0,"f").call(this,w),this._emit("connect")}get ended(){return K(this,tw,"f")}get errored(){return K(this,E0,"f")}get aborted(){return K(this,M0,"f")}abort(){this.controller.abort()}on(w,X){return(K(this,v,"f")[w]||(K(this,v,"f")[w]=[])).push({listener:X}),this}off(w,X){let Z=K(this,v,"f")[w];if(!Z)return this;let $=Z.findIndex((W)=>W.listener===X);if($>=0)Z.splice($,1);return this}once(w,X){return(K(this,v,"f")[w]||(K(this,v,"f")[w]=[])).push({listener:X,once:!0}),this}emitted(w){return new Promise((X,Z)=>{if(V(this,Xw,!0,"f"),w!=="error")this.once("error",Z);this.once(w,X)})}async done(){V(this,Xw,!0,"f"),await K(this,ow,"f")}get currentMessage(){return K(this,n,"f")}async finalMessage(){return await this.done(),K(this,y,"m",n0).call(this)}async finalText(){return await this.done(),K(this,y,"m",u4).call(this)}_emit(w,...X){if(K(this,tw,"f"))return;if(w==="end")V(this,tw,!0,"f"),K(this,F0,"f").call(this);let Z=K(this,v,"f")[w];if(Z)K(this,v,"f")[w]=Z.filter(($)=>!$.once),Z.forEach(({listener:$})=>$(...X));if(w==="abort"){let $=X[0];if(!K(this,Xw,"f")&&!Z?.length)Promise.reject($);K(this,nw,"f").call(this,$),K(this,aw,"f").call(this,$),this._emit("end");return}if(w==="error"){let $=X[0];if(!K(this,Xw,"f")&&!Z?.length)Promise.reject($);K(this,nw,"f").call(this,$),K(this,aw,"f").call(this,$),this._emit("end")}}_emitFinal(){if(this.receivedMessages.at(-1))this._emit("finalMessage",K(this,y,"m",n0).call(this))}async _fromReadableStream(w,X){let Z=X?.signal,$;if(Z){if(Z.aborted)this.controller.abort();$=this.controller.abort.bind(this.controller),Z.addEventListener("abort",$)}try{K(this,y,"m",a0).call(this),this._connected(null);let W=I.fromReadableStream(w,this.controller);for await(let Y of W)K(this,y,"m",t0).call(this,Y);if(W.controller.signal?.aborted)throw new S;K(this,y,"m",s0).call(this)}finally{if(Z&&$)Z.removeEventListener("abort",$)}}[(n=new WeakMap,lw=new WeakMap,D0=new WeakMap,nw=new WeakMap,ow=new WeakMap,F0=new WeakMap,aw=new WeakMap,v=new WeakMap,tw=new WeakMap,E0=new WeakMap,M0=new WeakMap,Xw=new WeakMap,A0=new WeakMap,T0=new WeakMap,o0=new WeakMap,y=new WeakSet,n0=function(){if(this.receivedMessages.length===0)throw new N("stream ended without producing a Message with role=assistant");return this.receivedMessages.at(-1)},u4=function(){if(this.receivedMessages.length===0)throw new N("stream ended without producing a Message with role=assistant");let X=this.receivedMessages.at(-1).content.filter((Z)=>Z.type==="text").map((Z)=>Z.text);if(X.length===0)throw new N("stream ended without producing a content block with type=text");return X.join(" ")},a0=function(){if(this.ended)return;V(this,n,void 0,"f")},t0=function(X){if(this.ended)return;let Z=K(this,y,"m",p4).call(this,X);switch(this._emit("streamEvent",X,Z),X.type){case"content_block_delta":{let $=Z.content.at(-1);switch(X.delta.type){case"text_delta":{if($.type==="text")this._emit("text",X.delta.text,$.text||"");break}case"citations_delta":{if($.type==="text")this._emit("citation",X.delta.citation,$.citations??[]);break}case"input_json_delta":{if(l4($)&&$.input)this._emit("inputJson",X.delta.partial_json,$.input);break}case"thinking_delta":{if($.type==="thinking")this._emit("thinking",X.delta.thinking,$.thinking);break}case"signature_delta":{if($.type==="thinking")this._emit("signature",$.signature);break}default:n4(X.delta)}break}case"message_stop":{this._addMessageParam(Z),this._addMessage(Z,!0);break}case"content_block_stop":{this._emit("contentBlock",Z.content.at(-1));break}case"message_start":{V(this,n,Z,"f");break}case"content_block_start":case"message_delta":break}},s0=function(){if(this.ended)throw new N("stream has ended, this shouldn't happen");let X=K(this,n,"f");if(!X)throw new N("request ended without sending any chunks");return V(this,n,void 0,"f"),X},p4=function(X){let Z=K(this,n,"f");if(X.type==="message_start"){if(Z)throw new N(`Unexpected event order, got ${X.type} before receiving "message_stop"`);return X.message}if(!Z)throw new N(`Unexpected event order, got ${X.type} before "message_start"`);switch(X.type){case"message_stop":return Z;case"message_delta":if(Z.stop_reason=X.delta.stop_reason,Z.stop_sequence=X.delta.stop_sequence,Z.usage.output_tokens=X.usage.output_tokens,X.usage.input_tokens!=null)Z.usage.input_tokens=X.usage.input_tokens;if(X.usage.cache_creation_input_tokens!=null)Z.usage.cache_creation_input_tokens=X.usage.cache_creation_input_tokens;if(X.usage.cache_read_input_tokens!=null)Z.usage.cache_read_input_tokens=X.usage.cache_read_input_tokens;if(X.usage.server_tool_use!=null)Z.usage.server_tool_use=X.usage.server_tool_use;return Z;case"content_block_start":return Z.content.push({...X.content_block}),Z;case"content_block_delta":{let $=Z.content.at(X.index);switch(X.delta.type){case"text_delta":{if($?.type==="text")Z.content[X.index]={...$,text:($.text||"")+X.delta.text};break}case"citations_delta":{if($?.type==="text")Z.content[X.index]={...$,citations:[...$.citations??[],X.delta.citation]};break}case"input_json_delta":{if($&&l4($)){let W=$[i4]||"";W+=X.delta.partial_json;let Y={...$};if(Object.defineProperty(Y,i4,{value:W,enumerable:!1,writable:!0}),W)Y.input=N0(W);Z.content[X.index]=Y}break}case"thinking_delta":{if($?.type==="thinking")Z.content[X.index]={...$,thinking:$.thinking+X.delta.thinking};break}case"signature_delta":{if($?.type==="thinking")Z.content[X.index]={...$,signature:X.delta.signature};break}default:n4(X.delta)}return Z}case"content_block_stop":return Z}},Symbol.asyncIterator)](){let w=[],X=[],Z=!1;return this.on("streamEvent",($)=>{let W=X.shift();if(W)W.resolve($);else w.push($)}),this.on("end",()=>{Z=!0;for(let $ of X)$.resolve(void 0);X.length=0}),this.on("abort",($)=>{Z=!0;for(let W of X)W.reject($);X.length=0}),this.on("error",($)=>{Z=!0;for(let W of X)W.reject($);X.length=0}),{next:async()=>{if(!w.length){if(Z)return{value:void 0,done:!0};return new Promise((W,Y)=>X.push({resolve:W,reject:Y})).then((W)=>W?{value:W,done:!1}:{value:void 0,done:!0})}return{value:w.shift(),done:!1}},return:async()=>{return this.abort(),{value:void 0,done:!0}}}}toReadableStream(){return new I(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function n4(w){}class rw extends U{create(w,X){return this._client.post("/v1/messages/batches",{body:w,...X})}retrieve(w,X){return this._client.get(H`/v1/messages/batches/${w}`,X)}list(w={},X){return this._client.getAPIList("/v1/messages/batches",R,{query:w,...X})}delete(w,X){return this._client.delete(H`/v1/messages/batches/${w}`,X)}cancel(w,X){return this._client.post(H`/v1/messages/batches/${w}/cancel`,X)}async results(w,X){let Z=await this.retrieve(w);if(!Z.results_url)throw new N(`No batch \`results_url\`; Has it finished processing? ${Z.processing_status} - ${Z.id}`);return this._client.get(Z.results_url,{...X,headers:C([{Accept:"application/binary"},X?.headers]),stream:!0,__binaryResponse:!0})._thenUnwrap(($,W)=>zw.fromResponse(W.response,W.controller))}}class Zw extends U{constructor(){super(...arguments);this.batches=new rw(this._client)}create(w,X){if(w.model in o4)console.warn(`The model '${w.model}' is deprecated and will reach end-of-life on ${o4[w.model]} +Please migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`);let Z=this._client._options.timeout;if(!w.stream&&Z==null){let $=Q0[w.model]??void 0;Z=this._client.calculateNonstreamingTimeout(w.max_tokens,$)}return this._client.post("/v1/messages",{body:w,timeout:Z??600000,...X,stream:w.stream??!1})}stream(w,X){return sw.createMessage(this,w,X)}countTokens(w,X){return this._client.post("/v1/messages/count_tokens",{body:w,...X})}}var o4={"claude-1.3":"November 6th, 2024","claude-1.3-100k":"November 6th, 2024","claude-instant-1.1":"November 6th, 2024","claude-instant-1.1-100k":"November 6th, 2024","claude-instant-1.2":"November 6th, 2024","claude-3-sonnet-20240229":"July 21st, 2025","claude-3-opus-20240229":"January 5th, 2026","claude-2.1":"July 21st, 2025","claude-2.0":"July 21st, 2025","claude-3-7-sonnet-latest":"February 19th, 2026","claude-3-7-sonnet-20250219":"February 19th, 2026"};Zw.Batches=rw;class Qw extends U{retrieve(w,X={},Z){let{betas:$}=X??{};return this._client.get(H`/v1/models/${w}`,{...Z,headers:C([{...$?.toString()!=null?{"anthropic-beta":$?.toString()}:void 0},Z?.headers])})}list(w={},X){let{betas:Z,...$}=w??{};return this._client.getAPIList("/v1/models",R,{query:$,...X,headers:C([{...Z?.toString()!=null?{"anthropic-beta":Z?.toString()}:void 0},X?.headers])})}}var ew=(w)=>{if(typeof globalThis.process<"u")return globalThis.process.env?.[w]?.trim()??void 0;if(typeof globalThis.Deno<"u")return globalThis.Deno.env?.get?.(w)?.trim();return};var r0,e0,S0,a4,t4="\\n\\nHuman:",s4="\\n\\nAssistant:";class q{constructor({baseURL:w=ew("ANTHROPIC_BASE_URL"),apiKey:X=ew("ANTHROPIC_API_KEY")??null,authToken:Z=ew("ANTHROPIC_AUTH_TOKEN")??null,...$}={}){r0.add(this),S0.set(this,void 0);let W={apiKey:X,authToken:Z,...$,baseURL:w||"https://api.anthropic.com"};if(!W.dangerouslyAllowBrowser&&U4())throw new N(`It looks like you're running in a browser-like environment. This is disabled by default, as it risks exposing your secret API credentials to attackers. If you understand the risks and have appropriate mitigations in place, you can set the \`dangerouslyAllowBrowser\` option to \`true\`, e.g., new Anthropic({ apiKey, dangerouslyAllowBrowser: true }); -`);this.baseURL=z.baseURL,this.timeout=z.timeout??J2.DEFAULT_TIMEOUT,this.logger=z.logger??console;let W="warn";this.logLevel=W,this.logLevel=d0(z.logLevel,"ClientOptions.logLevel",this)??d0($0("ANTHROPIC_LOG"),"process.env['ANTHROPIC_LOG']",this)??W,this.fetchOptions=z.fetchOptions,this.maxRetries=z.maxRetries??2,this.fetch=z.fetch??j2(),V(this,y0,P2,"f"),this._options=z,this.apiKey=typeof X==="string"?X:null,this.authToken=Z}withOptions(w){return new this.constructor({...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.apiKey,authToken:this.authToken,...w})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:w,nulls:X}){if(w.get("x-api-key")||w.get("authorization"))return;if(this.apiKey&&w.get("x-api-key"))return;if(X.has("x-api-key"))return;if(this.authToken&&w.get("authorization"))return;if(X.has("authorization"))return;throw Error('Could not resolve authentication method. Expected either apiKey or authToken to be set. Or for one of the "X-Api-Key" or "Authorization" headers to be explicitly omitted')}async authHeaders(w){return x([await this.apiKeyAuth(w),await this.bearerAuth(w)])}async apiKeyAuth(w){if(this.apiKey==null)return;return x([{"X-Api-Key":this.apiKey}])}async bearerAuth(w){if(this.authToken==null)return;return x([{Authorization:`Bearer ${this.authToken}`}])}stringifyQuery(w){return Object.entries(w).filter(([X,Z])=>typeof Z<"u").map(([X,Z])=>{if(typeof Z==="string"||typeof Z==="number"||typeof Z==="boolean")return`${encodeURIComponent(X)}=${encodeURIComponent(Z)}`;if(Z===null)return`${encodeURIComponent(X)}=`;throw new N(`Cannot stringify type ${typeof Z}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`)}).join("&")}getUserAgent(){return`${this.constructor.name}/JS ${u}`}defaultIdempotencyKey(){return`stainless-node-retry-${k0()}`}makeStatusError(w,X,Z,$){return M.generate(w,X,Z,$)}buildURL(w,X,Z){let $=!Y(this,K2,"m",J5).call(this)&&Z||this.baseURL,z=H2(w)?new URL(w):new URL($+($.endsWith("/")&&w.startsWith("/")?w.slice(1):w)),W=this.defaultQuery();if(!D2(W))X={...W,...X};if(typeof X==="object"&&X&&!Array.isArray(X))z.search=this.stringifyQuery(X);return z.toString()}_calculateNonstreamingTimeout(w){if(3600*w/128000>600)throw new N("Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#streaming-responses for more details");return 600000}async prepareOptions(w){}async prepareRequest(w,{url:X,options:Z}){}get(w,X){return this.methodRequest("get",w,X)}post(w,X){return this.methodRequest("post",w,X)}patch(w,X){return this.methodRequest("patch",w,X)}put(w,X){return this.methodRequest("put",w,X)}delete(w,X){return this.methodRequest("delete",w,X)}methodRequest(w,X,Z){return this.request(Promise.resolve(Z).then(($)=>{return{method:w,path:X,...$}}))}request(w,X=null){return new s(this,this.makeRequest(w,X,void 0))}async makeRequest(w,X,Z){let $=await w,z=$.maxRetries??this.maxRetries;if(X==null)X=z;await this.prepareOptions($);let{req:W,url:K,timeout:J}=await this.buildRequest($,{retryCount:z-X});await this.prepareRequest(W,{url:K,options:$});let Q="log_"+(Math.random()*16777216|0).toString(16).padStart(6,"0"),G=Z===void 0?"":`, retryOf: ${Z}`,C=Date.now();if(F(this).debug(`[${Q}] sending request`,g({retryOfRequestLogID:Z,method:$.method,url:K,options:$,headers:W.headers})),$.signal?.aborted)throw new S;let T=new AbortController,U=await this.fetchWithTimeout(K,W,J,T).catch(qw),E=Date.now();if(U instanceof globalThis.Error){let h=`retrying, ${X} attempts remaining`;if($.signal?.aborted)throw new S;let R=b(U)||/timed? ?out/i.test(String(U)+("cause"in U?String(U.cause):""));if(X)return F(this).info(`[${Q}] connection ${R?"timed out":"failed"} - ${h}`),F(this).debug(`[${Q}] connection ${R?"timed out":"failed"} (${h})`,g({retryOfRequestLogID:Z,url:K,durationMs:E-C,message:U.message})),this.retryRequest($,X,Z??Q);if(F(this).info(`[${Q}] connection ${R?"timed out":"failed"} - error; no more retries left`),F(this).debug(`[${Q}] connection ${R?"timed out":"failed"} (error; no more retries left)`,g({retryOfRequestLogID:Z,url:K,durationMs:E-C,message:U.message})),R)throw new Ow;throw new t({cause:U})}let o=[...U.headers.entries()].filter(([h])=>h==="request-id").map(([h,R])=>", "+h+": "+JSON.stringify(R)).join(""),Uw=`[${Q}${G}${o}] ${W.method} ${K} ${U.ok?"succeeded":"failed"} with status ${U.status} in ${E-C}ms`;if(!U.ok){let h=await this.shouldRetry(U);if(X&&h){let z0=`retrying, ${X} attempts remaining`;return await B2(U.body),F(this).info(`${Uw} - ${z0}`),F(this).debug(`[${Q}] response error (${z0})`,g({retryOfRequestLogID:Z,url:U.url,status:U.status,headers:U.headers,durationMs:E-C})),this.retryRequest($,X,Z??Q,U.headers)}let R=h?"error; no more retries left":"error; not retryable";F(this).info(`${Uw} - ${R}`);let C2=await U.text().catch((z0)=>qw(z0).message),U2=Y0(C2),q2=U2?void 0:C2;throw F(this).debug(`[${Q}] response error (${R})`,g({retryOfRequestLogID:Z,url:U.url,status:U.status,headers:U.headers,message:q2,durationMs:Date.now()-C})),this.makeStatusError(U.status,U2,q2,U.headers)}return F(this).info(Uw),F(this).debug(`[${Q}] response start`,g({retryOfRequestLogID:Z,url:U.url,status:U.status,headers:U.headers,durationMs:E-C})),{response:U,options:$,controller:T,requestLogID:Q,retryOfRequestLogID:Z,startTime:C}}getAPIList(w,X,Z){return this.requestAPIList(X,Z&&"then"in Z?Z.then(($)=>({method:"get",path:w,...$})):{method:"get",path:w,...Z})}requestAPIList(w,X){let Z=this.makeRequest(X,null,void 0);return new G0(this,Z,w)}async fetchWithTimeout(w,X,Z,$){let{signal:z,method:W,...K}=X||{},J=this._makeAbort($);if(z)z.addEventListener("abort",J,{once:!0});let Q=setTimeout(J,Z),G=globalThis.ReadableStream&&K.body instanceof globalThis.ReadableStream||typeof K.body==="object"&&K.body!==null&&Symbol.asyncIterator in K.body,C={signal:$.signal,...G?{duplex:"half"}:{},method:"GET",...K};if(W)C.method=W.toUpperCase();try{return await this.fetch.call(void 0,w,C)}finally{clearTimeout(Q)}}async shouldRetry(w){let X=w.headers.get("x-should-retry");if(X==="true")return!0;if(X==="false")return!1;if(w.status===408)return!0;if(w.status===409)return!0;if(w.status===429)return!0;if(w.status>=500)return!0;return!1}async retryRequest(w,X,Z,$){let z,W=$?.get("retry-after-ms");if(W){let J=parseFloat(W);if(!Number.isNaN(J))z=J}let K=$?.get("retry-after");if(K&&!z){let J=parseFloat(K);if(!Number.isNaN(J))z=J*1000;else z=Date.parse(K)-Date.now()}if(!(z&&0<=z&&z<60000)){let J=w.maxRetries??this.maxRetries;z=this.calculateDefaultRetryTimeoutMillis(X,J)}return await T2(z),this.makeRequest(w,X-1,Z)}calculateDefaultRetryTimeoutMillis(w,X){let z=X-w,W=Math.min(0.5*Math.pow(2,z),8),K=1-Math.random()*0.25;return W*K*1000}calculateNonstreamingTimeout(w,X){if(3600000*w/128000>600000||X!=null&&w>X)throw new N("Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#long-requests for more details");return 600000}async buildRequest(w,{retryCount:X=0}={}){let Z={...w},{method:$,path:z,query:W,defaultBaseURL:K}=Z,J=this.buildURL(z,W,K);if("timeout"in Z)A2("timeout",Z.timeout);Z.timeout=Z.timeout??this.timeout;let{bodyHeaders:Q,body:G}=this.buildBody({options:Z}),C=await this.buildHeaders({options:w,method:$,bodyHeaders:Q,retryCount:X});return{req:{method:$,headers:C,...Z.signal&&{signal:Z.signal},...globalThis.ReadableStream&&G instanceof globalThis.ReadableStream&&{duplex:"half"},...G&&{body:G},...this.fetchOptions??{},...Z.fetchOptions??{}},url:J,timeout:Z.timeout}}async buildHeaders({options:w,method:X,bodyHeaders:Z,retryCount:$}){let z={};if(this.idempotencyHeader&&X!=="get"){if(!w.idempotencyKey)w.idempotencyKey=this.defaultIdempotencyKey();z[this.idempotencyHeader]=w.idempotencyKey}let W=x([z,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String($),...w.timeout?{"X-Stainless-Timeout":String(Math.trunc(w.timeout/1000))}:{},...L2(),...this._options.dangerouslyAllowBrowser?{"anthropic-dangerous-direct-browser-access":"true"}:void 0,"anthropic-version":"2023-06-01"},await this.authHeaders(w),this._options.defaultHeaders,Z,w.headers]);return this.validateHeaders(W),W.values}_makeAbort(w){return()=>w.abort()}buildBody({options:{body:w,headers:X}}){if(!w)return{bodyHeaders:void 0,body:void 0};let Z=x([X]);if(ArrayBuffer.isView(w)||w instanceof ArrayBuffer||w instanceof DataView||typeof w==="string"&&Z.values.has("content-type")||globalThis.Blob&&w instanceof globalThis.Blob||w instanceof FormData||w instanceof URLSearchParams||globalThis.ReadableStream&&w instanceof globalThis.ReadableStream)return{bodyHeaders:void 0,body:w};else if(typeof w==="object"&&((Symbol.asyncIterator in w)||(Symbol.iterator in w)&&("next"in w)&&typeof w.next==="function"))return{bodyHeaders:void 0,body:K0(w)};else if(typeof w==="object"&&Z.values.get("content-type")==="application/x-www-form-urlencoded")return{bodyHeaders:{"content-type":"application/x-www-form-urlencoded"},body:this.stringifyQuery(w)};else return Y(this,y0,"f").call(this,{body:w,headers:Z})}}J2=H,y0=new WeakMap,K2=new WeakSet,J5=function(){return this.baseURL!=="https://api.anthropic.com"};H.Anthropic=J2;H.HUMAN_PROMPT=V5;H.AI_PROMPT=Q5;H.DEFAULT_TIMEOUT=600000;H.AnthropicError=N;H.APIError=M;H.APIConnectionError=t;H.APIConnectionTimeoutError=Ow;H.APIUserAbortError=S;H.NotFoundError=Aw;H.ConflictError=Tw;H.RateLimitError=Fw;H.BadRequestError=Hw;H.AuthenticationError=Dw;H.InternalServerError=Sw;H.PermissionDeniedError=Mw;H.UnprocessableEntityError=Ew;H.toFile=x0;class c extends H{constructor(){super(...arguments);this.completions=new Qw(this),this.messages=new Zw(this),this.models=new Gw(this),this.beta=new k(this)}}c.Completions=Qw;c.Messages=Zw;c.Models=Gw;c.Beta=k;var m=require("obsidian");async function N5(w,X){let Z=new m.Notice("Generating metadata with Claude...",0),$=new c({apiKey:X.anthropicApiKey,dangerouslyAllowBrowser:!0});try{let z=await $.messages.create({model:X.anthropicModel,max_tokens:2048,messages:[{role:"user",content:w}]});if(Z.hide(),z.content.length>0&&z.content[0].type==="text")return z.content[0].text;throw Error("No text content in response")}catch(z){if(Z.hide(),z instanceof Error)if(z.message.includes("authentication_error"))new m.Notice("Authentication failed. Please check your API key in Settings → Metadata Tool",8000);else if(z.message.includes("rate_limit"))new m.Notice("Rate limit exceeded. Please wait a moment and try again.",8000);else if(z.message.includes("overloaded"))new m.Notice("Claude API is currently overloaded. Please try again in a moment.",8000);else new m.Notice(`Error calling Claude API: ${z.message}`,8000);else new m.Notice("An unknown error occurred while calling Claude API",8000);throw console.error("Claude API error:",z),z}}function V2(w){let X=/[\u4e00-\u9fa5]|[a-zA-Z0-9]+|[.,!?;,。!?;#]|[\n]/g;return w.match(X)||[]}function xw(w){let X="";for(let Z=0;Z0?" ":"")+$}return X.trim()}async function Q2(w,X,Z=1000,$="head_only"){let z="";if(X!==null)z=await w.vault.read(X);else{let K=w.workspace.getActiveViewOfType(m.MarkdownView)?.editor;if(!K)return"";if(z=K.getSelection(),z=z.trim(),z.length===0)z=K.getValue()}if(z.length===0)return"";let W=V2(z);if(W.length>Z&&Z>0){if($==="head_tail"){let K=Math.round(Z*0.8),J=Math.round(Z*0.2),Q=W.slice(0,K),G=W.slice(-J);z=`${xw(Q)} +`);this.baseURL=W.baseURL,this.timeout=W.timeout??e0.DEFAULT_TIMEOUT,this.logger=W.logger??console;let Y="warn";this.logLevel=Y,this.logLevel=f0(W.logLevel,"ClientOptions.logLevel",this)??f0(ew("ANTHROPIC_LOG"),"process.env['ANTHROPIC_LOG']",this)??Y,this.fetchOptions=W.fetchOptions,this.maxRetries=W.maxRetries??2,this.fetch=W.fetch??D4(),V(this,S0,E4,"f"),this._options=W,this.apiKey=typeof X==="string"?X:null,this.authToken=Z}withOptions(w){return new this.constructor({...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.apiKey,authToken:this.authToken,...w})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:w,nulls:X}){if(w.get("x-api-key")||w.get("authorization"))return;if(this.apiKey&&w.get("x-api-key"))return;if(X.has("x-api-key"))return;if(this.authToken&&w.get("authorization"))return;if(X.has("authorization"))return;throw Error('Could not resolve authentication method. Expected either apiKey or authToken to be set. Or for one of the "X-Api-Key" or "Authorization" headers to be explicitly omitted')}async authHeaders(w){return C([await this.apiKeyAuth(w),await this.bearerAuth(w)])}async apiKeyAuth(w){if(this.apiKey==null)return;return C([{"X-Api-Key":this.apiKey}])}async bearerAuth(w){if(this.authToken==null)return;return C([{Authorization:`Bearer ${this.authToken}`}])}stringifyQuery(w){return Object.entries(w).filter(([X,Z])=>typeof Z<"u").map(([X,Z])=>{if(typeof Z==="string"||typeof Z==="number"||typeof Z==="boolean")return`${encodeURIComponent(X)}=${encodeURIComponent(Z)}`;if(Z===null)return`${encodeURIComponent(X)}=`;throw new N(`Cannot stringify type ${typeof Z}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`)}).join("&")}getUserAgent(){return`${this.constructor.name}/JS ${u}`}defaultIdempotencyKey(){return`stainless-node-retry-${I0()}`}makeStatusError(w,X,Z,$){return E.generate(w,X,Z,$)}buildURL(w,X,Z){let $=!K(this,r0,"m",a4).call(this)&&Z||this.baseURL,W=V4(w)?new URL(w):new URL($+($.endsWith("/")&&w.startsWith("/")?w.slice(1):w)),Y=this.defaultQuery();if(!Q4(Y))X={...Y,...X};if(typeof X==="object"&&X&&!Array.isArray(X))W.search=this.stringifyQuery(X);return W.toString()}_calculateNonstreamingTimeout(w){if(3600*w/128000>600)throw new N("Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#streaming-responses for more details");return 600000}async prepareOptions(w){}async prepareRequest(w,{url:X,options:Z}){}get(w,X){return this.methodRequest("get",w,X)}post(w,X){return this.methodRequest("post",w,X)}patch(w,X){return this.methodRequest("patch",w,X)}put(w,X){return this.methodRequest("put",w,X)}delete(w,X){return this.methodRequest("delete",w,X)}methodRequest(w,X,Z){return this.request(Promise.resolve(Z).then(($)=>{return{method:w,path:X,...$}}))}request(w,X=null){return new t(this,this.makeRequest(w,X,void 0))}async makeRequest(w,X,Z){let $=await w,W=$.maxRetries??this.maxRetries;if(X==null)X=W;await this.prepareOptions($);let{req:Y,url:z,timeout:J}=await this.buildRequest($,{retryCount:W-X});await this.prepareRequest(Y,{url:z,options:$});let Q="log_"+(Math.random()*16777216|0).toString(16).padStart(6,"0"),G=Z===void 0?"":`, retryOf: ${Z}`,x=Date.now();if(T(this).debug(`[${Q}] sending request`,_({retryOfRequestLogID:Z,method:$.method,url:z,options:$,headers:Y.headers})),$.signal?.aborted)throw new S;let F=new AbortController,O=await this.fetchWithTimeout(z,Y,J,F).catch(xw),A=Date.now();if(O instanceof globalThis.Error){let b=`retrying, ${X} attempts remaining`;if($.signal?.aborted)throw new S;let f=h(O)||/timed? ?out/i.test(String(O)+("cause"in O?String(O.cause):""));if(X)return T(this).info(`[${Q}] connection ${f?"timed out":"failed"} - ${b}`),T(this).debug(`[${Q}] connection ${f?"timed out":"failed"} (${b})`,_({retryOfRequestLogID:Z,url:z,durationMs:A-x,message:O.message})),this.retryRequest($,X,Z??Q);if(T(this).info(`[${Q}] connection ${f?"timed out":"failed"} - error; no more retries left`),T(this).debug(`[${Q}] connection ${f?"timed out":"failed"} (error; no more retries left)`,_({retryOfRequestLogID:Z,url:z,durationMs:A-x,message:O.message})),f)throw new Ow;throw new a({cause:O})}let o=[...O.headers.entries()].filter(([b])=>b==="request-id").map(([b,f])=>", "+b+": "+JSON.stringify(f)).join(""),Cw=`[${Q}${G}${o}] ${Y.method} ${z} ${O.ok?"succeeded":"failed"} with status ${O.status} in ${A-x}ms`;if(!O.ok){let b=await this.shouldRetry(O);if(X&&b){let w0=`retrying, ${X} attempts remaining`;return await F4(O.body),T(this).info(`${Cw} - ${w0}`),T(this).debug(`[${Q}] response error (${w0})`,_({retryOfRequestLogID:Z,url:O.url,status:O.status,headers:O.headers,durationMs:A-x})),this.retryRequest($,X,Z??Q,O.headers)}let f=b?"error; no more retries left":"error; not retryable";T(this).info(`${Cw} - ${f}`);let Y4=await O.text().catch((w0)=>xw(w0).message),K4=Z0(Y4),z4=K4?void 0:Y4;throw T(this).debug(`[${Q}] response error (${f})`,_({retryOfRequestLogID:Z,url:O.url,status:O.status,headers:O.headers,message:z4,durationMs:Date.now()-x})),this.makeStatusError(O.status,K4,z4,O.headers)}return T(this).info(Cw),T(this).debug(`[${Q}] response start`,_({retryOfRequestLogID:Z,url:O.url,status:O.status,headers:O.headers,durationMs:A-x})),{response:O,options:$,controller:F,requestLogID:Q,retryOfRequestLogID:Z,startTime:x}}getAPIList(w,X,Z){return this.requestAPIList(X,{method:"get",path:w,...Z})}requestAPIList(w,X){let Z=this.makeRequest(X,null,void 0);return new J0(this,Z,w)}async fetchWithTimeout(w,X,Z,$){let{signal:W,method:Y,...z}=X||{};if(W)W.addEventListener("abort",()=>$.abort());let J=setTimeout(()=>$.abort(),Z),Q=globalThis.ReadableStream&&z.body instanceof globalThis.ReadableStream||typeof z.body==="object"&&z.body!==null&&Symbol.asyncIterator in z.body,G={signal:$.signal,...Q?{duplex:"half"}:{},method:"GET",...z};if(Y)G.method=Y.toUpperCase();try{return await this.fetch.call(void 0,w,G)}finally{clearTimeout(J)}}async shouldRetry(w){let X=w.headers.get("x-should-retry");if(X==="true")return!0;if(X==="false")return!1;if(w.status===408)return!0;if(w.status===409)return!0;if(w.status===429)return!0;if(w.status>=500)return!0;return!1}async retryRequest(w,X,Z,$){let W,Y=$?.get("retry-after-ms");if(Y){let J=parseFloat(Y);if(!Number.isNaN(J))W=J}let z=$?.get("retry-after");if(z&&!W){let J=parseFloat(z);if(!Number.isNaN(J))W=J*1000;else W=Date.parse(z)-Date.now()}if(!(W&&0<=W&&W<60000)){let J=w.maxRetries??this.maxRetries;W=this.calculateDefaultRetryTimeoutMillis(X,J)}return await C4(W),this.makeRequest(w,X-1,Z)}calculateDefaultRetryTimeoutMillis(w,X){let W=X-w,Y=Math.min(0.5*Math.pow(2,W),8),z=1-Math.random()*0.25;return Y*z*1000}calculateNonstreamingTimeout(w,X){if(3600000*w/128000>600000||X!=null&&w>X)throw new N("Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#long-requests for more details");return 600000}async buildRequest(w,{retryCount:X=0}={}){let Z={...w},{method:$,path:W,query:Y,defaultBaseURL:z}=Z,J=this.buildURL(W,Y,z);if("timeout"in Z)G4("timeout",Z.timeout);Z.timeout=Z.timeout??this.timeout;let{bodyHeaders:Q,body:G}=this.buildBody({options:Z}),x=await this.buildHeaders({options:w,method:$,bodyHeaders:Q,retryCount:X});return{req:{method:$,headers:x,...Z.signal&&{signal:Z.signal},...globalThis.ReadableStream&&G instanceof globalThis.ReadableStream&&{duplex:"half"},...G&&{body:G},...this.fetchOptions??{},...Z.fetchOptions??{}},url:J,timeout:Z.timeout}}async buildHeaders({options:w,method:X,bodyHeaders:Z,retryCount:$}){let W={};if(this.idempotencyHeader&&X!=="get"){if(!w.idempotencyKey)w.idempotencyKey=this.defaultIdempotencyKey();W[this.idempotencyHeader]=w.idempotencyKey}let Y=C([W,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String($),...w.timeout?{"X-Stainless-Timeout":String(Math.trunc(w.timeout/1000))}:{},...q4(),...this._options.dangerouslyAllowBrowser?{"anthropic-dangerous-direct-browser-access":"true"}:void 0,"anthropic-version":"2023-06-01"},await this.authHeaders(w),this._options.defaultHeaders,Z,w.headers]);return this.validateHeaders(Y),Y.values}buildBody({options:{body:w,headers:X}}){if(!w)return{bodyHeaders:void 0,body:void 0};let Z=C([X]);if(ArrayBuffer.isView(w)||w instanceof ArrayBuffer||w instanceof DataView||typeof w==="string"&&Z.values.has("content-type")||globalThis.Blob&&w instanceof globalThis.Blob||w instanceof FormData||w instanceof URLSearchParams||globalThis.ReadableStream&&w instanceof globalThis.ReadableStream)return{bodyHeaders:void 0,body:w};else if(typeof w==="object"&&((Symbol.asyncIterator in w)||(Symbol.iterator in w)&&("next"in w)&&typeof w.next==="function"))return{bodyHeaders:void 0,body:$0(w)};else return K(this,S0,"f").call(this,{body:w,headers:Z})}}e0=q,S0=new WeakMap,r0=new WeakSet,a4=function(){return this.baseURL!=="https://api.anthropic.com"};q.Anthropic=e0;q.HUMAN_PROMPT=t4;q.AI_PROMPT=s4;q.DEFAULT_TIMEOUT=600000;q.AnthropicError=N;q.APIError=E;q.APIConnectionError=a;q.APIConnectionTimeoutError=Ow;q.APIUserAbortError=S;q.NotFoundError=Dw;q.ConflictError=Fw;q.RateLimitError=Mw;q.BadRequestError=Hw;q.AuthenticationError=Uw;q.InternalServerError=Aw;q.PermissionDeniedError=qw;q.UnprocessableEntityError=Ew;q.toFile=V0;class c extends q{constructor(){super(...arguments);this.completions=new Vw(this),this.messages=new Zw(this),this.models=new Qw(this),this.beta=new k(this)}}c.Completions=Vw;c.Messages=Zw;c.Models=Qw;c.Beta=k;var m=require("obsidian");async function r4(w,X){let Z=new m.Notice("Generating metadata with Claude...",0),$=new c({apiKey:X.anthropicApiKey,dangerouslyAllowBrowser:!0});try{let W=await $.messages.create({model:X.anthropicModel,max_tokens:2048,messages:[{role:"user",content:w}]});if(Z.hide(),W.content.length>0&&W.content[0].type==="text")return W.content[0].text;throw Error("No text content in response")}catch(W){if(Z.hide(),W instanceof Error)if(W.message.includes("authentication_error"))new m.Notice("Authentication failed. Please check your API key in Settings → Metadata Tool",8000);else if(W.message.includes("rate_limit"))new m.Notice("Rate limit exceeded. Please wait a moment and try again.",8000);else if(W.message.includes("overloaded"))new m.Notice("Claude API is currently overloaded. Please try again in a moment.",8000);else new m.Notice(`Error calling Claude API: ${W.message}`,8000);else new m.Notice("An unknown error occurred while calling Claude API",8000);throw console.error("Claude API error:",W),W}}function w4(w){let X=/[\u4e00-\u9fa5]|[a-zA-Z0-9]+|[.,!?;,。!?;#]|[\n]/g;return w.match(X)||[]}function Nw(w){let X="";for(let Z=0;Z0?" ":"")+$}return X.trim()}async function X4(w,X,Z=1000,$="head_only"){let W="";if(X!==null)W=await w.vault.read(X);else{let z=w.workspace.getActiveViewOfType(m.MarkdownView)?.editor;if(!z)return"";if(W=z.getSelection(),W=W.trim(),W.length===0)W=z.getValue()}if(W.length===0)return"";let Y=w4(W);if(Y.length>Z&&Z>0){if($==="head_tail"){let z=Math.round(Z*0.8),J=Math.round(Z*0.2),Q=Y.slice(0,z),G=Y.slice(-J);W=`${Nw(Q)} ... -${xw(G)}`}else if($==="head_only")z=`${xw(W.slice(0,Z))}...`;else if($==="heading"){let K=z.split(` -`);K=K.filter((C)=>C.trim()!=="");let J=[],Q=!1;for(let C of K)if(C.startsWith("#"))J.push(C),Q=!0;else if(Q&&C.trim()!==""){let T=V2(C);J.push(`${xw(T.slice(0,30))}...`),Q=!1}z=J.join(` -`);let G=V2(z);if(G.length>Z)z=xw(G.slice(0,Z));else{let C=Z-G.length,T=`${xw(W.slice(0,C))}...`;z=`Outline: -${z} +${Nw(G)}`}else if($==="head_only")W=`${Nw(Y.slice(0,Z))}...`;else if($==="heading"){let z=W.split(` +`);z=z.filter((x)=>x.trim()!=="");let J=[],Q=!1;for(let x of z)if(x.startsWith("#"))J.push(x),Q=!0;else if(Q&&x.trim()!==""){let F=w4(x);J.push(`${Nw(F.slice(0,30))}...`),Q=!1}W=J.join(` +`);let G=w4(W);if(G.length>Z)W=Nw(G.slice(0,Z));else{let x=Z-G.length,F=`${Nw(Y.slice(0,x))}...`;W=`Outline: +${W} -Body: ${T}`}}}return z}function f0(w,X,Z,$,z){X.fileManager.processFrontMatter(w,(W)=>{if($===void 0||$===null)return;if(z==="append"){let K=W[Z];if(typeof $==="string"){if(K===void 0)K="";W[Z]=K+$}else if(Array.isArray($)){if(K===void 0)K=[];let J=K.concat($),Q=Array.from(new Set(J));W[Z]=Q}}else if(z==="update")W[Z]=$;else{if(W[Z]!==void 0)return;W[Z]=$}})}async function G5(w,X){let Z=w.workspace.getActiveFile();if(!Z){new Cw.Notice("Please open a file first");return}if(Z.extension!=="md"){new Cw.Notice("Current file is not a markdown file");return}if(!X.anthropicApiKey||X.anthropicApiKey===""){new Cw.Notice("Please configure your Anthropic API key in Settings → Metadata Tool",8000);return}let z=w.metadataCache.getFileCache(Z)?.frontmatter||{},W=!1,K=X.updateMethod==="always_regenerate",J=!z[X.tagsFieldName]||z[X.tagsFieldName]?.length===0||!z[X.descriptionFieldName]||z[X.descriptionFieldName]?.trim()===""||X.enableTitle&&(!z[X.titleFieldName]||z[X.titleFieldName]?.trim()==="")||K;if(console.log("Metadata generation check:",{needsMetadata:J,hasTags:!!z[X.tagsFieldName],hasDescription:!!z[X.descriptionFieldName],hasTitle:!!z[X.titleFieldName],updateAll:K}),J)try{await $1(Z,w,X,z,K),W=!0}catch(Q){console.error("Error generating metadata with Claude:",Q);return}if(W)new Cw.Notice("Metadata updated successfully")}async function $1(w,X,Z,$,z=!1){let W="";if(Z.truncateContent)W=await Q2(X,w,Z.maxTokens,Z.truncateMethod);else W=await Q2(X,w,-1,"head_only");console.log("Content extracted (length):",W.length),console.log("Content preview:",W.substring(0,200));let K=`I need to generate tags, description, and title for the following article. Requirements: +Body: ${F}`}}}return W}function L0(w,X,Z,$,W){X.fileManager.processFrontMatter(w,(Y)=>{if($===void 0||$===null)return;if(W==="append"){let z=Y[Z];if(typeof $==="string"){if(z===void 0)z="";Y[Z]=z+$}else if(Array.isArray($)){if(z===void 0)z=[];let J=z.concat($),Q=Array.from(new Set(J));Y[Z]=Q}}else if(W==="update")Y[Z]=$;else{if(Y[Z]!==void 0)return;Y[Z]=$}})}async function e4(w,X){let Z=w.workspace.getActiveFile();if(!Z){new Gw.Notice("Please open a file first");return}if(Z.extension!=="md"){new Gw.Notice("Current file is not a markdown file");return}if(!X.anthropicApiKey||X.anthropicApiKey===""){new Gw.Notice("Please configure your Anthropic API key in Settings → Metadata Tool",8000);return}let W=w.metadataCache.getFileCache(Z)?.frontmatter||{},Y=!1,z=X.updateMethod==="always_regenerate",J=!W[X.tagsFieldName]||W[X.tagsFieldName]?.length===0||!W[X.descriptionFieldName]||W[X.descriptionFieldName]?.trim()===""||X.enableTitle&&(!W[X.titleFieldName]||W[X.titleFieldName]?.trim()==="")||z;if(console.log("Metadata generation check:",{needsMetadata:J,hasTags:!!W[X.tagsFieldName],hasDescription:!!W[X.descriptionFieldName],hasTitle:!!W[X.titleFieldName],updateAll:z}),J)try{await c1(Z,w,X,W,z),Y=!0}catch(Q){console.error("Error generating metadata with Claude:",Q);return}if(Y)new Gw.Notice("Metadata updated successfully")}async function c1(w,X,Z,$,W=!1){let Y="";if(Z.truncateContent)Y=await X4(X,w,Z.maxTokens,Z.truncateMethod);else Y=await X4(X,w,-1,"head_only");console.log("Content extracted (length):",Y.length),console.log("Content preview:",Y.substring(0,200));let z=`I need to generate tags, description, and title for the following article. Requirements: 1. Tags: ${Z.tagsPrompt} @@ -62,4 +62,4 @@ Please return in the following JSON format: Article content: -${W}`,J;try{console.log("Calling Claude with prompt..."),J=await N5(K,Z),console.log("Claude response received:",J)}catch(G){console.error("Error calling Claude:",G);return}if(!J){console.log("No response from Claude");return}J=J.replace(/`/g,"");let Q={};try{let G=J.match(/{[\s\S]*}/);if(G)console.log("Found JSON in response:",G[0]),Q=JSON.parse(G[0]),console.log("Parsed metadata:",Q);else console.log("No JSON found in response")}catch(G){new Cw.Notice(`Error parsing Claude response: ${G}`),console.error("Parse error:",G);return}if(Q.tags){console.log("Updating tags:",Q.tags);let G=Q.tags.split(",").map((C)=>C.trim());f0(w,X,Z.tagsFieldName,G,"append")}if(Q.description){let G=$[Z.descriptionFieldName],C=!G||typeof G==="string"&&G.trim()==="";f0(w,X,Z.descriptionFieldName,Q.description,z||C?"update":"keep")}if(Z.enableTitle&&Q.title){let G=Q.title.trim();if(G.startsWith('"')&&G.endsWith('"')||G.startsWith("'")&&G.endsWith("'"))G=G.substring(1,G.length-1);let C=$[Z.titleFieldName],T=!C||typeof C==="string"&&C.trim()==="";f0(w,X,Z.titleFieldName,G,z||T?"update":"keep")}}var N2={anthropicApiKey:"",anthropicModel:"claude-sonnet-4-5-20250929",tagsFieldName:"tags",descriptionFieldName:"description",titleFieldName:"title",enableTitle:!0,truncateContent:!0,maxTokens:1000,truncateMethod:"head_only",updateMethod:"preserve_existing",tagsPrompt:"Select 3-5 relevant tags in lowercase with hyphens instead of spaces (e.g., 'knowledge-management', 'note-taking')",descriptionPrompt:"Write a concise but useful summary in 1-2 sentences that captures the main purpose and key points",titlePrompt:"Create a simple, concise title with minimal adjectives that clearly states the topic"};var D=require("obsidian");class G2 extends D.PluginSettingTab{plugin;constructor(w,X){super(w,X);this.plugin=X}display(){let{containerEl:w}=this;w.empty(),new D.Setting(w).setName("Anthropic API Settings").setHeading(),new D.Setting(w).setName("API Key").setDesc("Your Anthropic API key. Get one at console.anthropic.com (requires an account with billing enabled)").addText((z)=>{z.setPlaceholder("sk-ant-...").setValue(this.plugin.settings.anthropicApiKey).onChange(async(W)=>{this.plugin.settings.anthropicApiKey=W,await this.plugin.saveSettings()}),z.inputEl.type="password"}),new D.Setting(w).setName("Model").setDesc("Claude model to use").addDropdown((z)=>z.addOption("claude-sonnet-4-5-20250929","Claude Sonnet 4.5").addOption("claude-opus-4-5-20251101","Claude Opus 4.5").addOption("claude-haiku-4-5-20251001","Claude Haiku 4.5").setValue(this.plugin.settings.anthropicModel).onChange(async(W)=>{this.plugin.settings.anthropicModel=W,await this.plugin.saveSettings()})),new D.Setting(w).setName("Update Settings").setHeading(),new D.Setting(w).setName("Update Method").setDesc("Always Regenerate: re-run Claude on every command; Preserve Existing: only generate empty fields").addDropdown((z)=>z.addOption("always_regenerate","Always Regenerate").addOption("preserve_existing","Preserve Existing").setValue(this.plugin.settings.updateMethod).onChange(async(W)=>{this.plugin.settings.updateMethod=W,await this.plugin.saveSettings()})),new D.Setting(w).setName("Truncate Content").setDesc("Limit content sent to API to reduce costs").addToggle((z)=>z.setValue(this.plugin.settings.truncateContent).onChange(async(W)=>{this.plugin.settings.truncateContent=W,await this.plugin.saveSettings(),X.setDisabled(!W),Z.setDisabled(!W)}));let X=new D.Setting(w).setName("Max Tokens").setDesc("Maximum content length in tokens").addText((z)=>z.setValue(this.plugin.settings.maxTokens.toString()).onChange(async(W)=>{this.plugin.settings.maxTokens=parseInt(W,10)||1000,await this.plugin.saveSettings()})),Z=new D.Setting(w).setName("Truncate Method").setDesc("How to truncate long content").addDropdown((z)=>z.addOption("head_only","Beginning Only").addOption("head_tail","Beginning + End").addOption("heading","Headings + Summaries").setValue(this.plugin.settings.truncateMethod).onChange(async(W)=>{this.plugin.settings.truncateMethod=W,await this.plugin.saveSettings()}));X.setDisabled(!this.plugin.settings.truncateContent),Z.setDisabled(!this.plugin.settings.truncateContent),new D.Setting(w).setName("Tags Settings").setHeading(),new D.Setting(w).setName("Tags Field Name").setDesc("Frontmatter field name for tags").addText((z)=>z.setValue(this.plugin.settings.tagsFieldName).onChange(async(W)=>{this.plugin.settings.tagsFieldName=W||"tags",await this.plugin.saveSettings()})),new D.Setting(w).setName("Tags Prompt").setDesc("Instructions for tag generation").addTextArea((z)=>{z.setValue(this.plugin.settings.tagsPrompt).onChange(async(W)=>{this.plugin.settings.tagsPrompt=W,await this.plugin.saveSettings()}),z.inputEl.setAttr("rows","3")}),new D.Setting(w).setName("Description Settings").setHeading(),new D.Setting(w).setName("Description Field Name").setDesc("Frontmatter field name for description").addText((z)=>z.setValue(this.plugin.settings.descriptionFieldName).onChange(async(W)=>{this.plugin.settings.descriptionFieldName=W||"description",await this.plugin.saveSettings()})),new D.Setting(w).setName("Description Prompt").setDesc("Instructions for description generation").addTextArea((z)=>{z.setValue(this.plugin.settings.descriptionPrompt).onChange(async(W)=>{this.plugin.settings.descriptionPrompt=W,await this.plugin.saveSettings()}),z.inputEl.setAttr("rows","3")}),new D.Setting(w).setName("Title Settings").setHeading(),new D.Setting(w).setName("Enable Title").setDesc("Generate title metadata").addToggle((z)=>z.setValue(this.plugin.settings.enableTitle).onChange(async(W)=>{this.plugin.settings.enableTitle=W,await this.plugin.saveSettings(),$.setDisabled(!W)})),new D.Setting(w).setName("Title Field Name").setDesc("Frontmatter field name for title").addText((z)=>z.setValue(this.plugin.settings.titleFieldName).onChange(async(W)=>{this.plugin.settings.titleFieldName=W||"title",await this.plugin.saveSettings()}));let $=new D.Setting(w).setName("Title Prompt").setDesc("Instructions for title generation").addTextArea((z)=>{z.setValue(this.plugin.settings.titlePrompt).onChange(async(W)=>{this.plugin.settings.titlePrompt=W,await this.plugin.saveSettings()}),z.inputEl.setAttr("rows","3")});$.setDisabled(!this.plugin.settings.enableTitle)}}class x2 extends x5.Plugin{settings=N2;async onload(){await this.loadSettings(),this.addCommand({id:"generate-metadata",name:"Generate metadata for current note",callback:async()=>{await G5(this.app,this.settings)}}),this.addSettingTab(new G2(this.app,this))}async loadSettings(){let w=await this.loadData();if(w?.updateMethod==="force"||w?.updateMethod==="update_all")w.updateMethod="always_regenerate";else if(w?.updateMethod==="no-llm"||w?.updateMethod==="empty_only")w.updateMethod="preserve_existing";this.settings=Object.assign({},N2,w)}async saveSettings(){await this.saveData(this.settings)}} +${Y}`,J;try{console.log("Calling Claude with prompt..."),J=await r4(z,Z),console.log("Claude response received:",J)}catch(G){console.error("Error calling Claude:",G);return}if(!J){console.log("No response from Claude");return}J=J.replace(/`/g,"");let Q={};try{let G=J.match(/{[\s\S]*}/);if(G)console.log("Found JSON in response:",G[0]),Q=JSON.parse(G[0]),console.log("Parsed metadata:",Q);else console.log("No JSON found in response")}catch(G){new Gw.Notice(`Error parsing Claude response: ${G}`),console.error("Parse error:",G);return}if(Q.tags){console.log("Updating tags:",Q.tags);let G=Q.tags.split(",").map((x)=>x.trim());L0(w,X,Z.tagsFieldName,G,"append")}if(Q.description){let G=$[Z.descriptionFieldName],x=!G||typeof G==="string"&&G.trim()==="";L0(w,X,Z.descriptionFieldName,Q.description,W||x?"update":"keep")}if(Z.enableTitle&&Q.title){let G=Q.title.trim();if(G.startsWith('"')&&G.endsWith('"')||G.startsWith("'")&&G.endsWith("'"))G=G.substring(1,G.length-1);let x=$[Z.titleFieldName],F=!x||typeof x==="string"&&x.trim()==="";L0(w,X,Z.titleFieldName,G,W||F?"update":"keep")}}var Z4={anthropicApiKey:"",anthropicModel:"claude-sonnet-4-6",tagsFieldName:"tags",descriptionFieldName:"description",titleFieldName:"title",enableTitle:!0,truncateContent:!0,maxTokens:1000,truncateMethod:"head_only",updateMethod:"preserve_existing",tagsPrompt:"Select 3-5 relevant tags in lowercase with hyphens instead of spaces (e.g., 'knowledge-management', 'note-taking')",descriptionPrompt:"Write a concise but useful summary in 1-2 sentences that captures the main purpose and key points",titlePrompt:"Create a simple, concise title with minimal adjectives that clearly states the topic"};var D=require("obsidian");class $4 extends D.PluginSettingTab{plugin;constructor(w,X){super(w,X);this.plugin=X}display(){let{containerEl:w}=this;w.empty(),new D.Setting(w).setName("Anthropic API Settings").setHeading(),new D.Setting(w).setName("API Key").setDesc("Your Anthropic API key. Get one at console.anthropic.com (requires an account with billing enabled)").addText((W)=>{W.setPlaceholder("sk-ant-...").setValue(this.plugin.settings.anthropicApiKey).onChange(async(Y)=>{this.plugin.settings.anthropicApiKey=Y,await this.plugin.saveSettings()}),W.inputEl.type="password"}),new D.Setting(w).setName("Model").setDesc("Claude model to use").addDropdown((W)=>W.addOption("claude-sonnet-4-6","Claude Sonnet 4.6").addOption("claude-opus-4-6","Claude Opus 4.6").addOption("claude-haiku-4-5-20251001","Claude Haiku 4.5").addOption("claude-sonnet-4-5-20250929","Claude Sonnet 4.5 (legacy)").addOption("claude-opus-4-5-20251101","Claude Opus 4.5 (legacy)").setValue(this.plugin.settings.anthropicModel).onChange(async(Y)=>{this.plugin.settings.anthropicModel=Y,await this.plugin.saveSettings()})),new D.Setting(w).setName("Update Settings").setHeading(),new D.Setting(w).setName("Update Method").setDesc("Always Regenerate: re-run Claude on every command; Preserve Existing: only generate empty fields").addDropdown((W)=>W.addOption("always_regenerate","Always Regenerate").addOption("preserve_existing","Preserve Existing").setValue(this.plugin.settings.updateMethod).onChange(async(Y)=>{this.plugin.settings.updateMethod=Y,await this.plugin.saveSettings()})),new D.Setting(w).setName("Truncate Content").setDesc("Limit content sent to API to reduce costs").addToggle((W)=>W.setValue(this.plugin.settings.truncateContent).onChange(async(Y)=>{this.plugin.settings.truncateContent=Y,await this.plugin.saveSettings(),X.setDisabled(!Y),Z.setDisabled(!Y)}));let X=new D.Setting(w).setName("Max Tokens").setDesc("Maximum content length in tokens").addText((W)=>W.setValue(this.plugin.settings.maxTokens.toString()).onChange(async(Y)=>{this.plugin.settings.maxTokens=parseInt(Y,10)||1000,await this.plugin.saveSettings()})),Z=new D.Setting(w).setName("Truncate Method").setDesc("How to truncate long content").addDropdown((W)=>W.addOption("head_only","Beginning Only").addOption("head_tail","Beginning + End").addOption("heading","Headings + Summaries").setValue(this.plugin.settings.truncateMethod).onChange(async(Y)=>{this.plugin.settings.truncateMethod=Y,await this.plugin.saveSettings()}));X.setDisabled(!this.plugin.settings.truncateContent),Z.setDisabled(!this.plugin.settings.truncateContent),new D.Setting(w).setName("Tags Settings").setHeading(),new D.Setting(w).setName("Tags Field Name").setDesc("Frontmatter field name for tags").addText((W)=>W.setValue(this.plugin.settings.tagsFieldName).onChange(async(Y)=>{this.plugin.settings.tagsFieldName=Y||"tags",await this.plugin.saveSettings()})),new D.Setting(w).setName("Tags Prompt").setDesc("Instructions for tag generation").addTextArea((W)=>{W.setValue(this.plugin.settings.tagsPrompt).onChange(async(Y)=>{this.plugin.settings.tagsPrompt=Y,await this.plugin.saveSettings()}),W.inputEl.setAttr("rows","3")}),new D.Setting(w).setName("Description Settings").setHeading(),new D.Setting(w).setName("Description Field Name").setDesc("Frontmatter field name for description").addText((W)=>W.setValue(this.plugin.settings.descriptionFieldName).onChange(async(Y)=>{this.plugin.settings.descriptionFieldName=Y||"description",await this.plugin.saveSettings()})),new D.Setting(w).setName("Description Prompt").setDesc("Instructions for description generation").addTextArea((W)=>{W.setValue(this.plugin.settings.descriptionPrompt).onChange(async(Y)=>{this.plugin.settings.descriptionPrompt=Y,await this.plugin.saveSettings()}),W.inputEl.setAttr("rows","3")}),new D.Setting(w).setName("Title Settings").setHeading(),new D.Setting(w).setName("Enable Title").setDesc("Generate title metadata").addToggle((W)=>W.setValue(this.plugin.settings.enableTitle).onChange(async(Y)=>{this.plugin.settings.enableTitle=Y,await this.plugin.saveSettings(),$.setDisabled(!Y)})),new D.Setting(w).setName("Title Field Name").setDesc("Frontmatter field name for title").addText((W)=>W.setValue(this.plugin.settings.titleFieldName).onChange(async(Y)=>{this.plugin.settings.titleFieldName=Y||"title",await this.plugin.saveSettings()}));let $=new D.Setting(w).setName("Title Prompt").setDesc("Instructions for title generation").addTextArea((W)=>{W.setValue(this.plugin.settings.titlePrompt).onChange(async(Y)=>{this.plugin.settings.titlePrompt=Y,await this.plugin.saveSettings()}),W.inputEl.setAttr("rows","3")});$.setDisabled(!this.plugin.settings.enableTitle)}}class W4 extends w1.Plugin{settings=Z4;async onload(){await this.loadSettings(),this.addCommand({id:"generate-metadata",name:"Generate metadata for current note",callback:async()=>{await e4(this.app,this.settings)}}),this.addSettingTab(new $4(this.app,this))}async loadSettings(){let w=await this.loadData();if(w?.updateMethod==="force"||w?.updateMethod==="update_all")w.updateMethod="always_regenerate";else if(w?.updateMethod==="no-llm"||w?.updateMethod==="empty_only")w.updateMethod="preserve_existing";if(w?.anthropicModel==="claude-sonnet-4-5-20250929")w.anthropicModel="claude-sonnet-4-6";this.settings=Object.assign({},Z4,w)}async saveSettings(){await this.saveData(this.settings)}} diff --git a/src/main.ts b/src/main.ts index 982581d..1755b3b 100644 --- a/src/main.ts +++ b/src/main.ts @@ -36,6 +36,11 @@ export default class MetadataToolPlugin extends Plugin { loadedSettings.updateMethod = "preserve_existing"; } + // Migrate default model to Claude 4.6 + if (loadedSettings?.anthropicModel === "claude-sonnet-4-5-20250929") { + loadedSettings.anthropicModel = "claude-sonnet-4-6"; + } + this.settings = Object.assign({}, DEFAULT_SETTINGS, loadedSettings); } diff --git a/src/settings.ts b/src/settings.ts index da6a41a..807b116 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -26,7 +26,7 @@ export interface MetadataToolSettings { export const DEFAULT_SETTINGS: MetadataToolSettings = { anthropicApiKey: "", - anthropicModel: "claude-sonnet-4-5-20250929", + anthropicModel: "claude-sonnet-4-6", tagsFieldName: "tags", descriptionFieldName: "description", diff --git a/src/settingsTab.ts b/src/settingsTab.ts index dea8be5..64c493b 100644 --- a/src/settingsTab.ts +++ b/src/settingsTab.ts @@ -37,9 +37,11 @@ export class MetadataToolSettingTab extends PluginSettingTab { .setDesc("Claude model to use") .addDropdown((dropdown) => dropdown - .addOption("claude-sonnet-4-5-20250929", "Claude Sonnet 4.5") - .addOption("claude-opus-4-5-20251101", "Claude Opus 4.5") + .addOption("claude-sonnet-4-6", "Claude Sonnet 4.6") + .addOption("claude-opus-4-6", "Claude Opus 4.6") .addOption("claude-haiku-4-5-20251001", "Claude Haiku 4.5") + .addOption("claude-sonnet-4-5-20250929", "Claude Sonnet 4.5 (legacy)") + .addOption("claude-opus-4-5-20251101", "Claude Opus 4.5 (legacy)") .setValue(this.plugin.settings.anthropicModel) .onChange(async (value) => { this.plugin.settings.anthropicModel = value; From 01fc1a79fab81249fbf244b218dcc862c5df2a79 Mon Sep 17 00:00:00 2001 From: Mark Ayers Date: Mon, 23 Feb 2026 13:30:02 -0500 Subject: [PATCH 2/2] chore: add deploy script to copy plugin to notes vault Co-Authored-By: Claude Opus 4.6 --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 498e833..f8d5a5e 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "format": "biome format --write .", "format:check": "biome format .", "test": "bun test", + "deploy": "cp main.js manifest.json ~/source/mine/notes/.obsidian/plugins/metadator/", "validate": "bun run scripts/validate-plugin.ts", "version": "bun run version-bump.ts" },